@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.
- package/dist/agent-admin-handlers.d.ts.map +1 -1
- package/dist/agent-admin-handlers.js +3 -0
- package/dist/agent-admin-handlers.js.map +1 -1
- package/dist/agent-handlers.d.ts.map +1 -1
- package/dist/agent-handlers.js +44 -0
- package/dist/agent-handlers.js.map +1 -1
- package/dist/agent-id-migration.d.ts.map +1 -1
- package/dist/agent-id-migration.js +11 -2
- package/dist/agent-id-migration.js.map +1 -1
- package/dist/assignment-verify.d.ts.map +1 -1
- package/dist/assignment-verify.js +2 -2
- package/dist/assignment-verify.js.map +1 -1
- package/dist/attendance-wiring.d.ts +2 -21
- package/dist/attendance-wiring.d.ts.map +1 -1
- package/dist/attendance-wiring.js +57 -251
- package/dist/attendance-wiring.js.map +1 -1
- package/dist/away-detection.d.ts +16 -21
- package/dist/away-detection.d.ts.map +1 -1
- package/dist/away-detection.js +34 -23
- package/dist/away-detection.js.map +1 -1
- package/dist/boot-agents.d.ts.map +1 -1
- package/dist/close-session-handler.d.ts.map +1 -1
- package/dist/close-session-handler.js +47 -1
- package/dist/close-session-handler.js.map +1 -1
- package/dist/co-attendance.d.ts +1 -1
- package/dist/co-attendance.js +1 -1
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/content-park.d.ts.map +1 -1
- package/dist/content-park.js +80 -0
- package/dist/content-park.js.map +1 -1
- package/dist/daemon-handle.d.ts +1 -1
- package/dist/daemon-handle.d.ts.map +1 -1
- package/dist/daemon-status-report.d.ts +10 -2
- package/dist/daemon-status-report.d.ts.map +1 -1
- package/dist/daemon-status-report.js +6 -3
- package/dist/daemon-status-report.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +41 -13
- package/dist/daemon.js.map +1 -1
- package/dist/directory-bootstrap.d.ts +3 -1
- package/dist/directory-bootstrap.d.ts.map +1 -1
- package/dist/directory-bootstrap.js +3 -1
- package/dist/directory-bootstrap.js.map +1 -1
- package/dist/directory-connect.d.ts.map +1 -1
- package/dist/directory-connect.js +10 -2
- package/dist/directory-connect.js.map +1 -1
- package/dist/disconnect-cleanup.d.ts +7 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -1
- package/dist/disconnect-cleanup.js +16 -1
- package/dist/disconnect-cleanup.js.map +1 -1
- package/dist/document-notify.d.ts +0 -1
- package/dist/document-notify.d.ts.map +1 -1
- package/dist/document-notify.js +0 -1
- package/dist/document-notify.js.map +1 -1
- package/dist/document-store.d.ts +0 -1
- package/dist/document-store.d.ts.map +1 -1
- package/dist/document-store.js +0 -1
- package/dist/document-store.js.map +1 -1
- package/dist/document-write-path.d.ts.map +1 -1
- package/dist/document-write-path.js +2 -9
- package/dist/document-write-path.js.map +1 -1
- package/dist/inbound-sessions.d.ts +3 -1
- package/dist/inbound-sessions.d.ts.map +1 -1
- package/dist/inbound-sessions.js +12 -4
- package/dist/inbound-sessions.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/initiate-session-handler.d.ts.map +1 -1
- package/dist/initiate-session-handler.js +5 -1
- package/dist/initiate-session-handler.js.map +1 -1
- package/dist/park-envelope.d.ts +68 -0
- package/dist/park-envelope.d.ts.map +1 -1
- package/dist/park-envelope.js +86 -1
- package/dist/park-envelope.js.map +1 -1
- package/dist/park-recovery.d.ts +46 -0
- package/dist/park-recovery.d.ts.map +1 -1
- package/dist/park-recovery.js +100 -1
- package/dist/park-recovery.js.map +1 -1
- package/dist/relay-only.d.ts.map +1 -1
- package/dist/relay-only.js +7 -4
- package/dist/relay-only.js.map +1 -1
- package/dist/relay-receipt-store.d.ts +48 -17
- package/dist/relay-receipt-store.d.ts.map +1 -1
- package/dist/relay-receipt-store.js +77 -27
- package/dist/relay-receipt-store.js.map +1 -1
- package/dist/seal-escalation.d.ts.map +1 -1
- package/dist/seal-escalation.js +25 -0
- package/dist/seal-escalation.js.map +1 -1
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/session-assignment-parser.d.ts.map +1 -1
- package/dist/session-assignment-parser.js +5 -0
- package/dist/session-assignment-parser.js.map +1 -1
- package/dist/session-ceremony.d.ts +21 -14
- package/dist/session-ceremony.d.ts.map +1 -1
- package/dist/session-ceremony.js +25 -15
- package/dist/session-ceremony.js.map +1 -1
- package/dist/session-content-context.d.ts +11 -2
- package/dist/session-content-context.d.ts.map +1 -1
- package/dist/session-content-ingest.d.ts +0 -3
- package/dist/session-content-ingest.d.ts.map +1 -1
- package/dist/session-content-ingest.js +18 -111
- package/dist/session-content-ingest.js.map +1 -1
- package/dist/session-content-send.d.ts +5 -0
- package/dist/session-content-send.d.ts.map +1 -1
- package/dist/session-content-send.js +58 -0
- package/dist/session-content-send.js.map +1 -1
- package/dist/session-delivery-acks.d.ts +195 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +674 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-leaf-records.d.ts +19 -1
- package/dist/session-leaf-records.d.ts.map +1 -1
- package/dist/session-leaf-records.js +67 -1
- package/dist/session-leaf-records.js.map +1 -1
- package/dist/session-lifecycle.js +3 -3
- package/dist/session-lifecycle.js.map +1 -1
- package/dist/session-node-manager.d.ts +36 -21
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +99 -29
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-node-types.d.ts +18 -12
- package/dist/session-node-types.d.ts.map +1 -1
- package/dist/session-node-types.js +1 -9
- package/dist/session-node-types.js.map +1 -1
- package/dist/session-read-handlers.d.ts.map +1 -1
- package/dist/session-read-handlers.js +125 -4
- package/dist/session-read-handlers.js.map +1 -1
- package/dist/session-records.d.ts +17 -0
- package/dist/session-records.d.ts.map +1 -1
- package/dist/session-records.js +32 -0
- package/dist/session-records.js.map +1 -1
- package/dist/session-relay-client.d.ts +103 -6
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +369 -27
- package/dist/session-relay-client.js.map +1 -1
- package/dist/session-relay.d.ts +24 -2
- package/dist/session-relay.d.ts.map +1 -1
- package/dist/session-relay.js +21 -6
- package/dist/session-relay.js.map +1 -1
- package/dist/session-schema.d.ts.map +1 -1
- package/dist/session-schema.js +43 -0
- package/dist/session-schema.js.map +1 -1
- package/dist/session-seal-leaf-store.d.ts +6 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -1
- package/dist/session-seal-leaf-store.js +21 -4
- package/dist/session-seal-leaf-store.js.map +1 -1
- package/dist/session-seal.d.ts +12 -0
- package/dist/session-seal.d.ts.map +1 -1
- package/dist/session-seal.js +92 -3
- package/dist/session-seal.js.map +1 -1
- package/dist/session-views.d.ts +1 -0
- package/dist/session-views.d.ts.map +1 -1
- package/dist/session-views.js +81 -1
- package/dist/session-views.js.map +1 -1
- package/dist/signaling-connect.d.ts +1 -0
- package/dist/signaling-connect.d.ts.map +1 -1
- package/dist/signaling-connect.js +0 -1
- package/dist/signaling-connect.js.map +1 -1
- package/dist/status-handler.d.ts +9 -1
- package/dist/status-handler.d.ts.map +1 -1
- package/dist/status-handler.js +5 -2
- package/dist/status-handler.js.map +1 -1
- package/dist/test-handlers.js +4 -3
- package/dist/test-handlers.js.map +1 -1
- package/dist/trust-signal-store.d.ts +4 -2
- package/dist/trust-signal-store.d.ts.map +1 -1
- package/dist/trust-signal-store.js +4 -2
- package/dist/trust-signal-store.js.map +1 -1
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* What an UNATTENDED agent does when someone
|
|
3
|
-
*
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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 {
|
|
22
|
-
import {
|
|
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,
|
|
28
|
-
// M8C-AWAY-1: away response — an unattended Primary auto-answers session requests
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
//
|
|
373
|
-
//
|
|
374
|
-
//
|
|
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
|
-
//
|
|
427
|
-
//
|
|
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
|
-
|
|
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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"}
|
package/dist/away-detection.d.ts
CHANGED
|
@@ -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
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
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
|
|
112
|
-
* `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the
|
|
113
|
-
*
|
|
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
|
-
* ⚠️
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
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(
|
|
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;
|
|
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"}
|
package/dist/away-detection.js
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
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
|
|
125
|
-
* `attendance-wiring.ts` (DOD-M15-AWAYLEAF-1) so the selection sits beside the
|
|
126
|
-
*
|
|
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
|
-
* ⚠️
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
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(
|
|
154
|
+
export function systemAwayText(agentName, isKnown) {
|
|
144
155
|
if (!isKnown)
|
|
145
156
|
return AWAY_AUTO_REPLY_TEXTS.stranger;
|
|
146
|
-
return
|
|
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
|
|
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;;;;;;;;
|
|
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"}
|