@cello-protocol/daemon 0.0.211 → 0.0.212

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 (180) hide show
  1. package/dist/agent-admin-handlers.d.ts.map +1 -1
  2. package/dist/agent-admin-handlers.js +3 -0
  3. package/dist/agent-admin-handlers.js.map +1 -1
  4. package/dist/agent-handlers.d.ts.map +1 -1
  5. package/dist/agent-handlers.js +44 -0
  6. package/dist/agent-handlers.js.map +1 -1
  7. package/dist/agent-id-migration.d.ts.map +1 -1
  8. package/dist/agent-id-migration.js +11 -2
  9. package/dist/agent-id-migration.js.map +1 -1
  10. package/dist/assignment-verify.d.ts.map +1 -1
  11. package/dist/assignment-verify.js +2 -2
  12. package/dist/assignment-verify.js.map +1 -1
  13. package/dist/attendance-wiring.d.ts +2 -21
  14. package/dist/attendance-wiring.d.ts.map +1 -1
  15. package/dist/attendance-wiring.js +57 -251
  16. package/dist/attendance-wiring.js.map +1 -1
  17. package/dist/away-detection.d.ts +16 -21
  18. package/dist/away-detection.d.ts.map +1 -1
  19. package/dist/away-detection.js +34 -23
  20. package/dist/away-detection.js.map +1 -1
  21. package/dist/boot-agents.d.ts.map +1 -1
  22. package/dist/close-session-handler.d.ts.map +1 -1
  23. package/dist/close-session-handler.js +47 -1
  24. package/dist/close-session-handler.js.map +1 -1
  25. package/dist/co-attendance.d.ts +1 -1
  26. package/dist/co-attendance.js +1 -1
  27. package/dist/consortium-fingerprint.d.ts +115 -0
  28. package/dist/consortium-fingerprint.d.ts.map +1 -0
  29. package/dist/consortium-fingerprint.js +175 -0
  30. package/dist/consortium-fingerprint.js.map +1 -0
  31. package/dist/content-park.d.ts.map +1 -1
  32. package/dist/content-park.js +80 -0
  33. package/dist/content-park.js.map +1 -1
  34. package/dist/daemon-handle.d.ts +1 -1
  35. package/dist/daemon-handle.d.ts.map +1 -1
  36. package/dist/daemon-status-report.d.ts +10 -2
  37. package/dist/daemon-status-report.d.ts.map +1 -1
  38. package/dist/daemon-status-report.js +6 -3
  39. package/dist/daemon-status-report.js.map +1 -1
  40. package/dist/daemon.d.ts.map +1 -1
  41. package/dist/daemon.js +41 -13
  42. package/dist/daemon.js.map +1 -1
  43. package/dist/directory-bootstrap.d.ts +3 -1
  44. package/dist/directory-bootstrap.d.ts.map +1 -1
  45. package/dist/directory-bootstrap.js +3 -1
  46. package/dist/directory-bootstrap.js.map +1 -1
  47. package/dist/directory-connect.d.ts.map +1 -1
  48. package/dist/directory-connect.js +10 -2
  49. package/dist/directory-connect.js.map +1 -1
  50. package/dist/disconnect-cleanup.d.ts +7 -0
  51. package/dist/disconnect-cleanup.d.ts.map +1 -1
  52. package/dist/disconnect-cleanup.js +16 -1
  53. package/dist/disconnect-cleanup.js.map +1 -1
  54. package/dist/document-notify.d.ts +0 -1
  55. package/dist/document-notify.d.ts.map +1 -1
  56. package/dist/document-notify.js +0 -1
  57. package/dist/document-notify.js.map +1 -1
  58. package/dist/document-store.d.ts +0 -1
  59. package/dist/document-store.d.ts.map +1 -1
  60. package/dist/document-store.js +0 -1
  61. package/dist/document-store.js.map +1 -1
  62. package/dist/document-write-path.d.ts.map +1 -1
  63. package/dist/document-write-path.js +2 -9
  64. package/dist/document-write-path.js.map +1 -1
  65. package/dist/inbound-sessions.d.ts +3 -1
  66. package/dist/inbound-sessions.d.ts.map +1 -1
  67. package/dist/inbound-sessions.js +12 -4
  68. package/dist/inbound-sessions.js.map +1 -1
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +7 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/initiate-session-handler.d.ts.map +1 -1
  74. package/dist/initiate-session-handler.js +5 -1
  75. package/dist/initiate-session-handler.js.map +1 -1
  76. package/dist/park-envelope.d.ts +68 -0
  77. package/dist/park-envelope.d.ts.map +1 -1
  78. package/dist/park-envelope.js +86 -1
  79. package/dist/park-envelope.js.map +1 -1
  80. package/dist/park-recovery.d.ts +46 -0
  81. package/dist/park-recovery.d.ts.map +1 -1
  82. package/dist/park-recovery.js +100 -1
  83. package/dist/park-recovery.js.map +1 -1
  84. package/dist/relay-only.d.ts.map +1 -1
  85. package/dist/relay-only.js +7 -4
  86. package/dist/relay-only.js.map +1 -1
  87. package/dist/relay-receipt-store.d.ts +48 -17
  88. package/dist/relay-receipt-store.d.ts.map +1 -1
  89. package/dist/relay-receipt-store.js +77 -27
  90. package/dist/relay-receipt-store.js.map +1 -1
  91. package/dist/seal-escalation.d.ts.map +1 -1
  92. package/dist/seal-escalation.js +25 -0
  93. package/dist/seal-escalation.js.map +1 -1
  94. package/dist/seal-settle.d.ts +38 -0
  95. package/dist/seal-settle.d.ts.map +1 -0
  96. package/dist/seal-settle.js +33 -0
  97. package/dist/seal-settle.js.map +1 -0
  98. package/dist/session-assignment-parser.d.ts.map +1 -1
  99. package/dist/session-assignment-parser.js +5 -0
  100. package/dist/session-assignment-parser.js.map +1 -1
  101. package/dist/session-ceremony.d.ts +21 -14
  102. package/dist/session-ceremony.d.ts.map +1 -1
  103. package/dist/session-ceremony.js +25 -15
  104. package/dist/session-ceremony.js.map +1 -1
  105. package/dist/session-content-context.d.ts +11 -2
  106. package/dist/session-content-context.d.ts.map +1 -1
  107. package/dist/session-content-ingest.d.ts +0 -3
  108. package/dist/session-content-ingest.d.ts.map +1 -1
  109. package/dist/session-content-ingest.js +18 -111
  110. package/dist/session-content-ingest.js.map +1 -1
  111. package/dist/session-content-send.d.ts +5 -0
  112. package/dist/session-content-send.d.ts.map +1 -1
  113. package/dist/session-content-send.js +58 -0
  114. package/dist/session-content-send.js.map +1 -1
  115. package/dist/session-delivery-acks.d.ts +195 -0
  116. package/dist/session-delivery-acks.d.ts.map +1 -0
  117. package/dist/session-delivery-acks.js +674 -0
  118. package/dist/session-delivery-acks.js.map +1 -0
  119. package/dist/session-leaf-records.d.ts +19 -1
  120. package/dist/session-leaf-records.d.ts.map +1 -1
  121. package/dist/session-leaf-records.js +67 -1
  122. package/dist/session-leaf-records.js.map +1 -1
  123. package/dist/session-lifecycle.js +3 -3
  124. package/dist/session-lifecycle.js.map +1 -1
  125. package/dist/session-node-manager.d.ts +36 -21
  126. package/dist/session-node-manager.d.ts.map +1 -1
  127. package/dist/session-node-manager.js +99 -29
  128. package/dist/session-node-manager.js.map +1 -1
  129. package/dist/session-node-types.d.ts +18 -12
  130. package/dist/session-node-types.d.ts.map +1 -1
  131. package/dist/session-node-types.js +1 -9
  132. package/dist/session-node-types.js.map +1 -1
  133. package/dist/session-read-handlers.d.ts.map +1 -1
  134. package/dist/session-read-handlers.js +125 -4
  135. package/dist/session-read-handlers.js.map +1 -1
  136. package/dist/session-records.d.ts +17 -0
  137. package/dist/session-records.d.ts.map +1 -1
  138. package/dist/session-records.js +32 -0
  139. package/dist/session-records.js.map +1 -1
  140. package/dist/session-relay-client.d.ts +103 -6
  141. package/dist/session-relay-client.d.ts.map +1 -1
  142. package/dist/session-relay-client.js +369 -27
  143. package/dist/session-relay-client.js.map +1 -1
  144. package/dist/session-relay.d.ts +24 -2
  145. package/dist/session-relay.d.ts.map +1 -1
  146. package/dist/session-relay.js +21 -6
  147. package/dist/session-relay.js.map +1 -1
  148. package/dist/session-schema.d.ts.map +1 -1
  149. package/dist/session-schema.js +43 -0
  150. package/dist/session-schema.js.map +1 -1
  151. package/dist/session-seal-leaf-store.d.ts +6 -0
  152. package/dist/session-seal-leaf-store.d.ts.map +1 -1
  153. package/dist/session-seal-leaf-store.js +21 -4
  154. package/dist/session-seal-leaf-store.js.map +1 -1
  155. package/dist/session-seal.d.ts +12 -0
  156. package/dist/session-seal.d.ts.map +1 -1
  157. package/dist/session-seal.js +92 -3
  158. package/dist/session-seal.js.map +1 -1
  159. package/dist/session-views.d.ts +1 -0
  160. package/dist/session-views.d.ts.map +1 -1
  161. package/dist/session-views.js +81 -1
  162. package/dist/session-views.js.map +1 -1
  163. package/dist/signaling-connect.d.ts +1 -0
  164. package/dist/signaling-connect.d.ts.map +1 -1
  165. package/dist/signaling-connect.js +0 -1
  166. package/dist/signaling-connect.js.map +1 -1
  167. package/dist/status-handler.d.ts +9 -1
  168. package/dist/status-handler.d.ts.map +1 -1
  169. package/dist/status-handler.js +5 -2
  170. package/dist/status-handler.js.map +1 -1
  171. package/dist/test-handlers.js +4 -3
  172. package/dist/test-handlers.js.map +1 -1
  173. package/dist/trust-signal-store.d.ts +4 -2
  174. package/dist/trust-signal-store.d.ts.map +1 -1
  175. package/dist/trust-signal-store.js +4 -2
  176. package/dist/trust-signal-store.js.map +1 -1
  177. package/dist/types.d.ts +64 -0
  178. package/dist/types.d.ts.map +1 -1
  179. package/dist/types.js.map +1 -1
  180. package/package.json +5 -5
@@ -1,31 +1,34 @@
1
1
  /**
2
- * What an UNATTENDED agent does when someone reaches it: answer once, say so plainly, and — if the
3
- * caller keeps talking to an empty room — close the conversation rather than leave it open forever.
2
+ * What an UNATTENDED agent does when someone CALLS it: answer the call once, say so plainly, and
3
+ * leave the rest to the operator who comes back.
4
+ *
5
+ * ⚠️ IT ANSWERS CALLS, NEVER CONVERSATIONS (DOD-M15-AWAYSCOPE-1). An answering machine is for a
6
+ * call nobody picked up. Once two agents are in an accepted session, a daemon that types into it is
7
+ * putting a status announcement in a record that attests what the two PARTIES said — and on
8
+ * session `e7dd3f43…` that one greeting cost a completed, witnessed conversation its receipt on
9
+ * both machines, permanently. A daemon's assertion about itself is a fact ABOUT the session and
10
+ * rides the out-of-band liveness frame; it never takes a chain leaf. The only trigger left here is
11
+ * an inbound session REQUEST.
4
12
  *
5
13
  * "Attended" means a live client has claimed the agent with `cello_use_agent`. Several sessions
6
14
  * attending one agent at once is legitimate and permanent — co-attendance, not exclusivity — which
7
15
  * is why the COUNT is kept separate from the boolean and both read the same `currentAgent` map the
8
16
  * doorbell routes on. They cannot disagree about who is present.
9
17
  *
10
- * Eleven dependencies, under the order's bound of ~12 counted, because the first version of
11
- * this line said seven. This block was never entangled with the boot
12
- * sequence; it just happened to be written in the middle of it.
13
- *
14
- * ⚠️ IT PLACES ITS OWN LEAVES. The one-shot rejection sends content, appends the leaf and records
15
- * the transcript row, so this file belongs in the seal call-site enforcer's CALLERS list — it is
16
- * added there in the same commit, because that guard stops SCANNING a file that leaves the list
17
- * rather than going red.
18
+ * ⚠️ IT PLACES ITS OWN LEAVES. The greeting is content: it is sent, it takes a leaf and it records
19
+ * a transcript row, exactly as a voicemail outgoing message belongs on the tape. So this file stays
20
+ * in the seal call-site enforcer's CALLERS list that guard stops SCANNING a file that leaves the
21
+ * list rather than going red.
18
22
  */
19
23
  import { randomUUID } from "node:crypto";
20
24
  import { countAttendance, ContentTakeLedger } from "./co-attendance.js";
21
- import { isOwnAwayAutoReply, markAsAutoReply, isAutoReplyMarked, systemAwayText } from "./away-detection.js";
22
- import { isLocalCredentialRefusal, LEAF_KIND_MSG } from "./session-relay-client.js";
25
+ import { markAsAutoReply, systemAwayText } from "./away-detection.js";
26
+ import { LEAF_KIND_MSG } from "./session-relay-client.js";
23
27
  import { sentAuthorship } from "./session-content-handlers.js";
24
- import { escalateToUnilateralSeal as runUnilateralEscalation, UNILATERAL_SEAL_TIMEOUT_MS } from "./seal-escalation.js";
25
28
  import { extractErrorMessage } from "./error-message.js";
26
29
  export function createAttendanceWiring(deps) {
27
- const { logger, sessionNodeManager, perConnectionState, keyProviders, securityGateway, handleActiveSealFlow, sealKey, sealInterruptedInProgress, pendingSealWaiters, pendingUnilateralWaiters, sendOver, } = deps;
28
- // M8C-AWAY-1: away response — an unattended Primary auto-answers session requests + messages
30
+ const { logger, sessionNodeManager, perConnectionState, securityGateway } = deps;
31
+ // M8C-AWAY-1: away response — an unattended Primary auto-answers session requests
29
32
  // with the default transparent away text and queues them (the DoD's own mandated default).
30
33
  // CORE ships now; the operator-configurable custom-text / opaque-privacy-mode SWITCH is PARKED
31
34
  // on M9-CFG-001, journaled as D15 (M8C-DECISIONS.md, mirrors D14) — a genuine per-agent operator
@@ -66,239 +69,26 @@ export function createAttendanceWiring(deps) {
66
69
  // use_agent selecting this name, even if another connection kept it attended throughout — an
67
70
  // edge case, not a correctness gap in the core "queue + one calm ack while genuinely away" promise.
68
71
  const awayAckSent = new Set();
69
- async function sendAwayResponse(agentName, sessionId, kind) {
72
+ /**
73
+ * DOD-M15-AWAYSCOPE-1 — THIS ANSWERS A CALL. It does not answer a conversation.
74
+ *
75
+ * There is one caller left, the inbound session-REQUEST path, and the `kind` parameter is gone
76
+ * rather than defaulted: a second value is what let this function be reached from an existing
77
+ * session, and a default would leave that call compiling.
78
+ */
79
+ async function sendAwayResponse(agentName, sessionId) {
70
80
  if (isAttended(agentName))
71
81
  return;
72
- // DOD-AWAY-WRAP-1 AC2: if the triggering message carries [[WRAP]], the caller is done — skip the
73
- // away reply entirely and let the seal ceremony proceed. The dedupKey is intentionally NOT added
74
- // here: the WRAP path is a silent close, not an away period that should be deduped.
75
- if (kind === "message") {
76
- const latestHex = sessionNodeManager.peekLatestReceivedContentHex(agentName, sessionId);
77
- if (latestHex !== null) {
78
- const text = Buffer.from(latestHex, "hex").toString("utf8");
79
- // DOD-WRAP-SUBSTRING-1: match the APPENDED token, not any substring —
80
- // DOD-SIGNAL-TOKEN-1 always appends the real token at the END of the body. A substring
81
- // match would classify a mere mention of [[WRAP]] (sent signal:"over") as a close
82
- // signal, silently skipping both the away reply and the oneshot rejection.
83
- if (text.trimEnd().endsWith("[[WRAP]]")) {
84
- logger.info("session.away.response.skipped_wrap", { agentName, sessionId });
85
- return;
86
- }
87
- // DOD-AWAY-MUTUAL-SEAL-1: an away responder must not answer ANOTHER away responder, and
88
- // must not count one toward the one-shot rule.
89
- //
90
- // When both agents are unattended, each side's auto-reply arrives at the other as an inbound
91
- // message. The second such arrival looks exactly like "a caller who ignored the
92
- // leave-a-message instruction" — so the one-shot fires on BOTH sides, each sends a [[WRAP]]
93
- // rejection and initiates a seal, and two distinct-sender SEAL ctrl leaves is precisely what
94
- // notarizes a session.
95
- //
96
- // Measured from the relay's own log 2026-08-09: sealed THREE SECONDS after opening, its
97
- // entire content two machines telling each other nobody was home. Neither daemon learned —
98
- // the seal completion is pushed with no pull twin — so both showed `active`, and the
99
- // operators returned and talked into a closed room for 68 minutes before finding out.
100
- //
101
- // Returned silently rather than answered: a reply would continue the ping-pong, and there is
102
- // nobody on the far side to read one.
103
- if (isOwnAwayAutoReply(text)) {
104
- logger.info("session.away.mutual.skipped", {
105
- agentName,
106
- sessionId,
107
- // DOD-M12B-AWAY-MARK-1: WHICH branch matched. The marker is in-band and therefore
108
- // typeable, so prefixing every message with it skips the one-shot auto-close for free —
109
- // the cost of that attack fell from "reproduce the exact away wording" to "type 15
110
- // characters". This field is what makes a peer doing it on every message visible;
111
- // without it the line reads as routine machine-to-machine traffic.
112
- matched: isAutoReplyMarked(text) ? "marker" : "legacy_exact",
113
- impact: "no away reply and no one-shot seal — two away agents must not notarize a conversation nobody had",
114
- });
115
- return;
116
- }
117
- }
118
- }
82
+ /**
83
+ * The log keeps saying which kind it was, and that is deliberate now that there is only one.
84
+ * The live failure this order closes is READ OFF a daemon log line `kind: "message"` at
85
+ * 16:13:28.804 is the whole tell — so a log that still names the kind is what makes the absence
86
+ * of the deleted one provable from a production log rather than only from the source.
87
+ */
88
+ const kind = "request";
119
89
  const dedupKey = `${agentName}:${sessionId}:${kind}`;
120
- // F3 fix: a dedicated guard prevents re-entry after the rejection fires — without it a
121
- // rapid-fire sender could trigger multiple rejection sends and concurrent seal submits while
122
- // the session remains active (seal failed). ⚠️ It said "never cleared, no re-attend resets it":
123
- // FALSE — it matches the `${name}:` sweep in agent-handlers.ts, so re-attending re-arms it.
124
- const rejectedKey = `${agentName}:${sessionId}:rejected`;
125
- if (awayAckSent.has(dedupKey)) {
126
- // DOD-INBOX-ONESHOT-1: a second inbound message while the first away ack is still live means
127
- // the caller ignored the leave-a-message instruction. Send one [[WRAP]]-bearing rejection and
128
- // immediately initiate the seal so the session closes without operator intervention.
129
- if (kind === "message" && !awayAckSent.has(rejectedKey)) {
130
- awayAckSent.add(rejectedKey); // guard BEFORE async work — concurrent arrivals must not re-enter
131
- const record2 = sessionNodeManager.getSessionRecord(agentName, sessionId);
132
- if (record2 && record2.status === "active") {
133
- // Reviewer F2: token at the END — the daemon's own output must honor the
134
- // DOD-SIGNAL-TOKEN-1 append-at-end contract that DOD-WRAP-SUBSTRING-1 detection
135
- // is anchored on (a counterparty daemon's end-anchored detector must see this close).
136
- // DOD-M12B-AWAY-MARK-1: machine-generated, so it is marked — and the marker goes at the
137
- // FRONT precisely so [[WRAP]] keeps the end position the counterparty's detector anchors on.
138
- const rejectText = markAsAutoReply("This inbox only accepts one message per visit. Closing. [[WRAP]]");
139
- const rejectBytes = new TextEncoder().encode(rejectText);
140
- // B2b: one decision point for the hash AND its algorithm — see `contentHashForSession`.
141
- const reject = await sessionNodeManager.contentHashForSession(agentName, sessionId, rejectBytes);
142
- // Best-effort: a send failure still triggers the seal — we are closing regardless.
143
- const sendResult = await sessionNodeManager.sendContent(agentName, sessionId, rejectBytes, new Uint8Array(reject.hash), randomUUID(), LEAF_KIND_MSG, reject.alg);
144
- // M12-P13: commit the leaf when the rejection went out OR when it is durably queued —
145
- // either way the relay already witnessed its sequence. This caller is the sharpest case
146
- // of the three: the seal is initiated immediately below, so a hole here does not merely
147
- // stall the far side, it seals a tree that is one leaf short of a sequence the
148
- // counterparty will still receive content at. The roots then cannot agree, and the
149
- // session is unsealable for good.
150
- if (sendResult.ok || sendResult.durable) {
151
- const rejectHashHex = Buffer.from(reject.hash).toString("hex");
152
- // DOD-M12B-INDEX-1: at the relay's position, not the tail. This is the riskiest append
153
- // in the codebase for that — the seal is initiated a few lines below, so a leaf at the
154
- // wrong index does not merely stall the far side, it seals a tree the counterparty can
155
- // never agree with.
156
- // The proof travels with the leaf, not only with the transcript row below: when this
157
- // append is HELD behind a gap, the `recordTranscriptMessage` call is skipped entirely
158
- // and the held entry is the only thing that reaches the row on release.
159
- const placed = sessionNodeManager.placeOwnLeaf(agentName, sessionId, rejectHashHex, rejectBytes, sendResult.sequenceNumber, randomUUID(), "msg", sentAuthorship(sendResult));
160
- if (placed.placed) {
161
- sessionNodeManager.recordTranscriptMessage(agentName, sessionId, placed.leafIndex, "sent", rejectBytes, randomUUID(), sentAuthorship(sendResult));
162
- }
163
- logger.info("session.away.inbox.oneshot.rejected", { agentName, sessionId, sequenceNumber: placed.placed ? placed.leafIndex : placed.heldAt, committed: placed.placed, queued: !sendResult.ok });
164
- }
165
- else {
166
- // Not queued anywhere — the rejection is gone. We still seal (we are closing regardless),
167
- // and the counterparty simply never learns why, so say that plainly rather than at warn.
168
- logger.error("session.away.inbox.oneshot.reject_send_failed", {
169
- agentName, sessionId, reason: sendResult.reason, cause: sendResult.cause,
170
- impact: "the rejection is lost and was NOT queued — the session seals with no explanation to the counterparty",
171
- });
172
- }
173
- // DOD-INBOX-ONESHOT-1 / DOD-SEAL-BILATERAL-TIMEOUT-1: initiate the seal via the
174
- // relay-mediated path (submitSealLeaf → bilateral wait → unilateral escalation).
175
- // The signaling-only path (handleActiveSealFlow) suffers a leaf_count_mismatch race:
176
- // this party's tree includes the just-sent rejection, but the counterparty's tree may
177
- // not have ingested it yet when the seal request arrives over the signaling channel.
178
- // The relay path avoids this entirely — it posts a SEAL ctrl leaf and waits for the
179
- // counterparty to independently co-seal; no bilateral leaf-count comparison needed.
180
- /**
181
- * DOD-M15-DIVERGE-1 (review HIGH-3) — the gate has to hold on the path with no operator.
182
- *
183
- * `cello_close_session` refuses a diverged record, but this autonomous path never
184
- * consulted `sealReadiness` at all: it read `placed.placed` and discarded
185
- * `placed.diverged`, then initiated the seal directly. So "a diverged session is blocked
186
- * from sealing" held for the close a human drives and not for the one that runs itself —
187
- * which is the worse of the two, because the append two lines above is, by its own
188
- * comment, "the riskiest append in the codebase" for exactly this reason.
189
- *
190
- * THE LOG IS THE SURFACE HERE, and that is not a weakening of Invariant 2. There is no
191
- * caller to answer — nothing is awaiting a response on this path — so the log carries the
192
- * whole warning rather than half of it.
193
- */
194
- const oneshotReadiness = sessionNodeManager.sealReadiness(agentName, sessionId);
195
- if (oneshotReadiness.diverged) {
196
- logger.warn("session.away.inbox.oneshot.seal_skipped_diverged", {
197
- agentName, sessionId,
198
- treeSize: oneshotReadiness.treeSize, highWaterSeq: oneshotReadiness.highWaterSeq,
199
- impact: "this side's tree parted from the relay's ordering, so the seal was NOT initiated — the session stays closeable by hand, where the operator is told what parted and can compare counts with the counterparty before deciding",
200
- });
201
- }
202
- else {
203
- void (async () => {
204
- const correlationId = randomUUID();
205
- const sk = sealKey(agentName, sessionId);
206
- if (sealInterruptedInProgress.has(sk))
207
- return;
208
- sealInterruptedInProgress.add(sk);
209
- try {
210
- // DOD-M15-SEALWIRE-1 bullet 2 (review F4): SealCompletion is now a union — a refused
211
- // certificate resolves the waiter rather than dropping it, so this path must handle it
212
- // too rather than treating a refusal as a seal.
213
- let resolveSeal;
214
- const sealedP = new Promise((r) => { resolveSeal = r; });
215
- pendingSealWaiters.set(sk, resolveSeal);
216
- const submit = await sessionNodeManager.submitSealLeaf(agentName, sessionId, correlationId);
217
- if (!submit.ok && submit.reason !== "responder_seal_already_submitted") {
218
- pendingSealWaiters.delete(sk);
219
- if (submit.reason === "relay_unavailable" || isLocalCredentialRefusal(submit.reason)) { // TOKENSTALE F3
220
- const fallback = await handleActiveSealFlow(sessionId, record2, correlationId);
221
- if (fallback.ok) {
222
- logger.info("session.away.inbox.oneshot.seal_initiated", { agentName, sessionId, path: "signaling_fallback" });
223
- }
224
- else {
225
- logger.warn("session.away.inbox.oneshot.seal_initiate_failed", { agentName, sessionId, reason: fallback.reason, path: "signaling_fallback" });
226
- }
227
- }
228
- else {
229
- logger.warn("session.away.inbox.oneshot.seal_initiate_failed", { agentName, sessionId, reason: submit.reason });
230
- }
231
- return;
232
- }
233
- logger.info("session.away.inbox.oneshot.seal_initiated", { agentName, sessionId, path: "relay" });
234
- const bilateralTimeoutMs = Number(process.env["CELLO_SEAL_BILATERAL_TIMEOUT_MS"]) || 660_000;
235
- let timer;
236
- const timeoutP = new Promise((r) => { timer = setTimeout(() => r(null), bilateralTimeoutMs); });
237
- const sealedCompletion = await Promise.race([sealedP, timeoutP]);
238
- clearTimeout(timer);
239
- pendingSealWaiters.delete(sk);
240
- if (sealedCompletion !== null) {
241
- // DOD-M15-SEALWIRE-1 bullet 2 (review F4): a REFUSED certificate resolves the waiter
242
- // now rather than being dropped, so this path must tell the two apart — logging a
243
- // refusal as "sealed" would be the silent acceptance the whole bullet exists to stop.
244
- if ("refused" in sealedCompletion) {
245
- logger.error("session.away.inbox.oneshot.seal_refused", {
246
- agentName, sessionId, reason: sealedCompletion.reason, detail: sealedCompletion.detail,
247
- impact: "the away auto-seal was REFUSED: the directory returned a validly signed root " +
248
- "that does not describe this conversation. The session is NOT sealed and nothing " +
249
- "was signed with this agent's key.",
250
- });
251
- return;
252
- }
253
- logger.info("session.away.inbox.oneshot.sealed", { agentName, sessionId, sealedRoot: sealedCompletion.rootHex });
254
- return;
255
- }
256
- // Bilateral timeout — escalate to unilateral seal.
257
- const escalation = submit.ok
258
- ? { reportedRootHex: submit.reportedRootHex, sequenceNumber: submit.sequenceNumber }
259
- : submit.reason === "responder_seal_already_submitted" &&
260
- typeof submit.reportedRootHex === "string" &&
261
- typeof submit.sequenceNumber === "number"
262
- ? { reportedRootHex: submit.reportedRootHex, sequenceNumber: submit.sequenceNumber }
263
- : null;
264
- if (!escalation) {
265
- logger.warn("session.away.inbox.oneshot.seal_pending", { agentName, sessionId });
266
- return;
267
- }
268
- // DOD-M12B-SEAL-ESCALATE-DUP-1: THE SHARED ESCALATION, not a second copy.
269
- //
270
- // This used to be a line-for-line duplicate with its own hardcoded 30 s timeout, and
271
- // it missed every refusal the other one gained: an empty carry, a gappy chain, two of
272
- // our own ctrl leaves (permanently unsealable), and a bilateral seal already running.
273
- // It spent the full timeout on each and then reported `seal_unilateral_timeout` — the
274
- // label that names our own wait. Sharing the body is what stops that drifting again.
275
- const uni = await runUnilateralEscalation({
276
- logger, sessionNodeManager, sendOver, pendingUnilateralWaiters, sealKey,
277
- getKeyProvider: (a) => keyProviders.get(a),
278
- timeoutMs: UNILATERAL_SEAL_TIMEOUT_MS,
279
- }, agentName, sessionId, escalation, correlationId, { refuseOnUnusableCarry: true });
280
- if (uni.ok) {
281
- logger.info("session.away.inbox.oneshot.sealed", { agentName, sessionId, sealedRoot: uni.sealed_root, sealType: "unilateral" });
282
- }
283
- else {
284
- // CARRY THE GUIDANCE. The four refusals this path just gained come with the
285
- // sentence that tells an operator whether to retry or force-abandon — and the log
286
- // is this path's ONLY surface, so dropping it leaves a nameable cause with no
287
- // action attached. The old reasons had no guidance to lose; these do.
288
- logger.warn("session.away.inbox.oneshot.seal_unilateral_failed", {
289
- agentName, sessionId, reason: uni.reason, guidance: uni.guidance,
290
- });
291
- }
292
- }
293
- finally {
294
- sealInterruptedInProgress.delete(sealKey(agentName, sessionId));
295
- }
296
- })();
297
- }
298
- }
299
- }
90
+ if (awayAckSent.has(dedupKey))
300
91
  return;
301
- }
302
92
  const record = sessionNodeManager.getSessionRecord(agentName, sessionId);
303
93
  if (!record || record.status !== "active")
304
94
  return;
@@ -317,7 +107,7 @@ export function createAttendanceWiring(deps) {
317
107
  // exact-text matching could not reach by construction. markAsAutoReply is idempotent, so the
318
108
  // system defaults (already marked at their source) do not pick up a second token.
319
109
  const awayText = sessionNodeManager.resolveAwayMessage(agentName, record.counterparty_pubkey)
320
- ?? systemAwayText(kind, agentName, isKnown);
110
+ ?? systemAwayText(agentName, isKnown);
321
111
  // AWAYSALT-1 review MEDIUM-3: the salt wait widens the window in which BOTH acks are computed
322
112
  // before either is a leaf, so the tree check below would pass both through. Claim the TEXT first.
323
113
  const txtKey = `${agentName}:${sessionId}:txt:${awayText}`;
@@ -369,9 +159,17 @@ export function createAttendanceWiring(deps) {
369
159
  }
370
160
  const sendResult = await sessionNodeManager.sendContent(agentName, sessionId, contentBytes, new Uint8Array(away.hash), randomUUID(), LEAF_KIND_MSG, away.alg);
371
161
  if (!sendResult.ok && !sendResult.durable) {
372
- // Reviewer MEDIUM fix: a transient failure must NOT permanently silence the rest of this
373
- // away period — clear the guard so the next inbound arrival retries the ack. Both guards:
374
- // AWAYLEAF-1's in-flight claim would otherwise suppress the retry as its own duplicate.
162
+ // ⚠️ NO TRIGGER REACHES THIS RETRY TODAY, and the comment used to promise one.
163
+ //
164
+ // It cleared the guard so "the next inbound arrival retries the ack". The next inbound
165
+ // arrival was a MESSAGE, and DOD-M15-AWAYSCOPE-1 deleted that trigger. A session request
166
+ // arrives once per session, so nothing re-enters `sendAwayResponse` for this session and the
167
+ // greeting is simply lost — the consequence that order accepted, said here in the code
168
+ // rather than only in its commit message.
169
+ //
170
+ // The clears stay because they are correct and free the moment a re-trigger exists (a
171
+ // reconnect sweep, or the attendance work in units 2-4). Both guards, because AWAYLEAF-1's
172
+ // in-flight claim would otherwise suppress that retry as its own duplicate.
375
173
  awayAckSent.delete(dedupKey);
376
174
  awayAckSent.delete(txtKey);
377
175
  // M12-P13: this branch now means the reply is GONE, not merely late (the queued case is
@@ -423,10 +221,18 @@ export function createAttendanceWiring(deps) {
423
221
  });
424
222
  }
425
223
  catch (err) {
426
- // Reviewer MEDIUM fix: same as above an unexpected throw must not permanently lock out
427
- // future retries for the rest of this away period.
224
+ // Same as above: the clear is correct and currently unreachable nothing re-enters this
225
+ // function for a session whose request has already been answered. `txtKey` is deliberately
226
+ // not cleared here and was not before; moot while nothing retries, and noted so the asymmetry
227
+ // is not read as intent by whoever restores a trigger.
428
228
  awayAckSent.delete(dedupKey);
429
- logger.warn("session.away.response.failed", { agentName, sessionId, kind, error: extractErrorMessage(err) });
229
+ // A DISTINCT NAME, and a distinct LEVEL. This threw somewhere unexpected; the branch above is
230
+ // a send that reported failure. Two different causes with two different remedies were sharing
231
+ // one event name at two levels, so a log reader matching on the name got whichever fired.
232
+ logger.error("session.away.response.threw", {
233
+ agentName, sessionId, kind, error: extractErrorMessage(err),
234
+ impact: "the away greeting was never sent and this caller gets no acknowledgement at all",
235
+ });
430
236
  }
431
237
  }
432
238
  // `isAttended` is NOT returned: its only caller in the repo is `sendAwayResponse`, which moved
@@ -1 +1 @@
1
- {"version":3,"file":"attendance-wiring.js","sourceRoot":"","sources":["../src/attendance-wiring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attendance-wiring.js","sourceRoot":"","sources":["../src/attendance-wiring.ts"],"names":[],"mappings":"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"}
@@ -91,43 +91,38 @@ export declare function markAsAutoReply(text: string): string;
91
91
  export declare function isAutoReplyMarked(text: string): boolean;
92
92
  /** The exact strings this daemon sends as away auto-replies. Marked at the source. */
93
93
  export declare const AWAY_AUTO_REPLY_TEXTS: {
94
- /**
95
- * The one-shot acknowledgement, sent when a message arrives for an unattended agent.
96
- * States the one-shot rule, because without it a cooperative caller has no reason to stop.
97
- */
98
- readonly oneShot: "[[AUTO-REPLY]] Agent is currently away. Your message has been received and will be read when the operator returns. This inbox accepts one message per visit — please close the session now (send with signal: wrap) instead of sending more.";
99
94
  /** The session-offer answer, which names the away agent — so it is built, not fixed. */
100
95
  readonly offerFor: (agentName: string) => string;
101
96
  /**
102
- * M8C-CONTACT-1: "unknown senders learn only 'dispatched' by default" — deliberately minimal and
103
- * the SAME for both ack kinds, unlike the two above. That sameness is what DOD-M15-AWAYLEAF-1
104
- * contains; the guard is at the send site in `attendance-wiring.ts`, which is where the content
105
- * hash exists. Lives here beside its siblings for the reason the marker does: one definition, so
106
- * a reword cannot desynchronise the detector.
97
+ * M8C-CONTACT-1: "unknown senders learn only 'dispatched' by default" — deliberately minimal.
98
+ *
99
+ * It stays bare after DOD-M15-AWAYSCOPE-1. Andre's principle 3 draws the line at ACCEPTED
100
+ * sessions: a counterparty who accepted is entitled to know what happened to the session, and a
101
+ * STRANGER knocking is not. Lives here beside its siblings for the reason the marker does: one
102
+ * definition, so a reword cannot desynchronise the detector.
107
103
  */
108
104
  readonly stranger: "[[AUTO-REPLY]] Dispatched.";
109
105
  };
110
106
  /**
111
- * The system default away text, per kind and per whether the caller is known. MOVED HERE from
112
- * `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the strings it selects
113
- * so the selection sits beside the strings it selects.
107
+ * The system default away text for an inbound session REQUEST, per whether the caller is known.
108
+ * MOVED HERE from `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the
109
+ * strings it selects.
114
110
  *
115
111
  * The record that travelled with it:
116
112
  * - DOD-AWAY-WRAP-1 AC1: the request text is a leave-a-message greeting, and it names the specific
117
113
  * away agent — which is why it is built rather than fixed.
118
- * - DOD-AWAY-ACK-ONESHOT-TEXT-1 (live defect 2026-07-24): the message ack must STATE the one-shot
119
- * rule. Without it a cooperative caller LLM has no reason to stop, sends a follow-up, and eats the
120
- * DOD-INBOX-ONESHOT-1 rejection the design itself invited.
121
114
  * - ONE definition, shared with the detector in this file. A second copy elsewhere is how a reworded
122
115
  * away message stops being recognised as machine traffic and the mutual-seal loop
123
116
  * (DOD-AWAY-MUTUAL-SEAL-1) quietly comes back.
124
117
  *
125
- * ⚠️ A STRANGER GETS THE SAME STRING FOR BOTH KINDS. That is contained by DOD-M15-AWAYLEAF-1's
126
- * guard at the send site not by varying the text, which would tell an unknown caller more than
127
- * M8C-CONTACT-1 allows. Note the guard cannot live here: `resolveAwayMessage` OVERRIDES this
128
- * function entirely, so a configured away message is kind-independent too and collides the same way.
118
+ * ⚠️ DOD-M15-AWAYSCOPE-1 TOOK THE SECOND KIND AWAY, and with it the reason this function took a
119
+ * `kind` at all. There used to be a second arm for a message arriving on an ALREADY-ACCEPTED
120
+ * session the one-shot acknowledgement, `DOD-AWAY-ACK-ONESHOT-TEXT-1` and sending it was the
121
+ * defect: it typed a status announcement into a live conversation and took a chain leaf doing it.
122
+ * Its wording survives below as `ONESHOT_BODY`, unsent, because the legacy branch of
123
+ * `isOwnAwayAutoReply` is the only thing that still recognises an un-upgraded peer sending it.
129
124
  */
130
- export declare function systemAwayText(kind: "request" | "message", agentName: string, isKnown: boolean): string;
125
+ export declare function systemAwayText(agentName: string, isKnown: boolean): string;
131
126
  /**
132
127
  * True when `text` is away auto-reply traffic — a machine, not a caller.
133
128
  *
@@ -1 +1 @@
1
- {"version":3,"file":"away-detection.d.ts","sourceRoot":"","sources":["../src/away-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AAUvD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,sFAAsF;AACtF,eAAO,MAAM,qBAAqB;IAChC;;;OAGG;;IAGH,wFAAwF;mCACpE,MAAM,KAAG,MAAM;IAInC;;;;;;OAMG;;CAEK,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAGvG;AAGD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQxD"}
1
+ {"version":3,"file":"away-detection.d.ts","sourceRoot":"","sources":["../src/away-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AA0BvD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,sFAAsF;AACtF,eAAO,MAAM,qBAAqB;IAChC,wFAAwF;mCACpE,MAAM,KAAG,MAAM;IAInC;;;;;;;OAOG;;CAEK,CAAC;AAEX;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAG1E;AAGD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQxD"}
@@ -76,7 +76,23 @@
76
76
  * peer reads it as plain text rather than choking, and a human reading the transcript can see it.
77
77
  */
78
78
  export const AWAY_AUTO_REPLY_MARKER = "[[AUTO-REPLY]]";
79
- /** The unmarked bodies. Kept separate so the legacy detector below matches an un-upgraded peer. */
79
+ /**
80
+ * The unmarked bodies. Kept separate so the legacy detector below matches an un-upgraded peer.
81
+ *
82
+ * ⚠️ `ONESHOT_BODY` IS NO LONGER SENT, AND NOTHING READS IT EITHER. DOD-M15-AWAYSCOPE-1 deleted the
83
+ * branch that sent it AND the only production call site of `isOwnAwayAutoReply`, which was in the
84
+ * same branch. An earlier version of this comment said the legacy recogniser "is what stops this
85
+ * side treating that machine traffic as a person" — review caught that, and it is false: the only
86
+ * live recogniser is `isAutoReplyMarked`, which matches the MARKER and therefore does NOT match an
87
+ * un-upgraded peer's unmarked body.
88
+ *
89
+ * So an old peer's one-shot now arrives unlabelled. That is a real, small loss and it is stated
90
+ * rather than papered over: the operator sees the text, which names itself as an away reply in
91
+ * plain English, and nothing acts on the classification any more because nothing replies.
92
+ *
93
+ * Both are RETAINED, not dead-code-cleaned, because the order forbids touching this guard while the
94
+ * attendance work is unfinished — a call site may return. Retained-pending-a-caller, said out loud.
95
+ */
80
96
  const ONESHOT_BODY = "Agent is currently away. Your message has been received and will be read when the operator returns. " +
81
97
  "This inbox accepts one message per visit — please close the session now (send with signal: wrap) instead of sending more.";
82
98
  /** The offer text with the agent name removed, so any agent's offer is recognised. */
@@ -102,48 +118,43 @@ export function isAutoReplyMarked(text) {
102
118
  }
103
119
  /** The exact strings this daemon sends as away auto-replies. Marked at the source. */
104
120
  export const AWAY_AUTO_REPLY_TEXTS = {
105
- /**
106
- * The one-shot acknowledgement, sent when a message arrives for an unattended agent.
107
- * States the one-shot rule, because without it a cooperative caller has no reason to stop.
108
- */
109
- oneShot: `${AWAY_AUTO_REPLY_MARKER} ${ONESHOT_BODY}`,
110
121
  /** The session-offer answer, which names the away agent — so it is built, not fixed. */
111
122
  offerFor(agentName) {
112
123
  return `${AWAY_AUTO_REPLY_MARKER} ${agentName}${OFFER_SUFFIX}`;
113
124
  },
114
125
  /**
115
- * M8C-CONTACT-1: "unknown senders learn only 'dispatched' by default" — deliberately minimal and
116
- * the SAME for both ack kinds, unlike the two above. That sameness is what DOD-M15-AWAYLEAF-1
117
- * contains; the guard is at the send site in `attendance-wiring.ts`, which is where the content
118
- * hash exists. Lives here beside its siblings for the reason the marker does: one definition, so
119
- * a reword cannot desynchronise the detector.
126
+ * M8C-CONTACT-1: "unknown senders learn only 'dispatched' by default" — deliberately minimal.
127
+ *
128
+ * It stays bare after DOD-M15-AWAYSCOPE-1. Andre's principle 3 draws the line at ACCEPTED
129
+ * sessions: a counterparty who accepted is entitled to know what happened to the session, and a
130
+ * STRANGER knocking is not. Lives here beside its siblings for the reason the marker does: one
131
+ * definition, so a reword cannot desynchronise the detector.
120
132
  */
121
133
  stranger: `${AWAY_AUTO_REPLY_MARKER} Dispatched.`,
122
134
  };
123
135
  /**
124
- * The system default away text, per kind and per whether the caller is known. MOVED HERE from
125
- * `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the strings it selects
126
- * so the selection sits beside the strings it selects.
136
+ * The system default away text for an inbound session REQUEST, per whether the caller is known.
137
+ * MOVED HERE from `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the
138
+ * strings it selects.
127
139
  *
128
140
  * The record that travelled with it:
129
141
  * - DOD-AWAY-WRAP-1 AC1: the request text is a leave-a-message greeting, and it names the specific
130
142
  * away agent — which is why it is built rather than fixed.
131
- * - DOD-AWAY-ACK-ONESHOT-TEXT-1 (live defect 2026-07-24): the message ack must STATE the one-shot
132
- * rule. Without it a cooperative caller LLM has no reason to stop, sends a follow-up, and eats the
133
- * DOD-INBOX-ONESHOT-1 rejection the design itself invited.
134
143
  * - ONE definition, shared with the detector in this file. A second copy elsewhere is how a reworded
135
144
  * away message stops being recognised as machine traffic and the mutual-seal loop
136
145
  * (DOD-AWAY-MUTUAL-SEAL-1) quietly comes back.
137
146
  *
138
- * ⚠️ A STRANGER GETS THE SAME STRING FOR BOTH KINDS. That is contained by DOD-M15-AWAYLEAF-1's
139
- * guard at the send site not by varying the text, which would tell an unknown caller more than
140
- * M8C-CONTACT-1 allows. Note the guard cannot live here: `resolveAwayMessage` OVERRIDES this
141
- * function entirely, so a configured away message is kind-independent too and collides the same way.
147
+ * ⚠️ DOD-M15-AWAYSCOPE-1 TOOK THE SECOND KIND AWAY, and with it the reason this function took a
148
+ * `kind` at all. There used to be a second arm for a message arriving on an ALREADY-ACCEPTED
149
+ * session the one-shot acknowledgement, `DOD-AWAY-ACK-ONESHOT-TEXT-1` and sending it was the
150
+ * defect: it typed a status announcement into a live conversation and took a chain leaf doing it.
151
+ * Its wording survives below as `ONESHOT_BODY`, unsent, because the legacy branch of
152
+ * `isOwnAwayAutoReply` is the only thing that still recognises an un-upgraded peer sending it.
142
153
  */
143
- export function systemAwayText(kind, agentName, isKnown) {
154
+ export function systemAwayText(agentName, isKnown) {
144
155
  if (!isKnown)
145
156
  return AWAY_AUTO_REPLY_TEXTS.stranger;
146
- return kind === "request" ? AWAY_AUTO_REPLY_TEXTS.offerFor(agentName) : AWAY_AUTO_REPLY_TEXTS.oneShot;
157
+ return AWAY_AUTO_REPLY_TEXTS.offerFor(agentName);
147
158
  }
148
159
  /**
149
160
  * True when `text` is away auto-reply traffic — a machine, not a caller.
@@ -1 +1 @@
1
- {"version":3,"file":"away-detection.js","sourceRoot":"","sources":["../src/away-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,mGAAmG;AACnG,MAAM,YAAY,GAChB,sGAAsG;IACtG,2HAA2H,CAAC;AAE9H,sFAAsF;AACtF,MAAM,YAAY,GAAG,6GAA6G,CAAC;AAEnI;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,GAAG,sBAAsB,IAAI,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;AACjD,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC;;;OAGG;IACH,OAAO,EAAE,GAAG,sBAAsB,IAAI,YAAY,EAAE;IAEpD,wFAAwF;IACxF,QAAQ,CAAC,SAAiB;QACxB,OAAO,GAAG,sBAAsB,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,EAAE,GAAG,sBAAsB,cAAc;CACzC,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,IAA2B,EAAE,SAAiB,EAAE,OAAgB;IAC7F,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACpD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;AACxG,CAAC;AAGD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,gGAAgG;IAChG,gFAAgF;IAChF,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"away-detection.js","sourceRoot":"","sources":["../src/away-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,YAAY,GAChB,sGAAsG;IACtG,2HAA2H,CAAC;AAE9H,sFAAsF;AACtF,MAAM,YAAY,GAAG,6GAA6G,CAAC;AAEnI;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,GAAG,sBAAsB,IAAI,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;AACjD,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,wFAAwF;IACxF,QAAQ,CAAC,SAAiB;QACxB,OAAO,GAAG,sBAAsB,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,EAAE,GAAG,sBAAsB,cAAc;CACzC,CAAC;AAEX;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAgB;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACpD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAGD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,gGAAgG;IAChG,gFAAgF;IAChF,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"boot-agents.d.ts","sourceRoot":"","sources":["../src/boot-agents.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,qBAAqB,CAAC;IACvC;;;;;OAKG;IACH,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,kBAAkB,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvD,oBAAoB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,cAAc;;gCAarB,MAAM,KAAG,yBAAyB;;;;;;;;kBAgK/D,CAAF;;;;;;;;;;;;;;oBAYwE,CAAC;;;qCA/HrC,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;;;wCA2InE,MAAM,WAGR,MAAM,KACZ;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,YAAY,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KACnG,IAAI;GAwBR"}
1
+ {"version":3,"file":"boot-agents.d.ts","sourceRoot":"","sources":["../src/boot-agents.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,qBAAqB,CAAC;IACvC;;;;;OAKG;IACH,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,kBAAkB,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvD,oBAAoB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,cAAc;;gCAarB,MAAM,KAAG,yBAAyB;;;;;;;;kBAuKjE,CAAA;;;;;;;;;;;;;;oBASiF,CAAC;;;qCAnI9C,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;;;wCA2InE,MAAM,WAGR,MAAM,KACZ;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,YAAY,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KACnG,IAAI;GAwBR"}