@claudexor/cli 3.23.2 → 3.25.1

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 (118) hide show
  1. package/dist/account-management.d.ts +17 -0
  2. package/dist/account-management.d.ts.map +1 -0
  3. package/dist/account-management.js +35 -0
  4. package/dist/account-management.js.map +1 -0
  5. package/dist/account-observations.d.ts +7 -3
  6. package/dist/account-observations.d.ts.map +1 -1
  7. package/dist/account-observations.js +16 -4
  8. package/dist/account-observations.js.map +1 -1
  9. package/dist/account-reset-command.d.ts +3 -0
  10. package/dist/account-reset-command.d.ts.map +1 -0
  11. package/dist/account-reset-command.js +32 -0
  12. package/dist/account-reset-command.js.map +1 -0
  13. package/dist/account-reset-services.d.ts +341 -0
  14. package/dist/account-reset-services.d.ts.map +1 -0
  15. package/dist/account-reset-services.js +183 -0
  16. package/dist/account-reset-services.js.map +1 -0
  17. package/dist/account-resource-query.d.ts +18 -0
  18. package/dist/account-resource-query.d.ts.map +1 -0
  19. package/dist/account-resource-query.js +62 -0
  20. package/dist/account-resource-query.js.map +1 -0
  21. package/dist/accounts-services.d.ts +1 -0
  22. package/dist/accounts-services.d.ts.map +1 -1
  23. package/dist/accounts-services.js +4 -2
  24. package/dist/accounts-services.js.map +1 -1
  25. package/dist/claude-account-resources.d.ts +5 -0
  26. package/dist/claude-account-resources.d.ts.map +1 -0
  27. package/dist/claude-account-resources.js +134 -0
  28. package/dist/claude-account-resources.js.map +1 -0
  29. package/dist/claude-oauth-codec.d.ts +4 -0
  30. package/dist/claude-oauth-codec.d.ts.map +1 -0
  31. package/dist/claude-oauth-codec.js +71 -0
  32. package/dist/claude-oauth-codec.js.map +1 -0
  33. package/dist/claude-oauth-credential.d.ts +6 -0
  34. package/dist/claude-oauth-credential.d.ts.map +1 -1
  35. package/dist/claude-oauth-credential.js +18 -0
  36. package/dist/claude-oauth-credential.js.map +1 -1
  37. package/dist/claude-oauth-fetch.d.ts +1 -1
  38. package/dist/claude-oauth-fetch.d.ts.map +1 -1
  39. package/dist/claude-oauth-fetch.js +3 -2
  40. package/dist/claude-oauth-fetch.js.map +1 -1
  41. package/dist/claude-oauth-usage.d.ts +5 -4
  42. package/dist/claude-oauth-usage.d.ts.map +1 -1
  43. package/dist/claude-oauth-usage.js +47 -75
  44. package/dist/claude-oauth-usage.js.map +1 -1
  45. package/dist/claude-resource-source.d.ts +18 -0
  46. package/dist/claude-resource-source.d.ts.map +1 -0
  47. package/dist/claude-resource-source.js +108 -0
  48. package/dist/claude-resource-source.js.map +1 -0
  49. package/dist/claude-resource-transport.d.ts +12 -0
  50. package/dist/claude-resource-transport.d.ts.map +1 -0
  51. package/dist/claude-resource-transport.js +47 -0
  52. package/dist/claude-resource-transport.js.map +1 -0
  53. package/dist/claudexord.d.ts.map +1 -1
  54. package/dist/claudexord.js +10 -4
  55. package/dist/claudexord.js.map +1 -1
  56. package/dist/cli.js +3 -0
  57. package/dist/cli.js.map +1 -1
  58. package/dist/codex-quota-source.d.ts +7 -2
  59. package/dist/codex-quota-source.d.ts.map +1 -1
  60. package/dist/codex-quota-source.js +72 -12
  61. package/dist/codex-quota-source.js.map +1 -1
  62. package/dist/command-flags.d.ts.map +1 -1
  63. package/dist/command-flags.js +7 -0
  64. package/dist/command-flags.js.map +1 -1
  65. package/dist/control-services.d.ts +264 -118
  66. package/dist/control-services.d.ts.map +1 -1
  67. package/dist/harness-command-specs.d.ts.map +1 -1
  68. package/dist/harness-command-specs.js +11 -4
  69. package/dist/harness-command-specs.js.map +1 -1
  70. package/dist/harness-command.d.ts.map +1 -1
  71. package/dist/harness-command.js +5 -0
  72. package/dist/harness-command.js.map +1 -1
  73. package/dist/harness-install-proof.d.ts +9 -0
  74. package/dist/harness-install-proof.d.ts.map +1 -1
  75. package/dist/harness-install-proof.js +60 -8
  76. package/dist/harness-install-proof.js.map +1 -1
  77. package/dist/harness-install-recipes.d.ts +24 -1
  78. package/dist/harness-install-recipes.d.ts.map +1 -1
  79. package/dist/harness-install-recipes.js +54 -2
  80. package/dist/harness-install-recipes.js.map +1 -1
  81. package/dist/harness-install-runtime.d.ts +29 -0
  82. package/dist/harness-install-runtime.d.ts.map +1 -0
  83. package/dist/harness-install-runtime.js +51 -0
  84. package/dist/harness-install-runtime.js.map +1 -0
  85. package/dist/harness-installer.d.ts +19 -65
  86. package/dist/harness-installer.d.ts.map +1 -1
  87. package/dist/harness-installer.js +46 -48
  88. package/dist/harness-installer.js.map +1 -1
  89. package/dist/harness-maintenance-service.d.ts +473 -0
  90. package/dist/harness-maintenance-service.d.ts.map +1 -0
  91. package/dist/harness-maintenance-service.js +429 -0
  92. package/dist/harness-maintenance-service.js.map +1 -0
  93. package/dist/harness-maintenance.d.ts +62 -0
  94. package/dist/harness-maintenance.d.ts.map +1 -0
  95. package/dist/harness-maintenance.js +353 -0
  96. package/dist/harness-maintenance.js.map +1 -0
  97. package/dist/mcp-runner.d.ts.map +1 -1
  98. package/dist/mcp-runner.js +5 -0
  99. package/dist/mcp-runner.js.map +1 -1
  100. package/dist/model-services.d.ts +9 -1
  101. package/dist/model-services.d.ts.map +1 -1
  102. package/dist/model-services.js +39 -10
  103. package/dist/model-services.js.map +1 -1
  104. package/dist/ops-command-specs.d.ts.map +1 -1
  105. package/dist/ops-command-specs.js +11 -2
  106. package/dist/ops-command-specs.js.map +1 -1
  107. package/dist/quota-command.d.ts.map +1 -1
  108. package/dist/quota-command.js +38 -2
  109. package/dist/quota-command.js.map +1 -1
  110. package/dist/quota-refreshers.d.ts +3 -1
  111. package/dist/quota-refreshers.d.ts.map +1 -1
  112. package/dist/quota-refreshers.js +6 -2
  113. package/dist/quota-refreshers.js.map +1 -1
  114. package/dist/quota-services.d.ts +234 -2
  115. package/dist/quota-services.d.ts.map +1 -1
  116. package/dist/quota-services.js +49 -4
  117. package/dist/quota-services.js.map +1 -1
  118. package/package.json +25 -25
@@ -0,0 +1,429 @@
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 { dirname, resolve } from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ import { spawnProcess } from "@claudexor/core";
20
+ import { commandStoreForId, commandStoreForRequest, commandStores, } from "@claudexor/daemon";
21
+ import { clearCodexEffortCache } from "@claudexor/harness-codex";
22
+ import { ControlHarnessMaintenanceCreateRequest, ControlHarnessMaintenanceInventory, ControlHarnessMaintenanceOperation, ControlProblem, HarnessMaintenanceEntry, HarnessMaintenanceEvidence, HarnessMaintenanceParams, isHarnessMaintenanceOperation, isTerminalLifecycle, } from "@claudexor/schema";
23
+ import { redactSecrets } from "@claudexor/util";
24
+ import { accountObservations } from "./account-observations.js";
25
+ import { INSTALLABLE_HARNESSES } from "./harness-command-specs.js";
26
+ import { harnessMaintenanceRecipe, isInstallableHarness, NPM_PINS, } from "./harness-install-recipes.js";
27
+ export const HARNESS_MAINTENANCE_OPERATION_ID = "harness.maintenance.create";
28
+ const CLIENT_ID = "control-api";
29
+ const Inspection = HarnessMaintenanceEntry.omit({ previous: true, operation: true });
30
+ /** The CLI entry beside this module: the packaged bundle, else the dist CLI. */
31
+ export function claudexorCliEntry(moduleUrl = import.meta.url, exists = existsSync) {
32
+ const directory = dirname(fileURLToPath(moduleUrl));
33
+ const bundled = resolve(directory, "claudexor.bundle.cjs");
34
+ return exists(bundled) ? bundled : resolve(directory, "cli.js");
35
+ }
36
+ function problem(code, message, retryable = false) {
37
+ return ControlProblem.parse({ code, message: redactSecrets(message), retryable });
38
+ }
39
+ function failure(code, message, status, context = {}) {
40
+ return Object.assign(new Error(message), { code, status, retryable: false, context });
41
+ }
42
+ export function createHarnessMaintenance(deps) {
43
+ const now = () => (deps.now ?? (() => new Date()))();
44
+ const cli = deps.cli ?? { command: process.execPath, args: [claudexorCliEntry()] };
45
+ const spawn = deps.spawn ?? spawnProcess;
46
+ const inventory = new Map();
47
+ const inventoryGenerations = new Map();
48
+ const latestSeen = new Map();
49
+ const creating = new Set();
50
+ let index = null;
51
+ const byHarness = () => {
52
+ if (index)
53
+ return index;
54
+ index = new Map();
55
+ const records = commandStores(deps.commands)
56
+ .flatMap((store) => store.records())
57
+ .filter((record) => isHarnessMaintenanceOperation(record.params))
58
+ .sort((a, b) => (a.createdAt < b.createdAt ? -1 : 1));
59
+ for (const record of records)
60
+ remember(record.id, record.params.harness);
61
+ return index;
62
+ };
63
+ const remember = (id, harness) => {
64
+ const ids = index.get(harness) ?? [];
65
+ if (!ids.includes(id))
66
+ index.set(harness, [...ids, id]);
67
+ };
68
+ /** Newest first; ids pruned by ordinary retention drop out of the index. */
69
+ const operationsOf = (harness) => {
70
+ const ids = byHarness().get(harness) ?? [];
71
+ const live = ids.flatMap((id) => commandStoreForId(deps.commands, id)?.get(id) ?? []);
72
+ if (live.length !== ids.length)
73
+ byHarness().set(harness, live.map((record) => record.id));
74
+ return live.reverse();
75
+ };
76
+ const evidenceOf = (record) => {
77
+ const { lifecycle: _lifecycle, ...result } = (record.result ?? {});
78
+ const parsed = HarnessMaintenanceEvidence.safeParse(result);
79
+ return parsed.success ? parsed.data : null;
80
+ };
81
+ /** A proved earlier version from retained evidence, only where a mutation
82
+ * could have replaced it. Unknown or pruned stays unknown. */
83
+ const previousOf = (harness) => {
84
+ for (const record of operationsOf(harness)) {
85
+ const evidence = evidenceOf(record);
86
+ if (evidence?.before?.proved && evidence.before.version && evidence.mutation !== "none")
87
+ return { version: evidence.before.version, operationId: record.id };
88
+ }
89
+ return null;
90
+ };
91
+ async function runChild(args, signal) {
92
+ let stdout = "";
93
+ const progress = [];
94
+ let unconfirmed = false;
95
+ for await (const event of spawn(cli.command, [...cli.args, ...args, "--json"], {
96
+ ...(signal ? { abortSignal: signal } : {}),
97
+ cancelSignal: "SIGTERM",
98
+ cancelKillDelayMs: deps.cancelKillDelayMs ?? 10_000,
99
+ })) {
100
+ if (event.type === "stdout")
101
+ stdout += `${event.line}\n`;
102
+ else if (event.type === "stderr") {
103
+ progress.push(redactSecrets(event.line).slice(0, 400));
104
+ if (progress.length > 40)
105
+ progress.shift();
106
+ }
107
+ else if (event.type === "termination_unconfirmed")
108
+ unconfirmed = true;
109
+ }
110
+ let json = null;
111
+ try {
112
+ json = JSON.parse(stdout.trim());
113
+ }
114
+ catch {
115
+ json = null;
116
+ }
117
+ return { json, progress, unconfirmed };
118
+ }
119
+ async function inspect(ids, latest, fresh, signal) {
120
+ let stale = fresh || latest ? ids : ids.filter((id) => !inventory.has(id));
121
+ while (stale.length) {
122
+ // A multi-harness child returns all rows, including ones not requested.
123
+ const generations = new Map(inventoryGenerations);
124
+ const one = stale.length === 1 ? [stale[0]] : [];
125
+ const out = await runChild(["harness", "inspect", ...one, ...(latest ? ["--latest"] : [])], signal);
126
+ if (out.unconfirmed || signal?.aborted)
127
+ throw Object.assign(failure("maintenance_cancelled", "Maintenance preparation was cancelled", 409), {
128
+ termination: out.unconfirmed ? "unconfirmed" : "confirmed",
129
+ });
130
+ const rows = out.json?.harnesses;
131
+ const parsed = Array.isArray(rows) ? rows.map((row) => Inspection.safeParse(row)) : [];
132
+ if (!parsed.length || parsed.some((row) => !row.success))
133
+ throw failure("maintenance_inspection_failed", `harness inspection did not return its typed answer: ${out.progress.slice(-3).join(" | ")}`, 502);
134
+ for (const row of parsed) {
135
+ const value = row.data;
136
+ if (generations.get(value.harness) !== inventoryGenerations.get(value.harness))
137
+ continue;
138
+ if (latest)
139
+ latestSeen.set(value.harness, value);
140
+ inventory.set(value.harness, value);
141
+ }
142
+ // A newer read may already own the invalidated row. Otherwise acquire it
143
+ // now, so this caller also gets current facts instead of an empty answer.
144
+ stale = ids.filter((id) => generations.get(id) !== inventoryGenerations.get(id) && !inventory.has(id));
145
+ }
146
+ return ids.flatMap((id) => inventory.get(id) ?? []);
147
+ }
148
+ function detail(id) {
149
+ const record = commandStoreForId(deps.commands, id)?.get(id);
150
+ const params = HarnessMaintenanceParams.safeParse(record?.params);
151
+ if (!record || !params.success)
152
+ throw failure("maintenance_operation_not_found", "No such maintenance operation", 404);
153
+ const evidence = evidenceOf(record) ?? {
154
+ phase: "accepted",
155
+ mechanism: null,
156
+ target: params.data.target,
157
+ before: null,
158
+ after: null,
159
+ mutation: "none",
160
+ termination: "not_applicable",
161
+ limitations: [],
162
+ progress: [],
163
+ problem: null,
164
+ };
165
+ if (isTerminalLifecycle(record.state) && !evidence.problem && record.state !== "succeeded")
166
+ evidence.problem = problem(record.errorCode ?? `maintenance_${record.state}`, record.error ?? `maintenance ended ${record.state}`);
167
+ return ControlHarnessMaintenanceOperation.parse({
168
+ ...evidence,
169
+ id,
170
+ harness: params.data.harness,
171
+ state: record.state,
172
+ createdAt: record.createdAt,
173
+ startedAt: record.startedAt ?? null,
174
+ finishedAt: record.finishedAt ?? null,
175
+ });
176
+ }
177
+ function save(id, evidence) {
178
+ commandStoreForId(deps.commands, id)?.update(id, { result: evidence });
179
+ }
180
+ /** After any step that may have changed bytes: drop this harness's cached
181
+ * observations so the next read re-proves them (no account fanout). */
182
+ function invalidate(harness) {
183
+ inventoryGenerations.set(harness, (inventoryGenerations.get(harness) ?? 0) + 1);
184
+ inventory.delete(harness);
185
+ accountObservations.invalidateHarness(harness);
186
+ deps.readiness?.().invalidate(harness);
187
+ // Keyed by binary path, which an in-place install keeps. (Claude's model
188
+ // probe cache is package-private; its documented TTL/fresh bypass remain.)
189
+ clearCodexEffortCache();
190
+ }
191
+ async function execute(raw, ctx) {
192
+ const params = HarnessMaintenanceParams.parse(raw);
193
+ const { harness } = params;
194
+ const evidence = {
195
+ phase: "preparing",
196
+ mechanism: null,
197
+ target: { ...params.target },
198
+ before: null,
199
+ after: null,
200
+ mutation: "none",
201
+ termination: "not_applicable",
202
+ limitations: [],
203
+ progress: [],
204
+ problem: null,
205
+ };
206
+ let lifecycle = "failed";
207
+ let spawned = false;
208
+ try {
209
+ save(ctx.jobId, evidence);
210
+ const npm = harnessMaintenanceRecipe(harness).mechanism === "managed_npm";
211
+ const [row] = await inspect([harness], npm && params.target.kind === "latest", true, ctx.signal);
212
+ ctx.signal.throwIfAborted();
213
+ if (!row)
214
+ throw failure("maintenance_inspection_failed", `no inspection for ${harness}`, 502);
215
+ evidence.mechanism = row.mechanism;
216
+ const managed = row.mechanism === "managed_npm";
217
+ evidence.before = {
218
+ version: managed ? row.installed.version : row.selection.version,
219
+ binary: managed ? row.installed.binary : row.selection.binary,
220
+ selection: row.selection.kind,
221
+ proved: managed ? row.installed.proved : row.selection.version !== null,
222
+ };
223
+ if (!row.maintainable || !row.targets.includes(params.target.kind))
224
+ throw failure("harness_not_maintainable", row.remedy ?? "target is not supported", 409);
225
+ const version = managed && params.target.kind === "latest" ? row.available?.version : params.target.version;
226
+ if (managed && !version)
227
+ throw failure("latest_unavailable", row.availableProblem?.message ?? "no latest version", 502);
228
+ // Durable BEFORE the first mutation: proved before, exact target, effect unknown.
229
+ evidence.target = { kind: params.target.kind, version: version ?? null };
230
+ evidence.phase = "installing";
231
+ evidence.mutation = "unknown";
232
+ evidence.limitations = ["in_place_replacement", "new_starts_may_fail"];
233
+ save(ctx.jobId, evidence);
234
+ spawned = true;
235
+ const out = await runChild(["harness", "update", harness, ...(version ? ["--vendor-version", version] : []), "--yes"], ctx.signal);
236
+ const receipt = (out.json ?? {});
237
+ evidence.progress = out.progress.slice(-20);
238
+ evidence.termination = out.unconfirmed
239
+ ? "unconfirmed"
240
+ : ctx.signal.aborted
241
+ ? "confirmed"
242
+ : "not_applicable";
243
+ if (receipt.after !== undefined)
244
+ evidence.after = receipt.after;
245
+ if (receipt.mutation)
246
+ evidence.mutation = receipt.mutation;
247
+ if (receipt.limitations)
248
+ evidence.limitations = receipt.limitations;
249
+ if (ctx.signal.aborted) {
250
+ lifecycle = "cancelled";
251
+ evidence.problem = problem("maintenance_cancelled", evidence.mutation === "none"
252
+ ? "cancelled; nothing was changed"
253
+ : "cancelled after the installer started; the installation may be partially replaced");
254
+ }
255
+ else if (receipt.ok === true)
256
+ lifecycle = "succeeded";
257
+ else {
258
+ if (!receipt.mutation)
259
+ evidence.mutation = "unknown";
260
+ evidence.problem = problem(receipt.code ?? "maintenance_failed", receipt.refusal ??
261
+ (out.progress.slice(-3).join(" | ") || "the update child returned no receipt"));
262
+ }
263
+ }
264
+ catch (error) {
265
+ const code = error.code;
266
+ const termination = error.termination;
267
+ if (termination === "unconfirmed" || termination === "confirmed")
268
+ evidence.termination = termination;
269
+ lifecycle = ctx.signal.aborted ? "cancelled" : "failed";
270
+ evidence.problem = problem(typeof code === "string" ? code : "maintenance_failed", error instanceof Error ? error.message : String(error));
271
+ }
272
+ finally {
273
+ evidence.phase = "settled";
274
+ // Any started step may have touched bytes (a vendor "no change" too).
275
+ if (spawned)
276
+ invalidate(harness);
277
+ }
278
+ return { lifecycle, ...evidence };
279
+ }
280
+ const routes = {
281
+ maintenanceInventory: async (input = {}) => {
282
+ const ids = input.harnessIds?.length ? input.harnessIds : [...INSTALLABLE_HARNESSES];
283
+ const unknown = ids.filter((id) => !isInstallableHarness(id));
284
+ if (unknown.length)
285
+ throw failure("harness_not_installable", `unknown harness: ${unknown.join(", ")}`, 400);
286
+ const rows = await inspect(ids, input.checkLatest === true, input.fresh === true);
287
+ return ControlHarnessMaintenanceInventory.parse({
288
+ observedAt: now().toISOString(),
289
+ harnesses: rows.map((row) => {
290
+ const seen = latestSeen.get(row.harness);
291
+ const [current] = operationsOf(row.harness);
292
+ const evidence = current ? evidenceOf(current) : null;
293
+ return {
294
+ ...row,
295
+ available: row.available ?? seen?.available ?? null,
296
+ availableProblem: row.availableProblem ?? seen?.availableProblem ?? null,
297
+ previous: row.targets.includes("previous") ? previousOf(row.harness) : null,
298
+ operation: current
299
+ ? {
300
+ id: current.id,
301
+ state: current.state,
302
+ phase: evidence?.phase ?? "accepted",
303
+ targetVersion: evidence?.target.version ?? null,
304
+ finishedAt: current.finishedAt ?? null,
305
+ }
306
+ : null,
307
+ };
308
+ }),
309
+ });
310
+ },
311
+ createMaintenanceOperation: async (body, idempotencyKey) => {
312
+ const request = ControlHarnessMaintenanceCreateRequest.parse(body);
313
+ const { harness, target } = request;
314
+ if (!isInstallableHarness(harness))
315
+ throw failure("harness_not_installable", `unknown harness: ${harness}`, 400);
316
+ const routing = {
317
+ kind: "harness_maintenance",
318
+ harness,
319
+ target: { kind: target.kind, version: null },
320
+ };
321
+ const envelope = {
322
+ idempotencyKey,
323
+ clientId: CLIENT_ID,
324
+ operation: HARNESS_MAINTENANCE_OPERATION_ID,
325
+ };
326
+ const replay = commandStoreForRequest(deps.commands, routing).find({
327
+ ...envelope,
328
+ params: routing,
329
+ idempotencyParams: request,
330
+ });
331
+ if (replay)
332
+ return detail(replay.id);
333
+ const recipe = harnessMaintenanceRecipe(harness);
334
+ const cached = inventory.get(harness);
335
+ if (!recipe.targets.includes(target.kind) || (cached && !cached.maintainable))
336
+ throw failure("harness_not_maintainable", cached?.remedy ?? `${harness} cannot install target ${target.kind}`, 409, {
337
+ selection: cached?.selection ?? null,
338
+ });
339
+ const active = operationsOf(harness).find((record) => !isTerminalLifecycle(record.state));
340
+ if (active || creating.has(harness))
341
+ throw failure("maintenance_already_active", `${harness} already has a maintenance operation`, 409, {
342
+ operationId: active?.id ?? null,
343
+ });
344
+ const version = target.kind === "version"
345
+ ? target.version
346
+ : target.kind === "baseline"
347
+ ? (NPM_PINS[harness]?.version ?? null)
348
+ : target.kind === "previous"
349
+ ? (previousOf(harness)?.version ?? null)
350
+ : null;
351
+ if (target.kind !== "latest" && !version)
352
+ throw failure("maintenance_target_unknown", `no proved ${target.kind} version is known for ${harness}`, 409);
353
+ creating.add(harness);
354
+ try {
355
+ const params = HarnessMaintenanceParams.parse({
356
+ ...routing,
357
+ target: { kind: target.kind, version },
358
+ });
359
+ const { id } = await deps.client.enqueue(params, {
360
+ ...envelope,
361
+ idempotencyRequest: request,
362
+ });
363
+ byHarness();
364
+ remember(id, harness);
365
+ return detail(id);
366
+ }
367
+ finally {
368
+ creating.delete(harness);
369
+ }
370
+ },
371
+ getMaintenanceOperation: async (id) => detail(id),
372
+ cancelMaintenanceOperation: async (id) => {
373
+ const current = detail(id);
374
+ if (!isTerminalLifecycle(current.state))
375
+ await deps.client.cancel(id, "user_cancelled");
376
+ return detail(id);
377
+ },
378
+ };
379
+ /** Readiness projection: an active operation is disclosed on its harness row
380
+ * (existing fields) so a failed native start reads as maintenance, not auth. */
381
+ function decorateHarnessList(list) {
382
+ return async (...args) => {
383
+ const value = (await list(...args));
384
+ if (!value?.harnesses)
385
+ return value;
386
+ return {
387
+ ...value,
388
+ harnesses: value.harnesses.map((row) => {
389
+ const [current] = operationsOf(String(row.id));
390
+ if (!current || isTerminalLifecycle(current.state))
391
+ return row;
392
+ const target = evidenceOf(current)?.target.version;
393
+ const detailText = `Claudexor is maintaining ${String(row.id)}${target ? ` (installing ${target})` : ""}; new native starts may fail until operation ${current.id} finishes`;
394
+ return {
395
+ ...row,
396
+ reasons: [...(row.reasons ?? []), detailText],
397
+ readiness: [
398
+ ...(row.readiness ?? []),
399
+ {
400
+ id: "maintenance",
401
+ kind: "binary",
402
+ title: "Maintenance in progress",
403
+ status: "skip",
404
+ detail: detailText,
405
+ },
406
+ ],
407
+ };
408
+ }),
409
+ };
410
+ };
411
+ }
412
+ return {
413
+ owns: (params) => isHarnessMaintenanceOperation(params),
414
+ execute,
415
+ routes,
416
+ decorateHarnessList,
417
+ /** Daemon composition: routes + readiness decoration on the control services. */
418
+ bind(services) {
419
+ Object.assign(services, routes);
420
+ if (services.harnesses)
421
+ services.harnesses = decorateHarnessList(services.harnesses);
422
+ },
423
+ };
424
+ }
425
+ /** The daemon's composition (claudexord.ts); readiness is bound lazily. */
426
+ export function daemonHarnessMaintenance(commands, client, readiness) {
427
+ return createHarnessMaintenance({ commands, client, readiness });
428
+ }
429
+ //# sourceMappingURL=harness-maintenance-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-maintenance-service.js","sourceRoot":"","sources":["../src/harness-maintenance-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { type HarnessMaintenanceEntry } from "@claudexor/schema";
2
+ import { type ParsedArgs } from "./args.js";
3
+ import { type InstallableHarness } from "./harness-install-recipes.js";
4
+ import { type InstallerRuntime } from "./harness-install-runtime.js";
5
+ export type HarnessInspection = Omit<HarnessMaintenanceEntry, "previous" | "operation">;
6
+ type Selection = HarnessInspection["selection"];
7
+ export interface MaintenanceOptions {
8
+ home?: string;
9
+ nodePath?: string;
10
+ platform?: NodeJS.Platform;
11
+ arch?: string;
12
+ sourceEnv?: NodeJS.ProcessEnv;
13
+ spawn?: InstallerRuntime["spawn"];
14
+ now?: () => Date;
15
+ lock?: boolean;
16
+ json?: boolean;
17
+ }
18
+ /** One registry read of the newest published version, through the embedded
19
+ * npm and the clean vendor environment (no credentials). */
20
+ export declare function resolveLatestNpmVersion(harness: InstallableHarness, runtime: InstallerRuntime): {
21
+ version: string;
22
+ } | {
23
+ problem: {
24
+ code: string;
25
+ message: string;
26
+ };
27
+ };
28
+ export declare function inspectHarness(harness: InstallableHarness, options?: MaintenanceOptions & {
29
+ latest?: boolean;
30
+ }): HarnessInspection;
31
+ export interface HarnessUpdateReceipt {
32
+ ok: boolean;
33
+ harness: InstallableHarness;
34
+ mechanism: HarnessInspection["mechanism"];
35
+ exitCode: number;
36
+ code?: string;
37
+ refusal?: string;
38
+ requestedVersion: string | null;
39
+ resolvedVersion: string | null;
40
+ previousVersion: string | null;
41
+ before: {
42
+ version: string | null;
43
+ binary: string | null;
44
+ selection: Selection["kind"];
45
+ proved: boolean;
46
+ };
47
+ after: {
48
+ version: string | null;
49
+ binary: string | null;
50
+ selected: boolean;
51
+ proved: boolean;
52
+ } | null;
53
+ mutation: "none" | "applied" | "unknown";
54
+ limitations: string[];
55
+ }
56
+ /** Exactly one maintenance step. `requested` is an exact version, "latest", or
57
+ * omitted (latest for either mechanism). */
58
+ export declare function runHarnessUpdate(harness: InstallableHarness, requested: string | undefined, options?: MaintenanceOptions): HarnessUpdateReceipt;
59
+ export declare function harnessInspectCommand(args: ParsedArgs, json: boolean, options?: MaintenanceOptions): number;
60
+ export declare function harnessUpdateCommand(args: ParsedArgs, json: boolean, options?: MaintenanceOptions): number;
61
+ export {};
62
+ //# sourceMappingURL=harness-maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-maintenance.d.ts","sourceRoot":"","sources":["../src/harness-maintenance.ts"],"names":[],"mappings":"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"}