@tokenfactory/acc-runner 0.44.1 → 0.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +20 -1
  2. package/dist/bin-resolve.d.ts +39 -3
  3. package/dist/bin-resolve.d.ts.map +1 -1
  4. package/dist/bin-resolve.js +176 -12
  5. package/dist/bin-resolve.js.map +1 -1
  6. package/dist/build-fingerprint.d.ts +66 -0
  7. package/dist/build-fingerprint.d.ts.map +1 -0
  8. package/dist/build-fingerprint.js +70 -0
  9. package/dist/build-fingerprint.js.map +1 -0
  10. package/dist/build-info.generated.d.ts +3 -0
  11. package/dist/build-info.generated.d.ts.map +1 -0
  12. package/dist/build-info.generated.js +3 -0
  13. package/dist/build-info.generated.js.map +1 -0
  14. package/dist/capacity/resume-controller.d.ts +5 -3
  15. package/dist/capacity/resume-controller.d.ts.map +1 -1
  16. package/dist/capacity/resume-controller.js +9 -0
  17. package/dist/capacity/resume-controller.js.map +1 -1
  18. package/dist/chat-delegation-guard.d.ts +23 -0
  19. package/dist/chat-delegation-guard.d.ts.map +1 -0
  20. package/dist/chat-delegation-guard.js +62 -0
  21. package/dist/chat-delegation-guard.js.map +1 -0
  22. package/dist/chat-lane.d.ts +17 -6
  23. package/dist/chat-lane.d.ts.map +1 -1
  24. package/dist/chat-lane.js +29 -8
  25. package/dist/chat-lane.js.map +1 -1
  26. package/dist/companion-identity.d.ts +37 -0
  27. package/dist/companion-identity.d.ts.map +1 -1
  28. package/dist/companion-identity.js +98 -29
  29. package/dist/companion-identity.js.map +1 -1
  30. package/dist/companion-run.d.ts +1 -50
  31. package/dist/companion-run.d.ts.map +1 -1
  32. package/dist/companion-run.js +48 -105
  33. package/dist/companion-run.js.map +1 -1
  34. package/dist/config.d.ts +1 -0
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +14 -3
  37. package/dist/config.js.map +1 -1
  38. package/dist/conformance.d.ts +49 -0
  39. package/dist/conformance.d.ts.map +1 -0
  40. package/dist/conformance.js +121 -0
  41. package/dist/conformance.js.map +1 -0
  42. package/dist/cost-pricing.d.ts +46 -0
  43. package/dist/cost-pricing.d.ts.map +1 -1
  44. package/dist/cost-pricing.js +58 -1
  45. package/dist/cost-pricing.js.map +1 -1
  46. package/dist/credential-identity.d.ts +70 -0
  47. package/dist/credential-identity.d.ts.map +1 -0
  48. package/dist/credential-identity.js +128 -0
  49. package/dist/credential-identity.js.map +1 -0
  50. package/dist/doctor.d.ts +33 -1
  51. package/dist/doctor.d.ts.map +1 -1
  52. package/dist/doctor.js +284 -44
  53. package/dist/doctor.js.map +1 -1
  54. package/dist/engines/chat-stream.d.ts +71 -1
  55. package/dist/engines/chat-stream.d.ts.map +1 -1
  56. package/dist/engines/chat-stream.js +126 -8
  57. package/dist/engines/chat-stream.js.map +1 -1
  58. package/dist/engines/claude-code-chat.d.ts +11 -1
  59. package/dist/engines/claude-code-chat.d.ts.map +1 -1
  60. package/dist/engines/claude-code-chat.js +69 -5
  61. package/dist/engines/claude-code-chat.js.map +1 -1
  62. package/dist/engines/claude-code.d.ts.map +1 -1
  63. package/dist/engines/claude-code.js +30 -6
  64. package/dist/engines/claude-code.js.map +1 -1
  65. package/dist/engines/codex.d.ts.map +1 -1
  66. package/dist/engines/codex.js +18 -5
  67. package/dist/engines/codex.js.map +1 -1
  68. package/dist/engines/registry.d.ts +26 -0
  69. package/dist/engines/registry.d.ts.map +1 -1
  70. package/dist/engines/registry.js +37 -0
  71. package/dist/engines/registry.js.map +1 -1
  72. package/dist/engines/types.d.ts +5 -0
  73. package/dist/engines/types.d.ts.map +1 -1
  74. package/dist/failure-classifier.d.ts +1 -1
  75. package/dist/failure-classifier.d.ts.map +1 -1
  76. package/dist/failure-classifier.js +65 -12
  77. package/dist/failure-classifier.js.map +1 -1
  78. package/dist/gh.d.ts +15 -0
  79. package/dist/gh.d.ts.map +1 -1
  80. package/dist/gh.js +18 -0
  81. package/dist/gh.js.map +1 -1
  82. package/dist/git.d.ts +6 -0
  83. package/dist/git.d.ts.map +1 -1
  84. package/dist/git.js +27 -1
  85. package/dist/git.js.map +1 -1
  86. package/dist/keychain.d.ts +17 -0
  87. package/dist/keychain.d.ts.map +1 -1
  88. package/dist/keychain.js +30 -0
  89. package/dist/keychain.js.map +1 -1
  90. package/dist/loc-advisory.d.ts +70 -0
  91. package/dist/loc-advisory.d.ts.map +1 -0
  92. package/dist/loc-advisory.js +196 -0
  93. package/dist/loc-advisory.js.map +1 -0
  94. package/dist/locks/claim-lock-policy.d.ts +67 -0
  95. package/dist/locks/claim-lock-policy.d.ts.map +1 -0
  96. package/dist/locks/claim-lock-policy.js +132 -0
  97. package/dist/locks/claim-lock-policy.js.map +1 -0
  98. package/dist/login.d.ts +59 -2
  99. package/dist/login.d.ts.map +1 -1
  100. package/dist/login.js +87 -7
  101. package/dist/login.js.map +1 -1
  102. package/dist/mcp-spawn.d.ts +54 -0
  103. package/dist/mcp-spawn.d.ts.map +1 -1
  104. package/dist/mcp-spawn.js +88 -4
  105. package/dist/mcp-spawn.js.map +1 -1
  106. package/dist/migration-seq-guard.d.ts +28 -1
  107. package/dist/migration-seq-guard.d.ts.map +1 -1
  108. package/dist/migration-seq-guard.js +111 -6
  109. package/dist/migration-seq-guard.js.map +1 -1
  110. package/dist/output-diagnostics.d.ts +15 -0
  111. package/dist/output-diagnostics.d.ts.map +1 -0
  112. package/dist/output-diagnostics.js +95 -0
  113. package/dist/output-diagnostics.js.map +1 -0
  114. package/dist/pr-open-guard.d.ts +67 -0
  115. package/dist/pr-open-guard.d.ts.map +1 -0
  116. package/dist/pr-open-guard.js +79 -0
  117. package/dist/pr-open-guard.js.map +1 -0
  118. package/dist/prepr-gate.d.ts +229 -1
  119. package/dist/prepr-gate.d.ts.map +1 -1
  120. package/dist/prepr-gate.js +406 -3
  121. package/dist/prepr-gate.js.map +1 -1
  122. package/dist/program.d.ts.map +1 -1
  123. package/dist/program.js +30 -5
  124. package/dist/program.js.map +1 -1
  125. package/dist/provider-auth.d.ts +8 -0
  126. package/dist/provider-auth.d.ts.map +1 -1
  127. package/dist/provider-auth.js +10 -0
  128. package/dist/provider-auth.js.map +1 -1
  129. package/dist/runtime/quarantine.d.ts +11 -0
  130. package/dist/runtime/quarantine.d.ts.map +1 -1
  131. package/dist/runtime/quarantine.js +16 -1
  132. package/dist/runtime/quarantine.js.map +1 -1
  133. package/dist/runtime/reviewer.d.ts +90 -2
  134. package/dist/runtime/reviewer.d.ts.map +1 -1
  135. package/dist/runtime/reviewer.js +547 -46
  136. package/dist/runtime/reviewer.js.map +1 -1
  137. package/dist/runtime/running-build.d.ts +24 -0
  138. package/dist/runtime/running-build.d.ts.map +1 -0
  139. package/dist/runtime/running-build.js +62 -0
  140. package/dist/runtime/running-build.js.map +1 -0
  141. package/dist/runtime/worktree.d.ts +45 -0
  142. package/dist/runtime/worktree.d.ts.map +1 -1
  143. package/dist/runtime/worktree.js +174 -5
  144. package/dist/runtime/worktree.js.map +1 -1
  145. package/dist/task-runner.d.ts +126 -5
  146. package/dist/task-runner.d.ts.map +1 -1
  147. package/dist/task-runner.js +1219 -127
  148. package/dist/task-runner.js.map +1 -1
  149. package/dist/types.d.ts +8 -0
  150. package/dist/types.d.ts.map +1 -1
  151. package/dist/watch-chat/wire.d.ts +80 -0
  152. package/dist/watch-chat/wire.d.ts.map +1 -1
  153. package/dist/watch-chat/wire.js +203 -43
  154. package/dist/watch-chat/wire.js.map +1 -1
  155. package/dist/watch.d.ts +70 -16
  156. package/dist/watch.d.ts.map +1 -1
  157. package/dist/watch.js +501 -89
  158. package/dist/watch.js.map +1 -1
  159. package/package.json +2 -2
@@ -16,14 +16,18 @@
16
16
  * stays independently unit-testable with injected fakes.
17
17
  */
18
18
  import { createSupabaseChatTransport } from "../chat-transport.js";
19
+ import { hostname } from "node:os";
19
20
  import { CHAT_WALL_CLOCK_MS_ENV, resolveChatWallClockMs, } from "../chat-lane.js";
20
- import { getChatEngine } from "../engines/registry.js";
21
+ import { getConfiguredChatEngine } from "../engines/registry.js";
22
+ import { ensureRunnerSubscriptionIdentity } from "../companion-identity.js";
21
23
  import { ChatCircuitBreaker } from "../runtime/chat-circuit-breaker.js";
22
24
  import { OwnerConversationSource, backfillActiveConversations, createConversationListener, } from "../companion.js";
23
- import { writeMcpConfig } from "../mcp-spawn.js";
25
+ import { createMcpConfigSession, probeMcpServer, } from "../mcp-spawn.js";
26
+ import { guardChatDelegation, guardChatTransportReadiness } from "../chat-delegation-guard.js";
24
27
  import { FleetChatLane } from "./fleet-chat-lane.js";
25
28
  import { supabaseFleetProbe } from "./grace-gated-transport.js";
26
29
  import { resolveFleetChatGraceMs, FLEET_CHAT_GRACE_MS_ENV } from "./grace-gate.js";
30
+ import { ChatTurnPoller, chatPollEnabled, pollQueuedConversations, resolveChatPollIntervalMs, CHAT_POLL_INTERVAL_MS_ENV, } from "../chat-poll/index.js";
27
31
  /** Opt OUT of fleet-fallback chat serving on a `watch` runner (default: on). */
28
32
  export const FLEET_CHAT_ENABLED_ENV = "ACC_RUNNER_FLEET_CHAT";
29
33
  /** Fleet chat's max share of the runner's concurrency ceiling (0..1). */
@@ -48,6 +52,96 @@ export function resolveFleetChatMaxShare(raw) {
48
52
  return DEFAULT_FLEET_CHAT_MAX_SHARE;
49
53
  return Math.min(1, n);
50
54
  }
55
+ /** MCP readiness and narrow delegation are both prerequisites to claiming. */
56
+ export function guardFleetChatDependencies(deps) {
57
+ const mcpGatedTransport = guardChatTransportReadiness(deps.transport, deps.mcpReady);
58
+ return guardChatDelegation({
59
+ transport: mcpGatedTransport,
60
+ mint: deps.mintDelegation,
61
+ ...(deps.onLog ? { onLog: deps.onLog } : {}),
62
+ });
63
+ }
64
+ /**
65
+ * CHAT-LANE-DEAD-1 AC3 — confirm this runner can actually CLAIM chat turns before
66
+ * it advertises serving as healthy.
67
+ *
68
+ * `acc.claim_chat_turn` (migration 0290) fail-closes with 42501 for any
69
+ * non-service claimant whose `acc.runners.bound_user_id` is not the caller's own
70
+ * `auth.uid()` (= this session's user). A runner in that state still heartbeats,
71
+ * logs "fleet chat serving enabled", and then silently claims NOTHING on every
72
+ * pump — the exact "healthy but dead" shape this card is about (44 conversations,
73
+ * 125 messages, ~zero turns). Reading the binding once at startup turns that silent
74
+ * structural failure into a loud one.
75
+ *
76
+ * Best-effort + FAIL-OPEN on an inconclusive read: an RLS quirk or a transient blip
77
+ * (query error, runner row not yet visible) must NOT fabricate a "degraded" alarm,
78
+ * so only a CONFIRMED mismatch (a visible row whose bound_user_id is null or a
79
+ * different user) reports `ready:false`.
80
+ */
81
+ export async function probeChatServeReadiness(
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ client, session) {
84
+ try {
85
+ const res = await client
86
+ .from("runners")
87
+ .select("bound_user_id")
88
+ .eq("id", session.runner_id)
89
+ .limit(1);
90
+ if (res?.error)
91
+ return { ready: true, reason: `probe inconclusive: ${res.error.message}` };
92
+ const rows = Array.isArray(res?.data) ? res.data : [];
93
+ const row = rows[0];
94
+ if (!row)
95
+ return { ready: true, reason: "probe inconclusive: runner row not visible" };
96
+ const bound = typeof row.bound_user_id === "string" ? row.bound_user_id : null;
97
+ if (bound === session.user_id)
98
+ return { ready: true };
99
+ return {
100
+ ready: false,
101
+ reason: bound === null
102
+ ? "runner has no bound_user_id — acc.claim_chat_turn refuses every claim (42501)"
103
+ : "runner bound_user_id does not match this session — acc.claim_chat_turn refuses every claim (42501)",
104
+ };
105
+ }
106
+ catch (err) {
107
+ return { ready: true, reason: `probe inconclusive: ${err.message}` };
108
+ }
109
+ }
110
+ /**
111
+ * CHAT-LANE-DEAD-1 AC2 — build the DB-poll discovery loop that closes the fleet
112
+ * lane's Realtime-blackout gap.
113
+ *
114
+ * The fleet path previously discovered conversations from ONE-SHOT startup backfill
115
+ * + best-effort `conversation_active` Realtime announces (no ack/retry). A turn
116
+ * enqueued after startup whose announce was dropped was never added to the served
117
+ * set, so `pumpOnce` saw an empty set and claimed nothing — the runner logged
118
+ * "serving enabled" yet never received a turn. The `ChatTurnPoller` primitive
119
+ * (chat-poll/index.ts) was built and chaos-proven for exactly this but its own
120
+ * header noted "wiring it into watch is a follow-up". This is that wiring: each
121
+ * pass reads the bound user's queued-turn conversations straight from Postgres,
122
+ * folds them into the owner-affinity source, and nudges the pump — so a queued turn
123
+ * is served within one interval even with Realtime entirely dead.
124
+ */
125
+ export function createFleetChatDiscoveryPoller(deps) {
126
+ return new ChatTurnPoller({
127
+ ...(deps.intervalMs !== undefined ? { intervalMs: deps.intervalMs } : {}),
128
+ poll: deps.poll,
129
+ onDue: async (ids) => {
130
+ let added = 0;
131
+ for (const id of ids)
132
+ if (deps.conversations.add(id, deps.boundUserId))
133
+ added += 1;
134
+ // Nudge the pump whether or not the id was new: a conversation already in the
135
+ // set may hold a queued turn a prior pump skipped (budget/grace) — re-pump so
136
+ // it drains now rather than on the next 1s tick.
137
+ await Promise.resolve(deps.pump()).catch(() => { });
138
+ if (added > 0) {
139
+ deps.onLog?.(`[acc-runner] fleet chat poll-fallback discovered ${added} queued conversation(s) (Realtime-independent)`);
140
+ }
141
+ },
142
+ ...(deps.onLog ? { onLog: deps.onLog } : {}),
143
+ });
144
+ }
51
145
  /**
52
146
  * Start fleet-fallback chat serving on a `watch` runner. Builds the chat
53
147
  * transport, owner-affinity source, Supabase probe, and per-turn delegation, then
@@ -66,7 +160,26 @@ export async function startFleetChatServing(deps) {
66
160
  const log = deps.onLog ?? (() => { });
67
161
  let supabase = deps.supabase;
68
162
  let accessToken = session.access_token;
69
- const engine = getChatEngine();
163
+ const engine = deps.engine ?? getConfiguredChatEngine();
164
+ // SUBSCRIPTION-FLEET-REGISTRATION: `watch` is a valid chat server only after
165
+ // the selected local subscription has an owner-bound identity and this runner
166
+ // has persisted its probe/binding. Previously only `companion` did this. The
167
+ // browser therefore saw no eligible identity and returned `no_llm_key` even
168
+ // while this always-on VPS was healthy and logged into the provider CLI.
169
+ const registration = await ensureRunnerSubscriptionIdentity({
170
+ publicUrl: cfg.publicUrl,
171
+ accessToken,
172
+ runnerId: session.runner_id,
173
+ machine: hostname(),
174
+ engine,
175
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
176
+ });
177
+ if (!registration.ready) {
178
+ log(`[acc-runner] fleet chat not registered (${registration.reason}${registration.detail ? `: ${registration.detail}` : ""}); task/review serving continues`);
179
+ return null;
180
+ }
181
+ log(`[acc-runner] fleet chat subscription ready — ${engine.id}, identity ${registration.identityId}, ` +
182
+ `tier ${registration.tier}, capacity ${registration.capacity}`);
70
183
  const breaker = new ChatCircuitBreaker();
71
184
  await breaker.load().catch(() => {
72
185
  /* a missing sentinel just means the breaker starts closed */
@@ -86,23 +199,35 @@ export async function startFleetChatServing(deps) {
86
199
  const conversationListener = createConversationListener(supabase, session.user_id, conversations, { onLog: log });
87
200
  // CHAT-MCP-PROVISION: the chat engine needs a .mcp.json (acc-mcp tool bus) or it
88
201
  // hard-errors and streams no text. Provision it at the stable repoPath (the chat
89
- // cwd) before any turn can be driven; re-bake on token refresh so the fallback
90
- // JWT never goes stale. Best-effort: a turn errors visibly rather than blocking.
91
- let mcpCleanup = null;
202
+ // cwd), then exercise its initialize + tools/list handshake before any turn is
203
+ // claimable. Token refresh rewrites against the one pre-runner snapshot so stop
204
+ // never restores a generated config containing an older access token.
205
+ let mcpSession = null;
206
+ let mcpReady = false;
207
+ const currentMcpOptions = () => ({
208
+ cwd: cfg.repoPath,
209
+ taskId: "",
210
+ runnerId: session.runner_id,
211
+ accessToken,
212
+ publicUrl: cfg.publicUrl,
213
+ supabaseUrl: cfg.supabaseUrl,
214
+ supabaseAnonKey: cfg.supabaseAnonKey,
215
+ });
92
216
  const provisionChatMcp = async () => {
93
217
  try {
94
- mcpCleanup = await writeMcpConfig({
95
- cwd: cfg.repoPath,
96
- taskId: "", // no task in the chat lane — acc-mcp-server treats it as null
97
- runnerId: session.runner_id,
98
- accessToken,
99
- publicUrl: cfg.publicUrl,
100
- supabaseUrl: cfg.supabaseUrl,
101
- supabaseAnonKey: cfg.supabaseAnonKey,
102
- });
218
+ mcpSession ??= await createMcpConfigSession(cfg.repoPath);
219
+ const opts = currentMcpOptions();
220
+ await mcpSession.write(opts);
221
+ const probe = await probeMcpServer(opts);
222
+ mcpReady = probe.ok;
223
+ if (!probe.ok)
224
+ throw new Error(probe.detail);
225
+ log(`[acc-runner] fleet chat acc-mcp ready — ${probe.detail} (${probe.command})`);
103
226
  }
104
227
  catch (err) {
105
- log(`[acc-runner] fleet chat acc-mcp provisioning failed: ${err.message}`);
228
+ mcpReady = false;
229
+ log(`[acc-runner] ERROR fleet chat acc-mcp unavailable: ${err.message}. ` +
230
+ "Chat claims are paused until MCP health recovers.");
106
231
  }
107
232
  };
108
233
  // CHAT-DELEGATION (FU-5 twin): mint a NARROW per-turn delegation token bound to
@@ -110,36 +235,37 @@ export async function startFleetChatServing(deps) {
110
235
  // session's user; the server clamps the scope to the operator's ceiling. The
111
236
  // `companion` role matches the shared serving path — the fleet lane's delegation
112
237
  // scope + provenance are deliberately identical to the companion's. Reads
113
- // `accessToken` at CALL time so a rotation is honoured. Best-effort undefined
114
- // falls back to the baked runner-token .mcp.json.
238
+ // `accessToken` at CALL time so a rotation is honoured. Any failure throws;
239
+ // the claim guard requeues and never widens to the runner token.
115
240
  const delegationBase = cfg.publicUrl.replace(/\/+$/, "");
116
241
  const mintDelegation = async (turn) => {
117
- try {
118
- const res = await fetch(`${delegationBase}/api/chat/delegation`, {
119
- method: "POST",
120
- headers: {
121
- "Content-Type": "application/json",
122
- Authorization: `Bearer ${accessToken}`,
123
- },
124
- body: JSON.stringify({ conversation_id: turn.conversation_id, role: "companion" }),
125
- });
126
- if (!res.ok) {
127
- log(`[acc-runner] fleet chat delegation mint failed: HTTP ${res.status}`);
128
- return undefined;
129
- }
130
- const json = (await res.json());
131
- return typeof json.token === "string" && json.token ? json.token : undefined;
132
- }
133
- catch (err) {
134
- log(`[acc-runner] fleet chat delegation mint error: ${err.message}`);
135
- return undefined;
242
+ const res = await fetch(`${delegationBase}/api/chat/delegation`, {
243
+ method: "POST",
244
+ headers: {
245
+ "Content-Type": "application/json",
246
+ Authorization: `Bearer ${accessToken}`,
247
+ },
248
+ body: JSON.stringify({ conversation_id: turn.conversation_id, role: "companion" }),
249
+ });
250
+ if (!res.ok)
251
+ throw new Error(`HTTP ${res.status}`);
252
+ const json = (await res.json().catch(() => ({})));
253
+ if (typeof json.token !== "string" || !json.token) {
254
+ throw new Error("delegation response carried no token");
136
255
  }
256
+ return json.token;
137
257
  };
258
+ const guarded = guardFleetChatDependencies({
259
+ transport,
260
+ mintDelegation,
261
+ mcpReady: () => mcpReady,
262
+ onLog: log,
263
+ });
138
264
  const lane = new FleetChatLane({
139
265
  runnerId: session.runner_id,
140
266
  boundUserId: session.user_id,
141
267
  engine,
142
- transport,
268
+ transport: guarded.transport,
143
269
  breaker,
144
270
  conversations,
145
271
  concurrencyLimit: deps.concurrencyLimit,
@@ -153,7 +279,7 @@ export async function startFleetChatServing(deps) {
153
279
  graceMs: resolveFleetChatGraceMs(process.env[FLEET_CHAT_GRACE_MS_ENV]),
154
280
  wallClockMs: resolveChatWallClockMs(process.env[CHAT_WALL_CLOCK_MS_ENV]),
155
281
  cwd: cfg.repoPath,
156
- mintDelegation,
282
+ mintDelegation: guarded.mintDelegation,
157
283
  onLog: log,
158
284
  });
159
285
  await provisionChatMcp();
@@ -165,18 +291,47 @@ export async function startFleetChatServing(deps) {
165
291
  label: "fleet startup backfill",
166
292
  onLog: log,
167
293
  });
294
+ // CHAT-LANE-DEAD-1 AC2: the Realtime-independent DB-poll discovery loop. Reads
295
+ // `supabase` at CALL time so it follows a token rotation (same as the probe).
296
+ const pollIntervalMs = resolveChatPollIntervalMs(process.env[CHAT_POLL_INTERVAL_MS_ENV]);
297
+ const discoveryPoller = createFleetChatDiscoveryPoller({
298
+ boundUserId: session.user_id,
299
+ conversations,
300
+ pump: () => lane.pumpOnce(),
301
+ poll: () => pollQueuedConversations(supabase, session.user_id, { onLog: log }),
302
+ intervalMs: pollIntervalMs,
303
+ onLog: log,
304
+ });
168
305
  // Start the chat pump ALONGSIDE the task pump (its own cadence).
169
306
  lane.start(FLEET_CHAT_PUMP_MS);
170
- log(`[acc-runner] fleet chat serving enabled for user ${session.user_id} ` +
171
- `(grace ${resolveFleetChatGraceMs(process.env[FLEET_CHAT_GRACE_MS_ENV])}ms; ` +
172
- `discovered live over identity:${session.user_id})`);
307
+ const pollEnabled = chatPollEnabled();
308
+ if (pollEnabled)
309
+ discoveryPoller.start();
310
+ // CHAT-LANE-DEAD-1 AC3: prove this runner can actually CLAIM before advertising
311
+ // healthy. On a confirmed can't-claim binding, log a LOUD degraded error and mark
312
+ // the handle unhealthy instead of the reassuring "serving enabled" line.
313
+ const readiness = await probeChatServeReadiness(supabase, session);
314
+ const servingHealthy = readiness.ready && mcpReady;
315
+ if (servingHealthy) {
316
+ log(`[acc-runner] fleet chat serving enabled for user ${session.user_id} ` +
317
+ `(grace ${resolveFleetChatGraceMs(process.env[FLEET_CHAT_GRACE_MS_ENV])}ms; ` +
318
+ `poll ${pollEnabled ? `${pollIntervalMs}ms` : "off"}; ` +
319
+ `discovered live over identity:${session.user_id})`);
320
+ }
321
+ else {
322
+ log(`[acc-runner] ERROR fleet chat serving DEGRADED for user ${session.user_id}: ` +
323
+ `${readiness.reason ?? "ACC MCP server is unavailable"}. ` +
324
+ `The runner is ONLINE but CANNOT receive chat turns — ` +
325
+ `treat as NOT serving chat until the binding is fixed.`);
326
+ }
173
327
  return {
174
328
  async stop() {
329
+ discoveryPoller.stop();
175
330
  await lane.stop().catch(() => {
176
331
  /* stop() already requeues in-flight turns; never block shutdown */
177
332
  });
178
333
  await conversationListener.close().catch(() => { });
179
- await mcpCleanup?.restore().catch(() => {
334
+ await mcpSession?.restore().catch(() => {
180
335
  /* best-effort; never block shutdown on config cleanup */
181
336
  });
182
337
  },
@@ -188,6 +343,8 @@ export async function startFleetChatServing(deps) {
188
343
  });
189
344
  // Re-bake the fresh JWT into .mcp.json so the acc-mcp bus keeps authorizing.
190
345
  await provisionChatMcp();
346
+ if (mcpReady)
347
+ void lane.pumpOnce();
191
348
  },
192
349
  activeChatTurns() {
193
350
  return lane.activeChatTurns();
@@ -195,6 +352,9 @@ export async function startFleetChatServing(deps) {
195
352
  servedConversations() {
196
353
  return conversations.size();
197
354
  },
355
+ servingHealthy() {
356
+ return readiness.ready && mcpReady;
357
+ },
198
358
  };
199
359
  }
200
360
  //# sourceMappingURL=wire.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/watch-chat/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/watch-chat/wire.ts"],"names":[],"mappings":"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"}
package/dist/watch.d.ts CHANGED
@@ -3,8 +3,9 @@ import { type ConcurrencySource, type RunnerConfig } from "./config.js";
3
3
  export { resolveConcurrencyLimit, resolveReservedReviewSlots } from "./config.js";
4
4
  import { type TokenProvider } from "./token-provider.js";
5
5
  import { type RunnerSupabaseClient } from "./supabase.js";
6
+ import type { ClaimLockLossState } from "./locks/claim-lock-policy.js";
6
7
  import { runTask, type RunTaskController } from "./task-runner.js";
7
- import { type ReviewAssignment, type ReviewerOutcome } from "./runtime/reviewer.js";
8
+ import { runReview, type ReviewAssignment, type ReviewerOutcome } from "./runtime/reviewer.js";
8
9
  import { type SingletonLock } from "./runtime/singleton.js";
9
10
  import { type SelfUpgradeResult, type SelfUpdate426Result } from "./runtime/self-upgrade.js";
10
11
  import { GitAuthController, type GitAuthProbe } from "./git-auth/index.js";
@@ -92,7 +93,7 @@ export interface WatchOptions {
92
93
  */
93
94
  claimBackstopIntervalMs?: number;
94
95
  /**
95
- * v0.41.4: cadence (ms) for the env_broken quarantine-recovery re-probe. When
96
+ * Cadence (ms) for sentinel reconciliation and env_broken recovery probes. When
96
97
  * the runner is quarantined with cause `env_broken` (an environmental,
97
98
  * self-healing failure — e.g. a claude self-update window), each pass
98
99
  * re-runs the claude health probe and, if it now passes, clears the
@@ -140,11 +141,23 @@ export interface WatchOptions {
140
141
  * 15000. Tests set a tiny value to observe fallback claiming without real waits.
141
142
  */
142
143
  claimDeadmanFallbackPollMs?: number;
144
+ /** AC11: engine-detection probe for the boot caps.engines (default = real
145
+ * detectCapableEngines; tests inject `detectCapableEngines({...})` — not a mock). */
146
+ detectEngines?: () => Promise<string[]>;
147
+ /**
148
+ * CLAIM-DEADMAN: injected clock for the wedge state machine. Defaults to
149
+ * `Date.now`. TEST-HARDEN-3: the wiring suite drives this with a manual clock
150
+ * so "no claim for wedgeThresholdMs" is a function of ADVANCED test time, not
151
+ * of how long the runner's async startup happened to take on a loaded box —
152
+ * the flake that failed watch-deadman.test.ts. Production never sets it.
153
+ */
154
+ claimDeadmanNow?: () => number;
143
155
  /** Returns a controller for tests; production wiring uses the default. */
144
156
  taskRunnerFactory?: typeof runTask;
145
157
  /** v0.6.2: review handler injection for tests. Defaults to runReview. */
146
158
  reviewerFactory?: (assignment: ReviewAssignment, deps: {
147
159
  supabase: RunnerSupabaseClient;
160
+ onUnknownAdvertisedEngine?: (engineId: string, err: Error) => Promise<void>;
148
161
  }) => Promise<ReviewerOutcome>;
149
162
  /**
150
163
  * v0.10 T-49-2: max tasks this runner may execute in parallel. Each
@@ -270,6 +283,8 @@ export interface WatchOptions {
270
283
  * neither this nor a base repo path is available the probe loop is disabled.
271
284
  */
272
285
  gitAuthProbe?: GitAuthProbe;
286
+ /** Injectable default-engine executable preflight. Production resolves claude before registering. */
287
+ claudePreflight?: () => void;
273
288
  }
274
289
  /**
275
290
  * v0.12.0 (T-52-7): resolve ACC_RUNNER_IDLE_TTL_MIN into ms. Returns null
@@ -318,17 +333,32 @@ export interface WatchHandle {
318
333
  */
319
334
  gitAuthProbeOnce(): Promise<boolean>;
320
335
  /**
321
- * v0.41.4 test hook: forces one env_broken quarantine-recovery pass (re-probe
322
- * claude; clear the quarantine + resume if it recovered) and resolves when it
323
- * finishes. Production drives this from the recovery timer.
336
+ * Test hook: reconciles the sentinel, then runs the env_broken recovery probe
337
+ * when applicable. Production drives this from the recovery timer.
324
338
  */
325
339
  quarantineRecoveryOnce(): Promise<void>;
326
340
  /** v0.10 T-49-2: number of tasks currently executing. Useful for tests. */
327
341
  runningCount(): number;
342
+ /** Engines currently held by a capacity pause; exposed for tests. */
343
+ pausedEnginesSnapshot(): string[];
328
344
  }
329
345
  type ReviewerFactory = (assignment: ReviewAssignment, deps: {
330
346
  supabase: RunnerSupabaseClient;
347
+ onUnknownAdvertisedEngine?: (engineId: string, err: Error) => Promise<void>;
331
348
  }) => Promise<ReviewerOutcome>;
349
+ /**
350
+ * The DEFAULT reviewer factory. FAIL CLOSED: constrain every review to the engines
351
+ * THIS runner ALREADY PUBLISHED into `acc.runners.caps.engines` — the value the
352
+ * assignment was routed against — threaded as a FIXED `advertisedEngineIds`.
353
+ * `advertisedEngines` is resolved ONCE at watch startup from the same
354
+ * `detectCapableEngines()` source that feeds the register_runner caps payload, so
355
+ * it is a stable snapshot. It deliberately does NOT pass a live `detectEngines`
356
+ * probe: a per-review re-probe could drift from the published caps (an engine
357
+ * appearing/disappearing mid-session) and silently route a review to an engine the
358
+ * assignment never assumed. `run` is injectable for the wiring test; production
359
+ * uses `runReview`.
360
+ */
361
+ export declare function capsConstrainedReviewerFactory(advertisedEngines: string[], run?: typeof runReview): ReviewerFactory;
332
362
  interface WatchState {
333
363
  cfg: RunnerConfig;
334
364
  session: StoredSession;
@@ -375,6 +405,17 @@ interface WatchState {
375
405
  * (The epoch-ms value is retained for logs/telemetry.)
376
406
  */
377
407
  claimContentionSince: Map<string, number>;
408
+ /**
409
+ * CLAIM-LOCK-GLOB: per-task claim-loss retry state, threaded
410
+ * into every runTask so file-lock conflicts persist across re-dispatch. After
411
+ * CLAIM_LOCK_MAX_FAST_ATTEMPTS fast attempts the task yields (AC3);
412
+ * `claimYieldUntil` maps a task id -> the epoch-ms instant before which
413
+ * `enqueue()` refuses to re-drive it, so a losing task actually backs off
414
+ * instead of hammering the claim every backstop cycle. Both are cleared when
415
+ * the task leaves the assigned+queued set (claimed or unassigned).
416
+ */
417
+ claimLossState: Map<string, ClaimLockLossState>;
418
+ claimYieldUntil: Map<string, number>;
378
419
  /**
379
420
  * FIX-D: periodic DB-poll claim backstop. The
380
421
  * timer fires every `claimBackstopIntervalMs`; each pass reconciles the
@@ -492,6 +533,14 @@ interface WatchState {
492
533
  */
493
534
  capacityClaimPaused: boolean;
494
535
  queue: string[];
536
+ /**
537
+ * CAPS-ENGINES-STALE-KEYCHAIN-1 (AC12): engines this process advertised but
538
+ * proved unresolvable (getEngine threw). The drop is PERSISTED here so a later
539
+ * caps republish — including a repair for a DIFFERENT engine, which recomputes
540
+ * from a fresh detectCapableEngines() — cannot re-advertise it. Cleared only by
541
+ * a process restart (which re-detects from scratch).
542
+ */
543
+ droppedEngines: Set<string>;
495
544
  /** Every task_id we've ever enqueued in this process — Realtime OR poll. */
496
545
  seen: Set<string>;
497
546
  pumping: boolean;
@@ -522,9 +571,9 @@ interface WatchState {
522
571
  quarantined: boolean;
523
572
  /**
524
573
  * v0.41.4: the cause of the ACTIVE quarantine (null when not quarantined).
525
- * Recovery only auto-clears `env_broken` an environmental, self-healing
526
- * failure. usage_limit / auth_expired clear through their own paths (capacity
527
- * resume, token refresh), never the claude re-probe.
574
+ * Recovery auto-clears `env_broken` after a successful health probe. A
575
+ * usage_limit with a known reset clears through capacity resume; a hard wall
576
+ * and auth_expired require the operator to clear this instance's sentinel.
528
577
  */
529
578
  quarantineCause: ClaudeExitClass | null;
530
579
  /** v0.41.4: env_broken quarantine-recovery re-probe timer + cadence. */
@@ -576,14 +625,8 @@ interface WatchState {
576
625
  * factory through pumpReviews and the resume timer.
577
626
  */
578
627
  taskRunnerFactory: typeof runTask;
579
- /**
580
- * v0.56 (T-56-1): capacity pause. While true, pump() and pumpReviews()
581
- * refuse to claim — the Claude account is out of session/usage capacity.
582
- * Tasks already in flight finish (or themselves report capacity); queued
583
- * work stays queued until resume. Heartbeats continue throughout so the
584
- * board shows the runner online-but-paused rather than crashed.
585
- */
586
- pausedCapacity: boolean;
628
+ /** Capacity-paused engines; task claiming is held only for matching engines. */
629
+ pausedCapacity: Set<string>;
587
630
  /** Epoch ms the runner intends to resume at (null when not paused). */
588
631
  pausedUntil: number | null;
589
632
  /**
@@ -601,6 +644,9 @@ interface WatchState {
601
644
  * the reason into the canonical `runner.capacity_paused` payload + bus message.
602
645
  */
603
646
  capacityPauseDetail: string;
647
+ /** Last engine that triggered a capacity pause, for pause payloads. */
648
+ capacityPauseEngine: string | null;
649
+ taskEngines: Map<string, string>;
604
650
  /**
605
651
  * AS-3 (RESUME-WIRE): the pause/resume governor. REPLACES the v0.56 fixed
606
652
  * pause-until-reset `setTimeout`: it re-checks the reset instant on its own
@@ -672,6 +718,14 @@ export declare function parseHeartbeatDeadmanFields(data: unknown): HeartbeatDea
672
718
  */
673
719
  export declare function rebuildRealtimeClient(state: WatchState, factory: typeof runTask, attempt: number): Promise<void>;
674
720
  export declare function watchCommand(options?: WatchOptions): Promise<WatchHandle>;
721
+ /** CAPS-ENGINES-STALE-KEYCHAIN-1: caps-detection seams for
722
+ * repairUnknownAdvertisedEngine (default to real host probes; tests inject
723
+ * deterministic values so the drop-from-caps is observable host-independently). */
724
+ export interface RepairEngineDeps {
725
+ detectEngines?: () => Promise<string[]>;
726
+ detectModels?: () => Promise<string[]>;
727
+ }
728
+ export declare function repairUnknownAdvertisedEngine(state: WatchState, engineId: string, err: Error, deps?: RepairEngineDeps): Promise<void>;
675
729
  /**
676
730
  * PA-11C-SIGTERM-REQUEUE: graceful shutdown handler for SIGINT/SIGTERM.
677
731
  *
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}