@tokenfactory/acc-runner 0.44.1 → 0.44.2

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
package/README.md CHANGED
@@ -149,7 +149,7 @@ location, or declare capabilities.
149
149
 
150
150
  | Variable | Default | Notes |
151
151
  | ------------------------- | ---------------------------------------- | --------------------------------------------------------------------- |
152
- | `ACC_PUBLIC_URL` | production Vercel URL | Used for cost-pricing fetches and OAuth callback links. |
152
+ | `ACC_PUBLIC_URL` | canonical production origin (`https://acc.getset.live`) | Used for cost-pricing fetches and OAuth callback links. |
153
153
  | `ACC_SUPABASE_URL` | production project URL | Supabase project the runner talks to. |
154
154
  | `ACC_SUPABASE_ANON_KEY` | production anon key | Public; RLS does the gating. |
155
155
  | `ACC_REPO_PATH` | `~/work/TechArch` | Local clone of the target repo. See "Repo path resolution" below. |
@@ -211,6 +211,25 @@ config.json was silently ignored, and a runner launched by `launchd`
211
211
  Set either `ACC_REPO_PATH` or `repo-path` in config.json and verify
212
212
  with `acc-runner doctor`.
213
213
 
214
+ ### Recovering stranded worktrees
215
+
216
+ If a task fails at `pr_open`, inspect the task event payload for
217
+ `worktree_path`. To recover completed work deliberately:
218
+
219
+ ```bash
220
+ cd <worktree_path>
221
+ git status --short
222
+ git add -A
223
+ git commit -m "chore(acc): recover stranded runner work for <task_id>"
224
+ git push -u origin HEAD
225
+ gh pr create --base <integration_branch> --head "$(git branch --show-current)"
226
+ ```
227
+
228
+ Use the files named in the `pr_open` event as the audit list before committing.
229
+ If the branch has no commits and the worktree is dirty, the runner normally
230
+ auto-commits before opening the PR; this procedure is for manual recovery after
231
+ a hard process exit or an operator-aborted run.
232
+
214
233
  ### Capabilities
215
234
 
216
235
  Tags declare what kinds of tasks this runner is willing to pick up. The
@@ -1,5 +1,7 @@
1
- /** Prepend the EXTRA_PATHS not already present to a given PATH string. */
2
- export declare function augmentedPathFrom(pathValue: string | undefined): string;
1
+ /** Read the PATH value from env, resolving the key case-insensitively on Windows. */
2
+ export declare function pathValueFrom(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string | undefined;
3
+ /** Prepend the extra bin dirs not already present to a given PATH string. */
4
+ export declare function augmentedPathFrom(pathValue: string | undefined, options?: Pick<ResolveExecutableOptions, "env" | "platform" | "homedir">): string;
3
5
  /**
4
6
  * Returns process.env with PATH augmented to include the extra bin dirs.
5
7
  *
@@ -11,5 +13,39 @@ export declare function buildEnv(): NodeJS.ProcessEnv;
11
13
  * every other var). Use when a caller already composed an env — e.g. the claude
12
14
  * engine's withAnthropicAuth(...) — and just needs its PATH made launchd-safe.
13
15
  */
14
- export declare function withAugmentedPath(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
16
+ export declare function withAugmentedPath(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): NodeJS.ProcessEnv;
17
+ export interface ResolveExecutableOptions {
18
+ env?: NodeJS.ProcessEnv;
19
+ platform?: NodeJS.Platform;
20
+ homedir?: string;
21
+ exists?: (file: string) => boolean;
22
+ }
23
+ export interface ExecutableResolution {
24
+ command: string;
25
+ searched: string[];
26
+ }
27
+ export declare function executableSearchPaths(bin: string, options?: ResolveExecutableOptions): string[];
28
+ export declare function resolveExecutable(bin: string, options?: ResolveExecutableOptions): ExecutableResolution | null;
29
+ export declare function unresolvedExecutableDetail(bin: string, searched: string[]): string;
30
+ export declare function requireExecutable(bin: string, options?: ResolveExecutableOptions): ExecutableResolution;
31
+ /**
32
+ * Resolve the `command` string handed to execa when SPAWNING `bin`.
33
+ *
34
+ * Windows: we must resolve a concrete on-disk file. The installed entry is a
35
+ * PATHEXT shim — `claude.cmd` (npm's global shim) or `claude.exe` — never bare
36
+ * `claude`, and execa does not probe PATHEXT itself. We hand execa the resolved
37
+ * `.cmd`/`.bat` path; execa's cross-spawn layer detects the `.cmd`/`.bat`
38
+ * extension and dispatches it through `%ComSpec% /d /s /c "<shim>"` (cmd.exe),
39
+ * which is exactly how a Windows batch shim is meant to run. So a resolved shim
40
+ * path executes correctly — no separate `shell: true` is needed or wanted
41
+ * (`shell: true` would re-introduce argument-quoting hazards). If nothing
42
+ * resolves we throw the same detailed "not found" error as requireExecutable.
43
+ *
44
+ * POSIX (linux/darwin): we return `bin` UNCHANGED and let execa resolve it
45
+ * against the (already PATH-augmented) `env` we pass, byte-for-byte as before
46
+ * this change. This deliberately avoids introducing any fs.existsSync gate on
47
+ * the non-Windows spawn path — POSIX has no PATHEXT/shim ambiguity to resolve,
48
+ * so bare-name dispatch stays identical to the pre-existing behavior.
49
+ */
50
+ export declare function resolveSpawnCommand(bin: string, options?: ResolveExecutableOptions): string;
15
51
  //# sourceMappingURL=bin-resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bin-resolve.d.ts","sourceRoot":"","sources":["../src/bin-resolve.ts"],"names":[],"mappings":"AAyBA,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAAC,UAAU,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAE3E"}
1
+ {"version":3,"file":"bin-resolve.d.ts","sourceRoot":"","sources":["../src/bin-resolve.ts"],"names":[],"mappings":"AAkDA,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,GAAG,SAAS,CAEpB;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAM,GAC3E,MAAM,CAiBR;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAAC,UAAU,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAAC,UAAU,CAYnB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyCD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAA6B,GACrC,MAAM,EAAE,CAyBV;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,GAAG,IAAI,CAW7B;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAElF;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAKtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAIR"}
@@ -12,21 +12,64 @@
12
12
  * latched a sticky env_broken quarantine.
13
13
  */
14
14
  import os from "node:os";
15
+ import fs from "node:fs";
15
16
  import path from "node:path";
16
- /** Directories prepended when not already in PATH. */
17
- const EXTRA_PATHS = [
17
+ /** Non-home directories prepended when not already in PATH. */
18
+ const EXTRA_PATHS_BASE = [
18
19
  "/opt/homebrew/bin", // Apple Silicon Homebrew
19
20
  "/opt/homebrew/sbin",
20
21
  "/usr/local/bin", // Intel Homebrew / MacPorts
21
22
  "/usr/local/sbin",
22
- path.join(os.homedir(), ".local", "bin"), // native `claude` install
23
23
  ];
24
- /** Prepend the EXTRA_PATHS not already present to a given PATH string. */
25
- export function augmentedPathFrom(pathValue) {
26
- const existing = pathValue ?? "/usr/bin:/bin:/usr/sbin:/sbin";
27
- const parts = existing.split(":");
28
- const extras = EXTRA_PATHS.filter((p) => !parts.includes(p));
29
- return extras.length > 0 ? `${extras.join(":")}:${existing}` : existing;
24
+ /**
25
+ * Resolve the env key that actually holds PATH.
26
+ *
27
+ * Windows env vars are case-insensitive, so a live Windows process exposes PATH
28
+ * under whatever casing the OS chose — commonly `Path`. `process.env` honours
29
+ * any casing, but the moment it is spread into a plain object (`{ ...env }`) the
30
+ * result is an ordinary case-SENSITIVE object where `Path` and `PATH` are
31
+ * distinct keys, so a naive `env.PATH` read silently misses a real `Path`. We
32
+ * inspect the env's OWN keys — exactly what a spread copies — and match
33
+ * case-insensitively on win32. When both spellings are present the canonical
34
+ * uppercase `PATH` wins: it is the explicitly-authored spelling (e.g. one we
35
+ * just augmented), whereas a lowercase `Path` beside it is the stale inherited
36
+ * copy. Off win32, PATH is genuinely case-sensitive, so only exact `PATH`
37
+ * counts.
38
+ */
39
+ function pathKeyOf(env, platform) {
40
+ if (platform === "win32") {
41
+ const keys = Object.keys(env);
42
+ if (keys.includes("PATH"))
43
+ return "PATH";
44
+ const match = keys.find((k) => k.toLowerCase() === "path");
45
+ if (match)
46
+ return match;
47
+ }
48
+ return "PATH";
49
+ }
50
+ /** Read the PATH value from env, resolving the key case-insensitively on Windows. */
51
+ export function pathValueFrom(env, platform = process.platform) {
52
+ return env[pathKeyOf(env, platform)];
53
+ }
54
+ /** Prepend the extra bin dirs not already present to a given PATH string. */
55
+ export function augmentedPathFrom(pathValue, options = {}) {
56
+ const platform = options.platform ?? process.platform;
57
+ const env = options.env ?? process.env;
58
+ const delimiter = delimiterFor(platform);
59
+ // Fall back to a case-insensitive read of env's PATH when no explicit value
60
+ // was passed — a spread env may expose it as `Path` on Windows.
61
+ const resolvedValue = pathValue ?? pathValueFrom(env, platform);
62
+ const existing = resolvedValue ?? (platform === "win32" ? "" : "/usr/bin:/bin:/usr/sbin:/sbin");
63
+ const parts = existing ? existing.split(delimiter) : [];
64
+ const normalized = new Set(parts.map((p) => (platform === "win32" ? p.toLowerCase() : p)));
65
+ const homedir = options.homedir ?? os.homedir();
66
+ const extras = extraExecutableDirs(env, platform, homedir).filter((p) => {
67
+ const key = platform === "win32" ? p.toLowerCase() : p;
68
+ return !normalized.has(key);
69
+ });
70
+ if (extras.length === 0)
71
+ return existing;
72
+ return existing ? `${extras.join(delimiter)}${delimiter}${existing}` : extras.join(delimiter);
30
73
  }
31
74
  /**
32
75
  * Returns process.env with PATH augmented to include the extra bin dirs.
@@ -34,14 +77,135 @@ export function augmentedPathFrom(pathValue) {
34
77
  * execa("git", args, { cwd, env: buildEnv() })
35
78
  */
36
79
  export function buildEnv() {
37
- return { ...process.env, PATH: augmentedPathFrom(process.env.PATH) };
80
+ return withAugmentedPath(process.env);
38
81
  }
39
82
  /**
40
83
  * Like buildEnv(), but augments the PATH of an ARBITRARY base env (preserving
41
84
  * every other var). Use when a caller already composed an env — e.g. the claude
42
85
  * engine's withAnthropicAuth(...) — and just needs its PATH made launchd-safe.
43
86
  */
44
- export function withAugmentedPath(env) {
45
- return { ...env, PATH: augmentedPathFrom(env.PATH) };
87
+ export function withAugmentedPath(env, platform = process.platform) {
88
+ // Read AND write PATH under its real key (Windows may carry it as `Path`); a
89
+ // fresh `PATH` written alongside would let the stale key shadow our value.
90
+ const key = pathKeyOf(env, platform);
91
+ const next = { ...env, [key]: augmentedPathFrom(env[key], { env, platform }) };
92
+ // Windows is case-insensitive: strip any other-cased PATH key (no stale shadow).
93
+ if (platform === "win32") {
94
+ for (const k of Object.keys(next)) {
95
+ if (k !== key && k.toLowerCase() === "path")
96
+ delete next[k];
97
+ }
98
+ }
99
+ return next;
100
+ }
101
+ function delimiterFor(platform) {
102
+ return platform === "win32" ? ";" : ":";
103
+ }
104
+ function pathApiFor(platform) {
105
+ return platform === "win32" ? path.win32 : path.posix;
106
+ }
107
+ function candidateNames(bin, env, platform) {
108
+ if (platform !== "win32" || /\.[^\\/]+$/.test(bin))
109
+ return [bin];
110
+ const pathext = (env.PATHEXT || ".COM;.EXE;.BAT;.CMD")
111
+ .split(";")
112
+ .map((ext) => ext.trim())
113
+ .filter(Boolean);
114
+ // win32: return ONLY the PATHEXT variants, never the bare `bin`. npm's cmd-shim
115
+ // writes `claude` (a sh script), `claude.cmd` and `claude.ps1` side by side; the
116
+ // extensionless `claude` is not executable by CreateProcess, so preferring — or
117
+ // even offering — it re-creates the "claude is not recognised" failure. This is
118
+ // the "never bare `claude`" contract resolveSpawnCommand documents.
119
+ return pathext.map((ext) => `${bin}${ext.startsWith(".") ? ext : `.${ext}`}`);
120
+ }
121
+ function extraExecutableDirs(env, platform, homedir) {
122
+ if (platform !== "win32") {
123
+ return [
124
+ ...EXTRA_PATHS_BASE,
125
+ path.join(homedir, ".local", "bin"),
126
+ ];
127
+ }
128
+ const p = path.win32;
129
+ return [
130
+ env.npm_config_prefix,
131
+ env.APPDATA ? p.join(env.APPDATA, "npm") : undefined,
132
+ env.LOCALAPPDATA ? p.join(env.LOCALAPPDATA, "npm") : undefined,
133
+ env.ProgramFiles ? p.join(env.ProgramFiles, "nodejs") : undefined,
134
+ p.join(homedir, ".local", "bin"),
135
+ ].filter((dir) => !!dir && dir.trim().length > 0);
136
+ }
137
+ export function executableSearchPaths(bin, options = {}) {
138
+ const platform = options.platform ?? process.platform;
139
+ const env = options.env ?? process.env;
140
+ const pathApi = pathApiFor(platform);
141
+ const delimiter = delimiterFor(platform);
142
+ const homedir = options.homedir ?? os.homedir();
143
+ const pathDirs = (pathValueFrom(env, platform) ?? "")
144
+ .split(delimiter)
145
+ .map((dir) => dir.trim())
146
+ .filter(Boolean);
147
+ const dirs = [...pathDirs, ...extraExecutableDirs(env, platform, homedir)];
148
+ const names = candidateNames(bin, env, platform);
149
+ const out = [];
150
+ const seen = new Set();
151
+ for (const dir of dirs) {
152
+ for (const name of names) {
153
+ const candidate = pathApi.join(dir, name);
154
+ const key = platform === "win32" ? candidate.toLowerCase() : candidate;
155
+ if (!seen.has(key)) {
156
+ seen.add(key);
157
+ out.push(candidate);
158
+ }
159
+ }
160
+ }
161
+ return out;
162
+ }
163
+ export function resolveExecutable(bin, options = {}) {
164
+ const platform = options.platform ?? process.platform;
165
+ const exists = options.exists ?? ((file) => fs.existsSync(file));
166
+ const searched = executableSearchPaths(bin, options);
167
+ for (const file of searched) {
168
+ if (exists(file))
169
+ return { command: file, searched };
170
+ }
171
+ if (platform !== "win32" && bin.includes("/")) {
172
+ return exists(bin) ? { command: bin, searched: [bin] } : null;
173
+ }
174
+ return null;
175
+ }
176
+ export function unresolvedExecutableDetail(bin, searched) {
177
+ return `${bin} executable not found. Searched: ${searched.length ? searched.join(", ") : "<empty PATH>"}`;
178
+ }
179
+ export function requireExecutable(bin, options = {}) {
180
+ const searched = executableSearchPaths(bin, options);
181
+ const resolved = resolveExecutable(bin, { ...options, exists: options.exists });
182
+ if (resolved)
183
+ return resolved;
184
+ throw new Error(unresolvedExecutableDetail(bin, searched));
185
+ }
186
+ /**
187
+ * Resolve the `command` string handed to execa when SPAWNING `bin`.
188
+ *
189
+ * Windows: we must resolve a concrete on-disk file. The installed entry is a
190
+ * PATHEXT shim — `claude.cmd` (npm's global shim) or `claude.exe` — never bare
191
+ * `claude`, and execa does not probe PATHEXT itself. We hand execa the resolved
192
+ * `.cmd`/`.bat` path; execa's cross-spawn layer detects the `.cmd`/`.bat`
193
+ * extension and dispatches it through `%ComSpec% /d /s /c "<shim>"` (cmd.exe),
194
+ * which is exactly how a Windows batch shim is meant to run. So a resolved shim
195
+ * path executes correctly — no separate `shell: true` is needed or wanted
196
+ * (`shell: true` would re-introduce argument-quoting hazards). If nothing
197
+ * resolves we throw the same detailed "not found" error as requireExecutable.
198
+ *
199
+ * POSIX (linux/darwin): we return `bin` UNCHANGED and let execa resolve it
200
+ * against the (already PATH-augmented) `env` we pass, byte-for-byte as before
201
+ * this change. This deliberately avoids introducing any fs.existsSync gate on
202
+ * the non-Windows spawn path — POSIX has no PATHEXT/shim ambiguity to resolve,
203
+ * so bare-name dispatch stays identical to the pre-existing behavior.
204
+ */
205
+ export function resolveSpawnCommand(bin, options = {}) {
206
+ const platform = options.platform ?? process.platform;
207
+ if (platform !== "win32")
208
+ return bin;
209
+ return requireExecutable(bin, options).command;
46
210
  }
47
211
  //# sourceMappingURL=bin-resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bin-resolve.js","sourceRoot":"","sources":["../src/bin-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sDAAsD;AACtD,MAAM,WAAW,GAAG;IAClB,mBAAmB,EAAI,yBAAyB;IAChD,oBAAoB;IACpB,gBAAgB,EAAO,4BAA4B;IACnD,iBAAiB;IACjB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,0BAA0B;CACrE,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,SAA6B;IAC7D,MAAM,QAAQ,GAAG,SAAS,IAAI,+BAA+B,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAsB;IACtD,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"bin-resolve.js","sourceRoot":"","sources":["../src/bin-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ export interface RunnerBuildFingerprint {
2
+ commit_sha: string;
3
+ dist_sha256: string;
4
+ package_version: string;
5
+ }
6
+ export interface RunnerBuildCaps {
7
+ loaded: RunnerBuildFingerprint;
8
+ installed: RunnerBuildFingerprint | null;
9
+ }
10
+ export declare const LOADED_BUILD_FINGERPRINT: RunnerBuildFingerprint;
11
+ export declare function parseGeneratedBuildInfo(text: string): RunnerBuildFingerprint | null;
12
+ export declare function readInstalledBuildFingerprint(readText?: (path: string) => Promise<string>): Promise<RunnerBuildFingerprint | null>;
13
+ /** True when two fingerprints refer to a different build (commit OR dist). */
14
+ export declare function buildFingerprintsDiffer(a: RunnerBuildFingerprint, b: RunnerBuildFingerprint): boolean;
15
+ export declare function buildFingerprintCaps(readText?: (path: string) => Promise<string>): Promise<RunnerBuildCaps>;
16
+ /**
17
+ * BUILD-FINGERPRINT-RUNNING-1: verdict for the host-side check "is the running
18
+ * runner on the installed build?". `running` is what the long-running
19
+ * watch/companion process recorded at boot (runtime/running-build.ts);
20
+ * `installed` is what this fresh process loaded off disk. Differ → the launchd
21
+ * process is executing an older build than npm already wrote to disk; restart
22
+ * required. Pure, so unit-testable without a live launchd process.
23
+ */
24
+ export interface RunningBuildStatus {
25
+ running: RunnerBuildFingerprint | null;
26
+ installed: RunnerBuildFingerprint;
27
+ /** No record found — the runner has not booted since this feature shipped. */
28
+ noRunningRecord: boolean;
29
+ restart_required: boolean;
30
+ }
31
+ export declare function runningBuildStatus(running: RunnerBuildFingerprint | null, installed?: RunnerBuildFingerprint): RunningBuildStatus;
32
+ /** Minimal Supabase surface `publishBuildFingerprintCaps` needs (a supabase-js client satisfies it). */
33
+ export interface RunnerCapsStore {
34
+ from(table: "runners"): {
35
+ select(columns: "caps"): {
36
+ eq(column: "id", value: string): {
37
+ maybeSingle(): Promise<{
38
+ data: {
39
+ caps?: unknown;
40
+ } | null;
41
+ error: {
42
+ message: string;
43
+ } | null;
44
+ }>;
45
+ };
46
+ };
47
+ update(values: {
48
+ caps: Record<string, unknown>;
49
+ }): {
50
+ eq(column: "id", value: string): Promise<{
51
+ error: {
52
+ message: string;
53
+ } | null;
54
+ }>;
55
+ };
56
+ };
57
+ }
58
+ /**
59
+ * BUILD-FINGERPRINT-ON-CAPS: publish the fingerprint into `acc.runners.caps.build`
60
+ * — the same caps contract the register RPC populates — via an id-scoped
61
+ * self-update (never register_runner, whose dedup could re-home a named-instance
62
+ * keychain runner onto a sibling's row). Read-merge-write so the other caps keys
63
+ * (repos/engines/concurrency) survive.
64
+ */
65
+ export declare function publishBuildFingerprintCaps(supabase: RunnerCapsStore, runnerId: string, build?: RunnerBuildCaps): Promise<void>;
66
+ //# sourceMappingURL=build-fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-fingerprint.d.ts","sourceRoot":"","sources":["../src/build-fingerprint.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAI1C;AAED,eAAO,MAAM,wBAAwB,EAAE,sBAItC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CASnF;AAED,wBAAsB,6BAA6B,CACjD,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAA8B,GACvE,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAQxC;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,sBAAsB,EACzB,CAAC,EAAE,sBAAsB,GACxB,OAAO,CAET;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC3C,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,sBAAsB,CAAC;IAClC,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,GAAG,IAAI,EACtC,SAAS,GAAE,sBAAiD,GAC3D,kBAAkB,CAOpB;AAED,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG;QACtB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG;YACvB,EAAE,CACA,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,MAAM,GACZ;gBACD,WAAW,IAAI,OAAO,CAAC;oBACrB,IAAI,EAAE;wBAAE,IAAI,CAAC,EAAE,OAAO,CAAA;qBAAE,GAAG,IAAI,CAAC;oBAChC,KAAK,EAAE;wBAAE,OAAO,EAAE,MAAM,CAAA;qBAAE,GAAG,IAAI,CAAC;iBACnC,CAAC,CAAC;aACJ,CAAC;SACH,CAAC;QACF,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,GAAG;YACjD,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,KAAK,EAAE;oBAAE,OAAO,EAAE,MAAM,CAAA;iBAAE,GAAG,IAAI,CAAA;aAAE,CAAC,CAAC;SACjF,CAAC;KACH,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,70 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { fileURLToPath } from "node:url";
3
+ import { PACKAGE_VERSION } from "./pkg-version.js";
4
+ import { BUILD_COMMIT_SHA, BUILD_DIST_SHA256, } from "./build-info.generated.js";
5
+ export const LOADED_BUILD_FINGERPRINT = {
6
+ commit_sha: BUILD_COMMIT_SHA,
7
+ dist_sha256: BUILD_DIST_SHA256,
8
+ package_version: PACKAGE_VERSION,
9
+ };
10
+ export function parseGeneratedBuildInfo(text) {
11
+ const read = (name) => {
12
+ const m = text.match(new RegExp(`BUILD_${name} = "([^"]+)"`));
13
+ return m?.[1] ?? null;
14
+ };
15
+ const commit_sha = read("COMMIT_SHA");
16
+ const dist_sha256 = read("DIST_SHA256");
17
+ if (!commit_sha || !dist_sha256)
18
+ return null;
19
+ return { commit_sha, dist_sha256, package_version: PACKAGE_VERSION };
20
+ }
21
+ export async function readInstalledBuildFingerprint(readText = (p) => readFile(p, "utf8")) {
22
+ try {
23
+ return parseGeneratedBuildInfo(await readText(fileURLToPath(new URL("./build-info.generated.js", import.meta.url))));
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ /** True when two fingerprints refer to a different build (commit OR dist). */
30
+ export function buildFingerprintsDiffer(a, b) {
31
+ return a.commit_sha !== b.commit_sha || a.dist_sha256 !== b.dist_sha256;
32
+ }
33
+ export async function buildFingerprintCaps(readText) {
34
+ const installed = await readInstalledBuildFingerprint(readText);
35
+ return {
36
+ loaded: LOADED_BUILD_FINGERPRINT,
37
+ installed,
38
+ };
39
+ }
40
+ export function runningBuildStatus(running, installed = LOADED_BUILD_FINGERPRINT) {
41
+ return {
42
+ running,
43
+ installed,
44
+ noRunningRecord: running === null,
45
+ restart_required: running !== null && buildFingerprintsDiffer(running, installed),
46
+ };
47
+ }
48
+ /**
49
+ * BUILD-FINGERPRINT-ON-CAPS: publish the fingerprint into `acc.runners.caps.build`
50
+ * — the same caps contract the register RPC populates — via an id-scoped
51
+ * self-update (never register_runner, whose dedup could re-home a named-instance
52
+ * keychain runner onto a sibling's row). Read-merge-write so the other caps keys
53
+ * (repos/engines/concurrency) survive.
54
+ */
55
+ export async function publishBuildFingerprintCaps(supabase, runnerId, build) {
56
+ const value = build ?? (await buildFingerprintCaps());
57
+ const read = await supabase.from("runners").select("caps").eq("id", runnerId).maybeSingle();
58
+ if (read.error)
59
+ throw new Error(read.error.message);
60
+ const current = read.data?.caps && typeof read.data.caps === "object" && !Array.isArray(read.data.caps)
61
+ ? { ...read.data.caps }
62
+ : {};
63
+ const write = await supabase
64
+ .from("runners")
65
+ .update({ caps: { ...current, build: value } })
66
+ .eq("id", runnerId);
67
+ if (write.error)
68
+ throw new Error(write.error.message);
69
+ }
70
+ //# sourceMappingURL=build-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-fingerprint.js","sourceRoot":"","sources":["../src/build-fingerprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const BUILD_COMMIT_SHA = "05afe74aedc86f2883aa79baf1d67a77b2f70fbd";
2
+ export declare const BUILD_DIST_SHA256 = "pending-build";
3
+ //# sourceMappingURL=build-info.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-info.generated.d.ts","sourceRoot":"","sources":["../src/build-info.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAC3E,eAAO,MAAM,iBAAiB,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Generated by scripts/gen-build-info.mjs. Do not edit by hand.
2
+ export const BUILD_COMMIT_SHA = "05afe74aedc86f2883aa79baf1d67a77b2f70fbd";
3
+ export const BUILD_DIST_SHA256 = "d35174e321d5242c2368a5f7626f91e869ffe22320a536a1376f44751517f107";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-info.generated.js","sourceRoot":"","sources":["../src/build-info.generated.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC"}
@@ -36,11 +36,11 @@ export interface ResumeTransition {
36
36
  from: CapacityMode;
37
37
  to: CapacityMode;
38
38
  /** Why the transition fired. */
39
- reason: ResumeReason | "cap-hit" | "returning-capped-account";
39
+ reason: ResumeReason | "operator-clear" | "cap-hit" | "returning-capped-account";
40
40
  /** The account the runner is anchored to after the transition. */
41
41
  account: string | null;
42
42
  /** Which driver produced it. */
43
- trigger: "cap-report" | "observe-account" | "poll";
43
+ trigger: "cap-report" | "observe-account" | "poll" | "operator";
44
44
  at: number;
45
45
  }
46
46
  export interface ResumeControllerDeps {
@@ -67,7 +67,7 @@ export interface ResumeControllerDeps {
67
67
  }) => void | Promise<void>;
68
68
  /** Restart task + review claim scans (watch.ts: pollOnce + pump + pumpReviews). */
69
69
  restartClaims: () => void | Promise<void>;
70
- /** Stop claiming tasks + reviews (watch.ts: pausedCapacity = true). Optional. */
70
+ /** Stop claims for the current capacity scope. Optional. */
71
71
  stopClaims?: () => void | Promise<void>;
72
72
  /** Kick the companion turn loop so queued chat turns drain. Optional. */
73
73
  kickCompanion?: () => void | Promise<void>;
@@ -128,6 +128,8 @@ export declare class ResumeController {
128
128
  * cycle. A same-account observation is a cheap no-op re-check.
129
129
  */
130
130
  observeAccount(accountKey: string | null): void;
131
+ /** Explicitly release the current capacity pause after an operator repair. */
132
+ resumeByOperator(): void;
131
133
  /** Cancel the poll timer; in-flight actions still settle. */
132
134
  stop(): void;
133
135
  /** Resolve once every queued action has settled (test seam). */
@@ -1 +1 @@
1
- {"version":3,"file":"resume-controller.d.ts","sourceRoot":"","sources":["../../src/capacity/resume-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume-controller.d.ts","sourceRoot":"","sources":["../../src/capacity/resume-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAU5B,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,gBAAgB,GAAG,SAAS,GAAG,0BAA0B,CAAC;IACjF,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gCAAgC;IAChC,OAAO,EAAE,YAAY,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,CAAC;IAChE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mEAAmE;IACnE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1C,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,mFAAmF;IACnF,aAAa,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,kCAAkC;IAClC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAqBf,OAAO,CAAC,QAAQ,CAAC,IAAI;IApBjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAE5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAA0B;IACtC,kFAAkF;IAClF,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,2CAA2C;IAC3C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAAiB;IACnC,8DAA8D;IAC9D,OAAO,CAAC,IAAI,CAAoC;gBAEnB,IAAI,EAAE,oBAAoB;IAOvD,oBAAoB;IACpB,WAAW,IAAI,YAAY;IAI3B,mEAAmE;IACnE,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAInD,sDAAsD;IACtD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAOtC;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqB9F;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAM/C,8EAA8E;IAC9E,gBAAgB,IAAI,IAAI;IAOxB,6DAA6D;IAC7D,IAAI,IAAI,IAAI;IAKZ,gEAAgE;IAC1D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAQlB,gDAAgD;YAClC,QAAQ;IAqDtB,2DAA2D;YAC7C,UAAU;IAsCxB;;;;OAIG;YACW,QAAQ;CAwBvB"}
@@ -92,6 +92,15 @@ export class ResumeController {
92
92
  this.observedAccountKey = accountKey;
93
93
  this.enqueue(() => this.evaluate("observe-account"));
94
94
  }
95
+ /** Explicitly release the current capacity pause after an operator repair. */
96
+ resumeByOperator() {
97
+ if (this.stopped || this.mode !== "paused")
98
+ return;
99
+ const account = this.observedAccountKey ?? this.anchorAccountKey;
100
+ if (!account)
101
+ return;
102
+ this.enqueue(() => this.doResume("operator-clear", account, "operator"));
103
+ }
95
104
  /** Cancel the poll timer; in-flight actions still settle. */
96
105
  stop() {
97
106
  this.stopped = true;
@@ -1 +1 @@
1
- {"version":3,"file":"resume-controller.js","sourceRoot":"","sources":["../../src/capacity/resume-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume-controller.js","sourceRoot":"","sources":["../../src/capacity/resume-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ChatLaneTransport, ClaimedChatTurn } from "./chat-lane.js";
2
+ /** Pause claims briefly after a delegation mint failure to avoid a retry storm. */
3
+ export declare const DELEGATION_MINT_COOLDOWN_MS = 15000;
4
+ export interface ChatDelegationGuardDeps {
5
+ transport: ChatLaneTransport;
6
+ /** MUST throw when no narrow token was issued. */
7
+ mint: (turn: ClaimedChatTurn) => Promise<string>;
8
+ cooldownMs?: number;
9
+ now?: () => number;
10
+ onLog?: (line: string) => void;
11
+ }
12
+ export interface ChatDelegationGuard {
13
+ transport: ChatLaneTransport;
14
+ mintDelegation: (turn: ClaimedChatTurn) => Promise<string>;
15
+ }
16
+ /** Keep queued turns untouched until the local MCP tool bus is ready. */
17
+ export declare function guardChatTransportReadiness(transport: ChatLaneTransport, ready: () => boolean): ChatLaneTransport;
18
+ /**
19
+ * Gate claim on a narrow per-turn delegation. A failed mint requeues the turn
20
+ * and pauses claims; it can never fall through to the broader runner token.
21
+ */
22
+ export declare function guardChatDelegation(deps: ChatDelegationGuardDeps): ChatDelegationGuard;
23
+ //# sourceMappingURL=chat-delegation-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-delegation-guard.d.ts","sourceRoot":"","sources":["../src/chat-delegation-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,kDAAkD;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,MAAM,OAAO,GACnB,iBAAiB,CAKnB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAiDtF"}