@claudexor/cli 1.0.1 → 2.1.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 (213) hide show
  1. package/dist/acp-surface-runner.d.ts +17 -0
  2. package/dist/acp-surface-runner.d.ts.map +1 -0
  3. package/dist/acp-surface-runner.js +187 -0
  4. package/dist/acp-surface-runner.js.map +1 -0
  5. package/dist/args.d.ts.map +1 -1
  6. package/dist/args.js.map +1 -1
  7. package/dist/bridge-serve.d.ts +3 -0
  8. package/dist/bridge-serve.d.ts.map +1 -0
  9. package/dist/bridge-serve.js +39 -0
  10. package/dist/bridge-serve.js.map +1 -0
  11. package/dist/capabilities.d.ts.map +1 -1
  12. package/dist/capabilities.js +12 -3
  13. package/dist/capabilities.js.map +1 -1
  14. package/dist/claude-oauth-usage.d.ts +33 -0
  15. package/dist/claude-oauth-usage.d.ts.map +1 -0
  16. package/dist/claude-oauth-usage.js +190 -0
  17. package/dist/claude-oauth-usage.js.map +1 -0
  18. package/dist/claude-statusline.d.ts +25 -0
  19. package/dist/claude-statusline.d.ts.map +1 -0
  20. package/dist/claude-statusline.js +259 -0
  21. package/dist/claude-statusline.js.map +1 -0
  22. package/dist/claudexord.js +346 -543
  23. package/dist/claudexord.js.map +1 -1
  24. package/dist/cli-io.d.ts +8 -9
  25. package/dist/cli-io.d.ts.map +1 -1
  26. package/dist/cli-io.js +11 -7
  27. package/dist/cli-io.js.map +1 -1
  28. package/dist/cli.js +475 -516
  29. package/dist/cli.js.map +1 -1
  30. package/dist/codex-quota-source.d.ts +11 -0
  31. package/dist/codex-quota-source.d.ts.map +1 -0
  32. package/dist/codex-quota-source.js +181 -0
  33. package/dist/codex-quota-source.js.map +1 -0
  34. package/dist/command-flags.d.ts +18 -0
  35. package/dist/command-flags.d.ts.map +1 -0
  36. package/dist/command-flags.js +124 -0
  37. package/dist/command-flags.js.map +1 -0
  38. package/dist/command-registry.d.ts +2 -40
  39. package/dist/command-registry.d.ts.map +1 -1
  40. package/dist/command-registry.js +74 -164
  41. package/dist/command-registry.js.map +1 -1
  42. package/dist/control-services.d.ts +2483 -0
  43. package/dist/control-services.d.ts.map +1 -0
  44. package/dist/control-services.js +437 -0
  45. package/dist/control-services.js.map +1 -0
  46. package/dist/credential-commands.d.ts +9 -0
  47. package/dist/credential-commands.d.ts.map +1 -0
  48. package/dist/credential-commands.js +224 -0
  49. package/dist/credential-commands.js.map +1 -0
  50. package/dist/daemon-lifecycle.d.ts +7 -3
  51. package/dist/daemon-lifecycle.d.ts.map +1 -1
  52. package/dist/daemon-lifecycle.js +40 -12
  53. package/dist/daemon-lifecycle.js.map +1 -1
  54. package/dist/daemon-run.d.ts +2 -0
  55. package/dist/daemon-run.d.ts.map +1 -1
  56. package/dist/daemon-run.js +62 -14
  57. package/dist/daemon-run.js.map +1 -1
  58. package/dist/daemon-runtime-shutdown.d.ts +58 -0
  59. package/dist/daemon-runtime-shutdown.d.ts.map +1 -0
  60. package/dist/daemon-runtime-shutdown.js +142 -0
  61. package/dist/daemon-runtime-shutdown.js.map +1 -0
  62. package/dist/decision.d.ts.map +1 -1
  63. package/dist/decision.js +12 -3
  64. package/dist/decision.js.map +1 -1
  65. package/dist/live.d.ts +29 -0
  66. package/dist/live.d.ts.map +1 -1
  67. package/dist/live.js +117 -6
  68. package/dist/live.js.map +1 -1
  69. package/dist/local-attachment.d.ts +14 -0
  70. package/dist/local-attachment.d.ts.map +1 -0
  71. package/dist/local-attachment.js +67 -0
  72. package/dist/local-attachment.js.map +1 -0
  73. package/dist/mcp-runner.d.ts +4 -15
  74. package/dist/mcp-runner.d.ts.map +1 -1
  75. package/dist/mcp-runner.js +273 -145
  76. package/dist/mcp-runner.js.map +1 -1
  77. package/dist/native-login.d.ts +21 -0
  78. package/dist/native-login.d.ts.map +1 -0
  79. package/dist/native-login.js +111 -0
  80. package/dist/native-login.js.map +1 -0
  81. package/dist/ops-commands.d.ts +8 -6
  82. package/dist/ops-commands.d.ts.map +1 -1
  83. package/dist/ops-commands.js +250 -168
  84. package/dist/ops-commands.js.map +1 -1
  85. package/dist/orchestrate-options.d.ts.map +1 -1
  86. package/dist/orchestrate-options.js +1 -1
  87. package/dist/orchestrate-options.js.map +1 -1
  88. package/dist/orphan-reaper.d.ts +4 -5
  89. package/dist/orphan-reaper.d.ts.map +1 -1
  90. package/dist/orphan-reaper.js +29 -56
  91. package/dist/orphan-reaper.js.map +1 -1
  92. package/dist/orphan-sweeper.d.ts +1 -2
  93. package/dist/orphan-sweeper.d.ts.map +1 -1
  94. package/dist/orphan-sweeper.js +29 -48
  95. package/dist/orphan-sweeper.js.map +1 -1
  96. package/dist/plugins.d.ts.map +1 -1
  97. package/dist/plugins.js +196 -64
  98. package/dist/plugins.js.map +1 -1
  99. package/dist/primary-output.d.ts.map +1 -1
  100. package/dist/primary-output.js.map +1 -1
  101. package/dist/profile-registration.d.ts +15 -0
  102. package/dist/profile-registration.d.ts.map +1 -0
  103. package/dist/profile-registration.js +68 -0
  104. package/dist/profile-registration.js.map +1 -0
  105. package/dist/project-command.d.ts +3 -0
  106. package/dist/project-command.d.ts.map +1 -0
  107. package/dist/project-command.js +87 -0
  108. package/dist/project-command.js.map +1 -0
  109. package/dist/quota-command.d.ts +3 -0
  110. package/dist/quota-command.d.ts.map +1 -0
  111. package/dist/quota-command.js +59 -0
  112. package/dist/quota-command.js.map +1 -0
  113. package/dist/registry.d.ts +1 -1
  114. package/dist/registry.d.ts.map +1 -1
  115. package/dist/registry.js +16 -4
  116. package/dist/registry.js.map +1 -1
  117. package/dist/release.d.ts.map +1 -1
  118. package/dist/release.js +15 -3
  119. package/dist/release.js.map +1 -1
  120. package/dist/repl.d.ts +3 -8
  121. package/dist/repl.d.ts.map +1 -1
  122. package/dist/repl.js +23 -122
  123. package/dist/repl.js.map +1 -1
  124. package/dist/request-preflight.d.ts +13 -0
  125. package/dist/request-preflight.d.ts.map +1 -0
  126. package/dist/request-preflight.js +81 -0
  127. package/dist/request-preflight.js.map +1 -0
  128. package/dist/retention-service.d.ts +24 -0
  129. package/dist/retention-service.d.ts.map +1 -0
  130. package/dist/retention-service.js +100 -0
  131. package/dist/retention-service.js.map +1 -0
  132. package/dist/retry-command-specs.d.ts +3 -0
  133. package/dist/retry-command-specs.d.ts.map +1 -0
  134. package/dist/retry-command-specs.js +21 -0
  135. package/dist/retry-command-specs.js.map +1 -0
  136. package/dist/retry-command.d.ts +4 -0
  137. package/dist/retry-command.d.ts.map +1 -0
  138. package/dist/retry-command.js +57 -0
  139. package/dist/retry-command.js.map +1 -0
  140. package/dist/review-command.d.ts.map +1 -1
  141. package/dist/review-command.js +47 -12
  142. package/dist/review-command.js.map +1 -1
  143. package/dist/run-options.d.ts +2 -2
  144. package/dist/run-options.d.ts.map +1 -1
  145. package/dist/run-options.js +27 -5
  146. package/dist/run-options.js.map +1 -1
  147. package/dist/settings-command.d.ts.map +1 -1
  148. package/dist/settings-command.js +143 -188
  149. package/dist/settings-command.js.map +1 -1
  150. package/dist/settings-service.d.ts +50 -0
  151. package/dist/settings-service.d.ts.map +1 -1
  152. package/dist/settings-service.js +67 -1
  153. package/dist/settings-service.js.map +1 -1
  154. package/dist/setup-job-reducer.d.ts +9 -0
  155. package/dist/setup-job-reducer.d.ts.map +1 -0
  156. package/dist/setup-job-reducer.js +290 -0
  157. package/dist/setup-job-reducer.js.map +1 -0
  158. package/dist/setup-job-store.d.ts +250 -0
  159. package/dist/setup-job-store.d.ts.map +1 -0
  160. package/dist/setup-job-store.js +359 -0
  161. package/dist/setup-job-store.js.map +1 -0
  162. package/dist/setup-job-support.d.ts +27 -0
  163. package/dist/setup-job-support.d.ts.map +1 -0
  164. package/dist/setup-job-support.js +141 -0
  165. package/dist/setup-job-support.js.map +1 -0
  166. package/dist/setup-jobs.d.ts +437 -22
  167. package/dist/setup-jobs.d.ts.map +1 -1
  168. package/dist/setup-jobs.js +813 -423
  169. package/dist/setup-jobs.js.map +1 -1
  170. package/dist/setup-lifecycle-binding.d.ts +40 -0
  171. package/dist/setup-lifecycle-binding.d.ts.map +1 -0
  172. package/dist/setup-lifecycle-binding.js +159 -0
  173. package/dist/setup-lifecycle-binding.js.map +1 -0
  174. package/dist/setup-login-protocol.d.ts +13 -0
  175. package/dist/setup-login-protocol.d.ts.map +1 -0
  176. package/dist/setup-login-protocol.js +179 -0
  177. package/dist/setup-login-protocol.js.map +1 -0
  178. package/dist/setup-login-runner.d.ts +20 -0
  179. package/dist/setup-login-runner.d.ts.map +1 -0
  180. package/dist/setup-login-runner.js +225 -0
  181. package/dist/setup-login-runner.js.map +1 -0
  182. package/dist/setup-supervisor.d.ts +53 -0
  183. package/dist/setup-supervisor.d.ts.map +1 -0
  184. package/dist/setup-supervisor.js +177 -0
  185. package/dist/setup-supervisor.js.map +1 -0
  186. package/dist/spec.d.ts +9 -20
  187. package/dist/spec.d.ts.map +1 -1
  188. package/dist/spec.js +49 -21
  189. package/dist/spec.js.map +1 -1
  190. package/dist/thread-delivery.d.ts +18 -0
  191. package/dist/thread-delivery.d.ts.map +1 -0
  192. package/dist/thread-delivery.js +67 -0
  193. package/dist/thread-delivery.js.map +1 -0
  194. package/dist/thread-select.d.ts +9 -0
  195. package/dist/thread-select.d.ts.map +1 -0
  196. package/dist/thread-select.js +12 -0
  197. package/dist/thread-select.js.map +1 -0
  198. package/dist/trust-command.d.ts.map +1 -1
  199. package/dist/trust-command.js +69 -61
  200. package/dist/trust-command.js.map +1 -1
  201. package/dist/trust-services.d.ts +5 -6
  202. package/dist/trust-services.d.ts.map +1 -1
  203. package/dist/trust-services.js +42 -13
  204. package/dist/trust-services.js.map +1 -1
  205. package/package.json +24 -22
  206. package/dist/attachment-resolver.d.ts +0 -11
  207. package/dist/attachment-resolver.d.ts.map +0 -1
  208. package/dist/attachment-resolver.js +0 -61
  209. package/dist/attachment-resolver.js.map +0 -1
  210. package/dist/settings-display.d.ts +0 -3
  211. package/dist/settings-display.d.ts.map +0 -1
  212. package/dist/settings-display.js +0 -33
  213. package/dist/settings-display.js.map +0 -1
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { realpathSync } from "node:fs";
4
+ import { dirname, resolve, sep } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { defaultProcessGroupService, } from "@claudexor/core";
7
+ import { nativeLoginEnv } from "./native-login.js";
8
+ import { SETUP_LOGIN_PROTOCOL_VERSION, atomicPrivateJson, readLoginManifest, readRunnerPermit, verifyExecutableEvidence, } from "./setup-login-protocol.js";
9
+ const PERMIT_POLL_MS = 50;
10
+ /**
11
+ * Terminal-visible bootstrap. It creates a detached worker process group and
12
+ * waits for that worker, but the worker cannot start the vendor command until
13
+ * claudexord has durably recorded its exact group handle and issued a permit.
14
+ */
15
+ export async function runSetupLogin(manifestPath, options = {}) {
16
+ const manifest = validateManifest(manifestPath);
17
+ const spawnProcess = options.spawnProcess ?? spawn;
18
+ const runnerPath = options.runnerPath ?? fileURLToPath(import.meta.url);
19
+ const worker = spawnProcess(process.execPath, [runnerPath, "--worker", resolve(manifestPath)], {
20
+ cwd: manifest.cwd,
21
+ env: runnerBootstrapEnv(),
22
+ detached: true,
23
+ stdio: "inherit",
24
+ });
25
+ const result = await waitForExit(worker);
26
+ return result.code === 0 && result.signal === null ? 0 : 1;
27
+ }
28
+ /** Worker entrypoint. Exported so the permit ordering can be fault-injected. */
29
+ export async function runSetupLoginWorker(manifestPath, options = {}) {
30
+ const manifest = validateManifest(manifestPath);
31
+ const now = options.now ?? (() => new Date());
32
+ const sleep = options.sleep ?? ((ms) => new Promise((done) => setTimeout(done, ms)));
33
+ const spawnProcess = options.spawnProcess ?? spawn;
34
+ const processGroups = options.processGroupService ?? defaultProcessGroupService;
35
+ const captured = processGroups.captureLeader(options.selfPid ?? process.pid);
36
+ if (captured.status !== "known") {
37
+ throw new Error(describeCaptureFailure(captured));
38
+ }
39
+ const observedAt = now().toISOString();
40
+ const awaitingPermit = {
41
+ version: SETUP_LOGIN_PROTOCOL_VERSION,
42
+ jobId: manifest.jobId,
43
+ executionId: manifest.executionId,
44
+ processGroup: captured.handle,
45
+ stage: "awaiting_permit",
46
+ observedAt,
47
+ commandDigest: manifest.commandDigest,
48
+ manifestDigest: manifest.manifestDigest,
49
+ };
50
+ atomicPrivateJson(manifest.statePath, awaitingPermit);
51
+ const permit = await waitForPermit(manifest, now, sleep);
52
+ if (!permit) {
53
+ persistResult(manifest, {
54
+ permitIssuedAt: null,
55
+ commandStarted: false,
56
+ errorCode: "permit_timeout",
57
+ exitCode: null,
58
+ signal: null,
59
+ finishedAt: now().toISOString(),
60
+ });
61
+ return 1;
62
+ }
63
+ if (!verifyExecutableEvidence(manifest.executable)) {
64
+ persistResult(manifest, {
65
+ permitIssuedAt: permit.issuedAt,
66
+ commandStarted: false,
67
+ errorCode: "spawn_failed",
68
+ exitCode: null,
69
+ signal: null,
70
+ finishedAt: now().toISOString(),
71
+ });
72
+ return 1;
73
+ }
74
+ atomicPrivateJson(manifest.statePath, { ...awaitingPermit, stage: "running" });
75
+ // Keep the group leader alive through TERM so the daemon can still prove
76
+ // identity and escalate a stubborn descendant with KILL after the grace
77
+ // period. The vendor child receives the same group signal directly.
78
+ const holdLeaderForEscalation = () => undefined;
79
+ process.on("SIGTERM", holdLeaderForEscalation);
80
+ process.on("SIGINT", holdLeaderForEscalation);
81
+ let child;
82
+ try {
83
+ const spawnOptions = {
84
+ cwd: manifest.cwd,
85
+ // A sealed profileConfigDir (INV-135) scopes the vendor login to the
86
+ // profile's own store; absent = the default vendor store as before.
87
+ env: nativeLoginEnv(manifest.harness, process.env, manifest.profileConfigDir),
88
+ detached: false,
89
+ stdio: "inherit",
90
+ };
91
+ child = spawnProcess(manifest.binary, manifest.args, spawnOptions);
92
+ }
93
+ catch {
94
+ persistResult(manifest, {
95
+ permitIssuedAt: permit.issuedAt,
96
+ commandStarted: false,
97
+ errorCode: "spawn_failed",
98
+ exitCode: null,
99
+ signal: null,
100
+ finishedAt: now().toISOString(),
101
+ });
102
+ process.off("SIGTERM", holdLeaderForEscalation);
103
+ process.off("SIGINT", holdLeaderForEscalation);
104
+ return 1;
105
+ }
106
+ let result;
107
+ try {
108
+ result = await waitForExit(child);
109
+ }
110
+ catch {
111
+ persistResult(manifest, {
112
+ permitIssuedAt: permit.issuedAt,
113
+ commandStarted: false,
114
+ errorCode: "spawn_failed",
115
+ exitCode: null,
116
+ signal: null,
117
+ finishedAt: now().toISOString(),
118
+ });
119
+ process.off("SIGTERM", holdLeaderForEscalation);
120
+ process.off("SIGINT", holdLeaderForEscalation);
121
+ return 1;
122
+ }
123
+ process.off("SIGTERM", holdLeaderForEscalation);
124
+ process.off("SIGINT", holdLeaderForEscalation);
125
+ persistResult(manifest, {
126
+ permitIssuedAt: permit.issuedAt,
127
+ commandStarted: true,
128
+ exitCode: result.code,
129
+ signal: result.signal,
130
+ finishedAt: now().toISOString(),
131
+ });
132
+ return result.code === 0 && result.signal === null ? 0 : 1;
133
+ }
134
+ function validateManifest(manifestPath) {
135
+ const manifest = readLoginManifest(manifestPath);
136
+ const base = resolve(dirname(manifestPath));
137
+ for (const output of [manifest.statePath, manifest.resultPath, manifest.permitPath]) {
138
+ const absolute = resolve(output);
139
+ if (!absolute.startsWith(base + sep))
140
+ throw new Error("setup-login sidecar escapes its job directory");
141
+ }
142
+ return manifest;
143
+ }
144
+ async function waitForPermit(manifest, now, sleep) {
145
+ const deadline = Date.parse(manifest.permitDeadlineAt);
146
+ while (now().getTime() <= deadline) {
147
+ const permit = readRunnerPermit(manifest.permitPath);
148
+ if (permit &&
149
+ permit.jobId === manifest.jobId &&
150
+ permit.executionId === manifest.executionId &&
151
+ permit.commandDigest === manifest.commandDigest &&
152
+ permit.manifestDigest === manifest.manifestDigest)
153
+ return permit;
154
+ await sleep(Math.min(PERMIT_POLL_MS, Math.max(1, deadline - now().getTime())));
155
+ }
156
+ return null;
157
+ }
158
+ function persistResult(manifest, result) {
159
+ atomicPrivateJson(manifest.resultPath, {
160
+ version: SETUP_LOGIN_PROTOCOL_VERSION,
161
+ jobId: manifest.jobId,
162
+ executionId: manifest.executionId,
163
+ commandDigest: manifest.commandDigest,
164
+ manifestDigest: manifest.manifestDigest,
165
+ ...result,
166
+ });
167
+ }
168
+ function waitForExit(child) {
169
+ return new Promise((resolveExit, reject) => {
170
+ child.once("error", reject);
171
+ child.once("exit", (code, signal) => resolveExit({ code, signal }));
172
+ });
173
+ }
174
+ function describeCaptureFailure(captured) {
175
+ return captured.status === "missing"
176
+ ? "setup-login worker disappeared before its process group could be captured"
177
+ : `setup-login worker process-group identity is unprovable: ${captured.reason}`;
178
+ }
179
+ /** The bootstrap itself never needs model/provider credentials. */
180
+ function runnerBootstrapEnv(source = process.env) {
181
+ const env = {};
182
+ for (const key of [
183
+ "PATH",
184
+ "HOME",
185
+ "TMPDIR",
186
+ "LANG",
187
+ "LC_ALL",
188
+ "USER",
189
+ "LOGNAME",
190
+ "CLAUDEXOR_CODEX_NATIVE_HOME",
191
+ "CLAUDEXOR_CLAUDE_NATIVE_DIR",
192
+ ]) {
193
+ if (source[key] !== undefined)
194
+ env[key] = source[key];
195
+ }
196
+ return env;
197
+ }
198
+ function isDirectEntrypoint() {
199
+ if (!process.argv[1])
200
+ return false;
201
+ try {
202
+ return (realpathSync(resolve(process.argv[1])) ===
203
+ realpathSync(resolve(fileURLToPath(import.meta.url))));
204
+ }
205
+ catch {
206
+ return false;
207
+ }
208
+ }
209
+ if (isDirectEntrypoint()) {
210
+ const workerMode = process.argv[2] === "--worker";
211
+ const manifestPath = process.argv[workerMode ? 3 : 2];
212
+ if (!manifestPath) {
213
+ process.stderr.write("usage: setup-login-runner [--worker] <manifest.json>\n");
214
+ process.exitCode = 2;
215
+ }
216
+ else {
217
+ (workerMode ? runSetupLoginWorker(manifestPath) : runSetupLogin(manifestPath)).then((code) => {
218
+ process.exitCode = code;
219
+ }, (error) => {
220
+ process.stderr.write(`setup-login-runner: ${error instanceof Error ? error.message : String(error)}\n`);
221
+ process.exitCode = 1;
222
+ });
223
+ }
224
+ }
225
+ //# sourceMappingURL=setup-login-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-login-runner.js","sourceRoot":"","sources":["../src/setup-login-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export type SetupSupervisorState = "idle" | "starting" | "healthy" | "failed" | "recovery_required" | "draining" | "stopped";
2
+ export interface SetupSupervisorHealth {
3
+ state: SetupSupervisorState;
4
+ failure: Error | null;
5
+ activeTasks: number;
6
+ }
7
+ export interface SetupSupervisorOptions {
8
+ pollMs: number;
9
+ recoveryRequired: () => boolean;
10
+ reconcile: () => Promise<void>;
11
+ tick: () => Promise<void>;
12
+ abortInFlight: (reason: Error) => void;
13
+ }
14
+ export interface SetupSupervisorTrackOptions {
15
+ /** Safety work may be registered while an already-started drain is fencing
16
+ * ordinary admission (for example, process-group termination). */
17
+ safety?: boolean;
18
+ }
19
+ /**
20
+ * Owns setup background-work liveness. Domain transitions remain in the setup
21
+ * lifecycle service; this class only controls admission, monitor scheduling,
22
+ * exact task tracking, abort fan-out, and idempotent drain.
23
+ */
24
+ export declare class SetupSupervisor {
25
+ private readonly options;
26
+ private stateValue;
27
+ private timer;
28
+ private readonly tasks;
29
+ private failureValue;
30
+ private startPromise;
31
+ private shutdownPromise;
32
+ private abortIssued;
33
+ constructor(options: SetupSupervisorOptions);
34
+ health(): SetupSupervisorHealth;
35
+ start(): Promise<void>;
36
+ private startOnce;
37
+ /** Synchronous admission/abort fence used before any shutdown await. */
38
+ beginDrain(): void;
39
+ assertCreateAllowed(): void;
40
+ reportFailure(error: unknown, label?: string): void;
41
+ /**
42
+ * Tracks an operation so shutdown cannot outlive it. Rejections are observed
43
+ * exactly once and fail-close future setup admission.
44
+ */
45
+ track<T>(label: string, operation: () => Promise<T>, options?: SetupSupervisorTrackOptions): Promise<T>;
46
+ shutdown(): Promise<void>;
47
+ private shutdownOnce;
48
+ private schedule;
49
+ private clearTimer;
50
+ private rememberFailure;
51
+ private unavailableError;
52
+ }
53
+ //# sourceMappingURL=setup-supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-supervisor.d.ts","sourceRoot":"","sources":["../src/setup-supervisor.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC9B,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,mBAAmB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,2BAA2B;IAC1C;sEACkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IASd,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,WAAW,CAAS;gBAEC,OAAO,EAAE,sBAAsB;IAM5D,MAAM,IAAI,qBAAqB;IAQ/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBR,SAAS;IAqBvB,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAgBlB,mBAAmB,IAAI,IAAI;IAS3B,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAqB,GAAG,IAAI;IAY/D;;;OAGG;IACH,KAAK,CAAC,CAAC,EACL,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,CAAC,CAAC;IA4Bb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAMX,YAAY;IAW1B,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Owns setup background-work liveness. Domain transitions remain in the setup
3
+ * lifecycle service; this class only controls admission, monitor scheduling,
4
+ * exact task tracking, abort fan-out, and idempotent drain.
5
+ */
6
+ export class SetupSupervisor {
7
+ options;
8
+ stateValue = "idle";
9
+ timer = null;
10
+ tasks = new Set();
11
+ failureValue = null;
12
+ startPromise = null;
13
+ shutdownPromise = null;
14
+ abortIssued = false;
15
+ constructor(options) {
16
+ this.options = options;
17
+ if (!Number.isFinite(options.pollMs) || options.pollMs < 0) {
18
+ throw new Error("setup supervisor poll interval must be a non-negative finite number");
19
+ }
20
+ }
21
+ health() {
22
+ return {
23
+ state: this.stateValue,
24
+ failure: this.failureValue,
25
+ activeTasks: this.tasks.size,
26
+ };
27
+ }
28
+ start() {
29
+ if (this.stateValue === "healthy")
30
+ return Promise.resolve();
31
+ if (this.startPromise)
32
+ return this.startPromise;
33
+ if (this.stateValue === "draining" || this.stateValue === "stopped") {
34
+ return Promise.reject(this.unavailableError("setup supervisor is already draining or stopped"));
35
+ }
36
+ if (this.stateValue === "failed" || this.stateValue === "recovery_required") {
37
+ return Promise.reject(this.unavailableError());
38
+ }
39
+ // Fence create/confirm/extend synchronously; startOnce runs in the tracked
40
+ // microtask and must not leave a one-turn admission window.
41
+ this.stateValue = "starting";
42
+ this.startPromise = this.track("reconcile", () => this.startOnce());
43
+ return this.startPromise;
44
+ }
45
+ async startOnce() {
46
+ if (this.stateValue !== "starting")
47
+ throw this.unavailableError();
48
+ if (this.options.recoveryRequired()) {
49
+ this.stateValue = "recovery_required";
50
+ throw this.unavailableError("setup journal requires recovery before setup can start");
51
+ }
52
+ try {
53
+ await this.options.reconcile();
54
+ }
55
+ catch (error) {
56
+ this.reportFailure(error, "reconcile");
57
+ throw this.unavailableError();
58
+ }
59
+ if (this.options.recoveryRequired()) {
60
+ this.stateValue = "recovery_required";
61
+ throw this.unavailableError("setup journal requires recovery after reconciliation");
62
+ }
63
+ if (this.stateValue !== "starting")
64
+ throw this.unavailableError();
65
+ this.stateValue = "healthy";
66
+ this.schedule();
67
+ }
68
+ /** Synchronous admission/abort fence used before any shutdown await. */
69
+ beginDrain() {
70
+ if (this.stateValue === "stopped")
71
+ return;
72
+ if (this.stateValue !== "draining") {
73
+ this.clearTimer();
74
+ this.stateValue = "draining";
75
+ }
76
+ if (!this.abortIssued) {
77
+ this.abortIssued = true;
78
+ try {
79
+ this.options.abortInFlight(new Error("setup supervisor is draining"));
80
+ }
81
+ catch (error) {
82
+ this.rememberFailure(error, "abort-in-flight");
83
+ }
84
+ }
85
+ }
86
+ assertCreateAllowed() {
87
+ // The production composition root awaits start() before exposing setup.
88
+ // Allowing idle keeps isolated lifecycle stores usable in focused tests;
89
+ // every failed/recovery/draining state remains a synchronous hard fence.
90
+ if (this.stateValue !== "idle" && this.stateValue !== "healthy") {
91
+ throw this.unavailableError();
92
+ }
93
+ }
94
+ reportFailure(error, label = "setup-supervisor") {
95
+ this.rememberFailure(error, label);
96
+ this.clearTimer();
97
+ if (this.stateValue !== "recovery_required" &&
98
+ this.stateValue !== "draining" &&
99
+ this.stateValue !== "stopped") {
100
+ this.stateValue = "failed";
101
+ }
102
+ }
103
+ /**
104
+ * Tracks an operation so shutdown cannot outlive it. Rejections are observed
105
+ * exactly once and fail-close future setup admission.
106
+ */
107
+ track(label, operation, options = {}) {
108
+ if (!label.trim())
109
+ throw new Error("setup supervisor task label must not be empty");
110
+ if ((this.stateValue === "draining" || this.stateValue === "stopped") && !options.safety) {
111
+ return Promise.reject(this.unavailableError("setup supervisor will not start ordinary work while draining"));
112
+ }
113
+ if (this.stateValue === "stopped") {
114
+ return Promise.reject(this.unavailableError("setup supervisor is stopped"));
115
+ }
116
+ const raw = Promise.resolve().then(operation);
117
+ let tracked;
118
+ tracked = raw
119
+ .then((value) => value, (error) => {
120
+ this.reportFailure(error, label);
121
+ throw error;
122
+ })
123
+ .finally(() => {
124
+ this.tasks.delete(tracked);
125
+ });
126
+ this.tasks.add(tracked);
127
+ return tracked;
128
+ }
129
+ shutdown() {
130
+ this.beginDrain();
131
+ this.shutdownPromise ??= this.shutdownOnce();
132
+ return this.shutdownPromise;
133
+ }
134
+ async shutdownOnce() {
135
+ // Drain to a fixed point: an operation that was already running may
136
+ // register bounded safety termination while handling its abort.
137
+ for (;;) {
138
+ const pending = [...this.tasks];
139
+ if (pending.length === 0)
140
+ break;
141
+ await Promise.allSettled(pending);
142
+ }
143
+ this.stateValue = "stopped";
144
+ }
145
+ schedule() {
146
+ if (this.stateValue !== "healthy")
147
+ return;
148
+ this.timer = setTimeout(() => {
149
+ this.timer = null;
150
+ const task = this.track("monitor", this.options.tick);
151
+ void task.then(() => this.schedule(), () => undefined);
152
+ }, this.options.pollMs);
153
+ this.timer.unref();
154
+ }
155
+ clearTimer() {
156
+ if (this.timer)
157
+ clearTimeout(this.timer);
158
+ this.timer = null;
159
+ }
160
+ rememberFailure(error, label) {
161
+ if (this.failureValue)
162
+ return;
163
+ const cause = error instanceof Error ? error : new Error(String(error));
164
+ this.failureValue = new Error(`${label}: ${cause.message}`, { cause });
165
+ }
166
+ unavailableError(message) {
167
+ const detail = message ??
168
+ (this.failureValue
169
+ ? `setup supervisor is unavailable: ${this.failureValue.message}`
170
+ : `setup supervisor is unavailable (${this.stateValue})`);
171
+ return Object.assign(new Error(detail), {
172
+ status: 503,
173
+ code: "setup_supervisor_unavailable",
174
+ });
175
+ }
176
+ }
177
+ //# sourceMappingURL=setup-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-supervisor.js","sourceRoot":"","sources":["../src/setup-supervisor.ts"],"names":[],"mappings":"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"}
package/dist/spec.d.ts CHANGED
@@ -1,29 +1,17 @@
1
1
  import { type SpecDraft, type SpecFieldChange } from "@claudexor/interview";
2
- import { type InterviewAnswer, type InterviewQuestion, type SpecPack } from "@claudexor/schema";
2
+ import { type InterviewAnswer, type InterviewQuestion, type SpecPack, type TestCommandInvocation } from "@claudexor/schema";
3
3
  export interface SpecAnswersFile {
4
+ /** Durable daemon session that owns the questions and grounding plan. */
5
+ sessionId?: string;
4
6
  answers: InterviewAnswer[];
5
- /** Present in the draft questions file so freezing can reuse the exact grounding plan. */
6
- planRunId?: string;
7
- planDir?: string;
8
7
  questions?: InterviewQuestion[];
8
+ priorDecisions?: PriorDecision[];
9
9
  summary?: string;
10
10
  success_criteria?: string[];
11
11
  non_goals?: string[];
12
12
  forbidden_approaches?: string[];
13
13
  decided_tradeoffs?: string[];
14
- tests?: string[];
15
- }
16
- export interface SpecCommandResult {
17
- status: "questions" | "frozen";
18
- planRunId: string;
19
- planDir: string;
20
- questionsPath?: string;
21
- specId?: string;
22
- specDir?: string;
23
- specHash?: string;
24
- runHint?: string;
25
- questions: InterviewQuestion[];
26
- changes?: SpecFieldChange[];
14
+ tests?: TestCommandInvocation[];
27
15
  }
28
16
  export interface LoadedFrozenSpec {
29
17
  spec: SpecPack;
@@ -31,7 +19,7 @@ export interface LoadedFrozenSpec {
31
19
  specHash: string;
32
20
  }
33
21
  export declare function loadFrozenSpec(path: string): LoadedFrozenSpec;
34
- export declare function resolveRunTestCommands(cliTests: string[] | undefined, spec: SpecPack | null): string[] | undefined;
22
+ export declare function resolveRunTestCommands(cliTests: TestCommandInvocation[] | undefined, spec: SpecPack | null): TestCommandInvocation[] | undefined;
35
23
  /**
36
24
  * The grounding-plan instruction that DRIVES extractQuestionsFromPlan: it tells the
37
25
  * harness to end its read-only plan with a structured `## Open Questions` block in
@@ -75,10 +63,11 @@ export declare function draftFromPlanAndAnswers(prompt: string, plan: string, qu
75
63
  */
76
64
  export declare function validateAnswers(questions: InterviewQuestion[], answers: InterviewAnswer[]): void;
77
65
  export declare function freezeSpecFromGrounding(prompt: string, plan: string, answers: SpecAnswersFile): Promise<SpecPack>;
78
- export declare function persistSpec(repoRoot: string, spec: SpecPack, plan: string, previous?: SpecPack | null): {
66
+ export declare function persistSpec(repoRoot: string, spec: SpecPack, plan: string, previous?: SpecPack | null): ReturnType<typeof persistSpecAt>;
67
+ /** Persist a runnable immutable projection outside the user repository. */
68
+ export declare function persistSpecAt(specsRoot: string, spec: SpecPack, plan: string, previous?: SpecPack | null): {
79
69
  specDir: string;
80
70
  specHash: string;
81
71
  changes: SpecFieldChange[];
82
72
  };
83
- export declare function loadPreviousSpec(path?: string): SpecPack | null;
84
73
  //# sourceMappingURL=spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAE3B,MAAM,mBAAmB,CAAC;AAW3B,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqC7D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,SAAS,EAC7C,IAAI,EAAE,QAAQ,GAAG,IAAI,GACpB,qBAAqB,EAAE,GAAG,SAAS,CAUrC;AAED;;;;;;GAMG;AACH;wCACwC;AACxC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,aAAa,EAAO,GAAG,MAAM,CAmCjG;AAqCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA0D1E;AAoED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAQzD;AAmBD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAAE,EAC9B,IAAI,EAAE,eAAe,GACpB,SAAS,CA0DX;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAwBhG;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,QAAQ,CAAC,CAenB;AAyCD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GACzB,UAAU,CAAC,OAAO,aAAa,CAAC,CAElC;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GACzB;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAwBA"}