@claudexor/orchestrator 3.1.0 → 3.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 (119) hide show
  1. package/dist/attemptFinalize.d.ts +38 -0
  2. package/dist/attemptFinalize.d.ts.map +1 -1
  3. package/dist/attemptFinalize.js +44 -0
  4. package/dist/attemptFinalize.js.map +1 -1
  5. package/dist/attemptTelemetry.d.ts +9 -20
  6. package/dist/attemptTelemetry.d.ts.map +1 -1
  7. package/dist/attemptTelemetry.js +36 -69
  8. package/dist/attemptTelemetry.js.map +1 -1
  9. package/dist/attemptUsageCost.d.ts +31 -0
  10. package/dist/attemptUsageCost.d.ts.map +1 -0
  11. package/dist/attemptUsageCost.js +181 -0
  12. package/dist/attemptUsageCost.js.map +1 -0
  13. package/dist/budgetFailure.d.ts +3 -1
  14. package/dist/budgetFailure.d.ts.map +1 -1
  15. package/dist/budgetFailure.js.map +1 -1
  16. package/dist/candidateEvidence.d.ts +5 -0
  17. package/dist/candidateEvidence.d.ts.map +1 -1
  18. package/dist/candidateEvidence.js +3 -1
  19. package/dist/candidateEvidence.js.map +1 -1
  20. package/dist/candidateOutputs.d.ts +19 -0
  21. package/dist/candidateOutputs.d.ts.map +1 -1
  22. package/dist/candidateOutputs.js +201 -67
  23. package/dist/candidateOutputs.js.map +1 -1
  24. package/dist/decisionBudget.d.ts +43 -0
  25. package/dist/decisionBudget.d.ts.map +1 -0
  26. package/dist/decisionBudget.js +84 -0
  27. package/dist/decisionBudget.js.map +1 -0
  28. package/dist/decisionTerminalReconciliation.d.ts +18 -0
  29. package/dist/decisionTerminalReconciliation.d.ts.map +1 -0
  30. package/dist/decisionTerminalReconciliation.js +26 -0
  31. package/dist/decisionTerminalReconciliation.js.map +1 -0
  32. package/dist/deepScanReducer.d.ts.map +1 -1
  33. package/dist/deepScanReducer.js +1 -5
  34. package/dist/deepScanReducer.js.map +1 -1
  35. package/dist/delegation-parent-activation.d.ts +6 -0
  36. package/dist/delegation-parent-activation.d.ts.map +1 -0
  37. package/dist/delegation-parent-activation.js +13 -0
  38. package/dist/delegation-parent-activation.js.map +1 -0
  39. package/dist/delegationBudgetAuthority.d.ts +30 -0
  40. package/dist/delegationBudgetAuthority.d.ts.map +1 -0
  41. package/dist/delegationBudgetAuthority.js +157 -0
  42. package/dist/delegationBudgetAuthority.js.map +1 -0
  43. package/dist/delegationFailure.d.ts +58 -0
  44. package/dist/delegationFailure.d.ts.map +1 -0
  45. package/dist/delegationFailure.js +184 -0
  46. package/dist/delegationFailure.js.map +1 -0
  47. package/dist/delegationToolEvidence.d.ts +20 -0
  48. package/dist/delegationToolEvidence.d.ts.map +1 -0
  49. package/dist/delegationToolEvidence.js +46 -0
  50. package/dist/delegationToolEvidence.js.map +1 -0
  51. package/dist/effortGovernance.d.ts +49 -0
  52. package/dist/effortGovernance.d.ts.map +1 -0
  53. package/dist/effortGovernance.js +35 -0
  54. package/dist/effortGovernance.js.map +1 -0
  55. package/dist/index.d.ts +3 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +2 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/orchestrator.d.ts +29 -38
  60. package/dist/orchestrator.d.ts.map +1 -1
  61. package/dist/orchestrator.js +294 -392
  62. package/dist/orchestrator.js.map +1 -1
  63. package/dist/plan-prompt.d.ts +3 -0
  64. package/dist/plan-prompt.d.ts.map +1 -0
  65. package/dist/plan-prompt.js +28 -0
  66. package/dist/plan-prompt.js.map +1 -0
  67. package/dist/requestRequirements.d.ts +17 -0
  68. package/dist/requestRequirements.d.ts.map +1 -1
  69. package/dist/requestRequirements.js +69 -1
  70. package/dist/requestRequirements.js.map +1 -1
  71. package/dist/reviewerPanel.d.ts +4 -0
  72. package/dist/reviewerPanel.d.ts.map +1 -1
  73. package/dist/reviewerPanel.js +54 -9
  74. package/dist/reviewerPanel.js.map +1 -1
  75. package/dist/revisePrompt.d.ts +17 -0
  76. package/dist/revisePrompt.d.ts.map +1 -0
  77. package/dist/revisePrompt.js +15 -0
  78. package/dist/revisePrompt.js.map +1 -0
  79. package/dist/root-ledger.d.ts +13 -0
  80. package/dist/root-ledger.d.ts.map +1 -0
  81. package/dist/root-ledger.js +19 -0
  82. package/dist/root-ledger.js.map +1 -0
  83. package/dist/routing-failure.d.ts +6 -0
  84. package/dist/routing-failure.d.ts.map +1 -0
  85. package/dist/routing-failure.js +12 -0
  86. package/dist/routing-failure.js.map +1 -0
  87. package/dist/run-bounded.d.ts +3 -0
  88. package/dist/run-bounded.d.ts.map +1 -0
  89. package/dist/run-bounded.js +17 -0
  90. package/dist/run-bounded.js.map +1 -0
  91. package/dist/run-input-resolution.d.ts +10 -0
  92. package/dist/run-input-resolution.d.ts.map +1 -0
  93. package/dist/run-input-resolution.js +70 -0
  94. package/dist/run-input-resolution.js.map +1 -0
  95. package/dist/runSupport.d.ts +17 -0
  96. package/dist/runSupport.d.ts.map +1 -1
  97. package/dist/runSupport.js +26 -0
  98. package/dist/runSupport.js.map +1 -1
  99. package/dist/runTelemetryWriter.d.ts +5 -2
  100. package/dist/runTelemetryWriter.d.ts.map +1 -1
  101. package/dist/runTelemetryWriter.js +72 -1
  102. package/dist/runTelemetryWriter.js.map +1 -1
  103. package/dist/runTerminals.d.ts +34 -7
  104. package/dist/runTerminals.d.ts.map +1 -1
  105. package/dist/runTerminals.js +215 -24
  106. package/dist/runTerminals.js.map +1 -1
  107. package/dist/secretDiff.d.ts +29 -0
  108. package/dist/secretDiff.d.ts.map +1 -0
  109. package/dist/secretDiff.js +133 -0
  110. package/dist/secretDiff.js.map +1 -0
  111. package/dist/terminalOutcome.d.ts +22 -0
  112. package/dist/terminalOutcome.d.ts.map +1 -0
  113. package/dist/terminalOutcome.js +39 -0
  114. package/dist/terminalOutcome.js.map +1 -0
  115. package/dist/write-isolation.d.ts +11 -0
  116. package/dist/write-isolation.d.ts.map +1 -0
  117. package/dist/write-isolation.js +13 -0
  118. package/dist/write-isolation.js.map +1 -0
  119. package/package.json +17 -17
@@ -8,8 +8,62 @@
8
8
  * forever.
9
9
  */
10
10
  import { join } from "node:path";
11
- import { makeOutcomeFacts } from "@claudexor/schema";
11
+ import { RunFailureCode } from "@claudexor/schema";
12
12
  import { redactSecrets } from "@claudexor/util";
13
+ import { budgetFailureRecord, classifyBudgetFailure } from "./budgetFailure.js";
14
+ import { reconcileDecisionBudget, settledBudgetSnapshot, } from "./decisionBudget.js";
15
+ import { reconcileDecisionTerminal } from "./decisionTerminalReconciliation.js";
16
+ import { clearFailureArtifact, reconcileWorkProductTerminal, terminalOutcomeFacts, } from "./terminalOutcome.js";
17
+ export function announcedRunContext(identity, ledger, hasDelegateAuthority) {
18
+ return {
19
+ ...identity,
20
+ spend: () => ledger.spend(),
21
+ valuation: () => ledger.valuation(),
22
+ spendEstimated: () => ledger.estimated(),
23
+ valuationKnowledge: () => ledger.valuationKnowledge(),
24
+ budgetTerminal: () => ledger.terminal(),
25
+ recheckBudgetAfterBarrier: hasDelegateAuthority,
26
+ };
27
+ }
28
+ function ownsDelegateDrain(context) {
29
+ try {
30
+ return context.recheckBudgetAfterBarrier?.() === true;
31
+ }
32
+ catch {
33
+ // Reconciliation is an extra authority granted only to a proven Delegate
34
+ // drain owner. An unreadable ownership predicate must fail closed instead
35
+ // of touching an ordinary Agent's already-terminal artifacts.
36
+ return false;
37
+ }
38
+ }
39
+ function postDrainBudgetFailure(context, terminal, budget, prior) {
40
+ const mapping = classifyBudgetFailure({ denial: null, terminal });
41
+ const facts = terminalOutcomeFacts(prior.facts, "failed", mapping.reason);
42
+ reconcileDecisionBudget(context, budget, { facts, why: mapping.safeMessage });
43
+ reconcileWorkProductTerminal(context, facts);
44
+ context.store.writeText(join(context.paths.finalDir, "summary.md"), `# Run ${context.runId} (${context.mode})\n\n- Lifecycle: failed (${mapping.reason})\n- Phase: budget\n\n${mapping.safeMessage}\n`);
45
+ writeFailure(context.store, context.paths, budgetFailureRecord(mapping, { runDir: context.paths.root }));
46
+ context.log.emit("output.ready", {
47
+ kind: "summary",
48
+ path: "final/summary.md",
49
+ state: "diagnostic",
50
+ });
51
+ context.log.emit("run.failed", {
52
+ lifecycle: "failed",
53
+ facts,
54
+ reason: mapping.reason,
55
+ phase: "budget",
56
+ error: mapping.safeMessage,
57
+ failure_ref: "final/failure.yaml",
58
+ });
59
+ return {
60
+ ...prior,
61
+ lifecycle: "failed",
62
+ facts,
63
+ summary: mapping.safeMessage,
64
+ spendUsd: budget.spendUsd,
65
+ };
66
+ }
13
67
  export function writeFailure(store, paths, failure) {
14
68
  store.writeYaml(join(paths.finalDir, "failure.yaml"), {
15
69
  phase: failure.phase,
@@ -38,7 +92,10 @@ export function cancelledResult(log, runId, taskId, mode, runDir, candidates, wr
38
92
  * user cancel aborts with a DOMException reason and stays a bare cancel. */
39
93
  cancelSignal,
40
94
  /** Materializes the diagnostic summary the output.ready below announces. */
41
- store) {
95
+ store,
96
+ /** A prepared result may already carry independent checks/review/work facts
97
+ * when cancellation wins during the Delegate terminal barrier. */
98
+ priorFacts) {
42
99
  if (writeTelemetry) {
43
100
  try {
44
101
  writeTelemetry();
@@ -72,9 +129,7 @@ store) {
72
129
  if (summaryWritten) {
73
130
  log.emit("output.ready", { kind: "summary", path: "final/summary.md", state: "diagnostic" });
74
131
  }
75
- const cancelFacts = makeOutcomeFacts("cancelled", {
76
- reason: cancelReason === "wall_clock_exceeded" ? "wall_clock_exceeded" : "user_cancelled",
77
- });
132
+ const cancelFacts = terminalOutcomeFacts(priorFacts, "cancelled", cancelReason === "wall_clock_exceeded" ? "wall_clock_exceeded" : "user_cancelled");
78
133
  log.emit("run.failed", {
79
134
  lifecycle: "cancelled",
80
135
  facts: cancelFacts,
@@ -96,20 +151,25 @@ store) {
96
151
  };
97
152
  }
98
153
  /**
99
- * Terminal safety net for an unexpected throw in a post-announce phase.
100
- * Every run must end with failure.yaml + summary + a terminal run.failed
101
- * event.
154
+ * Shared post-announce failure terminal. Unexpected throws use its internal
155
+ * defaults; known callers may supply narrow typed provenance. Every run ends
156
+ * with failure.yaml + summary + a terminal run.failed event.
102
157
  */
103
- export function failTerminally(log, store, paths, runId, taskId, mode, phase, err, spendUsd) {
158
+ export function failTerminally(log, store, paths, runId, taskId, mode, phase, err, spendUsd, failureMeta = {}) {
104
159
  const message = redactSecrets(err instanceof Error ? err.message : String(err));
105
- const failFacts = makeOutcomeFacts("failed", { reason: "harness_failed" });
160
+ const parsedCode = RunFailureCode.safeParse(err && typeof err === "object" ? err.code : undefined);
161
+ const failFacts = terminalOutcomeFacts(failureMeta.priorFacts, "failed", "harness_failed");
106
162
  store.writeText(join(paths.finalDir, "summary.md"), `# Run ${runId} (${mode})\n\n- Lifecycle: failed\n- Phase: ${phase}\n\n${message}\n`);
107
163
  writeFailure(store, paths, {
108
164
  phase,
109
- category: "internal",
165
+ category: failureMeta.category ?? "internal",
166
+ code: parsedCode.success ? parsedCode.data : null,
167
+ harnessId: failureMeta.harnessId,
168
+ attemptId: failureMeta.attemptId,
110
169
  safeMessage: message,
170
+ rawDetailRef: failureMeta.rawDetailRef,
111
171
  runDir: paths.root,
112
- nextActions: ["Open diagnostics", "Retry the run"],
172
+ nextActions: failureMeta.nextActions ?? ["Open diagnostics", "Retry the run"],
113
173
  });
114
174
  log.emit("output.ready", { kind: "summary", path: "final/summary.md", state: "diagnostic" });
115
175
  log.emit("run.failed", {
@@ -141,6 +201,9 @@ export function failTerminally(log, store, paths, runId, taskId, mode, phase, er
141
201
  * internal failure.
142
202
  */
143
203
  export async function guardAnnouncedRun(signal, body,
204
+ /** Awaited after strategy work but before a deferred terminal is flushed.
205
+ * Delegate parents use it to fence admission and drain child settlements. */
206
+ beforeTerminal,
144
207
  /**
145
208
  * Invoked once with the announced runId when the strategy settles (return OR
146
209
  * throw). The single per-run terminalization hook: per-run engine state keyed
@@ -149,40 +212,168 @@ export async function guardAnnouncedRun(signal, body,
149
212
  */
150
213
  onSettled) {
151
214
  let announced = null;
215
+ let preparedResult = null;
216
+ let barrierAttempted = false;
217
+ let barrierFailed = false;
218
+ const runBarrier = async (context) => {
219
+ if (barrierAttempted)
220
+ return;
221
+ barrierAttempted = true;
222
+ try {
223
+ await beforeTerminal?.(context);
224
+ }
225
+ catch (error) {
226
+ barrierFailed = true;
227
+ throw error;
228
+ }
229
+ };
152
230
  try {
153
- return await body((a) => {
231
+ const result = await body((a) => {
154
232
  announced = a;
155
233
  });
234
+ preparedResult = result;
235
+ const context = announced;
236
+ if (context) {
237
+ await runBarrier(context);
238
+ const budget = settledBudgetSnapshot(context);
239
+ const delegateBarrierArmed = ownsDelegateDrain(context);
240
+ if (delegateBarrierArmed && signal?.aborted) {
241
+ context.log.clearDeferredTerminal();
242
+ const cancelFacts = terminalOutcomeFacts(result.facts, "cancelled", signal.reason === "wall_clock_exceeded" ? "wall_clock_exceeded" : "user_cancelled");
243
+ const cancelSummary = signal.reason === "wall_clock_exceeded"
244
+ ? "run cancelled: wall-clock deadline (maxSeconds) exceeded"
245
+ : "run cancelled";
246
+ let reconciledCancelFacts = cancelFacts;
247
+ try {
248
+ reconcileDecisionBudget(context, budget);
249
+ reconciledCancelFacts = reconcileDecisionTerminal(context, {
250
+ facts: cancelFacts,
251
+ why: cancelSummary,
252
+ preparedFacts: result.facts,
253
+ });
254
+ reconcileWorkProductTerminal(context, reconciledCancelFacts);
255
+ clearFailureArtifact(context);
256
+ }
257
+ catch {
258
+ /* the cancellation terminal below remains authoritative */
259
+ }
260
+ const cancelled = cancelledResult(context.log, context.runId, context.taskId, context.mode, context.paths.root, result.candidates, undefined, budget.spendUsd, signal, context.store, reconciledCancelFacts);
261
+ context.log.flushDeferredTerminal();
262
+ return {
263
+ ...result,
264
+ lifecycle: "cancelled",
265
+ facts: cancelled.facts,
266
+ summary: cancelled.summary,
267
+ spendUsd: cancelled.spendUsd,
268
+ ...(cancelled.cancelReason ? { cancelReason: cancelled.cancelReason } : {}),
269
+ };
270
+ }
271
+ const budgetTerminal = delegateBarrierArmed ? (context.budgetTerminal?.() ?? null) : null;
272
+ if (budgetTerminal && result.lifecycle === "succeeded") {
273
+ context.log.clearDeferredTerminal();
274
+ const failed = postDrainBudgetFailure(context, budgetTerminal, budget, result);
275
+ context.log.flushDeferredTerminal();
276
+ return failed;
277
+ }
278
+ if (delegateBarrierArmed)
279
+ reconcileDecisionBudget(context, budget);
280
+ context.log.flushDeferredTerminal();
281
+ if (budget.spendUsd !== null)
282
+ return { ...result, spendUsd: budget.spendUsd };
283
+ }
284
+ return result;
156
285
  }
157
286
  catch (err) {
158
287
  // TS cannot see the closure assignment; the cast is safe (set-once).
159
288
  const a = announced;
160
289
  if (!a)
161
290
  throw err;
291
+ a.log.clearDeferredTerminal();
292
+ let terminalError = err;
293
+ try {
294
+ await runBarrier(a);
295
+ }
296
+ catch (barrierError) {
297
+ terminalError = barrierError;
298
+ }
162
299
  // Settled-spend accounting is part of the terminal contract on EVERY
163
300
  // path (the orchestrate executor aggregates it); a broken spend snapshot
164
301
  // must not mask the original failure, so it degrades to null loudly-typed.
165
- let spendUsd = null;
302
+ const budget = settledBudgetSnapshot(a);
303
+ const spendUsd = budget.spendUsd;
304
+ const delegateBarrierArmed = ownsDelegateDrain(a);
305
+ if (signal?.aborted && terminalError === err) {
306
+ const priorFacts = preparedResult?.facts;
307
+ const cancelFacts = terminalOutcomeFacts(priorFacts, "cancelled", signal.reason === "wall_clock_exceeded" ? "wall_clock_exceeded" : "user_cancelled");
308
+ const cancelSummary = signal.reason === "wall_clock_exceeded"
309
+ ? "run cancelled: wall-clock deadline (maxSeconds) exceeded"
310
+ : "run cancelled";
311
+ let reconciledCancelFacts = cancelFacts;
312
+ try {
313
+ if (delegateBarrierArmed)
314
+ reconcileDecisionBudget(a, budget);
315
+ reconciledCancelFacts = reconcileDecisionTerminal(a, {
316
+ facts: cancelFacts,
317
+ why: cancelSummary,
318
+ ...(preparedResult ? { preparedFacts: preparedResult.facts } : {}),
319
+ });
320
+ reconcileWorkProductTerminal(a, reconciledCancelFacts);
321
+ clearFailureArtifact(a);
322
+ }
323
+ catch {
324
+ /* the cancellation terminal below remains authoritative */
325
+ }
326
+ const cancelled = cancelledResult(a.log, a.runId, a.taskId, a.mode, a.paths.root, preparedResult?.candidates ?? [], undefined, spendUsd,
327
+ // A wall-clock abort surfaced as a throw must keep its reason and
328
+ // materialize the diagnostic summary, exactly like the checkpoint paths.
329
+ signal, a.store, reconciledCancelFacts);
330
+ a.log.flushDeferredTerminal();
331
+ return preparedResult
332
+ ? {
333
+ ...preparedResult,
334
+ lifecycle: "cancelled",
335
+ facts: cancelled.facts,
336
+ summary: cancelled.summary,
337
+ spendUsd: cancelled.spendUsd,
338
+ ...(cancelled.cancelReason ? { cancelReason: cancelled.cancelReason } : {}),
339
+ }
340
+ : cancelled;
341
+ }
342
+ const priorFacts = preparedResult?.facts;
343
+ const pendingFacts = terminalOutcomeFacts(priorFacts, "failed", "harness_failed");
344
+ const pendingSummary = redactSecrets(terminalError instanceof Error ? terminalError.message : String(terminalError));
345
+ let reconciledFailureFacts = pendingFacts;
166
346
  try {
167
- spendUsd = a.spend ? a.spend() : null;
347
+ if (delegateBarrierArmed)
348
+ reconcileDecisionBudget(a, budget);
349
+ reconciledFailureFacts = reconcileDecisionTerminal(a, {
350
+ facts: pendingFacts,
351
+ why: pendingSummary,
352
+ ...(preparedResult ? { preparedFacts: preparedResult.facts } : {}),
353
+ });
354
+ reconcileWorkProductTerminal(a, reconciledFailureFacts);
168
355
  }
169
356
  catch {
170
- spendUsd = null;
171
- }
172
- if (signal?.aborted) {
173
- return cancelledResult(a.log, a.runId, a.taskId, a.mode, a.paths.root, [], undefined, spendUsd,
174
- // A wall-clock abort surfaced as a throw must keep its reason and
175
- // materialize the diagnostic summary, exactly like the checkpoint paths.
176
- signal, a.store);
357
+ /* the failure terminal below remains authoritative */
177
358
  }
178
- return failTerminally(a.log, a.store, a.paths, a.runId, a.taskId, a.mode, a.phase, err, spendUsd);
359
+ const failed = failTerminally(a.log, a.store, a.paths, a.runId, a.taskId, a.mode, barrierFailed ? "delegation_drain" : a.phase, terminalError, spendUsd, { priorFacts: reconciledFailureFacts });
360
+ a.log.flushDeferredTerminal();
361
+ return preparedResult
362
+ ? {
363
+ ...preparedResult,
364
+ lifecycle: "failed",
365
+ facts: failed.facts,
366
+ summary: failed.summary,
367
+ spendUsd: failed.spendUsd,
368
+ }
369
+ : failed;
179
370
  }
180
371
  finally {
181
372
  // Release per-run engine state on EVERY terminal path (normal return, failure
182
373
  // net, cancel), but only for a run that actually announced a runId.
183
374
  const settled = announced;
184
375
  if (settled)
185
- onSettled?.(settled.runId);
376
+ await onSettled?.(settled.runId);
186
377
  }
187
378
  }
188
379
  //# sourceMappingURL=runTerminals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runTerminals.js","sourceRoot":"","sources":["../src/runTerminals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runTerminals.js","sourceRoot":"","sources":["../src/runTerminals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { WorkspaceEnvelope } from "@claudexor/schema";
2
+ import { revertWorkingTreePatch, type WorkspaceManager } from "@claudexor/workspace";
3
+ export interface SecretDiffRefusal {
4
+ disposition: "discarded" | "reverted" | "manual_cleanup";
5
+ detail: string;
6
+ }
7
+ export declare function recordSecretDiffRefusal(refusal: SecretDiffRefusal | undefined, errors: string[], existingError: boolean): boolean;
8
+ export declare function secretDiffNextActions(refusal: SecretDiffRefusal): string[];
9
+ /** Keep a secret-bearing patch memory-only. Isolated bytes die with their
10
+ * envelope; in-place bytes are removed only through the existing exact
11
+ * postimage check, so a concurrent edit turns into manual cleanup rather than
12
+ * a destructive rollback. */
13
+ export declare function quarantineSecretDiff(input: {
14
+ diff: string;
15
+ inPlace: boolean;
16
+ repo: string;
17
+ binarySecretLike: boolean;
18
+ /** Secret-risk media that is not represented by `diff` cannot be removed by
19
+ * a successful text rollback and therefore requires truthful manual cleanup. */
20
+ secretOutsidePatch?: boolean;
21
+ gitBacked: boolean;
22
+ /** Test seam for the typed workspace rollback contract. */
23
+ revertPatch?: typeof revertWorkingTreePatch;
24
+ }): Promise<{
25
+ diff: string;
26
+ refusal?: SecretDiffRefusal;
27
+ }>;
28
+ export declare function quarantineCandidateWorkspace(wsm: WorkspaceManager, envelope: WorkspaceEnvelope, inPlace: boolean, answerText?: string): ReturnType<typeof quarantineSecretDiff>;
29
+ //# sourceMappingURL=secretDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretDiff.d.ts","sourceRoot":"","sources":["../src/secretDiff.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,gBAAgB,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,OAAO,GACrB,OAAO,CAIT;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAI1E;AAED;;;6BAG6B;AAC7B,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B;oFACgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,sBAAsB,CAAC;CAC7C,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAkEzD;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,oBAAoB,CAAC,CA0CzC"}
@@ -0,0 +1,133 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { resolve, sep } from "node:path";
3
+ import { summarizeDiffPaths } from "@claudexor/core";
4
+ import { revertWorkingTreePatch } from "@claudexor/workspace";
5
+ import { containsSecretLikeToken, redactSecrets } from "@claudexor/util";
6
+ import { candidateOutputSecretRisk, rasterLinksInMarkdown } from "./candidateOutputs.js";
7
+ export function recordSecretDiffRefusal(refusal, errors, existingError) {
8
+ if (!refusal)
9
+ return existingError;
10
+ errors.push("candidate output could not be proven secret-safe; refusing artifact persistence");
11
+ return true;
12
+ }
13
+ export function secretDiffNextActions(refusal) {
14
+ return refusal.disposition === "manual_cleanup"
15
+ ? ["Inspect and clean the state named in the recovery receipt", "Retry the run"]
16
+ : ["Retry the run without writing secret material"];
17
+ }
18
+ /** Keep a secret-bearing patch memory-only. Isolated bytes die with their
19
+ * envelope; in-place bytes are removed only through the existing exact
20
+ * postimage check, so a concurrent edit turns into manual cleanup rather than
21
+ * a destructive rollback. */
22
+ export async function quarantineSecretDiff(input) {
23
+ if (!containsSecretLikeToken(input.diff) && !input.binarySecretLike) {
24
+ return { diff: input.diff };
25
+ }
26
+ if (!input.inPlace) {
27
+ return {
28
+ diff: "",
29
+ refusal: {
30
+ disposition: "discarded",
31
+ detail: "isolated candidate bytes that could not be proven secret-safe were discarded with the candidate envelope",
32
+ },
33
+ };
34
+ }
35
+ if (input.binarySecretLike && !input.diff.trim()) {
36
+ return {
37
+ diff: "",
38
+ refusal: {
39
+ disposition: "manual_cleanup",
40
+ detail: "candidate output could not be proven secret-safe or captured as an exact reversible patch; manual cleanup required",
41
+ },
42
+ };
43
+ }
44
+ let rollback;
45
+ try {
46
+ rollback = await (input.revertPatch ?? revertWorkingTreePatch)(input.repo, input.diff, {
47
+ isolateObjectWrites: input.gitBacked,
48
+ noIndex: !input.gitBacked,
49
+ });
50
+ }
51
+ catch (error) {
52
+ const rollbackCompleted = error instanceof Error &&
53
+ Object.prototype.hasOwnProperty.call(error, "cleanupError") &&
54
+ error.rollbackReverted === true;
55
+ return {
56
+ diff: "",
57
+ refusal: {
58
+ disposition: "manual_cleanup",
59
+ detail: rollbackCompleted
60
+ ? "in-place bytes were rolled back, but Claudexor scratch cleanup could not be proven; manual cleanup of Claudexor temporary state is required"
61
+ : "in-place output that could not be proven secret-safe could not be rolled back; manual cleanup required",
62
+ },
63
+ };
64
+ }
65
+ const manuallyClean = !rollback.reverted || input.gitBacked || input.secretOutsidePatch === true;
66
+ return {
67
+ diff: "",
68
+ refusal: !manuallyClean
69
+ ? {
70
+ disposition: "reverted",
71
+ detail: "in-place bytes that could not be proven secret-safe were removed by an exact checked rollback",
72
+ }
73
+ : {
74
+ disposition: "manual_cleanup",
75
+ detail: redactSecrets(rollback.reverted && input.secretOutsidePatch
76
+ ? `the exact reversible patch was removed, but candidate media outside that patch could not be proven removed; manual cleanup required${input.gitBacked ? "; inspect Git index, refs, and objects too" : ""}`
77
+ : rollback.reverted && input.gitBacked
78
+ ? "worktree bytes were removed; inspect Git index, refs, and objects for harness-written secret state"
79
+ : (rollback.reason ??
80
+ "candidate output could not be proven removed; manual cleanup required")),
81
+ },
82
+ };
83
+ }
84
+ export async function quarantineCandidateWorkspace(wsm, envelope, inPlace, answerText) {
85
+ let captured;
86
+ try {
87
+ captured = await wsm.captureDiff(envelope);
88
+ }
89
+ catch (error) {
90
+ const scratchCleanupUnproven = error instanceof Error && Object.prototype.hasOwnProperty.call(error, "cleanupError");
91
+ return {
92
+ diff: "",
93
+ refusal: {
94
+ disposition: inPlace || scratchCleanupUnproven ? "manual_cleanup" : "discarded",
95
+ detail: scratchCleanupUnproven
96
+ ? "candidate output capture failed and private scratch cleanup could not be proven; manual cleanup of Claudexor temporary state is required"
97
+ : inPlace
98
+ ? "candidate output could not be captured safely; manual cleanup required"
99
+ : "uncaptured isolated candidate output was discarded with the candidate envelope",
100
+ },
101
+ };
102
+ }
103
+ const diffPaths = summarizeDiffPaths(captured.diff).paths;
104
+ const linkedPaths = rasterLinksInMarkdown(answerText ?? "");
105
+ const mediaRisk = candidateOutputSecretRisk({
106
+ worktreePath: envelope.worktree_path,
107
+ changedPaths: [...diffPaths, ...linkedPaths],
108
+ });
109
+ const diffIdentities = new Set(diffPaths.map((path) => candidatePathIdentity(envelope.worktree_path, path)));
110
+ const secretOutsidePatch = mediaRisk.artifactDirectoryUnsafe ||
111
+ mediaRisk.nonReversiblePaths.length > 0 ||
112
+ mediaRisk.riskyPaths.some((path) => !diffIdentities.has(candidatePathIdentity(envelope.worktree_path, path)));
113
+ return quarantineSecretDiff({
114
+ diff: captured.diff,
115
+ binarySecretLike: captured.binarySecretLike || mediaRisk.risky,
116
+ secretOutsidePatch,
117
+ repo: envelope.worktree_path,
118
+ inPlace,
119
+ gitBacked: Boolean(envelope.base_sha),
120
+ });
121
+ }
122
+ function candidatePathIdentity(root, raw) {
123
+ const absolute = resolve(root, raw);
124
+ if (absolute !== resolve(root) && !absolute.startsWith(resolve(root) + sep))
125
+ return absolute;
126
+ try {
127
+ return realpathSync.native(absolute);
128
+ }
129
+ catch {
130
+ return absolute;
131
+ }
132
+ }
133
+ //# sourceMappingURL=secretDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretDiff.js","sourceRoot":"","sources":["../src/secretDiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { RunOutcomeFacts } from "@claudexor/schema";
2
+ import type { ArtifactStore } from "@claudexor/artifact-store";
3
+ /** Strategy success may already have materialized a WorkProduct before a
4
+ * terminal barrier settles. Reconcile only its terminal projection: produced
5
+ * bytes, review evidence, and apply/revert state remain historical facts. */
6
+ export declare function reconcileWorkProductTerminal(context: {
7
+ store: ArtifactStore;
8
+ paths: {
9
+ finalDir: string;
10
+ };
11
+ }, facts: RunOutcomeFacts): void;
12
+ /** Cancellation has no RunFailure payload. A prepared failed result may have
13
+ * written one before the deferred terminal barrier lets cancellation win. */
14
+ export declare function clearFailureArtifact(context: {
15
+ paths: {
16
+ finalDir: string;
17
+ };
18
+ }): void;
19
+ /** Replace only the process terminal axes while retaining independent
20
+ * checks/review/no-change/work-state evidence from an already prepared run. */
21
+ export declare function terminalOutcomeFacts(prior: RunOutcomeFacts | undefined, lifecycle: RunOutcomeFacts["lifecycle"], reason: RunOutcomeFacts["reason"]): RunOutcomeFacts;
22
+ //# sourceMappingURL=terminalOutcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalOutcome.d.ts","sourceRoot":"","sources":["../src/terminalOutcome.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,eAAe,EAAe,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;6EAE6E;AAC7E,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9D,KAAK,EAAE,eAAe,GACrB,IAAI,CAmBN;AAED;6EAC6E;AAC7E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAEnF;AAED;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,GAAG,SAAS,EAClC,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,EACvC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAChC,eAAe,CAIjB"}
@@ -0,0 +1,39 @@
1
+ import { rmSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { makeOutcomeFacts, RunOutcomeFacts, WorkProduct } from "@claudexor/schema";
4
+ /** Strategy success may already have materialized a WorkProduct before a
5
+ * terminal barrier settles. Reconcile only its terminal projection: produced
6
+ * bytes, review evidence, and apply/revert state remain historical facts. */
7
+ export function reconcileWorkProductTerminal(context, facts) {
8
+ const path = join(context.paths.finalDir, "work_product.yaml");
9
+ const current = context.store.readYaml(path);
10
+ if (!current || typeof current !== "object" || Array.isArray(current))
11
+ return;
12
+ const record = current;
13
+ const priorMeta = record["meta"] && typeof record["meta"] === "object" && !Array.isArray(record["meta"])
14
+ ? record["meta"]
15
+ : {};
16
+ const reconciled = {
17
+ ...record,
18
+ meta: {
19
+ ...priorMeta,
20
+ lifecycle: facts.lifecycle,
21
+ outcome_facts: facts,
22
+ },
23
+ };
24
+ WorkProduct.parse(reconciled);
25
+ context.store.writeYaml(path, reconciled);
26
+ }
27
+ /** Cancellation has no RunFailure payload. A prepared failed result may have
28
+ * written one before the deferred terminal barrier lets cancellation win. */
29
+ export function clearFailureArtifact(context) {
30
+ rmSync(join(context.paths.finalDir, "failure.yaml"), { force: true });
31
+ }
32
+ /** Replace only the process terminal axes while retaining independent
33
+ * checks/review/no-change/work-state evidence from an already prepared run. */
34
+ export function terminalOutcomeFacts(prior, lifecycle, reason) {
35
+ return prior
36
+ ? RunOutcomeFacts.parse({ ...prior, lifecycle, reason })
37
+ : makeOutcomeFacts(lifecycle, { reason });
38
+ }
39
+ //# sourceMappingURL=terminalOutcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalOutcome.js","sourceRoot":"","sources":["../src/terminalOutcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnF;;6EAE6E;AAC7E,MAAM,UAAU,4BAA4B,CAC1C,OAA8D,EAC9D,KAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO;IAC9E,MAAM,MAAM,GAAG,OAAkC,CAAC;IAClD,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpF,CAAC,CAAE,MAAM,CAAC,MAAM,CAA6B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,UAAU,GAAG;QACjB,GAAG,MAAM;QACT,IAAI,EAAE;YACJ,GAAG,SAAS;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,KAAK;SACrB;KACF,CAAC;IACF,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,OAAwC;IAC3E,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,oBAAoB,CAClC,KAAkC,EAClC,SAAuC,EACvC,MAAiC;IAEjC,OAAO,KAAK;QACV,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QACxD,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ModeKind } from "@claudexor/schema";
2
+ /** Refuse restriction policies that a live-tree write cannot contain. */
3
+ export declare function assertWriteIsolation(input: {
4
+ mode: ModeKind;
5
+ protectedPaths: readonly string[];
6
+ denyPaths?: readonly string[];
7
+ inPlace?: boolean;
8
+ repoRoot: string;
9
+ executionRoot: string;
10
+ }): void;
11
+ //# sourceMappingURL=write-isolation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-isolation.d.ts","sourceRoot":"","sources":["../src/write-isolation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAcP"}
@@ -0,0 +1,13 @@
1
+ import { canonicalProjectRoot } from "@claudexor/util";
2
+ /** Refuse restriction policies that a live-tree write cannot contain. */
3
+ export function assertWriteIsolation(input) {
4
+ const liveProject = input.inPlace === true &&
5
+ canonicalProjectRoot(input.executionRoot) === canonicalProjectRoot(input.repoRoot);
6
+ if (input.mode === "agent" && input.protectedPaths.length > 0 && liveProject) {
7
+ throw new Error("project protected_paths require an isolated execution root before an agent run can mutate files; use an isolated thread or drop --in-place");
8
+ }
9
+ if ((input.denyPaths?.length ?? 0) > 0 && input.inPlace === true) {
10
+ throw new Error("denyPaths requires an isolated/envelope run: the post-diff policy gate blocks a violating patch before delivery, which an in-place run cannot guarantee; drop --deny-path or run isolated");
11
+ }
12
+ }
13
+ //# sourceMappingURL=write-isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-isolation.js","sourceRoot":"","sources":["../src/write-isolation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,KAOpC;IACC,MAAM,WAAW,GACf,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,2LAA2L,CAC5L,CAAC;IACJ,CAAC;AACH,CAAC"}