@cello-protocol/daemon 0.0.197 → 0.0.198

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.
Files changed (185) hide show
  1. package/dist/agent-admin-handlers.d.ts +56 -0
  2. package/dist/agent-admin-handlers.d.ts.map +1 -0
  3. package/dist/agent-admin-handlers.js +70 -0
  4. package/dist/agent-admin-handlers.js.map +1 -0
  5. package/dist/agent-handlers.d.ts +8 -7
  6. package/dist/agent-handlers.d.ts.map +1 -1
  7. package/dist/agent-handlers.js.map +1 -1
  8. package/dist/agent-selection-root.d.ts +29 -0
  9. package/dist/agent-selection-root.d.ts.map +1 -0
  10. package/dist/agent-selection-root.js +126 -0
  11. package/dist/agent-selection-root.js.map +1 -0
  12. package/dist/attendance-wiring.d.ts +44 -0
  13. package/dist/attendance-wiring.d.ts.map +1 -0
  14. package/dist/attendance-wiring.js +432 -0
  15. package/dist/attendance-wiring.js.map +1 -0
  16. package/dist/backup-restore-handlers.d.ts +10 -0
  17. package/dist/backup-restore-handlers.d.ts.map +1 -0
  18. package/dist/backup-restore-handlers.js +82 -0
  19. package/dist/backup-restore-handlers.js.map +1 -0
  20. package/dist/boot-agents.d.ts +64 -0
  21. package/dist/boot-agents.d.ts.map +1 -0
  22. package/dist/boot-agents.js +241 -0
  23. package/dist/boot-agents.js.map +1 -0
  24. package/dist/boot-connection-state.d.ts +40 -0
  25. package/dist/boot-connection-state.d.ts.map +1 -0
  26. package/dist/boot-connection-state.js +136 -0
  27. package/dist/boot-connection-state.js.map +1 -0
  28. package/dist/boot-core.d.ts +36 -0
  29. package/dist/boot-core.d.ts.map +1 -0
  30. package/dist/boot-core.js +292 -0
  31. package/dist/boot-core.js.map +1 -0
  32. package/dist/boot-parked-content.d.ts +34 -0
  33. package/dist/boot-parked-content.d.ts.map +1 -0
  34. package/dist/boot-parked-content.js +527 -0
  35. package/dist/boot-parked-content.js.map +1 -0
  36. package/dist/boot-sweeps.d.ts +22 -0
  37. package/dist/boot-sweeps.d.ts.map +1 -0
  38. package/dist/boot-sweeps.js +50 -0
  39. package/dist/boot-sweeps.js.map +1 -0
  40. package/dist/connection-agents.d.ts +16 -0
  41. package/dist/connection-agents.d.ts.map +1 -0
  42. package/dist/connection-agents.js +68 -0
  43. package/dist/connection-agents.js.map +1 -0
  44. package/dist/content-park.d.ts.map +1 -1
  45. package/dist/content-park.js +274 -25
  46. package/dist/content-park.js.map +1 -1
  47. package/dist/daemon-handle.d.ts +57 -0
  48. package/dist/daemon-handle.d.ts.map +1 -0
  49. package/dist/daemon-handle.js +2 -0
  50. package/dist/daemon-handle.js.map +1 -0
  51. package/dist/daemon-status-report.d.ts +40 -0
  52. package/dist/daemon-status-report.d.ts.map +1 -0
  53. package/dist/daemon-status-report.js +78 -0
  54. package/dist/daemon-status-report.js.map +1 -0
  55. package/dist/daemon.d.ts +5 -66
  56. package/dist/daemon.d.ts.map +1 -1
  57. package/dist/daemon.js +332 -4894
  58. package/dist/daemon.js.map +1 -1
  59. package/dist/delivery-open-registry.d.ts +1 -1
  60. package/dist/delivery-open-registry.js +1 -1
  61. package/dist/directory-connect.d.ts +27 -0
  62. package/dist/directory-connect.d.ts.map +1 -0
  63. package/dist/directory-connect.js +98 -0
  64. package/dist/directory-connect.js.map +1 -0
  65. package/dist/disconnect-cleanup.d.ts +45 -0
  66. package/dist/disconnect-cleanup.d.ts.map +1 -0
  67. package/dist/disconnect-cleanup.js +65 -0
  68. package/dist/disconnect-cleanup.js.map +1 -0
  69. package/dist/document-surface.d.ts +32 -0
  70. package/dist/document-surface.d.ts.map +1 -0
  71. package/dist/document-surface.js +150 -0
  72. package/dist/document-surface.js.map +1 -0
  73. package/dist/document-wiring.d.ts +53 -0
  74. package/dist/document-wiring.d.ts.map +1 -0
  75. package/dist/document-wiring.js +323 -0
  76. package/dist/document-wiring.js.map +1 -0
  77. package/dist/inbound-sessions.d.ts +9 -1
  78. package/dist/inbound-sessions.d.ts.map +1 -1
  79. package/dist/inbound-sessions.js +9 -1
  80. package/dist/inbound-sessions.js.map +1 -1
  81. package/dist/index.d.ts +1 -2
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -2
  84. package/dist/index.js.map +1 -1
  85. package/dist/ipc-surface.d.ts +44 -0
  86. package/dist/ipc-surface.d.ts.map +1 -0
  87. package/dist/ipc-surface.js +106 -0
  88. package/dist/ipc-surface.js.map +1 -0
  89. package/dist/network-directory-node.d.ts +0 -18
  90. package/dist/network-directory-node.d.ts.map +1 -1
  91. package/dist/network-directory-node.js +1 -38
  92. package/dist/network-directory-node.js.map +1 -1
  93. package/dist/notification-handlers.d.ts.map +1 -1
  94. package/dist/notification-handlers.js +2 -0
  95. package/dist/notification-handlers.js.map +1 -1
  96. package/dist/operator-guidance.d.ts +25 -0
  97. package/dist/operator-guidance.d.ts.map +1 -0
  98. package/dist/operator-guidance.js +50 -0
  99. package/dist/operator-guidance.js.map +1 -0
  100. package/dist/park-recovery.d.ts +22 -1
  101. package/dist/park-recovery.d.ts.map +1 -1
  102. package/dist/park-recovery.js.map +1 -1
  103. package/dist/park-refusals.d.ts +147 -0
  104. package/dist/park-refusals.d.ts.map +1 -0
  105. package/dist/park-refusals.js +331 -0
  106. package/dist/park-refusals.js.map +1 -0
  107. package/dist/refusal-notices.d.ts.map +1 -1
  108. package/dist/refusal-notices.js +22 -2
  109. package/dist/refusal-notices.js.map +1 -1
  110. package/dist/refusal-reasons.d.ts +13 -0
  111. package/dist/refusal-reasons.d.ts.map +1 -1
  112. package/dist/refusal-reasons.js +19 -0
  113. package/dist/refusal-reasons.js.map +1 -1
  114. package/dist/register-handler.d.ts +8 -7
  115. package/dist/register-handler.d.ts.map +1 -1
  116. package/dist/register-handler.js.map +1 -1
  117. package/dist/session-content-handlers.d.ts.map +1 -1
  118. package/dist/session-content-handlers.js +2 -0
  119. package/dist/session-content-handlers.js.map +1 -1
  120. package/dist/session-content-ingest.d.ts +1 -0
  121. package/dist/session-content-ingest.d.ts.map +1 -1
  122. package/dist/session-content-ingest.js +2 -2
  123. package/dist/session-content-ingest.js.map +1 -1
  124. package/dist/session-node-factory.d.ts +18 -0
  125. package/dist/session-node-factory.d.ts.map +1 -0
  126. package/dist/session-node-factory.js +182 -0
  127. package/dist/session-node-factory.js.map +1 -0
  128. package/dist/session-node-manager.d.ts +1 -0
  129. package/dist/session-node-manager.d.ts.map +1 -1
  130. package/dist/session-node-manager.js.map +1 -1
  131. package/dist/session-node-types.d.ts +8 -0
  132. package/dist/session-node-types.d.ts.map +1 -1
  133. package/dist/session-node-types.js.map +1 -1
  134. package/dist/session-notify.d.ts +46 -0
  135. package/dist/session-notify.d.ts.map +1 -0
  136. package/dist/session-notify.js +115 -0
  137. package/dist/session-notify.js.map +1 -0
  138. package/dist/session-read-handlers.d.ts.map +1 -1
  139. package/dist/session-read-handlers.js +0 -1
  140. package/dist/session-read-handlers.js.map +1 -1
  141. package/dist/session-salt-agreement.d.ts +0 -7
  142. package/dist/session-salt-agreement.d.ts.map +1 -1
  143. package/dist/session-salt-agreement.js +0 -7
  144. package/dist/session-salt-agreement.js.map +1 -1
  145. package/dist/session-views.d.ts +46 -0
  146. package/dist/session-views.d.ts.map +1 -0
  147. package/dist/session-views.js +197 -0
  148. package/dist/session-views.js.map +1 -0
  149. package/dist/signal-handlers.d.ts +66 -0
  150. package/dist/signal-handlers.d.ts.map +1 -0
  151. package/dist/signal-handlers.js +975 -0
  152. package/dist/signal-handlers.js.map +1 -0
  153. package/dist/signaling-wiring.d.ts +100 -0
  154. package/dist/signaling-wiring.d.ts.map +1 -0
  155. package/dist/signaling-wiring.js +392 -0
  156. package/dist/signaling-wiring.js.map +1 -0
  157. package/dist/start-agent.d.ts +64 -0
  158. package/dist/start-agent.d.ts.map +1 -0
  159. package/dist/start-agent.js +136 -0
  160. package/dist/start-agent.js.map +1 -0
  161. package/dist/status-handler.d.ts +46 -0
  162. package/dist/status-handler.d.ts.map +1 -0
  163. package/dist/status-handler.js +58 -0
  164. package/dist/status-handler.js.map +1 -0
  165. package/dist/test-handlers.d.ts +62 -0
  166. package/dist/test-handlers.d.ts.map +1 -0
  167. package/dist/test-handlers.js +239 -0
  168. package/dist/test-handlers.js.map +1 -0
  169. package/dist/types.d.ts +0 -11
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js +0 -12
  172. package/dist/types.js.map +1 -1
  173. package/dist/unresolved-nodes-report.d.ts +14 -0
  174. package/dist/unresolved-nodes-report.d.ts.map +1 -0
  175. package/dist/unresolved-nodes-report.js +96 -0
  176. package/dist/unresolved-nodes-report.js.map +1 -0
  177. package/dist/who-resolver.d.ts +15 -0
  178. package/dist/who-resolver.d.ts.map +1 -0
  179. package/dist/who-resolver.js +46 -0
  180. package/dist/who-resolver.js.map +1 -0
  181. package/dist/wire-content-hash.d.ts +0 -2
  182. package/dist/wire-content-hash.d.ts.map +1 -1
  183. package/dist/wire-content-hash.js +0 -4
  184. package/dist/wire-content-hash.js.map +1 -1
  185. package/package.json +5 -5
@@ -0,0 +1,239 @@
1
+ import { REFUSAL_REASONS, CAPACITY_REASONS } from "./refusal-reasons.js";
2
+ export function registerTestHandlers(deps) {
3
+ const { handlers, logger, sessionNodeManager, retryQueue, nonceDedupStore, deliveryOpens, pubkeyOfAgent, dispatchSessionStateChangedWithTelegram, enqueueInboundSession, recordRefusal, inboundSessionQueues, getConnState, } = deps;
4
+ handlers.set("queue_failed_send", async (params, _connectionId) => {
5
+ const sessionId = params?.sessionId;
6
+ const nonceHex = params?.nonce;
7
+ const contentHex = params?.content;
8
+ if (!sessionId || !nonceHex || !contentHex) {
9
+ return { error: "missing_params", guidance: "Provide sessionId, nonce (hex), and content (hex)." };
10
+ }
11
+ const nonce = Buffer.from(nonceHex, "hex");
12
+ const content = Buffer.from(contentHex, "hex");
13
+ retryQueue.enqueue(sessionId, nonce, content);
14
+ return { queued: true, queueDepth: retryQueue.getSessionDepth(sessionId) };
15
+ });
16
+ // CELLO-M7-MSG-001 (AC-004/AC-005): the send path records un-acked content here when
17
+ // its TTF timer fires, so a crash before the relay park confirms is recoverable at the
18
+ // next startup flush. Stored in the SAME retry_queue table (awaiting_ack = 1).
19
+ // M12-P12 verification surface. REFUSES unless the daemon was started with
20
+ // CELLO_FAULT_INJECTION=1 — the gate is here rather than at the call site so a normal daemon
21
+ // cannot be talked into dropping messages by anything that can reach the socket, and the refusal
22
+ // names why rather than silently no-opping.
23
+ handlers.set("debug_inject_park_fault", async (params) => {
24
+ if (process.env.CELLO_FAULT_INJECTION !== "1") {
25
+ return {
26
+ error: "fault_injection_disabled",
27
+ guidance: "Start the daemon with CELLO_FAULT_INJECTION=1 to enable. This is a verification surface for M12-P12 and is inert in a normal daemon.",
28
+ };
29
+ }
30
+ const count = typeof params?.count === "number" ? params.count : 1;
31
+ const cause = typeof params?.cause === "string" ? params.cause : undefined;
32
+ const armed = sessionNodeManager.injectParkFault(count, cause);
33
+ // The park fault alone reproduces nothing — the counterparty's session node accepts the frame
34
+ // and the park path is never entered. Arm the dial failure with it unless told otherwise.
35
+ const sendArmed = params?.withSendFault === false ? 0 : sessionNodeManager.injectSendFault(count);
36
+ logger.warn("content.park.fault.armed", { count: armed, sendArmed, cause: cause ?? "standing_receiver_creating" });
37
+ return { armed, sendArmed };
38
+ });
39
+ handlers.set("enqueue_awaiting_content", async (params, connectionId) => {
40
+ const sessionId = params?.sessionId;
41
+ const contentHashHex = params?.contentHash;
42
+ const contentHex = params?.content;
43
+ if (!sessionId || !contentHashHex || !contentHex) {
44
+ return { error: "missing_params", guidance: "Provide sessionId, contentHash (hex), and content (hex)." };
45
+ }
46
+ // DOD-LOOP-1: awaiting content is keyed by the OWNING agent. Prefer an explicit agentName param;
47
+ // fall back to the connection's current agent.
48
+ // DOD-AGENT-ID-JOINKEY-1: the old `?? ""` fell back to an EMPTY-STRING agent, silently merging
49
+ // every unaddressed caller's awaiting content into one nameless queue. There is no such agent.
50
+ const agentName = params?.agentName
51
+ ?? getConnState(connectionId)?.currentAgent;
52
+ if (!agentName) {
53
+ return { error: "no_current_agent", guidance: "Select an agent with cello_use_agent, or pass agentName." };
54
+ }
55
+ const agentId = sessionNodeManager.resolveAgentId(agentName);
56
+ // The fault-injection IPC seam. It states all three trailing values explicitly rather than
57
+ // relying on defaults (B2b-1 pass-2 F1): `undefined` for the ordering record and the algorithm
58
+ // is what this path genuinely has — it injects a bare queued entry — and saying so keeps the
59
+ // seam honest about what it is producing rather than inheriting whatever the signature assumed.
60
+ retryQueue.enqueueAwaitingContent(agentId, sessionId, Buffer.from(contentHashHex, "hex"), Buffer.from(contentHex, "hex"), undefined, undefined, undefined);
61
+ return { queued: true, awaitingDepth: retryQueue.getAwaitingDepth(agentId, sessionId) };
62
+ });
63
+ // CELLO-M7-MSG-001: a `persisted` delivery ACK (or a confirmed park) clears the durable
64
+ // awaiting-ACK entry so the startup flush does not re-park already-delivered content.
65
+ handlers.set("mark_content_acked", async (params, connectionId) => {
66
+ const sessionId = params?.sessionId;
67
+ const contentHashHex = params?.contentHash;
68
+ if (!sessionId || !contentHashHex) {
69
+ return { error: "missing_params", guidance: "Provide sessionId and contentHash (hex)." };
70
+ }
71
+ const agentName = params?.agentName
72
+ ?? getConnState(connectionId)?.currentAgent;
73
+ if (!agentName) {
74
+ return { error: "no_current_agent", guidance: "Select an agent with cello_use_agent, or pass agentName." };
75
+ }
76
+ const agentId = sessionNodeManager.resolveAgentId(agentName);
77
+ retryQueue.markContentAcked(agentId, sessionId, Buffer.from(contentHashHex, "hex"));
78
+ return { acked: true, awaitingDepth: retryQueue.getAwaitingDepth(agentId, sessionId) };
79
+ });
80
+ handlers.set("check_nonce", async (params, _connectionId) => {
81
+ const sessionId = params?.sessionId;
82
+ const nonceHex = params?.nonce;
83
+ const senderPubkeyHex = params?.senderPubkey;
84
+ if (!sessionId || !nonceHex || !senderPubkeyHex) {
85
+ return { error: "missing_params", guidance: "Provide sessionId, nonce (hex), and senderPubkey (hex)." };
86
+ }
87
+ const nonce = Buffer.from(nonceHex, "hex");
88
+ const senderPubkey = Buffer.from(senderPubkeyHex, "hex");
89
+ const duplicate = nonceDedupStore.checkAndAdd(sessionId, nonce, senderPubkey);
90
+ return { duplicate };
91
+ });
92
+ // DAEMON-003: drain_session IPC handler — triggered on peer reconnect.
93
+ // Returns pending entry metadata (nonces only — SI-002 forbids content in IPC frames).
94
+ // The actual drain+delivery is triggered separately when a real sendFn is available.
95
+ handlers.set("drain_session", async (params, _connectionId) => {
96
+ const sessionId = params?.sessionId;
97
+ if (!sessionId) {
98
+ return { error: "missing_params", guidance: "Provide sessionId." };
99
+ }
100
+ const depth = retryQueue.getSessionDepth(sessionId);
101
+ const entries = retryQueue.getSessionEntries(sessionId);
102
+ return { pendingCount: depth, nonces: entries.map(e => e.nonceHex) };
103
+ });
104
+ // MCP-002: Test-only handler to emit session lifecycle events.
105
+ // Guarded by CELLO_ENV=test — never available in production.
106
+ if (process.env["CELLO_ENV"] === "test") {
107
+ handlers.set("__test_emit_session_event", async (params, _connectionId) => {
108
+ const type = params?.type;
109
+ const sessionId = params?.sessionId;
110
+ const agentName = params?.agentName;
111
+ const counterpartyPubkey = params?.counterpartyPubkey ?? null;
112
+ if (!type || !sessionId || !agentName) {
113
+ return { error: "missing_params", guidance: "Provide type, sessionId, and agentName." };
114
+ }
115
+ if (type === "created") {
116
+ const sessionPeerId = params?.sessionPeerId ?? "";
117
+ const correlationId = params?.correlationId ?? "";
118
+ logger.info("session.node.created", { sessionId, agentName, sessionPeerId, correlationId });
119
+ dispatchSessionStateChangedWithTelegram(agentName, sessionId, "created", counterpartyPubkey);
120
+ }
121
+ else if (type === "destroyed") {
122
+ const state = params?.state ?? "interrupted";
123
+ const reason = params?.reason ?? state;
124
+ logger.info("session.node.destroyed", { sessionId, agentName, reason });
125
+ dispatchSessionStateChangedWithTelegram(agentName, sessionId, state, counterpartyPubkey);
126
+ }
127
+ return { ok: true };
128
+ });
129
+ // DOD-M12B-DELIVERY-QUIET-1: drive the delivery-open intent directly, so the doorbell exemption
130
+ // is testable without standing up a document, a peer daemon and a real directory negotiation.
131
+ // The registry's begin() hands back a closure, so the releases are held here by key.
132
+ // The hook takes AGENT NAMES and resolves both to pubkeys through `pubkeyOfAgent`, exactly as the
133
+ // real delivery adapter does. That is deliberate: the first version of this hook let a test
134
+ // register a tuple production never produces — an agent registered as the dialler and then
135
+ // emitted as the receiver of its own dial — so the suite proved the guard's boolean logic and
136
+ // nothing about the wiring, and stayed green against a guard that could never fire.
137
+ const testDeliveryReleases = new Map();
138
+ // DOD-M12B-INBOX-TRUTH-1: seed a refusal, so the ended-unread return branch's lost
139
+ // `refused_session_requests` has a regression test. The field had none before or after the fix.
140
+ handlers.set("__test_record_refusal", async (params, _connectionId) => {
141
+ const agentName = params?.agentName;
142
+ const sessionId = params?.sessionId;
143
+ if (!agentName || !sessionId)
144
+ return { error: "missing_params", guidance: "Provide agentName and sessionId." };
145
+ // The reason is VALIDATED against the closed union rather than cast through it. A test seam
146
+ // that can inject a reason production cannot produce would let a test prove the inbox handles a
147
+ // code no refusal path emits — which is the shape DOD-M15-GUARD-HEARD-1 exists to remove, and a
148
+ // seam is not exempt from it.
149
+ const asked = params?.reason ?? CAPACITY_REASONS.ABUSE_BOUND_SESSIONS_PER_SENDER;
150
+ const known = [
151
+ ...Object.values(REFUSAL_REASONS),
152
+ ...Object.values(CAPACITY_REASONS),
153
+ ];
154
+ if (!known.includes(asked)) {
155
+ return {
156
+ error: "unknown_refusal_reason",
157
+ guidance: `"${asked}" is not a reason any refusal path can emit. Use one of: ${known.join(", ")}. ` +
158
+ `Seeding an invented reason would test the inbox against a code production never produces.`,
159
+ };
160
+ }
161
+ recordRefusal(agentName, sessionId, params?.counterpartyPubkey ?? "", asked);
162
+ return { ok: true };
163
+ });
164
+ handlers.set("__test_delivery_open_begin", async (params, _connectionId) => {
165
+ const openerAgent = params?.openerAgent;
166
+ const targetAgent = params?.targetAgent;
167
+ if (!openerAgent || !targetAgent)
168
+ return { error: "missing_params", guidance: "Provide openerAgent and targetAgent (both agent NAMES)." };
169
+ const openerPubkey = pubkeyOfAgent(openerAgent);
170
+ const targetPubkey = pubkeyOfAgent(targetAgent);
171
+ testDeliveryReleases.set(`${openerAgent}>${targetAgent}`, deliveryOpens.begin(openerPubkey, targetPubkey));
172
+ return { ok: true, openerPubkey, targetPubkey };
173
+ });
174
+ handlers.set("__test_delivery_open_end", async (params, _connectionId) => {
175
+ const openerAgent = params?.openerAgent;
176
+ const targetAgent = params?.targetAgent;
177
+ if (!openerAgent || !targetAgent)
178
+ return { error: "missing_params", guidance: "Provide openerAgent and targetAgent (both agent NAMES)." };
179
+ const key = `${openerAgent}>${targetAgent}`;
180
+ testDeliveryReleases.get(key)?.();
181
+ testDeliveryReleases.delete(key);
182
+ return { ok: true };
183
+ });
184
+ // M8C-INBOX-1: test hook to enqueue a pending inbound session request (mirrors the real inbound
185
+ // flow's enqueueInboundSession) so cello_check_notifications' pending_session_requests is testable
186
+ // without standing up the full libp2p inbound path.
187
+ handlers.set("__test_enqueue_inbound_session", async (params, _connectionId) => {
188
+ const agentName = params?.agentName;
189
+ const sessionIdHex = params?.sessionId;
190
+ const counterpartyPubkeyHex = params?.counterpartyPubkey ?? "";
191
+ if (!agentName || !sessionIdHex) {
192
+ return { error: "missing_params", guidance: "Provide agentName and sessionId." };
193
+ }
194
+ enqueueInboundSession(agentName, { sessionIdHex, counterpartyPubkeyHex, genesisPrevRootHex: "" });
195
+ // M8C-TTL-1: let a test backdate the just-enqueued entry's timestamp (simulating age) without
196
+ // waiting real hours or faking global timers — enqueueInboundSession always stamps Date.now().
197
+ const enqueuedAtOverride = params?.enqueuedAtOverride;
198
+ if (enqueuedAtOverride !== undefined) {
199
+ const q = inboundSessionQueues.get(agentName);
200
+ const entry = q?.[q.length - 1];
201
+ if (entry)
202
+ entry.enqueuedAt = enqueuedAtOverride;
203
+ }
204
+ return { ok: true };
205
+ });
206
+ // TTL-terminal-reap: seed a session row at a given terminal status so tests can assert that
207
+ // reapExpiredInboundSessions drops the matching inbound queue entry without waiting 24h.
208
+ handlers.set("__test_insert_session_row", async (params, _connectionId) => {
209
+ const agentName = params?.agentName;
210
+ const sessionId = params?.sessionId;
211
+ const status = params?.status;
212
+ const counterpartyPubkey = params?.counterpartyPubkey ?? "testpubkey";
213
+ if (!agentName || !sessionId || !status) {
214
+ return { error: "missing_params", guidance: "Provide agentName, sessionId, status." };
215
+ }
216
+ const db = sessionNodeManager.getDb();
217
+ const now = Date.now();
218
+ const agentRow = db.prepare("SELECT agent_id FROM agents WHERE agent_name = ?").get(agentName);
219
+ if (!agentRow)
220
+ return { error: "agent_not_found" };
221
+ db.prepare("INSERT OR REPLACE INTO sessions (session_id, agent_id, counterparty_pubkey, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run(sessionId, agentRow.agent_id, counterpartyPubkey, status, now, now);
222
+ return { ok: true };
223
+ });
224
+ // M8C-INBOX-1 (reviewer F1): buffer a received message so a test can drive a live cello_receive
225
+ // and assert the watermark advances (the N3 delivery-marks-read coupling), without a session tree.
226
+ handlers.set("__test_buffer_received", async (params, _connectionId) => {
227
+ const agentName = params?.agentName;
228
+ const sessionId = params?.sessionId;
229
+ const seq = params?.seq;
230
+ const content = params?.content ?? "hello";
231
+ if (!agentName || !sessionId || typeof seq !== "number") {
232
+ return { error: "missing_params", guidance: "Provide agentName, sessionId, seq." };
233
+ }
234
+ sessionNodeManager.pushReceivedContentForTest(agentName, sessionId, seq, content, params?.senderPubkey ?? "cp");
235
+ return { ok: true };
236
+ });
237
+ } // end CELLO_ENV=test guard
238
+ }
239
+ //# sourceMappingURL=test-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-handlers.js","sourceRoot":"","sources":["../src/test-handlers.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -645,15 +645,4 @@ export interface SessionListResponse {
645
645
  totalMatched: number;
646
646
  sessions: SessionListEntry[];
647
647
  }
648
- export declare const ErrorCodes: {
649
- readonly DAEMON_LOCK_STALE_REMOVED: "daemon_lock_stale_removed";
650
- readonly DAEMON_SOCKET_BIND_FAILED: "daemon_socket_bind_failed";
651
- readonly AGENT_LOAD_FAILED: "agent_load_failed";
652
- readonly IPC_CONNECTION_LIMIT: "ipc_connection_limit";
653
- readonly CONNECTION_VALIDATION_TIMEOUT: "connection_validation_timeout";
654
- readonly DIRECTORY_UNREACHABLE_AT_LOGIN: "directory_unreachable_at_login";
655
- readonly MAX_SESSIONS_REACHED: "max_sessions_reached";
656
- readonly SESSION_NODE_CREATION_FAILED: "session_node_creation_failed";
657
- readonly STANDING_RECEIVER_UNAVAILABLE: "standing_receiver_unavailable";
658
- };
659
648
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -17,16 +17,4 @@ export const STANDING_RECEIVER_AGENT_NAME = "__standing_receiver__";
17
17
  * Maximum number of concurrent session nodes per daemon.
18
18
  */
19
19
  export const MAX_SESSION_NODES = 32;
20
- // --- Error codes ---
21
- export const ErrorCodes = {
22
- DAEMON_LOCK_STALE_REMOVED: "daemon_lock_stale_removed",
23
- DAEMON_SOCKET_BIND_FAILED: "daemon_socket_bind_failed",
24
- AGENT_LOAD_FAILED: "agent_load_failed",
25
- IPC_CONNECTION_LIMIT: "ipc_connection_limit",
26
- CONNECTION_VALIDATION_TIMEOUT: "connection_validation_timeout",
27
- DIRECTORY_UNREACHABLE_AT_LOGIN: "directory_unreachable_at_login",
28
- MAX_SESSIONS_REACHED: "max_sessions_reached",
29
- SESSION_NODE_CREATION_FAILED: "session_node_creation_failed",
30
- STANDING_RECEIVER_UNAVAILABLE: "standing_receiver_unavailable",
31
- };
32
20
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgFH,gCAAgC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,uBAAgC,CAAC;AAua7E,6BAA6B;AAE7B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAwMpC,sBAAsB;AAEtB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,yBAAyB,EAAE,2BAA2B;IACtD,yBAAyB,EAAE,2BAA2B;IACtD,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,6BAA6B,EAAE,+BAA+B;IAC9D,8BAA8B,EAAE,gCAAgC;IAChE,oBAAoB,EAAE,sBAAsB;IAC5C,4BAA4B,EAAE,8BAA8B;IAC5D,6BAA6B,EAAE,+BAA+B;CACtD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgFH,gCAAgC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,uBAAgC,CAAC;AAua7E,6BAA6B;AAE7B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { RosterFreshness } from "./roster-freshness.js";
2
+ import type { NodeResolveFailure } from "./directory-bootstrap.js";
3
+ export interface UnresolvedNodesDeps {
4
+ getUnresolvedNodes: () => NodeResolveFailure[];
5
+ getUnresolvedSweptAt: () => string | null;
6
+ lastRosterSweepError: () => RosterFreshness["last_sweep_error"] | undefined;
7
+ manifestConfigured: boolean;
8
+ }
9
+ export declare function createUnresolvedNodesReport(deps: UnresolvedNodesDeps): {
10
+ unresolvedNodesForStatus: () => {
11
+ directory_endpoints_unresolved: unknown;
12
+ } | undefined;
13
+ };
14
+ //# sourceMappingURL=unresolved-nodes-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unresolved-nodes-report.d.ts","sourceRoot":"","sources":["../src/unresolved-nodes-report.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,MAAM,kBAAkB,EAAE,CAAC;IAC/C,oBAAoB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC1C,oBAAoB,EAAE,MAAM,eAAe,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAC5E,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB;oCAe9B;QAAE,8BAA8B,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;EAkE7F"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * The directory-reachability block a status read carries — and the rule for when it says nothing.
3
+ *
4
+ * Silence is reserved for ONE state: a reading taken recently enough to speak for the present, which
5
+ * found nothing wrong. Every other combination emits, including an EMPTY node list, because an empty
6
+ * list is not proof of health — it also means nothing has looked, or looked too long ago to say. So
7
+ * the presence of this block does not mean nodes are failing; `measurement` is the field to read
8
+ * first, and only then the list.
9
+ *
10
+ * Two consumers, which is why it is a module rather than a closure: the MCP `cello_status` handler
11
+ * and the daemon-wide `getStatus()` the CLI renders. That second one is the surface that was silent
12
+ * on 2026-07-31 while every session failed.
13
+ */
14
+ import { classifyRosterReading, describeRosterFreshness } from "./roster-freshness.js";
15
+ export function createUnresolvedNodesReport(deps) {
16
+ const { getUnresolvedNodes, getUnresolvedSweptAt, lastRosterSweepError, manifestConfigured } = deps;
17
+ // ─── MCP-001: cello_status (per-connection perspective) ───
18
+ /**
19
+ * The directory-reachability block for `cello_status`.
20
+ *
21
+ * `undefined` — i.e. silence — is reserved for ONE state: a reading taken recently enough to
22
+ * speak for the present, which found nothing wrong. Every other combination emits, including an
23
+ * EMPTY node list, because an empty list is not proof of health: it also means nothing has
24
+ * looked, or looked too long ago to say. `DOD-M15-STALEROSTER-1`.
25
+ *
26
+ * So presence of this block does NOT mean nodes are failing. Read `measurement` first —
27
+ * `current` | `stale` | `never` | `not_configured` — and only then the node list.
28
+ */
29
+ function unresolvedNodesForStatus() {
30
+ const failures = getUnresolvedNodes();
31
+ /**
32
+ * DOD-M15-STALEROSTER-1 — the block is now gated on the AGE of the reading, not just on whether
33
+ * it found anything.
34
+ *
35
+ * `if (failures.length === 0) return undefined` made two different states render identically:
36
+ * "all three nodes answered a moment ago" and "nothing has ever looked". The second is
37
+ * reachable — `verifyStartupManifest` returns without sweeping when the consortium manifest is
38
+ * missing, not yet valid, EXPIRED, or rolled back — so a daemon with an expired manifest
39
+ * reported no directory trouble at all.
40
+ *
41
+ * Silence is therefore reserved for the one case that has earned it: a RECENT reading that
42
+ * found nothing wrong. Every other case says why it cannot make that claim.
43
+ */
44
+ const freshness = describeRosterFreshness(classifyRosterReading(getUnresolvedSweptAt(), Date.now()), {
45
+ // REVIEW F2: "no manifest configured" is DESIGNED (local dev, the e2e harness, or a
46
+ // CELLO_DIRECTORY_URL that is not byte-equal to a bundled endpoint) and must not be dressed
47
+ // as an alarm — it would fire on every local run. It still EMITS, because the line forbids
48
+ // hiding the field; what differs is what the operator is told.
49
+ manifestConfigured,
50
+ ...(lastRosterSweepError() ? { lastSweepError: lastRosterSweepError() } : {}),
51
+ });
52
+ if (failures.length === 0 && freshness.measurement === "current")
53
+ return undefined;
54
+ return {
55
+ directory_endpoints_unresolved: {
56
+ // WHEN this was measured, and whether that is recent enough to mean anything. Without it the
57
+ // block asserts the PRESENT, and a transient blip reads as an ongoing outage: on 2026-08-09
58
+ // all three endpoints failed with ENETUNREACH for under a minute — a network transition on
59
+ // the operator's machine — and the block went on reporting them unreachable long after they
60
+ // answered again. True when taken, false when read.
61
+ ...freshness,
62
+ // DOD-M15-BOOTSTRAP-1: `attempts` distinguishes a node that answered definitively (one
63
+ // probe — a 404, a bad payload, its configuration) from one that never answered at all
64
+ // (every probe spent — the path to it). Those call for opposite responses, and without the
65
+ // count they rendered identically here.
66
+ nodes: failures.map((f) => ({ node: f.nodeId, endpoint: f.endpoint, reason: f.reason, detail: f.detail, attempts: f.attempts })),
67
+ guidance: failures.length === 0
68
+ // The block is present with an EMPTY node list, which before DOD-M15-STALEROSTER-1 could
69
+ // not happen. Saying "could not resolve these endpoints" here would be a flat lie — there
70
+ // are no endpoints listed and the point is that nothing was measured. The empty list is
71
+ // the ABSENCE of a reading, not a clean bill of health, and freshness_guidance above says
72
+ // which of the two it is.
73
+ ? "This block is present with NO nodes listed, which does not mean the nodes are healthy — " +
74
+ "it means this reading cannot support that claim. See freshness_guidance above for " +
75
+ "whether the daemon has never measured, or measured too long ago to speak for the " +
76
+ "present. Directory reachability is what threshold ceremonies depend on, so an " +
77
+ "unmeasured roster is an unknown, not an all-clear."
78
+ : "AS OF checked_at (this is a point-in-time reading, not necessarily now), this daemon could not "
79
+ + "resolve these directory endpoints, so the consortium roster was short and " +
80
+ "threshold ceremonies will fail — sessions surface that as home_node_reports_no_receiver, " +
81
+ "home_node_not_in_reachable_roster, directory_named_no_home, directory_below_threshold or " +
82
+ "ceremony_exhausted, none of which name the real cause on their own (DOD-M15-ERRSTRING-1 " +
83
+ "renamed the first three; they now append this shortfall to their own guidance). " +
84
+ "Agents can still show 'online': signaling dials multiaddrs and does not need DNS. " +
85
+ "If reason is dns_error after a directory restart or wake, the resolver is holding a cached " +
86
+ "negative answer — flush it (macOS: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder). " +
87
+ "Verify with node -e 'require(\"dns\").lookup(host,console.log)', NOT dig: dig bypasses the " +
88
+ "cache this daemon is stuck behind, so it reports success while the daemon still fails. "
89
+ + "attempts:1 means the node ANSWERED and the answer was unusable — look at that node. "
90
+ + "attempts:2+ means it never answered — look at the path to it.",
91
+ },
92
+ };
93
+ }
94
+ return { unresolvedNodesForStatus };
95
+ }
96
+ //# sourceMappingURL=unresolved-nodes-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unresolved-nodes-report.js","sourceRoot":"","sources":["../src/unresolved-nodes-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAWvF,MAAM,UAAU,2BAA2B,CAAC,IAAyB;IACnE,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAEpG,6DAA6D;IAC7D;;;;;;;;;;OAUG;IACH,SAAS,wBAAwB;QAC/B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;QACtC;;;;;;;;;;;;WAYG;QACH,MAAM,SAAS,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;YACnG,oFAAoF;YACpF,4FAA4F;YAC5F,2FAA2F;YAC3F,+DAA+D;YAC/D,kBAAkB;YAClB,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACnF,OAAO;YACL,8BAA8B,EAAE;gBAC9B,6FAA6F;gBAC7F,4FAA4F;gBAC5F,2FAA2F;gBAC3F,4FAA4F;gBAC5F,oDAAoD;gBACpD,GAAG,SAAS;gBACZ,uFAAuF;gBACvF,uFAAuF;gBACvF,2FAA2F;gBAC3F,wCAAwC;gBACxC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAChI,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAC7B,yFAAyF;oBACzF,0FAA0F;oBAC1F,wFAAwF;oBACxF,0FAA0F;oBAC1F,0BAA0B;oBAC1B,CAAC,CAAC,0FAA0F;wBAC1F,oFAAoF;wBACpF,mFAAmF;wBACnF,gFAAgF;wBAChF,oDAAoD;oBACtD,CAAC,CAAC,iGAAiG;0BACjG,4EAA4E;wBAC9E,2FAA2F;wBAC3F,2FAA2F;wBAC3F,0FAA0F;wBAC1F,kFAAkF;wBAClF,oFAAoF;wBACpF,6FAA6F;wBAC7F,qGAAqG;wBACrG,6FAA6F;wBAC7F,yFAAyF;0BACvF,sFAAsF;0BACtF,+DAA+D;aACpE;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SessionNodeManager } from "./session-node-manager.js";
2
+ import type { Logger } from "./types.js";
3
+ export interface WhoLabelDeps {
4
+ logger: Logger;
5
+ sessionNodeManager: SessionNodeManager;
6
+ /** The display name the counterparty offered for this session, if any. */
7
+ getOfferedMoniker: (agentName: string, sessionIdHex: string) => string | null;
8
+ }
9
+ export declare function createWhoResolver(deps: WhoLabelDeps): {
10
+ resolveWho: (agentName: string, pubkeyHex: string, sessionIdHex: string) => {
11
+ who: string;
12
+ whoKnown: boolean;
13
+ };
14
+ };
15
+ //# sourceMappingURL=who-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"who-resolver.d.ts","sourceRoot":"","sources":["../src/who-resolver.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,0EAA0E;IAC1E,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY;4BAOnB,MAAM,aAAa,MAAM,gBAAgB,MAAM,KAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE;EA6BpH"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * What to CALL a counterparty in a message an operator reads.
3
+ *
4
+ * Three tiers, and the order matters: the local pet name an operator chose, then the display name
5
+ * the counterparty offered for this session, then the key fingerprint. A label can never block a
6
+ * message and can never stand in for identity — the pubkey is the identity, and this only decides
7
+ * what a human sees beside it.
8
+ */
9
+ import { whoLabel } from "./who-label.js";
10
+ export function createWhoResolver(deps) {
11
+ const { logger, sessionNodeManager, getOfferedMoniker } = deps;
12
+ // MONIKER-4 AC2: resolve the counterparty's display label — local pet name (MONIKER-3) ??
13
+ // offered name for this session (MONIKER-2) ?? fingerprint. Total: any failure inside
14
+ // resolution degrades to fingerprint via whoLabel's own tiers; a label can never block a
15
+ // doorbell (spec §8).
16
+ function resolveWho(agentName, pubkeyHex, sessionIdHex) {
17
+ let localMoniker = null;
18
+ try {
19
+ localMoniker = sessionNodeManager.getContactMoniker(agentName, pubkeyHex);
20
+ }
21
+ catch (err) {
22
+ logger.warn("moniker.local.read_failed", { agentName, pubkey: pubkeyHex, reason: err instanceof Error ? err.message : String(err) });
23
+ }
24
+ // DOD-MONIKER-6: read only the box written FOR this agent — never a co-resident agent's.
25
+ const resolved = whoLabel({ localMoniker, offeredMoniker: getOfferedMoniker(agentName, sessionIdHex), pubkeyHex });
26
+ // `sessionId` is load-bearing for diagnosis, not decoration. `source:"offered"` is CORRECT for a
27
+ // RECEIVER and wrong only for an INITIATOR (an initiator must never find a box — see DOD-MONIKER-6),
28
+ // so a line cannot be judged without knowing who opened the session. Join on sessionId against
29
+ // `session.inbound.accepted`, which names the receiver; any other agent on that session is the
30
+ // initiator. Without this field the M8C live run produced a wrong verdict twice (journal Entry 76).
31
+ //
32
+ // The resolved LABEL is never logged: for an unverified offer it is an attacker-chosen string, and
33
+ // MONIKER-2 AC2 already forbids echoing the raw value (`moniker.rejected` logs the reason, not the
34
+ // name). `whoKnown` carries the trust bit without the payload.
35
+ logger.debug("moniker.resolved", {
36
+ agentName,
37
+ sessionId: sessionIdHex,
38
+ pubkey: pubkeyHex,
39
+ source: resolved.source,
40
+ whoKnown: resolved.whoKnown,
41
+ });
42
+ return { who: resolved.who, whoKnown: resolved.whoKnown };
43
+ }
44
+ return { resolveWho };
45
+ }
46
+ //# sourceMappingURL=who-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"who-resolver.js","sourceRoot":"","sources":["../src/who-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAW1C,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAE/D,0FAA0F;IAC1F,sFAAsF;IACtF,yFAAyF;IACzF,sBAAsB;IACtB,SAAS,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,YAAoB;QAC5E,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvI,CAAC;QACD,yFAAyF;QACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACnH,iGAAiG;QACjG,qGAAqG;QACrG,+FAA+F;QAC/F,+FAA+F;QAC/F,oGAAoG;QACpG,EAAE;QACF,mGAAmG;QACnG,mGAAmG;QACnG,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAC/B,SAAS;YACT,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC"}
@@ -90,6 +90,4 @@ export declare function contentHashFor(content: Uint8Array, opts: {
90
90
  }): Uint8Array;
91
91
  /** The hash a sender puts on the wire and the receiver recomputes to authenticate it. */
92
92
  export declare function wireContentHash(content: Uint8Array): Uint8Array;
93
- /** The same value, hex — what the Merkle leaf records. */
94
- export declare function wireContentHashHex(content: Uint8Array): string;
95
93
  //# sourceMappingURL=wire-content-hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wire-content-hash.d.ts","sourceRoot":"","sources":["../src/wire-content-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB;IAC5B,0GAA0G;;IAE1G,+FAA+F;;CAEvF,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAIxF,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,cAAc,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAC7C,UAAU,CAiBZ;AAQD,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAE/D;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE9D"}
1
+ {"version":3,"file":"wire-content-hash.d.ts","sourceRoot":"","sources":["../src/wire-content-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB;IAC5B,0GAA0G;;IAE1G,+FAA+F;;CAEvF,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAIxF,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,cAAc,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAC7C,UAAU,CAiBZ;AAQD,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAE/D"}
@@ -113,8 +113,4 @@ const CONTENT_HASH_DOMAIN = new Uint8Array([0x00]);
113
113
  export function wireContentHash(content) {
114
114
  return new Uint8Array(createHash("sha256").update(CONTENT_HASH_DOMAIN).update(content).digest());
115
115
  }
116
- /** The same value, hex — what the Merkle leaf records. */
117
- export function wireContentHashHex(content) {
118
- return Buffer.from(wireContentHash(content)).toString("hex");
119
- }
120
116
  //# sourceMappingURL=wire-content-hash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wire-content-hash.js","sourceRoot":"","sources":["../src/wire-content-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,0GAA0G;IAC1G,MAAM,EAAE,QAAQ;IAChB,+FAA+F;IAC/F,YAAY,EAAE,qBAAqB;CAC3B,CAAC;AAIX,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAErE,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAA8B;IAE9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAmB,EACnB,IAA8C;IAE9C,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,CAAC,MAAM;QAAE,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iBAAiB,iBAAiB,CAAC,YAAY,uDAAuD;gBACtG,uGAAuG;gBACvG,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,GAAG,8DAA8D;QAC1G,yGAAyG;QACzG,uDAAuD,CACxD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnD,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,kBAAkB,CAAC,OAAmB;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"wire-content-hash.js","sourceRoot":"","sources":["../src/wire-content-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,0GAA0G;IAC1G,MAAM,EAAE,QAAQ;IAChB,+FAA+F;IAC/F,YAAY,EAAE,qBAAqB;CAC3B,CAAC;AAIX,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAErE,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAA8B;IAE9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAmB,EACnB,IAA8C;IAE9C,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,CAAC,MAAM;QAAE,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iBAAiB,iBAAiB,CAAC,YAAY,uDAAuD;gBACtG,uGAAuG;gBACvG,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,GAAG,8DAA8D;QAC1G,yGAAyG;QACzG,uDAAuD,CACxD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnD,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACnG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cello-protocol/daemon",
3
- "version": "0.0.197",
3
+ "version": "0.0.198",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "engines": {
@@ -35,10 +35,10 @@
35
35
  "@signalapp/sqlcipher": "^3.3.5",
36
36
  "cbor-x": "^1.6.0",
37
37
  "it-length-prefixed": "^10.0.1",
38
- "@cello-protocol/crypto": "0.0.73",
39
- "@cello-protocol/protocol-types": "0.0.77",
40
- "@cello-protocol/transport": "0.0.79",
41
- "@cello-protocol/gateway": "0.0.57"
38
+ "@cello-protocol/crypto": "0.0.74",
39
+ "@cello-protocol/protocol-types": "0.0.78",
40
+ "@cello-protocol/gateway": "0.0.58",
41
+ "@cello-protocol/transport": "0.0.80"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^25.6.2",