@claudexor/orchestrator 3.1.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attemptFinalize.d.ts +14 -11
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +41 -14
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/attemptTelemetry.d.ts +16 -20
- package/dist/attemptTelemetry.d.ts.map +1 -1
- package/dist/attemptTelemetry.js +38 -70
- package/dist/attemptTelemetry.js.map +1 -1
- package/dist/attemptUsageCost.d.ts +47 -0
- package/dist/attemptUsageCost.d.ts.map +1 -0
- package/dist/attemptUsageCost.js +191 -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/credential-profile-rotation.d.ts +145 -0
- package/dist/credential-profile-rotation.d.ts.map +1 -0
- package/dist/credential-profile-rotation.js +315 -0
- package/dist/credential-profile-rotation.js.map +1 -0
- package/dist/credential-profiles.d.ts +35 -134
- package/dist/credential-profiles.d.ts.map +1 -1
- package/dist/credential-profiles.js +73 -295
- package/dist/credential-profiles.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 +14 -44
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +240 -128
- 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/git-precondition.d.ts +11 -0
- package/dist/git-precondition.d.ts.map +1 -0
- package/dist/git-precondition.js +69 -0
- package/dist/git-precondition.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +14 -6
- package/dist/interaction.d.ts.map +1 -1
- package/dist/interaction.js +106 -19
- package/dist/interaction.js.map +1 -1
- package/dist/orchestrator.d.ts +62 -115
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +671 -965
- 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/planBrief.d.ts +27 -0
- package/dist/planBrief.d.ts.map +1 -0
- package/dist/planBrief.js +42 -0
- package/dist/planBrief.js.map +1 -0
- package/dist/planRun.d.ts +4 -3
- package/dist/planRun.d.ts.map +1 -1
- package/dist/planRun.js +33 -33
- package/dist/planRun.js.map +1 -1
- package/dist/plannerAttempt.d.ts +64 -0
- package/dist/plannerAttempt.d.ts.map +1 -0
- package/dist/plannerAttempt.js +235 -0
- package/dist/plannerAttempt.js.map +1 -0
- package/dist/policyFindings.js.map +1 -1
- package/dist/requestRequirements.d.ts +45 -1
- package/dist/requestRequirements.d.ts.map +1 -1
- package/dist/requestRequirements.js +158 -11
- package/dist/requestRequirements.js.map +1 -1
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/root-ledger.d.ts +13 -0
- package/dist/root-ledger.d.ts.map +1 -0
- package/dist/root-ledger.js +21 -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 +23 -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 +88 -0
- package/dist/run-input-resolution.js.map +1 -0
- package/dist/runEventLog.d.ts +48 -0
- package/dist/runEventLog.d.ts.map +1 -0
- package/dist/runEventLog.js +63 -0
- package/dist/runEventLog.js.map +1 -0
- package/dist/runFacts.d.ts +23 -0
- package/dist/runFacts.d.ts.map +1 -0
- package/dist/runFacts.js +179 -0
- package/dist/runFacts.js.map +1 -0
- package/dist/runFactsBuilder.d.ts +5 -0
- package/dist/runFactsBuilder.d.ts.map +1 -0
- package/dist/runFactsBuilder.js +412 -0
- package/dist/runFactsBuilder.js.map +1 -0
- package/dist/runFactsDeliverable.d.ts +13 -0
- package/dist/runFactsDeliverable.d.ts.map +1 -0
- package/dist/runFactsDeliverable.js +94 -0
- package/dist/runFactsDeliverable.js.map +1 -0
- package/dist/runFactsPresentation.d.ts +7 -0
- package/dist/runFactsPresentation.d.ts.map +1 -0
- package/dist/runFactsPresentation.js +113 -0
- package/dist/runFactsPresentation.js.map +1 -0
- package/dist/runFactsReview.d.ts +7 -0
- package/dist/runFactsReview.d.ts.map +1 -0
- package/dist/runFactsReview.js +63 -0
- package/dist/runFactsReview.js.map +1 -0
- package/dist/runSupport.d.ts +17 -15
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +16 -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/runTerminalContext.d.ts +31 -0
- package/dist/runTerminalContext.d.ts.map +1 -0
- package/dist/runTerminalContext.js +12 -0
- package/dist/runTerminalContext.js.map +1 -0
- package/dist/runTerminalResults.d.ts +55 -0
- package/dist/runTerminalResults.d.ts.map +1 -0
- package/dist/runTerminalResults.js +134 -0
- package/dist/runTerminalResults.js.map +1 -0
- package/dist/runTerminals.d.ts +8 -57
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +423 -135
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +32 -0
- package/dist/secretDiff.d.ts.map +1 -0
- package/dist/secretDiff.js +140 -0
- package/dist/secretDiff.js.map +1 -0
- package/dist/structuredOutput.d.ts.map +1 -1
- package/dist/structuredOutput.js.map +1 -1
- package/dist/task-contract-builder.d.ts +35 -0
- package/dist/task-contract-builder.d.ts.map +1 -0
- package/dist/task-contract-builder.js +114 -0
- package/dist/task-contract-builder.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/transientClassify.js.map +1 -1
- package/package.json +17 -17
package/dist/candidateOutputs.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { chmodSync, closeSync, constants, copyFileSync, existsSync, lstatSync, mkdirSync, openSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
1
|
+
import { chmodSync, closeSync, constants, copyFileSync, existsSync, fstatSync, lstatSync, mkdirSync, openSync, realpathSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
2
2
|
import { dirname, extname, join, relative as pathRelative, resolve, sep } from "node:path";
|
|
3
3
|
import { CLAUDEXOR_ARTIFACT_DIR, summarizeDiffPaths } from "@claudexor/core";
|
|
4
|
+
import { containsSecretLikeToken } from "@claudexor/util";
|
|
4
5
|
const RASTER_OUTPUT_EXTENSIONS = new Set([".png", ".jpg", ".jpeg", ".webp", ".gif"]);
|
|
5
6
|
const MAX_OUTPUT_BYTES = 16 * 1024 * 1024;
|
|
6
7
|
const MAX_TOTAL_BYTES = 32 * 1024 * 1024;
|
|
@@ -27,6 +28,119 @@ function writeNoFollow(path, data, mode, replace) {
|
|
|
27
28
|
closeSync(fd);
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
function rasterBytesIfSafe(source, maxBytes = MAX_OUTPUT_BYTES) {
|
|
32
|
+
let fd = null;
|
|
33
|
+
try {
|
|
34
|
+
fd = openSync(source, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
35
|
+
const stat = fstatSync(fd);
|
|
36
|
+
if (!stat.isFile() || stat.size > maxBytes)
|
|
37
|
+
return null;
|
|
38
|
+
const bytes = readFileSync(fd);
|
|
39
|
+
if (bytes.length > maxBytes || containsSecretLikeToken(bytes.toString("latin1")))
|
|
40
|
+
return null;
|
|
41
|
+
return { bytes, mode: stat.mode & 0o777 };
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Detection callers interpret an unreadable raster as an unprovable secret
|
|
45
|
+
// risk; persistence callers skip it. Never let a filesystem race turn the
|
|
46
|
+
// fail-closed artifact fence into an untyped attempt crash.
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (fd !== null) {
|
|
51
|
+
try {
|
|
52
|
+
closeSync(fd);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// The bytes are already bounded in memory or the read failed closed.
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function copyRasterIfSafe(source, target, maxBytes) {
|
|
61
|
+
const safe = rasterBytesIfSafe(source, maxBytes);
|
|
62
|
+
if (!safe)
|
|
63
|
+
return null;
|
|
64
|
+
mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
|
|
65
|
+
writeNoFollow(target, safe.bytes, safe.mode, false);
|
|
66
|
+
return safe.bytes.length;
|
|
67
|
+
}
|
|
68
|
+
/** Lexically contain a path and reject symlinks or unreadable/non-directory
|
|
69
|
+
* intermediate components before any candidate output is inspected. */
|
|
70
|
+
function candidatePathStatus(root, raw) {
|
|
71
|
+
const target = resolve(root, raw);
|
|
72
|
+
if (target === root || !target.startsWith(root + sep))
|
|
73
|
+
return { kind: "unsafe" };
|
|
74
|
+
const parts = pathRelative(root, target).split(sep).filter(Boolean);
|
|
75
|
+
let current = root;
|
|
76
|
+
for (let index = 0; index < parts.length; index += 1) {
|
|
77
|
+
current = join(current, parts[index]);
|
|
78
|
+
let stat;
|
|
79
|
+
try {
|
|
80
|
+
stat = lstatIfPresent(current);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return { kind: "unsafe" };
|
|
84
|
+
}
|
|
85
|
+
if (!stat)
|
|
86
|
+
return { kind: "missing" };
|
|
87
|
+
if (stat.isSymbolicLink()) {
|
|
88
|
+
return { kind: index === parts.length - 1 ? "symlink" : "unsafe" };
|
|
89
|
+
}
|
|
90
|
+
if (index < parts.length - 1 && !stat.isDirectory())
|
|
91
|
+
return { kind: "unsafe" };
|
|
92
|
+
if (index === parts.length - 1)
|
|
93
|
+
return { kind: "safe", path: target, stat };
|
|
94
|
+
}
|
|
95
|
+
return { kind: "unsafe" };
|
|
96
|
+
}
|
|
97
|
+
function artifactMediaPaths(root) {
|
|
98
|
+
const artifactRoot = join(root, CLAUDEXOR_ARTIFACT_DIR);
|
|
99
|
+
const rootStatus = candidatePathStatus(root, artifactRoot);
|
|
100
|
+
if (rootStatus.kind === "missing")
|
|
101
|
+
return { paths: [], unsafe: false };
|
|
102
|
+
if (rootStatus.kind !== "safe" || !rootStatus.stat.isDirectory()) {
|
|
103
|
+
return { paths: [], unsafe: true };
|
|
104
|
+
}
|
|
105
|
+
const paths = [];
|
|
106
|
+
let unsafe = false;
|
|
107
|
+
const walk = (dir) => {
|
|
108
|
+
let entries;
|
|
109
|
+
try {
|
|
110
|
+
entries = readdirSync(dir);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
unsafe = true;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
for (const name of entries.sort()) {
|
|
117
|
+
const status = candidatePathStatus(root, join(dir, name));
|
|
118
|
+
if (status.kind === "missing")
|
|
119
|
+
continue;
|
|
120
|
+
// A leaf symlink is never followed or persisted, but its presence beside
|
|
121
|
+
// ordinary owned media does not make the whole candidate suspicious.
|
|
122
|
+
if (status.kind === "symlink")
|
|
123
|
+
continue;
|
|
124
|
+
if (status.kind !== "safe") {
|
|
125
|
+
unsafe = true;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (status.stat.isDirectory()) {
|
|
129
|
+
walk(status.path);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!RASTER_OUTPUT_EXTENSIONS.has(extname(name).toLowerCase()))
|
|
133
|
+
continue;
|
|
134
|
+
if (!status.stat.isFile()) {
|
|
135
|
+
unsafe = true;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
paths.push(pathRelative(root, status.path).split("\\").join("/"));
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
walk(artifactRoot);
|
|
142
|
+
return { paths, unsafe };
|
|
143
|
+
}
|
|
30
144
|
/** Stage large synthesis evidence in the envelope, returning an idempotent
|
|
31
145
|
* cleanup that callers run before any diff/gate/review. */
|
|
32
146
|
export function stageFileBackedContext(worktreePath, content) {
|
|
@@ -72,24 +186,35 @@ export function persistCandidateOutputs(input) {
|
|
|
72
186
|
const root = resolve(input.worktreePath);
|
|
73
187
|
let total = 0;
|
|
74
188
|
const preserved = [];
|
|
189
|
+
const candidates = new Map();
|
|
75
190
|
for (const raw of input.changedPaths) {
|
|
76
|
-
|
|
77
|
-
if (!RASTER_OUTPUT_EXTENSIONS.has(extname(relative).toLowerCase()))
|
|
78
|
-
continue;
|
|
79
|
-
const source = resolve(root, relative);
|
|
80
|
-
if (source !== root && !source.startsWith(root + sep))
|
|
191
|
+
if (!RASTER_OUTPUT_EXTENSIONS.has(extname(raw).toLowerCase()))
|
|
81
192
|
continue;
|
|
82
|
-
|
|
193
|
+
const status = candidatePathStatus(root, raw);
|
|
194
|
+
if (status.kind !== "safe" || !status.stat.isFile())
|
|
83
195
|
continue;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
196
|
+
const relative = pathRelative(root, status.path).split("\\").join("/");
|
|
197
|
+
let identity;
|
|
198
|
+
try {
|
|
199
|
+
// realpath returns the filesystem's canonical spelling, so case and
|
|
200
|
+
// Unicode-normalization aliases on macOS collapse before any O_EXCL
|
|
201
|
+
// destination write. The already-verified lexical path remains the
|
|
202
|
+
// source used by the no-follow copy fence.
|
|
203
|
+
identity = realpathSync.native(status.path);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
88
206
|
continue;
|
|
207
|
+
}
|
|
208
|
+
if (!candidates.has(identity)) {
|
|
209
|
+
candidates.set(identity, { relative, source: status.path });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
for (const { relative, source } of candidates.values()) {
|
|
89
213
|
const target = join(input.attemptDir, "produced", relative);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
214
|
+
const copied = copyRasterIfSafe(source, target, Math.min(MAX_OUTPUT_BYTES, MAX_TOTAL_BYTES - total));
|
|
215
|
+
if (copied === null)
|
|
216
|
+
continue;
|
|
217
|
+
total += copied;
|
|
93
218
|
preserved.push(relative);
|
|
94
219
|
}
|
|
95
220
|
return preserved;
|
|
@@ -105,45 +230,54 @@ export function persistCandidateOutputs(input) {
|
|
|
105
230
|
*/
|
|
106
231
|
export function collectArtifactDirMedia(input) {
|
|
107
232
|
const root = resolve(input.worktreePath);
|
|
108
|
-
const artifactRoot = join(root, CLAUDEXOR_ARTIFACT_DIR);
|
|
109
|
-
if (!existsSync(artifactRoot))
|
|
110
|
-
return [];
|
|
111
233
|
let total = 0;
|
|
112
234
|
const preserved = [];
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
235
|
+
for (const rel of artifactMediaPaths(root).paths) {
|
|
236
|
+
const status = candidatePathStatus(root, rel);
|
|
237
|
+
if (status.kind !== "safe" || !status.stat.isFile())
|
|
238
|
+
continue;
|
|
239
|
+
const target = join(input.attemptDir, "produced", rel);
|
|
240
|
+
const copied = copyRasterIfSafe(status.path, target, Math.min(MAX_OUTPUT_BYTES, MAX_TOTAL_BYTES - total));
|
|
241
|
+
if (copied === null)
|
|
242
|
+
continue;
|
|
243
|
+
total += copied;
|
|
244
|
+
preserved.push(rel);
|
|
245
|
+
}
|
|
246
|
+
return preserved;
|
|
247
|
+
}
|
|
248
|
+
export function candidateOutputsContainSecret(input) {
|
|
249
|
+
return candidateOutputSecretRisk(input).risky;
|
|
250
|
+
}
|
|
251
|
+
export function candidateOutputSecretRisk(input) {
|
|
252
|
+
const root = resolve(input.worktreePath);
|
|
253
|
+
const artifactMedia = artifactMediaPaths(root);
|
|
254
|
+
const riskyPaths = [];
|
|
255
|
+
const nonReversiblePaths = [];
|
|
256
|
+
const paths = [...input.changedPaths, ...artifactMedia.paths];
|
|
257
|
+
for (const relative of new Set(paths)) {
|
|
258
|
+
if (!RASTER_OUTPUT_EXTENSIONS.has(extname(relative).toLowerCase()))
|
|
259
|
+
continue;
|
|
260
|
+
const status = candidatePathStatus(root, relative);
|
|
261
|
+
if (status.kind === "missing")
|
|
262
|
+
continue;
|
|
263
|
+
if (status.kind !== "safe" || !status.stat.isFile()) {
|
|
264
|
+
riskyPaths.push(relative);
|
|
265
|
+
// A text patch can represent the symlink or special-file directory
|
|
266
|
+
// entry, but rollback cannot prove anything about bytes reached through
|
|
267
|
+
// that entry. Never collapse it to a followed realpath identity.
|
|
268
|
+
nonReversiblePaths.push(relative);
|
|
269
|
+
continue;
|
|
143
270
|
}
|
|
271
|
+
const safe = rasterBytesIfSafe(status.path);
|
|
272
|
+
if (!safe)
|
|
273
|
+
riskyPaths.push(relative);
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
risky: artifactMedia.unsafe || riskyPaths.length > 0,
|
|
277
|
+
riskyPaths,
|
|
278
|
+
nonReversiblePaths,
|
|
279
|
+
artifactDirectoryUnsafe: artifactMedia.unsafe,
|
|
144
280
|
};
|
|
145
|
-
walk(artifactRoot);
|
|
146
|
-
return preserved;
|
|
147
281
|
}
|
|
148
282
|
export function rasterLinksInMarkdown(markdown) {
|
|
149
283
|
const paths = [];
|
|
@@ -161,25 +295,25 @@ export function rasterLinksInMarkdown(markdown) {
|
|
|
161
295
|
return [...new Set(paths)];
|
|
162
296
|
}
|
|
163
297
|
export function writeCandidateAttemptArtifacts(input) {
|
|
164
|
-
|
|
298
|
+
if (input.persistPatch !== false) {
|
|
299
|
+
input.store.writeText(join(input.attemptDir, "patch.diff"), input.diff);
|
|
300
|
+
}
|
|
165
301
|
const stats = summarizeDiffPaths(input.diff);
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
]),
|
|
182
|
-
];
|
|
302
|
+
// Build one candidate path set before the first filesystem write. A raster
|
|
303
|
+
// may be both linked from markdown and discovered under the owned artifact
|
|
304
|
+
// directory; copying each source in a separate pass would race itself on the
|
|
305
|
+
// O_EXCL destination and would incorrectly grant each pass its own byte cap.
|
|
306
|
+
const produced = input.persistProducedMedia === false
|
|
307
|
+
? []
|
|
308
|
+
: persistCandidateOutputs({
|
|
309
|
+
worktreePath: input.worktreePath,
|
|
310
|
+
attemptDir: input.attemptDir,
|
|
311
|
+
changedPaths: [
|
|
312
|
+
...stats.paths,
|
|
313
|
+
...rasterLinksInMarkdown(input.answerText ?? ""),
|
|
314
|
+
...artifactMediaPaths(resolve(input.worktreePath)).paths,
|
|
315
|
+
],
|
|
316
|
+
});
|
|
183
317
|
input.store.writeYaml(join(input.attemptDir, "attempt.yaml"), {
|
|
184
318
|
...input.record,
|
|
185
319
|
diffstat: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidateOutputs.js","sourceRoot":"","sources":["../src/candidateOutputs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"candidateOutputs.js","sourceRoot":"","sources":["../src/candidateOutputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { CredentialProfile, HarnessRunSpec, QuotaSnapshot } from "@claudexor/schema";
|
|
2
|
+
export interface ProfilePolicy {
|
|
3
|
+
limit_action: "fail" | "ask" | "rotate";
|
|
4
|
+
rotation_eligible: string[];
|
|
5
|
+
headroom_threshold: number;
|
|
6
|
+
}
|
|
7
|
+
/** Typed quota evidence for a profile over its headroom bound (provenance). */
|
|
8
|
+
export interface HeadroomBreach {
|
|
9
|
+
constraint_id: string;
|
|
10
|
+
used_ratio: number;
|
|
11
|
+
threshold: number;
|
|
12
|
+
resets_at: string | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Static rotation candidates, before any credential-backed readiness probe.
|
|
16
|
+
* One owner applies policy order, enabled/harness scope, current identity,
|
|
17
|
+
* already-tried exclusions, and the payment-kind fence. Callers then probe
|
|
18
|
+
* only identities that could actually be selected.
|
|
19
|
+
*/
|
|
20
|
+
export declare function staticRotationCandidates(args: {
|
|
21
|
+
registry: readonly CredentialProfile[];
|
|
22
|
+
harnessId: string;
|
|
23
|
+
policy: ProfilePolicy;
|
|
24
|
+
current: Pick<CredentialProfile, "profile_id" | "credential_kind"> | null;
|
|
25
|
+
excluded?: ReadonlySet<string>;
|
|
26
|
+
}): CredentialProfile[];
|
|
27
|
+
/**
|
|
28
|
+
* Proactive headroom check (W5.4 `profile_headroom_preflight`): the SELECTED
|
|
29
|
+
* profile's freshest snapshot windows against the policy threshold. Unknown
|
|
30
|
+
* usage is NOT a breach — rotation never triggers on missing data.
|
|
31
|
+
*/
|
|
32
|
+
export declare function profileHeadroomBreach(snapshots: readonly QuotaSnapshot[], harnessId: string, profileId: string | null, threshold: number): HeadroomBreach | null;
|
|
33
|
+
/**
|
|
34
|
+
* The next rotation target after `currentProfileId` (W5.4): policy order wins
|
|
35
|
+
* (`rotation_eligible`), else every enabled profile of the harness in registry
|
|
36
|
+
* order. The current profile and disabled/unknown ids never come back; a
|
|
37
|
+
* profile already over the headroom bound is skipped (rotating INTO a spent
|
|
38
|
+
* subscription is not a failover). Cross-subscription rotation of one vendor
|
|
39
|
+
* is allowed by owner decision — but rotation NEVER crosses credential kinds
|
|
40
|
+
* (release wave round-16 BLOCK): a subscription→API-key swap silently changes
|
|
41
|
+
* the payment model mid-attempt, and the attempt's first-wins auth-route
|
|
42
|
+
* receipt (decided once before spawn) would misvalue metered usage as
|
|
43
|
+
* subscription entitlement, bypassing a finite cash cap.
|
|
44
|
+
*/
|
|
45
|
+
export declare function nextEligibleProfile(registry: readonly CredentialProfile[], harnessId: string, policy: ProfilePolicy, current: Pick<CredentialProfile, "profile_id" | "credential_kind"> | null, snapshots: readonly QuotaSnapshot[], readyProfileIds: ReadonlySet<string>, excluded?: ReadonlySet<string>): CredentialProfile | null;
|
|
46
|
+
/**
|
|
47
|
+
* `rotation_retry_eligible` (sol #30): a failover retry is allowed ONLY when
|
|
48
|
+
* the attempt saw a TYPED vendor limit AND produced no deliverable and no
|
|
49
|
+
* workspace mutation — a partially-acted attempt never silently reruns.
|
|
50
|
+
*/
|
|
51
|
+
export declare function rotationRetryEligible(input: {
|
|
52
|
+
sawTypedLimit: boolean;
|
|
53
|
+
deliverableEmpty: boolean;
|
|
54
|
+
}): boolean;
|
|
55
|
+
type EmitFn = (type: "route.profile.headroom_exceeded" | "route.profile.rotated" | "route.profile.rotation_exhausted", payload: Record<string, unknown>) => void;
|
|
56
|
+
/**
|
|
57
|
+
* `profile_headroom_preflight` (W5.4): BEFORE spawn, the selected profile's
|
|
58
|
+
* freshest quota windows are checked against the policy threshold. A breach
|
|
59
|
+
* is always a typed event; `rotate` swaps to the next eligible profile with
|
|
60
|
+
* provenance, `ask`/`fail` proceed on the selected profile — the runtime
|
|
61
|
+
* `vendor_limit_rejected` evidence stays the terminating truth.
|
|
62
|
+
*/
|
|
63
|
+
export declare function preflightCredentialProfile(args: {
|
|
64
|
+
profile: CredentialProfile;
|
|
65
|
+
harnessId: string;
|
|
66
|
+
policy: ProfilePolicy;
|
|
67
|
+
registry: readonly CredentialProfile[];
|
|
68
|
+
snapshots: readonly QuotaSnapshot[];
|
|
69
|
+
readyProfileIds: ReadonlySet<string>;
|
|
70
|
+
emit: EmitFn;
|
|
71
|
+
}): CredentialProfile;
|
|
72
|
+
/**
|
|
73
|
+
* Default-subject start selection (INV-135, owner scope "auto-balance"): when
|
|
74
|
+
* NO profile is pinned, the policy is `rotate`, and the DEFAULT store's own
|
|
75
|
+
* fresh quota window is at/over the headroom bound, pick the first eligible
|
|
76
|
+
* SUBSCRIPTION profile instead of spawning into a near-certain vendor limit.
|
|
77
|
+
* Strictly opt-in: `fail`/`ask` keep today's default-user behavior untouched
|
|
78
|
+
* (the profile engine's fail action governs PINNED profiles only — throwing
|
|
79
|
+
* here would brick every default user at 90% quota). Unknown or stale usage
|
|
80
|
+
* never rotates.
|
|
81
|
+
*/
|
|
82
|
+
export declare function preflightDefaultSubject(args: {
|
|
83
|
+
harnessId: string;
|
|
84
|
+
policy: ProfilePolicy;
|
|
85
|
+
registry: readonly CredentialProfile[];
|
|
86
|
+
snapshots: readonly QuotaSnapshot[];
|
|
87
|
+
readyProfileIds: ReadonlySet<string>;
|
|
88
|
+
defaultRoute: "local_session" | "api_key" | null;
|
|
89
|
+
emit: EmitFn;
|
|
90
|
+
}): CredentialProfile | null;
|
|
91
|
+
/**
|
|
92
|
+
* Reactive failover plan (`vendor_limit_rejected`, W5.4): rotation fires ONLY
|
|
93
|
+
* on the typed predicate under a `rotate` policy, marks the current profile
|
|
94
|
+
* tried (at most once per attempt each), and returns the next target with
|
|
95
|
+
* provenance already emitted — or null when the attempt must fail as-is.
|
|
96
|
+
* `currentProfile: null` is the DEFAULT subject: allowed ONLY when the caller
|
|
97
|
+
* proves the attempt's pre-spawn route was vendor_native (a metered default
|
|
98
|
+
* hitting a limit is a budget fact, not a subscription to fail over from).
|
|
99
|
+
*/
|
|
100
|
+
export declare function planReactiveRotation(args: {
|
|
101
|
+
currentProfile: CredentialProfile | null;
|
|
102
|
+
defaultRouteWasVendorNative?: boolean;
|
|
103
|
+
harnessId: string;
|
|
104
|
+
attemptId: string;
|
|
105
|
+
policy: ProfilePolicy;
|
|
106
|
+
registry: readonly CredentialProfile[];
|
|
107
|
+
snapshots: readonly QuotaSnapshot[];
|
|
108
|
+
readyProfileIds: ReadonlySet<string>;
|
|
109
|
+
triedProfiles: Set<string>;
|
|
110
|
+
sawTypedLimit: boolean;
|
|
111
|
+
deliverableEmpty: boolean;
|
|
112
|
+
lastLimit: {
|
|
113
|
+
retryDelayMs: number | null;
|
|
114
|
+
resetsAt: string | null;
|
|
115
|
+
} | null;
|
|
116
|
+
emit: EmitFn;
|
|
117
|
+
}): CredentialProfile | null;
|
|
118
|
+
/**
|
|
119
|
+
* Shared reactive-failover step for BOTH lanes: given the attempt's typed
|
|
120
|
+
* evidence, plan a rotation and rebuild the spec on a NEW vendor session
|
|
121
|
+
* under the next profile — or return null when the attempt must fail as-is.
|
|
122
|
+
*/
|
|
123
|
+
export declare function rotateSpecOnTypedLimit(args: {
|
|
124
|
+
spec: HarnessRunSpec;
|
|
125
|
+
harnessId: string;
|
|
126
|
+
attemptId: string;
|
|
127
|
+
policy: ProfilePolicy;
|
|
128
|
+
registry: readonly CredentialProfile[];
|
|
129
|
+
snapshots: readonly QuotaSnapshot[];
|
|
130
|
+
readyProfileIds: ReadonlySet<string>;
|
|
131
|
+
triedProfiles: Set<string>;
|
|
132
|
+
sawTypedLimit: boolean;
|
|
133
|
+
deliverableEmpty: boolean;
|
|
134
|
+
lastLimit: {
|
|
135
|
+
retryDelayMs: number | null;
|
|
136
|
+
resetsAt: string | null;
|
|
137
|
+
} | null;
|
|
138
|
+
emit: EmitFn;
|
|
139
|
+
newSessionId: () => string;
|
|
140
|
+
/** Pre-spawn route estimate for a profile-less spec: default-subject
|
|
141
|
+
* rotation is allowed ONLY off a vendor_native attempt. */
|
|
142
|
+
defaultRouteWasVendorNative?: boolean;
|
|
143
|
+
}): HarnessRunSpec | null;
|
|
144
|
+
export {};
|
|
145
|
+
//# sourceMappingURL=credential-profile-rotation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-profile-rotation.d.ts","sourceRoot":"","sources":["../src/credential-profile-rotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG1F,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACxC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC1E,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC,GAAG,iBAAiB,EAAE,CAsBtB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CAmBvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,iBAAiB,CAAC,GAAG,IAAI,EACzE,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAa,GACxC,iBAAiB,GAAG,IAAI,CAgB1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAEV;AAED,KAAK,MAAM,GAAG,CACZ,IAAI,EACA,iCAAiC,GACjC,uBAAuB,GACvB,kCAAkC,EACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,CAAC;AA0DV;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,iBAAiB,CA4DpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,iBAAiB,GAAG,IAAI,CAsC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,iBAAiB,GAAG,IAAI,CAuC3B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B;+DAC2D;IAC3D,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,GAAG,cAAc,GAAG,IAAI,CAuBxB"}
|