@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.
- package/dist/attemptFinalize.d.ts +38 -0
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +44 -0
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/attemptTelemetry.d.ts +9 -20
- package/dist/attemptTelemetry.d.ts.map +1 -1
- package/dist/attemptTelemetry.js +36 -69
- package/dist/attemptTelemetry.js.map +1 -1
- package/dist/attemptUsageCost.d.ts +31 -0
- package/dist/attemptUsageCost.d.ts.map +1 -0
- package/dist/attemptUsageCost.js +181 -0
- package/dist/attemptUsageCost.js.map +1 -0
- package/dist/budgetFailure.d.ts +3 -1
- package/dist/budgetFailure.d.ts.map +1 -1
- package/dist/budgetFailure.js.map +1 -1
- package/dist/candidateEvidence.d.ts +5 -0
- package/dist/candidateEvidence.d.ts.map +1 -1
- package/dist/candidateEvidence.js +3 -1
- package/dist/candidateEvidence.js.map +1 -1
- package/dist/candidateOutputs.d.ts +19 -0
- package/dist/candidateOutputs.d.ts.map +1 -1
- package/dist/candidateOutputs.js +201 -67
- package/dist/candidateOutputs.js.map +1 -1
- package/dist/decisionBudget.d.ts +43 -0
- package/dist/decisionBudget.d.ts.map +1 -0
- package/dist/decisionBudget.js +84 -0
- package/dist/decisionBudget.js.map +1 -0
- package/dist/decisionTerminalReconciliation.d.ts +18 -0
- package/dist/decisionTerminalReconciliation.d.ts.map +1 -0
- package/dist/decisionTerminalReconciliation.js +26 -0
- package/dist/decisionTerminalReconciliation.js.map +1 -0
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +1 -5
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegation-parent-activation.d.ts +6 -0
- package/dist/delegation-parent-activation.d.ts.map +1 -0
- package/dist/delegation-parent-activation.js +13 -0
- package/dist/delegation-parent-activation.js.map +1 -0
- package/dist/delegationBudgetAuthority.d.ts +30 -0
- package/dist/delegationBudgetAuthority.d.ts.map +1 -0
- package/dist/delegationBudgetAuthority.js +157 -0
- package/dist/delegationBudgetAuthority.js.map +1 -0
- package/dist/delegationFailure.d.ts +58 -0
- package/dist/delegationFailure.d.ts.map +1 -0
- package/dist/delegationFailure.js +184 -0
- package/dist/delegationFailure.js.map +1 -0
- package/dist/delegationToolEvidence.d.ts +20 -0
- package/dist/delegationToolEvidence.d.ts.map +1 -0
- package/dist/delegationToolEvidence.js +46 -0
- package/dist/delegationToolEvidence.js.map +1 -0
- package/dist/effortGovernance.d.ts +49 -0
- package/dist/effortGovernance.d.ts.map +1 -0
- package/dist/effortGovernance.js +35 -0
- package/dist/effortGovernance.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrator.d.ts +29 -38
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +294 -392
- package/dist/orchestrator.js.map +1 -1
- package/dist/plan-prompt.d.ts +3 -0
- package/dist/plan-prompt.d.ts.map +1 -0
- package/dist/plan-prompt.js +28 -0
- package/dist/plan-prompt.js.map +1 -0
- package/dist/requestRequirements.d.ts +17 -0
- package/dist/requestRequirements.d.ts.map +1 -1
- package/dist/requestRequirements.js +69 -1
- package/dist/requestRequirements.js.map +1 -1
- package/dist/reviewerPanel.d.ts +4 -0
- package/dist/reviewerPanel.d.ts.map +1 -1
- package/dist/reviewerPanel.js +54 -9
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/revisePrompt.d.ts +17 -0
- package/dist/revisePrompt.d.ts.map +1 -0
- package/dist/revisePrompt.js +15 -0
- package/dist/revisePrompt.js.map +1 -0
- package/dist/root-ledger.d.ts +13 -0
- package/dist/root-ledger.d.ts.map +1 -0
- package/dist/root-ledger.js +19 -0
- package/dist/root-ledger.js.map +1 -0
- package/dist/routing-failure.d.ts +6 -0
- package/dist/routing-failure.d.ts.map +1 -0
- package/dist/routing-failure.js +12 -0
- package/dist/routing-failure.js.map +1 -0
- package/dist/run-bounded.d.ts +3 -0
- package/dist/run-bounded.d.ts.map +1 -0
- package/dist/run-bounded.js +17 -0
- package/dist/run-bounded.js.map +1 -0
- package/dist/run-input-resolution.d.ts +10 -0
- package/dist/run-input-resolution.d.ts.map +1 -0
- package/dist/run-input-resolution.js +70 -0
- package/dist/run-input-resolution.js.map +1 -0
- package/dist/runSupport.d.ts +17 -0
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +26 -0
- package/dist/runSupport.js.map +1 -1
- package/dist/runTelemetryWriter.d.ts +5 -2
- package/dist/runTelemetryWriter.d.ts.map +1 -1
- package/dist/runTelemetryWriter.js +72 -1
- package/dist/runTelemetryWriter.js.map +1 -1
- package/dist/runTerminals.d.ts +34 -7
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +215 -24
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +29 -0
- package/dist/secretDiff.d.ts.map +1 -0
- package/dist/secretDiff.js +133 -0
- package/dist/secretDiff.js.map +1 -0
- package/dist/terminalOutcome.d.ts +22 -0
- package/dist/terminalOutcome.d.ts.map +1 -0
- package/dist/terminalOutcome.js +39 -0
- package/dist/terminalOutcome.js.map +1 -0
- package/dist/write-isolation.d.ts +11 -0
- package/dist/write-isolation.d.ts.map +1 -0
- package/dist/write-isolation.js +13 -0
- package/dist/write-isolation.js.map +1 -0
- package/package.json +17 -17
package/dist/runTerminals.js
CHANGED
|
@@ -8,8 +8,62 @@
|
|
|
8
8
|
* forever.
|
|
9
9
|
*/
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
-
import {
|
|
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 =
|
|
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
|
-
*
|
|
100
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/runTerminals.js.map
CHANGED
|
@@ -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"}
|