@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,250 @@
1
+ import { DurableJournal, type JournalRecoveryState } from "@claudexor/journal";
2
+ import { type ControlSetupJob, type ControlSetupJobListFilter, type ControlSetupJobSnapshot } from "@claudexor/schema";
3
+ export declare const ACTIVE_SETUP_STATES: Set<"succeeded" | "failed" | "running" | "queued" | "cancelled" | "interrupted_unknown" | "timed_out" | "waiting_for_input" | "not_supported">;
4
+ export declare const TERMINAL_SETUP_STATES: Set<"succeeded" | "failed" | "running" | "queued" | "cancelled" | "interrupted_unknown" | "timed_out" | "waiting_for_input" | "not_supported">;
5
+ export interface SetupJobPaths {
6
+ dir: string;
7
+ manifest: string;
8
+ runnerState: string;
9
+ runnerResult: string;
10
+ runnerPermit: string;
11
+ command: string;
12
+ }
13
+ export interface SetupJobStoreOptions {
14
+ now?: () => Date;
15
+ journal?: DurableJournal;
16
+ }
17
+ interface SetupCreateIdempotency {
18
+ key: string;
19
+ client: string;
20
+ request: unknown;
21
+ }
22
+ /**
23
+ * Setup lifecycle projection over the daemon's global durable journal.
24
+ *
25
+ * Per-job directories contain only operational artifacts (runner handshake
26
+ * and command launcher). They never contain a job snapshot,
27
+ * event ledger or sequence metadata and cannot become a second authority.
28
+ */
29
+ export declare class SetupJobStore {
30
+ readonly rootDir: string;
31
+ readonly artifactsDir: string;
32
+ readonly journal: DurableJournal;
33
+ private readonly jobs;
34
+ private readonly createByKey;
35
+ private readonly now;
36
+ private semanticRecovery;
37
+ constructor(rootDir: string, opts?: SetupJobStoreOptions);
38
+ paths(jobId: string): SetupJobPaths;
39
+ recoveryState(): JournalRecoveryState;
40
+ validateProjection(): void;
41
+ create(job: ControlSetupJob, idempotency?: SetupCreateIdempotency): ControlSetupJob;
42
+ resolveCreate(idempotency: SetupCreateIdempotency): ControlSetupJob | null;
43
+ bindCreate(jobId: string, idempotency: SetupCreateIdempotency): ControlSetupJob;
44
+ private persist;
45
+ update(jobId: string, patch: Partial<ControlSetupJob>): ControlSetupJob;
46
+ status(jobId: string): ControlSetupJob;
47
+ list(filter?: ControlSetupJobListFilter): ControlSetupJob[];
48
+ snapshot(jobId: string): ControlSetupJobSnapshot;
49
+ events(jobId: string, afterCursor?: string | null): {
50
+ message: string;
51
+ cursor: string;
52
+ state: "failed" | "cancelled" | "running" | "interrupted_unknown" | "queued" | "succeeded" | "timed_out" | "waiting_for_input" | "not_supported";
53
+ kind: "status";
54
+ time: string;
55
+ jobId: string;
56
+ previousCursor: string | null;
57
+ sequence: number;
58
+ job: {
59
+ message: string;
60
+ harness: "cursor" | "codex" | "claude";
61
+ startedAt: string | null;
62
+ state: "failed" | "cancelled" | "running" | "interrupted_unknown" | "queued" | "succeeded" | "timed_out" | "waiting_for_input" | "not_supported";
63
+ profileId: string | null;
64
+ command: string | null;
65
+ createdAt: string;
66
+ jobId: string;
67
+ phase: "completed" | "preparing" | "launching" | "awaiting_user" | "verifying" | "cancelling";
68
+ finishedAt: string | null;
69
+ action: "login";
70
+ guideUrl: string | null;
71
+ outcome?: {
72
+ reason: "completed" | "interrupted_unknown" | "timed_out" | "not_supported" | "launch_failed" | "command_failed" | "auth_not_ready" | "capability_verification_failed" | "credential_route_mismatch" | "cancelled_by_user" | "cancelled_on_restart" | "interrupted" | "termination_unconfirmed";
73
+ exitCode?: number | null | undefined;
74
+ signal?: string | null | undefined;
75
+ } | undefined;
76
+ execution?: {
77
+ observedAt: string;
78
+ commandDigest: string;
79
+ executionId: string;
80
+ manifestDigest: string;
81
+ processGroup: {
82
+ schemaVersion: 1;
83
+ pgid: number;
84
+ leader: {
85
+ status: "known";
86
+ source: "procfs_stat" | "proc_pidinfo";
87
+ pid: number;
88
+ platform: "linux" | "darwin";
89
+ startToken: string;
90
+ processGroupId: number;
91
+ };
92
+ };
93
+ permitIssuedAt?: string | undefined;
94
+ } | undefined;
95
+ deadlineAt?: string | undefined;
96
+ authCapability?: {
97
+ attemptId: string;
98
+ challengeDigest: string;
99
+ requestDigest: string;
100
+ disclosure: {
101
+ schemaVersion: 1;
102
+ protocolVersion: 1;
103
+ harness: string;
104
+ requested: "auto" | "subscription" | "api_key";
105
+ requiredRoute: "local" | "vendor_native" | "managed_api_key";
106
+ requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
107
+ networkScope: "selected_harness_only";
108
+ billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
109
+ incrementalCostKnowledge: "exact" | "unknown" | "estimated";
110
+ mayConsumeQuota: boolean;
111
+ generatedAt: string;
112
+ };
113
+ state: "disclosed";
114
+ } | {
115
+ attemptId: string;
116
+ startedAt: string;
117
+ challengeDigest: string;
118
+ requestDigest: string;
119
+ disclosure: {
120
+ schemaVersion: 1;
121
+ protocolVersion: 1;
122
+ harness: string;
123
+ requested: "auto" | "subscription" | "api_key";
124
+ requiredRoute: "local" | "vendor_native" | "managed_api_key";
125
+ requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
126
+ networkScope: "selected_harness_only";
127
+ billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
128
+ incrementalCostKnowledge: "exact" | "unknown" | "estimated";
129
+ mayConsumeQuota: boolean;
130
+ generatedAt: string;
131
+ };
132
+ state: "running";
133
+ } | {
134
+ attemptId: string;
135
+ startedAt: string;
136
+ completedAt: string;
137
+ challengeDigest: string;
138
+ requestDigest: string;
139
+ disclosure: {
140
+ schemaVersion: 1;
141
+ protocolVersion: 1;
142
+ harness: string;
143
+ requested: "auto" | "subscription" | "api_key";
144
+ requiredRoute: "local" | "vendor_native" | "managed_api_key";
145
+ requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
146
+ networkScope: "selected_harness_only";
147
+ billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
148
+ incrementalCostKnowledge: "exact" | "unknown" | "estimated";
149
+ mayConsumeQuota: boolean;
150
+ generatedAt: string;
151
+ };
152
+ state: "completed";
153
+ receipt: {
154
+ availability: "unknown" | "available" | "unavailable";
155
+ verification: "passed" | "failed" | "not_run";
156
+ harness: string;
157
+ requested: "auto" | "subscription" | "api_key";
158
+ requiredRoute: "local" | "vendor_native" | "managed_api_key";
159
+ requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
160
+ billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
161
+ receiptId: string;
162
+ attemptId: string;
163
+ effective: "local" | "vendor_native" | "managed_api_key" | null;
164
+ effectiveSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none" | null;
165
+ selectionReason: "harness_error" | "exact_requested_route" | "adapter_unavailable" | "request_mismatch" | "route_missing" | "route_mismatch" | "source_missing" | "source_mismatch" | "adapter_error" | "missing_completion" | "response_mismatch" | "scratch_mutated" | "protocol_violation" | "adapter_identity_mismatch" | "cancelled";
166
+ costKnowledge: "exact" | "unknown" | "estimated";
167
+ startedAt: string;
168
+ completedAt: string;
169
+ challengeDigest: string;
170
+ requestDigest: string;
171
+ responseDigest: string;
172
+ streamDigest: string;
173
+ scratchBeforeDigest: string;
174
+ scratchAfterDigest: string;
175
+ stream: {
176
+ aborted: boolean;
177
+ startedEvents: number;
178
+ completedEvents: number;
179
+ errorEvents: number;
180
+ unexpectedToolEvents: number;
181
+ interactionEvents: number;
182
+ sessionMismatchEvents: number;
183
+ eventsAfterCompleted: number;
184
+ };
185
+ evidenceRefs: string[];
186
+ costUsd?: number | undefined;
187
+ };
188
+ } | {
189
+ attemptId: string;
190
+ startedAt: string;
191
+ challengeDigest: string;
192
+ requestDigest: string;
193
+ disclosure: {
194
+ schemaVersion: 1;
195
+ protocolVersion: 1;
196
+ harness: string;
197
+ requested: "auto" | "subscription" | "api_key";
198
+ requiredRoute: "local" | "vendor_native" | "managed_api_key";
199
+ requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
200
+ networkScope: "selected_harness_only";
201
+ billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
202
+ incrementalCostKnowledge: "exact" | "unknown" | "estimated";
203
+ mayConsumeQuota: boolean;
204
+ generatedAt: string;
205
+ };
206
+ state: "interrupted_unknown";
207
+ interruptedAt: string;
208
+ } | undefined;
209
+ authorization?: {
210
+ args: string[];
211
+ commandDigest: string;
212
+ executionId: string;
213
+ manifestDigest: string;
214
+ executable: {
215
+ sha256: string;
216
+ mode: number;
217
+ realpath: string;
218
+ size: number;
219
+ device: string;
220
+ inode: string;
221
+ };
222
+ } | undefined;
223
+ nativeCommand?: {
224
+ commandDigest: string;
225
+ finishedAt: string;
226
+ executionId: string;
227
+ manifestDigest: string;
228
+ permitIssuedAt: string | null;
229
+ commandStarted: boolean;
230
+ exitCode: number | null;
231
+ signal: string | null;
232
+ errorCode?: "permit_timeout" | "spawn_failed" | undefined;
233
+ } | undefined;
234
+ terminationReconciliation?: {
235
+ status: "empty";
236
+ observedAt: string;
237
+ } | undefined;
238
+ };
239
+ }[];
240
+ appendLog(jobId: string, line: string): void;
241
+ private rebuild;
242
+ private newBinding;
243
+ private rememberBinding;
244
+ private failSemantic;
245
+ private assertAvailable;
246
+ private ensureJobDir;
247
+ private validExistingJobDir;
248
+ }
249
+ export {};
250
+ //# sourceMappingURL=setup-job-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-job-store.d.ts","sourceRoot":"","sources":["../src/setup-job-store.ts"],"names":[],"mappings":"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"}
@@ -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