@claudexor/cli 1.0.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) 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 +2490 -0
  43. package/dist/control-services.d.ts.map +1 -0
  44. package/dist/control-services.js +453 -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 +276 -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 +110 -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-compatibility.d.ts +6 -0
  102. package/dist/profile-compatibility.d.ts.map +1 -0
  103. package/dist/profile-compatibility.js +21 -0
  104. package/dist/profile-compatibility.js.map +1 -0
  105. package/dist/profile-registration.d.ts +15 -0
  106. package/dist/profile-registration.d.ts.map +1 -0
  107. package/dist/profile-registration.js +68 -0
  108. package/dist/profile-registration.js.map +1 -0
  109. package/dist/project-command.d.ts +3 -0
  110. package/dist/project-command.d.ts.map +1 -0
  111. package/dist/project-command.js +87 -0
  112. package/dist/project-command.js.map +1 -0
  113. package/dist/quota-command.d.ts +3 -0
  114. package/dist/quota-command.d.ts.map +1 -0
  115. package/dist/quota-command.js +59 -0
  116. package/dist/quota-command.js.map +1 -0
  117. package/dist/registry.d.ts +1 -1
  118. package/dist/registry.d.ts.map +1 -1
  119. package/dist/registry.js +16 -4
  120. package/dist/registry.js.map +1 -1
  121. package/dist/release.d.ts.map +1 -1
  122. package/dist/release.js +15 -3
  123. package/dist/release.js.map +1 -1
  124. package/dist/repl.d.ts +3 -8
  125. package/dist/repl.d.ts.map +1 -1
  126. package/dist/repl.js +23 -122
  127. package/dist/repl.js.map +1 -1
  128. package/dist/request-preflight.d.ts +13 -0
  129. package/dist/request-preflight.d.ts.map +1 -0
  130. package/dist/request-preflight.js +81 -0
  131. package/dist/request-preflight.js.map +1 -0
  132. package/dist/retention-service.d.ts +24 -0
  133. package/dist/retention-service.d.ts.map +1 -0
  134. package/dist/retention-service.js +100 -0
  135. package/dist/retention-service.js.map +1 -0
  136. package/dist/retry-command-specs.d.ts +3 -0
  137. package/dist/retry-command-specs.d.ts.map +1 -0
  138. package/dist/retry-command-specs.js +21 -0
  139. package/dist/retry-command-specs.js.map +1 -0
  140. package/dist/retry-command.d.ts +4 -0
  141. package/dist/retry-command.d.ts.map +1 -0
  142. package/dist/retry-command.js +57 -0
  143. package/dist/retry-command.js.map +1 -0
  144. package/dist/review-command.d.ts.map +1 -1
  145. package/dist/review-command.js +47 -12
  146. package/dist/review-command.js.map +1 -1
  147. package/dist/run-options.d.ts +2 -2
  148. package/dist/run-options.d.ts.map +1 -1
  149. package/dist/run-options.js +27 -5
  150. package/dist/run-options.js.map +1 -1
  151. package/dist/settings-command.d.ts.map +1 -1
  152. package/dist/settings-command.js +143 -188
  153. package/dist/settings-command.js.map +1 -1
  154. package/dist/settings-service.d.ts +50 -0
  155. package/dist/settings-service.d.ts.map +1 -1
  156. package/dist/settings-service.js +67 -1
  157. package/dist/settings-service.js.map +1 -1
  158. package/dist/setup-job-reducer.d.ts +9 -0
  159. package/dist/setup-job-reducer.d.ts.map +1 -0
  160. package/dist/setup-job-reducer.js +290 -0
  161. package/dist/setup-job-reducer.js.map +1 -0
  162. package/dist/setup-job-store.d.ts +250 -0
  163. package/dist/setup-job-store.d.ts.map +1 -0
  164. package/dist/setup-job-store.js +359 -0
  165. package/dist/setup-job-store.js.map +1 -0
  166. package/dist/setup-job-support.d.ts +27 -0
  167. package/dist/setup-job-support.d.ts.map +1 -0
  168. package/dist/setup-job-support.js +141 -0
  169. package/dist/setup-job-support.js.map +1 -0
  170. package/dist/setup-jobs.d.ts +437 -22
  171. package/dist/setup-jobs.d.ts.map +1 -1
  172. package/dist/setup-jobs.js +813 -423
  173. package/dist/setup-jobs.js.map +1 -1
  174. package/dist/setup-lifecycle-binding.d.ts +40 -0
  175. package/dist/setup-lifecycle-binding.d.ts.map +1 -0
  176. package/dist/setup-lifecycle-binding.js +159 -0
  177. package/dist/setup-lifecycle-binding.js.map +1 -0
  178. package/dist/setup-login-protocol.d.ts +13 -0
  179. package/dist/setup-login-protocol.d.ts.map +1 -0
  180. package/dist/setup-login-protocol.js +179 -0
  181. package/dist/setup-login-protocol.js.map +1 -0
  182. package/dist/setup-login-runner.d.ts +20 -0
  183. package/dist/setup-login-runner.d.ts.map +1 -0
  184. package/dist/setup-login-runner.js +225 -0
  185. package/dist/setup-login-runner.js.map +1 -0
  186. package/dist/setup-supervisor.d.ts +53 -0
  187. package/dist/setup-supervisor.d.ts.map +1 -0
  188. package/dist/setup-supervisor.js +177 -0
  189. package/dist/setup-supervisor.js.map +1 -0
  190. package/dist/spec-thread-scope.d.ts +3 -0
  191. package/dist/spec-thread-scope.d.ts.map +1 -0
  192. package/dist/spec-thread-scope.js +9 -0
  193. package/dist/spec-thread-scope.js.map +1 -0
  194. package/dist/spec.d.ts +9 -20
  195. package/dist/spec.d.ts.map +1 -1
  196. package/dist/spec.js +49 -21
  197. package/dist/spec.js.map +1 -1
  198. package/dist/thread-delivery.d.ts +18 -0
  199. package/dist/thread-delivery.d.ts.map +1 -0
  200. package/dist/thread-delivery.js +67 -0
  201. package/dist/thread-delivery.js.map +1 -0
  202. package/dist/thread-select.d.ts +9 -0
  203. package/dist/thread-select.d.ts.map +1 -0
  204. package/dist/thread-select.js +12 -0
  205. package/dist/thread-select.js.map +1 -0
  206. package/dist/trust-command.d.ts.map +1 -1
  207. package/dist/trust-command.js +69 -61
  208. package/dist/trust-command.js.map +1 -1
  209. package/dist/trust-services.d.ts +5 -6
  210. package/dist/trust-services.d.ts.map +1 -1
  211. package/dist/trust-services.js +42 -13
  212. package/dist/trust-services.js.map +1 -1
  213. package/package.json +24 -22
  214. package/dist/attachment-resolver.d.ts +0 -11
  215. package/dist/attachment-resolver.d.ts.map +0 -1
  216. package/dist/attachment-resolver.js +0 -61
  217. package/dist/attachment-resolver.js.map +0 -1
  218. package/dist/settings-display.d.ts +0 -3
  219. package/dist/settings-display.d.ts.map +0 -1
  220. package/dist/settings-display.js +0 -33
  221. package/dist/settings-display.js.map +0 -1
@@ -0,0 +1,359 @@
1
+ import { chmodSync, existsSync, lstatSync, mkdirSync, realpathSync } from "node:fs";
2
+ import { join, sep } from "node:path";
3
+ import { DurableJournal, JournalRecoveryRequiredError, } from "@claudexor/journal";
4
+ import { ControlSetupJob as ControlSetupJobSchema, ControlSetupJobEvent, TERMINAL_CONTROL_SETUP_JOB_STATES, } from "@claudexor/schema";
5
+ import { ensureCanonicalPrivateDirectory, hashJson, redactSecrets } from "@claudexor/util";
6
+ import { initialSetupJob, reduceSetupJob } from "./setup-job-reducer.js";
7
+ export const ACTIVE_SETUP_STATES = new Set([
8
+ "queued",
9
+ "running",
10
+ "waiting_for_input",
11
+ ]);
12
+ export const TERMINAL_SETUP_STATES = new Set([
13
+ ...TERMINAL_CONTROL_SETUP_JOB_STATES,
14
+ ]);
15
+ const MAX_LOG_RECORD_BYTES = 16 * 1024;
16
+ /**
17
+ * Setup lifecycle projection over the daemon's global durable journal.
18
+ *
19
+ * Per-job directories contain only operational artifacts (runner handshake
20
+ * and command launcher). They never contain a job snapshot,
21
+ * event ledger or sequence metadata and cannot become a second authority.
22
+ */
23
+ export class SetupJobStore {
24
+ rootDir;
25
+ artifactsDir;
26
+ journal;
27
+ jobs = new Map();
28
+ createByKey = new Map();
29
+ now;
30
+ semanticRecovery = null;
31
+ constructor(rootDir, opts = {}) {
32
+ this.rootDir = rootDir;
33
+ this.now = opts.now ?? (() => new Date());
34
+ ensurePrivateRealDirectory(rootDir, "daemon data root");
35
+ this.artifactsDir = join(rootDir, "setup-artifacts");
36
+ ensurePrivateRealDirectory(this.artifactsDir, "setup artifacts root");
37
+ if (realpathSync(this.artifactsDir).startsWith(realpathSync(rootDir) + sep) === false) {
38
+ throw new Error("setup artifacts root escapes daemon data root");
39
+ }
40
+ this.journal =
41
+ opts.journal ??
42
+ new DurableJournal({
43
+ rootDir: join(rootDir, "journal"),
44
+ partition: "global",
45
+ now: this.now,
46
+ });
47
+ if (this.journal.options.partition !== "global") {
48
+ throw new Error(`setup lifecycle requires the global journal, received '${this.journal.options.partition}'`);
49
+ }
50
+ this.rebuild();
51
+ }
52
+ paths(jobId) {
53
+ if (!/^setup-[A-Za-z0-9-]+$/.test(jobId)) {
54
+ throw new Error(`unsafe setup job id: ${jobId}`);
55
+ }
56
+ const dir = join(this.artifactsDir, jobId);
57
+ if (!dir.startsWith(this.artifactsDir + sep)) {
58
+ throw new Error(`setup job path escapes store: ${jobId}`);
59
+ }
60
+ return {
61
+ dir,
62
+ manifest: join(dir, "runner-manifest.json"),
63
+ runnerState: join(dir, "runner-state.json"),
64
+ runnerResult: join(dir, "runner-result.json"),
65
+ runnerPermit: join(dir, "runner-permit.json"),
66
+ command: join(dir, "login.command"),
67
+ };
68
+ }
69
+ recoveryState() {
70
+ if (!this.semanticRecovery)
71
+ return this.journal.state();
72
+ return {
73
+ ...this.semanticRecovery,
74
+ location: { ...this.semanticRecovery.location },
75
+ };
76
+ }
77
+ validateProjection() {
78
+ this.assertAvailable();
79
+ }
80
+ create(job, idempotency) {
81
+ this.assertAvailable();
82
+ if (this.jobs.has(job.jobId))
83
+ throw new Error(`setup job already exists: ${job.jobId}`);
84
+ return this.persist(initialSetupJob(job), idempotency ? this.newBinding(job.jobId, idempotency) : undefined);
85
+ }
86
+ resolveCreate(idempotency) {
87
+ this.assertAvailable();
88
+ const binding = this.newBinding("pending", idempotency);
89
+ const prior = this.createByKey.get(binding.keyDigest);
90
+ if (!prior)
91
+ return null;
92
+ if (prior.requestDigest !== binding.requestDigest)
93
+ throw idempotencyConflict();
94
+ return this.status(prior.jobId);
95
+ }
96
+ bindCreate(jobId, idempotency) {
97
+ this.assertAvailable();
98
+ const job = this.status(jobId);
99
+ const binding = this.newBinding(jobId, idempotency);
100
+ const prior = this.createByKey.get(binding.keyDigest);
101
+ if (prior) {
102
+ if (prior.requestDigest !== binding.requestDigest)
103
+ throw idempotencyConflict();
104
+ return this.status(prior.jobId);
105
+ }
106
+ this.journal.append("setup.job.create_bound", { binding });
107
+ this.rememberBinding(binding);
108
+ return job;
109
+ }
110
+ persist(job, binding) {
111
+ this.assertAvailable();
112
+ this.ensureJobDir(this.paths(job.jobId).dir);
113
+ this.journal.append("setup.job.saved", { job, binding });
114
+ const stored = cloneJob(job);
115
+ this.jobs.set(job.jobId, stored);
116
+ if (binding)
117
+ this.rememberBinding(binding);
118
+ return cloneJob(stored);
119
+ }
120
+ update(jobId, patch) {
121
+ const current = this.jobs.get(jobId);
122
+ if (!current)
123
+ throw Object.assign(new Error("setup job not found"), { status: 404 });
124
+ return this.persist(reduceSetupJob(current, { ...current, ...patch }));
125
+ }
126
+ status(jobId) {
127
+ this.assertAvailable();
128
+ const job = this.jobs.get(jobId);
129
+ if (!job)
130
+ throw Object.assign(new Error("setup job not found"), { status: 404 });
131
+ return cloneJob(job);
132
+ }
133
+ list(filter) {
134
+ this.assertAvailable();
135
+ let rows = [...this.jobs.values()];
136
+ if (filter?.harness)
137
+ rows = rows.filter((job) => job.harness === filter.harness);
138
+ if (filter?.action)
139
+ rows = rows.filter((job) => job.action === filter.action);
140
+ if (filter?.active !== undefined) {
141
+ rows = rows.filter((job) => filter.active === (job.phase !== undefined && ACTIVE_SETUP_STATES.has(job.state)));
142
+ }
143
+ rows.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
144
+ if (filter?.limit !== undefined && rows.length > filter.limit) {
145
+ rows = rows.slice(-filter.limit);
146
+ }
147
+ return rows.map(cloneJob);
148
+ }
149
+ snapshot(jobId) {
150
+ this.assertAvailable();
151
+ return {
152
+ job: this.status(jobId),
153
+ cursor: this.journal.currentCursor(),
154
+ sequence: this.journal.currentSequence(),
155
+ };
156
+ }
157
+ events(jobId, afterCursor) {
158
+ this.assertAvailable();
159
+ this.status(jobId);
160
+ const afterSeq = this.journal.sequenceAfter(afterCursor);
161
+ let previousCursor = afterCursor ?? null;
162
+ const events = [];
163
+ for (const record of this.journal.records(afterSeq)) {
164
+ if (record.type !== "setup.job.saved")
165
+ continue;
166
+ const parsed = ControlSetupJobSchema.safeParse(record.payload?.job);
167
+ if (!parsed.success || parsed.data.jobId !== jobId)
168
+ continue;
169
+ const cursor = this.journal.cursorFor(record);
170
+ events.push(ControlSetupJobEvent.parse({
171
+ jobId,
172
+ cursor,
173
+ previousCursor,
174
+ sequence: record.seq,
175
+ time: record.time,
176
+ kind: "status",
177
+ state: parsed.data.state,
178
+ message: parsed.data.message,
179
+ job: parsed.data,
180
+ }));
181
+ previousCursor = cursor;
182
+ }
183
+ return events;
184
+ }
185
+ appendLog(jobId, line) {
186
+ this.assertAvailable();
187
+ if (!this.jobs.has(jobId))
188
+ return;
189
+ const redacted = `[${this.now().toISOString()}] ${redactSecrets(line)}`;
190
+ const bytes = Buffer.from(redacted, "utf8");
191
+ const bounded = bytes.length <= MAX_LOG_RECORD_BYTES
192
+ ? redacted
193
+ : `${bytes.subarray(0, MAX_LOG_RECORD_BYTES).toString("utf8")}\n[output truncated at ${MAX_LOG_RECORD_BYTES} bytes]`;
194
+ this.journal.append("setup.job.log", { jobId, line: bounded });
195
+ }
196
+ rebuild() {
197
+ if (this.journal.state().status === "recovery_required")
198
+ return;
199
+ for (const record of this.journal.records()) {
200
+ if (record.type === "setup.job.log") {
201
+ if (typeof record.payload?.jobId !== "string" ||
202
+ !/^setup-[A-Za-z0-9-]+$/.test(record.payload.jobId) ||
203
+ typeof record.payload.line !== "string" ||
204
+ Buffer.byteLength(record.payload.line, "utf8") > MAX_LOG_RECORD_BYTES + 128) {
205
+ this.semanticRecovery = {
206
+ status: "recovery_required",
207
+ location: { kind: "cursor", epoch: record.epoch, seq: record.seq },
208
+ reason: `invalid setup.job.log payload at journal seq ${record.seq}`,
209
+ discardedTailBytes: 0,
210
+ };
211
+ return;
212
+ }
213
+ continue;
214
+ }
215
+ if (record.type === "setup.job.create_bound") {
216
+ const binding = parseBinding(record.payload?.binding);
217
+ if (!binding || !this.jobs.has(binding.jobId)) {
218
+ this.failSemantic(record, "invalid setup.job.create_bound payload");
219
+ return;
220
+ }
221
+ this.rememberBinding(binding);
222
+ continue;
223
+ }
224
+ if (record.type !== "setup.job.saved")
225
+ continue;
226
+ const parsed = ControlSetupJobSchema.safeParse(record.payload?.job);
227
+ if (!parsed.success) {
228
+ this.semanticRecovery = {
229
+ status: "recovery_required",
230
+ location: { kind: "cursor", epoch: record.epoch, seq: record.seq },
231
+ reason: `invalid setup.job.saved payload at journal seq ${record.seq}`,
232
+ discardedTailBytes: 0,
233
+ };
234
+ return;
235
+ }
236
+ try {
237
+ const current = this.jobs.get(parsed.data.jobId);
238
+ const next = current ? reduceSetupJob(current, parsed.data) : initialSetupJob(parsed.data);
239
+ this.jobs.set(next.jobId, cloneJob(next));
240
+ if (record.payload?.binding !== undefined) {
241
+ const binding = parseBinding(record.payload.binding);
242
+ if (!binding || binding.jobId !== next.jobId) {
243
+ this.failSemantic(record, "invalid setup create binding");
244
+ return;
245
+ }
246
+ this.rememberBinding(binding);
247
+ }
248
+ }
249
+ catch (error) {
250
+ this.semanticRecovery = {
251
+ status: "recovery_required",
252
+ location: { kind: "cursor", epoch: record.epoch, seq: record.seq },
253
+ reason: `invalid setup lifecycle transition at journal seq ${record.seq}: ${error instanceof Error ? error.message : String(error)}`,
254
+ discardedTailBytes: 0,
255
+ };
256
+ return;
257
+ }
258
+ }
259
+ // Partition-level recovery is acknowledged only by the global recovery
260
+ // coordinator after every registered projection has validated the prefix.
261
+ }
262
+ newBinding(jobId, input) {
263
+ if (!input.key.trim() || input.key.length > 256) {
264
+ throw Object.assign(new Error("invalid Idempotency-Key"), { status: 400 });
265
+ }
266
+ return {
267
+ keyDigest: hashJson({
268
+ client: input.client,
269
+ partition: "global",
270
+ operation: "setup.job.create",
271
+ key: input.key,
272
+ }),
273
+ requestDigest: hashJson(input.request),
274
+ jobId,
275
+ };
276
+ }
277
+ rememberBinding(binding) {
278
+ const prior = this.createByKey.get(binding.keyDigest);
279
+ if (prior && (prior.requestDigest !== binding.requestDigest || prior.jobId !== binding.jobId)) {
280
+ throw idempotencyConflict();
281
+ }
282
+ this.createByKey.set(binding.keyDigest, {
283
+ requestDigest: binding.requestDigest,
284
+ jobId: binding.jobId,
285
+ });
286
+ }
287
+ failSemantic(record, reason) {
288
+ this.semanticRecovery = {
289
+ status: "recovery_required",
290
+ location: { kind: "cursor", epoch: record.epoch, seq: record.seq },
291
+ reason: `${reason} at journal seq ${record.seq}`,
292
+ discardedTailBytes: 0,
293
+ };
294
+ }
295
+ assertAvailable() {
296
+ const recovery = this.recoveryState();
297
+ if (recovery.status === "recovery_required") {
298
+ throw new JournalRecoveryRequiredError(recovery);
299
+ }
300
+ }
301
+ ensureJobDir(dir) {
302
+ if (existsSync(dir)) {
303
+ if (!this.validExistingJobDir(dir)) {
304
+ throw new Error(`refusing unsafe setup job directory: ${dir}`);
305
+ }
306
+ }
307
+ else {
308
+ mkdirSync(dir, { recursive: false, mode: 0o700 });
309
+ }
310
+ chmodSync(dir, 0o700);
311
+ }
312
+ validExistingJobDir(dir) {
313
+ try {
314
+ const stat = lstatSync(dir);
315
+ if (stat.isSymbolicLink() || !stat.isDirectory())
316
+ return false;
317
+ const root = realpathSync(this.artifactsDir);
318
+ return realpathSync(dir).startsWith(root + sep);
319
+ }
320
+ catch {
321
+ return false;
322
+ }
323
+ }
324
+ }
325
+ function parseBinding(value) {
326
+ if (!value || typeof value !== "object" || Array.isArray(value))
327
+ return null;
328
+ const row = value;
329
+ if (typeof row["keyDigest"] !== "string" ||
330
+ !/^sha256:[a-f0-9]{64}$/.test(row["keyDigest"]) ||
331
+ typeof row["requestDigest"] !== "string" ||
332
+ !/^sha256:[a-f0-9]{64}$/.test(row["requestDigest"]) ||
333
+ typeof row["jobId"] !== "string" ||
334
+ !/^setup-[A-Za-z0-9-]+$/.test(row["jobId"]))
335
+ return null;
336
+ return {
337
+ keyDigest: row["keyDigest"],
338
+ requestDigest: row["requestDigest"],
339
+ jobId: row["jobId"],
340
+ };
341
+ }
342
+ function idempotencyConflict() {
343
+ return Object.assign(new Error("Idempotency-Key was already used with a different request"), {
344
+ code: "idempotency_conflict",
345
+ status: 409,
346
+ });
347
+ }
348
+ function ensurePrivateRealDirectory(path, label) {
349
+ try {
350
+ ensureCanonicalPrivateDirectory(path);
351
+ }
352
+ catch (error) {
353
+ throw new Error(`${label} is unsafe: ${error instanceof Error ? error.message : String(error)}`);
354
+ }
355
+ }
356
+ function cloneJob(job) {
357
+ return ControlSetupJobSchema.parse(JSON.parse(JSON.stringify(job)));
358
+ }
359
+ //# sourceMappingURL=setup-job-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-job-store.js","sourceRoot":"","sources":["../src/setup-job-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type HarnessAdapter, type ProcessGroupHandle } from "@claudexor/core";
2
+ import type { ControlHarnessSetupHarness, ControlSetupJob, CredentialProfileStatus } from "@claudexor/schema";
3
+ import type { SetupLoginRunnerState } from "./setup-login-protocol.js";
4
+ export type SetupProfile = {
5
+ guideUrl: string;
6
+ note: string;
7
+ };
8
+ export declare const SETUP_PROFILES: Record<ControlHarnessSetupHarness, SetupProfile>;
9
+ /**
10
+ * Resolve an INV-135 profile-targeted login request to its canonical scoped
11
+ * config dir. Typed 400s: an unknown/disabled/secret-ref profile must refuse
12
+ * at create time, never open a Terminal login into the wrong store.
13
+ */
14
+ export declare function resolveProfileBinding(harness: ControlHarnessSetupHarness, profileId: string | undefined): {
15
+ profileId: string;
16
+ configDir: string;
17
+ } | null;
18
+ /** INV-135 profile verification: the registry adapter's doctor probe against
19
+ * the durable registry entry — the SAME truth `claudexor profiles login` uses. */
20
+ export declare function profileDoctorProbe(getAdapter: (harness: string) => HarnessAdapter | undefined): (harness: string, profileId: string, abortSignal: AbortSignal) => Promise<CredentialProfileStatus | null>;
21
+ export declare function resolveSetupLoginRunnerPath(moduleUrl?: string, pathExists?: (path: string) => boolean): string;
22
+ export declare function waitWithAbort(ms: number, controller: AbortController, sleep: (ms: number) => Promise<void>): Promise<void>;
23
+ export declare function withAbortAndTimeout<T>(operation: () => Promise<T>, controller: AbortController, timeoutMs: number, label: string): Promise<T>;
24
+ export declare function processGroupFromJob(job: ControlSetupJob): ProcessGroupHandle | null;
25
+ export declare function stateMatchesDurableExecution(job: ControlSetupJob, state: SetupLoginRunnerState): boolean;
26
+ export declare function shellQuote(value: string): string;
27
+ //# sourceMappingURL=setup-job-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-job-support.d.ts","sourceRoot":"","sources":["../src/setup-job-support.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,0BAA0B,EAAE,YAAY,CAa3E,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuCjD;AAED;kFACkF;AAClF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,GAC1D,CACD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAU3C;AAED,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,MAAwB,EACnC,UAAU,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GACjD,MAAM,CAIR;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,CAAC,CAgCZ;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,GAAG,IAAI,CAOnF;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAQT;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Closure-free support owners for the setup-job manager (complexity split:
3
+ * setup-jobs.ts is at its ratchet cap). Everything here is a pure function or
4
+ * a parameterized factory — no store, supervisor, or journal access.
5
+ */
6
+ import { existsSync } from "node:fs";
7
+ import { dirname, resolve } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { parseProcessGroupHandle, } from "@claudexor/core";
10
+ import { loadConfig } from "@claudexor/config";
11
+ import { canonicalProfileConfigDir } from "@claudexor/harness-claude";
12
+ import { canonicalCodexProfileHome } from "@claudexor/harness-codex";
13
+ import { noProjectRepoRoot } from "@claudexor/util";
14
+ const NO_PROJECT_ROOT = noProjectRepoRoot();
15
+ export const SETUP_PROFILES = {
16
+ codex: {
17
+ guideUrl: "https://developers.openai.com/codex/auth/",
18
+ note: "Codex native login updates the official vendor-owned CLI session. Exact subscription setup never falls back to a managed API key.",
19
+ },
20
+ claude: {
21
+ guideUrl: "https://code.claude.com/docs/en/authentication",
22
+ note: "Claude Code native login updates the official vendor-owned CLI session. Exact subscription setup never falls back to a managed API key.",
23
+ },
24
+ cursor: {
25
+ guideUrl: "https://docs.cursor.com/en/cli/reference/authentication",
26
+ note: "Cursor native CLI login is reused when available.",
27
+ },
28
+ };
29
+ /**
30
+ * Resolve an INV-135 profile-targeted login request to its canonical scoped
31
+ * config dir. Typed 400s: an unknown/disabled/secret-ref profile must refuse
32
+ * at create time, never open a Terminal login into the wrong store.
33
+ */
34
+ export function resolveProfileBinding(harness, profileId) {
35
+ if (!profileId)
36
+ return null;
37
+ if (harness !== "claude" && harness !== "codex") {
38
+ throw Object.assign(new Error(`harness "${harness}" has no isolated config-dir login; only claude and codex support profile logins`), { status: 400 });
39
+ }
40
+ const profile = loadConfig(NO_PROJECT_ROOT).global.credential_profiles.find((entry) => entry.harness_id === harness && entry.profile_id === profileId);
41
+ if (!profile) {
42
+ throw Object.assign(new Error(`no credential profile "${profileId}" for harness "${harness}" — register it first (POST /v2/credential-profiles or \`claudexor profiles add\`)`), { status: 400 });
43
+ }
44
+ if (!profile.enabled) {
45
+ throw Object.assign(new Error(`credential profile "${profileId}" is disabled`), {
46
+ status: 400,
47
+ });
48
+ }
49
+ if (profile.credential_kind !== "config_dir_login") {
50
+ throw Object.assign(new Error(`credential profile "${profileId}" is ${profile.credential_kind}; only config_dir_login profiles use the native login flow (store its secret instead)`), { status: 400 });
51
+ }
52
+ const configDir = harness === "claude"
53
+ ? canonicalProfileConfigDir(profile.isolation_locator ?? "")
54
+ : canonicalCodexProfileHome(profile.isolation_locator ?? "");
55
+ return { profileId, configDir };
56
+ }
57
+ /** INV-135 profile verification: the registry adapter's doctor probe against
58
+ * the durable registry entry — the SAME truth `claudexor profiles login` uses. */
59
+ export function profileDoctorProbe(getAdapter) {
60
+ return async (harness, profileId, abortSignal) => {
61
+ const profile = loadConfig(NO_PROJECT_ROOT).global.credential_profiles.find((entry) => entry.harness_id === harness && entry.profile_id === profileId);
62
+ if (!profile)
63
+ return null;
64
+ const adapter = getAdapter(harness);
65
+ if (!adapter?.probeCredentialProfile)
66
+ return null;
67
+ return adapter.probeCredentialProfile(profile, abortSignal);
68
+ };
69
+ }
70
+ export function resolveSetupLoginRunnerPath(moduleUrl = import.meta.url, pathExists = existsSync) {
71
+ const directory = dirname(fileURLToPath(moduleUrl));
72
+ const bundled = resolve(directory, "setup-login-runner.cjs");
73
+ return pathExists(bundled) ? bundled : resolve(directory, "setup-login-runner.js");
74
+ }
75
+ export function waitWithAbort(ms, controller, sleep) {
76
+ if (controller.signal.aborted)
77
+ return Promise.reject(controller.signal.reason);
78
+ return new Promise((resolveWait, rejectWait) => {
79
+ let settled = false;
80
+ const settle = (task) => {
81
+ if (settled)
82
+ return;
83
+ settled = true;
84
+ controller.signal.removeEventListener("abort", onAbort);
85
+ task();
86
+ };
87
+ const onAbort = () => settle(() => rejectWait(controller.signal.reason instanceof Error
88
+ ? controller.signal.reason
89
+ : new Error("setup operation aborted")));
90
+ controller.signal.addEventListener("abort", onAbort, { once: true });
91
+ sleep(ms).then(() => settle(resolveWait), (error) => settle(() => rejectWait(error)));
92
+ });
93
+ }
94
+ export function withAbortAndTimeout(operation, controller, timeoutMs, label) {
95
+ if (controller.signal.aborted)
96
+ return Promise.reject(controller.signal.reason);
97
+ return new Promise((resolveOperation, rejectOperation) => {
98
+ let settled = false;
99
+ const settle = (task) => {
100
+ if (settled)
101
+ return;
102
+ settled = true;
103
+ clearTimeout(timer);
104
+ controller.signal.removeEventListener("abort", onAbort);
105
+ task();
106
+ };
107
+ const onAbort = () => settle(() => rejectOperation(controller.signal.reason instanceof Error
108
+ ? controller.signal.reason
109
+ : new Error(`${label} aborted`)));
110
+ const timer = setTimeout(() => {
111
+ const error = Object.assign(new Error(`${label} timed out after ${timeoutMs / 1000}s`), {
112
+ code: "setup_timeout",
113
+ });
114
+ controller.abort(error);
115
+ }, timeoutMs);
116
+ timer.unref();
117
+ controller.signal.addEventListener("abort", onAbort, { once: true });
118
+ operation().then((value) => settle(() => resolveOperation(value)), (error) => settle(() => rejectOperation(error)));
119
+ });
120
+ }
121
+ export function processGroupFromJob(job) {
122
+ if (!job.execution)
123
+ return null;
124
+ try {
125
+ return parseProcessGroupHandle(job.execution.processGroup);
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ export function stateMatchesDurableExecution(job, state) {
132
+ return (job.execution?.executionId === state.executionId &&
133
+ job.execution.commandDigest === state.commandDigest &&
134
+ job.execution.manifestDigest === state.manifestDigest &&
135
+ job.execution.observedAt === state.observedAt &&
136
+ JSON.stringify(job.execution.processGroup) === JSON.stringify(state.processGroup));
137
+ }
138
+ export function shellQuote(value) {
139
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
140
+ }
141
+ //# sourceMappingURL=setup-job-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-job-support.js","sourceRoot":"","sources":["../src/setup-job-support.ts"],"names":[],"mappings":"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"}