Files
moltbot/src/plugins/runtime/runtime-system.ts
2026-05-02 14:52:18 +01:00

47 lines
1.7 KiB
TypeScript

import { requestHeartbeat } from "../../infra/heartbeat-wake.js";
import { enqueueSystemEvent } from "../../infra/system-events.js";
import { runCommandWithTimeout } from "../../process/exec.js";
import { createLazyRuntimeMethod, createLazyRuntimeModule } from "../../shared/lazy-runtime.js";
import { formatNativeDependencyHint } from "./native-deps.js";
import type { RunHeartbeatOnceOptions } from "./types-core.js";
import type { PluginRuntime } from "./types.js";
const loadHeartbeatRunnerRuntime = createLazyRuntimeModule(
() => import("../../infra/heartbeat-runner.js"),
);
const runHeartbeatOnceInternal = createLazyRuntimeMethod(
loadHeartbeatRunnerRuntime,
(runtime) => runtime.runHeartbeatOnce,
);
export function createRuntimeSystem(): PluginRuntime["system"] {
const requestHeartbeatNow: PluginRuntime["system"]["requestHeartbeatNow"] = (opts) =>
requestHeartbeat({
source: opts?.source ?? "other",
intent: opts?.intent ?? "immediate",
reason: opts?.reason,
coalesceMs: opts?.coalesceMs,
agentId: opts?.agentId,
sessionKey: opts?.sessionKey,
heartbeat: opts?.heartbeat,
});
return {
enqueueSystemEvent,
requestHeartbeat,
requestHeartbeatNow,
runHeartbeatOnce: (opts?: RunHeartbeatOnceOptions) => {
// Destructure to forward only the plugin-safe subset; prevent cfg/deps injection at runtime.
const { reason, agentId, sessionKey, heartbeat } = opts ?? {};
return runHeartbeatOnceInternal({
reason,
agentId,
sessionKey,
heartbeat: heartbeat ? { target: heartbeat.target } : undefined,
});
},
runCommandWithTimeout,
formatNativeDependencyHint,
};
}