@cello-protocol/daemon 0.0.111 → 0.0.113
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/contact-handlers.d.ts +3 -0
- package/dist/contact-handlers.d.ts.map +1 -1
- package/dist/contact-handlers.js +13 -4
- package/dist/contact-handlers.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +19 -0
- package/dist/daemon.js.map +1 -1
- package/dist/frontier-mismatch.d.ts +66 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +0 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +6 -0
- package/dist/inbound-seal-request.d.ts.map +1 -1
- package/dist/inbound-seal-request.js +38 -3
- package/dist/inbound-seal-request.js.map +1 -1
- package/dist/notification-handlers.d.ts +3 -0
- package/dist/notification-handlers.d.ts.map +1 -1
- package/dist/notification-handlers.js +22 -2
- package/dist/notification-handlers.js.map +1 -1
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/seal-flows.d.ts +44 -2
- package/dist/seal-flows.d.ts.map +1 -1
- package/dist/seal-flows.js +73 -2
- package/dist/seal-flows.js.map +1 -1
- package/dist/session-node-manager.d.ts +10 -2
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +127 -13
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-tree.d.ts +10 -0
- package/dist/session-tree.d.ts.map +1 -1
- package/dist/session-tree.js +12 -0
- package/dist/session-tree.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
import { buildSignedSealInterruptedLeaf } from "./seal-leaf.js";
|
|
11
11
|
export function createInboundSealRequestHandler(deps) {
|
|
12
|
-
const { logger, sessionNodeManager, agents, getKeyProvider, sendOver } = deps;
|
|
12
|
+
const { logger, sessionNodeManager, agents, getKeyProvider, sendOver, recordFrontierMismatch } = deps;
|
|
13
13
|
// ─── M7-SESSION-001 (H-1): seal-interrupted bilateral RESPONDER ────────────
|
|
14
14
|
//
|
|
15
15
|
// A PERSISTENT inbound handler (registered once, below) that reacts to inbound
|
|
@@ -36,11 +36,24 @@ export function createInboundSealRequestHandler(deps) {
|
|
|
36
36
|
});
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
// DOD-FRONTIER-STRAND-1 AC2: a rejection may carry the numbers that caused it.
|
|
40
|
+
//
|
|
41
|
+
// The RESPONDER is the only party that ever sees both frontiers — it holds its own tree and
|
|
42
|
+
// receives the initiator's claimed count in the request. It used to compare them and then throw
|
|
43
|
+
// the comparison away, sending the bare word "leaf_count_mismatch". The initiator, which knows
|
|
44
|
+
// only its own side, then told the operator to go ask the counterparty. When both agents live on
|
|
45
|
+
// ONE daemon (the loopback case that produced session dbb93dfc…, stranded for a week) there is
|
|
46
|
+
// no counterparty to ask and no second machine to check: the advice was unfollowable and the one
|
|
47
|
+
// fact that would have solved it in a minute was discarded here.
|
|
48
|
+
const reject = async (reason, detail) => {
|
|
40
49
|
// CONN-001: send the rejection over the LOCAL responder agent's own stream (the agent whose
|
|
41
50
|
// pubkey is counterpartyPubkey — the stream this request arrived on). If unresolved, sendOver
|
|
42
51
|
// reports a send failure rather than throwing.
|
|
52
|
+
// review F5: detail is spread FIRST so the fixed fields always win. Spread last, a future
|
|
53
|
+
// caller passing `{ reason: 1 }` would silently overwrite the machine-readable discriminator
|
|
54
|
+
// every consumer switches on — a footgun with no error, only a wrong answer.
|
|
43
55
|
const sent = await sendOver(agents.find((a) => a.pubkey === counterpartyPubkey)?.name ?? "", {
|
|
56
|
+
...(detail ?? {}),
|
|
44
57
|
type: "seal_interrupted_rejection",
|
|
45
58
|
sessionId,
|
|
46
59
|
initiatorPubkey,
|
|
@@ -97,7 +110,29 @@ export function createInboundSealRequestHandler(deps) {
|
|
|
97
110
|
const ownRoot = useOwnTree ? sessionNodeManager.getSessionTreeRootHex(localAgent.name, sessionId) : merkleRootReq;
|
|
98
111
|
// SI-002/AC-008: leaf-count agreement against our own state.
|
|
99
112
|
if (ownLeafCount !== leafCountReq) {
|
|
100
|
-
|
|
113
|
+
// AC2: carry BOTH frontiers and the first index where they can differ. The diverging index is
|
|
114
|
+
// the lower count — leaf indices are contiguous from 0, so the shorter side simply stops
|
|
115
|
+
// there, and that leaf is the one an operator should read on both transcripts. (Which side is
|
|
116
|
+
// longer is not assumed: either can be, depending on which one failed to record.)
|
|
117
|
+
const diverging = Math.min(ownLeafCount, leafCountReq);
|
|
118
|
+
logger.warn("session.frontier.mismatch", {
|
|
119
|
+
sessionId,
|
|
120
|
+
agentName: localAgent.name,
|
|
121
|
+
responderLeafCount: ownLeafCount,
|
|
122
|
+
initiatorLeafCount: leafCountReq,
|
|
123
|
+
divergingLeafIndex: diverging,
|
|
124
|
+
correlationId,
|
|
125
|
+
});
|
|
126
|
+
// AC3: keep it. Without this the refusal is a transient string in one command's output, and
|
|
127
|
+
// the session goes back to looking exactly like a healthy paused one.
|
|
128
|
+
recordFrontierMismatch?.(localAgent.name, sessionId, {
|
|
129
|
+
ours: ownLeafCount, theirs: leafCountReq, divergingLeafIndex: diverging,
|
|
130
|
+
});
|
|
131
|
+
await reject("leaf_count_mismatch", {
|
|
132
|
+
responder_leaf_count: ownLeafCount,
|
|
133
|
+
initiator_leaf_count: leafCountReq,
|
|
134
|
+
diverging_leaf_index: diverging,
|
|
135
|
+
});
|
|
101
136
|
return;
|
|
102
137
|
}
|
|
103
138
|
const kp = getKeyProvider(localAgent.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-seal-request.js","sourceRoot":"","sources":["../src/inbound-seal-request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"inbound-seal-request.js","sourceRoot":"","sources":["../src/inbound-seal-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import type { SessionNodeManager } from "./session-node-manager.js";
|
|
|
14
14
|
import type { Logger } from "./types.js";
|
|
15
15
|
import type { ConnState } from "./contact-handlers.js";
|
|
16
16
|
import type { InboundSessionEvent, ExpiredSessionRequest } from "./inbound-sessions.js";
|
|
17
|
+
import type { AgentInfo } from "./types.js";
|
|
17
18
|
export interface NotificationHandlerDeps {
|
|
18
19
|
handlers: Map<string, IpcHandler>;
|
|
19
20
|
logger: Logger;
|
|
@@ -24,6 +25,8 @@ export interface NotificationHandlerDeps {
|
|
|
24
25
|
name: string;
|
|
25
26
|
pubkey: string;
|
|
26
27
|
}>;
|
|
28
|
+
/** DOD-INBOX-AGENT-1: every agent INCLUDING load_failed ones — 'exists but broken' is not 'not found'. */
|
|
29
|
+
agents: ReadonlyArray<AgentInfo>;
|
|
27
30
|
reapExpiredInboundSessions: (agentName: string) => void;
|
|
28
31
|
inboundSessionQueues: Map<string, InboundSessionEvent[]>;
|
|
29
32
|
expiredSessionRequests: Map<string, ExpiredSessionRequest[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-handlers.d.ts","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAExF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;CAC9D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"notification-handlers.d.ts","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,0GAA0G;IAC1G,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;CAC9D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAsGhF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { resolveNamedAgent } from "./resolve-named-agent.js";
|
|
1
2
|
export function registerNotificationHandlers(deps) {
|
|
2
|
-
const { handlers, logger, sessionNodeManager, getConnState, resolveCurrentAgent, loadedAgents, reapExpiredInboundSessions, inboundSessionQueues, expiredSessionRequests, } = deps;
|
|
3
|
+
const { handlers, logger, sessionNodeManager, getConnState, resolveCurrentAgent, loadedAgents, agents: allAgents, reapExpiredInboundSessions, inboundSessionQueues, expiredSessionRequests, } = deps;
|
|
3
4
|
// ─── M8C-INBOX-1 (N1/N4): cello_check_notifications — push-loss reconciler + poll-only inbox ───
|
|
4
5
|
// Notifications are fire-and-forget (no ack, no redelivery); this is how a client discovers what
|
|
5
6
|
// it missed while its shim was down/busy, and the primary inbox for poll-only clients (Bedrock,
|
|
@@ -9,13 +10,32 @@ export function registerNotificationHandlers(deps) {
|
|
|
9
10
|
handlers.set("cello_check_notifications", async (params, connectionId) => {
|
|
10
11
|
const connState = getConnState(connectionId);
|
|
11
12
|
const scope = params?.scope === "all" ? "all" : "current";
|
|
13
|
+
// DOD-INBOX-AGENT-1 (debt — from M8C): an explicitly NAMED agent. Every sibling handler passes
|
|
14
|
+
// `params?.agent` into resolveCurrentAgent; this one never did, so the parameter was accepted,
|
|
15
|
+
// silently dropped, and the call answered for whatever agent the CONNECTION held — ok:true, wrong
|
|
16
|
+
// desk, no signal. That is the receptionist's shared-file collision one layer up, with an MCP
|
|
17
|
+
// socket standing in for `~/.cello/current-agent`: two skills in one Claude Code session share
|
|
18
|
+
// one socket, so a sibling's cello_use_agent re-points this caller mid-flight.
|
|
19
|
+
// The named-agent guard runs BEFORE the scope branch, not inside it (review MEDIUM). Inside, the
|
|
20
|
+
// same parameter was refused when empty and silently ignored when unknown, depending only on
|
|
21
|
+
// whether scope was 'current' or 'all' — accept-and-ignore is the exact shape this line removes,
|
|
22
|
+
// so it must not survive on one branch of it.
|
|
23
|
+
const named = resolveNamedAgent(params?.agent, allAgents);
|
|
24
|
+
if (!named.ok) {
|
|
25
|
+
logger.warn("inbox.agent.rejected", { connectionId, scope, reason: named.reason });
|
|
26
|
+
return named;
|
|
27
|
+
}
|
|
28
|
+
const explicitAgent = named.agent ?? undefined;
|
|
12
29
|
let agentNames;
|
|
13
30
|
if (scope === "all") {
|
|
31
|
+
// 'all' means every loaded agent, so a named agent is not applicable — narrowing it here would
|
|
32
|
+
// make scope:'all' silently mean scope:'current'. It is still VALIDATED above, so a caller who
|
|
33
|
+
// passes a bad name is told, rather than having it quietly discarded.
|
|
14
34
|
agentNames = loadedAgents.map((a) => a.name);
|
|
15
35
|
}
|
|
16
36
|
else {
|
|
17
37
|
// F18: an explicit current agent, else the sole-online agent; ambiguous → no_current_agent.
|
|
18
|
-
const current = resolveCurrentAgent(connState);
|
|
38
|
+
const current = resolveCurrentAgent(connState, explicitAgent);
|
|
19
39
|
if (!current) {
|
|
20
40
|
return {
|
|
21
41
|
ok: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-handlers.js","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notification-handlers.js","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One guard for "the caller named an agent" — shared, so the third copy never gets written.
|
|
3
|
+
*
|
|
4
|
+
* DOD-INBOX-AGENT-1 closed a defect where `cello_check_notifications` accepted an `agent` parameter
|
|
5
|
+
* and silently dropped it, answering as whatever agent the CONNECTION held. Reviewing that fix found
|
|
6
|
+
* the same shape in three more places, including the one next door in `contact-handlers.ts`, where
|
|
7
|
+
* it is worse because that path WRITES: `cello_contact_add({ agent: "", pubkey })` fell through to
|
|
8
|
+
* the connection's selection and filed the contact under the wrong desk, and `{ agent: "carol" }`
|
|
9
|
+
* with no carol wrote a row keyed to an agent that does not exist. Both `ok: true`.
|
|
10
|
+
*
|
|
11
|
+
* The three ways a named agent goes wrong, and why each must REFUSE rather than fall back:
|
|
12
|
+
*
|
|
13
|
+
* 1. **A non-string** (`{ agent: 123 }`). MCP callers are shielded by zod; direct-IPC callers are
|
|
14
|
+
* not. §5a is explicit that unreachability is a property of today's call graph, not of the code.
|
|
15
|
+
* 2. **An empty string.** `""` is falsy but not nullish, so a bare truthiness test reads it as "no
|
|
16
|
+
* name given" and runs as the connection's selection — the exact misroute, reintroduced through
|
|
17
|
+
* the guard meant to prevent it. `{ agent: someUnsetVar }` produces it, and so does an
|
|
18
|
+
* unsubstituted `<exact name>` placeholder in a prompt.
|
|
19
|
+
* 3. **A name that is not here.** Falling back answers a question about carol with alice's data.
|
|
20
|
+
*
|
|
21
|
+
* And one that is NOT "not found": an agent whose identity FAILED TO LOAD exists. Saying "does not
|
|
22
|
+
* exist" sends the operator to `cello_agents`, which filters `load_failed` out — so they see nothing,
|
|
23
|
+
* confirm the wrong diagnosis, and never reach `cello_status`, which would have shown the real error.
|
|
24
|
+
* That is an exit-point label standing in for the cause.
|
|
25
|
+
*/
|
|
26
|
+
export interface NamedAgentRefusal {
|
|
27
|
+
ok: false;
|
|
28
|
+
reason: "invalid_agent_value" | "missing_agent_value" | "agent_not_found" | "agent_load_failed";
|
|
29
|
+
guidance: string;
|
|
30
|
+
}
|
|
31
|
+
/** What the resolver needs to know about the agents on this machine. */
|
|
32
|
+
export interface KnownAgent {
|
|
33
|
+
name: string;
|
|
34
|
+
state?: string;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate an explicitly-named agent.
|
|
39
|
+
*
|
|
40
|
+
* Returns `{ ok: true, agent }` when the caller named a real agent, `{ ok: true, agent: null }` when
|
|
41
|
+
* the caller named NOTHING (so the caller should fall back to its own connection-scoped resolution),
|
|
42
|
+
* and a refusal otherwise. The three-way return is the point: "named nothing" and "named something
|
|
43
|
+
* unusable" are different, and collapsing them is the whole defect class.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveNamedAgent(rawAgent: unknown, known: ReadonlyArray<KnownAgent>): {
|
|
46
|
+
ok: true;
|
|
47
|
+
agent: string | null;
|
|
48
|
+
} | NamedAgentRefusal;
|
|
49
|
+
//# sourceMappingURL=resolve-named-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-named-agent.d.ts","sourceRoot":"","sources":["../src/resolve-named-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;IAChG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,iBAAiB,CAwCxD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One guard for "the caller named an agent" — shared, so the third copy never gets written.
|
|
3
|
+
*
|
|
4
|
+
* DOD-INBOX-AGENT-1 closed a defect where `cello_check_notifications` accepted an `agent` parameter
|
|
5
|
+
* and silently dropped it, answering as whatever agent the CONNECTION held. Reviewing that fix found
|
|
6
|
+
* the same shape in three more places, including the one next door in `contact-handlers.ts`, where
|
|
7
|
+
* it is worse because that path WRITES: `cello_contact_add({ agent: "", pubkey })` fell through to
|
|
8
|
+
* the connection's selection and filed the contact under the wrong desk, and `{ agent: "carol" }`
|
|
9
|
+
* with no carol wrote a row keyed to an agent that does not exist. Both `ok: true`.
|
|
10
|
+
*
|
|
11
|
+
* The three ways a named agent goes wrong, and why each must REFUSE rather than fall back:
|
|
12
|
+
*
|
|
13
|
+
* 1. **A non-string** (`{ agent: 123 }`). MCP callers are shielded by zod; direct-IPC callers are
|
|
14
|
+
* not. §5a is explicit that unreachability is a property of today's call graph, not of the code.
|
|
15
|
+
* 2. **An empty string.** `""` is falsy but not nullish, so a bare truthiness test reads it as "no
|
|
16
|
+
* name given" and runs as the connection's selection — the exact misroute, reintroduced through
|
|
17
|
+
* the guard meant to prevent it. `{ agent: someUnsetVar }` produces it, and so does an
|
|
18
|
+
* unsubstituted `<exact name>` placeholder in a prompt.
|
|
19
|
+
* 3. **A name that is not here.** Falling back answers a question about carol with alice's data.
|
|
20
|
+
*
|
|
21
|
+
* And one that is NOT "not found": an agent whose identity FAILED TO LOAD exists. Saying "does not
|
|
22
|
+
* exist" sends the operator to `cello_agents`, which filters `load_failed` out — so they see nothing,
|
|
23
|
+
* confirm the wrong diagnosis, and never reach `cello_status`, which would have shown the real error.
|
|
24
|
+
* That is an exit-point label standing in for the cause.
|
|
25
|
+
*/
|
|
26
|
+
/** Agent-name length cap, matching the moniker convention — the name is echoed back into guidance. */
|
|
27
|
+
const MAX_NAME_ECHO = 64;
|
|
28
|
+
/** Truncate a caller-supplied name before echoing it into an operator-facing string. */
|
|
29
|
+
function echoName(name) {
|
|
30
|
+
return name.length <= MAX_NAME_ECHO ? name : `${name.slice(0, MAX_NAME_ECHO)}…`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate an explicitly-named agent.
|
|
34
|
+
*
|
|
35
|
+
* Returns `{ ok: true, agent }` when the caller named a real agent, `{ ok: true, agent: null }` when
|
|
36
|
+
* the caller named NOTHING (so the caller should fall back to its own connection-scoped resolution),
|
|
37
|
+
* and a refusal otherwise. The three-way return is the point: "named nothing" and "named something
|
|
38
|
+
* unusable" are different, and collapsing them is the whole defect class.
|
|
39
|
+
*/
|
|
40
|
+
export function resolveNamedAgent(rawAgent, known) {
|
|
41
|
+
if (rawAgent === undefined || rawAgent === null)
|
|
42
|
+
return { ok: true, agent: null };
|
|
43
|
+
if (typeof rawAgent !== "string") {
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
reason: "invalid_agent_value",
|
|
47
|
+
guidance: `The 'agent' parameter must be an agent name (a string), but got ${Array.isArray(rawAgent) ? "an array" : typeof rawAgent}. Nothing was read or written. Pass the name, or omit 'agent' to use this connection's current agent.`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (rawAgent.trim() === "") {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
reason: "missing_agent_value",
|
|
54
|
+
guidance: "The 'agent' parameter was empty (an unset variable, or an unsubstituted placeholder?). Nothing was read or written — an empty name is NOT treated as 'no agent given', because that would silently run as whichever agent this connection happens to hold. Name an agent, or omit 'agent' entirely.",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const match = known.find((a) => a.name === rawAgent);
|
|
58
|
+
if (!match) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
reason: "agent_not_found",
|
|
62
|
+
guidance: `Agent '${echoName(rawAgent)}' does not exist on this machine, so nothing was read or written. Check the name with cello_agents, or omit 'agent' to use this connection's current agent.`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// It EXISTS but its identity could not be loaded. Reported as itself: cello_agents hides
|
|
66
|
+
// load_failed agents, so "does not exist" would send the operator to the one surface that
|
|
67
|
+
// confirms the wrong answer. cello_status shows the state and the underlying error.
|
|
68
|
+
if (match.state === "load_failed") {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: "agent_load_failed",
|
|
72
|
+
guidance: `Agent '${echoName(rawAgent)}' exists but its identity failed to load, so nothing was read or written${match.error ? ` (${match.error})` : ""}. Run cello_status to see the error — note cello_agents omits agents in this state, so it will look like the agent is missing.`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return { ok: true, agent: rawAgent };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=resolve-named-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-named-agent.js","sourceRoot":"","sources":["../src/resolve-named-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,sGAAsG;AACtG,MAAM,aAAa,GAAG,EAAE,CAAC;AAezB,wFAAwF;AACxF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC;AAClF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAiB,EACjB,KAAgC;IAEhC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAElF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,mEAAmE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,QAAQ,uGAAuG;SAC3O,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,qSAAqS;SAChT,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU,QAAQ,CAAC,QAAQ,CAAC,6JAA6J;SACpM,CAAC;IACJ,CAAC;IAED,yFAAyF;IACzF,0FAA0F;IAC1F,oFAAoF;IACpF,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,mBAAmB;YAC3B,QAAQ,EAAE,UAAU,QAAQ,CAAC,QAAQ,CAAC,2EAA2E,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,gIAAgI;SACxR,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
|
package/dist/seal-flows.d.ts
CHANGED
|
@@ -2,15 +2,28 @@ import { SignalingManager } from "@cello-protocol/transport";
|
|
|
2
2
|
import type { KeyProvider } from "@cello-protocol/crypto";
|
|
3
3
|
import type { SessionNodeManager } from "./session-node-manager.js";
|
|
4
4
|
import type { AgentInfo, Logger } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* DOD-FRONTIER-STRAND-1 AC2: a failure may carry the numbers that caused it. `reason` stays the
|
|
7
|
+
* machine-readable discriminator every caller already switches on; these are additive detail so an
|
|
8
|
+
* operator is told WHAT disagreed rather than being sent to a counterparty that may be this same
|
|
9
|
+
* daemon. All optional — a rejection from an older counterparty carries none of them.
|
|
10
|
+
*/
|
|
11
|
+
export interface SealFailureDetail {
|
|
12
|
+
/** The counterparty's own refusal reason, distinct from OUR terminal `reason`. */
|
|
13
|
+
rejection_reason?: string;
|
|
14
|
+
your_leaf_count?: number;
|
|
15
|
+
their_leaf_count?: number;
|
|
16
|
+
diverging_leaf_index?: number;
|
|
17
|
+
}
|
|
5
18
|
export type SealFlowResult = {
|
|
6
19
|
ok: true;
|
|
7
20
|
sessionId: string;
|
|
8
21
|
status: "seal_interrupted_pending";
|
|
9
|
-
} | {
|
|
22
|
+
} | ({
|
|
10
23
|
ok: false;
|
|
11
24
|
reason: string;
|
|
12
25
|
guidance: string;
|
|
13
|
-
};
|
|
26
|
+
} & SealFailureDetail);
|
|
14
27
|
export type ActiveSealResult = {
|
|
15
28
|
ok: true;
|
|
16
29
|
sessionId: string;
|
|
@@ -32,7 +45,31 @@ export interface SealFlowDeps {
|
|
|
32
45
|
ok: boolean;
|
|
33
46
|
reason?: string;
|
|
34
47
|
}>;
|
|
48
|
+
/** DOD-FRONTIER-STRAND-1 AC3: retain an observed mismatch so the session list can show it. */
|
|
49
|
+
recordFrontierMismatch?: (agentName: string, sessionId: string, m: {
|
|
50
|
+
ours: number;
|
|
51
|
+
theirs: number;
|
|
52
|
+
divergingLeafIndex: number;
|
|
53
|
+
}) => void;
|
|
54
|
+
/** AC3: a seal that SUCCEEDS proves the frontiers agree — a stale flag would be the same defect inverted. */
|
|
55
|
+
clearFrontierMismatch?: (agentName: string, sessionId: string) => void;
|
|
35
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The operator-visible text for a counterparty's seal-interrupted rejection.
|
|
59
|
+
*
|
|
60
|
+
* Extracted from the flow so it can be TESTED. AC2 is worded about the message the INITIATOR shows
|
|
61
|
+
* — "reports the ACTUAL mismatch … instead of directing the operator to ask the counterparty" — and
|
|
62
|
+
* that message was previously built inline inside `handleSealInterruptedFlow`, reachable only by
|
|
63
|
+
* standing up two daemons and driving a real seal exchange. So the clause the AC is actually about
|
|
64
|
+
* had no test at all (review). A pure function is the honest seam.
|
|
65
|
+
*/
|
|
66
|
+
export declare function renderSealRejection(reason: string, sessionId: string, frontier?: {
|
|
67
|
+
responder: number;
|
|
68
|
+
initiator: number;
|
|
69
|
+
diverging: number;
|
|
70
|
+
}): {
|
|
71
|
+
guidance: string;
|
|
72
|
+
} & SealFailureDetail;
|
|
36
73
|
export declare function createSealFlows(deps: SealFlowDeps): {
|
|
37
74
|
awaitSealAck: (sessionId: string, mgr: SignalingManager | undefined) => Promise<{
|
|
38
75
|
type: "seal_interrupted_ack";
|
|
@@ -41,6 +78,11 @@ export declare function createSealFlows(deps: SealFlowDeps): {
|
|
|
41
78
|
} | {
|
|
42
79
|
type: "seal_interrupted_rejection";
|
|
43
80
|
reason: string;
|
|
81
|
+
frontier?: {
|
|
82
|
+
responder: number;
|
|
83
|
+
initiator: number;
|
|
84
|
+
diverging: number;
|
|
85
|
+
};
|
|
44
86
|
} | {
|
|
45
87
|
type: "timeout";
|
|
46
88
|
}>;
|
package/dist/seal-flows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal-flows.d.ts","sourceRoot":"","sources":["../src/seal-flows.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,0BAA0B,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"seal-flows.d.ts","sourceRoot":"","sources":["../src/seal-flows.ts"],"names":[],"mappings":"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"}
|
package/dist/seal-flows.js
CHANGED
|
@@ -11,8 +11,42 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { randomUUID } from "node:crypto";
|
|
13
13
|
import { buildSignedSealInterruptedLeaf, verifyCounterpartySealLeaf } from "./seal-leaf.js";
|
|
14
|
+
/**
|
|
15
|
+
* The operator-visible text for a counterparty's seal-interrupted rejection.
|
|
16
|
+
*
|
|
17
|
+
* Extracted from the flow so it can be TESTED. AC2 is worded about the message the INITIATOR shows
|
|
18
|
+
* — "reports the ACTUAL mismatch … instead of directing the operator to ask the counterparty" — and
|
|
19
|
+
* that message was previously built inline inside `handleSealInterruptedFlow`, reachable only by
|
|
20
|
+
* standing up two daemons and driving a real seal exchange. So the clause the AC is actually about
|
|
21
|
+
* had no test at all (review). A pure function is the honest seam.
|
|
22
|
+
*/
|
|
23
|
+
export function renderSealRejection(reason, sessionId, frontier) {
|
|
24
|
+
if (frontier) {
|
|
25
|
+
const { responder, initiator, diverging } = frontier;
|
|
26
|
+
return {
|
|
27
|
+
rejection_reason: reason,
|
|
28
|
+
your_leaf_count: initiator,
|
|
29
|
+
their_leaf_count: responder,
|
|
30
|
+
diverging_leaf_index: diverging,
|
|
31
|
+
guidance: `The two sides disagree on how many messages this session contains: you hold ${initiator}, ` +
|
|
32
|
+
`they hold ${responder}. They diverge at leaf ${diverging} — compare that message on both ` +
|
|
33
|
+
`transcripts with cello_transcript ${sessionId}. A leaf that only one side recorded cannot ` +
|
|
34
|
+
`be co-signed, so the session cannot seal until the records agree. If BOTH agents run on ` +
|
|
35
|
+
`this machine, read both sides here; there is no other end to check.`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Only a leaf_count_mismatch is EXPECTED to carry the numbers, so only there is their absence
|
|
39
|
+
// evidence of an older daemon. The responder rejects for five other reasons, and rendering those
|
|
40
|
+
// as a version problem asserts a cause the code never observed.
|
|
41
|
+
return {
|
|
42
|
+
rejection_reason: reason,
|
|
43
|
+
guidance: reason === "leaf_count_mismatch"
|
|
44
|
+
? `The counterparty rejected the seal-interrupted request because the two sides disagree on how many messages this session holds, but it did not report its own count — it is running an older daemon. Compare the two transcripts with cello_transcript ${sessionId}; a session strands when one side holds a leaf the other never recorded.`
|
|
45
|
+
: `The counterparty rejected the seal-interrupted request: ${reason}. That is its own reason, reported verbatim — nothing here diagnoses it further. Check the counterparty's daemon for that condition; cello_transcript ${sessionId} shows this side's record if you need it.`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
14
48
|
export function createSealFlows(deps) {
|
|
15
|
-
const { logger, sessionNodeManager, agents, getKeyProvider, signalingFor, sendOver } = deps;
|
|
49
|
+
const { logger, sessionNodeManager, agents, getKeyProvider, signalingFor, sendOver, recordFrontierMismatch, clearFrontierMismatch } = deps;
|
|
16
50
|
const keyProviders = { get: getKeyProvider };
|
|
17
51
|
// Seal-interrupted bilateral INITIATOR flow.
|
|
18
52
|
//
|
|
@@ -72,9 +106,18 @@ export function createSealFlows(deps) {
|
|
|
72
106
|
});
|
|
73
107
|
}
|
|
74
108
|
else {
|
|
109
|
+
// Only treat the frontier detail as present when BOTH numbers are real. A half-populated
|
|
110
|
+
// frame must render as "no detail", never as a mismatch with one side invented.
|
|
111
|
+
const responder = frame["responder_leaf_count"];
|
|
112
|
+
const initiator = frame["initiator_leaf_count"];
|
|
113
|
+
const diverging = frame["diverging_leaf_index"];
|
|
114
|
+
const hasFrontier = typeof responder === "number" && typeof initiator === "number";
|
|
75
115
|
resolve({
|
|
76
116
|
type: "seal_interrupted_rejection",
|
|
77
117
|
reason: typeof frame.reason === "string" ? frame.reason : "unknown",
|
|
118
|
+
...(hasFrontier
|
|
119
|
+
? { frontier: { responder, initiator, diverging: typeof diverging === "number" ? diverging : Math.min(responder, initiator) } }
|
|
120
|
+
: {}),
|
|
78
121
|
});
|
|
79
122
|
}
|
|
80
123
|
});
|
|
@@ -185,12 +228,32 @@ export function createSealFlows(deps) {
|
|
|
185
228
|
agentName: record.agent_name,
|
|
186
229
|
reason: "seal_interrupted_rejected_by_counterparty",
|
|
187
230
|
error: ackResult.reason,
|
|
231
|
+
...(ackResult.frontier
|
|
232
|
+
? {
|
|
233
|
+
responderLeafCount: ackResult.frontier.responder,
|
|
234
|
+
initiatorLeafCount: ackResult.frontier.initiator,
|
|
235
|
+
divergingLeafIndex: ackResult.frontier.diverging,
|
|
236
|
+
}
|
|
237
|
+
: {}),
|
|
188
238
|
correlationId,
|
|
189
239
|
});
|
|
240
|
+
// DOD-FRONTIER-STRAND-1 AC2: name the mismatch. The old text said "ask the counterparty to
|
|
241
|
+
// check their interrupted sessions on their end" — which, when both agents run on ONE daemon
|
|
242
|
+
// (the case that stranded session dbb93dfc… for a week), points at a machine that does not
|
|
243
|
+
// exist while withholding the two numbers that identify the problem.
|
|
244
|
+
if (ackResult.frontier) {
|
|
245
|
+
const { responder, initiator, diverging } = ackResult.frontier;
|
|
246
|
+
// AC3: the INITIATOR learns the two numbers here and must keep them too — otherwise only the
|
|
247
|
+
// responder's session list shows the strand and the side that attempted the close sees
|
|
248
|
+
// nothing afterwards.
|
|
249
|
+
recordFrontierMismatch?.(record.agent_name, sessionId, {
|
|
250
|
+
ours: initiator, theirs: responder, divergingLeafIndex: diverging,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
190
253
|
return {
|
|
191
254
|
ok: false,
|
|
192
255
|
reason: "seal_interrupted_rejected_by_counterparty",
|
|
193
|
-
|
|
256
|
+
...renderSealRejection(ackResult.reason, sessionId, ackResult.frontier),
|
|
194
257
|
};
|
|
195
258
|
}
|
|
196
259
|
// ackResult.type === "seal_interrupted_ack"
|
|
@@ -264,6 +327,10 @@ export function createSealFlows(deps) {
|
|
|
264
327
|
leafCount: ownLeafCount,
|
|
265
328
|
correlationId,
|
|
266
329
|
});
|
|
330
|
+
// AC3: the frontiers evidently agree now — drop any recorded mismatch. A flag that outlives
|
|
331
|
+
// the condition is the same defect inverted: an operator told a healthy session is stranded
|
|
332
|
+
// stops believing the flag, and the next real strand reads as noise.
|
|
333
|
+
clearFrontierMismatch?.(record.agent_name, sessionId);
|
|
267
334
|
return { ok: true, sessionId, status: "seal_interrupted_pending" };
|
|
268
335
|
}
|
|
269
336
|
}
|
|
@@ -447,6 +514,10 @@ export function createSealFlows(deps) {
|
|
|
447
514
|
// ingestReceivedContent now also rejects) and so the node is not leaked per
|
|
448
515
|
// active close. retireSessionNode stops the node WITHOUT changing the DB status.
|
|
449
516
|
await sessionNodeManager.retireSessionNode(record.agent_name, sessionId);
|
|
517
|
+
// AC3: the frontiers evidently agree now — drop any recorded mismatch. A flag that outlives
|
|
518
|
+
// the condition is the same defect inverted: an operator told a healthy session is stranded
|
|
519
|
+
// stops believing the flag, and the next real strand reads as noise.
|
|
520
|
+
clearFrontierMismatch?.(record.agent_name, sessionId);
|
|
450
521
|
return { ok: true, sessionId, status: "seal_interrupted_pending", rootHex: ownRootHex };
|
|
451
522
|
}
|
|
452
523
|
return { awaitSealAck, handleSealInterruptedFlow, handleActiveSealFlow };
|
package/dist/seal-flows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal-flows.js","sourceRoot":"","sources":["../src/seal-flows.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seal-flows.js","sourceRoot":"","sources":["../src/seal-flows.ts"],"names":[],"mappings":"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"}
|
|
@@ -843,7 +843,15 @@ export declare class SessionNodeManager {
|
|
|
843
843
|
*
|
|
844
844
|
* @returns the appended leaf index (as sequenceNumber) on success.
|
|
845
845
|
*/
|
|
846
|
-
ingestReceivedContent(agentName: string, sessionId: string, content: Uint8Array, contentHash: Uint8Array, correlationId?: string
|
|
846
|
+
ingestReceivedContent(agentName: string, sessionId: string, content: Uint8Array, contentHash: Uint8Array, correlationId?: string,
|
|
847
|
+
/**
|
|
848
|
+
* DOD-FRONTIER-STRAND-1 AC1: the relay-assigned canonical position for THIS message, taken from
|
|
849
|
+
* the verified ordering record by the caller. Passed EXPLICITLY rather than recovered from
|
|
850
|
+
* `#witnessedSeq`, because that map is keyed by content hash — so two byte-identical messages
|
|
851
|
+
* collapse in it before dedup is ever consulted, which is the whole defect. Absent when the
|
|
852
|
+
* session has no relay witness (relay-degraded): see the announced fallback below.
|
|
853
|
+
*/
|
|
854
|
+
canonicalSeqIn?: number): Promise<{
|
|
847
855
|
ok: true;
|
|
848
856
|
leafIndex: number;
|
|
849
857
|
sequenceNumber: number;
|
|
@@ -947,7 +955,7 @@ export declare class SessionNodeManager {
|
|
|
947
955
|
* DOD-MSG-4 (2b): public entry for the recover path to verify + record a parked entry's ordering
|
|
948
956
|
* record (the recover handler lives in daemon.ts, which has no access to the private method).
|
|
949
957
|
*/
|
|
950
|
-
recordOrderingRecord(agentName: string, sessionId: string, structure1Cbor: Uint8Array, structure2Cbor: Uint8Array, contentHash: Uint8Array, correlationId?: string):
|
|
958
|
+
recordOrderingRecord(agentName: string, sessionId: string, structure1Cbor: Uint8Array, structure2Cbor: Uint8Array, contentHash: Uint8Array, correlationId?: string): number | null;
|
|
951
959
|
/**
|
|
952
960
|
* M7-SESSION-001 AC-004/AC-005: Register a relay stream for an active session.
|
|
953
961
|
* Starts a background reader that watches for session_interrupted frames and
|