@claudexor/cli 3.1.1 → 3.2.0

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 (261) hide show
  1. package/dist/about-command.d.ts.map +1 -1
  2. package/dist/accounts-projection.d.ts +8 -1
  3. package/dist/accounts-projection.d.ts.map +1 -1
  4. package/dist/accounts-projection.js +33 -20
  5. package/dist/accounts-projection.js.map +1 -1
  6. package/dist/accounts-services.d.ts +206 -0
  7. package/dist/accounts-services.d.ts.map +1 -0
  8. package/dist/accounts-services.js +71 -0
  9. package/dist/accounts-services.js.map +1 -0
  10. package/dist/acp-surface-runner.d.ts +39 -0
  11. package/dist/acp-surface-runner.d.ts.map +1 -1
  12. package/dist/acp-surface-runner.js +104 -30
  13. package/dist/acp-surface-runner.js.map +1 -1
  14. package/dist/attachment-upload.d.ts +5 -0
  15. package/dist/attachment-upload.d.ts.map +1 -0
  16. package/dist/attachment-upload.js +64 -0
  17. package/dist/attachment-upload.js.map +1 -0
  18. package/dist/belt-bridge.d.ts +2 -0
  19. package/dist/belt-bridge.d.ts.map +1 -0
  20. package/dist/belt-bridge.js +31 -0
  21. package/dist/belt-bridge.js.map +1 -0
  22. package/dist/bridge-serve.d.ts +1 -9
  23. package/dist/bridge-serve.d.ts.map +1 -1
  24. package/dist/bridge-serve.js +5 -22
  25. package/dist/bridge-serve.js.map +1 -1
  26. package/dist/capabilities.d.ts.map +1 -1
  27. package/dist/capabilities.js +8 -1
  28. package/dist/capabilities.js.map +1 -1
  29. package/dist/choice-input.d.ts +7 -0
  30. package/dist/choice-input.d.ts.map +1 -0
  31. package/dist/choice-input.js +17 -0
  32. package/dist/choice-input.js.map +1 -0
  33. package/dist/claude-oauth-usage.js.map +1 -1
  34. package/dist/claudexord-entry.d.ts +11 -0
  35. package/dist/claudexord-entry.d.ts.map +1 -0
  36. package/dist/claudexord-entry.js +42 -0
  37. package/dist/claudexord-entry.js.map +1 -0
  38. package/dist/claudexord.d.ts +2 -17
  39. package/dist/claudexord.d.ts.map +1 -1
  40. package/dist/claudexord.js +60 -93
  41. package/dist/claudexord.js.map +1 -1
  42. package/dist/cli-error.d.ts.map +1 -1
  43. package/dist/cli-error.js +21 -11
  44. package/dist/cli-error.js.map +1 -1
  45. package/dist/cli.js +149 -170
  46. package/dist/cli.js.map +1 -1
  47. package/dist/codex-device-login.js.map +1 -1
  48. package/dist/codex-quota-source.js.map +1 -1
  49. package/dist/command-flags.d.ts +16 -1
  50. package/dist/command-flags.d.ts.map +1 -1
  51. package/dist/command-flags.js +41 -19
  52. package/dist/command-flags.js.map +1 -1
  53. package/dist/command-registry.d.ts +21 -8
  54. package/dist/command-registry.d.ts.map +1 -1
  55. package/dist/command-registry.js +59 -116
  56. package/dist/command-registry.js.map +1 -1
  57. package/dist/command-scope.d.ts +13 -0
  58. package/dist/command-scope.d.ts.map +1 -0
  59. package/dist/command-scope.js +61 -0
  60. package/dist/command-scope.js.map +1 -0
  61. package/dist/control-services.d.ts +1622 -982
  62. package/dist/control-services.d.ts.map +1 -1
  63. package/dist/control-services.js +39 -68
  64. package/dist/control-services.js.map +1 -1
  65. package/dist/credential-commands.d.ts.map +1 -1
  66. package/dist/credential-commands.js +13 -3
  67. package/dist/credential-commands.js.map +1 -1
  68. package/dist/daemon-lifecycle.d.ts.map +1 -1
  69. package/dist/daemon-outcome.d.ts +3 -5
  70. package/dist/daemon-outcome.d.ts.map +1 -1
  71. package/dist/daemon-outcome.js +7 -19
  72. package/dist/daemon-outcome.js.map +1 -1
  73. package/dist/daemon-run.d.ts +26 -29
  74. package/dist/daemon-run.d.ts.map +1 -1
  75. package/dist/daemon-run.js +89 -97
  76. package/dist/daemon-run.js.map +1 -1
  77. package/dist/daemon-runtime-shutdown.d.ts +7 -0
  78. package/dist/daemon-runtime-shutdown.d.ts.map +1 -1
  79. package/dist/daemon-runtime-shutdown.js +29 -0
  80. package/dist/daemon-runtime-shutdown.js.map +1 -1
  81. package/dist/delegation-belt-descriptor.d.ts +20 -36
  82. package/dist/delegation-belt-descriptor.d.ts.map +1 -1
  83. package/dist/delegation-belt-descriptor.js +48 -51
  84. package/dist/delegation-belt-descriptor.js.map +1 -1
  85. package/dist/delegation-capability.d.ts +4 -0
  86. package/dist/delegation-capability.d.ts.map +1 -0
  87. package/dist/delegation-capability.js +29 -0
  88. package/dist/delegation-capability.js.map +1 -0
  89. package/dist/delegation-daemon-binding.d.ts +8 -0
  90. package/dist/delegation-daemon-binding.d.ts.map +1 -0
  91. package/dist/delegation-daemon-binding.js +18 -0
  92. package/dist/delegation-daemon-binding.js.map +1 -0
  93. package/dist/delegation-output.d.ts +18 -0
  94. package/dist/delegation-output.d.ts.map +1 -0
  95. package/dist/delegation-output.js +47 -0
  96. package/dist/delegation-output.js.map +1 -0
  97. package/dist/harness-command.d.ts +13 -0
  98. package/dist/harness-command.d.ts.map +1 -0
  99. package/dist/harness-command.js +35 -0
  100. package/dist/harness-command.js.map +1 -0
  101. package/dist/harness-installer.d.ts +79 -0
  102. package/dist/harness-installer.d.ts.map +1 -0
  103. package/dist/harness-installer.js +256 -0
  104. package/dist/harness-installer.js.map +1 -0
  105. package/dist/interaction-prompt.d.ts +19 -0
  106. package/dist/interaction-prompt.d.ts.map +1 -0
  107. package/dist/interaction-prompt.js +114 -0
  108. package/dist/interaction-prompt.js.map +1 -0
  109. package/dist/live.d.ts +2 -6
  110. package/dist/live.d.ts.map +1 -1
  111. package/dist/live.js +92 -75
  112. package/dist/live.js.map +1 -1
  113. package/dist/mcp-daemon-unavailable.d.ts +6 -0
  114. package/dist/mcp-daemon-unavailable.d.ts.map +1 -0
  115. package/dist/mcp-daemon-unavailable.js +16 -0
  116. package/dist/mcp-daemon-unavailable.js.map +1 -0
  117. package/dist/mcp-run-projections.d.ts +42 -0
  118. package/dist/mcp-run-projections.d.ts.map +1 -0
  119. package/dist/mcp-run-projections.js +74 -0
  120. package/dist/mcp-run-projections.js.map +1 -0
  121. package/dist/mcp-runner.d.ts +19 -1
  122. package/dist/mcp-runner.d.ts.map +1 -1
  123. package/dist/mcp-runner.js +121 -115
  124. package/dist/mcp-runner.js.map +1 -1
  125. package/dist/native-login.js.map +1 -1
  126. package/dist/ops-command-specs.d.ts +64 -0
  127. package/dist/ops-command-specs.d.ts.map +1 -0
  128. package/dist/ops-command-specs.js +146 -0
  129. package/dist/ops-command-specs.js.map +1 -0
  130. package/dist/ops-commands.d.ts.map +1 -1
  131. package/dist/ops-commands.js +23 -5
  132. package/dist/ops-commands.js.map +1 -1
  133. package/dist/orphan-reaper.js.map +1 -1
  134. package/dist/output-mode.d.ts +11 -0
  135. package/dist/output-mode.d.ts.map +1 -0
  136. package/dist/output-mode.js +28 -0
  137. package/dist/output-mode.js.map +1 -0
  138. package/dist/plan-question-loop.d.ts.map +1 -1
  139. package/dist/plan-question-loop.js +16 -13
  140. package/dist/plan-question-loop.js.map +1 -1
  141. package/dist/plugins.js +1 -1
  142. package/dist/plugins.js.map +1 -1
  143. package/dist/primary-output.d.ts +9 -4
  144. package/dist/primary-output.d.ts.map +1 -1
  145. package/dist/primary-output.js +50 -2
  146. package/dist/primary-output.js.map +1 -1
  147. package/dist/quota-subject-universe.d.ts +6 -0
  148. package/dist/quota-subject-universe.d.ts.map +1 -0
  149. package/dist/quota-subject-universe.js +31 -0
  150. package/dist/quota-subject-universe.js.map +1 -0
  151. package/dist/registry.js.map +1 -1
  152. package/dist/release-command.d.ts +1 -1
  153. package/dist/release-command.js +2 -2
  154. package/dist/remote-command-specs.d.ts +45 -0
  155. package/dist/remote-command-specs.d.ts.map +1 -0
  156. package/dist/remote-command-specs.js +29 -0
  157. package/dist/remote-command-specs.js.map +1 -0
  158. package/dist/remote-command.d.ts +11 -0
  159. package/dist/remote-command.d.ts.map +1 -0
  160. package/dist/remote-command.js +262 -0
  161. package/dist/remote-command.js.map +1 -0
  162. package/dist/remote-filesystem.d.ts +33 -0
  163. package/dist/remote-filesystem.d.ts.map +1 -0
  164. package/dist/remote-filesystem.js +280 -0
  165. package/dist/remote-filesystem.js.map +1 -0
  166. package/dist/repo-asset-authority.js.map +1 -1
  167. package/dist/request-preflight.d.ts +11 -2
  168. package/dist/request-preflight.d.ts.map +1 -1
  169. package/dist/request-preflight.js +36 -13
  170. package/dist/request-preflight.js.map +1 -1
  171. package/dist/retry-command-specs.d.ts.map +1 -1
  172. package/dist/retry-command-specs.js +2 -0
  173. package/dist/retry-command-specs.js.map +1 -1
  174. package/dist/run-applicability.d.ts +74 -0
  175. package/dist/run-applicability.d.ts.map +1 -0
  176. package/dist/run-applicability.js +72 -0
  177. package/dist/run-applicability.js.map +1 -0
  178. package/dist/run-detail-projections.d.ts +39 -0
  179. package/dist/run-detail-projections.d.ts.map +1 -0
  180. package/dist/run-detail-projections.js +64 -0
  181. package/dist/run-detail-projections.js.map +1 -0
  182. package/dist/run-detail-response.d.ts +7 -0
  183. package/dist/run-detail-response.d.ts.map +1 -0
  184. package/dist/run-detail-response.js +23 -0
  185. package/dist/run-detail-response.js.map +1 -0
  186. package/dist/run-facts-projection.d.ts +22 -0
  187. package/dist/run-facts-projection.d.ts.map +1 -0
  188. package/dist/run-facts-projection.js +86 -0
  189. package/dist/run-facts-projection.js.map +1 -0
  190. package/dist/runtime-replacement-stop.d.ts +25 -0
  191. package/dist/runtime-replacement-stop.d.ts.map +1 -0
  192. package/dist/runtime-replacement-stop.js +145 -0
  193. package/dist/runtime-replacement-stop.js.map +1 -0
  194. package/dist/settings-command.d.ts +1 -0
  195. package/dist/settings-command.d.ts.map +1 -1
  196. package/dist/settings-command.js +27 -21
  197. package/dist/settings-command.js.map +1 -1
  198. package/dist/settings-service.d.ts +7 -7
  199. package/dist/settings-service.d.ts.map +1 -1
  200. package/dist/settings-service.js +3 -3
  201. package/dist/settings-service.js.map +1 -1
  202. package/dist/setup-client-pty.d.ts +14 -0
  203. package/dist/setup-client-pty.d.ts.map +1 -0
  204. package/dist/setup-client-pty.js +61 -0
  205. package/dist/setup-client-pty.js.map +1 -0
  206. package/dist/setup-device-code-disclosure.d.ts +15 -0
  207. package/dist/setup-device-code-disclosure.d.ts.map +1 -0
  208. package/dist/setup-device-code-disclosure.js +52 -0
  209. package/dist/setup-device-code-disclosure.js.map +1 -0
  210. package/dist/setup-job-reducer.d.ts.map +1 -1
  211. package/dist/setup-job-reducer.js +1 -0
  212. package/dist/setup-job-reducer.js.map +1 -1
  213. package/dist/setup-job-store.d.ts +275 -75
  214. package/dist/setup-job-store.d.ts.map +1 -1
  215. package/dist/setup-job-store.js.map +1 -1
  216. package/dist/setup-job-support.js.map +1 -1
  217. package/dist/setup-jobs.d.ts +517 -137
  218. package/dist/setup-jobs.d.ts.map +1 -1
  219. package/dist/setup-jobs.js +68 -118
  220. package/dist/setup-jobs.js.map +1 -1
  221. package/dist/setup-lifecycle-binding.d.ts +7 -0
  222. package/dist/setup-lifecycle-binding.d.ts.map +1 -1
  223. package/dist/setup-lifecycle-binding.js +6 -0
  224. package/dist/setup-lifecycle-binding.js.map +1 -1
  225. package/dist/setup-login-child-lifecycle.d.ts +13 -0
  226. package/dist/setup-login-child-lifecycle.d.ts.map +1 -0
  227. package/dist/setup-login-child-lifecycle.js +45 -0
  228. package/dist/setup-login-child-lifecycle.js.map +1 -0
  229. package/dist/setup-login-inline.d.ts +11 -12
  230. package/dist/setup-login-inline.d.ts.map +1 -1
  231. package/dist/setup-login-inline.js +26 -15
  232. package/dist/setup-login-inline.js.map +1 -1
  233. package/dist/setup-login-permit.d.ts +10 -0
  234. package/dist/setup-login-permit.d.ts.map +1 -0
  235. package/dist/setup-login-permit.js +52 -0
  236. package/dist/setup-login-permit.js.map +1 -0
  237. package/dist/setup-login-protocol.d.ts.map +1 -1
  238. package/dist/setup-login-protocol.js +9 -2
  239. package/dist/setup-login-protocol.js.map +1 -1
  240. package/dist/setup-login-runner.d.ts +1 -0
  241. package/dist/setup-login-runner.d.ts.map +1 -1
  242. package/dist/setup-login-runner.js +20 -31
  243. package/dist/setup-login-runner.js.map +1 -1
  244. package/dist/setup-supervisor.d.ts.map +1 -1
  245. package/dist/setup-supervisor.js.map +1 -1
  246. package/dist/terminal-run-output.d.ts +12 -0
  247. package/dist/terminal-run-output.d.ts.map +1 -0
  248. package/dist/terminal-run-output.js +33 -0
  249. package/dist/terminal-run-output.js.map +1 -0
  250. package/dist/thread-delivery.d.ts.map +1 -1
  251. package/dist/thread-delivery.js +4 -3
  252. package/dist/thread-delivery.js.map +1 -1
  253. package/dist/thread-execution-workspace.d.ts +15 -0
  254. package/dist/thread-execution-workspace.d.ts.map +1 -1
  255. package/dist/thread-execution-workspace.js +39 -5
  256. package/dist/thread-execution-workspace.js.map +1 -1
  257. package/dist/thread-turn-services.d.ts +104 -0
  258. package/dist/thread-turn-services.d.ts.map +1 -0
  259. package/dist/thread-turn-services.js +27 -0
  260. package/dist/thread-turn-services.js.map +1 -0
  261. package/package.json +23 -23
@@ -1,13 +1,22 @@
1
1
  import type { AdapterRegistry } from "@claudexor/core";
2
2
  import type { ResourceStore } from "@claudexor/daemon";
3
3
  import type { HarnessStatus } from "@claudexor/gateway";
4
- import type { AccessProfile, ControlRunStartRequest } from "@claudexor/schema";
4
+ import { type AccessProfile, type ControlRunStartRequest, type GitCapability } from "@claudexor/schema";
5
5
  interface RunRequirementsPreflightDependencies {
6
6
  statusAll?: (cwd: string) => Promise<Array<Pick<HarnessStatus, "id" | "status" | "enabledIntents">>>;
7
7
  registry?: AdapterRegistry;
8
8
  accessDefault?: (cwd: string) => AccessProfile;
9
+ gitCapability?: () => Promise<GitCapability>;
10
+ requiresGit?: (request: ControlRunStartRequest) => boolean;
9
11
  }
12
+ export interface RunRequirementsPreflightPolicy {
13
+ /** Thread turns defer Git to the durable daemon job; direct runs keep eager admission. */
14
+ git?: "eager" | "durable_job";
15
+ }
16
+ /** Canonical Git admission used both eagerly by direct runs and immediately
17
+ * pre-provider by durable thread jobs. */
18
+ export declare function preflightRunGitRequirement(request: ControlRunStartRequest, dependencies?: Pick<RunRequirementsPreflightDependencies, "gitCapability" | "requiresGit">): Promise<void>;
10
19
  /** Refuse requests that no selected lane can satisfy before a run or turn is created. */
11
- export declare function createRunRequirementsPreflight(resources: Pick<ResourceStore, "resolve">, noProjectRoot: string, dependencies?: RunRequirementsPreflightDependencies): (request: ControlRunStartRequest) => Promise<void>;
20
+ export declare function createRunRequirementsPreflight(resources: Pick<ResourceStore, "resolve">, noProjectRoot: string, dependencies?: RunRequirementsPreflightDependencies, policy?: RunRequirementsPreflightPolicy): (request: ControlRunStartRequest) => Promise<void>;
12
21
  export {};
13
22
  //# sourceMappingURL=request-preflight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-preflight.d.ts","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAU,MAAM,mBAAmB,CAAC;AASvF,UAAU,oCAAoC;IAC5C,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;CAChD;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EACzC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,oCAAyC,GACtD,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAgFpD"}
1
+ {"version":3,"file":"request-preflight.d.ts","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAU3B,UAAU,oCAAoC;IAC5C,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,8BAA8B;IAC7C,0FAA0F;IAC1F,GAAG,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CAC/B;AAED;0CAC0C;AAC1C,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,sBAAsB,EAC/B,YAAY,GAAE,IAAI,CAAC,oCAAoC,EAAE,eAAe,GAAG,aAAa,CAAM,GAC7F,OAAO,CAAC,IAAI,CAAC,CAef;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EACzC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,oCAAyC,EACvD,MAAM,GAAE,8BAAmC,GAC1C,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAkFpD"}
@@ -1,15 +1,39 @@
1
1
  import { loadConfig } from "@claudexor/config";
2
2
  import { RequestRequirementsResolver } from "@claudexor/orchestrator";
3
+ import { runStartRequiresGit, } from "@claudexor/schema";
4
+ import { gitCapabilityProblem, probeGitCapability } from "@claudexor/workspace";
3
5
  import { buildGateway, buildRegistry } from "./registry.js";
4
6
  const modeIntent = {
5
7
  agent: "implement",
6
8
  ask: "explain",
7
9
  plan: "plan",
8
10
  };
11
+ /** Canonical Git admission used both eagerly by direct runs and immediately
12
+ * pre-provider by durable thread jobs. */
13
+ export async function preflightRunGitRequirement(request, dependencies = {}) {
14
+ if (!(dependencies.requiresGit ?? runStartRequiresGit)(request))
15
+ return;
16
+ const git = await (dependencies.gitCapability ?? probeGitCapability)();
17
+ const blocker = gitCapabilityProblem(git);
18
+ if (!blocker)
19
+ return;
20
+ throw Object.assign(new Error(blocker.reason), {
21
+ status: 503,
22
+ code: blocker.code,
23
+ retryable: true,
24
+ requiredActions: [blocker.remediation ?? "Install Git and retry."],
25
+ context: {
26
+ capability: "git",
27
+ capabilityStatus: git.status,
28
+ },
29
+ });
30
+ }
9
31
  /** Refuse requests that no selected lane can satisfy before a run or turn is created. */
10
- export function createRunRequirementsPreflight(resources, noProjectRoot, dependencies = {}) {
32
+ export function createRunRequirementsPreflight(resources, noProjectRoot, dependencies = {}, policy = {}) {
11
33
  const requirements = new RequestRequirementsResolver();
12
34
  return async (request) => {
35
+ if ((policy.git ?? "eager") === "eager")
36
+ await preflightRunGitRequirement(request, dependencies);
13
37
  if ((request.attachments?.length ?? 0) === 0 && request.browser !== true)
14
38
  return;
15
39
  const cwd = request.scope.kind === "project" ? request.scope.root : noProjectRoot;
@@ -35,19 +59,18 @@ export function createRunRequirementsPreflight(resources, noProjectRoot, depende
35
59
  throw requestError(`unknown harness lane: ${harnessId}`, 400, "harness_unavailable");
36
60
  return { harnessId, manifest: await adapter.discover() };
37
61
  }));
38
- const compatibleManifests = [];
39
- for (const { harnessId, manifest } of manifests) {
40
- const refusal = requirements.attachmentRefusal(harnessId, attachments, manifest.capability_profile.attachment_inputs);
41
- if (refusal) {
42
- if (explicitPool)
43
- throw requestError(refusal, 400, "attachment_pool_unsupported");
44
- continue;
45
- }
46
- compatibleManifests.push({ harnessId, manifest });
47
- }
48
- if (compatibleManifests.length === 0) {
49
- throw requestError("no eligible harness lane can receive every required attachment", 400, "attachment_pool_unsupported");
62
+ const attachmentAdmission = requirements.resolveAttachmentPool(explicitPool ? "explicit" : "auto", attachments, manifests.map(({ harnessId, manifest }) => ({
63
+ harnessId,
64
+ declarations: manifest.capability_profile.attachment_inputs,
65
+ available: true,
66
+ })));
67
+ if (attachmentAdmission.outcome === "refused") {
68
+ throw requestError(attachmentAdmission.message ??
69
+ "no eligible harness lane can receive every required attachment", 400, "attachment_pool_unsupported");
50
70
  }
71
+ const compatibleManifests = attachmentAdmission.admittedHarnessIds
72
+ .map((harnessId) => manifests.find((entry) => entry.harnessId === harnessId))
73
+ .filter((entry) => entry !== undefined);
51
74
  if (request.browser !== true)
52
75
  return;
53
76
  const access = intent === "implement"
@@ -1 +1 @@
1
- {"version":3,"file":"request-preflight.js","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-preflight.js","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry-command-specs.d.ts","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAmBxD,CAAC"}
1
+ {"version":3,"file":"retry-command-specs.d.ts","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAqBxD,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export const RETRY_COMMAND_SPECS = [
2
2
  {
3
3
  id: "retry",
4
+ positionalPatterns: [{ min: 1, max: 1 }],
4
5
  usageArgs: "<run_id>",
5
6
  summary: "Exact Retry with the immutable original request and fresh preflight",
6
7
  flags: ["json"],
@@ -10,6 +11,7 @@ export const RETRY_COMMAND_SPECS = [
10
11
  },
11
12
  {
12
13
  id: "run-again",
14
+ positionalPatterns: [{ min: 1, max: 1 }],
13
15
  usageArgs: "<run_id>",
14
16
  summary: "Print an editable draft copied from a prior run",
15
17
  flags: ["json"],
@@ -1 +1 @@
1
- {"version":3,"file":"retry-command-specs.js","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D;QACE,EAAE,EAAE,OAAO;QACX,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,qEAAqE;QAC9E,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;IACD;QACE,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC"}
1
+ {"version":3,"file":"retry-command-specs.js","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D;QACE,EAAE,EAAE,OAAO;QACX,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACxC,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,qEAAqE;QAC9E,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;IACD;QACE,EAAE,EAAE,WAAW;QACf,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACxC,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { type GitCapability, type RunGitApplicabilityMatrix } from "@claudexor/schema";
2
+ export interface RunApplicabilityDependencies {
3
+ gitCapability?: () => Promise<GitCapability>;
4
+ protectedPaths?: (repoRoot: string) => readonly string[];
5
+ }
6
+ /**
7
+ * Project one complete matrix through the same predicate the actual thread
8
+ * resolver and run preflight use. Clients only select a cell from their exact
9
+ * outgoing wire; they never reproduce Git/worktree business rules.
10
+ */
11
+ export declare function buildRunApplicabilityMatrix(input: {
12
+ repoRoot: string;
13
+ protectedPaths: readonly string[];
14
+ git: GitCapability;
15
+ }): RunGitApplicabilityMatrix;
16
+ /** Root-scoped service behind GET /run-applicability. */
17
+ export declare function projectRunApplicability(requestedRoot: string, dependencies?: RunApplicabilityDependencies): Promise<{
18
+ repoRoot: string;
19
+ git: {
20
+ status: "available" | "developer_tools_stub" | "failed" | "missing";
21
+ version: string | null;
22
+ detail: string | null;
23
+ remediation: string | null;
24
+ };
25
+ matrix: {
26
+ in_place: {
27
+ read_only: {
28
+ applicable: boolean;
29
+ requiresGit: boolean;
30
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
31
+ reason: string | null;
32
+ remediation: string | null;
33
+ };
34
+ agent_convergence: {
35
+ applicable: boolean;
36
+ requiresGit: boolean;
37
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
38
+ reason: string | null;
39
+ remediation: string | null;
40
+ };
41
+ agent_other: {
42
+ applicable: boolean;
43
+ requiresGit: boolean;
44
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
45
+ reason: string | null;
46
+ remediation: string | null;
47
+ };
48
+ };
49
+ isolated: {
50
+ read_only: {
51
+ applicable: boolean;
52
+ requiresGit: boolean;
53
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
54
+ reason: string | null;
55
+ remediation: string | null;
56
+ };
57
+ agent_convergence: {
58
+ applicable: boolean;
59
+ requiresGit: boolean;
60
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
61
+ reason: string | null;
62
+ remediation: string | null;
63
+ };
64
+ agent_other: {
65
+ applicable: boolean;
66
+ requiresGit: boolean;
67
+ code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
68
+ reason: string | null;
69
+ remediation: string | null;
70
+ };
71
+ };
72
+ };
73
+ }>;
74
+ //# sourceMappingURL=run-applicability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-applicability.d.ts","sourceRoot":"","sources":["../src/run-applicability.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAElB,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CAC1D;AA+BD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,aAAa,CAAC;CACpB,GAAG,yBAAyB,CAqB5B;AAED,yDAAyD;AACzD,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,4BAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAehD"}
@@ -0,0 +1,72 @@
1
+ import { loadConfig } from "@claudexor/config";
2
+ import { normalizeExistingProjectRoot } from "@claudexor/control-api";
3
+ import { ControlRunApplicabilityResponse, ThreadWorkspace, } from "@claudexor/schema";
4
+ import { gitCapabilityProblem, probeGitCapability } from "@claudexor/workspace";
5
+ import { threadRunStartRequiresGit } from "./thread-execution-workspace.js";
6
+ function requestFor(repoRoot, shape) {
7
+ const base = {
8
+ prompt: "run applicability projection",
9
+ scope: { kind: "project", root: repoRoot, context: "auto" },
10
+ execution: { isolation: shape === "read_only" ? "envelope" : "live" },
11
+ };
12
+ if (shape === "read_only")
13
+ return { ...base, mode: "ask" };
14
+ if (shape === "agent_convergence")
15
+ return { ...base, mode: "agent", untilClean: true };
16
+ return { ...base, mode: "agent" };
17
+ }
18
+ function cell(requiresGit, git) {
19
+ const blocker = gitCapabilityProblem(git);
20
+ if (!requiresGit || blocker === null) {
21
+ return {
22
+ applicable: true,
23
+ requiresGit,
24
+ code: null,
25
+ reason: null,
26
+ remediation: null,
27
+ };
28
+ }
29
+ return {
30
+ applicable: false,
31
+ requiresGit: true,
32
+ ...blocker,
33
+ };
34
+ }
35
+ /**
36
+ * Project one complete matrix through the same predicate the actual thread
37
+ * resolver and run preflight use. Clients only select a cell from their exact
38
+ * outgoing wire; they never reproduce Git/worktree business rules.
39
+ */
40
+ export function buildRunApplicabilityMatrix(input) {
41
+ const workspace = (mode) => ({
42
+ workspace: ThreadWorkspace.parse({ mode }),
43
+ });
44
+ const project = (mode) => {
45
+ const thread = workspace(mode);
46
+ const projectCell = (shape) => cell(threadRunStartRequiresGit(requestFor(input.repoRoot, shape), thread, input.protectedPaths), input.git);
47
+ return {
48
+ read_only: projectCell("read_only"),
49
+ agent_convergence: projectCell("agent_convergence"),
50
+ agent_other: projectCell("agent_other"),
51
+ };
52
+ };
53
+ return {
54
+ in_place: project("in_place"),
55
+ isolated: project("isolated"),
56
+ };
57
+ }
58
+ /** Root-scoped service behind GET /run-applicability. */
59
+ export async function projectRunApplicability(requestedRoot, dependencies = {}) {
60
+ const repoRoot = normalizeExistingProjectRoot(requestedRoot);
61
+ const [git, protectedPaths] = await Promise.all([
62
+ (dependencies.gitCapability ?? probeGitCapability)(),
63
+ Promise.resolve(dependencies.protectedPaths?.(repoRoot) ??
64
+ loadConfig(repoRoot).project.constraints.protected_paths),
65
+ ]);
66
+ return ControlRunApplicabilityResponse.parse({
67
+ repoRoot,
68
+ git,
69
+ matrix: buildRunApplicabilityMatrix({ repoRoot, protectedPaths, git }),
70
+ });
71
+ }
72
+ //# sourceMappingURL=run-applicability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-applicability.js","sourceRoot":"","sources":["../src/run-applicability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type ControlPrimaryOutput as ControlPrimaryOutputType, type RunFailure as RunFailureType } from "@claudexor/schema";
2
+ export type PrimaryOutputPresentation = Pick<ControlPrimaryOutputType, "kind" | "path" | "text"> & {
3
+ truncated?: boolean;
4
+ };
5
+ /** Schema-validate the Control API's single primary-output owner. */
6
+ export declare function projectRunPrimaryOutput(detail: Record<string, unknown> | null): ControlPrimaryOutputType | null;
7
+ /** Inline non-patch output with an honest bounded-preview disclosure. */
8
+ export declare function presentRunPrimaryOutput(output: PrimaryOutputPresentation | null): string | null;
9
+ export type ApplyEligibilityProjection = {
10
+ eligible: boolean;
11
+ state: string | null;
12
+ reason: string | null;
13
+ requiredAction: string | null;
14
+ };
15
+ export declare function projectApplyEligibility(detail: Record<string, unknown> | null): ApplyEligibilityProjection | null;
16
+ export declare function projectRunSpendUsd(detail: Record<string, unknown> | null): number | null;
17
+ export declare function projectRunCouncil(detail: Record<string, unknown> | null): unknown;
18
+ /** Preserve only the schema-owned typed terminal failure. Every surface uses
19
+ * this projection instead of forwarding an arbitrary failure-shaped object. */
20
+ export declare function projectRunFailure(detail: Record<string, unknown> | null): RunFailureType | null;
21
+ export declare function projectRunLineage(detail: Record<string, unknown> | null): {
22
+ parentRunId: string | null;
23
+ delegatedFromRunId: string | null;
24
+ delegation: Record<string, unknown> | null;
25
+ };
26
+ export declare function projectOutcomeBanner(detail: Record<string, unknown> | null): string | null;
27
+ /** Typed description of a raised post-terminal run-detail problem for surfaces
28
+ * that must DEGRADE instead of failing the caller (MCP results, ACP turn
29
+ * results, --json outcome projections): the finished run's result survives with
30
+ * its runId, and this field discloses WHY its detail projections are absent.
31
+ * The CLI's own terminal path keeps the raise (renderCliFailure, non-zero
32
+ * exit) — there the run result IS the process outcome. */
33
+ export interface RunDetailProblem {
34
+ code: string | null;
35
+ message: string;
36
+ retryable: boolean | null;
37
+ }
38
+ export declare function describeRunDetailProblem(error: unknown): RunDetailProblem;
39
+ //# sourceMappingURL=run-detail-projections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-detail-projections.d.ts","sourceRoot":"","sources":["../src/run-detail-projections.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,IAAI,wBAAwB,EACrD,KAAK,UAAU,IAAI,cAAc,EAClC,MAAM,mBAAmB,CAAC;AAG3B,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG;IACjG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACrC,wBAAwB,GAAG,IAAI,CAGjC;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAO/F;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACrC,0BAA0B,GAAG,IAAI,CAGnC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOxF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAGjF;AAED;+EAC+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAG/F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C,CAcA;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG1F;AAED;;;;;0DAK0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAOzE"}
@@ -0,0 +1,64 @@
1
+ import { ControlPrimaryOutput, CouncilProjection, RunFailure, } from "@claudexor/schema";
2
+ import { redactSecrets } from "@claudexor/util";
3
+ /** Schema-validate the Control API's single primary-output owner. */
4
+ export function projectRunPrimaryOutput(detail) {
5
+ const parsed = ControlPrimaryOutput.safeParse(detail?.["primaryOutput"]);
6
+ return parsed.success ? parsed.data : null;
7
+ }
8
+ /** Inline non-patch output with an honest bounded-preview disclosure. */
9
+ export function presentRunPrimaryOutput(output) {
10
+ if (!output || output.kind === "patch" || typeof output.text !== "string")
11
+ return null;
12
+ const text = output.text.trim();
13
+ if (!text)
14
+ return null;
15
+ return output.truncated === true
16
+ ? `${text}\n\n[Inline preview bounded; full artifact: ${output.path}]`
17
+ : text;
18
+ }
19
+ export function projectApplyEligibility(detail) {
20
+ const value = detail?.["applyEligibility"];
21
+ return value && typeof value === "object" ? value : null;
22
+ }
23
+ export function projectRunSpendUsd(detail) {
24
+ const summary = detail?.["summary"];
25
+ const spend = summary && typeof summary === "object"
26
+ ? summary.spendUsd
27
+ : undefined;
28
+ return typeof spend === "number" && Number.isFinite(spend) ? spend : null;
29
+ }
30
+ export function projectRunCouncil(detail) {
31
+ const parsed = CouncilProjection.safeParse(detail?.["council"]);
32
+ return parsed.success ? parsed.data : null;
33
+ }
34
+ /** Preserve only the schema-owned typed terminal failure. Every surface uses
35
+ * this projection instead of forwarding an arbitrary failure-shaped object. */
36
+ export function projectRunFailure(detail) {
37
+ const parsed = RunFailure.safeParse(detail?.["failure"]);
38
+ return parsed.success ? parsed.data : null;
39
+ }
40
+ export function projectRunLineage(detail) {
41
+ const summary = detail?.["summary"] && typeof detail["summary"] === "object"
42
+ ? detail["summary"]
43
+ : null;
44
+ return {
45
+ parentRunId: typeof summary?.["parentRunId"] === "string" ? summary["parentRunId"] : null,
46
+ delegatedFromRunId: typeof summary?.["delegatedFromRunId"] === "string" ? summary["delegatedFromRunId"] : null,
47
+ delegation: summary?.["delegation"] && typeof summary["delegation"] === "object"
48
+ ? summary["delegation"]
49
+ : null,
50
+ };
51
+ }
52
+ export function projectOutcomeBanner(detail) {
53
+ const banner = detail?.["outcomeBanner"];
54
+ return typeof banner === "string" && banner.length > 0 ? banner : null;
55
+ }
56
+ export function describeRunDetailProblem(error) {
57
+ const record = error && typeof error === "object" ? error : {};
58
+ return {
59
+ code: typeof record["code"] === "string" && record["code"] ? record["code"] : null,
60
+ message: redactSecrets(error instanceof Error ? error.message : String(error)),
61
+ retryable: typeof record["retryable"] === "boolean" ? record["retryable"] : null,
62
+ };
63
+ }
64
+ //# sourceMappingURL=run-detail-projections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-detail-projections.js","sourceRoot":"","sources":["../src/run-detail-projections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ type JsonResponse = {
2
+ json(): Promise<unknown>;
3
+ };
4
+ /** Decode and schema-check a successful Control API run-detail response. */
5
+ export declare function readRunDetailResponse(response: JsonResponse): Promise<Record<string, unknown>>;
6
+ export {};
7
+ //# sourceMappingURL=run-detail-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-detail-response.d.ts","sourceRoot":"","sources":["../src/run-detail-response.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAEjD,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
@@ -0,0 +1,23 @@
1
+ import { ControlRunDetail } from "@claudexor/schema";
2
+ import { CliError } from "./cli-error.js";
3
+ /** Decode and schema-check a successful Control API run-detail response. */
4
+ export async function readRunDetailResponse(response) {
5
+ let body;
6
+ try {
7
+ body = await response.json();
8
+ }
9
+ catch {
10
+ throw invalidRunDetailResponse("run detail endpoint returned malformed JSON");
11
+ }
12
+ if (!ControlRunDetail.safeParse(body).success) {
13
+ throw invalidRunDetailResponse("run detail endpoint returned an invalid response");
14
+ }
15
+ return body;
16
+ }
17
+ function invalidRunDetailResponse(message) {
18
+ return new CliError("operational", message, {
19
+ code: "invalid_service_response",
20
+ retryable: true,
21
+ });
22
+ }
23
+ //# sourceMappingURL=run-detail-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-detail-response.js","sourceRoot":"","sources":["../src/run-detail-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAsB;IAEtB,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,wBAAwB,CAAC,6CAA6C,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,wBAAwB,CAAC,kDAAkD,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,IAA+B,CAAC;AACzC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAC/C,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE;QAC1C,IAAI,EAAE,0BAA0B;QAChC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type ExpectedRunFactsIdentity, type RunFacts as RunFactsType } from "@claudexor/schema";
2
+ import { type ApplyEligibilityProjection } from "./run-detail-projections.js";
3
+ type RunDetail = Record<string, unknown> | null;
4
+ export type { ExpectedRunFactsIdentity } from "@claudexor/schema";
5
+ /** Exact validated terminal receipt from an already-fetched run detail. */
6
+ export declare function projectRunFacts(detail: RunDetail, expected?: ExpectedRunFactsIdentity): RunFactsType | null;
7
+ /**
8
+ * Shared fields appended to both terminal machine surfaces. RunFacts is
9
+ * intentionally always present; only a genuinely missing legacy receipt
10
+ * projects to null, while present malformed data fails loudly.
11
+ */
12
+ export declare function projectTerminalDetailFields(detail: RunDetail, expected?: ExpectedRunFactsIdentity): {
13
+ outcomeBanner?: string;
14
+ applyEligibility?: ApplyEligibilityProjection;
15
+ runFacts: RunFactsType | null;
16
+ };
17
+ type YamlArtifactReader = {
18
+ readYaml(path: string): unknown;
19
+ };
20
+ /** Read the canonical immutable RunFacts artifact without reconstructing it. */
21
+ export declare function readRunFactsArtifact(reader: YamlArtifactReader, finalDir: string, expected?: ExpectedRunFactsIdentity): RunFactsType | null;
22
+ //# sourceMappingURL=run-facts-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-facts-projection.d.ts","sourceRoot":"","sources":["../src/run-facts-projection.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,IAAI,YAAY,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;AAKhD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,2EAA2E;AAC3E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,QAAQ,GAAE,wBAA6B,GACtC,YAAY,GAAG,IAAI,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,QAAQ,GAAE,wBAA6B,GACtC;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B,CAQA;AAED,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,wBAA6B,GACtC,YAAY,GAAG,IAAI,CAmBrB"}
@@ -0,0 +1,86 @@
1
+ import { lstatSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { RunFactsInvalidError, validateRunFactsReceipt, } from "@claudexor/schema";
4
+ import { projectApplyEligibility, projectOutcomeBanner, } from "./run-detail-projections.js";
5
+ /** Exact validated terminal receipt from an already-fetched run detail. */
6
+ export function projectRunFacts(detail, expected = {}) {
7
+ if (!detail)
8
+ return null;
9
+ const value = detail["runFacts"];
10
+ if (value === null || value === undefined)
11
+ return null;
12
+ return validateRunFactsReceipt(value, expectedIdentityFromDetail(detail, expected));
13
+ }
14
+ /**
15
+ * Shared fields appended to both terminal machine surfaces. RunFacts is
16
+ * intentionally always present; only a genuinely missing legacy receipt
17
+ * projects to null, while present malformed data fails loudly.
18
+ */
19
+ export function projectTerminalDetailFields(detail, expected = {}) {
20
+ const outcomeBanner = projectOutcomeBanner(detail);
21
+ const applyEligibility = projectApplyEligibility(detail);
22
+ return {
23
+ ...(outcomeBanner ? { outcomeBanner } : {}),
24
+ ...(applyEligibility ? { applyEligibility } : {}),
25
+ runFacts: projectRunFacts(detail, expected),
26
+ };
27
+ }
28
+ /** Read the canonical immutable RunFacts artifact without reconstructing it. */
29
+ export function readRunFactsArtifact(reader, finalDir, expected = {}) {
30
+ const path = join(finalDir, "run_facts.yaml");
31
+ const finalDirStat = lstatOrNull(finalDir);
32
+ if (finalDirStat === null)
33
+ return null;
34
+ if (!finalDirStat.isDirectory() || finalDirStat.isSymbolicLink()) {
35
+ throw new RunFactsInvalidError();
36
+ }
37
+ const artifactStat = lstatOrNull(path);
38
+ if (artifactStat === null)
39
+ return null;
40
+ if (!artifactStat.isFile() || artifactStat.isSymbolicLink())
41
+ throw new RunFactsInvalidError();
42
+ let raw;
43
+ try {
44
+ raw = reader.readYaml(path);
45
+ }
46
+ catch {
47
+ throw new RunFactsInvalidError();
48
+ }
49
+ return validateRunFactsReceipt(raw, expected);
50
+ }
51
+ function expectedIdentityFromDetail(detail, expected) {
52
+ const summary = detail["summary"];
53
+ if (!summary || typeof summary !== "object")
54
+ return expected;
55
+ const record = summary;
56
+ const summaryRunId = typeof record["runId"] === "string" ? record["runId"] : undefined;
57
+ const summaryTaskId = typeof record["taskId"] === "string" ? record["taskId"] : undefined;
58
+ if ((expected.runId !== undefined &&
59
+ summaryRunId !== undefined &&
60
+ expected.runId !== summaryRunId) ||
61
+ (expected.taskId !== undefined &&
62
+ summaryTaskId !== undefined &&
63
+ expected.taskId !== summaryTaskId)) {
64
+ throw new RunFactsInvalidError();
65
+ }
66
+ return {
67
+ runId: expected.runId ?? summaryRunId,
68
+ taskId: expected.taskId ?? summaryTaskId,
69
+ ...(expected.lifecycle !== undefined ? { lifecycle: expected.lifecycle } : {}),
70
+ };
71
+ }
72
+ function lstatOrNull(path) {
73
+ try {
74
+ return lstatSync(path);
75
+ }
76
+ catch (error) {
77
+ if (error &&
78
+ typeof error === "object" &&
79
+ "code" in error &&
80
+ error.code === "ENOENT") {
81
+ return null;
82
+ }
83
+ throw new RunFactsInvalidError();
84
+ }
85
+ }
86
+ //# sourceMappingURL=run-facts-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-facts-projection.js","sourceRoot":"","sources":["../src/run-facts-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type AwaitDaemonTerminationOptions, type DaemonTerminationOutcome, type DaemonLeaseOwner, DaemonClient, awaitDaemonTermination } from "@claudexor/daemon";
2
+ interface RuntimeReplacementStopDeps {
3
+ socketPath(): string;
4
+ readToken(): string | null;
5
+ socketAlive(path: string): Promise<boolean>;
6
+ leaseOwner(path: string): DaemonLeaseOwner | null;
7
+ client(path: string, token: string): Pick<DaemonClient, "shutdownForRuntimeReplacement">;
8
+ awaitTermination(path: string, options: AwaitDaemonTerminationOptions): ReturnType<typeof awaitDaemonTermination>;
9
+ write(line: string): void;
10
+ }
11
+ /** One owner for the admission/termination uncertainty boundary used by both
12
+ * local and remote runtime replacement. Only a proven
13
+ * `{ok:true,fenced:true,targetBound:true}` receipt grants
14
+ * signal authority for the pre-RPC writer-lease owner.
15
+ * A lost, legacy, or untyped response may passively prove that the pinned
16
+ * daemon exited, but can never turn into a kill. */
17
+ export declare function admitAndAwaitRuntimeReplacementStop(requestAdmission: () => Promise<unknown>, awaitTermination: (options: AwaitDaemonTerminationOptions) => Promise<DaemonTerminationOutcome>, expectedOwner: DaemonLeaseOwner): Promise<DaemonTerminationOutcome>;
18
+ /** Handle `claudexord --stop`: the identity-proven, admission-safe shutdown the
19
+ * macOS installer runs before an atomic pointer swap. Unlike explicit operator
20
+ * shutdown, this asks the daemon to atomically prove idle and fence every ingress
21
+ * before stopping. The pinned termination proof remains authoritative when the
22
+ * accepted RPC response is lost as the socket closes. */
23
+ export declare function runStopIfRequested(argv: readonly string[], deps?: RuntimeReplacementStopDeps): Promise<boolean>;
24
+ export {};
25
+ //# sourceMappingURL=runtime-replacement-stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-replacement-stop.d.ts","sourceRoot":"","sources":["../src/runtime-replacement-stop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,YAAY,EAGZ,sBAAsB,EAIvB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,0BAA0B;IAClC,UAAU,IAAI,MAAM,CAAC;IACrB,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,+BAA+B,CAAC,CAAC;IACzF,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,6BAA6B,GACrC,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAoED;;;;;oDAKoD;AACpD,wBAAsB,mCAAmC,CACvD,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EACxC,gBAAgB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,wBAAwB,CAAC,EAC/F,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAgCnC;AAED;;;;yDAIyD;AACzD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,0BAA2C,GAChD,OAAO,CAAC,OAAO,CAAC,CAwElB"}