@claudexor/cli 3.23.2 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/account-observations.d.ts +7 -3
  2. package/dist/account-observations.d.ts.map +1 -1
  3. package/dist/account-observations.js +16 -4
  4. package/dist/account-observations.js.map +1 -1
  5. package/dist/claudexord.d.ts.map +1 -1
  6. package/dist/claudexord.js +6 -1
  7. package/dist/claudexord.js.map +1 -1
  8. package/dist/command-flags.d.ts.map +1 -1
  9. package/dist/command-flags.js +2 -0
  10. package/dist/command-flags.js.map +1 -1
  11. package/dist/harness-command-specs.d.ts.map +1 -1
  12. package/dist/harness-command-specs.js +11 -4
  13. package/dist/harness-command-specs.js.map +1 -1
  14. package/dist/harness-command.d.ts.map +1 -1
  15. package/dist/harness-command.js +5 -0
  16. package/dist/harness-command.js.map +1 -1
  17. package/dist/harness-install-proof.d.ts +9 -0
  18. package/dist/harness-install-proof.d.ts.map +1 -1
  19. package/dist/harness-install-proof.js +60 -8
  20. package/dist/harness-install-proof.js.map +1 -1
  21. package/dist/harness-install-recipes.d.ts +24 -1
  22. package/dist/harness-install-recipes.d.ts.map +1 -1
  23. package/dist/harness-install-recipes.js +54 -2
  24. package/dist/harness-install-recipes.js.map +1 -1
  25. package/dist/harness-install-runtime.d.ts +29 -0
  26. package/dist/harness-install-runtime.d.ts.map +1 -0
  27. package/dist/harness-install-runtime.js +51 -0
  28. package/dist/harness-install-runtime.js.map +1 -0
  29. package/dist/harness-installer.d.ts +19 -65
  30. package/dist/harness-installer.d.ts.map +1 -1
  31. package/dist/harness-installer.js +46 -48
  32. package/dist/harness-installer.js.map +1 -1
  33. package/dist/harness-maintenance-service.d.ts +473 -0
  34. package/dist/harness-maintenance-service.d.ts.map +1 -0
  35. package/dist/harness-maintenance-service.js +429 -0
  36. package/dist/harness-maintenance-service.js.map +1 -0
  37. package/dist/harness-maintenance.d.ts +62 -0
  38. package/dist/harness-maintenance.d.ts.map +1 -0
  39. package/dist/harness-maintenance.js +353 -0
  40. package/dist/harness-maintenance.js.map +1 -0
  41. package/dist/model-services.d.ts +9 -1
  42. package/dist/model-services.d.ts.map +1 -1
  43. package/dist/model-services.js +39 -10
  44. package/dist/model-services.js.map +1 -1
  45. package/package.json +25 -25
@@ -0,0 +1,473 @@
1
+ /**
2
+ * The engine-owned harness maintenance OPERATION. One accepted request is one
3
+ * durable command on the daemon's existing queue/cancel/idempotency authority
4
+ * (the model-operation precedent: no second scheduler or job ledger). Execution
5
+ * runs the CLI primitive (`harness inspect|update`, harness-maintenance.ts) as
6
+ * a child through core spawnProcess, so the blocking installer never runs on
7
+ * the daemon event loop, Cancel reaches the whole process group, and an
8
+ * unconfirmed tree death stays a typed fact instead of a clean cancel.
9
+ *
10
+ * Evidence (before/target/after/mutation) lives in the command record. The
11
+ * proved `before` and the exact resolved target are written durably BEFORE
12
+ * the first mutation; a restart leaves the command interrupted with that
13
+ * evidence and never replays the install. A small in-memory index answers
14
+ * per-harness reads without scanning history on every poll.
15
+ */
16
+ import { existsSync } from "node:fs";
17
+ import { spawnProcess } from "@claudexor/core";
18
+ import { type CommandAuthority, type DaemonClient, type RunContext } from "@claudexor/daemon";
19
+ import type { AuthReadinessService } from "@claudexor/gateway";
20
+ export declare const HARNESS_MAINTENANCE_OPERATION_ID = "harness.maintenance.create";
21
+ /** The CLI entry beside this module: the packaged bundle, else the dist CLI. */
22
+ export declare function claudexorCliEntry(moduleUrl?: string, exists?: typeof existsSync): string;
23
+ export interface HarnessMaintenanceDependencies {
24
+ commands: CommandAuthority;
25
+ client: Pick<DaemonClient, "enqueue" | "cancel">;
26
+ readiness?: () => Pick<AuthReadinessService, "invalidate">;
27
+ /** Test seams; production runs `<node> <cli entry>` through spawnProcess. */
28
+ cli?: {
29
+ command: string;
30
+ args: string[];
31
+ };
32
+ spawn?: typeof spawnProcess;
33
+ cancelKillDelayMs?: number;
34
+ now?: () => Date;
35
+ }
36
+ export declare function createHarnessMaintenance(deps: HarnessMaintenanceDependencies): {
37
+ owns: (params: unknown) => boolean;
38
+ execute: (raw: unknown, ctx: RunContext) => Promise<{
39
+ phase: "accepted" | "installing" | "preparing" | "settled";
40
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
41
+ target: {
42
+ kind: "baseline" | "latest" | "previous" | "version";
43
+ version: string | null;
44
+ };
45
+ before: {
46
+ version: string | null;
47
+ binary: string | null;
48
+ selection: "managed" | "missing" | "override" | "path";
49
+ proved: boolean;
50
+ } | null;
51
+ after: {
52
+ version: string | null;
53
+ binary: string | null;
54
+ selected: boolean;
55
+ proved: boolean;
56
+ } | null;
57
+ mutation: "applied" | "none" | "unknown";
58
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
59
+ limitations: string[];
60
+ progress: string[];
61
+ problem: {
62
+ code: string;
63
+ message: string;
64
+ retryable: boolean;
65
+ fieldErrors: Record<string, string[]>;
66
+ requiredActions: string[];
67
+ evidenceRefs: string[];
68
+ context: Record<string, unknown>;
69
+ } | null;
70
+ lifecycle: "cancelled" | "failed" | "succeeded";
71
+ }>;
72
+ routes: {
73
+ maintenanceInventory: (input?: {
74
+ harnessIds?: string[];
75
+ fresh?: boolean;
76
+ checkLatest?: boolean;
77
+ }) => Promise<{
78
+ observedAt: string;
79
+ harnesses: {
80
+ harness: string;
81
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater";
82
+ maintainable: boolean;
83
+ canCheckLatest: boolean;
84
+ targets: ("baseline" | "latest" | "previous" | "version")[];
85
+ remedy: string | null;
86
+ selection: {
87
+ kind: "managed" | "missing" | "override" | "path";
88
+ binary: string | null;
89
+ version: string | null;
90
+ overrideEnv: string | null;
91
+ };
92
+ installed: {
93
+ version: string | null;
94
+ binary: string | null;
95
+ proved: boolean;
96
+ };
97
+ releaseTested: {
98
+ version: string | null;
99
+ verification: "deterministic_only" | "release_verified" | null;
100
+ };
101
+ available: {
102
+ version: string;
103
+ observedAt: string;
104
+ } | null;
105
+ availableProblem: {
106
+ code: string;
107
+ message: string;
108
+ retryable: boolean;
109
+ fieldErrors: Record<string, string[]>;
110
+ requiredActions: string[];
111
+ evidenceRefs: string[];
112
+ context: Record<string, unknown>;
113
+ } | null;
114
+ previous: {
115
+ version: string;
116
+ operationId: string;
117
+ } | null;
118
+ operation: {
119
+ id: string;
120
+ state: string;
121
+ phase: string;
122
+ targetVersion: string | null;
123
+ finishedAt: string | null;
124
+ } | null;
125
+ observedAt: string;
126
+ }[];
127
+ }>;
128
+ createMaintenanceOperation: (body: unknown, idempotencyKey: string) => Promise<{
129
+ phase: "accepted" | "installing" | "preparing" | "settled";
130
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
131
+ target: {
132
+ kind: "baseline" | "latest" | "previous" | "version";
133
+ version: string | null;
134
+ };
135
+ before: {
136
+ version: string | null;
137
+ binary: string | null;
138
+ selection: "managed" | "missing" | "override" | "path";
139
+ proved: boolean;
140
+ } | null;
141
+ after: {
142
+ version: string | null;
143
+ binary: string | null;
144
+ selected: boolean;
145
+ proved: boolean;
146
+ } | null;
147
+ mutation: "applied" | "none" | "unknown";
148
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
149
+ limitations: string[];
150
+ progress: string[];
151
+ problem: {
152
+ code: string;
153
+ message: string;
154
+ retryable: boolean;
155
+ fieldErrors: Record<string, string[]>;
156
+ requiredActions: string[];
157
+ evidenceRefs: string[];
158
+ context: Record<string, unknown>;
159
+ } | null;
160
+ id: string;
161
+ harness: string;
162
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
163
+ createdAt: string;
164
+ startedAt: string | null;
165
+ finishedAt: string | null;
166
+ }>;
167
+ getMaintenanceOperation: (id: string) => Promise<{
168
+ phase: "accepted" | "installing" | "preparing" | "settled";
169
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
170
+ target: {
171
+ kind: "baseline" | "latest" | "previous" | "version";
172
+ version: string | null;
173
+ };
174
+ before: {
175
+ version: string | null;
176
+ binary: string | null;
177
+ selection: "managed" | "missing" | "override" | "path";
178
+ proved: boolean;
179
+ } | null;
180
+ after: {
181
+ version: string | null;
182
+ binary: string | null;
183
+ selected: boolean;
184
+ proved: boolean;
185
+ } | null;
186
+ mutation: "applied" | "none" | "unknown";
187
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
188
+ limitations: string[];
189
+ progress: string[];
190
+ problem: {
191
+ code: string;
192
+ message: string;
193
+ retryable: boolean;
194
+ fieldErrors: Record<string, string[]>;
195
+ requiredActions: string[];
196
+ evidenceRefs: string[];
197
+ context: Record<string, unknown>;
198
+ } | null;
199
+ id: string;
200
+ harness: string;
201
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
202
+ createdAt: string;
203
+ startedAt: string | null;
204
+ finishedAt: string | null;
205
+ }>;
206
+ cancelMaintenanceOperation: (id: string) => Promise<{
207
+ phase: "accepted" | "installing" | "preparing" | "settled";
208
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
209
+ target: {
210
+ kind: "baseline" | "latest" | "previous" | "version";
211
+ version: string | null;
212
+ };
213
+ before: {
214
+ version: string | null;
215
+ binary: string | null;
216
+ selection: "managed" | "missing" | "override" | "path";
217
+ proved: boolean;
218
+ } | null;
219
+ after: {
220
+ version: string | null;
221
+ binary: string | null;
222
+ selected: boolean;
223
+ proved: boolean;
224
+ } | null;
225
+ mutation: "applied" | "none" | "unknown";
226
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
227
+ limitations: string[];
228
+ progress: string[];
229
+ problem: {
230
+ code: string;
231
+ message: string;
232
+ retryable: boolean;
233
+ fieldErrors: Record<string, string[]>;
234
+ requiredActions: string[];
235
+ evidenceRefs: string[];
236
+ context: Record<string, unknown>;
237
+ } | null;
238
+ id: string;
239
+ harness: string;
240
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
241
+ createdAt: string;
242
+ startedAt: string | null;
243
+ finishedAt: string | null;
244
+ }>;
245
+ };
246
+ decorateHarnessList: <A extends unknown[]>(list: (...args: A) => Promise<unknown>) => (...args: A) => Promise<{
247
+ harnesses?: Array<Record<string, unknown>>;
248
+ }>;
249
+ /** Daemon composition: routes + readiness decoration on the control services. */
250
+ bind(services: {
251
+ harnesses?: (input?: never) => Promise<unknown>;
252
+ } & Record<string, unknown>): void;
253
+ };
254
+ /** The daemon's composition (claudexord.ts); readiness is bound lazily. */
255
+ export declare function daemonHarnessMaintenance(commands: CommandAuthority, client: Pick<DaemonClient, "enqueue" | "cancel">, readiness: () => Pick<AuthReadinessService, "invalidate">): {
256
+ owns: (params: unknown) => boolean;
257
+ execute: (raw: unknown, ctx: RunContext) => Promise<{
258
+ phase: "accepted" | "installing" | "preparing" | "settled";
259
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
260
+ target: {
261
+ kind: "baseline" | "latest" | "previous" | "version";
262
+ version: string | null;
263
+ };
264
+ before: {
265
+ version: string | null;
266
+ binary: string | null;
267
+ selection: "managed" | "missing" | "override" | "path";
268
+ proved: boolean;
269
+ } | null;
270
+ after: {
271
+ version: string | null;
272
+ binary: string | null;
273
+ selected: boolean;
274
+ proved: boolean;
275
+ } | null;
276
+ mutation: "applied" | "none" | "unknown";
277
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
278
+ limitations: string[];
279
+ progress: string[];
280
+ problem: {
281
+ code: string;
282
+ message: string;
283
+ retryable: boolean;
284
+ fieldErrors: Record<string, string[]>;
285
+ requiredActions: string[];
286
+ evidenceRefs: string[];
287
+ context: Record<string, unknown>;
288
+ } | null;
289
+ lifecycle: "cancelled" | "failed" | "succeeded";
290
+ }>;
291
+ routes: {
292
+ maintenanceInventory: (input?: {
293
+ harnessIds?: string[];
294
+ fresh?: boolean;
295
+ checkLatest?: boolean;
296
+ }) => Promise<{
297
+ observedAt: string;
298
+ harnesses: {
299
+ harness: string;
300
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater";
301
+ maintainable: boolean;
302
+ canCheckLatest: boolean;
303
+ targets: ("baseline" | "latest" | "previous" | "version")[];
304
+ remedy: string | null;
305
+ selection: {
306
+ kind: "managed" | "missing" | "override" | "path";
307
+ binary: string | null;
308
+ version: string | null;
309
+ overrideEnv: string | null;
310
+ };
311
+ installed: {
312
+ version: string | null;
313
+ binary: string | null;
314
+ proved: boolean;
315
+ };
316
+ releaseTested: {
317
+ version: string | null;
318
+ verification: "deterministic_only" | "release_verified" | null;
319
+ };
320
+ available: {
321
+ version: string;
322
+ observedAt: string;
323
+ } | null;
324
+ availableProblem: {
325
+ code: string;
326
+ message: string;
327
+ retryable: boolean;
328
+ fieldErrors: Record<string, string[]>;
329
+ requiredActions: string[];
330
+ evidenceRefs: string[];
331
+ context: Record<string, unknown>;
332
+ } | null;
333
+ previous: {
334
+ version: string;
335
+ operationId: string;
336
+ } | null;
337
+ operation: {
338
+ id: string;
339
+ state: string;
340
+ phase: string;
341
+ targetVersion: string | null;
342
+ finishedAt: string | null;
343
+ } | null;
344
+ observedAt: string;
345
+ }[];
346
+ }>;
347
+ createMaintenanceOperation: (body: unknown, idempotencyKey: string) => Promise<{
348
+ phase: "accepted" | "installing" | "preparing" | "settled";
349
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
350
+ target: {
351
+ kind: "baseline" | "latest" | "previous" | "version";
352
+ version: string | null;
353
+ };
354
+ before: {
355
+ version: string | null;
356
+ binary: string | null;
357
+ selection: "managed" | "missing" | "override" | "path";
358
+ proved: boolean;
359
+ } | null;
360
+ after: {
361
+ version: string | null;
362
+ binary: string | null;
363
+ selected: boolean;
364
+ proved: boolean;
365
+ } | null;
366
+ mutation: "applied" | "none" | "unknown";
367
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
368
+ limitations: string[];
369
+ progress: string[];
370
+ problem: {
371
+ code: string;
372
+ message: string;
373
+ retryable: boolean;
374
+ fieldErrors: Record<string, string[]>;
375
+ requiredActions: string[];
376
+ evidenceRefs: string[];
377
+ context: Record<string, unknown>;
378
+ } | null;
379
+ id: string;
380
+ harness: string;
381
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
382
+ createdAt: string;
383
+ startedAt: string | null;
384
+ finishedAt: string | null;
385
+ }>;
386
+ getMaintenanceOperation: (id: string) => Promise<{
387
+ phase: "accepted" | "installing" | "preparing" | "settled";
388
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
389
+ target: {
390
+ kind: "baseline" | "latest" | "previous" | "version";
391
+ version: string | null;
392
+ };
393
+ before: {
394
+ version: string | null;
395
+ binary: string | null;
396
+ selection: "managed" | "missing" | "override" | "path";
397
+ proved: boolean;
398
+ } | null;
399
+ after: {
400
+ version: string | null;
401
+ binary: string | null;
402
+ selected: boolean;
403
+ proved: boolean;
404
+ } | null;
405
+ mutation: "applied" | "none" | "unknown";
406
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
407
+ limitations: string[];
408
+ progress: string[];
409
+ problem: {
410
+ code: string;
411
+ message: string;
412
+ retryable: boolean;
413
+ fieldErrors: Record<string, string[]>;
414
+ requiredActions: string[];
415
+ evidenceRefs: string[];
416
+ context: Record<string, unknown>;
417
+ } | null;
418
+ id: string;
419
+ harness: string;
420
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
421
+ createdAt: string;
422
+ startedAt: string | null;
423
+ finishedAt: string | null;
424
+ }>;
425
+ cancelMaintenanceOperation: (id: string) => Promise<{
426
+ phase: "accepted" | "installing" | "preparing" | "settled";
427
+ mechanism: "managed_npm" | "vendor_script" | "vendor_updater" | null;
428
+ target: {
429
+ kind: "baseline" | "latest" | "previous" | "version";
430
+ version: string | null;
431
+ };
432
+ before: {
433
+ version: string | null;
434
+ binary: string | null;
435
+ selection: "managed" | "missing" | "override" | "path";
436
+ proved: boolean;
437
+ } | null;
438
+ after: {
439
+ version: string | null;
440
+ binary: string | null;
441
+ selected: boolean;
442
+ proved: boolean;
443
+ } | null;
444
+ mutation: "applied" | "none" | "unknown";
445
+ termination: "confirmed" | "not_applicable" | "unconfirmed";
446
+ limitations: string[];
447
+ progress: string[];
448
+ problem: {
449
+ code: string;
450
+ message: string;
451
+ retryable: boolean;
452
+ fieldErrors: Record<string, string[]>;
453
+ requiredActions: string[];
454
+ evidenceRefs: string[];
455
+ context: Record<string, unknown>;
456
+ } | null;
457
+ id: string;
458
+ harness: string;
459
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
460
+ createdAt: string;
461
+ startedAt: string | null;
462
+ finishedAt: string | null;
463
+ }>;
464
+ };
465
+ decorateHarnessList: <A extends unknown[]>(list: (...args: A) => Promise<unknown>) => (...args: A) => Promise<{
466
+ harnesses?: Array<Record<string, unknown>>;
467
+ }>;
468
+ /** Daemon composition: routes + readiness decoration on the control services. */
469
+ bind(services: {
470
+ harnesses?: (input?: never) => Promise<unknown>;
471
+ } & Record<string, unknown>): void;
472
+ };
473
+ //# sourceMappingURL=harness-maintenance-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-maintenance-service.d.ts","sourceRoot":"","sources":["../src/harness-maintenance-service.ts"],"names":[],"mappings":"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"}