@cello-protocol/daemon 0.0.120 → 0.0.121
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/content-park.d.ts +1 -1
- package/dist/content-park.d.ts.map +1 -1
- package/dist/content-park.js +64 -12
- package/dist/content-park.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +46 -32
- package/dist/daemon.js.map +1 -1
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +275 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-store.d.ts +181 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +409 -0
- package/dist/document-store.js.map +1 -0
- package/dist/reconnect-drain.d.ts +15 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +51 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/session-node-manager.d.ts +39 -0
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +152 -12
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-relay-client.d.ts +2 -0
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +16 -1
- package/dist/session-relay-client.js.map +1 -1
- package/package.json +6 -5
package/dist/content-park.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface ContentParkDeps {
|
|
|
9
9
|
getKeyProvider: (agentName: string) => KeyProvider | undefined;
|
|
10
10
|
}
|
|
11
11
|
export declare function createContentPark(deps: ContentParkDeps): {
|
|
12
|
-
autoRecoverForAgent: (agentName: string) => Promise<void>;
|
|
12
|
+
autoRecoverForAgent: (agentName: string, trigger?: string) => Promise<void>;
|
|
13
13
|
registerHandlers: (handlers: Map<string, IpcHandler>) => void;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=content-park.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-park.d.ts","sourceRoot":"","sources":["../src/content-park.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"content-park.d.ts","sourceRoot":"","sources":["../src/content-park.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;CAChE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe;qCA0IP,MAAM,uBAA4B,OAAO,CAAC,IAAI,CAAC;iCAsDzD,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,KAAG,IAAI;EAwEnE"}
|
package/dist/content-park.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { randomUUID } from "node:crypto";
|
|
20
20
|
import { ContentParkClient } from "./content-park-client.js";
|
|
21
|
+
import { extractErrorMessage } from "./session-relay-client.js";
|
|
21
22
|
export function createContentPark(deps) {
|
|
22
23
|
const { logger, sessionNodeManager, agents, getKeyProvider } = deps;
|
|
23
24
|
// MSG-001-3b: content-park deposit/pull IPC handlers. These drive the daemon's
|
|
@@ -47,8 +48,11 @@ export function createContentPark(deps) {
|
|
|
47
48
|
if (!kp.openContentSeal)
|
|
48
49
|
return { ok: false, reason: "cannot_unseal" };
|
|
49
50
|
const node = sessionNodeManager.getStandingReceiverNode();
|
|
51
|
+
// Name the CAUSE, not the exit point (review F6): one label stood for "still building",
|
|
52
|
+
// "agent never came online", "shutting down" and "none exists", and it is the label that
|
|
53
|
+
// misdescribed this incident 102 times.
|
|
50
54
|
if (!node)
|
|
51
|
-
return { ok: false, reason:
|
|
55
|
+
return { ok: false, reason: sessionNodeManager.standingReceiverAbsenceReason(recipientAgent.name) };
|
|
52
56
|
const recipientPubkey = recipientAgent.pubkey ?? "";
|
|
53
57
|
const client = new ContentParkClient({ relayPeerId, relayAddrs, logger });
|
|
54
58
|
const entries = await client.pull(node, Buffer.from(recipientPubkey, "hex"), kp);
|
|
@@ -90,7 +94,7 @@ export function createContentPark(deps) {
|
|
|
90
94
|
await client.confirm(node, Buffer.from(recipientPubkey, "hex"), contentHashBytes, kp);
|
|
91
95
|
}
|
|
92
96
|
catch (err) {
|
|
93
|
-
logger.warn("content.recover.confirm.failed", { sessionId: e.sessionIdHex, contentHash: e.contentHashHex, error:
|
|
97
|
+
logger.warn("content.recover.confirm.failed", { sessionId: e.sessionIdHex, contentHash: e.contentHashHex, error: extractErrorMessage(err) });
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
else if (ingest.ok) {
|
|
@@ -107,7 +111,7 @@ export function createContentPark(deps) {
|
|
|
107
111
|
await client.confirm(node, Buffer.from(recipientPubkey, "hex"), contentHashBytes, kp);
|
|
108
112
|
}
|
|
109
113
|
catch (err) {
|
|
110
|
-
logger.warn("content.recover.confirm.failed", { sessionId: e.sessionIdHex, contentHash: e.contentHashHex, error:
|
|
114
|
+
logger.warn("content.recover.confirm.failed", { sessionId: e.sessionIdHex, contentHash: e.contentHashHex, error: extractErrorMessage(err) });
|
|
111
115
|
}
|
|
112
116
|
}
|
|
113
117
|
else {
|
|
@@ -124,7 +128,44 @@ export function createContentPark(deps) {
|
|
|
124
128
|
// every relay it has sessions on — symmetric to the SENDER's flushAwaitingContent. Without this,
|
|
125
129
|
// nothing in production pulls a recipient's store-and-forward mailbox and parked content is never
|
|
126
130
|
// delivered. Best-effort; a relay miss is retried on the next agent-online.
|
|
127
|
-
|
|
131
|
+
/**
|
|
132
|
+
* DOD-PARK-DRAIN-1 (review F1): one drain per agent at a time, and at most one re-run queued.
|
|
133
|
+
*
|
|
134
|
+
* The drain used to have two triggers; it now has five (agent start, receiver install, every
|
|
135
|
+
* watchdog rebuild, signaling reconnect, the periodic backstop), and under the relay churn this
|
|
136
|
+
* unit exists to survive, rebuilds arrive faster than a drain completes. Concurrent drains are
|
|
137
|
+
* NOT safe by dedup alone: ingestReceivedContent decides "already present" synchronously from
|
|
138
|
+
* the in-memory tree and then AWAITS the security gateway before appending, so two drains that
|
|
139
|
+
* pull the same parked entry can both pass that check and both append — a duplicate leaf, the
|
|
140
|
+
* frontier divergence the recovery path exists to avoid.
|
|
141
|
+
*
|
|
142
|
+
* Coalesced, not queued: a trigger that arrives mid-drain asks for exactly ONE more pass when
|
|
143
|
+
* the current one finishes. Ten rebuilds during one slow pull cost one re-run, not ten.
|
|
144
|
+
*/
|
|
145
|
+
const draining = new Set();
|
|
146
|
+
/** agentName → the trigger of the coalesced re-run owed to it (absent = none owed). */
|
|
147
|
+
const drainRerunRequested = new Map();
|
|
148
|
+
async function autoRecoverForAgent(agentName, trigger = "unspecified") {
|
|
149
|
+
if (draining.has(agentName)) {
|
|
150
|
+
drainRerunRequested.set(agentName, trigger);
|
|
151
|
+
logger.debug("content.recover.auto.coalesced", { agentName, trigger });
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
draining.add(agentName);
|
|
155
|
+
try {
|
|
156
|
+
let pass = trigger;
|
|
157
|
+
do {
|
|
158
|
+
drainRerunRequested.delete(agentName);
|
|
159
|
+
await drainOnce(agentName, pass);
|
|
160
|
+
pass = drainRerunRequested.get(agentName) ?? pass;
|
|
161
|
+
} while (drainRerunRequested.has(agentName));
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
draining.delete(agentName);
|
|
165
|
+
drainRerunRequested.delete(agentName);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function drainOnce(agentName, trigger) {
|
|
128
169
|
const agent = agents.find((a) => a.name === agentName);
|
|
129
170
|
if (!agent?.pubkey)
|
|
130
171
|
return;
|
|
@@ -140,21 +181,24 @@ export function createContentPark(deps) {
|
|
|
140
181
|
total += res.recovered;
|
|
141
182
|
}
|
|
142
183
|
else {
|
|
143
|
-
// Review #2: a non-ok result (signing_key_unavailable / cannot_unseal /
|
|
144
|
-
//
|
|
145
|
-
//
|
|
184
|
+
// Review #2: a non-ok result (signing_key_unavailable / cannot_unseal / the precise
|
|
185
|
+
// no-receiver cause) was previously silent — log the reason so a run where every relay
|
|
186
|
+
// failed is distinguishable from "nothing was parked".
|
|
146
187
|
failed++;
|
|
147
|
-
logger.warn("content.recover.auto.relay_failed", { agentName, relayPeerId: r.relayPeerId, reason: res.reason });
|
|
188
|
+
logger.warn("content.recover.auto.relay_failed", { agentName, trigger, relayPeerId: r.relayPeerId, reason: res.reason });
|
|
148
189
|
}
|
|
149
190
|
}
|
|
150
191
|
catch (err) {
|
|
151
192
|
failed++;
|
|
152
|
-
|
|
193
|
+
// extractErrorMessage, NOT String(err): libp2p and the transport reject with structured
|
|
194
|
+
// plain objects, and String() renders every one of them "[object Object]". 102 of these
|
|
195
|
+
// fired during the 2026-08-04 incident and not one was diagnosable from the log.
|
|
196
|
+
logger.warn("content.recover.auto.failed", { agentName, trigger, stage: "relay", relayPeerId: r.relayPeerId, error: extractErrorMessage(err) });
|
|
153
197
|
}
|
|
154
198
|
}
|
|
155
199
|
// Emit the completion event UNCONDITIONALLY — not only when total > 0 — so a clean "nothing
|
|
156
200
|
// parked" run is observable, and distinct from an all-failed run.
|
|
157
|
-
logger.info("content.recover.auto.completed", { agentName, recovered: total, relayCount: relays.length, failedRelays: failed });
|
|
201
|
+
logger.info("content.recover.auto.completed", { agentName, trigger, recovered: total, relayCount: relays.length, failedRelays: failed });
|
|
158
202
|
}
|
|
159
203
|
/** Phase 2: register the IPC handlers, once the handler map exists. */
|
|
160
204
|
function registerHandlers(handlers) {
|
|
@@ -215,9 +259,17 @@ export function createContentPark(deps) {
|
|
|
215
259
|
const guidanceByReason = {
|
|
216
260
|
signing_key_unavailable: `Signing key for '${recipientAgent.name}' is not loaded.`,
|
|
217
261
|
cannot_unseal: `Agent '${recipientAgent.name}' key provider cannot open content seals.`,
|
|
218
|
-
|
|
262
|
+
standing_receiver_creating: "The daemon's standing receiver is still being built; retry in a few seconds.",
|
|
263
|
+
agent_offline: `Agent '${recipientAgent.name}' is not online, so this daemon has no node to pull from. Start it with cello_start_agent.`,
|
|
264
|
+
no_standing_receiver: "No agent on this daemon has a standing receiver; start an agent first.",
|
|
265
|
+
daemon_shutting_down: "The daemon is shutting down.",
|
|
219
266
|
};
|
|
220
|
-
|
|
267
|
+
// The WIRE reason stays the documented contract string for every no-receiver cause
|
|
268
|
+
// (types.ts STANDING_RECEIVER_UNAVAILABLE); the precise cause rides in the guidance,
|
|
269
|
+
// where it helps the operator without breaking a consumer that branches on the reason.
|
|
270
|
+
const noReceiver = new Set(["standing_receiver_creating", "agent_offline", "no_standing_receiver", "daemon_shutting_down"]);
|
|
271
|
+
const wireReason = noReceiver.has(res.reason) ? "standing_receiver_unavailable" : res.reason;
|
|
272
|
+
return { ok: false, reason: wireReason, guidance: guidanceByReason[res.reason] ?? "Recover failed." };
|
|
221
273
|
}
|
|
222
274
|
return { ok: true, recovered: res.recovered, pulled: res.pulled };
|
|
223
275
|
});
|
package/dist/content-park.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-park.js","sourceRoot":"","sources":["../src/content-park.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-park.js","sourceRoot":"","sources":["../src/content-park.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EAKrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAiB7G,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EAKrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAiB7G,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,2BAA2B,CAAC;AAS5G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAkBnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,IAAI,oBAAoB,CAAC;IAClC;;;;OAIG;IACH,qBAAqB,IAAI,kBAAkB,CAAC;IAC5C;;;;OAIG;IACH,oBAAoB,IAAI,kBAAkB,CAAC;IAC3C;;;OAGG;IACH,iBAAiB,IAAI,eAAe,CAAC;IACrC;;OAEG;IACH,eAAe,IAAI,YAAY,CAAC;CACjC;AAYD,qBAAa,4BAA6B,YAAW,mBAAmB;IAChE,UAAU,CAAC,MAAM,EAAE,iBAAiB;CA8B3C;AAID,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAS7E"}
|
package/dist/daemon.js
CHANGED
|
@@ -53,6 +53,8 @@ const MAX_SUBMISSION_BODY_CHARS = 4000;
|
|
|
53
53
|
// CELLO-M7-MSG-001 (AC-013/AC-018): the single application content-size cap, enforced
|
|
54
54
|
// at the send point here (the receive point lives in the transport content decode).
|
|
55
55
|
import { sealParkEnvelope } from "./park-envelope.js";
|
|
56
|
+
import { extractErrorMessage } from "./session-relay-client.js";
|
|
57
|
+
import { createReconnectDrain } from "./reconnect-drain.js";
|
|
56
58
|
import { resolveCelloEnv, createTransportSelector, isProductionVariant, } from "./transport-composition.js";
|
|
57
59
|
import { whoLabel } from "./who-label.js";
|
|
58
60
|
import { wireSessionCeremonyHandler, wireSessionOfferHandler, wireSealCeremonyHandler, runAgentRefresh } from "./session-ceremony.js";
|
|
@@ -307,7 +309,29 @@ async function startDaemonHoldingLock(config, singletonLock) {
|
|
|
307
309
|
agents,
|
|
308
310
|
getKeyProvider: (agentName) => keyProviders.get(agentName),
|
|
309
311
|
});
|
|
310
|
-
const autoRecoverForAgent = (agentName) => contentPark.autoRecoverForAgent(agentName);
|
|
312
|
+
const autoRecoverForAgent = (agentName, trigger) => contentPark.autoRecoverForAgent(agentName, trigger);
|
|
313
|
+
// DOD-PARK-DRAIN-1: drain where the parking actually happens. Content parks when the RELAY link
|
|
314
|
+
// drops; the manager tells us the moment this agent has a receiver again (first ensure, watchdog
|
|
315
|
+
// rebuild, auth_ok rebuild) and on its slow backstop sweep. Before this, a message that hit a
|
|
316
|
+
// relay churn gap sat parked until a human restarted the receiving daemon.
|
|
317
|
+
sessionNodeManager.setParkedDrainHook((agentName, reason) => {
|
|
318
|
+
void autoRecoverForAgent(agentName, reason).catch((err) => {
|
|
319
|
+
// autoRecoverForAgent catches per-relay errors internally; this is the backstop, and it uses
|
|
320
|
+
// extractErrorMessage because the transport rejects with structured plain objects that
|
|
321
|
+
// String() renders as "[object Object]" — the reason 100+ real failures were undiagnosable.
|
|
322
|
+
logger.warn("content.recover.auto.failed", { agentName, trigger: reason, stage: "drain_hook", error: extractErrorMessage(err) });
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
// DOD-PARK-DRAIN-1: what an agent's signaling reconnect does — ensure THEN drain, never both at
|
|
326
|
+
// once. Constructed here, beside the content park it drains; `onlineAgents` is read inside the
|
|
327
|
+
// callback (at connect time), never during this construction, so its later declaration is not a
|
|
328
|
+
// temporal-dead-zone hazard.
|
|
329
|
+
const onSignalingConnected = createReconnectDrain({
|
|
330
|
+
logger,
|
|
331
|
+
isAgentOnline: (agentName) => onlineAgents.has(agentName),
|
|
332
|
+
ensureStandingReceiver: (agentName) => sessionNodeManager.ensureStandingReceiverForAgent(agentName),
|
|
333
|
+
drainParked: (agentName) => autoRecoverForAgent(agentName, "signaling_reconnect"),
|
|
334
|
+
});
|
|
311
335
|
// Created HERE, not where the seal code used to sit (~2,500 lines down), because the listeners
|
|
312
336
|
// are wired into every signaling manager below — and the originals were FUNCTION DECLARATIONS,
|
|
313
337
|
// so hoisting silently let them be CALLED 1,900 lines before they were DEFINED. A const in their
|
|
@@ -322,7 +346,7 @@ async function startDaemonHoldingLock(config, singletonLock) {
|
|
|
322
346
|
sessionNodeManager,
|
|
323
347
|
getPersistence,
|
|
324
348
|
getKeyProvider: (agentName) => keyProviders.get(agentName),
|
|
325
|
-
recoverContent: (agentName) => autoRecoverForAgent(agentName),
|
|
349
|
+
recoverContent: (agentName) => autoRecoverForAgent(agentName, "seal_upgrade_gate"),
|
|
326
350
|
});
|
|
327
351
|
// The two seal-initiation flows cello_close_session dispatches into (seal-flows.ts): the
|
|
328
352
|
// counterparty is gone (seal-interrupted) or live (bilateral). Neither can notarize on its own —
|
|
@@ -479,34 +503,24 @@ async function startDaemonHoldingLock(config, singletonLock) {
|
|
|
479
503
|
logger,
|
|
480
504
|
maxReconnectAttempts: Number.MAX_SAFE_INTEGER,
|
|
481
505
|
maxBackoffMs: 30_000,
|
|
482
|
-
//
|
|
483
|
-
//
|
|
484
|
-
//
|
|
485
|
-
//
|
|
486
|
-
//
|
|
487
|
-
//
|
|
488
|
-
//
|
|
506
|
+
// Two things happen when this agent's directory signaling reaches 'connected' (the first
|
|
507
|
+
// connect AND every reconnect after a drop), and the ORDER is the contract — see
|
|
508
|
+
// reconnect-drain.ts.
|
|
509
|
+
//
|
|
510
|
+
// RE-REGISTER THE STANDING RECEIVER (2026-07-31 incident). The receiver's LIFETIME is tied to
|
|
511
|
+
// this daemon; its REGISTRATION is tied to this stream, and the stream turns over roughly
|
|
512
|
+
// every 70 seconds. ensureStandingReceiverForAgent ran only at agent start, so 46 of 48
|
|
513
|
+
// reconnects in one hour left every agent unregistered — the directory then answers
|
|
514
|
+
// `targetStreamFound: false` and a session request fails with `target_offline`, while
|
|
515
|
+
// `cello status`, `agent.online` and the directory's own agent_presence all still report the
|
|
516
|
+
// agent healthy. Only a daemon restart recovered it.
|
|
517
|
+
//
|
|
518
|
+
// THEN DRAIN (M8C-RELAYWAKE-1, "check relay on wakeup"): re-pull this agent's parked mailbox
|
|
519
|
+
// from every relay it has session history with, so a message parked while signaling was down
|
|
520
|
+
// is not left until the next agent start. The drain needs the node the ensure builds, which
|
|
521
|
+
// is why it no longer runs beside it.
|
|
489
522
|
onConnected: () => {
|
|
490
|
-
|
|
491
|
-
// RE-REGISTER THE STANDING RECEIVER. The receiver's LIFETIME is tied to this daemon; its
|
|
492
|
-
// REGISTRATION is tied to this stream, and the stream turns over roughly every 70 seconds.
|
|
493
|
-
// ensureStandingReceiverForAgent ran only at agent start, so 46 of 48 reconnects in one hour
|
|
494
|
-
// left every agent unregistered — the directory then answers `targetStreamFound: false` and
|
|
495
|
-
// a session request fails with `target_offline`, while `cello status`, `agent.online` and the
|
|
496
|
-
// directory's own agent_presence all still report the agent healthy. Silent, and it does not
|
|
497
|
-
// self-heal: only a daemon restart recovered it (2026-07-31 incident).
|
|
498
|
-
//
|
|
499
|
-
// Guarded on onlineAgents because this fires on the FIRST connect too, and an agent that was
|
|
500
|
-
// never started must not acquire a receiver here. Re-entry at start is harmless —
|
|
501
|
-
// #ensureStandingReceiver returns immediately when one exists or is being created.
|
|
502
|
-
if (onlineAgents.has(agentName)) {
|
|
503
|
-
void sessionNodeManager.ensureStandingReceiverForAgent(agentName).catch((err) => {
|
|
504
|
-
logger.warn("session.standing_receiver.reregister.failed", {
|
|
505
|
-
agentName,
|
|
506
|
-
error: err instanceof Error ? err.message : String(err),
|
|
507
|
-
});
|
|
508
|
-
});
|
|
509
|
-
}
|
|
523
|
+
onSignalingConnected(agentName);
|
|
510
524
|
},
|
|
511
525
|
});
|
|
512
526
|
const entry = { signaling: mgr, getNode: () => nodeRef };
|
|
@@ -1634,15 +1648,15 @@ async function startDaemonHoldingLock(config, singletonLock) {
|
|
|
1634
1648
|
void sessionNodeManager.ensureStandingReceiverForAgent(name)
|
|
1635
1649
|
.then(() => flushAwaitingContent(name))
|
|
1636
1650
|
.catch((err) => {
|
|
1637
|
-
logger.warn("session.standing_receiver.ensure.failed", { agentName: name, reason:
|
|
1651
|
+
logger.warn("session.standing_receiver.ensure.failed", { agentName: name, reason: extractErrorMessage(err) });
|
|
1638
1652
|
})
|
|
1639
1653
|
// DOD-MSG-4 (auto-recover-on-reconnect): RECEIVER drains its parked mailbox from every relay it
|
|
1640
1654
|
// has sessions on (symmetric to the sender re-park). Its own stage so a failure is labelled
|
|
1641
1655
|
// correctly (review #4), not as a standing-receiver error. autoRecoverForAgent catches per-relay
|
|
1642
1656
|
// errors internally, so this .catch is a backstop only.
|
|
1643
|
-
.then(() => autoRecoverForAgent(name))
|
|
1657
|
+
.then(() => autoRecoverForAgent(name, "agent_start"))
|
|
1644
1658
|
.catch((err) => {
|
|
1645
|
-
logger.warn("content.recover.auto.failed", { agentName: name,
|
|
1659
|
+
logger.warn("content.recover.auto.failed", { agentName: name, stage: "agent_start", error: extractErrorMessage(err) });
|
|
1646
1660
|
});
|
|
1647
1661
|
logger.info("agent.online", { agentName: name, agentPubkey: agent.pubkey ?? "" });
|
|
1648
1662
|
// MCP-002: Broadcast agent_state_changed to ALL connections
|