@songsid/agend 2.1.7-beta.3 → 2.1.7-beta.4
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/agent-endpoint.d.ts +2 -0
- package/dist/agent-endpoint.js +47 -5
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/codex.d.ts +18 -0
- package/dist/backend/codex.js +68 -3
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/types.d.ts +9 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/mcp-operation-response.d.ts +3 -0
- package/dist/channel/mcp-operation-response.js +21 -0
- package/dist/channel/mcp-operation-response.js.map +1 -0
- package/dist/channel/mcp-operation-response.test.d.ts +1 -0
- package/dist/channel/mcp-operation-response.test.js +23 -0
- package/dist/channel/mcp-operation-response.test.js.map +1 -0
- package/dist/channel/mcp-server.js +20 -5
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/daemon.d.ts +23 -0
- package/dist/daemon.js +248 -24
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +90 -0
- package/dist/delivery-outbox.js +562 -0
- package/dist/delivery-outbox.js.map +1 -0
- package/dist/delivery-outbox.test.d.ts +1 -0
- package/dist/delivery-outbox.test.js +343 -0
- package/dist/delivery-outbox.test.js.map +1 -0
- package/dist/fleet-manager.d.ts +38 -1
- package/dist/fleet-manager.js +302 -36
- package/dist/fleet-manager.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +5 -0
- package/dist/instance-lifecycle.js +38 -0
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +2 -0
- package/dist/instructions.js.map +1 -1
- package/dist/outbound-handlers.d.ts +22 -1
- package/dist/outbound-handlers.js +81 -7
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/remote-credential-check.d.ts +39 -0
- package/dist/remote-credential-check.js +81 -0
- package/dist/remote-credential-check.js.map +1 -0
- package/dist/usage/providers.d.ts +11 -6
- package/dist/usage/providers.js +17 -10
- package/dist/usage/providers.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-outbox.js","sourceRoot":"","sources":["../src/delivery-outbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
import { createInterface } from "node:readline";
|
|
7
|
+
import { once } from "node:events";
|
|
8
|
+
import { pathToFileURL } from "node:url";
|
|
9
|
+
import { DeliveryOutbox, DURABLE_DELIVERY_ABORT_BACKOFF_MS, DURABLE_DELIVERY_MAX_AGE_MS, DURABLE_DELIVERY_MAX_ATTEMPTS } from "./delivery-outbox.js";
|
|
10
|
+
const roots = [];
|
|
11
|
+
function tempDb() {
|
|
12
|
+
const root = mkdtempSync(join(tmpdir(), "agend-outbox-test-"));
|
|
13
|
+
roots.push(root);
|
|
14
|
+
return join(root, "delivery-outbox.db");
|
|
15
|
+
}
|
|
16
|
+
function input(overrides = {}) {
|
|
17
|
+
const id = overrides.operationId ?? "op-1";
|
|
18
|
+
const target = overrides.targetInstance ?? "worker";
|
|
19
|
+
return {
|
|
20
|
+
operationId: id,
|
|
21
|
+
sourceKey: `mcp:source:${id}:${target}:fleet_inbound`,
|
|
22
|
+
sourceInstance: "source",
|
|
23
|
+
sourceDaemonBootId: "source-boot-1",
|
|
24
|
+
targetInstance: target,
|
|
25
|
+
kind: "fleet_inbound",
|
|
26
|
+
correlationId: "same-correlation",
|
|
27
|
+
payload: { type: "fleet_inbound", content: "hello", meta: {} },
|
|
28
|
+
...overrides,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
vi.useRealTimers();
|
|
33
|
+
for (const root of roots.splice(0))
|
|
34
|
+
rmSync(root, { recursive: true, force: true });
|
|
35
|
+
});
|
|
36
|
+
describe("DeliveryOutbox", () => {
|
|
37
|
+
it("commits admission before returning and makes an operation retry idempotent", () => {
|
|
38
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
39
|
+
const first = outbox.admit(input());
|
|
40
|
+
const retry = outbox.admit(input());
|
|
41
|
+
expect(first.inserted).toBe(true);
|
|
42
|
+
expect(retry.inserted).toBe(false);
|
|
43
|
+
expect(retry.delivery.deliveryId).toBe(first.delivery.deliveryId);
|
|
44
|
+
expect(retry.delivery.state).toBe("queued");
|
|
45
|
+
outbox.close();
|
|
46
|
+
});
|
|
47
|
+
it("recovers a pre-begin dispatch after SIGKILL when target stays stopped, then expires it visibly", async () => {
|
|
48
|
+
const dbPath = tempDb();
|
|
49
|
+
const storeUrl = pathToFileURL(join(process.cwd(), "src/delivery-outbox.ts")).href;
|
|
50
|
+
const managerUrl = pathToFileURL(join(process.cwd(), "src/fleet-manager.ts")).href;
|
|
51
|
+
const daemonUrl = pathToFileURL(join(process.cwd(), "src/daemon.ts")).href;
|
|
52
|
+
const script = [
|
|
53
|
+
`import { FleetManager } from ${JSON.stringify(managerUrl)};`,
|
|
54
|
+
`import { DeliveryOutbox } from ${JSON.stringify(storeUrl)};`,
|
|
55
|
+
`import { Daemon } from ${JSON.stringify(daemonUrl)};`,
|
|
56
|
+
`import { mkdirSync, writeFileSync } from "node:fs";`,
|
|
57
|
+
`import pino from "pino";`,
|
|
58
|
+
`const manager = new FleetManager(${JSON.stringify(dirname(dbPath))});`,
|
|
59
|
+
`const outbox = new DeliveryOutbox(${JSON.stringify(dbPath)}, manager.managerBootId);`,
|
|
60
|
+
`manager.deliveryOutbox = outbox;`,
|
|
61
|
+
`manager.shuttingDown = true;`,
|
|
62
|
+
`const logger = pino({ level: "silent" });`,
|
|
63
|
+
`const makeDaemon = name => new Daemon(name, { working_directory: "/tmp", log_level: "error" }, ${JSON.stringify(dirname(dbPath))} + "/instances/" + name, false, undefined, undefined, logger);`,
|
|
64
|
+
`const source = makeDaemon("source");`,
|
|
65
|
+
`const target = makeDaemon("worker");`,
|
|
66
|
+
`source.setDeliveryOutboxPort(outbox); target.setDeliveryOutboxPort(outbox);`,
|
|
67
|
+
`manager.lifecycle.daemons.set("source", source); manager.lifecycle.daemons.set("worker", target);`,
|
|
68
|
+
`const accepted = manager.admitDurableDelivery({ operationId: "op-1", sourceDaemonBootId: source.bootId, sourceInstance: "source", targetInstance: "worker", kind: "fleet_inbound", correlationId: "same-correlation", payload: { type: "fleet_inbound", content: "hello", meta: {} } });`,
|
|
69
|
+
`const claimed = outbox.claimNext(manager.managerBootId, name => manager.lifecycle.daemons.get(name)?.bootId ?? null, new Set());`,
|
|
70
|
+
`const targetDaemon = manager.lifecycle.daemons.get("worker");`,
|
|
71
|
+
`const instanceDir = ${JSON.stringify(dirname(dbPath))} + "/instances/worker";`,
|
|
72
|
+
`mkdirSync(instanceDir, { recursive: true }); writeFileSync(instanceDir + "/window-id", "@worker");`,
|
|
73
|
+
`targetDaemon.tmux = { capturePane: async () => "❯", pasteBuffer: async () => true, sendSpecialKey: async () => true, getLastPasteError: () => undefined, isLastPasteFailureRecoverable: () => true };`,
|
|
74
|
+
`targetDaemon.controlClient = {};`,
|
|
75
|
+
`targetDaemon.paneReadinessForDelivery = async () => "busy";`,
|
|
76
|
+
`targetDaemon.probeBlockingDialog = async () => ({ state: "clear" });`,
|
|
77
|
+
`targetDaemon.hasPositiveDeliveryInput = async () => false;`,
|
|
78
|
+
`targetDaemon.waitForPaneReadyForDelivery = async () => { process.stdout.write("dispatch-waiting\\n"); return new Promise(() => {}); };`,
|
|
79
|
+
`targetDaemon.pushChannelMessage("hello", { delivery_id: accepted.deliveryId, delivery_attempt: String(claimed.attemptNo), from_instance: "source", correlation_id: "same-correlation", user: "instance:source", user_id: "instance:source", message_id: "message-crash-before-begin", chat_id: "", thread_id: "", ts: new Date().toISOString() });`,
|
|
80
|
+
`setInterval(() => {}, 1000);`,
|
|
81
|
+
].join("\n");
|
|
82
|
+
const child = spawn(process.execPath, ["--import", "tsx", "--input-type=module", "-e", script], {
|
|
83
|
+
cwd: process.cwd(),
|
|
84
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
85
|
+
});
|
|
86
|
+
let childStderr = "";
|
|
87
|
+
child.stderr.setEncoding("utf8").on("data", chunk => { childStderr += chunk; });
|
|
88
|
+
const lines = createInterface({ input: child.stdout });
|
|
89
|
+
const committed = new Promise((resolve, reject) => {
|
|
90
|
+
const timer = setTimeout(() => {
|
|
91
|
+
child.kill("SIGKILL");
|
|
92
|
+
reject(new Error(`writer child did not reach the pre-begin wait: ${childStderr}`));
|
|
93
|
+
}, 8_000);
|
|
94
|
+
lines.once("line", line => {
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
if (line === "dispatch-waiting")
|
|
97
|
+
resolve();
|
|
98
|
+
else
|
|
99
|
+
reject(new Error(`unexpected child output: ${line}`));
|
|
100
|
+
});
|
|
101
|
+
child.once("error", err => {
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
reject(err);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
await committed;
|
|
107
|
+
child.kill("SIGKILL");
|
|
108
|
+
await once(child, "exit");
|
|
109
|
+
lines.close();
|
|
110
|
+
const replacementManager = new (await import("./fleet-manager.js")).FleetManager(dirname(dbPath));
|
|
111
|
+
replacementManager.shuttingDown = true;
|
|
112
|
+
// Exercise FleetManager's production startup wiring: it opens the durable
|
|
113
|
+
// store and runs recoverForBoot itself before any target Daemon is started.
|
|
114
|
+
replacementManager.ensureDeliveryOutbox();
|
|
115
|
+
const restarted = replacementManager.deliveryOutbox;
|
|
116
|
+
const { Daemon } = await import("./daemon.js");
|
|
117
|
+
const pinoModule = await import("pino");
|
|
118
|
+
const logger = pinoModule.default({ level: "silent" });
|
|
119
|
+
const makeDaemon = (name) => new Daemon(name, { working_directory: "/tmp", log_level: "error", restart_policy: { max_retries: 10, backoff: "exponential", reset_after: 300 }, context_guardian: { max_age_hours: 4, grace_period_ms: 600000 } }, join(dirname(dbPath), "instances", name), false, undefined, undefined, logger);
|
|
120
|
+
const sourceDaemon = makeDaemon("source");
|
|
121
|
+
sourceDaemon.setDeliveryOutboxPort(restarted);
|
|
122
|
+
replacementManager.lifecycle.daemons.set("source", sourceDaemon);
|
|
123
|
+
replacementManager.onDaemonReady("source", sourceDaemon.bootId);
|
|
124
|
+
const pendingAfterRecovery = restarted.listPending();
|
|
125
|
+
expect(pendingAfterRecovery).toMatchObject([
|
|
126
|
+
{ operationId: "op-1", targetInstance: "worker", state: "queued", payload: { content: "hello" } },
|
|
127
|
+
{ operationId: expect.stringContaining("notice:"), targetInstance: "source", state: "queued" },
|
|
128
|
+
]);
|
|
129
|
+
expect(replacementManager.lifecycle.daemons.has("worker")).toBe(false);
|
|
130
|
+
expect(restarted.getUnansweredAccepted("source", sourceDaemon.bootId)).toHaveLength(1);
|
|
131
|
+
const queuedDelivery = pendingAfterRecovery.find(row => row.operationId === "op-1");
|
|
132
|
+
const createdAt = restarted.db.prepare("SELECT created_at FROM deliveries WHERE delivery_id=?").get(queuedDelivery.deliveryId).created_at;
|
|
133
|
+
expect(restarted.expireStale(Date.parse(createdAt) + DURABLE_DELIVERY_MAX_AGE_MS + 1)).toBe(1);
|
|
134
|
+
expect(restarted.get(queuedDelivery.deliveryId)).toMatchObject({ state: "failed" });
|
|
135
|
+
const failureNotice = restarted.db.prepare("SELECT state,target_instance,payload_json FROM deliveries WHERE kind='delivery_outcome_notice' AND operation_id=?").get(`notice:op-1:${queuedDelivery.deliveryId}`);
|
|
136
|
+
expect(failureNotice?.state).toBe("queued");
|
|
137
|
+
expect(failureNotice?.target_instance).toBe("source");
|
|
138
|
+
expect(JSON.parse(failureNotice.payload_json).content).toContain("state=failed");
|
|
139
|
+
restarted.close();
|
|
140
|
+
});
|
|
141
|
+
it("marks an in-flight paste uncertain after whole-process SIGKILL and persists one sender notice", async () => {
|
|
142
|
+
const dbPath = tempDb();
|
|
143
|
+
const storeUrl = pathToFileURL(join(process.cwd(), "src/delivery-outbox.ts")).href;
|
|
144
|
+
const managerUrl = pathToFileURL(join(process.cwd(), "src/fleet-manager.ts")).href;
|
|
145
|
+
const daemonUrl = pathToFileURL(join(process.cwd(), "src/daemon.ts")).href;
|
|
146
|
+
const script = [
|
|
147
|
+
`import { FleetManager } from ${JSON.stringify(managerUrl)};`,
|
|
148
|
+
`import { DeliveryOutbox } from ${JSON.stringify(storeUrl)};`,
|
|
149
|
+
`import { Daemon } from ${JSON.stringify(daemonUrl)};`,
|
|
150
|
+
`import { mkdirSync, writeFileSync } from "node:fs";`,
|
|
151
|
+
`import pino from "pino";`,
|
|
152
|
+
`const root = ${JSON.stringify(dirname(dbPath))};`,
|
|
153
|
+
`const manager = new FleetManager(root);`,
|
|
154
|
+
`const outbox = new DeliveryOutbox(${JSON.stringify(dbPath)}, manager.managerBootId);`,
|
|
155
|
+
`manager.deliveryOutbox = outbox; manager.shuttingDown = true;`,
|
|
156
|
+
`const logger = pino({ level: "silent" });`,
|
|
157
|
+
`const makeDaemon = name => new Daemon(name, { working_directory: "/tmp", log_level: "error" }, root + "/instances/" + name, false, undefined, undefined, logger);`,
|
|
158
|
+
`const source = makeDaemon("source"); const target = makeDaemon("worker");`,
|
|
159
|
+
`source.setDeliveryOutboxPort(outbox); target.setDeliveryOutboxPort(outbox);`,
|
|
160
|
+
`manager.lifecycle.daemons.set("source", source); manager.lifecycle.daemons.set("worker", target);`,
|
|
161
|
+
`const accepted = manager.admitDurableDelivery({ operationId: "op-paste-crash", sourceDaemonBootId: source.bootId, sourceInstance: "source", targetInstance: "worker", kind: "fleet_inbound", correlationId: "corr-paste-crash", payload: { type: "fleet_inbound", content: "hello", meta: {} } });`,
|
|
162
|
+
`const claimed = outbox.claimNext(manager.managerBootId, name => manager.lifecycle.daemons.get(name)?.bootId ?? null, new Set());`,
|
|
163
|
+
`const instanceDir = root + "/instances/worker"; mkdirSync(instanceDir, { recursive: true }); writeFileSync(instanceDir + "/window-id", "@worker");`,
|
|
164
|
+
`target.tmux = { capturePane: async () => "❯", pasteBuffer: async () => { process.stdout.write("pane-paste-started\\n"); return new Promise(() => {}); }, sendSpecialKey: async () => true, getLastPasteError: () => undefined, isLastPasteFailureRecoverable: () => true };`,
|
|
165
|
+
`target.pushChannelMessage("hello", { delivery_id: accepted.deliveryId, delivery_attempt: String(claimed.attemptNo), from_instance: "source", correlation_id: "corr-paste-crash", user: "instance:source", user_id: "instance:source", message_id: "message-paste-crash", chat_id: "", thread_id: "", ts: new Date().toISOString() });`,
|
|
166
|
+
`setInterval(() => {}, 1000);`,
|
|
167
|
+
].join("\n");
|
|
168
|
+
const child = spawn(process.execPath, ["--import", "tsx", "--input-type=module", "-e", script], {
|
|
169
|
+
cwd: process.cwd(),
|
|
170
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
171
|
+
});
|
|
172
|
+
const lines = createInterface({ input: child.stdout });
|
|
173
|
+
const pasted = new Promise((resolve, reject) => {
|
|
174
|
+
const timer = setTimeout(() => reject(new Error("child did not reach the pane paste")), 10_000);
|
|
175
|
+
lines.once("line", line => {
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
if (line === "pane-paste-started")
|
|
178
|
+
resolve();
|
|
179
|
+
else
|
|
180
|
+
reject(new Error(`unexpected child output: ${line}`));
|
|
181
|
+
});
|
|
182
|
+
child.once("error", err => {
|
|
183
|
+
clearTimeout(timer);
|
|
184
|
+
reject(err);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
await pasted;
|
|
188
|
+
child.kill("SIGKILL");
|
|
189
|
+
await once(child, "exit");
|
|
190
|
+
lines.close();
|
|
191
|
+
const replacementManager = new (await import("./fleet-manager.js")).FleetManager(dirname(dbPath));
|
|
192
|
+
replacementManager.shuttingDown = true;
|
|
193
|
+
replacementManager.ensureDeliveryOutbox();
|
|
194
|
+
const restarted = replacementManager.deliveryOutbox;
|
|
195
|
+
const { Daemon } = await import("./daemon.js");
|
|
196
|
+
const pinoModule = await import("pino");
|
|
197
|
+
const logger = pinoModule.default({ level: "silent" });
|
|
198
|
+
const makeDaemon = (name) => new Daemon(name, { working_directory: "/tmp", log_level: "error", restart_policy: { max_retries: 10, backoff: "exponential", reset_after: 300 }, context_guardian: { max_age_hours: 4, grace_period_ms: 600000 } }, join(dirname(dbPath), "instances", name), false, undefined, undefined, logger);
|
|
199
|
+
const sourceDaemon = makeDaemon("source");
|
|
200
|
+
sourceDaemon.setDeliveryOutboxPort(restarted);
|
|
201
|
+
replacementManager.lifecycle.daemons.set("source", sourceDaemon);
|
|
202
|
+
replacementManager.onDaemonReady("source", sourceDaemon.bootId);
|
|
203
|
+
const row = restarted.getByOperation("source", "op-paste-crash")[0];
|
|
204
|
+
const notices = restarted.listPending().filter(item => item.kind === "delivery_outcome_notice");
|
|
205
|
+
expect(row).toMatchObject({ state: "uncertain", targetInstance: "worker" });
|
|
206
|
+
expect(notices).toHaveLength(1);
|
|
207
|
+
expect(notices[0]?.payload.content).toContain("state=uncertain");
|
|
208
|
+
expect(notices[0]?.payload.content).toContain("Do not resend");
|
|
209
|
+
restarted.close();
|
|
210
|
+
});
|
|
211
|
+
it("fences begin by attempt and target generation; abort safely returns work to retry", () => {
|
|
212
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
213
|
+
const row = outbox.admit(input()).delivery;
|
|
214
|
+
const claimed = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
215
|
+
expect(outbox.begin(row.deliveryId, "old-target", claimed.attemptNo)).toBe("stale");
|
|
216
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", claimed.attemptNo)).toBe("begun");
|
|
217
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", claimed.attemptNo)).toBe("duplicate");
|
|
218
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", claimed.attemptNo + 1)).toBe("stale");
|
|
219
|
+
expect(outbox.abort(row.deliveryId, "target-boot-1", claimed.attemptNo, "pane lock recheck")).toBe(true);
|
|
220
|
+
expect(outbox.abort(row.deliveryId, "target-boot-1", claimed.attemptNo, "retry duplicate")).toBe(true);
|
|
221
|
+
expect(outbox.get(row.deliveryId)?.state).toBe("retry_wait");
|
|
222
|
+
expect(Date.parse(outbox.get(row.deliveryId).nextAttemptAt)).toBeGreaterThanOrEqual(Date.now() + DURABLE_DELIVERY_ABORT_BACKOFF_MS - 100);
|
|
223
|
+
outbox.close();
|
|
224
|
+
});
|
|
225
|
+
it("keeps FIFO per target across retry backoff while allowing another target to progress", () => {
|
|
226
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
227
|
+
const first = outbox.admit(input({ operationId: "op-1", sourceKey: "one", targetInstance: "worker-a" })).delivery;
|
|
228
|
+
const second = outbox.admit(input({ operationId: "op-2", sourceKey: "two", targetInstance: "worker-a" })).delivery;
|
|
229
|
+
const independent = outbox.admit(input({ operationId: "op-3", sourceKey: "three", targetInstance: "worker-b" })).delivery;
|
|
230
|
+
const claimed = outbox.claimNext("manager-1", target => `boot-${target}`, new Set());
|
|
231
|
+
expect(claimed.deliveryId).toBe(first.deliveryId);
|
|
232
|
+
expect(outbox.retryBeforeBegin(first.deliveryId, claimed.targetDaemonBootId, claimed.attemptNo, "temporarily unavailable", 60_000)).toBe(true);
|
|
233
|
+
const next = outbox.claimNext("manager-1", target => `boot-${target}`, new Set());
|
|
234
|
+
expect(next?.deliveryId).toBe(independent.deliveryId);
|
|
235
|
+
expect(outbox.get(second.deliveryId)?.state).toBe("queued");
|
|
236
|
+
outbox.close();
|
|
237
|
+
});
|
|
238
|
+
it("recovers unsubmitted leases and fences old target generations", () => {
|
|
239
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
240
|
+
const queued = outbox.admit(input({ operationId: "queued", sourceKey: "queued" })).delivery;
|
|
241
|
+
const claimed = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
242
|
+
expect(outbox.recoverForBoot("manager-2").queued).toBe(1);
|
|
243
|
+
expect(outbox.get(queued.deliveryId)?.state).toBe("queued");
|
|
244
|
+
const afterBoot = outbox.claimNext("manager-2", () => "target-boot-2", new Set());
|
|
245
|
+
expect(outbox.begin(afterBoot.deliveryId, "target-boot-1", afterBoot.attemptNo)).toBe("stale");
|
|
246
|
+
expect(outbox.begin(afterBoot.deliveryId, "target-boot-2", afterBoot.attemptNo)).toBe("begun");
|
|
247
|
+
expect(outbox.recoverTargetGeneration("worker", "target-boot-3").uncertain).toBe(1);
|
|
248
|
+
expect(outbox.get(claimed.deliveryId)?.state).toBe("uncertain");
|
|
249
|
+
outbox.close();
|
|
250
|
+
});
|
|
251
|
+
it("tracks the MCP response boundary and deduplicates post-restart notices", () => {
|
|
252
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
253
|
+
const parent = outbox.admit(input()).delivery;
|
|
254
|
+
expect(outbox.getUnansweredAccepted("source", "source-boot-2")).toHaveLength(1);
|
|
255
|
+
expect(outbox.markResponseDelivered("source", "op-1")).toBe(1);
|
|
256
|
+
expect(outbox.getUnansweredAccepted("source", "source-boot-2")).toHaveLength(0);
|
|
257
|
+
const unanswered = outbox.admit(input({
|
|
258
|
+
operationId: "op-2",
|
|
259
|
+
sourceKey: "mcp:source:op-2:worker:fleet_inbound",
|
|
260
|
+
})).delivery;
|
|
261
|
+
const notice = outbox.admitPostRestartOutcomeNotice(unanswered, "source-boot-2");
|
|
262
|
+
const duplicate = outbox.admitPostRestartOutcomeNotice(unanswered, "source-boot-2");
|
|
263
|
+
expect(notice?.payload.content).toContain("Do not resend this operation");
|
|
264
|
+
expect(duplicate?.deliveryId).toBe(notice?.deliveryId);
|
|
265
|
+
const broadcastSibling = outbox.admit(input({
|
|
266
|
+
operationId: "op-2",
|
|
267
|
+
sourceKey: "mcp:source:op-2:worker-2::broadcast",
|
|
268
|
+
targetInstance: "worker-2",
|
|
269
|
+
kind: "broadcast",
|
|
270
|
+
})).delivery;
|
|
271
|
+
const siblingNotice = outbox.admitPostRestartOutcomeNotice(broadcastSibling, "source-boot-2");
|
|
272
|
+
expect(siblingNotice?.deliveryId).not.toBe(notice?.deliveryId);
|
|
273
|
+
expect(outbox.get(parent.deliveryId)?.responseDeliveredAt).not.toBeNull();
|
|
274
|
+
outbox.close();
|
|
275
|
+
});
|
|
276
|
+
it("turns a target-unavailable row into a visible terminal failure at its TTL", () => {
|
|
277
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
278
|
+
const row = outbox.admit(input()).delivery;
|
|
279
|
+
expect(outbox.claimNext("manager-1", () => null, new Set())).toBeUndefined();
|
|
280
|
+
const expired = outbox.expireStale(Date.now() + DURABLE_DELIVERY_MAX_AGE_MS + 1);
|
|
281
|
+
expect(expired).toBe(1);
|
|
282
|
+
expect(outbox.get(row.deliveryId)).toMatchObject({ state: "failed", lastError: "delivery TTL expired before target became available" });
|
|
283
|
+
expect(outbox.listPending()).toEqual(expect.arrayContaining([
|
|
284
|
+
expect.objectContaining({ kind: "delivery_outcome_notice", targetInstance: "source", state: "queued" }),
|
|
285
|
+
]));
|
|
286
|
+
outbox.close();
|
|
287
|
+
});
|
|
288
|
+
it("does not spend submission attempts on repeated pre-begin readiness deferrals", () => {
|
|
289
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
290
|
+
const row = outbox.admit(input()).delivery;
|
|
291
|
+
for (let attempt = 1; attempt <= DURABLE_DELIVERY_MAX_ATTEMPTS + 1; attempt++) {
|
|
292
|
+
const claimed = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
293
|
+
expect(claimed.attemptNo).toBe(attempt);
|
|
294
|
+
expect(outbox.retryBeforeBegin(row.deliveryId, "target-boot-1", attempt, "readiness timeout", 0)).toBe(true);
|
|
295
|
+
}
|
|
296
|
+
expect(outbox.get(row.deliveryId)?.state).toBe("retry_wait");
|
|
297
|
+
expect(outbox.get(row.deliveryId)?.lastError).toBe("readiness timeout");
|
|
298
|
+
expect(outbox.listPending().filter(item => item.kind === "delivery_outcome_notice")).toHaveLength(0);
|
|
299
|
+
outbox.close();
|
|
300
|
+
});
|
|
301
|
+
it("bounds actual pane submission attempts and atomically queues one notice", () => {
|
|
302
|
+
vi.useFakeTimers();
|
|
303
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
304
|
+
const row = outbox.admit(input()).delivery;
|
|
305
|
+
for (let attempt = 1; attempt <= DURABLE_DELIVERY_MAX_ATTEMPTS; attempt++) {
|
|
306
|
+
const claimed = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
307
|
+
expect(claimed.attemptNo).toBe(attempt);
|
|
308
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", attempt)).toBe("begun");
|
|
309
|
+
expect(outbox.abort(row.deliveryId, "target-boot-1", attempt, "pane confirmed no write")).toBe(true);
|
|
310
|
+
vi.advanceTimersByTime(DURABLE_DELIVERY_ABORT_BACKOFF_MS + 1);
|
|
311
|
+
}
|
|
312
|
+
const exhausted = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
313
|
+
expect(exhausted.attemptNo).toBe(DURABLE_DELIVERY_MAX_ATTEMPTS + 1);
|
|
314
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", exhausted.attemptNo)).toBe("stale");
|
|
315
|
+
expect(outbox.get(row.deliveryId)?.state).toBe("failed");
|
|
316
|
+
expect(outbox.listPending().filter(item => item.kind === "delivery_outcome_notice")).toHaveLength(1);
|
|
317
|
+
outbox.close();
|
|
318
|
+
});
|
|
319
|
+
it("atomically notices uncertain submissions and never recursively notices a failed notice", () => {
|
|
320
|
+
vi.useFakeTimers();
|
|
321
|
+
const outbox = new DeliveryOutbox(tempDb(), "manager-1");
|
|
322
|
+
const row = outbox.admit(input()).delivery;
|
|
323
|
+
const claimed = outbox.claimNext("manager-1", () => "target-boot-1", new Set());
|
|
324
|
+
expect(outbox.begin(row.deliveryId, "target-boot-1", claimed.attemptNo)).toBe("begun");
|
|
325
|
+
expect(outbox.complete(row.deliveryId, "target-boot-1", claimed.attemptNo, "uncertain", "pane outcome unknown")).toBe(true);
|
|
326
|
+
const notice = outbox.listPending().find(item => item.kind === "delivery_outcome_notice");
|
|
327
|
+
expect(notice.payload.content).toContain("state=uncertain");
|
|
328
|
+
expect(notice.payload.content).toContain("Do not resend");
|
|
329
|
+
for (let attempt = 1; attempt <= DURABLE_DELIVERY_MAX_ATTEMPTS; attempt++) {
|
|
330
|
+
const noticeClaim = outbox.claimNext("manager-1", () => "source-boot-1", new Set());
|
|
331
|
+
expect(noticeClaim.deliveryId).toBe(notice.deliveryId);
|
|
332
|
+
expect(outbox.begin(notice.deliveryId, "source-boot-1", attempt)).toBe("begun");
|
|
333
|
+
expect(outbox.abort(notice.deliveryId, "source-boot-1", attempt, "source unavailable")).toBe(true);
|
|
334
|
+
vi.advanceTimersByTime(DURABLE_DELIVERY_ABORT_BACKOFF_MS + 1);
|
|
335
|
+
}
|
|
336
|
+
const finalClaim = outbox.claimNext("manager-1", () => "source-boot-1", new Set());
|
|
337
|
+
expect(outbox.begin(notice.deliveryId, "source-boot-1", finalClaim.attemptNo)).toBe("stale");
|
|
338
|
+
expect(outbox.get(notice.deliveryId)?.state).toBe("failed");
|
|
339
|
+
expect(outbox.listPending().filter(item => item.kind === "delivery_outcome_notice")).toHaveLength(0);
|
|
340
|
+
outbox.close();
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
//# sourceMappingURL=delivery-outbox.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-outbox.test.js","sourceRoot":"","sources":["../src/delivery-outbox.test.ts"],"names":[],"mappings":"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"}
|
package/dist/fleet-manager.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ import { InstanceLifecycle, type LifecycleContext } from "./instance-lifecycle.j
|
|
|
16
16
|
import { type ArchiverContext } from "./topic-archiver.js";
|
|
17
17
|
import { type StatuslineWatcherContext } from "./statusline-watcher.js";
|
|
18
18
|
import { type OutboundContext } from "./outbound-handlers.js";
|
|
19
|
+
import { DeliveryOutbox } from "./delivery-outbox.js";
|
|
20
|
+
export declare const DURABLE_DELIVERY_LANE_ALERT_MS: number;
|
|
19
21
|
import { type RawConfigPatch } from "./settings-api.js";
|
|
20
22
|
import { type AgentEndpointContext } from "./agent-endpoint.js";
|
|
21
23
|
import { ClassicChannelManager } from "./classic-channel-manager.js";
|
|
@@ -112,6 +114,14 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
112
114
|
readonly spawnGate: SpawnGate;
|
|
113
115
|
/** Fleet-level backend reachability memory (fed by pty_error / startup panes). */
|
|
114
116
|
readonly backendOutage: BackendOutageTracker;
|
|
117
|
+
/** Stable for this FleetManager OS-process lifetime; Daemon objects have their own boot IDs. */
|
|
118
|
+
readonly managerBootId: `${string}-${string}-${string}-${string}-${string}`;
|
|
119
|
+
deliveryOutbox: DeliveryOutbox | null;
|
|
120
|
+
private deliveryOutboxRecovered;
|
|
121
|
+
private deliveryPumpScheduled;
|
|
122
|
+
private deliveryPumpRunning;
|
|
123
|
+
private deliveryPumpTimer;
|
|
124
|
+
private readonly activeDurableTargets;
|
|
115
125
|
/** Live view of lifecycle.daemons — used throughout; not deprecated. */
|
|
116
126
|
get daemons(): Map<string, import("./daemon.js").Daemon>;
|
|
117
127
|
fleetConfig: FleetConfig | null;
|
|
@@ -330,6 +340,30 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
330
340
|
private viewToken;
|
|
331
341
|
private healthServerListening;
|
|
332
342
|
constructor(dataDir: string);
|
|
343
|
+
private ensureDeliveryOutbox;
|
|
344
|
+
/** Synchronous SQLite admission; the caller may acknowledge only after this returns. */
|
|
345
|
+
admitDurableDelivery(input: {
|
|
346
|
+
operationId: string;
|
|
347
|
+
sourceDaemonBootId?: string;
|
|
348
|
+
sourceInstance: string;
|
|
349
|
+
targetInstance: string;
|
|
350
|
+
targetSession?: string;
|
|
351
|
+
kind: string;
|
|
352
|
+
correlationId: string;
|
|
353
|
+
payload: Record<string, unknown>;
|
|
354
|
+
}): {
|
|
355
|
+
deliveryId: string;
|
|
356
|
+
state: string;
|
|
357
|
+
duplicate: boolean;
|
|
358
|
+
};
|
|
359
|
+
getDaemonBootId(instanceName: string): string | undefined;
|
|
360
|
+
markDurableResponseDelivered(sourceInstance: string, operationId: string): void;
|
|
361
|
+
/** Called after a replacement Daemon object is installed in lifecycle.daemons. */
|
|
362
|
+
onDaemonReady(name: string, daemonBootId: string): void;
|
|
363
|
+
private scheduleDeliveryOutboxPump;
|
|
364
|
+
private runDeliveryOutboxPump;
|
|
365
|
+
private dispatchDurableDelivery;
|
|
366
|
+
private waitForDurableLaneRelease;
|
|
333
367
|
private spawnConcurrency;
|
|
334
368
|
/** Wire the one fleet-wide storm into notification and recovery surfaces. */
|
|
335
369
|
private bindStormWindowEvents;
|
|
@@ -535,7 +569,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
535
569
|
/** Whether this target already has an ordinary non-user delivery in its FIFO. */
|
|
536
570
|
hasPendingIdleGatedDelivery(instanceName: string): boolean;
|
|
537
571
|
/** Single delivery facade: wake paused CLIs and serialize non-user work behind idle. */
|
|
538
|
-
deliverToInstance(instanceName: string, payload: Record<string, unknown>, options?: DeliveryOptions): Promise<void>;
|
|
572
|
+
deliverToInstance(instanceName: string, payload: Record<string, unknown>, options?: DeliveryOptions): Promise<boolean | void>;
|
|
539
573
|
/** Fleet admin is an explicit config allowlist entry, not merely an open/paired user. */
|
|
540
574
|
isFleetAdmin(userId: string, adapterId?: string): boolean;
|
|
541
575
|
changeInstancePauseState(name: string, action: "pause" | "wake"): Promise<"paused" | "awake" | "not_idle">;
|
|
@@ -653,6 +687,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
653
687
|
restartSingleInstance(name: string, opts?: {
|
|
654
688
|
freshStart?: boolean;
|
|
655
689
|
}): Promise<void>;
|
|
690
|
+
isInstanceRestarting(name: string): boolean;
|
|
656
691
|
private doRestartSingleInstance;
|
|
657
692
|
/**
|
|
658
693
|
* Mark an instance so its next daemon start skips session resume. Written AFTER
|
|
@@ -1030,6 +1065,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
1030
1065
|
* the chain drains, so idle messages hold no memory.
|
|
1031
1066
|
*/
|
|
1032
1067
|
private deliveryStatusChains;
|
|
1068
|
+
/** #725: in-flight CLI env probes, keyed by backend name. Coalesces concurrent /model requests. */
|
|
1069
|
+
private pendingCliEnvProbes;
|
|
1033
1070
|
reactMessageStatus(instanceName: string, chatId: string, messageId: string, emoji: string, threadId?: string): void;
|
|
1034
1071
|
/**
|
|
1035
1072
|
* Apply a terminal delivery verdict. Telegram maps ✅ to 👀 and ❌ to 👎 in
|