@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 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-parent-activation.d.ts","sourceRoot":"","sources":["../src/delegation-parent-activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjE,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,yBAAyB,GAAG,SAAS,EAChD,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,GAAG,EAAE,QAAQ,GACZ,IAAI,CAWN"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function activateDelegationParent(authority, input, runId, ledger, routes, log) {
|
|
2
|
+
if (input.delegate !== true || !routes.some((route) => route.delegationRequirement.effective))
|
|
3
|
+
return;
|
|
4
|
+
if (!authority) {
|
|
5
|
+
throw Object.assign(new Error("effective Delegate requires daemon-lifetime budget authority"), {
|
|
6
|
+
code: "delegation_budget_authority_unavailable",
|
|
7
|
+
status: 503,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
authority.registerParent(runId, ledger);
|
|
11
|
+
log.deferTerminal();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=delegation-parent-activation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-parent-activation.js","sourceRoot":"","sources":["../src/delegation-parent-activation.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,wBAAwB,CACtC,SAAgD,EAChD,KAAe,EACf,KAAa,EACb,MAAoB,EACpB,MAAgC,EAChC,GAAa;IAEb,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC;QAC3F,OAAO;IACT,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,EAAE;YAC7F,IAAI,EAAE,yCAAyC;YAC/C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,aAAa,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BudgetLedger } from "@claudexor/budget";
|
|
2
|
+
export interface DelegationBudgetAuthorityOptions {
|
|
3
|
+
/** Daemon-owned cancellation by admission/job id. Bound once at the
|
|
4
|
+
* composition root so the budget registry never owns process control. */
|
|
5
|
+
cancelAdmission?: (admissionId: string) => void | Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Daemon-lifetime financial registry for active Delegate families. It is
|
|
9
|
+
* intentionally narrow: no grants or general identity framework, only one
|
|
10
|
+
* live parent ledger, its monotonic child count, and task-scoped child views.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DelegationBudgetAuthority {
|
|
13
|
+
private readonly options;
|
|
14
|
+
private readonly parents;
|
|
15
|
+
private readonly childParents;
|
|
16
|
+
constructor(options?: DelegationBudgetAuthorityOptions);
|
|
17
|
+
registerParent(runId: string, ledger: BudgetLedger): void;
|
|
18
|
+
hasParent(runId: string): boolean;
|
|
19
|
+
assertCanAdmitChild(parentRunId: string): void;
|
|
20
|
+
noteChildAccepted(parentRunId: string, admissionId: string): void;
|
|
21
|
+
cancelAcceptedChild(parentRunId: string, admissionId: string): void;
|
|
22
|
+
attachChild(parentRunId: string, admissionId: string, childRunId: string, taskId: string, onCashSettled?: (cashSpendUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: "exact" | "estimated" | "unknown") => void): BudgetLedger;
|
|
23
|
+
beginParentClose(parentRunId: string): void;
|
|
24
|
+
waitForChildren(parentRunId: string, timeoutMs?: number): Promise<void>;
|
|
25
|
+
releaseRun(runId: string): void;
|
|
26
|
+
acceptedChildCount(parentRunId: string): number;
|
|
27
|
+
private isDrained;
|
|
28
|
+
private notifyIfDrained;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=delegationBudgetAuthority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationBudgetAuthority.d.ts","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD,MAAM,WAAW,gCAAgC;IAC/C;6EACyE;IACzE,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IAIxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,YAA6B,OAAO,GAAE,gCAAqC,EAAI;IAE/E,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgBxD;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgB7C;IAED,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKhE;IAED,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAIlE;IAED,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,KAClD,IAAI,GACR,YAAY,CAmBd;IAED,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG1C;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD5E;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAmB9B;IAED,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9C;IAED,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;CAIxB"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { MAX_DELEGATED_CHILDREN } from "@claudexor/schema";
|
|
2
|
+
/**
|
|
3
|
+
* Daemon-lifetime financial registry for active Delegate families. It is
|
|
4
|
+
* intentionally narrow: no grants or general identity framework, only one
|
|
5
|
+
* live parent ledger, its monotonic child count, and task-scoped child views.
|
|
6
|
+
*/
|
|
7
|
+
export class DelegationBudgetAuthority {
|
|
8
|
+
options;
|
|
9
|
+
parents = new Map();
|
|
10
|
+
childParents = new Map();
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
registerParent(runId, ledger) {
|
|
15
|
+
if (this.parents.has(runId)) {
|
|
16
|
+
throw Object.assign(new Error(`Delegate budget authority already exists for ${runId}`), {
|
|
17
|
+
code: "delegation_budget_parent_duplicate",
|
|
18
|
+
status: 409,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
this.parents.set(runId, {
|
|
22
|
+
ledger,
|
|
23
|
+
accepting: true,
|
|
24
|
+
acceptedChildren: 0,
|
|
25
|
+
pendingAdmissions: new Set(),
|
|
26
|
+
children: new Map(),
|
|
27
|
+
waiters: new Set(),
|
|
28
|
+
cancellationStarted: false,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
hasParent(runId) {
|
|
32
|
+
return this.parents.has(runId);
|
|
33
|
+
}
|
|
34
|
+
assertCanAdmitChild(parentRunId) {
|
|
35
|
+
const parent = this.parents.get(parentRunId);
|
|
36
|
+
if (!parent || !parent.accepting) {
|
|
37
|
+
throw Object.assign(new Error(`no live effective Delegate budget authority for parent ${parentRunId}`), { code: "delegation_budget_parent_unavailable", status: 409 });
|
|
38
|
+
}
|
|
39
|
+
if (parent.acceptedChildren >= MAX_DELEGATED_CHILDREN) {
|
|
40
|
+
throw Object.assign(new Error(`delegation sub-run cap reached (${parent.acceptedChildren}/${MAX_DELEGATED_CHILDREN}) for parent ${parentRunId}`), { code: "delegation_subrun_cap", status: 409 });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
noteChildAccepted(parentRunId, admissionId) {
|
|
44
|
+
this.assertCanAdmitChild(parentRunId);
|
|
45
|
+
const parent = this.parents.get(parentRunId);
|
|
46
|
+
parent.acceptedChildren += 1;
|
|
47
|
+
parent.pendingAdmissions.add(admissionId);
|
|
48
|
+
}
|
|
49
|
+
cancelAcceptedChild(parentRunId, admissionId) {
|
|
50
|
+
const parent = this.parents.get(parentRunId);
|
|
51
|
+
if (!parent?.pendingAdmissions.delete(admissionId))
|
|
52
|
+
return;
|
|
53
|
+
this.notifyIfDrained(parent);
|
|
54
|
+
}
|
|
55
|
+
attachChild(parentRunId, admissionId, childRunId, taskId, onCashSettled) {
|
|
56
|
+
const parent = this.parents.get(parentRunId);
|
|
57
|
+
if (!parent || !parent.pendingAdmissions.has(admissionId)) {
|
|
58
|
+
throw Object.assign(new Error(`delegated child ${childRunId} has no admitted parent budget authority`), { code: "delegation_budget_parent_unavailable", status: 409 });
|
|
59
|
+
}
|
|
60
|
+
if (this.childParents.has(childRunId)) {
|
|
61
|
+
throw Object.assign(new Error(`delegated child ${childRunId} is already attached`), {
|
|
62
|
+
code: "delegation_budget_child_duplicate",
|
|
63
|
+
status: 409,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
parent.pendingAdmissions.delete(admissionId);
|
|
67
|
+
const ledger = parent.ledger.scopedToTask(taskId, onCashSettled);
|
|
68
|
+
parent.children.set(childRunId, { ledger, admissionId });
|
|
69
|
+
this.childParents.set(childRunId, parentRunId);
|
|
70
|
+
return ledger;
|
|
71
|
+
}
|
|
72
|
+
beginParentClose(parentRunId) {
|
|
73
|
+
const parent = this.parents.get(parentRunId);
|
|
74
|
+
if (parent)
|
|
75
|
+
parent.accepting = false;
|
|
76
|
+
}
|
|
77
|
+
async waitForChildren(parentRunId, timeoutMs = 30_000) {
|
|
78
|
+
const parent = this.parents.get(parentRunId);
|
|
79
|
+
if (!parent || this.isDrained(parent))
|
|
80
|
+
return;
|
|
81
|
+
if (!parent.cancellationStarted && this.options.cancelAdmission) {
|
|
82
|
+
parent.cancellationStarted = true;
|
|
83
|
+
const admissionIds = new Set([
|
|
84
|
+
...parent.pendingAdmissions,
|
|
85
|
+
...[...parent.children.values()].map((child) => child.admissionId),
|
|
86
|
+
]);
|
|
87
|
+
await Promise.allSettled([...admissionIds].map((admissionId) => Promise.resolve().then(() => this.options.cancelAdmission(admissionId))));
|
|
88
|
+
if (this.isDrained(parent))
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
await new Promise((resolve, reject) => {
|
|
92
|
+
const done = () => {
|
|
93
|
+
clearTimeout(timer);
|
|
94
|
+
parent.waiters.delete(done);
|
|
95
|
+
resolve();
|
|
96
|
+
};
|
|
97
|
+
const timer = setTimeout(() => {
|
|
98
|
+
parent.waiters.delete(done);
|
|
99
|
+
// The daemon already signalled every admission above. If a broken
|
|
100
|
+
// injected runner ignores abort, fence its scoped financial mutations
|
|
101
|
+
// BEFORE the parent failure terminal is allowed to flush: it can no
|
|
102
|
+
// longer emit parent-family cash or retain a hold. Production Delegate
|
|
103
|
+
// lanes are narrower: Claude/Codex run through core spawnProcess, whose
|
|
104
|
+
// abort path sends the cooperative signal, escalates to SIGKILL after
|
|
105
|
+
// 1s, bounds tree reaping, and then completes the generator with typed
|
|
106
|
+
// termination_unconfirmed at worst. Their daemon jobs therefore settle
|
|
107
|
+
// well inside this 30s bound. This timeout is a typed broken-runner
|
|
108
|
+
// fail-safe, not a claim that an arbitrary injected runner is dead.
|
|
109
|
+
for (const child of parent.children.values())
|
|
110
|
+
child.ledger.releaseTask();
|
|
111
|
+
reject(Object.assign(new Error(`timed out waiting for ${parent.children.size + parent.pendingAdmissions.size} delegated child run(s) of ${parentRunId}`), { code: "delegation_child_drain_timeout", status: 503 }));
|
|
112
|
+
}, timeoutMs);
|
|
113
|
+
timer.unref?.();
|
|
114
|
+
parent.waiters.add(done);
|
|
115
|
+
if (this.isDrained(parent))
|
|
116
|
+
done();
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
releaseRun(runId) {
|
|
120
|
+
const parentRunId = this.childParents.get(runId);
|
|
121
|
+
if (parentRunId) {
|
|
122
|
+
const parent = this.parents.get(parentRunId);
|
|
123
|
+
const child = parent?.children.get(runId);
|
|
124
|
+
child?.ledger.releaseTask();
|
|
125
|
+
parent?.children.delete(runId);
|
|
126
|
+
this.childParents.delete(runId);
|
|
127
|
+
if (parent)
|
|
128
|
+
this.notifyIfDrained(parent);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const parent = this.parents.get(runId);
|
|
132
|
+
if (!parent)
|
|
133
|
+
return;
|
|
134
|
+
parent.accepting = false;
|
|
135
|
+
parent.pendingAdmissions.clear();
|
|
136
|
+
for (const child of parent.children.values())
|
|
137
|
+
child.ledger.releaseTask();
|
|
138
|
+
for (const childRunId of parent.children.keys())
|
|
139
|
+
this.childParents.delete(childRunId);
|
|
140
|
+
for (const waiter of [...parent.waiters])
|
|
141
|
+
waiter();
|
|
142
|
+
this.parents.delete(runId);
|
|
143
|
+
}
|
|
144
|
+
acceptedChildCount(parentRunId) {
|
|
145
|
+
return this.parents.get(parentRunId)?.acceptedChildren ?? 0;
|
|
146
|
+
}
|
|
147
|
+
isDrained(parent) {
|
|
148
|
+
return parent.children.size === 0 && parent.pendingAdmissions.size === 0;
|
|
149
|
+
}
|
|
150
|
+
notifyIfDrained(parent) {
|
|
151
|
+
if (!this.isDrained(parent))
|
|
152
|
+
return;
|
|
153
|
+
for (const waiter of [...parent.waiters])
|
|
154
|
+
waiter();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=delegationBudgetAuthority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationBudgetAuthority.js","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ArtifactStore, type RunPaths } from "@claudexor/artifact-store";
|
|
2
|
+
import { EventLog } from "@claudexor/event-log";
|
|
3
|
+
import { type ModeKind } from "@claudexor/schema";
|
|
4
|
+
import type { AttemptTelemetry } from "./attemptTelemetry.js";
|
|
5
|
+
import type { CandidateRun } from "./candidateEvidence.js";
|
|
6
|
+
export type DelegationFailureKind = "startup" | "runtime";
|
|
7
|
+
/** One owner for the post-injection failure boundary shared by race,
|
|
8
|
+
* convergence, and attempt finalization. Runtime takes precedence if corrupt
|
|
9
|
+
* evidence ever reports both facts. */
|
|
10
|
+
export declare function delegationFailureKind(t: AttemptTelemetry): DelegationFailureKind | null;
|
|
11
|
+
export declare function delegationFailureError(t: AttemptTelemetry): string | null;
|
|
12
|
+
export declare function candidateFailureKind(run: CandidateRun): DelegationFailureKind | "artifact_security" | null;
|
|
13
|
+
/** Race-level precedence: an unrecovered injected-belt failure dominates all
|
|
14
|
+
* siblings; a safely discarded isolated secret candidate is merely ineligible,
|
|
15
|
+
* while an in-place refusal remains terminal because cleanup may be required. */
|
|
16
|
+
export declare function dominantRaceCandidateFailure(runs: CandidateRun[]): CandidateRun | undefined;
|
|
17
|
+
/** Build the terminal cause/provenance without duplicating the race and
|
|
18
|
+
* convergence messages or raw-attempt links. */
|
|
19
|
+
export declare function delegationFailureTerminal(run: CandidateRun, lane: "race" | "convergence"): {
|
|
20
|
+
phase: string;
|
|
21
|
+
error: Error;
|
|
22
|
+
metadata: {
|
|
23
|
+
category: "harness_error";
|
|
24
|
+
harnessId: string;
|
|
25
|
+
attemptId: string;
|
|
26
|
+
rawDetailRef: string;
|
|
27
|
+
nextActions: string[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare function candidateFailureTerminal(run: CandidateRun, lane: "race" | "convergence"): {
|
|
31
|
+
phase: string;
|
|
32
|
+
error: Error;
|
|
33
|
+
metadata: {
|
|
34
|
+
category: "harness_error";
|
|
35
|
+
harnessId: string;
|
|
36
|
+
attemptId: string;
|
|
37
|
+
rawDetailRef: string;
|
|
38
|
+
nextActions: string[];
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/** An explicitly in-place harness may have changed the live tree before a
|
|
42
|
+
* required Delegate failure becomes terminal. Persist those unavoidable bytes
|
|
43
|
+
* as blocked and revertable; envelope runs stay diagnostic-only. */
|
|
44
|
+
export declare function persistFailedInPlaceWorkProduct(input: {
|
|
45
|
+
live: boolean;
|
|
46
|
+
run: CandidateRun;
|
|
47
|
+
store: ArtifactStore;
|
|
48
|
+
log: EventLog;
|
|
49
|
+
paths: RunPaths;
|
|
50
|
+
execRoot: string;
|
|
51
|
+
preTurnSha: string | null;
|
|
52
|
+
postTurnSha?: string | null;
|
|
53
|
+
taskId: string;
|
|
54
|
+
mode: ModeKind;
|
|
55
|
+
kind: "patch" | "new_repo";
|
|
56
|
+
attempts?: number;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
//# sourceMappingURL=delegationFailure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationFailure.d.ts","sourceRoot":"","sources":["../src/delegationFailure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;uCAEuC;AACvC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI,CAIvF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,GAChB,qBAAqB,GAAG,mBAAmB,GAAG,IAAI,CAIpD;AAED;;iFAEiF;AACjF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAK3F;AAED;gDACgD;AAChD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;;;;QAenF,QAAQ,EAAE,eAAe;QACzB,SAAS;QACT,SAAS;QACT,YAAY;QACZ,WAAW;;EAQhB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;;;;QAdlF,QAAQ,EAAE,eAAe;QACzB,SAAS;QACT,SAAS;QACT,YAAY;QACZ,WAAW;;EA0ChB;AAED;;oEAEoE;AACpE,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { makeOutcomeFacts } from "@claudexor/schema";
|
|
3
|
+
import { containsSecretLikeToken, newId, sha256 } from "@claudexor/util";
|
|
4
|
+
import { createRevertAnchorOrNull, snapshotTree } from "@claudexor/workspace";
|
|
5
|
+
import { delegationBeltToolFailure, delegationBeltUnavailable } from "./delegationToolEvidence.js";
|
|
6
|
+
import { secretDiffNextActions } from "./secretDiff.js";
|
|
7
|
+
/** One owner for the post-injection failure boundary shared by race,
|
|
8
|
+
* convergence, and attempt finalization. Runtime takes precedence if corrupt
|
|
9
|
+
* evidence ever reports both facts. */
|
|
10
|
+
export function delegationFailureKind(t) {
|
|
11
|
+
if (delegationBeltToolFailure(t))
|
|
12
|
+
return "runtime";
|
|
13
|
+
if (delegationBeltUnavailable(t))
|
|
14
|
+
return "startup";
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
export function delegationFailureError(t) {
|
|
18
|
+
const kind = delegationFailureKind(t);
|
|
19
|
+
return kind === "runtime"
|
|
20
|
+
? "delegation belt tool failed after injection"
|
|
21
|
+
: kind === "startup"
|
|
22
|
+
? "delegation belt failed to start after injection"
|
|
23
|
+
: null;
|
|
24
|
+
}
|
|
25
|
+
export function candidateFailureKind(run) {
|
|
26
|
+
return (delegationFailureKind(run.telemetry) ?? (run.secretDiffRefusal ? "artifact_security" : null));
|
|
27
|
+
}
|
|
28
|
+
/** Race-level precedence: an unrecovered injected-belt failure dominates all
|
|
29
|
+
* siblings; a safely discarded isolated secret candidate is merely ineligible,
|
|
30
|
+
* while an in-place refusal remains terminal because cleanup may be required. */
|
|
31
|
+
export function dominantRaceCandidateFailure(runs) {
|
|
32
|
+
return (runs.find((run) => delegationFailureKind(run.telemetry)) ??
|
|
33
|
+
runs.find((run) => run.secretDiffRefusal && run.secretDiffRefusal.disposition !== "discarded"));
|
|
34
|
+
}
|
|
35
|
+
/** Build the terminal cause/provenance without duplicating the race and
|
|
36
|
+
* convergence messages or raw-attempt links. */
|
|
37
|
+
export function delegationFailureTerminal(run, lane) {
|
|
38
|
+
const kind = delegationFailureKind(run.telemetry);
|
|
39
|
+
if (!kind)
|
|
40
|
+
throw new Error("delegation failure terminal requested for a healthy attempt");
|
|
41
|
+
const runtime = kind === "runtime";
|
|
42
|
+
const message = runtime
|
|
43
|
+
? lane === "race"
|
|
44
|
+
? `Delegate belt tool failed in ${run.harnessId}; no deliverable or native fallback may replace the failed injected operation`
|
|
45
|
+
: `Delegate belt tool failed in ${run.harnessId}; convergence cannot review, repair, or continue after an unrecovered injected operation fails`
|
|
46
|
+
: lane === "race"
|
|
47
|
+
? `Delegate startup failed in ${run.harnessId}; no degraded sibling may replace an injected failed belt`
|
|
48
|
+
: `Delegate startup failed in ${run.harnessId}; convergence cannot repair or continue after an injected belt fails`;
|
|
49
|
+
return {
|
|
50
|
+
phase: runtime ? "delegation_runtime" : "delegation_startup",
|
|
51
|
+
error: new Error(message),
|
|
52
|
+
metadata: {
|
|
53
|
+
category: "harness_error",
|
|
54
|
+
harnessId: run.harnessId,
|
|
55
|
+
attemptId: run.attemptId,
|
|
56
|
+
rawDetailRef: `attempts/${run.attemptId}/attempt.yaml`,
|
|
57
|
+
nextActions: [
|
|
58
|
+
`Inspect attempts/${run.attemptId}/attempt.yaml`,
|
|
59
|
+
runtime
|
|
60
|
+
? "Repair the failed Delegate belt operation, then retry the run"
|
|
61
|
+
: "Repair the required Delegate belt startup, then retry the run",
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function candidateFailureTerminal(run, lane) {
|
|
67
|
+
const delegation = delegationFailureKind(run.telemetry);
|
|
68
|
+
if (delegation) {
|
|
69
|
+
const terminal = delegationFailureTerminal(run, lane);
|
|
70
|
+
return run.secretDiffRefusal
|
|
71
|
+
? {
|
|
72
|
+
...terminal,
|
|
73
|
+
metadata: {
|
|
74
|
+
...terminal.metadata,
|
|
75
|
+
nextActions: [
|
|
76
|
+
...secretDiffNextActions(run.secretDiffRefusal),
|
|
77
|
+
...terminal.metadata.nextActions,
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
: terminal;
|
|
82
|
+
}
|
|
83
|
+
if (!run.secretDiffRefusal)
|
|
84
|
+
throw new Error("candidate failure terminal requested without cause");
|
|
85
|
+
return {
|
|
86
|
+
phase: "artifact_security",
|
|
87
|
+
error: new Error(run.errors[0] ?? "candidate patch diff was refused by the secret fence"),
|
|
88
|
+
metadata: {
|
|
89
|
+
category: "harness_error",
|
|
90
|
+
harnessId: run.harnessId,
|
|
91
|
+
attemptId: run.attemptId,
|
|
92
|
+
rawDetailRef: `attempts/${run.attemptId}/attempt.yaml`,
|
|
93
|
+
nextActions: run.secretDiffRefusal.disposition === "manual_cleanup"
|
|
94
|
+
? ["Remove the secret-bearing in-place bytes manually", "Retry the run"]
|
|
95
|
+
: ["Retry the run without writing secret material"],
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/** An explicitly in-place harness may have changed the live tree before a
|
|
100
|
+
* required Delegate failure becomes terminal. Persist those unavoidable bytes
|
|
101
|
+
* as blocked and revertable; envelope runs stay diagnostic-only. */
|
|
102
|
+
export async function persistFailedInPlaceWorkProduct(input) {
|
|
103
|
+
if (!input.live || (!input.run.diff.trim() && !input.run.secretDiffRefusal))
|
|
104
|
+
return;
|
|
105
|
+
const secretRefusal = input.run.secretDiffRefusal;
|
|
106
|
+
if (secretRefusal) {
|
|
107
|
+
const facts = makeOutcomeFacts("failed", {
|
|
108
|
+
reason: "harness_failed",
|
|
109
|
+
noChanges: secretRefusal.disposition !== "manual_cleanup",
|
|
110
|
+
});
|
|
111
|
+
const manualCleanup = secretRefusal.disposition === "manual_cleanup";
|
|
112
|
+
input.store.writeYaml(join(input.paths.finalDir, "work_product.yaml"), {
|
|
113
|
+
id: newId("wp"),
|
|
114
|
+
kind: input.kind,
|
|
115
|
+
source_task_id: input.taskId,
|
|
116
|
+
producer_attempt_id: input.run.attemptId,
|
|
117
|
+
meta: {
|
|
118
|
+
harness_id: input.run.harnessId,
|
|
119
|
+
result_kind: "none",
|
|
120
|
+
mode: input.mode,
|
|
121
|
+
...(input.attempts !== undefined ? { attempts: input.attempts } : {}),
|
|
122
|
+
lifecycle: facts.lifecycle,
|
|
123
|
+
outcome_facts: facts,
|
|
124
|
+
review_verified: false,
|
|
125
|
+
secret_diff_refused: true,
|
|
126
|
+
secret_recovery: secretRefusal.disposition,
|
|
127
|
+
recovery_detail: secretRefusal.detail,
|
|
128
|
+
adopted: manualCleanup,
|
|
129
|
+
apply_state: manualCleanup ? "applied_review_blocked" : "reverted",
|
|
130
|
+
pre_turn_sha: input.preTurnSha,
|
|
131
|
+
post_turn_sha: null,
|
|
132
|
+
revert_anchor_id: null,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
input.log.emit("work_product.emitted", {
|
|
136
|
+
winner: input.run.attemptId,
|
|
137
|
+
apply_state: manualCleanup ? "applied_review_blocked" : "reverted",
|
|
138
|
+
secret_diff_refused: true,
|
|
139
|
+
manual_cleanup_required: manualCleanup,
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (containsSecretLikeToken(input.run.diff)) {
|
|
144
|
+
throw new Error("failed in-place patch diff contains secret-like token; refusing artifact");
|
|
145
|
+
}
|
|
146
|
+
let postTurnSha = input.postTurnSha;
|
|
147
|
+
if (postTurnSha === undefined) {
|
|
148
|
+
try {
|
|
149
|
+
postTurnSha = await snapshotTree(input.execRoot);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
postTurnSha = null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const revertAnchorId = await createRevertAnchorOrNull(input.execRoot, input.preTurnSha, postTurnSha);
|
|
156
|
+
const facts = makeOutcomeFacts("failed", { reason: "harness_failed", noChanges: false });
|
|
157
|
+
input.store.writeText(join(input.paths.finalDir, "patch.diff"), input.run.diff);
|
|
158
|
+
input.store.writeYaml(join(input.paths.finalDir, "work_product.yaml"), {
|
|
159
|
+
id: newId("wp"),
|
|
160
|
+
kind: input.kind,
|
|
161
|
+
source_task_id: input.taskId,
|
|
162
|
+
producer_attempt_id: input.run.attemptId,
|
|
163
|
+
meta: {
|
|
164
|
+
harness_id: input.run.harnessId,
|
|
165
|
+
result_kind: "patch",
|
|
166
|
+
mode: input.mode,
|
|
167
|
+
...(input.attempts !== undefined ? { attempts: input.attempts } : {}),
|
|
168
|
+
lifecycle: facts.lifecycle,
|
|
169
|
+
outcome_facts: facts,
|
|
170
|
+
review_verified: false,
|
|
171
|
+
patch_sha256: sha256(input.run.diff),
|
|
172
|
+
adopted: true,
|
|
173
|
+
apply_state: "applied_review_blocked",
|
|
174
|
+
pre_turn_sha: input.preTurnSha,
|
|
175
|
+
post_turn_sha: postTurnSha,
|
|
176
|
+
revert_anchor_id: revertAnchorId,
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
input.log.emit("work_product.emitted", {
|
|
180
|
+
winner: input.run.attemptId,
|
|
181
|
+
apply_state: "applied_review_blocked",
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=delegationFailure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationFailure.js","sourceRoot":"","sources":["../src/delegationFailure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { HarnessEvent } from "@claudexor/schema";
|
|
2
|
+
import type { AttemptTelemetry } from "./attemptTelemetry.js";
|
|
3
|
+
/** The required belt server failed after injection. A ready/pending-but-unused
|
|
4
|
+
* belt is not unavailable; the harness remains free to solve the turn itself. */
|
|
5
|
+
export declare function delegationBeltUnavailable(t: AttemptTelemetry): boolean;
|
|
6
|
+
/** An exact injected belt operation failed and has not recovered through the
|
|
7
|
+
* same invocation success (matching non-null use id, with tool+kind+target as
|
|
8
|
+
* the compatibility fallback). INV-030 makes this a required-capability hard
|
|
9
|
+
* failure while reusing INV-043's recovery key; it does not rewrite the
|
|
10
|
+
* startup-only `delegation_belt.failed` receipt or the run-level `used` fact. */
|
|
11
|
+
export declare function delegationBeltToolFailure(t: AttemptTelemetry): boolean;
|
|
12
|
+
/** Record a non-error terminal shape that is nevertheless failure for the
|
|
13
|
+
* required belt. The caller has already proven this is the exact belt tool. */
|
|
14
|
+
export declare function recordDelegationBeltResultFailure(t: AttemptTelemetry, tool: NonNullable<HarnessEvent["tool"]>, summary: string): void;
|
|
15
|
+
/** Exact adapter-neutral belt evidence. Claude namespaces the normalized tool
|
|
16
|
+
* name as `mcp__server__tool`; Codex keeps the native tool name and records the
|
|
17
|
+
* server boundary in `target` as `server:tool`. Delimiters are mandatory so a
|
|
18
|
+
* similarly-prefixed foreign server cannot satisfy Delegate used=true. */
|
|
19
|
+
export declare function isDelegationBeltTool(tool: HarnessEvent["tool"] | undefined, serverName: string): boolean;
|
|
20
|
+
//# sourceMappingURL=delegationToolEvidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationToolEvidence.d.ts","sourceRoot":"","sources":["../src/delegationToolEvidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;iFACiF;AACjF,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;;;iFAIiF;AACjF,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAgBtE;AAED;+EAC+E;AAC/E,wBAAgB,iCAAiC,CAC/C,CAAC,EAAE,gBAAgB,EACnB,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,IAAI,CASN;AAED;;;0EAG0E;AAC1E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAMT"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** The required belt server failed after injection. A ready/pending-but-unused
|
|
2
|
+
* belt is not unavailable; the harness remains free to solve the turn itself. */
|
|
3
|
+
export function delegationBeltUnavailable(t) {
|
|
4
|
+
return t.delegationBelt.requested && t.delegationBelt.failed;
|
|
5
|
+
}
|
|
6
|
+
/** An exact injected belt operation failed and has not recovered through the
|
|
7
|
+
* same invocation success (matching non-null use id, with tool+kind+target as
|
|
8
|
+
* the compatibility fallback). INV-030 makes this a required-capability hard
|
|
9
|
+
* failure while reusing INV-043's recovery key; it does not rewrite the
|
|
10
|
+
* startup-only `delegation_belt.failed` receipt or the run-level `used` fact. */
|
|
11
|
+
export function delegationBeltToolFailure(t) {
|
|
12
|
+
if (!t.delegationBelt.requested)
|
|
13
|
+
return false;
|
|
14
|
+
const serverName = t.delegationBelt.serverName;
|
|
15
|
+
if (!serverName)
|
|
16
|
+
return false;
|
|
17
|
+
return t.toolErrors.some((error) => !error.recovered &&
|
|
18
|
+
isDelegationBeltTool({
|
|
19
|
+
name: error.tool,
|
|
20
|
+
kind: error.kind,
|
|
21
|
+
...(error.target !== null ? { target: error.target } : {}),
|
|
22
|
+
}, serverName));
|
|
23
|
+
}
|
|
24
|
+
/** Record a non-error terminal shape that is nevertheless failure for the
|
|
25
|
+
* required belt. The caller has already proven this is the exact belt tool. */
|
|
26
|
+
export function recordDelegationBeltResultFailure(t, tool, summary) {
|
|
27
|
+
t.toolErrors.push({
|
|
28
|
+
tool: tool.name,
|
|
29
|
+
kind: tool.kind,
|
|
30
|
+
target: tool.target ?? null,
|
|
31
|
+
summary,
|
|
32
|
+
toolUseId: tool.use_id ?? null,
|
|
33
|
+
recovered: false,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** Exact adapter-neutral belt evidence. Claude namespaces the normalized tool
|
|
37
|
+
* name as `mcp__server__tool`; Codex keeps the native tool name and records the
|
|
38
|
+
* server boundary in `target` as `server:tool`. Delimiters are mandatory so a
|
|
39
|
+
* similarly-prefixed foreign server cannot satisfy Delegate used=true. */
|
|
40
|
+
export function isDelegationBeltTool(tool, serverName) {
|
|
41
|
+
if (!tool || tool.kind !== "mcp")
|
|
42
|
+
return false;
|
|
43
|
+
return (tool.name.startsWith(`mcp__${serverName}__`) ||
|
|
44
|
+
(typeof tool.target === "string" && tool.target.startsWith(`${serverName}:`)));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=delegationToolEvidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegationToolEvidence.js","sourceRoot":"","sources":["../src/delegationToolEvidence.ts"],"names":[],"mappings":"AAGA;iFACiF;AACjF,MAAM,UAAU,yBAAyB,CAAC,CAAmB;IAC3D,OAAO,CAAC,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;AAC/D,CAAC;AAED;;;;iFAIiF;AACjF,MAAM,UAAU,yBAAyB,CAAC,CAAmB;IAC3D,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,UAAU,GAAG,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CACtB,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,KAAK,CAAC,SAAS;QAChB,oBAAoB,CAClB;YACE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,EACD,UAAU,CACX,CACJ,CAAC;AACJ,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,iCAAiC,CAC/C,CAAmB,EACnB,IAAuC,EACvC,OAAe;IAEf,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3B,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC9B,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;0EAG0E;AAC1E,MAAM,UAAU,oBAAoB,CAClC,IAAsC,EACtC,UAAkB;IAElB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,UAAU,IAAI,CAAC;QAC5C,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAC9E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ArtifactStore } from "@claudexor/artifact-store";
|
|
2
|
+
import type { EventLog } from "@claudexor/event-log";
|
|
3
|
+
import { type ModeKind, type RunReason } from "@claudexor/schema";
|
|
4
|
+
import { type EnsureGitRepositoryResult } from "@claudexor/workspace";
|
|
5
|
+
export interface GitPreconditionFailure {
|
|
6
|
+
message: string;
|
|
7
|
+
reason: RunReason;
|
|
8
|
+
}
|
|
9
|
+
/** Establish the write-mode Git boundary and own its typed terminal failure. */
|
|
10
|
+
export declare function ensureWriteModeGitBoundary(repoRoot: string, log: EventLog, store: ArtifactStore, paths: ReturnType<ArtifactStore["runPaths"]>, runId: string, mode: ModeKind, ensureRepository?: (repoRoot: string) => Promise<EnsureGitRepositoryResult>): Promise<GitPreconditionFailure | null>;
|
|
11
|
+
//# sourceMappingURL=git-precondition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-precondition.d.ts","sourceRoot":"","sources":["../src/git-precondition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;CACnB;AAID,gFAAgF;AAChF,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,EACd,gBAAgB,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,CAAuB,GAC/F,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA4DxC"}
|