@cello-protocol/daemon 0.0.135 → 0.0.137
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/close-session-handler.d.ts.map +1 -1
- package/dist/close-session-handler.js +18 -2
- package/dist/close-session-handler.js.map +1 -1
- package/dist/daemon.js +15 -0
- package/dist/daemon.js.map +1 -1
- package/dist/document-ack-inbound.js +18 -8
- package/dist/document-ack-inbound.js.map +1 -1
- package/dist/document-delivery.d.ts.map +1 -1
- package/dist/document-delivery.js +16 -2
- package/dist/document-delivery.js.map +1 -1
- package/dist/document-frame-router.d.ts.map +1 -1
- package/dist/document-frame-router.js +21 -0
- package/dist/document-frame-router.js.map +1 -1
- package/dist/document-gate.d.ts +10 -0
- package/dist/document-gate.d.ts.map +1 -1
- package/dist/document-gate.js.map +1 -1
- package/dist/document-handlers.d.ts.map +1 -1
- package/dist/document-handlers.js +69 -0
- package/dist/document-handlers.js.map +1 -1
- package/dist/document-inbound.d.ts +32 -8
- package/dist/document-inbound.d.ts.map +1 -1
- package/dist/document-inbound.js +112 -42
- package/dist/document-inbound.js.map +1 -1
- package/dist/document-layer.d.ts.map +1 -1
- package/dist/document-layer.js +12 -0
- package/dist/document-layer.js.map +1 -1
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-screen.d.ts +59 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +148 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +5 -0
- package/dist/document-store.d.ts.map +1 -1
- package/dist/document-store.js +36 -0
- package/dist/document-store.js.map +1 -1
- package/dist/retry-queue.d.ts +27 -0
- package/dist/retry-queue.d.ts.map +1 -1
- package/dist/retry-queue.js +179 -0
- package/dist/retry-queue.js.map +1 -1
- package/dist/seal-flows.d.ts.map +1 -1
- package/dist/seal-flows.js +5 -2
- package/dist/seal-flows.js.map +1 -1
- package/dist/session-node-manager.d.ts +12 -0
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +76 -3
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-read-handlers.d.ts.map +1 -1
- package/dist/session-read-handlers.js +3 -1
- package/dist/session-read-handlers.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-SCREEN-1 — the document content gate: REFUSE, never mutate.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY A DOCUMENT DOES NOT GET THE MESSAGE SANITIZER ─────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* The inbound message path may REWRITE content on a `redact` verdict: the operator sees a sanitized
|
|
7
|
+
* form while the leaf still binds the original. That is right for conversation and catastrophic for
|
|
8
|
+
* a document. Measured on 2026-08-05 against eighteen realistic samples, six were silently altered:
|
|
9
|
+
*
|
|
10
|
+
* कर्म → कर्म a different Hindi word; the ZWJ is orthography in Devanagari
|
|
11
|
+
* 👨👩👧 → 👨👩👧 one family emoji becomes three separate people
|
|
12
|
+
* Hello → Hello full-width is how CJK users type
|
|
13
|
+
* file is ½ → file is 1⁄2 ligatures and fractions normalised away
|
|
14
|
+
* <|im_start|> → ␠ a document ABOUT prompt formats loses its subject
|
|
15
|
+
*
|
|
16
|
+
* For a CRDT replica that is not a false positive. It is permanent divergence: the receiver applies
|
|
17
|
+
* different bytes than the sender signed, both sides believe they converged, and nothing reports
|
|
18
|
+
* it. And screening the PROJECTION instead does not help — documents are read-WRITE, so the next
|
|
19
|
+
* write-back diffs the operator's screened file against their replica and publishes the redaction
|
|
20
|
+
* as a real, signed edit that deletes the peer's content.
|
|
21
|
+
*
|
|
22
|
+
* So this rule has exactly two outcomes: carry the text exactly, or refuse the envelope. There is
|
|
23
|
+
* no third return value, and that is deliberate — a rule that COULD return replacement text would
|
|
24
|
+
* eventually be used to.
|
|
25
|
+
*
|
|
26
|
+
* ── WHAT IT REFUSES, AND WHY THAT LIST IS SHORT ───────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* Only characters whose presence changes what the text MEANS to a reader or a model, independent of
|
|
29
|
+
* language:
|
|
30
|
+
*
|
|
31
|
+
* - BIDI overrides and isolates, which make what an operator reads differ from what the document
|
|
32
|
+
* says. In a shared document that is a signature on content the signer did not see.
|
|
33
|
+
* - Chat-template control markers, which are not content in any document — they are an attempt to
|
|
34
|
+
* address the reader's model rather than the reader.
|
|
35
|
+
*
|
|
36
|
+
* NOT on the list: zero-width joiners, full-width forms, ligatures, typographic punctuation,
|
|
37
|
+
* combining marks. Every one of those is legitimate text in some language, and refusing them would
|
|
38
|
+
* make CELLO unusable for the operators most likely to need it. Zero-width SPACE is refused —
|
|
39
|
+
* it joins nothing, and its only use in a document is to hide a boundary.
|
|
40
|
+
*
|
|
41
|
+
* This is the denylist half. `DOD-DOC-PROFILE-1` adds the allowlist: a codepoint set agreed at the
|
|
42
|
+
* handshake and bound into `document_id`, which is a stronger instrument because it is decided at
|
|
43
|
+
* consent rather than argued at the boundary. This rule stays underneath it — a profile a peer
|
|
44
|
+
* never agreed to cannot be used to smuggle a BIDI override.
|
|
45
|
+
*/
|
|
46
|
+
import { profileViolation } from "./document-profile.js";
|
|
47
|
+
/** Named so a refusal can say which rule fired without the sender parsing prose (§16.7-6). */
|
|
48
|
+
export const SCREEN_RULE_ID = "document_content_screen";
|
|
49
|
+
/** Named separately so a refusal says whether the AGREED profile or the default floor refused. */
|
|
50
|
+
export const PROFILE_RULE_ID = "document_content_profile";
|
|
51
|
+
/**
|
|
52
|
+
* Codepoints refused anywhere in inserted text.
|
|
53
|
+
*
|
|
54
|
+
* Every entry needs a reason that survives the question "is this legitimate in some language?" —
|
|
55
|
+
* because for almost every invisible character the answer is yes, and the audit above is what
|
|
56
|
+
* happens when that question is not asked.
|
|
57
|
+
*/
|
|
58
|
+
const REFUSED_CODEPOINTS = new Set([
|
|
59
|
+
0x200b, // ZERO WIDTH SPACE — joins nothing; in a document it only hides a boundary
|
|
60
|
+
0x202a, // LEFT-TO-RIGHT EMBEDDING
|
|
61
|
+
0x202b, // RIGHT-TO-LEFT EMBEDDING
|
|
62
|
+
0x202c, // POP DIRECTIONAL FORMATTING
|
|
63
|
+
0x202d, // LEFT-TO-RIGHT OVERRIDE
|
|
64
|
+
0x202e, // RIGHT-TO-LEFT OVERRIDE — renders text as something other than it is
|
|
65
|
+
0x2066, // LEFT-TO-RIGHT ISOLATE
|
|
66
|
+
0x2067, // RIGHT-TO-LEFT ISOLATE
|
|
67
|
+
0x2068, // FIRST STRONG ISOLATE
|
|
68
|
+
0x2069, // POP DIRECTIONAL ISOLATE
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* Markers that address the READER'S MODEL rather than the reader.
|
|
72
|
+
*
|
|
73
|
+
* Matched as literal substrings, and deliberately not as a regex over "anything angle-bracketed":
|
|
74
|
+
* a document about prompt engineering legitimately discusses these, and the audit caught exactly
|
|
75
|
+
* that case being erased. Refusing is honest — the operator is told and can quote it differently —
|
|
76
|
+
* where erasing changed the document's subject without saying so.
|
|
77
|
+
*/
|
|
78
|
+
const REFUSED_MARKERS = ["<|im_start|>", "<|im_end|>", "<|endoftext|>", "<|system|>"];
|
|
79
|
+
/** `U+XXXX`, uppercase, at least four digits — the form a human reads and a machine can match. */
|
|
80
|
+
function formatCodepoint(cp) {
|
|
81
|
+
return `U+${cp.toString(16).toUpperCase().padStart(4, "0")}`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The rule. Null admits; anything else refuses.
|
|
85
|
+
*
|
|
86
|
+
* Offsets are in CODE POINTS, not UTF-16 units, because they exist for a human or an agent to find
|
|
87
|
+
* the character in their own editor — and an offset that lands mid-surrogate in a document with an
|
|
88
|
+
* emoji in it is worse than none.
|
|
89
|
+
*/
|
|
90
|
+
export const screeningRule = (diff, context) => {
|
|
91
|
+
const text = diff.inserted;
|
|
92
|
+
if (text.length === 0)
|
|
93
|
+
return null;
|
|
94
|
+
// THE AGREED PROFILE FIRST (DOD-DOC-PROFILE-1). An allowlist is the stronger instrument — the
|
|
95
|
+
// decision was made once, at consent, by a human who was engaged — so when a document has one it
|
|
96
|
+
// answers before the denylist argues character by character.
|
|
97
|
+
//
|
|
98
|
+
// It cannot WIDEN anything: every profile still refuses what the denylist below refuses, so a
|
|
99
|
+
// peer cannot ask for a permissive profile at consent time as a way out of screening. Enforced
|
|
100
|
+
// here because the sender's own enforcement is unverifiable; that is the security half, and the
|
|
101
|
+
// authoring check is the ergonomics half, not a substitute for it.
|
|
102
|
+
const violation = profileViolation(context.contentProfile, text);
|
|
103
|
+
if (violation) {
|
|
104
|
+
return {
|
|
105
|
+
reason: "document_profile_violation",
|
|
106
|
+
detail: JSON.stringify({ rule: PROFILE_RULE_ID, ...violation }),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const codepoints = new Set();
|
|
110
|
+
const offsets = [];
|
|
111
|
+
let index = 0;
|
|
112
|
+
for (const ch of text) {
|
|
113
|
+
const cp = ch.codePointAt(0);
|
|
114
|
+
if (REFUSED_CODEPOINTS.has(cp)) {
|
|
115
|
+
codepoints.add(formatCodepoint(cp));
|
|
116
|
+
offsets.push(index);
|
|
117
|
+
}
|
|
118
|
+
index++;
|
|
119
|
+
}
|
|
120
|
+
for (const marker of REFUSED_MARKERS) {
|
|
121
|
+
let at = text.indexOf(marker);
|
|
122
|
+
while (at !== -1) {
|
|
123
|
+
codepoints.add(marker);
|
|
124
|
+
// Converted to a code-point offset for the same reason as above — `indexOf` counts UTF-16.
|
|
125
|
+
offsets.push([...text.slice(0, at)].length);
|
|
126
|
+
at = text.indexOf(marker, at + marker.length);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (codepoints.size === 0)
|
|
130
|
+
return null;
|
|
131
|
+
offsets.sort((a, b) => a - b);
|
|
132
|
+
return {
|
|
133
|
+
reason: "document_content_refused",
|
|
134
|
+
// MACHINE-READABLE (§16.7-6). The default resolution is that the SENDER adopts the receiver's
|
|
135
|
+
// rule for this document — rules compose toward strict — and that only works if the sender can
|
|
136
|
+
// tell which character to stop emitting. Prose cannot carry that.
|
|
137
|
+
//
|
|
138
|
+
// Every distinct offender is named, not just the first: one round trip per character would be a
|
|
139
|
+
// rejection round each, and the protocol stalls at three.
|
|
140
|
+
detail: JSON.stringify({
|
|
141
|
+
rule: SCREEN_RULE_ID,
|
|
142
|
+
codepoints: [...codepoints],
|
|
143
|
+
count: offsets.length,
|
|
144
|
+
offsets,
|
|
145
|
+
}),
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=document-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-screen.js","sourceRoot":"","sources":["../src/document-screen.ts"],"names":[],"mappings":"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"}
|
package/dist/document-store.d.ts
CHANGED
|
@@ -298,6 +298,11 @@ export declare class DocumentStore {
|
|
|
298
298
|
/** Record that the envelope left. Not an ack — the peer has not answered yet. */
|
|
299
299
|
markDelivered(ownerAgentId: string, documentId: string, envelopeHash: string, nowMs: number): boolean;
|
|
300
300
|
/** Record that the peer acknowledged. Idempotent — a redelivered ack must not move the clock. */
|
|
301
|
+
/**
|
|
302
|
+
* WE GAVE UP — the unacked ceiling. Deliberately not `markAcked`: this records a decision of
|
|
303
|
+
* ours, and says nothing about whether the peer holds the envelope, because we do not know.
|
|
304
|
+
*/
|
|
305
|
+
markAbandoned(ownerAgentId: string, documentId: string, envelopeHash: string, nowMs: number): boolean;
|
|
301
306
|
markAcked(ownerAgentId: string, documentId: string, envelopeHash: string, nowMs: number): boolean;
|
|
302
307
|
/** Record a rejection the PEER sent us. Returns whether a row was written (idempotent by leaf). */
|
|
303
308
|
recordRejectionReceived(ownerAgentId: string, row: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.d.ts","sourceRoot":"","sources":["../src/document-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"document-store.d.ts","sourceRoot":"","sources":["../src/document-store.ts"],"names":[],"mappings":"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"}
|
package/dist/document-store.js
CHANGED
|
@@ -87,6 +87,14 @@ const CREATE_ENVELOPES_SQL = `
|
|
|
87
87
|
-- "never sent".
|
|
88
88
|
delivered_at INTEGER,
|
|
89
89
|
acked_at INTEGER,
|
|
90
|
+
-- A THIRD fact, and it is not either of the two above. abandoned_at is when WE STOPPED TRYING
|
|
91
|
+
-- (the unacked ceiling) — a local decision, and NOT a claim about the peer.
|
|
92
|
+
--
|
|
93
|
+
-- It exists because the ceiling first stopped delivery by calling markAcked, and acked_at means
|
|
94
|
+
-- "the peer's daemon said it admitted or rejected it". Overloading it made withdraw tell the
|
|
95
|
+
-- operator "your peer holds it, so it cannot be withdrawn" about an envelope the peer may never
|
|
96
|
+
-- have seen. Same class as any other false claim of confirmation, and a column is cheaper.
|
|
97
|
+
abandoned_at INTEGER,
|
|
90
98
|
-- How many times delivery has been attempted, and when the next attempt is due. On the row,
|
|
91
99
|
-- because a backoff that resets on restart is not a backoff — a daemon restarting in a
|
|
92
100
|
-- reconnect loop would hammer an unreachable peer at full rate forever.
|
|
@@ -218,6 +226,17 @@ export class DocumentStore {
|
|
|
218
226
|
// entire delivery pass down with it.
|
|
219
227
|
this.#db.exec(CREATE_WITHDRAWALS_SQL);
|
|
220
228
|
this.#db.exec(CREATE_SNAPSHOTS_SQL);
|
|
229
|
+
// COLUMN BIRTH. A daemon that already holds an envelope log must gain the column without
|
|
230
|
+
// losing the log. `ALTER TABLE ... ADD COLUMN` throws when it is already there, which is the
|
|
231
|
+
// guard — the same pattern `document-handshake.ts` uses, rather than a version number nobody
|
|
232
|
+
// maintains.
|
|
233
|
+
try {
|
|
234
|
+
this.#db.exec("ALTER TABLE document_envelopes ADD COLUMN abandoned_at INTEGER");
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Already present. Any other cause is a corrupt schema, which the next query reports with a
|
|
238
|
+
// better message than a rethrow here could.
|
|
239
|
+
}
|
|
221
240
|
// Reading the log in arrival order is the only access pattern that matters.
|
|
222
241
|
this.#db.exec("CREATE INDEX IF NOT EXISTS idx_document_envelopes_order ON document_envelopes (owner_agent_id, document_id, log_index)");
|
|
223
242
|
}
|
|
@@ -654,6 +673,11 @@ export class DocumentStore {
|
|
|
654
673
|
const rows = this.#db
|
|
655
674
|
.prepare(`SELECT * FROM document_envelopes
|
|
656
675
|
WHERE owner_agent_id = ? AND sender_agent_id = ? AND acked_at IS NULL
|
|
676
|
+
-- ABANDONED rows are not pending. This is what actually stops the worker at the
|
|
677
|
+
-- unacked ceiling: the selection reads no document STATUS, so setting the document
|
|
678
|
+
-- stalled changed what the surface said and nothing about what the worker did, and one
|
|
679
|
+
-- envelope went out 74 times against a cap of 5.
|
|
680
|
+
AND abandoned_at IS NULL
|
|
657
681
|
-- UPDATES only. A withdrawal record is local audit — the update it concerns was never
|
|
658
682
|
-- delivered, so there is nothing for the peer to act on — and a rejection reaches the
|
|
659
683
|
-- peer through the rejection protocol, not this worker. Without the scope the worker
|
|
@@ -714,6 +738,18 @@ export class DocumentStore {
|
|
|
714
738
|
return Number(info.changes) > 0;
|
|
715
739
|
}
|
|
716
740
|
/** Record that the peer acknowledged. Idempotent — a redelivered ack must not move the clock. */
|
|
741
|
+
/**
|
|
742
|
+
* WE GAVE UP — the unacked ceiling. Deliberately not `markAcked`: this records a decision of
|
|
743
|
+
* ours, and says nothing about whether the peer holds the envelope, because we do not know.
|
|
744
|
+
*/
|
|
745
|
+
markAbandoned(ownerAgentId, documentId, envelopeHash, nowMs) {
|
|
746
|
+
const info = this.#db
|
|
747
|
+
.prepare(`UPDATE document_envelopes SET abandoned_at = ?
|
|
748
|
+
WHERE owner_agent_id = ? AND document_id = ? AND envelope_hash = ?
|
|
749
|
+
AND acked_at IS NULL AND abandoned_at IS NULL`)
|
|
750
|
+
.run(nowMs, ownerAgentId, documentId, envelopeHash);
|
|
751
|
+
return Number(info.changes) > 0;
|
|
752
|
+
}
|
|
717
753
|
markAcked(ownerAgentId, documentId, envelopeHash, nowMs) {
|
|
718
754
|
const info = this.#db
|
|
719
755
|
.prepare(`UPDATE document_envelopes SET acked_at = ?, delivered_at = COALESCE(delivered_at, ?)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.js","sourceRoot":"","sources":["../src/document-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-store.js","sourceRoot":"","sources":["../src/document-store.ts"],"names":[],"mappings":"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"}
|
package/dist/retry-queue.d.ts
CHANGED
|
@@ -79,6 +79,33 @@ export declare class RetryQueue {
|
|
|
79
79
|
* Returns the number of successfully delivered messages.
|
|
80
80
|
*/
|
|
81
81
|
drainSession(sessionId: string, sendFn: ResendFn): Promise<number>;
|
|
82
|
+
/**
|
|
83
|
+
* Remove the DIRECT-resend entries (awaiting_ack = 0) of a session that can never drain again.
|
|
84
|
+
*
|
|
85
|
+
* Removal is authorised by ONE thing: the session reached a status from which no resend can
|
|
86
|
+
* succeed. Never by age — "old" is not "undeliverable", and an age sweep discards live content
|
|
87
|
+
* on a slow link (the DOD-SESSION-REAP-1 rule).
|
|
88
|
+
*
|
|
89
|
+
* Awaiting-ACK rows are deliberately left alone. They drain through `drainAwaitingToPark`, which
|
|
90
|
+
* the startup flush really calls, so they are not stranded; their terminal disposition is a
|
|
91
|
+
* separate concern. Deleting them here would discard content that path still owes delivery on.
|
|
92
|
+
*
|
|
93
|
+
* @returns how many entries were removed — 0 is the normal case and is silent.
|
|
94
|
+
*/
|
|
95
|
+
reapTerminalSession(sessionId: string, terminalStatus: "sealed" | "abandoned"): number;
|
|
96
|
+
/**
|
|
97
|
+
* DOD-RETRYQ-STRAND-1: reconcile at startup. The terminal-transition hook only covers sessions
|
|
98
|
+
* that go terminal while THIS daemon is running. A session that was already sealed/abandoned
|
|
99
|
+
* before boot never transitions again — `cello_close_session` returns `already_abandoned`
|
|
100
|
+
* without reaching `abandonSession` — so its rows would strand forever with no path that could
|
|
101
|
+
* ever clear them. That is the shape of the row found on the live daemon.
|
|
102
|
+
*
|
|
103
|
+
* Still evidence-gated: the session's terminal status is the evidence, read from the DB. Nothing
|
|
104
|
+
* here consults age.
|
|
105
|
+
*
|
|
106
|
+
* @returns total entries reaped across all already-terminal sessions.
|
|
107
|
+
*/
|
|
108
|
+
reapAlreadyTerminalSessions(): number;
|
|
82
109
|
/** Total retry queue depth across all sessions. */
|
|
83
110
|
getTotalDepth(): number;
|
|
84
111
|
/** Retry queue depth for a specific session. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-queue.d.ts","sourceRoot":"","sources":["../src/retry-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,gEAAgE;AAChE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;sFAIkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB;;;;;kCAK8B;IAC9B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"retry-queue.d.ts","sourceRoot":"","sources":["../src/retry-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/retry-queue.js
CHANGED
|
@@ -12,6 +12,23 @@
|
|
|
12
12
|
*/
|
|
13
13
|
/** Per-session cap. On overflow the OLDEST entry is evicted. */
|
|
14
14
|
export const RETRY_QUEUE_CAP = 1000;
|
|
15
|
+
/**
|
|
16
|
+
* Park failures from which the entry can NEVER recover, so keeping it only re-attempts it at every
|
|
17
|
+
* boot forever. An ALLOWLIST, and deliberately a short one: everything not named here is kept,
|
|
18
|
+
* because the cost of keeping a deliverable row is one WARN per boot while the cost of dropping one
|
|
19
|
+
* is a message the sender believes was delivered.
|
|
20
|
+
*
|
|
21
|
+
* `owning_agent_not_found` qualifies on evidence, not judgement: it means `agentNameForId` found no
|
|
22
|
+
* `agents` row for the entry's agent_id, and `remove-agent` is permanent and frees the name. The
|
|
23
|
+
* owner cannot come back, so no future boot can park this.
|
|
24
|
+
*
|
|
25
|
+
* The other four are all recoverable on a later boot and MUST NOT be added:
|
|
26
|
+
* no_persisted_relay_endpoint — the endpoint is learned when the session next reconnects
|
|
27
|
+
* no_counterparty — the sessions row can still gain one
|
|
28
|
+
* standing_receiver_unavailable— the receiver is rebuilt on the next agent start
|
|
29
|
+
* signing_key_unavailable — the key provider may simply not be loaded yet
|
|
30
|
+
*/
|
|
31
|
+
const PERMANENT_PARK_FAILURES = new Set(["owning_agent_not_found"]);
|
|
15
32
|
export class RetryQueue {
|
|
16
33
|
#db;
|
|
17
34
|
#logger;
|
|
@@ -293,6 +310,140 @@ export class RetryQueue {
|
|
|
293
310
|
}
|
|
294
311
|
return delivered;
|
|
295
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Remove the DIRECT-resend entries (awaiting_ack = 0) of a session that can never drain again.
|
|
315
|
+
*
|
|
316
|
+
* Removal is authorised by ONE thing: the session reached a status from which no resend can
|
|
317
|
+
* succeed. Never by age — "old" is not "undeliverable", and an age sweep discards live content
|
|
318
|
+
* on a slow link (the DOD-SESSION-REAP-1 rule).
|
|
319
|
+
*
|
|
320
|
+
* Awaiting-ACK rows are deliberately left alone. They drain through `drainAwaitingToPark`, which
|
|
321
|
+
* the startup flush really calls, so they are not stranded; their terminal disposition is a
|
|
322
|
+
* separate concern. Deleting them here would discard content that path still owes delivery on.
|
|
323
|
+
*
|
|
324
|
+
* @returns how many entries were removed — 0 is the normal case and is silent.
|
|
325
|
+
*/
|
|
326
|
+
reapTerminalSession(sessionId, terminalStatus) {
|
|
327
|
+
// The in-memory queue is NOT the authority, and must not be the source for either half of this.
|
|
328
|
+
// A row written by an earlier daemon exists only in the DB until loadFromDb runs — the live
|
|
329
|
+
// strand was exactly that shape — so the rows to announce are read from the DB, and the same
|
|
330
|
+
// set is then deleted. Announcing from memory while deleting from disk would silently discard
|
|
331
|
+
// any row the map does not happen to hold, which is the precise failure AC3 names as the worse
|
|
332
|
+
// one.
|
|
333
|
+
let doomed;
|
|
334
|
+
try {
|
|
335
|
+
doomed = this.#db
|
|
336
|
+
.prepare("SELECT nonce_hex FROM retry_queue WHERE session_id = ? AND awaiting_ack = 0")
|
|
337
|
+
.all(sessionId);
|
|
338
|
+
}
|
|
339
|
+
catch (err) {
|
|
340
|
+
this.#logger.error("message.retry.persist.failed", {
|
|
341
|
+
sessionId,
|
|
342
|
+
operation: "terminal_reap_select",
|
|
343
|
+
error: err instanceof Error ? err.message : String(err),
|
|
344
|
+
impact: "could not read the rows to reap; nothing was deleted and retryQueueDepth stays pinned",
|
|
345
|
+
});
|
|
346
|
+
return 0;
|
|
347
|
+
}
|
|
348
|
+
if (doomed.length === 0) {
|
|
349
|
+
// Still drop any memory-only residue so depth cannot disagree with the DB, then stay silent:
|
|
350
|
+
// the overwhelming majority of terminal sessions have nothing queued, and an event on every
|
|
351
|
+
// one of them buries the occurrence that means content was actually lost.
|
|
352
|
+
this.#queues.delete(sessionId);
|
|
353
|
+
this.#positionCounters.delete(sessionId);
|
|
354
|
+
return 0;
|
|
355
|
+
}
|
|
356
|
+
let removed;
|
|
357
|
+
try {
|
|
358
|
+
const result = this.#db
|
|
359
|
+
.prepare("DELETE FROM retry_queue WHERE session_id = ? AND awaiting_ack = 0")
|
|
360
|
+
.run(sessionId);
|
|
361
|
+
// Both drivers in use (node:sqlite in tests, SQLCipher in production) report `changes`. Its
|
|
362
|
+
// absence is a driver contract violation, not a case to paper over with a memory count — the
|
|
363
|
+
// whole point of this method is that memory is not authoritative.
|
|
364
|
+
if (result?.changes === undefined) {
|
|
365
|
+
this.#logger.error("message.retry.persist.failed", {
|
|
366
|
+
sessionId,
|
|
367
|
+
operation: "terminal_reap_delete",
|
|
368
|
+
error: "driver returned no `changes` from DELETE",
|
|
369
|
+
impact: "rows may or may not have been removed; the reported count cannot be trusted",
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
removed = Number(result?.changes ?? doomed.length);
|
|
373
|
+
}
|
|
374
|
+
catch (err) {
|
|
375
|
+
// A failed DELETE must not leave memory claiming the rows are gone — the next loadFromDb
|
|
376
|
+
// would resurrect them and the depth would silently disagree with the DB.
|
|
377
|
+
this.#logger.error("message.retry.persist.failed", {
|
|
378
|
+
sessionId,
|
|
379
|
+
operation: "terminal_reap_delete",
|
|
380
|
+
error: err instanceof Error ? err.message : String(err),
|
|
381
|
+
impact: "terminal-session reap did not remove the rows; retryQueueDepth stays pinned",
|
|
382
|
+
});
|
|
383
|
+
return 0;
|
|
384
|
+
}
|
|
385
|
+
// Each dropped entry is content the sender believes it sent. Say so per entry, with the nonce,
|
|
386
|
+
// so the loss is nameable rather than a bare count.
|
|
387
|
+
for (const row of doomed) {
|
|
388
|
+
this.#logger.warn("session.retryqueue.content.dropped", {
|
|
389
|
+
sessionId,
|
|
390
|
+
nonce: row.nonce_hex,
|
|
391
|
+
reason: terminalStatus,
|
|
392
|
+
impact: "queued content was never delivered and is now discarded — the session can no longer drain",
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
this.#queues.delete(sessionId);
|
|
396
|
+
this.#positionCounters.delete(sessionId);
|
|
397
|
+
this.#logger.info("session.retryqueue.reaped", {
|
|
398
|
+
sessionId,
|
|
399
|
+
entryCount: removed,
|
|
400
|
+
reason: terminalStatus,
|
|
401
|
+
});
|
|
402
|
+
return removed;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* DOD-RETRYQ-STRAND-1: reconcile at startup. The terminal-transition hook only covers sessions
|
|
406
|
+
* that go terminal while THIS daemon is running. A session that was already sealed/abandoned
|
|
407
|
+
* before boot never transitions again — `cello_close_session` returns `already_abandoned`
|
|
408
|
+
* without reaching `abandonSession` — so its rows would strand forever with no path that could
|
|
409
|
+
* ever clear them. That is the shape of the row found on the live daemon.
|
|
410
|
+
*
|
|
411
|
+
* Still evidence-gated: the session's terminal status is the evidence, read from the DB. Nothing
|
|
412
|
+
* here consults age.
|
|
413
|
+
*
|
|
414
|
+
* @returns total entries reaped across all already-terminal sessions.
|
|
415
|
+
*/
|
|
416
|
+
reapAlreadyTerminalSessions() {
|
|
417
|
+
let rows;
|
|
418
|
+
try {
|
|
419
|
+
rows = this.#db
|
|
420
|
+
.prepare(`SELECT DISTINCT rq.session_id AS session_id, s.status AS status
|
|
421
|
+
FROM retry_queue rq
|
|
422
|
+
JOIN sessions s ON s.session_id = rq.session_id
|
|
423
|
+
WHERE rq.awaiting_ack = 0
|
|
424
|
+
AND s.status IN ('sealed', 'abandoned')`)
|
|
425
|
+
.all();
|
|
426
|
+
}
|
|
427
|
+
catch (err) {
|
|
428
|
+
this.#logger.error("message.retry.persist.failed", {
|
|
429
|
+
operation: "startup_terminal_reconcile",
|
|
430
|
+
error: err instanceof Error ? err.message : String(err),
|
|
431
|
+
impact: "already-terminal sessions were not reconciled; retryQueueDepth may stay pinned",
|
|
432
|
+
});
|
|
433
|
+
return 0;
|
|
434
|
+
}
|
|
435
|
+
let total = 0;
|
|
436
|
+
for (const row of rows) {
|
|
437
|
+
total += this.reapTerminalSession(row.session_id, row.status === "sealed" ? "sealed" : "abandoned");
|
|
438
|
+
}
|
|
439
|
+
if (total > 0) {
|
|
440
|
+
this.#logger.info("session.retryqueue.startup.reconciled", {
|
|
441
|
+
sessionCount: rows.length,
|
|
442
|
+
entryCount: total,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
return total;
|
|
446
|
+
}
|
|
296
447
|
/** Total retry queue depth across all sessions. */
|
|
297
448
|
getTotalDepth() {
|
|
298
449
|
let total = 0;
|
|
@@ -436,6 +587,34 @@ export class RetryQueue {
|
|
|
436
587
|
// standing_receiver_unavailable, signing_key_unavailable) is otherwise invisible — the only
|
|
437
588
|
// trace would be `parkedCount: 0`, a number with no reason. The entry is still KEPT for the
|
|
438
589
|
// next flush.
|
|
590
|
+
if (PERMANENT_PARK_FAILURES.has(result.error)) {
|
|
591
|
+
// Nothing a later boot can change, so keeping it just re-attempts it forever. ERROR, not
|
|
592
|
+
// WARN: this is the terminal loss of content the sender believes it delivered, and it is
|
|
593
|
+
// the one occurrence in this path that an operator must actually see.
|
|
594
|
+
this.#logger.error("content.park.abandoned", {
|
|
595
|
+
agentId,
|
|
596
|
+
sessionId,
|
|
597
|
+
contentHash: entry.contentHashHex,
|
|
598
|
+
error: result.error,
|
|
599
|
+
impact: "the owning agent no longer exists, so this content can never be parked or delivered; it is discarded rather than retried at every boot",
|
|
600
|
+
});
|
|
601
|
+
const gone = q.indexOf(entry);
|
|
602
|
+
if (gone !== -1)
|
|
603
|
+
q.splice(gone, 1);
|
|
604
|
+
try {
|
|
605
|
+
this.#db
|
|
606
|
+
.prepare("DELETE FROM retry_queue WHERE agent_id = ? AND session_id = ? AND content_hash_hex = ? AND awaiting_ack = 1")
|
|
607
|
+
.run(agentId, sessionId, entry.contentHashHex);
|
|
608
|
+
}
|
|
609
|
+
catch (err) {
|
|
610
|
+
this.#logger.error("message.retry.persist.failed", {
|
|
611
|
+
agentId, sessionId, nonce: entry.contentHashHex, operation: "park_abandon_delete",
|
|
612
|
+
error: err instanceof Error ? err.message : String(err),
|
|
613
|
+
impact: "the unparkable row was not removed and will be re-attempted at every boot",
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
continue;
|
|
617
|
+
}
|
|
439
618
|
this.#logger.warn("content.park.failed", {
|
|
440
619
|
agentId,
|
|
441
620
|
sessionId,
|