@apnex/network-adapter 0.1.6 → 0.1.9

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.
@@ -1,6 +1,6 @@
1
1
  {
2
- "commitSha": "9f379e9",
2
+ "commitSha": "38004aa",
3
3
  "dirty": true,
4
- "buildTime": "2026-07-03T01:44:42.475Z",
5
- "branch": "main"
4
+ "buildTime": "2026-07-07T07:08:07.270Z",
5
+ "branch": "HEAD"
6
6
  }
package/dist/index.d.ts CHANGED
@@ -3,7 +3,8 @@ export { McpTransport } from "./wire/mcp-transport.js";
3
3
  export { McpAgentClient } from "./kernel/mcp-agent-client.js";
4
4
  export type { McpAgentClientOptions } from "./kernel/mcp-agent-client.js";
5
5
  export type { IAgentClient, AgentClientConfig, AgentClientCallbacks, AgentClientMetrics, AgentHandshakeConfig, } from "./kernel/agent-client.js";
6
- export type { AgentEvent, SessionState, SessionReconnectReason, DrainedPendingAction, } from "@apnex/message-router";
6
+ export { NotificationCoalescer } from "@apnex/message-router";
7
+ export type { AgentEvent, SessionState, SessionReconnectReason, DrainedPendingAction, CoalescedNotification, } from "@apnex/message-router";
7
8
  export type { HubEventType, HubEvent, EventDisposition, DrainedActionReconstruction, } from "./kernel/event-router.js";
8
9
  export { classifyEvent, parseHubEvent, createDedupFilter, isPulseEvent, PULSE_KINDS, reconstructDrainedAction, } from "./kernel/event-router.js";
9
10
  export { FATAL_CODES, parseHandshakeError, parseHandshakeResponse, buildHandshakePayload, performHandshake, makeStdioFatalHalt, readRequiredAgentName, } from "./kernel/handshake.js";
@@ -36,7 +37,7 @@ export type { DispatcherClientInfo, DispatcherNotificationHooks, SharedDispatche
36
37
  export { CATALOG_SCHEMA_VERSION, cachePathFor, readCache, writeCache, isCacheValid, } from "./tool-manager/catalog/tool-catalog-cache.js";
37
38
  export type { ToolCatalog, CachedCatalog, } from "./tool-manager/catalog/tool-catalog-cache.js";
38
39
  export { ToolSurfaceReconciler } from "./tool-manager/catalog/tool-surface-reconciler.js";
39
- export type { ToolSurfaceReconcilerDeps, ReconcileOutcome, } from "./tool-manager/catalog/tool-surface-reconciler.js";
40
+ export type { ToolSurfaceReconcilerDeps, ReconcileOutcome, RepairOutcome, RepairFailureClass, ReconcilerCatalog, } from "./tool-manager/catalog/tool-surface-reconciler.js";
40
41
  export { makeFetchLiveToolSurfaceRevision } from "./tool-manager/catalog/health-revision.js";
41
42
  export type { FetchLiveToolSurfaceRevisionOptions } from "./tool-manager/catalog/health-revision.js";
42
43
  export { ClaimableDigestTracker } from "./tool-manager/work-protocol/claimable-digest-tracker.js";
package/dist/index.js CHANGED
@@ -2,6 +2,11 @@
2
2
  export { McpTransport } from "./wire/mcp-transport.js";
3
3
  // ── Layer 1b: Kernel (handshake / session FSM / agent client) ──────
4
4
  export { McpAgentClient } from "./kernel/mcp-agent-client.js";
5
+ // bug-160 — the Message-union payload contract (AgentEvent / SessionState /
6
+ // SessionReconnectReason / DrainedPendingAction) was relocated DOWN to
7
+ // @apnex/message-router to break the L2↔L4 source cycle; re-exported here so
8
+ // consumers importing them from @apnex/network-adapter are unaffected.
9
+ export { NotificationCoalescer } from "@apnex/message-router";
5
10
  export { classifyEvent, parseHubEvent, createDedupFilter, isPulseEvent, PULSE_KINDS, reconstructDrainedAction, } from "./kernel/event-router.js";
6
11
  // idea-251 D-prime Phase 2: instance.ts deleted. Identity now flows from
7
12
  // OIS_AGENT_NAME env → handshake.name → Hub-side fingerprint(name).
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAYtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,sEAAsE;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW9D,4EAA4E;AAC5E,uEAAuE;AACvE,6EAA6E;AAC7E,uEAAuE;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAgB9D,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,yEAAyE;AACzE,oEAAoE;AACpE,qEAAqE;AAErE,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAY/B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,WAAW,EACX,MAAM,EACN,eAAe,GAChB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAGnC,2EAA2E;AAC3E,wEAAwE;AACxE,8EAA8E;AAC9E,2EAA2E;AAC3E,sEAAsE;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AAGrC,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAuBtC,0EAA0E;AAC1E,sEAAsE;AACtE,4EAA4E;AAC5E,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAMtE,iFAAiF;AACjF,4EAA4E;AAC5E,OAAO,EACL,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,2CAA2C,CAAC;AAQnD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,GACb,MAAM,8CAA8C,CAAC;AAMtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAS1F,gFAAgF;AAChF,6EAA6E;AAC7E,oBAAoB;AACpB,OAAO,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAG7F,yDAAyD;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AAKlG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAGtF,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAInE,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAMzF,uEAAuE;AACvE,yDAAyD;AACzD,iEAAiE;AACjE,gEAAgE;AAChE,4DAA4D;AAE5D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
@@ -16,9 +16,13 @@ export async function performStateSync(ctx) {
16
16
  // ADR-017 additive: drain_pending_actions runs alongside the legacy
17
17
  // surface. Hubs that don't expose the tool yet (pre-ADR-017) return
18
18
  // an error here which we swallow — the other two calls still land.
19
+ // work-162 (A1): the legacy `get_task` directive-fetch is retired with the
20
+ // Task subsystem. `list_missions` ([Any]) replaces it as the sync-phase
21
+ // liveness read-probe — a benign read every role can issue, so the
22
+ // dispatcher records a read-success and the agent transitions to online.
19
23
  const [directive, pendingActions, drainedRaw] = await Promise.all([
20
- ctx.executeTool("get_task", {}).catch((err) => {
21
- log.log("agent.sync.get_task.failed", { error: String(err) }, `[StateSync] get_task: ${err}`);
24
+ ctx.executeTool("list_missions", {}).catch((err) => {
25
+ log.log("agent.sync.list_missions.failed", { error: String(err) }, `[StateSync] list_missions: ${err}`);
22
26
  return null;
23
27
  }),
24
28
  ctx.executeTool("get_pending_actions", {}).catch((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"state-sync.js","sourceRoot":"","sources":["../../src/kernel/state-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-sync.js","sourceRoot":"","sources":["../../src/kernel/state-sync.ts"],"names":[],"mappings":"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"}
@@ -189,6 +189,22 @@ function renderMessageArrived(data, cfg) {
189
189
  `OR a short status reply on the active coord-thread). ` +
190
190
  `Message ID: ${msgId}.`);
191
191
  }
192
+ // work-54 (PR #480 verifier finding): a Hub system notification — an
193
+ // external-injection carrying `notificationEvent` (work/deploy/workflow/PR
194
+ // vocabulary) — renders its Hub-composed body instead of falling through to
195
+ // the generic "Message arrived" prompt. Prefer the OUTER data.body (the
196
+ // canonical Hub-side peek-line render attached by augmentDataWithRenderFields,
197
+ // incl. [source-class] prefix + actionability marker); fall back to the inner
198
+ // payload.body for an envelope an older Hub pushed without the outer render.
199
+ if (kind === "external-injection" && typeof payload.notificationEvent === "string") {
200
+ const outerBody = data.body;
201
+ if (typeof outerBody === "string" && outerBody.length > 0) {
202
+ return `${outerBody} (Message ID: ${msgId}.)`;
203
+ }
204
+ if (typeof payload.body === "string" && payload.body.length > 0) {
205
+ return `[Hub] ${payload.body} (Message ID: ${msgId}.)`;
206
+ }
207
+ }
192
208
  if (payload.event && typeof payload.event === "string") {
193
209
  return (`[Hub] Hub event injected: ${payload.event}. ` +
194
210
  `${getActionText(payload.event, payload.data ?? {})}. ` +
@@ -220,9 +236,14 @@ function renderWorkClaimableDigest(data, cfg) {
220
236
  const newCount = typeof data.newCount === "number" ? data.newCount : count;
221
237
  const noun = count === 1 ? "item" : "items";
222
238
  const newClause = newCount > 0 && newCount < count ? ` (${newCount} new)` : "";
239
+ // bug-226: the level-triggered marker — an idle-ENTRY re-surface of standing
240
+ // work (claimable while you were busy), vs the edge (newly-appeared) wake.
241
+ const basis = data.trigger === "level"
242
+ ? "surfaced on idle-entry — this work was already claimable while you were busy"
243
+ : "surfaced because you are idle and newly-claimable work appeared";
223
244
  return (`[Hub] ${count} ${noun} now claimable for the ${role} role${newClause}. ` +
224
245
  `Call ${p}list_ready_work to view, then ${p}claim_work to pick one up. ` +
225
- `(Idle-wake digest: surfaced because you are idle and newly-claimable work appeared.)`);
246
+ `(Idle-wake digest: ${basis}.)`);
226
247
  }
227
248
  function renderWorkLeaseStall(data, cfg) {
228
249
  // idea-353 W2 — outbound stall-prompt: the gentle first rung below the
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-format.js","sourceRoot":"","sources":["../src/prompt-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-format.js","sourceRoot":"","sources":["../src/prompt-format.ts"],"names":[],"mappings":"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"}
@@ -81,23 +81,31 @@ export declare function readCache(workDir: string, log?: (msg: string) => void):
81
81
  /**
82
82
  * Persist the catalog atomically. Writes a sibling tmp file then
83
83
  * renames — so a crash mid-write leaves either the previous cache
84
- * intact OR the new cache fully landed. Best-effort: failures log
85
- * and return; the caller's primary flow continues.
84
+ * intact OR the new cache fully landed. Best-effort on the primary
85
+ * ListTools flow (never throws), but mission-106 (F5) needs the
86
+ * outcome: returns `true` iff the atomic rename landed, `false` on any
87
+ * failure (dir/write/rename). The reconciler's disk-repair path uses
88
+ * this to decide convergence — a failed write must NOT be counted as
89
+ * repaired (the stale disk stays visible for the next reconcile tick).
86
90
  */
87
- export declare function writeCache(workDir: string, catalog: ToolCatalog, toolSurfaceRevision: string, log?: (msg: string) => void): void;
91
+ export declare function writeCache(workDir: string, catalog: ToolCatalog, toolSurfaceRevision: string, log?: (msg: string) => void): boolean;
88
92
  /**
89
93
  * Check cache validity against the current Hub tool-surface revision.
90
94
  *
91
- * Two semantics:
95
+ * mission-106 (F4 — fail CLOSED on unknown revision): validity means a
96
+ * DEFINITIVE equal revision, nothing else.
92
97
  * - currentRevision is a non-empty string: strict equality vs
93
- * cached.toolSurfaceRevision. Mismatch → invalid → caller
94
- * re-bootstraps.
95
- * - currentRevision is null/undefined/empty: caller doesn't know the
96
- * current revision yet (e.g. /health fetch in flight at startup, or
97
- * an old Hub that doesn't return the field). Trust the cache
98
- * (probe-friendly default) worst case is serving a stale catalog
99
- * ONCE until the next /health fetch completes and a real session
100
- * refreshes the cache.
98
+ * cached.toolSurfaceRevision. Mismatch → NOT valid.
99
+ * - currentRevision is null/undefined/empty: the caller does not yet know
100
+ * the live revision (the /health warm is fire-and-forget — shim.ts — and
101
+ * loses the race to the host's startup tools/list). Unknown freshness is
102
+ * NOT validity return false. Pre-mission-106 this returned `true`
103
+ * (probe-friendly "trust the cache"), which rubber-stamped a stale cache
104
+ * as valid and served it FOREVER (the frozen-catalog defect). The caller
105
+ * (dispatcher) still keeps the probe path fast, but treats a false result
106
+ * as a LABELED-STALE serve (serve warm cache + log STALE + schedule an
107
+ * out-of-band repair), never a silent "valid" serve — correctness comes
108
+ * from the reconciler's disk repair, not from trusting an unknown revision.
101
109
  *
102
110
  * Schema-version check is enforced inside readCache, so isCacheValid
103
111
  * never sees a wrong-schema cached object.
@@ -106,8 +106,12 @@ export function readCache(workDir, log) {
106
106
  /**
107
107
  * Persist the catalog atomically. Writes a sibling tmp file then
108
108
  * renames — so a crash mid-write leaves either the previous cache
109
- * intact OR the new cache fully landed. Best-effort: failures log
110
- * and return; the caller's primary flow continues.
109
+ * intact OR the new cache fully landed. Best-effort on the primary
110
+ * ListTools flow (never throws), but mission-106 (F5) needs the
111
+ * outcome: returns `true` iff the atomic rename landed, `false` on any
112
+ * failure (dir/write/rename). The reconciler's disk-repair path uses
113
+ * this to decide convergence — a failed write must NOT be counted as
114
+ * repaired (the stale disk stays visible for the next reconcile tick).
111
115
  */
112
116
  export function writeCache(workDir, catalog, toolSurfaceRevision, log) {
113
117
  const path = cachePathFor(workDir);
@@ -124,6 +128,7 @@ export function writeCache(workDir, catalog, toolSurfaceRevision, log) {
124
128
  mkdirSync(dir, { recursive: true });
125
129
  writeFileSync(tmpPath, JSON.stringify(body), { encoding: "utf8" });
126
130
  renameSync(tmpPath, path);
131
+ return true;
127
132
  }
128
133
  catch (err) {
129
134
  log?.(`[tool-catalog-cache] writeCache: failed at ${path}: ${err.message ?? err} — cache will not populate this run`);
@@ -134,21 +139,26 @@ export function writeCache(workDir, catalog, toolSurfaceRevision, log) {
134
139
  catch {
135
140
  /* ignore */
136
141
  }
142
+ return false;
137
143
  }
138
144
  }
139
145
  /**
140
146
  * Check cache validity against the current Hub tool-surface revision.
141
147
  *
142
- * Two semantics:
148
+ * mission-106 (F4 — fail CLOSED on unknown revision): validity means a
149
+ * DEFINITIVE equal revision, nothing else.
143
150
  * - currentRevision is a non-empty string: strict equality vs
144
- * cached.toolSurfaceRevision. Mismatch → invalid → caller
145
- * re-bootstraps.
146
- * - currentRevision is null/undefined/empty: caller doesn't know the
147
- * current revision yet (e.g. /health fetch in flight at startup, or
148
- * an old Hub that doesn't return the field). Trust the cache
149
- * (probe-friendly default) worst case is serving a stale catalog
150
- * ONCE until the next /health fetch completes and a real session
151
- * refreshes the cache.
151
+ * cached.toolSurfaceRevision. Mismatch → NOT valid.
152
+ * - currentRevision is null/undefined/empty: the caller does not yet know
153
+ * the live revision (the /health warm is fire-and-forget — shim.ts — and
154
+ * loses the race to the host's startup tools/list). Unknown freshness is
155
+ * NOT validity return false. Pre-mission-106 this returned `true`
156
+ * (probe-friendly "trust the cache"), which rubber-stamped a stale cache
157
+ * as valid and served it FOREVER (the frozen-catalog defect). The caller
158
+ * (dispatcher) still keeps the probe path fast, but treats a false result
159
+ * as a LABELED-STALE serve (serve warm cache + log STALE + schedule an
160
+ * out-of-band repair), never a silent "valid" serve — correctness comes
161
+ * from the reconciler's disk repair, not from trusting an unknown revision.
152
162
  *
153
163
  * Schema-version check is enforced inside readCache, so isCacheValid
154
164
  * never sees a wrong-schema cached object.
@@ -157,7 +167,7 @@ export function isCacheValid(cached, currentRevision) {
157
167
  if (currentRevision === null ||
158
168
  currentRevision === undefined ||
159
169
  currentRevision === "") {
160
- return true;
170
+ return false;
161
171
  }
162
172
  return cached.toolSurfaceRevision === currentRevision;
163
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-catalog-cache.js","sourceRoot":"","sources":["../../../src/tool-manager/catalog/tool-catalog-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-catalog-cache.js","sourceRoot":"","sources":["../../../src/tool-manager/catalog/tool-catalog-cache.ts"],"names":[],"mappings":"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"}
@@ -1,93 +1,163 @@
1
1
  /**
2
2
  * tool-surface-reconciler.ts — declared-vs-applied reconcile for the Hub
3
- * MCP tool surface (bug-180 / FR-21).
3
+ * MCP tool surface (bug-180 / FR-21; mission-106 hardening).
4
4
  *
5
5
  * Problem this closes: the host (e.g. Claude Code) enumerates `tools/list`
6
6
  * ONCE at startup. On the pre-identity probe path the dispatcher serves the
7
7
  * persisted on-disk catalog (tool-catalog-cache). When a Hub redeploy changes
8
- * the tool surface, the in-memory catalog the host holds goes stale and
9
- * nothing re-enumerates it neither a client hard-reset nor /reload-plugins,
10
- * because the long-lived proxy process never re-fetches and the redeploy emits
11
- * no in-life `notifications/tools/list_changed` to already-connected hosts.
8
+ * the tool surface, the on-disk catalog goes stale and pre-mission-106
9
+ * NOTHING rewrote it: the reconciler only EMITTED `tools/list_changed` and bet
10
+ * on the host re-enumerating. A host that ignores the notification (observed:
11
+ * 33 emits, disk frozen for days) never refreshes, and a RESTART cannot help
12
+ * because the fresh process reads the same frozen disk on its own pre-identity
13
+ * probe. Disk-self-heal is therefore MANDATORY.
12
14
  *
13
- * The fix treats tool-surface delivery as a reconcile, mirroring the storage
14
- * substrate's SchemaDef-reconciler:
15
- * - desired-state = the Hub's tool surface, versioned by `toolSurfaceRevision`
16
- * (a deterministic hash of the registered tool set, served
17
- * on /health; Hub-side since bug-114).
18
- * - applied-state = the revision the host most recently enumerated.
19
- * - watch/notify = MCP `notifications/tools/list_changed` (the Hub already
20
- * advertises `tools.listChanged: true`).
15
+ * The mission-106 invariant (level-triggered, NOT edge-triggered idea-451):
16
+ * > A running harness's reachable tool surface CONVERGES to the hub's
17
+ * > advertised surface within bounded latency of any change, and a
18
+ * > revision-mismatched cache is NEVER served without a repair action.
21
19
  *
22
- * On drift between applied and desired, emit `list_changed`; the host re-calls
23
- * `tools/list` and identity now resolved the dispatcher serves the live
24
- * surface (it skips the probe-cache path once identityReady is true).
20
+ * Correctness rests on comparing the LEVEL (the disk-served revision vs the
21
+ * live revision) and REPAIRING the disk, never on catching an EDGE (a
22
+ * `list_changed` broadcast the host may miss). Contract clauses:
23
+ * 1. Repair authority belongs to drift-detection — on drift the reconciler
24
+ * re-fetches the catalog and atomically REWRITES the on-disk cache.
25
+ * 2. Validation fails CLOSED on an unknown revision (see isCacheValid).
26
+ * 3. `list_changed` is BEST-EFFORT acceleration of the live host surface, NOT
27
+ * the correctness mechanism (host re-enumeration is unverified — F2).
28
+ * 4. No silent stale serve (the dispatcher logs it; see serve path).
25
29
  *
26
- * This class owns ONLY the reconcile decision + the applied-revision marker.
27
- * All I/O is injected so it is unit-testable without a live Hub:
28
- * - fetchLiveRevision: resolve the Hub's current /health `toolSurfaceRevision`
29
- * (null on fetch failure / a Hub that doesn't return the field).
30
- * - readServedRevision: the revision the host's startup enumeration was
31
- * served from the on-disk cache's `toolSurfaceRevision` (null when no
32
- * cache exists, i.e. a fresh install that bootstrapped live).
33
- * - emitListChanged: emit `notifications/tools/list_changed` to the host.
30
+ * F1 (deepest): the LEVEL is the DISK-served revision — `readServedRevision()`
31
+ * read fresh EVERY pass never an optimistic in-memory `appliedRevision`
32
+ * latch. An in-memory advance after emit could mask a stale disk forever (next
33
+ * tick believes applied==live while the disk is still old). Convergence is
34
+ * marked ONLY after the atomic repair write succeeds; a failed/racing repair
35
+ * keeps the mismatch visible for the next tick.
34
36
  *
35
- * Two trigger points share one `reconcile()`:
36
- * - L1 (primary): on the shim's `identityReady` event — catches the
37
- * redeploy-then-reconnect case that caused bug-180.
38
- * - L2 (backstop): on the existing PollBackstop heartbeat cadence catches
39
- * a redeploy WHILE a session stays connected (no reconnect, so no fresh
40
- * identityReady).
37
+ * All I/O is injected so the class is unit-testable without a live Hub. The
38
+ * repair deps (fetchLiveCatalog / writeServedCatalog / onRepairOutcome) are
39
+ * OPTIONAL: a host that wires them gets full disk-repair authority; a host that
40
+ * does not falls back to emit-only (the pre-mission-106 degraded behavior,
41
+ * throttled so it does not spam).
41
42
  *
42
- * The applied-revision baseline is established on the first successful
43
- * reconcile (whichever trigger fires first), seeded from the on-disk cache so
44
- * a stale-cache-vs-live delta is detected even if L2 races ahead of L1.
43
+ * Two trigger points share one `reconcile()`:
44
+ * - L1 (primary): the shim's `identityReady` event.
45
+ * - L2 (backstop): the PollBackstop heartbeat cadence (~30s) the
46
+ * level-triggered floor that catches a redeploy while a session stays up.
47
+ * - L3 (serve-kick): the dispatcher's stale-serve path fire-and-forgets a
48
+ * `reconcile()` when it serves a labeled-stale cache (D3).
45
49
  */
50
+ /** MCP tool catalog entry shape — opaque, mirrors tool-catalog-cache.ToolCatalog. */
51
+ export type ReconcilerCatalog = unknown[];
52
+ /** Failure taxonomy for a repair attempt (F5 — each class logged + metriced). */
53
+ export type RepairFailureClass = "fetch-failed" | "zero-tool" | "revision-moved" | "write-failed" | "write-threw";
54
+ export interface RepairOutcome {
55
+ /** True iff the on-disk cache was atomically rewritten to the live revision. */
56
+ ok: boolean;
57
+ /** Present on failure — which class (F5). */
58
+ klass?: RepairFailureClass;
59
+ /** Optional human detail for logs. */
60
+ detail?: string;
61
+ /** Consecutive repair failures INCLUDING this attempt (0 on success). */
62
+ consecutiveFailures: number;
63
+ }
46
64
  export interface ToolSurfaceReconcilerDeps {
47
65
  /**
48
66
  * Resolve the Hub's live tool-surface revision (the /health
49
67
  * `toolSurfaceRevision` ETag). Returns null when the fetch fails or the Hub
50
68
  * doesn't return the field — the reconcile then no-ops (fail-safe: never
51
- * emit a spurious `list_changed` on an unknown live state).
69
+ * repair or emit against an unknown live state).
52
70
  */
53
71
  fetchLiveRevision: () => Promise<string | null>;
54
72
  /**
55
- * The revision the host's current tool view was enumerated from the
56
- * on-disk cache's `toolSurfaceRevision`. Used to seed the applied-state
57
- * baseline on the first reconcile (the pre-identity probe served this).
58
- * null when no cache exists (fresh install bootstrapped live → no drift).
73
+ * The revision the on-disk cache currently serves read FRESH every pass
74
+ * (this IS the level; F1). null when no cache file exists.
59
75
  */
60
76
  readServedRevision: () => string | null;
61
- /** Emit `notifications/tools/list_changed` to the host. */
77
+ /** Emit `notifications/tools/list_changed` to the host (BEST-EFFORT; clause 3). */
62
78
  emitListChanged: () => void;
79
+ /**
80
+ * mission-106 repair deps (OPTIONAL). Present ⇒ this host has disk-repair
81
+ * authority (clause 1). Absent ⇒ emit-only fallback (degraded; no disk repair).
82
+ */
83
+ /** Re-fetch the live tool catalog for a repair write. */
84
+ fetchLiveCatalog?: () => Promise<ReconcilerCatalog>;
85
+ /** Atomically persist the catalog@revision to disk; returns write success (F5/D1). */
86
+ writeServedCatalog?: (catalog: ReconcilerCatalog, revision: string) => boolean;
87
+ /** Observe every repair attempt (metrics/escalation; F5). */
88
+ onRepairOutcome?: (outcome: RepairOutcome) => void;
89
+ /** Consecutive repair failures before an escalation log fires (F5). Default 3. */
90
+ repairFailureBound?: number;
63
91
  /** Diagnostic logger. No-op default. */
64
92
  log?: (msg: string) => void;
65
93
  }
66
94
  export interface ReconcileOutcome {
67
- /** True iff a drift was detected and `list_changed` was emitted this pass. */
95
+ /** True iff `list_changed` was emitted this pass. */
68
96
  emitted: boolean;
69
97
  /** The live revision resolved this pass (null on fetch failure). */
70
98
  live: string | null;
99
+ /** True iff the on-disk cache was repaired (rewritten to live) this pass. */
100
+ repaired: boolean;
101
+ /** True iff the disk already serves (or was repaired to) the live revision. */
102
+ converged: boolean;
71
103
  }
72
104
  export declare class ToolSurfaceReconciler {
73
105
  private readonly deps;
74
106
  /**
75
- * The revision the host is believed to currently have applied. null until
76
- * the first successful reconcile establishes the baseline.
107
+ * The emit baseline/marker: the revision we last emitted `list_changed` for
108
+ * (repair path) OR the seeded baseline (emit-only path). mission-106 (F1): in
109
+ * the REPAIR path this is ONLY emit-dedup and is NEVER the convergence
110
+ * decision — convergence there is `readServedRevision() === live` (a real disk
111
+ * read, every pass). In the emit-only fallback (a host with no on-disk cache /
112
+ * no repair authority — e.g. pi/opencode) it is the pre-mission-106
113
+ * baseline+latch, which is safe there precisely because there is no disk for it
114
+ * to mask.
77
115
  */
78
116
  private appliedRevision;
117
+ private consecutiveRepairFailures;
79
118
  private readonly log;
119
+ private readonly repairFailureBound;
80
120
  constructor(deps: ToolSurfaceReconcilerDeps);
81
- /** Test/diagnostic accessor for the current applied-state marker. */
121
+ /** Test/diagnostic accessor consecutive repair failures (F5 observability). */
122
+ getConsecutiveRepairFailures(): number;
123
+ /**
124
+ * Diagnostic accessor — the revision we last EMITTED `list_changed` for (the
125
+ * emit-throttle marker). mission-106 (F1): this is NOT the convergence level
126
+ * and MUST NOT be read as "the disk is fresh" — convergence is decided solely
127
+ * by `readServedRevision() === live` on each pass. Retained for observability
128
+ * + existing emit-cadence assertions.
129
+ */
82
130
  getAppliedRevision(): string | null;
83
131
  /**
84
- * One reconcile pass. Idempotent and safe to call from either trigger:
85
- * 1. Resolve the live revision; no-op on unknown (fetch failed).
86
- * 2. On first pass, seed the applied baseline from the on-disk cache
87
- * (what the host's startup probe served) — or from live if no cache.
88
- * 3. On applied-vs-live drift, emit `list_changed` + advance the baseline.
89
- *
90
- * @param reason short label for logs (e.g. "identityReady", "heartbeat").
132
+ * One reconcile pass. Idempotent and safe from any trigger:
133
+ * 1. Resolve live; no-op on unknown (fetch failed — fail-safe).
134
+ * 2. Read the DISK-served revision (the level; F1). If served === live →
135
+ * converged, no-op.
136
+ * 3. On drift: REPAIR the disk (refetch + coherent + atomic rewrite) when
137
+ * repair deps are wired; else emit-only fallback. Converge ONLY on a
138
+ * successful atomic write; a failed repair stays visible (retry next tick)
139
+ * and escalates after `repairFailureBound` consecutive failures.
91
140
  */
92
141
  reconcile(reason?: string): Promise<ReconcileOutcome>;
142
+ /**
143
+ * Refetch + coherent + atomic rewrite (D1 tmp+rename via writeServedCatalog).
144
+ * F3: bind catalog + revision COHERENTLY — re-confirm the live revision AFTER
145
+ * fetching the catalog; if it moved mid-fetch, skip (retry next tick with the
146
+ * new live) rather than persist catalog@oldRevision. Never persist a zero-tool
147
+ * catalog (would poison the disk).
148
+ */
149
+ private repair;
150
+ /**
151
+ * Operator escape-hatch (S2b / idea-456) — UNCONDITIONALLY emit
152
+ * `notifications/tools/list_changed`, bypassing the drift check, to hand an
153
+ * already-stale live host a fresh re-enumeration trigger on demand. With
154
+ * mission-106 disk-repair this is rarely needed (a reconcile pass repairs the
155
+ * disk), but retained as the manual host-kick + a deterministic test trigger.
156
+ */
157
+ forceEmit(reason?: string): Promise<ReconcileOutcome>;
158
+ /** Emit once per live revision (repair-path emit-dedup ONLY — never a
159
+ * convergence marker; convergence is the disk read). */
160
+ private maybeEmit;
161
+ /** Emit to the host, never letting a host-emit failure escape the loop. */
162
+ private safeEmit;
93
163
  }