@moxt-ai/mobius 0.0.385 → 0.0.387
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-OXXJU5VO.js → chunk-A62FEGIN.js} +20 -28
- package/dist/{chunk-OXXJU5VO.js.map → chunk-A62FEGIN.js.map} +3 -3
- package/dist/{chunk-VNT3WUWZ.js → chunk-S7PKNDIS.js} +2 -2
- package/dist/{chunk-VNT3WUWZ.js.map → chunk-S7PKNDIS.js.map} +1 -1
- package/dist/cli/handler/daemon/index.d.ts.map +1 -1
- package/dist/cli/handler/daemon/index.js +9 -4
- package/dist/cli/handler/daemon/index.js.map +1 -1
- package/dist/cli/handler/daemon/quit.d.ts.map +1 -1
- package/dist/cli/handler/daemon/quit.js +5 -4
- package/dist/cli/handler/daemon/quit.js.map +1 -1
- package/dist/cli/handler/daemon/release.js +1 -1
- package/dist/cli/handler/daemon/start.d.ts.map +1 -1
- package/dist/cli/handler/daemon/start.js +3 -3
- package/dist/cli/handler/daemon/start.js.map +1 -1
- package/dist/cli/handler/daemon/upgrade.d.ts.map +1 -1
- package/dist/cli/handler/daemon/upgrade.js +8 -24
- package/dist/cli/handler/daemon/upgrade.js.map +1 -1
- package/dist/cli/handler/pair/pair.js +3 -3
- package/dist/cli/handler/pair/pair.js.map +1 -1
- package/dist/cli/handler/pair/remove.js +1 -1
- package/dist/cli/handler/pair/stop.js +1 -1
- package/dist/cli/handler/version/index.d.ts.map +1 -1
- package/dist/cli/handler/version/index.js +6 -2
- package/dist/cli/handler/version/index.js.map +1 -1
- package/dist/{cli-WDPLOVF3.js → cli-43LPJ5ID.js} +412 -1143
- package/dist/cli-43LPJ5ID.js.map +7 -0
- package/dist/cli.js +1998 -6
- package/dist/cli.js.map +4 -4
- package/dist/daemon/control/protocol.d.ts +1 -133
- package/dist/daemon/control/protocol.d.ts.map +1 -1
- package/dist/daemon/control/protocol.js +4 -63
- package/dist/daemon/control/protocol.js.map +1 -1
- package/dist/daemon/lifecycle/daemon-client.d.ts +8 -0
- package/dist/daemon/lifecycle/daemon-client.d.ts.map +1 -0
- package/dist/daemon/lifecycle/daemon-client.js +154 -0
- package/dist/daemon/lifecycle/daemon-client.js.map +1 -0
- package/dist/daemon/lifecycle/{worker.d.ts → daemon.d.ts} +2 -2
- package/dist/daemon/lifecycle/daemon.d.ts.map +1 -0
- package/dist/daemon/lifecycle/daemon.js +266 -0
- package/dist/daemon/lifecycle/daemon.js.map +1 -0
- package/dist/daemon/lifecycle/unhandled-rejection.d.ts +1 -2
- package/dist/daemon/lifecycle/unhandled-rejection.d.ts.map +1 -1
- package/dist/daemon/lifecycle/unhandled-rejection.js +4 -7
- package/dist/daemon/lifecycle/unhandled-rejection.js.map +1 -1
- package/dist/daemon/upgrades/data.d.ts +0 -1
- package/dist/daemon/upgrades/data.d.ts.map +1 -1
- package/dist/daemon/upgrades/data.js +0 -5
- package/dist/daemon/upgrades/data.js.map +1 -1
- package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
- package/dist/engine/runtime/relay/session-event-publisher.js +6 -5
- package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
- package/dist/engine/util/process/platform/windows.d.ts.map +1 -1
- package/dist/engine/util/process/platform/windows.js +7 -4
- package/dist/engine/util/process/platform/windows.js.map +1 -1
- package/dist/engine.js +2 -2
- package/dist/storage/daemon/daemon-lock.d.ts +9 -0
- package/dist/storage/daemon/daemon-lock.d.ts.map +1 -0
- package/dist/storage/daemon/{manager-lock.js → daemon-lock.js} +22 -7
- package/dist/storage/daemon/daemon-lock.js.map +1 -0
- package/dist/storage/state-root-layout.d.ts +0 -2
- package/dist/storage/state-root-layout.d.ts.map +1 -1
- package/dist/storage/state-root-layout.js +0 -2
- package/dist/storage/state-root-layout.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-NEAZO2JN.js +0 -2002
- package/dist/chunk-NEAZO2JN.js.map +0 -7
- package/dist/cli/handler/daemon/manager.d.ts +0 -4
- package/dist/cli/handler/daemon/manager.d.ts.map +0 -1
- package/dist/cli/handler/daemon/manager.js +0 -9
- package/dist/cli/handler/daemon/manager.js.map +0 -1
- package/dist/cli/handler/daemon/worker.d.ts +0 -4
- package/dist/cli/handler/daemon/worker.d.ts.map +0 -1
- package/dist/cli/handler/daemon/worker.js +0 -7
- package/dist/cli/handler/daemon/worker.js.map +0 -1
- package/dist/cli-WDPLOVF3.js.map +0 -7
- package/dist/daemon/control/switch-status.d.ts +0 -4
- package/dist/daemon/control/switch-status.d.ts.map +0 -1
- package/dist/daemon/control/switch-status.js +0 -10
- package/dist/daemon/control/switch-status.js.map +0 -1
- package/dist/daemon/lifecycle/manager-client.d.ts +0 -8
- package/dist/daemon/lifecycle/manager-client.d.ts.map +0 -1
- package/dist/daemon/lifecycle/manager-client.js +0 -130
- package/dist/daemon/lifecycle/manager-client.js.map +0 -1
- package/dist/daemon/lifecycle/manager.d.ts +0 -3
- package/dist/daemon/lifecycle/manager.d.ts.map +0 -1
- package/dist/daemon/lifecycle/manager.js +0 -215
- package/dist/daemon/lifecycle/manager.js.map +0 -1
- package/dist/daemon/lifecycle/worker-lifecycle-log.d.ts +0 -14
- package/dist/daemon/lifecycle/worker-lifecycle-log.d.ts.map +0 -1
- package/dist/daemon/lifecycle/worker-lifecycle-log.js +0 -63
- package/dist/daemon/lifecycle/worker-lifecycle-log.js.map +0 -1
- package/dist/daemon/lifecycle/worker-process.d.ts +0 -26
- package/dist/daemon/lifecycle/worker-process.d.ts.map +0 -1
- package/dist/daemon/lifecycle/worker-process.js +0 -145
- package/dist/daemon/lifecycle/worker-process.js.map +0 -1
- package/dist/daemon/lifecycle/worker.d.ts.map +0 -1
- package/dist/daemon/lifecycle/worker.js +0 -213
- package/dist/daemon/lifecycle/worker.js.map +0 -1
- package/dist/daemon/upgrades/package.d.ts +0 -9
- package/dist/daemon/upgrades/package.d.ts.map +0 -1
- package/dist/daemon/upgrades/package.js +0 -157
- package/dist/daemon/upgrades/package.js.map +0 -1
- package/dist/daemon/upgrades/upgrade.d.ts +0 -21
- package/dist/daemon/upgrades/upgrade.d.ts.map +0 -1
- package/dist/daemon/upgrades/upgrade.js +0 -242
- package/dist/daemon/upgrades/upgrade.js.map +0 -1
- package/dist/storage/daemon/manager-lock.d.ts +0 -9
- package/dist/storage/daemon/manager-lock.d.ts.map +0 -1
- package/dist/storage/daemon/manager-lock.js.map +0 -1
- package/dist/storage/daemon/release-files.d.ts +0 -9
- package/dist/storage/daemon/release-files.d.ts.map +0 -1
- package/dist/storage/daemon/release-files.js +0 -14
- package/dist/storage/daemon/release-files.js.map +0 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { once } from "node:events";
|
|
3
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
4
|
+
import { isNodeError } from "../../engine/util/node-error.js";
|
|
5
|
+
import { daemonLockExists } from "../../storage/daemon/daemon-lock.js";
|
|
6
|
+
import { CONTROL_TIMEOUT_MILLISECONDS, sendLocalRequest } from "../control/local-client.js";
|
|
7
|
+
import { decodeKnownLifecycleResponse } from "../control/protocol.js";
|
|
8
|
+
async function spawnDaemon() {
|
|
9
|
+
const entry = process.argv[1];
|
|
10
|
+
if (entry === undefined) {
|
|
11
|
+
throw new Error("The CLI entrypoint is missing");
|
|
12
|
+
}
|
|
13
|
+
const child = spawn(process.execPath, [entry, "__daemon"], {
|
|
14
|
+
detached: true,
|
|
15
|
+
windowsHide: true,
|
|
16
|
+
env: process.env,
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
});
|
|
19
|
+
await once(child, "spawn");
|
|
20
|
+
child.unref();
|
|
21
|
+
return child;
|
|
22
|
+
}
|
|
23
|
+
async function launchDaemon(version) {
|
|
24
|
+
process.stdout.write(`Starting mobius daemon ${version}\n`);
|
|
25
|
+
return await spawnDaemon();
|
|
26
|
+
}
|
|
27
|
+
async function waitForDaemonExit(stateDirectory, signal) {
|
|
28
|
+
const deadline = AbortSignal.any([signal, AbortSignal.timeout(30_000)]);
|
|
29
|
+
while (!deadline.aborted) {
|
|
30
|
+
if (!(await daemonLockExists(stateDirectory))) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
await new Promise((resolve, reject) => {
|
|
34
|
+
const timeout = setTimeout(finish, 20);
|
|
35
|
+
const abort = () => finish(deadline.reason);
|
|
36
|
+
function finish(cause) {
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
deadline.removeEventListener("abort", abort);
|
|
39
|
+
cause === undefined ? resolve() : reject(cause);
|
|
40
|
+
}
|
|
41
|
+
deadline.addEventListener("abort", abort, { once: true });
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
throw deadline.reason;
|
|
45
|
+
}
|
|
46
|
+
// The invoking CLI owns the release. npx resolves it before any daemon is stopped.
|
|
47
|
+
export async function ensureDaemon(stateDirectory, version, signal) {
|
|
48
|
+
const running = await readDaemonVersion(stateDirectory, signal);
|
|
49
|
+
if (running !== null) {
|
|
50
|
+
return running;
|
|
51
|
+
}
|
|
52
|
+
const deadline = AbortSignal.any([signal, AbortSignal.timeout(CONTROL_TIMEOUT_MILLISECONDS)]);
|
|
53
|
+
return await waitForDaemon(stateDirectory, version, deadline);
|
|
54
|
+
}
|
|
55
|
+
// Status keeps the released wire format; the worker field identifies the daemon.
|
|
56
|
+
export async function readDaemonVersion(stateDirectory, signal) {
|
|
57
|
+
try {
|
|
58
|
+
const response = decodeKnownLifecycleResponse(await sendLocalRequest(stateDirectory, "manager", { kind: "status" }, signal));
|
|
59
|
+
if (response?.kind === "status") {
|
|
60
|
+
return response.worker?.version ?? null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (cause) {
|
|
64
|
+
if (!isNodeError(cause, "ENOENT") && !isNodeError(cause, "ECONNREFUSED")) {
|
|
65
|
+
throw cause;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
async function waitForDaemon(stateDirectory, version, signal) {
|
|
71
|
+
let daemonStarted = false;
|
|
72
|
+
let child;
|
|
73
|
+
while (!signal.aborted) {
|
|
74
|
+
try {
|
|
75
|
+
let response = decodeKnownLifecycleResponse(await sendLocalRequest(stateDirectory, "manager", { kind: "status" }, signal));
|
|
76
|
+
if (response?.kind === "status" && response.worker === null) {
|
|
77
|
+
const entry = process.argv[1];
|
|
78
|
+
if (entry === undefined) {
|
|
79
|
+
throw new Error("The CLI entrypoint is missing");
|
|
80
|
+
}
|
|
81
|
+
// A released manager may still own control after its worker exits.
|
|
82
|
+
// Reuse its authenticated launch protocol instead of competing for its lock.
|
|
83
|
+
response = decodeKnownLifecycleResponse(await sendLocalRequest(stateDirectory, "manager", { kind: "ensure", launch: { entry, executable: process.execPath, version } }, signal));
|
|
84
|
+
}
|
|
85
|
+
if (response?.kind === "error") {
|
|
86
|
+
throw new Error(response.message);
|
|
87
|
+
}
|
|
88
|
+
if (response?.kind === "status" && response.worker !== null) {
|
|
89
|
+
if (daemonStarted) {
|
|
90
|
+
process.stdout.write(`Mobius daemon ${version} started\n`);
|
|
91
|
+
}
|
|
92
|
+
return response.worker.version;
|
|
93
|
+
}
|
|
94
|
+
throw new Error("The daemon could not return its status");
|
|
95
|
+
}
|
|
96
|
+
catch (cause) {
|
|
97
|
+
if (!isNodeError(cause, "ENOENT") && !isNodeError(cause, "ECONNREFUSED")) {
|
|
98
|
+
throw cause;
|
|
99
|
+
}
|
|
100
|
+
// A competing launcher can exit successfully after losing the lock.
|
|
101
|
+
// Check the shared endpoint first and keep waiting for its owner.
|
|
102
|
+
if (child !== undefined &&
|
|
103
|
+
(child.signalCode !== null ||
|
|
104
|
+
(child.exitCode !== null && (child.exitCode !== 0 || !(await daemonLockExists(stateDirectory)))))) {
|
|
105
|
+
throw new Error("The daemon exited before becoming ready");
|
|
106
|
+
}
|
|
107
|
+
if (!daemonStarted) {
|
|
108
|
+
child = await launchDaemon(version);
|
|
109
|
+
daemonStarted = true;
|
|
110
|
+
}
|
|
111
|
+
await new Promise((resolve, reject) => {
|
|
112
|
+
const timeout = setTimeout(finish, 50);
|
|
113
|
+
const abort = () => finish(signal.reason);
|
|
114
|
+
function finish(cause) {
|
|
115
|
+
clearTimeout(timeout);
|
|
116
|
+
signal.removeEventListener("abort", abort);
|
|
117
|
+
cause === undefined ? resolve() : reject(cause);
|
|
118
|
+
}
|
|
119
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
throw signal.reason;
|
|
124
|
+
}
|
|
125
|
+
export async function stopDaemon(stateDirectory, signal) {
|
|
126
|
+
const deadline = AbortSignal.any([signal, AbortSignal.timeout(CONTROL_TIMEOUT_MILLISECONDS)]);
|
|
127
|
+
while (true) {
|
|
128
|
+
deadline.throwIfAborted();
|
|
129
|
+
try {
|
|
130
|
+
const response = decodeKnownLifecycleResponse(await sendLocalRequest(stateDirectory, "manager", { kind: "stop" }, deadline));
|
|
131
|
+
if (response?.kind === "error") {
|
|
132
|
+
throw new Error(response.message);
|
|
133
|
+
}
|
|
134
|
+
if (response?.kind !== "stopped") {
|
|
135
|
+
throw new Error("The Mobius daemon returned an unexpected response");
|
|
136
|
+
}
|
|
137
|
+
await waitForDaemonExit(stateDirectory, deadline);
|
|
138
|
+
return response;
|
|
139
|
+
}
|
|
140
|
+
catch (cause) {
|
|
141
|
+
deadline.throwIfAborted();
|
|
142
|
+
if (!isNodeError(cause, "ENOENT") && !isNodeError(cause, "ECONNREFUSED")) {
|
|
143
|
+
throw cause;
|
|
144
|
+
}
|
|
145
|
+
if (!(await daemonLockExists(stateDirectory))) {
|
|
146
|
+
return { kind: "stopped" };
|
|
147
|
+
}
|
|
148
|
+
// The owner may still be copying data or discovering Agents. Its missing
|
|
149
|
+
// socket is not proof of shutdown: wait for control or report the deadline.
|
|
150
|
+
await delay(50, undefined, { signal: deadline });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=daemon-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-client.js","sourceRoot":"","sources":["../../../src/daemon/lifecycle/daemon-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@ import type { InstallationDirectory } from "../../engine/storage/installation/in
|
|
|
2
2
|
export declare function reloadDaemon(stateDirectory: InstallationDirectory, signal: AbortSignal): Promise<void>;
|
|
3
3
|
/** Releases idle Agent processes of a running daemon; succeeds when no daemon is running. */
|
|
4
4
|
export declare function releaseIdleAgentProcesses(stateDirectory: InstallationDirectory, signal: AbortSignal): Promise<void>;
|
|
5
|
-
export declare function
|
|
6
|
-
//# sourceMappingURL=
|
|
5
|
+
export declare function runDaemon(version: string, signal: AbortSignal, owner?: "standalone" | "legacy-manager"): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/daemon/lifecycle/daemon.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AA8BrG,wBAAsB,YAAY,CAAC,cAAc,EAAE,qBAAqB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5G;AAED,6FAA6F;AAC7F,wBAAsB,yBAAyB,CAC3C,cAAc,EAAE,qBAAqB,EACrC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,SAAS,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,YAAY,GAAG,gBAA+B,GACtD,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
2
|
+
import { refreshAgentCatalog } from "../../engine/runtime/catalog/refresh-agent-catalog.js";
|
|
3
|
+
import { RuntimeInstallationStore } from "../../engine/runtime/connection/runtime-installation-store.js";
|
|
4
|
+
import { prepareRuntimeConnection } from "../../engine/runtime/pairing.js";
|
|
5
|
+
import { RuntimeLoop } from "../../engine/runtime/runtime-loop.js";
|
|
6
|
+
import { RuntimeAgentProcesses } from "../../engine/session/process/runtime-agent-processes.js";
|
|
7
|
+
import { RuntimeTurnActivity } from "../../engine/session/turn/runtime-turn-activity.js";
|
|
8
|
+
import { BoundedLineLog } from "../../engine/storage/logs/bounded-log.js";
|
|
9
|
+
import { logDirectory, WORKER_LIFECYCLE_LOG_FILENAME } from "../../engine/storage/logs/log-files.js";
|
|
10
|
+
import { isNodeError } from "../../engine/util/node-error.js";
|
|
11
|
+
import { acquireDaemonLock, daemonLockExists } from "../../storage/daemon/daemon-lock.js";
|
|
12
|
+
import { prepareMobiusEngineDataDir, resolveMaxAcpProcesses } from "../config.js";
|
|
13
|
+
import { sendLocalRequest } from "../control/local-client.js";
|
|
14
|
+
import { serveLocalControl } from "../control/local-server.js";
|
|
15
|
+
import { openMobiusControlInstallation } from "../pairing/pair-local-machine.js";
|
|
16
|
+
import { prepareVersionData, recordCurrentData } from "../upgrades/data.js";
|
|
17
|
+
import { surviveUnhandledRejections } from "./unhandled-rejection.js";
|
|
18
|
+
class DaemonRuntimeError extends Error {
|
|
19
|
+
code = "worker_runtime_failed";
|
|
20
|
+
constructor(connectionId, cause) {
|
|
21
|
+
super(`Runtime ${connectionId} failed`, { cause });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Older daemons serve reload/release on a separate worker socket. A null reply
|
|
25
|
+
// means their manager did not recognize the command; no side effect occurred.
|
|
26
|
+
async function sendDaemonCommand(directory, kind, signal) {
|
|
27
|
+
const response = await sendLocalRequest(directory, "manager", { kind }, signal);
|
|
28
|
+
return response === null ? await sendLocalRequest(directory, "worker", { kind }, signal) : response;
|
|
29
|
+
}
|
|
30
|
+
export async function reloadDaemon(stateDirectory, signal) {
|
|
31
|
+
try {
|
|
32
|
+
const response = await sendDaemonCommand(stateDirectory, "reload", signal);
|
|
33
|
+
if (typeof response !== "object" ||
|
|
34
|
+
response === null ||
|
|
35
|
+
!("kind" in response) ||
|
|
36
|
+
response.kind !== "reloaded") {
|
|
37
|
+
throw new Error("Saved configuration could not be applied to the running daemon");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (cause) {
|
|
41
|
+
if (!isNodeError(cause, "ENOENT") && !isNodeError(cause, "ECONNREFUSED")) {
|
|
42
|
+
throw cause;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Releases idle Agent processes of a running daemon; succeeds when no daemon is running. */
|
|
47
|
+
export async function releaseIdleAgentProcesses(stateDirectory, signal) {
|
|
48
|
+
try {
|
|
49
|
+
const response = await sendDaemonCommand(stateDirectory, "release", signal);
|
|
50
|
+
if (typeof response === "object" && response !== null && "kind" in response && response.kind === "released") {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
throw new Error("The running daemon cannot release Agent sessions. Run `npx --yes @moxt-ai/mobius@latest restart` to update it first.");
|
|
54
|
+
}
|
|
55
|
+
catch (cause) {
|
|
56
|
+
if (!isNodeError(cause, "ENOENT") && !isNodeError(cause, "ECONNREFUSED")) {
|
|
57
|
+
throw cause;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function runDaemon(version, signal, owner = "standalone") {
|
|
62
|
+
if (owner === "legacy-manager" && !process.connected) {
|
|
63
|
+
throw new Error("The legacy worker entrypoint requires a manager IPC connection");
|
|
64
|
+
}
|
|
65
|
+
// Install before any await: an unhandled rejection during startup itself
|
|
66
|
+
// must not kill the daemon before the guard exists.
|
|
67
|
+
const rejectionGuard = surviveUnhandledRejections();
|
|
68
|
+
const shutdown = new AbortController();
|
|
69
|
+
const combined = AbortSignal.any([signal, shutdown.signal]);
|
|
70
|
+
const disconnect = () => shutdown.abort();
|
|
71
|
+
if (owner === "legacy-manager") {
|
|
72
|
+
process.once("disconnect", disconnect);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await runDaemonRuntime(version, combined, shutdown, rejectionGuard, owner);
|
|
76
|
+
}
|
|
77
|
+
catch (cause) {
|
|
78
|
+
const control = await openMobiusControlInstallation(AbortSignal.timeout(5_000), process.env);
|
|
79
|
+
new BoundedLineLog(logDirectory(control.stateDirectory), WORKER_LIFECYCLE_LOG_FILENAME, 512 * 1024).record(JSON.stringify({
|
|
80
|
+
kind: "daemon_failed",
|
|
81
|
+
message: cause instanceof Error ? cause.message : "Daemon failed",
|
|
82
|
+
}));
|
|
83
|
+
throw cause;
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
shutdown.abort();
|
|
87
|
+
rejectionGuard.release();
|
|
88
|
+
if (owner === "legacy-manager") {
|
|
89
|
+
process.off("disconnect", disconnect);
|
|
90
|
+
if (process.connected) {
|
|
91
|
+
process.disconnect();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function runDaemonRuntime(version, combined, shutdown, rejectionGuard, owner) {
|
|
97
|
+
const control = await openMobiusControlInstallation(combined, process.env);
|
|
98
|
+
const releaseDaemon = await acquireDaemonLock(control.stateDirectory, owner === "legacy-manager" ? "worker.lock" : "manager.lock");
|
|
99
|
+
if (releaseDaemon === null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const lifecycleLog = new BoundedLineLog(logDirectory(control.stateDirectory), WORKER_LIFECYCLE_LOG_FILENAME, 512 * 1024);
|
|
103
|
+
lifecycleLog.record(JSON.stringify({ kind: "daemon_started", pid: process.pid, version, timestamp: new Date().toISOString() }));
|
|
104
|
+
try {
|
|
105
|
+
if (owner === "standalone") {
|
|
106
|
+
// A dead manager's worker may still be draining control requests. Its
|
|
107
|
+
// lock outlives socket cleanup, so wait before touching either data or sockets.
|
|
108
|
+
const deadline = AbortSignal.any([combined, AbortSignal.timeout(30_000)]);
|
|
109
|
+
while (await daemonLockExists(control.stateDirectory, "worker.lock")) {
|
|
110
|
+
await delay(50, undefined, { signal: deadline });
|
|
111
|
+
}
|
|
112
|
+
deadline.throwIfAborted();
|
|
113
|
+
}
|
|
114
|
+
await prepareVersionData(version, combined);
|
|
115
|
+
const engineDataDir = await prepareMobiusEngineDataDir(version, combined, process.env);
|
|
116
|
+
const installation = await RuntimeInstallationStore.open(engineDataDir, combined);
|
|
117
|
+
rejectionGuard.bindStateDirectory(control.stateDirectory);
|
|
118
|
+
const turnActivity = new RuntimeTurnActivity();
|
|
119
|
+
const agentProcesses = new RuntimeAgentProcesses();
|
|
120
|
+
const active = new Map();
|
|
121
|
+
const fail = (connectionId, cause) => {
|
|
122
|
+
console.error(`Runtime ${connectionId} failed; stopping the daemon`, cause);
|
|
123
|
+
shutdown.abort(new DaemonRuntimeError(connectionId, cause));
|
|
124
|
+
};
|
|
125
|
+
const reconcile = async () => {
|
|
126
|
+
const connections = await installation.listConnections(combined);
|
|
127
|
+
const enabled = new Set(connections
|
|
128
|
+
.filter((connection) => connection.activation === "active")
|
|
129
|
+
.map((connection) => connection.connectionId));
|
|
130
|
+
for (const [id, running] of active) {
|
|
131
|
+
if (enabled.has(id)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
running.controller.abort();
|
|
135
|
+
await running.completion;
|
|
136
|
+
active.delete(id);
|
|
137
|
+
}
|
|
138
|
+
for (const connection of connections) {
|
|
139
|
+
if (!enabled.has(connection.connectionId) || active.has(connection.connectionId)) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const config = await prepareRuntimeConnection(installation, connection, combined, process.env, resolveMaxAcpProcesses(process.env));
|
|
144
|
+
const controller = new AbortController();
|
|
145
|
+
// Process diagnostics live beside the shared control directory,
|
|
146
|
+
// so every Runtime can include them in bug reports.
|
|
147
|
+
const loop = new RuntimeLoop(async () => config, {
|
|
148
|
+
processLogsDirectory: control.stateDirectory,
|
|
149
|
+
turnActivity,
|
|
150
|
+
agentProcesses,
|
|
151
|
+
});
|
|
152
|
+
const completion = loop
|
|
153
|
+
.run(AbortSignal.any([combined, controller.signal]))
|
|
154
|
+
.then(() => {
|
|
155
|
+
if (!combined.aborted && !controller.signal.aborted) {
|
|
156
|
+
fail(connection.connectionId, new Error("The Runtime stopped unexpectedly"));
|
|
157
|
+
}
|
|
158
|
+
}, (cause) => {
|
|
159
|
+
if (!combined.aborted && !controller.signal.aborted) {
|
|
160
|
+
fail(connection.connectionId, cause);
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
.finally(() => active.delete(connection.connectionId));
|
|
164
|
+
active.set(connection.connectionId, { config, controller, completion });
|
|
165
|
+
}
|
|
166
|
+
catch (cause) {
|
|
167
|
+
combined.throwIfAborted();
|
|
168
|
+
fail(connection.connectionId, cause);
|
|
169
|
+
throw cause;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const refreshRunningCatalogs = async (connectionIds) => {
|
|
174
|
+
await Promise.all([...connectionIds].map(async (connectionId) => {
|
|
175
|
+
const config = active.get(connectionId)?.config;
|
|
176
|
+
if (config?.rediscoverAgents === undefined) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
await refreshAgentCatalog(config, config.rediscoverAgents, AbortSignal.any([combined, AbortSignal.timeout(90_000)]));
|
|
181
|
+
}
|
|
182
|
+
catch (cause) {
|
|
183
|
+
combined.throwIfAborted();
|
|
184
|
+
// The Runtime keeps serving its previous catalog; the reload itself still applies.
|
|
185
|
+
console.error(`Runtime ${connectionId} could not refresh its Agent catalog`, cause);
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
};
|
|
189
|
+
let reload = Promise.resolve();
|
|
190
|
+
const handle = async (request) => {
|
|
191
|
+
if (typeof request === "object" && request !== null && "kind" in request) {
|
|
192
|
+
if (request.kind === "status" || request.kind === "ensure") {
|
|
193
|
+
return { kind: "status", protocolVersion: 2, worker: { pid: process.pid, version } };
|
|
194
|
+
}
|
|
195
|
+
if (request.kind === "stop") {
|
|
196
|
+
return { kind: "stopped" };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (typeof request === "object" && request !== null && "kind" in request && request.kind === "release") {
|
|
200
|
+
// Agents' own clients can continue the conversations that idle processes held.
|
|
201
|
+
await agentProcesses.retireIdleProcesses();
|
|
202
|
+
return { kind: "released" };
|
|
203
|
+
}
|
|
204
|
+
if (typeof request !== "object" || request === null || !("kind" in request) || request.kind !== "reload") {
|
|
205
|
+
return { kind: "error", code: "invalid_reload", message: "Expected a configuration reload" };
|
|
206
|
+
}
|
|
207
|
+
// A reload, such as `mobius start` after the user installs or signs in to an Agent, also re-reads the
|
|
208
|
+
// Agent inventory of Runtimes that were already running; Runtimes it starts read it themselves.
|
|
209
|
+
const running = new Set(active.keys());
|
|
210
|
+
const pending = reload.then(reconcile).then(async () => await refreshRunningCatalogs(running));
|
|
211
|
+
reload = pending.catch(() => undefined);
|
|
212
|
+
await pending;
|
|
213
|
+
return { kind: "reloaded" };
|
|
214
|
+
};
|
|
215
|
+
try {
|
|
216
|
+
await reconcile();
|
|
217
|
+
// CLI mutations follow this pointer as soon as status reports readiness.
|
|
218
|
+
await recordCurrentData(version, combined);
|
|
219
|
+
lifecycleLog.record(JSON.stringify({
|
|
220
|
+
kind: "daemon_ready",
|
|
221
|
+
pid: process.pid,
|
|
222
|
+
version,
|
|
223
|
+
timestamp: new Date().toISOString(),
|
|
224
|
+
}));
|
|
225
|
+
// A legacy manager still owns its endpoint; only standalone daemons serve both.
|
|
226
|
+
const servers = owner === "legacy-manager" ? ["worker"] : ["manager", "worker"];
|
|
227
|
+
const results = await Promise.allSettled(servers.map(async (endpoint) => {
|
|
228
|
+
try {
|
|
229
|
+
await serveLocalControl(control.stateDirectory, endpoint, combined, handle, () => {
|
|
230
|
+
if (owner === "legacy-manager") {
|
|
231
|
+
combined.throwIfAborted();
|
|
232
|
+
process.send?.({ kind: "worker-ready", version }, () => undefined);
|
|
233
|
+
}
|
|
234
|
+
}, (response) => {
|
|
235
|
+
if (typeof response === "object" &&
|
|
236
|
+
response !== null &&
|
|
237
|
+
"kind" in response &&
|
|
238
|
+
response.kind === "stopped") {
|
|
239
|
+
shutdown.abort();
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
shutdown.abort();
|
|
245
|
+
}
|
|
246
|
+
}));
|
|
247
|
+
for (const result of results) {
|
|
248
|
+
if (result.status === "rejected") {
|
|
249
|
+
throw result.reason;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (shutdown.signal.reason instanceof DaemonRuntimeError) {
|
|
253
|
+
throw shutdown.signal.reason;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
shutdown.abort();
|
|
258
|
+
await reload;
|
|
259
|
+
await Promise.all([...active.values()].map((running) => running.completion));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
await releaseDaemon();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/daemon/lifecycle/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { InstallationDirectory } from "../../engine/storage/installation/installation-files.ts";
|
|
2
|
-
export type DaemonProcessRole = "manager" | "worker";
|
|
3
2
|
export interface UnhandledRejectionGuard {
|
|
4
3
|
readonly bindStateDirectory: (stateDirectory: InstallationDirectory) => void;
|
|
5
4
|
readonly release: () => void;
|
|
6
5
|
}
|
|
7
|
-
export declare function surviveUnhandledRejections(
|
|
6
|
+
export declare function surviveUnhandledRejections(): UnhandledRejectionGuard;
|
|
8
7
|
//# sourceMappingURL=unhandled-rejection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unhandled-rejection.d.ts","sourceRoot":"","sources":["../../../src/daemon/lifecycle/unhandled-rejection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"unhandled-rejection.d.ts","sourceRoot":"","sources":["../../../src/daemon/lifecycle/unhandled-rejection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AA2BrG,MAAM,WAAW,uBAAuB;IAGpC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,cAAc,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAUD,wBAAgB,0BAA0B,IAAI,uBAAuB,CA6CpE"}
|
|
@@ -25,15 +25,12 @@ function describeRejection(reason) {
|
|
|
25
25
|
// Node's default unhandled rejection mode kills the process, which would take
|
|
26
26
|
// the whole daemon down for a stray floating promise. While this guard is
|
|
27
27
|
// installed every unhandled rejection is recorded instead — stderr for the
|
|
28
|
-
//
|
|
28
|
+
// console, a bounded local log beside the other
|
|
29
29
|
// daemon logs once its directory is bound. Recording is best-effort: a broken
|
|
30
30
|
// log must never become the failure that kills the daemon.
|
|
31
31
|
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
// through manager.lock; the worker must bind only after acquiring worker.lock,
|
|
35
|
-
// which makes it the sole writer of its own file.
|
|
36
|
-
export function surviveUnhandledRejections(role) {
|
|
32
|
+
// Bind after taking the daemon lock so the bounded log has exactly one writer.
|
|
33
|
+
export function surviveUnhandledRejections() {
|
|
37
34
|
let log = null;
|
|
38
35
|
const pending = [];
|
|
39
36
|
const record = (reason) => {
|
|
@@ -63,7 +60,7 @@ export function surviveUnhandledRejections(role) {
|
|
|
63
60
|
if (log !== null) {
|
|
64
61
|
return;
|
|
65
62
|
}
|
|
66
|
-
log = new BoundedLineLog(logDirectory(stateDirectory), unhandledRejectionLogFilename(
|
|
63
|
+
log = new BoundedLineLog(logDirectory(stateDirectory), unhandledRejectionLogFilename("worker"), MAXIMUM_REJECTION_LOG_BYTES, (cause) => {
|
|
67
64
|
process.stderr.write(`The unhandled rejection log could not be written: ${String(cause)}\n`);
|
|
68
65
|
});
|
|
69
66
|
for (const entry of pending.splice(0)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unhandled-rejection.js","sourceRoot":"","sources":["../../../src/daemon/lifecycle/unhandled-rejection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AAErG,MAAM,2BAA2B,GAAG,GAAG,GAAG,KAAK,CAAC;AAChD,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,0BAA0B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"unhandled-rejection.js","sourceRoot":"","sources":["../../../src/daemon/lifecycle/unhandled-rejection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export declare function prepareVersionData(version: string, signal: AbortSignal): Promise<void>;
|
|
2
|
-
export declare function discardRolledBackData(version: string, signal: AbortSignal): Promise<void>;
|
|
3
2
|
export declare function recordCurrentData(version: string, signal: AbortSignal): Promise<void>;
|
|
4
3
|
//# sourceMappingURL=data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/daemon/upgrades/data.ts"],"names":[],"mappings":"AAWA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/daemon/upgrades/data.ts"],"names":[],"mappings":"AAWA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F"}
|
|
@@ -16,11 +16,6 @@ export async function prepareVersionData(version, signal) {
|
|
|
16
16
|
await discardVersionData(root, targetVersion, signal);
|
|
17
17
|
await copyVersionData(root, current, targetVersion, signal);
|
|
18
18
|
}
|
|
19
|
-
// A version whose switch rolled back never had the current data; once the previous version runs again, its copy is
|
|
20
|
-
// stale, and its next attempt must inherit the current data rather than reuse that copy.
|
|
21
|
-
export async function discardRolledBackData(version, signal) {
|
|
22
|
-
await discardVersionData(readStateDirectory(), decodeRuntimeUpgradeVersion(version), signal);
|
|
23
|
-
}
|
|
24
19
|
export async function recordCurrentData(version, signal) {
|
|
25
20
|
await writeCurrentDataVersion(readStateDirectory(), decodeRuntimeUpgradeVersion(version), signal);
|
|
26
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/daemon/upgrades/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,sHAAsH;AACtH,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAmB;IACzE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAChD,OAAO;IACX,CAAC;IACD,6GAA6G;IAC7G,yFAAyF;IACzF,MAAM,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/daemon/upgrades/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,sHAAsH;AACtH,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAmB;IACzE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAChD,OAAO;IACX,CAAC;IACD,6GAA6G;IAC7G,yFAAyF;IACzF,MAAM,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAmB;IACxE,MAAM,uBAAuB,CAAC,kBAAkB,EAAE,EAAE,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAShE,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAmB3D,+FAA+F;AAC/F,qBAAa,4BAA6B,YAAW,gBAAgB;;IASjE,YAAY,KAAK,EAAE,KAAK,EAEvB;IAED,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAO1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAK7C;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAIvB;IAEF,QAAQ,CAAC,uBAAuB,cAAe,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAG,IAAI,CAE5G;IACF,QAAQ,CAAC,aAAa,UAAW,yBAAyB,KAAG,IAAI,CAAsB;IACvF,QAAQ,CAAC,WAAW,UAAW,uBAAuB,KAAG,IAAI,CAAsB;IACnF,QAAQ,CAAC,aAAa,UAAW,uBAAuB,KAAG,IAAI,CAG7D;IAoBF,QAAQ,CAAC,OAAO,UAAW,gBAAgB,KAAG,IAAI,CAoEhD;IAkCF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAShE,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAmB3D,+FAA+F;AAC/F,qBAAa,4BAA6B,YAAW,gBAAgB;;IASjE,YAAY,KAAK,EAAE,KAAK,EAEvB;IAED,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAO1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAK7C;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAIvB;IAEF,QAAQ,CAAC,uBAAuB,cAAe,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAG,IAAI,CAE5G;IACF,QAAQ,CAAC,aAAa,UAAW,yBAAyB,KAAG,IAAI,CAAsB;IACvF,QAAQ,CAAC,WAAW,UAAW,uBAAuB,KAAG,IAAI,CAAsB;IACnF,QAAQ,CAAC,aAAa,UAAW,uBAAuB,KAAG,IAAI,CAG7D;IAoBF,QAAQ,CAAC,OAAO,UAAW,gBAAgB,KAAG,IAAI,CAoEhD;IAkCF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAyC1B;CACL"}
|
|
@@ -174,18 +174,18 @@ export class RuntimeSessionEventPublisher {
|
|
|
174
174
|
if (connection.kind !== "connected" || connection.socket !== socket || socket.readyState !== WebSocket.OPEN) {
|
|
175
175
|
return;
|
|
176
176
|
}
|
|
177
|
-
let
|
|
177
|
+
let sent = 0;
|
|
178
178
|
for (const batch of this.#pending) {
|
|
179
179
|
const encoded = encodeDaemonToServiceMessage({ events: batch.events, kind: SESSION_EVENT_KIND });
|
|
180
180
|
if (socket.bufferedAmount + Buffer.byteLength(encoded, "utf8") > MAX_BUFFERED_BYTES) {
|
|
181
181
|
socket.close(LOCAL_BACKPRESSURE_CLOSE_CODE, "Live event transport overloaded");
|
|
182
182
|
break;
|
|
183
183
|
}
|
|
184
|
-
//
|
|
185
|
-
attempted += 1;
|
|
186
|
-
this.#pendingBytes -= batch.bytes;
|
|
184
|
+
// Only discard a batch after the local socket accepts it; cloud delivery remains best effort.
|
|
187
185
|
try {
|
|
188
186
|
socket.send(encoded);
|
|
187
|
+
sent += 1;
|
|
188
|
+
this.#pendingBytes -= batch.bytes;
|
|
189
189
|
for (const answer of batch.firstAnswers) {
|
|
190
190
|
console.info(JSON.stringify({
|
|
191
191
|
event: "runtime-first-answer-handoff-timing",
|
|
@@ -200,10 +200,11 @@ export class RuntimeSessionEventPublisher {
|
|
|
200
200
|
}
|
|
201
201
|
catch {
|
|
202
202
|
console.warn("Live Session output could not be sent", { code: "live_event_send_failed" });
|
|
203
|
+
socket.close(LOCAL_BACKPRESSURE_CLOSE_CODE, "Live event handoff failed");
|
|
203
204
|
break;
|
|
204
205
|
}
|
|
205
206
|
}
|
|
206
|
-
this.#pending.splice(0,
|
|
207
|
+
this.#pending.splice(0, sent);
|
|
207
208
|
if (this.#pending.length === 0) {
|
|
208
209
|
this.#overflowReported = false;
|
|
209
210
|
}
|