@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
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BudgetLedger } from "@claudexor/budget";
|
|
2
|
+
import type { EventLog } from "@claudexor/event-log";
|
|
3
|
+
import type { QuotaSnapshot, TaskContract } from "@claudexor/schema";
|
|
4
|
+
import type { DelegationBudgetAuthority } from "./delegationBudgetAuthority.js";
|
|
5
|
+
import type { RunInput } from "./orchestrator.js";
|
|
6
|
+
export declare function createRootLedger(args: {
|
|
7
|
+
input: RunInput;
|
|
8
|
+
contract: TaskContract;
|
|
9
|
+
log: EventLog;
|
|
10
|
+
authority?: DelegationBudgetAuthority;
|
|
11
|
+
quotaSnapshots: readonly QuotaSnapshot[];
|
|
12
|
+
}): BudgetLedger;
|
|
13
|
+
//# sourceMappingURL=root-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-ledger.d.ts","sourceRoot":"","sources":["../src/root-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,GAAG,YAAY,CAiCf"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BudgetLedger } from "@claudexor/budget";
|
|
2
|
+
export function createRootLedger(args) {
|
|
3
|
+
const onCashSettled = (cashSpendUsd, valuationUsd, cashEstimated, valuationKnowledge) => args.log.emit("budget.cash", {
|
|
4
|
+
cash_spend_usd: cashSpendUsd,
|
|
5
|
+
valuation_usd: valuationUsd,
|
|
6
|
+
estimated: cashEstimated,
|
|
7
|
+
valuation_knowledge: valuationKnowledge,
|
|
8
|
+
});
|
|
9
|
+
const ledger = args.input.delegatedFromRunId
|
|
10
|
+
? args.authority?.attachChild(args.input.delegatedFromRunId, args.input.delegationAdmissionId ?? "", args.input.runId, args.contract.task_id, onCashSettled)
|
|
11
|
+
: new BudgetLedger(args.contract.budget.paid_budget, undefined, { onCashSettled });
|
|
12
|
+
if (!ledger) {
|
|
13
|
+
throw Object.assign(new Error(`delegated run ${args.contract.task_id} has no daemon-lifetime budget authority for parent ${args.input.delegatedFromRunId}`), { code: "delegation_budget_parent_unavailable", status: 409 });
|
|
14
|
+
}
|
|
15
|
+
if (args.input.delegatedFromRunId)
|
|
16
|
+
args.input.onDelegatedLedgerAttached?.();
|
|
17
|
+
for (const snapshot of args.quotaSnapshots)
|
|
18
|
+
ledger.observeQuotaSnapshot(snapshot);
|
|
19
|
+
return ledger;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=root-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-ledger.js","sourceRoot":"","sources":["../src/root-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,UAAU,gBAAgB,CAAC,IAMhC;IACC,MAAM,aAAa,GAAG,CACpB,YAAoB,EACpB,YAAoB,EACpB,aAAsB,EACtB,kBAAqD,EACrD,EAAE,CACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;QAC3B,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE,YAAY;QAC3B,SAAS,EAAE,aAAa;QACxB,mBAAmB,EAAE,kBAAkB;KACxC,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CACzB,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAC7B,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,EACtC,IAAI,CAAC,KAAK,CAAC,KAAM,EACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,EACrB,aAAa,CACd;QACH,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,uDAAuD,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAC7H,EACD,EAAE,IAAI,EAAE,sCAAsC,EAAE,MAAM,EAAE,GAAG,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC;IAC5E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc;QAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Classify typed routing refusal separately from provider availability. */
|
|
2
|
+
export declare function routingFailureClassification(err: unknown): {
|
|
3
|
+
category: "config_error" | "harness_unavailable";
|
|
4
|
+
nextActions?: string[];
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=routing-failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-failure.d.ts","sourceRoot":"","sources":["../src/routing-failure.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,QAAQ,EAAE,cAAc,GAAG,qBAAqB,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CASA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { harnessFailureNextActions } from "./harnessFailure.js";
|
|
2
|
+
/** Classify typed routing refusal separately from provider availability. */
|
|
3
|
+
export function routingFailureClassification(err) {
|
|
4
|
+
const isPreflightRefusal = !!err &&
|
|
5
|
+
typeof err === "object" &&
|
|
6
|
+
err.code === "routing_preflight_refused";
|
|
7
|
+
if (isPreflightRefusal) {
|
|
8
|
+
return { category: "config_error", nextActions: harnessFailureNextActions("config_error") };
|
|
9
|
+
}
|
|
10
|
+
return { category: "harness_unavailable" };
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=routing-failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-failure.js","sourceRoot":"","sources":["../src/routing-failure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B,CAAC,GAAY;IAIvD,MAAM,kBAAkB,GACtB,CAAC,CAAC,GAAG;QACL,OAAO,GAAG,KAAK,QAAQ;QACtB,GAA0B,CAAC,IAAI,KAAK,2BAA2B,CAAC;IACnE,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-bounded.d.ts","sourceRoot":"","sources":["../src/run-bounded.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Run work with bounded concurrency while preserving each item's source index. */
|
|
2
|
+
export async function runBounded(items, limit, work) {
|
|
3
|
+
if (items.length === 0)
|
|
4
|
+
return;
|
|
5
|
+
const concurrency = Math.max(1, Math.min(limit, items.length));
|
|
6
|
+
let next = 0;
|
|
7
|
+
const workers = Array.from({ length: concurrency }, async () => {
|
|
8
|
+
for (;;) {
|
|
9
|
+
const idx = next++;
|
|
10
|
+
if (idx >= items.length)
|
|
11
|
+
return;
|
|
12
|
+
await work(items[idx], idx);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
// Do not let the first rejected worker release resources that its already
|
|
16
|
+
// admitted siblings still use. Preserve failure semantics, but only rethrow
|
|
17
|
+
// after every worker has settled.
|
|
18
|
+
const settled = await Promise.allSettled(workers);
|
|
19
|
+
const rejected = settled.find((result) => result.status === "rejected");
|
|
20
|
+
if (rejected)
|
|
21
|
+
throw rejected.reason;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=run-bounded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-bounded.js","sourceRoot":"","sources":["../src/run-bounded.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAU,EACV,KAAa,EACb,IAA+C;IAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7D,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAChC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,0EAA0E;IAC1E,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAC1E,CAAC;IACF,IAAI,QAAQ;QAAE,MAAM,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResolvedConfig, RoutingGoal } from "@claudexor/schema";
|
|
2
|
+
import type { RunInput } from "./orchestrator.js";
|
|
3
|
+
export interface RunInputResolutionDeps {
|
|
4
|
+
config: ResolvedConfig;
|
|
5
|
+
registryIds: Iterable<string>;
|
|
6
|
+
routingGoal?: RoutingGoal;
|
|
7
|
+
}
|
|
8
|
+
/** Resolve stable pool, primary, model, web, and routing defaults once per run. */
|
|
9
|
+
export declare function resolveRunInputDefaults(input: RunInput, deps: RunInputResolutionDeps): RunInput;
|
|
10
|
+
//# sourceMappingURL=run-input-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-input-resolution.d.ts","sourceRoot":"","sources":["../src/run-input-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,GAAG,QAAQ,CAqF/F"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { HarnessUnavailableError } from "@claudexor/core";
|
|
2
|
+
import { noProjectRepoRoot } from "@claudexor/util";
|
|
3
|
+
/** Resolve stable pool, primary, model, web, and routing defaults once per run. */
|
|
4
|
+
export function resolveRunInputDefaults(input, deps) {
|
|
5
|
+
if (input.contextMode === "off" &&
|
|
6
|
+
!(input.mode === "ask" && input.repoRoot === noProjectRepoRoot())) {
|
|
7
|
+
throw new Error("contextMode 'off' is only supported for Ask without a repoRoot");
|
|
8
|
+
}
|
|
9
|
+
const cfg = deps.config;
|
|
10
|
+
const configuredPool = cfg.global.routing.eligible_harnesses;
|
|
11
|
+
const harnesses = input.harnesses ?? (configuredPool.length > 0 ? configuredPool : undefined);
|
|
12
|
+
const explicitPrimary = input.primaryHarness;
|
|
13
|
+
const configPrimary = cfg.global.routing.primary_harness;
|
|
14
|
+
const primaryHarness = explicitPrimary ??
|
|
15
|
+
(input.harnesses?.length === 1 ? input.harnesses[0] : undefined) ??
|
|
16
|
+
configPrimary ??
|
|
17
|
+
undefined;
|
|
18
|
+
if (primaryHarness && harnesses?.length && !harnesses.includes(primaryHarness)) {
|
|
19
|
+
if (explicitPrimary) {
|
|
20
|
+
throw new Error(`primary harness '${explicitPrimary}' is not in the eligible harness pool (${harnesses.join(", ")}); ` +
|
|
21
|
+
`pass --primary-harness as one of [${harnesses.join(", ")}], or add '${explicitPrimary}' to --harness`);
|
|
22
|
+
}
|
|
23
|
+
throw new HarnessUnavailableError(`ambiguous primary harness: the configured default primary '${primaryHarness}' is not in the selected pool [${harnesses.join(", ")}], ` +
|
|
24
|
+
`and no --primary-harness was given. Pin one explicitly, e.g. \`--primary-harness ${harnesses[0]}\` ` +
|
|
25
|
+
`(or another of [${harnesses.join(", ")}]).`);
|
|
26
|
+
}
|
|
27
|
+
if (input.web && input.externalContextPolicy && input.web !== input.externalContextPolicy) {
|
|
28
|
+
throw new Error(`contradictory web policy: web='${input.web}' vs externalContextPolicy='${input.externalContextPolicy}' (pass one, or equal values)`);
|
|
29
|
+
}
|
|
30
|
+
const web = input.web ?? input.externalContextPolicy ?? "auto";
|
|
31
|
+
// Materialize this iterable exactly once: registry.keys() is repeatable, but
|
|
32
|
+
// embedders are allowed to supply any Iterable. The same frozen universe is
|
|
33
|
+
// also the lane snapshot for a pure Auto pool, whose eventual lanes are not
|
|
34
|
+
// known until routing but whose Settings defaults must already be immutable.
|
|
35
|
+
const knownHarnessIds = [...new Set(deps.registryIds)];
|
|
36
|
+
const knownHarnessIdSet = new Set(knownHarnessIds);
|
|
37
|
+
validateHarnessMap("models", input.models, knownHarnessIds, knownHarnessIdSet);
|
|
38
|
+
validateHarnessMap("efforts", input.efforts, knownHarnessIds, knownHarnessIdSet);
|
|
39
|
+
const snapshotLaneIds = harnesses ?? knownHarnessIds;
|
|
40
|
+
const models = { ...input.models };
|
|
41
|
+
if (input.model) {
|
|
42
|
+
const scalarTarget = primaryHarness ?? (harnesses?.length === 1 ? harnesses[0] : undefined);
|
|
43
|
+
if (!scalarTarget) {
|
|
44
|
+
throw new Error(`a scalar model ('${input.model}') is ambiguous without a primary harness: ` +
|
|
45
|
+
`the pool is ${harnesses?.length ? `[${harnesses.join(", ")}]` : "auto-resolved"} — ` +
|
|
46
|
+
`set a primary harness, pass exactly one --harness, or use a harness-scoped model map`);
|
|
47
|
+
}
|
|
48
|
+
models[scalarTarget] ??= input.model;
|
|
49
|
+
}
|
|
50
|
+
const harnessCfg = cfg.global.harnesses;
|
|
51
|
+
for (const harnessId of snapshotLaneIds) {
|
|
52
|
+
const defaultModel = harnessCfg[harnessId]?.default_model;
|
|
53
|
+
if (defaultModel)
|
|
54
|
+
models[harnessId] ??= defaultModel;
|
|
55
|
+
}
|
|
56
|
+
const efforts = { ...input.efforts };
|
|
57
|
+
for (const harnessId of snapshotLaneIds) {
|
|
58
|
+
const effort = input.effort ?? harnessCfg[harnessId]?.effort;
|
|
59
|
+
if (effort)
|
|
60
|
+
efforts[harnessId] ??= effort;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
...input,
|
|
64
|
+
harnesses,
|
|
65
|
+
primaryHarness,
|
|
66
|
+
primaryHarnessExplicit: explicitPrimary !== undefined,
|
|
67
|
+
model: undefined,
|
|
68
|
+
models,
|
|
69
|
+
effort: undefined,
|
|
70
|
+
efforts,
|
|
71
|
+
routingGoal: input.routingGoal ??
|
|
72
|
+
deps.routingGoal ??
|
|
73
|
+
cfg.project.budget?.routing_goal ??
|
|
74
|
+
cfg.global.routing.goal ??
|
|
75
|
+
"auto",
|
|
76
|
+
web,
|
|
77
|
+
externalContextPolicy: web,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function validateHarnessMap(name, values, knownHarnessIds, knownHarnessIdSet) {
|
|
81
|
+
for (const key of Object.keys(values ?? {})) {
|
|
82
|
+
if (knownHarnessIdSet.has(key))
|
|
83
|
+
continue;
|
|
84
|
+
throw new Error(`${name} map names unknown harness '${key}' (registered: ${[...knownHarnessIds].sort().join(", ")}); ` +
|
|
85
|
+
`run \`claudexor harness list --all\``);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=run-input-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-input-resolution.js","sourceRoot":"","sources":["../src/run-input-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ArtifactStore, RunPaths } from "@claudexor/artifact-store";
|
|
2
|
+
import type { BudgetLedger } from "@claudexor/budget";
|
|
3
|
+
import { EventLog } from "@claudexor/event-log";
|
|
4
|
+
import type { ModeKind, QuotaSnapshot, RunEvent, TaskContract } from "@claudexor/schema";
|
|
5
|
+
import type { DelegationBudgetAuthority } from "./delegationBudgetAuthority.js";
|
|
6
|
+
import type { RunInput } from "./orchestrator.js";
|
|
7
|
+
import { type AnnouncedRunContext } from "./runTerminalContext.js";
|
|
8
|
+
interface RunEventLogInput {
|
|
9
|
+
threadId?: string;
|
|
10
|
+
onEventPersist?: (event: RunEvent) => void;
|
|
11
|
+
onEvent?: (event: RunEvent) => void;
|
|
12
|
+
}
|
|
13
|
+
interface RunAnnouncementInput {
|
|
14
|
+
input: RunInput;
|
|
15
|
+
contract: TaskContract;
|
|
16
|
+
quotaSnapshots: readonly QuotaSnapshot[];
|
|
17
|
+
store: ArtifactStore;
|
|
18
|
+
authority?: DelegationBudgetAuthority;
|
|
19
|
+
runId: string;
|
|
20
|
+
taskId: string;
|
|
21
|
+
mode: ModeKind;
|
|
22
|
+
phase: "race" | "convergence" | "plan" | "report";
|
|
23
|
+
prompt: string;
|
|
24
|
+
}
|
|
25
|
+
/** Keep durable-journal and live-observer callback ordering identical at every run entry point. */
|
|
26
|
+
export declare function createRunEventLog(eventsPath: string, runId: string, taskId: string, input: RunEventLogInput): EventLog;
|
|
27
|
+
/**
|
|
28
|
+
* Everything after EventLog construction and before `run.created` persists is
|
|
29
|
+
* still pre-announce: a ledger or durable-sink refusal must escape without the
|
|
30
|
+
* terminal safety net. Release live-writer ownership across that whole window
|
|
31
|
+
* so a failed startup cannot strand the run path behind the duplicate-owner
|
|
32
|
+
* fence.
|
|
33
|
+
*/
|
|
34
|
+
export declare function prepareRunAnnouncement<T>(log: EventLog, prepare: () => T): T;
|
|
35
|
+
/**
|
|
36
|
+
* One startup boundary for every run strategy. A delegated ledger must be
|
|
37
|
+
* attached before run.created (X339), while caller-visible publication must
|
|
38
|
+
* wait until that event reaches the durable sink. Arm the whole-run terminal
|
|
39
|
+
* guard before any later preamble callback/event can fail.
|
|
40
|
+
*/
|
|
41
|
+
export declare function beginAnnouncedRun(start: RunAnnouncementInput, announce: (context: AnnouncedRunContext) => void): {
|
|
42
|
+
store: ArtifactStore;
|
|
43
|
+
paths: RunPaths;
|
|
44
|
+
log: EventLog;
|
|
45
|
+
ledger: BudgetLedger;
|
|
46
|
+
};
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=runEventLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runEventLog.d.ts","sourceRoot":"","sources":["../src/runEventLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAExF,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC;AAED,UAAU,oBAAoB;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mGAAmG;AACnG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,QAAQ,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAO5E;AAcD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAC/C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAyBhF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { EventLog } from "@claudexor/event-log";
|
|
2
|
+
import { redactSecrets, safeInvoke } from "@claudexor/util";
|
|
3
|
+
import { createRootLedger } from "./root-ledger.js";
|
|
4
|
+
import { announcedRunContext } from "./runTerminalContext.js";
|
|
5
|
+
/** Keep durable-journal and live-observer callback ordering identical at every run entry point. */
|
|
6
|
+
export function createRunEventLog(eventsPath, runId, taskId, input) {
|
|
7
|
+
return new EventLog(eventsPath, runId, taskId, input.onEventPersist, input.threadId, input.onEvent);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Everything after EventLog construction and before `run.created` persists is
|
|
11
|
+
* still pre-announce: a ledger or durable-sink refusal must escape without the
|
|
12
|
+
* terminal safety net. Release live-writer ownership across that whole window
|
|
13
|
+
* so a failed startup cannot strand the run path behind the duplicate-owner
|
|
14
|
+
* fence.
|
|
15
|
+
*/
|
|
16
|
+
export function prepareRunAnnouncement(log, prepare) {
|
|
17
|
+
try {
|
|
18
|
+
return prepare();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
log.dispose();
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function announcePreparedProjectGitInitialization(input, log) {
|
|
26
|
+
const result = input.projectGitInitialization;
|
|
27
|
+
if (!result || (!result.initialized && !result.baselineCommitted))
|
|
28
|
+
return;
|
|
29
|
+
log.emit("project.git.initialized", {
|
|
30
|
+
repo_root: input.repoRoot,
|
|
31
|
+
initialized: result.initialized,
|
|
32
|
+
baseline_committed: result.baselineCommitted,
|
|
33
|
+
gitignore_seeded: result.gitignoreSeeded,
|
|
34
|
+
head_sha: result.headSha,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* One startup boundary for every run strategy. A delegated ledger must be
|
|
39
|
+
* attached before run.created (X339), while caller-visible publication must
|
|
40
|
+
* wait until that event reaches the durable sink. Arm the whole-run terminal
|
|
41
|
+
* guard before any later preamble callback/event can fail.
|
|
42
|
+
*/
|
|
43
|
+
export function beginAnnouncedRun(start, announce) {
|
|
44
|
+
const { input, contract, quotaSnapshots, store, authority, runId, taskId, mode, phase } = start;
|
|
45
|
+
const paths = store.createRun(runId);
|
|
46
|
+
const log = createRunEventLog(paths.eventsPath, runId, taskId, input);
|
|
47
|
+
const ledger = prepareRunAnnouncement(log, () => {
|
|
48
|
+
const preparedLedger = createRootLedger({
|
|
49
|
+
input,
|
|
50
|
+
contract,
|
|
51
|
+
log,
|
|
52
|
+
authority,
|
|
53
|
+
quotaSnapshots,
|
|
54
|
+
});
|
|
55
|
+
log.emit("run.created", { mode, prompt: redactSecrets(start.prompt) });
|
|
56
|
+
return preparedLedger;
|
|
57
|
+
});
|
|
58
|
+
announce(announcedRunContext({ log, store, paths, runId, taskId, mode, phase }, ledger, () => authority?.hasParent(runId) === true));
|
|
59
|
+
safeInvoke(input.onRunStart, { runId, taskId, runDir: paths.root });
|
|
60
|
+
announcePreparedProjectGitInitialization(input, log);
|
|
61
|
+
return { store, paths, log, ledger };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=runEventLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runEventLog.js","sourceRoot":"","sources":["../src/runEventLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RunFacts, type RunOutcomeFacts } from "@claudexor/schema";
|
|
2
|
+
import type { AnnouncedRunContext } from "./runTerminals.js";
|
|
3
|
+
import { buildRunFacts } from "./runFactsBuilder.js";
|
|
4
|
+
export { buildRunFacts };
|
|
5
|
+
export interface PreparedRunFactsReceipt {
|
|
6
|
+
facts: RunFacts;
|
|
7
|
+
/** Publish telemetry compatibility + the canonical receipt commit marker. */
|
|
8
|
+
commit: () => void;
|
|
9
|
+
/** Restore the exact pre-commit marker/telemetry bytes after event failure. */
|
|
10
|
+
rollback: () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Prepare the validated receipt before terminal append. EventLog owns the
|
|
14
|
+
* commit boundary and invokes rollback if the terminal cannot become durable.
|
|
15
|
+
*/
|
|
16
|
+
export declare function prepareRunFactsReceipt(ctx: AnnouncedRunContext, terminalOutcome: RunOutcomeFacts): PreparedRunFactsReceipt;
|
|
17
|
+
/**
|
|
18
|
+
* A terminal-facts contradiction is itself a failed run. This minimal receipt
|
|
19
|
+
* deliberately does not trust the contradictory artifact graph, but still
|
|
20
|
+
* gives every surface a valid, fail-closed canonical outcome.
|
|
21
|
+
*/
|
|
22
|
+
export declare function prepareRunFactsFailureReceipt(ctx: AnnouncedRunContext, failureOutcome: RunOutcomeFacts): PreparedRunFactsReceipt;
|
|
23
|
+
//# sourceMappingURL=runFacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFacts.d.ts","sourceRoot":"","sources":["../src/runFacts.ts"],"names":[],"mappings":"AAYA,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,QAAQ,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AA6HD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,mBAAmB,EACxB,eAAe,EAAE,eAAe,GAC/B,uBAAuB,CAEzB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,mBAAmB,EACxB,cAAc,EAAE,eAAe,GAC9B,uBAAuB,CAoCzB"}
|
package/dist/runFacts.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, constants, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { RunTelemetry, SCHEMA_VERSION, requiredActionsFor, validateRunFactsInvariants, } from "@claudexor/schema";
|
|
5
|
+
import { nowIso } from "@claudexor/util";
|
|
6
|
+
import { buildRunFacts } from "./runFactsBuilder.js";
|
|
7
|
+
import { terminalFactsFailurePresentation } from "./runFactsPresentation.js";
|
|
8
|
+
export { buildRunFacts };
|
|
9
|
+
function textSnapshot(path) {
|
|
10
|
+
try {
|
|
11
|
+
return { existed: true, text: readFileSync(path, "utf8") };
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === "ENOENT") {
|
|
15
|
+
return { existed: false, text: "" };
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function restoreSnapshot(path, prior) {
|
|
21
|
+
if (!prior.existed) {
|
|
22
|
+
let removed = false;
|
|
23
|
+
try {
|
|
24
|
+
unlinkSync(path);
|
|
25
|
+
removed = true;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code !== "ENOENT")
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
if (removed)
|
|
32
|
+
fsyncParentDirectory(dirname(path));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
replaceTextAtomically(path, prior.text);
|
|
36
|
+
}
|
|
37
|
+
function fsyncParentDirectory(parent) {
|
|
38
|
+
const parentFd = openSync(parent, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
39
|
+
try {
|
|
40
|
+
fsyncSync(parentFd);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
closeSync(parentFd);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function replaceTextAtomically(path, text) {
|
|
47
|
+
const parent = dirname(path);
|
|
48
|
+
const tmp = join(parent, `.run-facts-restore-${randomUUID()}.tmp`);
|
|
49
|
+
let fileFd = null;
|
|
50
|
+
try {
|
|
51
|
+
fileFd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
52
|
+
writeFileSync(fileFd, text, "utf8");
|
|
53
|
+
fsyncSync(fileFd);
|
|
54
|
+
closeSync(fileFd);
|
|
55
|
+
fileFd = null;
|
|
56
|
+
renameSync(tmp, path);
|
|
57
|
+
fsyncParentDirectory(parent);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
if (fileFd !== null)
|
|
61
|
+
closeSync(fileFd);
|
|
62
|
+
try {
|
|
63
|
+
unlinkSync(tmp);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error.code !== "ENOENT")
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function writeYamlAtomically(ctx, path, value) {
|
|
72
|
+
const parent = dirname(path);
|
|
73
|
+
const tmp = join(parent, `.run-facts-${randomUUID()}.tmp`);
|
|
74
|
+
try {
|
|
75
|
+
ctx.store.writeYaml(tmp, value);
|
|
76
|
+
const fileFd = openSync(tmp, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
77
|
+
try {
|
|
78
|
+
fsyncSync(fileFd);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
closeSync(fileFd);
|
|
82
|
+
}
|
|
83
|
+
renameSync(tmp, path);
|
|
84
|
+
fsyncParentDirectory(parent);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
try {
|
|
88
|
+
unlinkSync(tmp);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error.code !== "ENOENT")
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function persistPreparedRunFacts(ctx, facts) {
|
|
97
|
+
const telemetryPath = join(ctx.paths.finalDir, "telemetry.yaml");
|
|
98
|
+
const receiptPath = join(ctx.paths.finalDir, "run_facts.yaml");
|
|
99
|
+
const parsedTelemetry = RunTelemetry.safeParse(ctx.store.readYaml(telemetryPath));
|
|
100
|
+
const telemetry = parsedTelemetry.success ? parsedTelemetry.data : null;
|
|
101
|
+
const embedded = telemetry ? RunTelemetry.parse({ ...telemetry, run_facts: facts }) : null;
|
|
102
|
+
let priorTelemetry = null;
|
|
103
|
+
let priorReceipt = null;
|
|
104
|
+
let committed = false;
|
|
105
|
+
let rolledBack = false;
|
|
106
|
+
const rollback = () => {
|
|
107
|
+
if (rolledBack)
|
|
108
|
+
return;
|
|
109
|
+
if (priorReceipt)
|
|
110
|
+
restoreSnapshot(receiptPath, priorReceipt);
|
|
111
|
+
if (priorTelemetry)
|
|
112
|
+
restoreSnapshot(telemetryPath, priorTelemetry);
|
|
113
|
+
rolledBack = true;
|
|
114
|
+
};
|
|
115
|
+
const commit = () => {
|
|
116
|
+
if (committed)
|
|
117
|
+
return;
|
|
118
|
+
if (rolledBack)
|
|
119
|
+
throw new Error("cannot commit a rolled-back RunFacts receipt");
|
|
120
|
+
priorTelemetry = textSnapshot(telemetryPath);
|
|
121
|
+
priorReceipt = textSnapshot(receiptPath);
|
|
122
|
+
if (embedded)
|
|
123
|
+
writeYamlAtomically(ctx, telemetryPath, embedded);
|
|
124
|
+
// Land the canonical marker last, after its telemetry compatibility copy.
|
|
125
|
+
writeYamlAtomically(ctx, receiptPath, facts);
|
|
126
|
+
committed = true;
|
|
127
|
+
};
|
|
128
|
+
return { facts, commit, rollback };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Prepare the validated receipt before terminal append. EventLog owns the
|
|
132
|
+
* commit boundary and invokes rollback if the terminal cannot become durable.
|
|
133
|
+
*/
|
|
134
|
+
export function prepareRunFactsReceipt(ctx, terminalOutcome) {
|
|
135
|
+
return persistPreparedRunFacts(ctx, buildRunFacts(ctx, terminalOutcome));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A terminal-facts contradiction is itself a failed run. This minimal receipt
|
|
139
|
+
* deliberately does not trust the contradictory artifact graph, but still
|
|
140
|
+
* gives every surface a valid, fail-closed canonical outcome.
|
|
141
|
+
*/
|
|
142
|
+
export function prepareRunFactsFailureReceipt(ctx, failureOutcome) {
|
|
143
|
+
const facts = validateRunFactsInvariants({
|
|
144
|
+
schema_version: SCHEMA_VERSION,
|
|
145
|
+
run_id: ctx.runId,
|
|
146
|
+
task_id: ctx.taskId,
|
|
147
|
+
mode: ctx.mode,
|
|
148
|
+
outcome: failureOutcome,
|
|
149
|
+
deliverable: {
|
|
150
|
+
present: false,
|
|
151
|
+
kind: null,
|
|
152
|
+
path: null,
|
|
153
|
+
producer_attempt_id: null,
|
|
154
|
+
},
|
|
155
|
+
presentation: terminalFactsFailurePresentation(ctx),
|
|
156
|
+
participants: { planners: 0, attempts: [] },
|
|
157
|
+
gates: {
|
|
158
|
+
configured: false,
|
|
159
|
+
required: 0,
|
|
160
|
+
total: 0,
|
|
161
|
+
executed: false,
|
|
162
|
+
state: "not_configured",
|
|
163
|
+
receipt_attempt_id: null,
|
|
164
|
+
},
|
|
165
|
+
review: {
|
|
166
|
+
state: failureOutcome.review,
|
|
167
|
+
blocker_ids: [],
|
|
168
|
+
blockers: 0,
|
|
169
|
+
},
|
|
170
|
+
apply: {
|
|
171
|
+
eligibility: null,
|
|
172
|
+
operator_decision_present: false,
|
|
173
|
+
},
|
|
174
|
+
required_actions: requiredActionsFor(failureOutcome, false),
|
|
175
|
+
generated_at: nowIso(),
|
|
176
|
+
});
|
|
177
|
+
return persistPreparedRunFacts(ctx, facts);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=runFacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFacts.js","sourceRoot":"","sources":["../src/runFacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { RunFacts, type RunOutcomeFacts } from "@claudexor/schema";
|
|
2
|
+
import type { AnnouncedRunContext } from "./runTerminals.js";
|
|
3
|
+
/** Build and validate the terminal projection from canonical artifacts. */
|
|
4
|
+
export declare function buildRunFacts(ctx: AnnouncedRunContext, terminalOutcome: RunOutcomeFacts): RunFacts;
|
|
5
|
+
//# sourceMappingURL=runFactsBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFactsBuilder.d.ts","sourceRoot":"","sources":["../src/runFactsBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,QAAQ,EAQR,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAmZ7D,2EAA2E;AAC3E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAgHV"}
|