@claudexor/orchestrator 3.10.4 → 3.11.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/attemptTelemetry.d.ts +2 -1
- package/dist/attemptTelemetry.d.ts.map +1 -1
- package/dist/attemptTelemetry.js +11 -0
- package/dist/attemptTelemetry.js.map +1 -1
- package/dist/attemptUsage.d.ts.map +1 -1
- package/dist/attemptUsage.js +2 -1
- package/dist/attemptUsage.js.map +1 -1
- package/dist/attemptUsageCost.d.ts +1 -1
- package/dist/attemptUsageCost.d.ts.map +1 -1
- package/dist/attemptUsageCost.js +19 -110
- package/dist/attemptUsageCost.js.map +1 -1
- package/dist/candidateEvidence.d.ts +8 -0
- package/dist/candidateEvidence.d.ts.map +1 -1
- package/dist/candidateEvidence.js +22 -4
- package/dist/candidateEvidence.js.map +1 -1
- package/dist/candidateOutputs.d.ts +6 -0
- package/dist/candidateOutputs.d.ts.map +1 -1
- package/dist/candidateOutputs.js +6 -1
- package/dist/candidateOutputs.js.map +1 -1
- package/dist/candidateReview.d.ts +2 -0
- package/dist/candidateReview.d.ts.map +1 -1
- package/dist/candidateReview.js +27 -3
- package/dist/candidateReview.js.map +1 -1
- package/dist/candidateTerminals.d.ts +34 -0
- package/dist/candidateTerminals.d.ts.map +1 -0
- package/dist/candidateTerminals.js +183 -0
- package/dist/candidateTerminals.js.map +1 -0
- package/dist/continuity-facts.d.ts +4 -1
- package/dist/continuity-facts.d.ts.map +1 -1
- package/dist/continuity-facts.js +3 -0
- package/dist/continuity-facts.js.map +1 -1
- package/dist/continuity-summary.d.ts +7 -2
- package/dist/continuity-summary.d.ts.map +1 -1
- package/dist/continuity-summary.js +19 -2
- package/dist/continuity-summary.js.map +1 -1
- package/dist/deepScanOutput.d.ts +19 -0
- package/dist/deepScanOutput.d.ts.map +1 -0
- package/dist/deepScanOutput.js +38 -0
- package/dist/deepScanOutput.js.map +1 -0
- package/dist/deepScanReducer.d.ts +2 -17
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +19 -40
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegationBelt.d.ts +9 -0
- package/dist/delegationBelt.d.ts.map +1 -0
- package/dist/delegationBelt.js +54 -0
- package/dist/delegationBelt.js.map +1 -0
- package/dist/delegationBudgetAuthority.d.ts +1 -1
- package/dist/delegationBudgetAuthority.d.ts.map +1 -1
- package/dist/delegationBudgetAuthority.js.map +1 -1
- package/dist/directoryCandidate.d.ts +75 -0
- package/dist/directoryCandidate.d.ts.map +1 -0
- package/dist/directoryCandidate.js +171 -0
- package/dist/directoryCandidate.js.map +1 -0
- package/dist/git-precondition.d.ts +2 -0
- package/dist/git-precondition.d.ts.map +1 -1
- package/dist/git-precondition.js +20 -1
- package/dist/git-precondition.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modelGovernance.d.ts +2 -1
- package/dist/modelGovernance.d.ts.map +1 -1
- package/dist/modelGovernance.js +33 -2
- package/dist/modelGovernance.js.map +1 -1
- package/dist/orchestrator.d.ts +8 -33
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +468 -513
- package/dist/orchestrator.js.map +1 -1
- package/dist/plannerAttempt.d.ts +1 -1
- package/dist/plannerAttempt.d.ts.map +1 -1
- package/dist/plannerAttempt.js +17 -2
- package/dist/plannerAttempt.js.map +1 -1
- package/dist/policyFindings.d.ts +2 -0
- package/dist/policyFindings.d.ts.map +1 -1
- package/dist/policyFindings.js +11 -1
- package/dist/policyFindings.js.map +1 -1
- package/dist/processing-dispatch.d.ts +25 -0
- package/dist/processing-dispatch.d.ts.map +1 -0
- package/dist/processing-dispatch.js +122 -0
- package/dist/processing-dispatch.js.map +1 -0
- package/dist/processing-routing.d.ts +9 -0
- package/dist/processing-routing.d.ts.map +1 -0
- package/dist/processing-routing.js +86 -0
- package/dist/processing-routing.js.map +1 -0
- package/dist/processing-telemetry.d.ts +11 -0
- package/dist/processing-telemetry.d.ts.map +1 -0
- package/dist/processing-telemetry.js +31 -0
- package/dist/processing-telemetry.js.map +1 -0
- package/dist/reviewerPanel.d.ts.map +1 -1
- package/dist/reviewerPanel.js +12 -9
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/root-ledger.d.ts.map +1 -1
- package/dist/root-ledger.js +2 -1
- package/dist/root-ledger.js.map +1 -1
- package/dist/runFactsBuilder.d.ts.map +1 -1
- package/dist/runFactsBuilder.js +23 -10
- package/dist/runFactsBuilder.js.map +1 -1
- package/dist/runFactsDeliverable.d.ts.map +1 -1
- package/dist/runFactsDeliverable.js +14 -1
- package/dist/runFactsDeliverable.js.map +1 -1
- package/dist/runFactsPresentation.d.ts.map +1 -1
- package/dist/runFactsPresentation.js +1 -0
- package/dist/runFactsPresentation.js.map +1 -1
- package/dist/runSupport.d.ts +1 -1
- package/dist/runTerminalResults.d.ts.map +1 -1
- package/dist/runTerminalResults.js +14 -6
- package/dist/runTerminalResults.js.map +1 -1
- package/dist/task-contract-builder.d.ts +2 -1
- package/dist/task-contract-builder.d.ts.map +1 -1
- package/dist/task-contract-builder.js +1 -0
- package/dist/task-contract-builder.js.map +1 -1
- package/package.json +17 -17
package/dist/plannerAttempt.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export interface PreparedPlannerAttempt {
|
|
|
59
59
|
* fields; this module owns the planner lease, stream, telemetry, and outcome. */
|
|
60
60
|
export interface PlannerAttemptDeps {
|
|
61
61
|
prepare(args: PlannerAttemptArgs): Promise<PreparedPlannerAttempt>;
|
|
62
|
-
billingKnowledge(input: RunInput, harnessId: string): "metered" | "unknown";
|
|
62
|
+
billingKnowledge(input: RunInput, harnessId: string): "metered" | "subscription_entitlement" | "unknown";
|
|
63
63
|
inactivityTimeoutMs(repoRoot: string): number;
|
|
64
64
|
quotaEventSink?: (harnessId: string, event: HarnessEvent) => void;
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plannerAttempt.d.ts","sourceRoot":"","sources":["../src/plannerAttempt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plannerAttempt.d.ts","sourceRoot":"","sources":["../src/plannerAttempt.ts"],"names":[],"mappings":"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"}
|
package/dist/plannerAttempt.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { bindProcessingAdmission, updateProcessingStreamHold, ProcessingBudgetAdmissionError, } from "./processing-dispatch.js";
|
|
1
2
|
import { join } from "node:path";
|
|
3
|
+
import { processingCostEvidence } from "./processing-routing.js";
|
|
2
4
|
import { attemptCostEvidence } from "@claudexor/budget";
|
|
3
5
|
import { AnswerAssembly, countsAsAgentProgress, withInactivityWatchdog, } from "@claudexor/core";
|
|
4
6
|
import { appendLine, redactSecrets, safeInvoke } from "@claudexor/util";
|
|
@@ -16,7 +18,7 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
16
18
|
attemptId,
|
|
17
19
|
intent: args.intent,
|
|
18
20
|
harnessId: adapter.id,
|
|
19
|
-
cost: attemptCostEvidence(adapter.id, attemptId, args.reservationEstimateUsd, deps.billingKnowledge(input, adapter.id)),
|
|
21
|
+
cost: attemptCostEvidence(adapter.id, attemptId, args.reservationEstimateUsd, deps.billingKnowledge(input, adapter.id), processingCostEvidence(routed.processing, "unknown", [`harness:${adapter.id}`])),
|
|
20
22
|
});
|
|
21
23
|
if (!lease.granted) {
|
|
22
24
|
log.emit("budget.lease.created", {
|
|
@@ -78,6 +80,7 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
78
80
|
};
|
|
79
81
|
}
|
|
80
82
|
const { knobs, spec, plannerAbort, planInteraction, planWorkMode, attemptEventsPath, answer, telemetry, } = preparation.value;
|
|
83
|
+
bindProcessingAdmission(spec, ledger, lease.lease.lease_id, adapter.id, attemptId);
|
|
81
84
|
const onAbort = () => {
|
|
82
85
|
void adapter.cancel?.(spec.session_id)?.catch(() => { });
|
|
83
86
|
};
|
|
@@ -90,6 +93,7 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
90
93
|
let cost = 0;
|
|
91
94
|
let costEstimated = false;
|
|
92
95
|
let harnessError = null;
|
|
96
|
+
let processingDenial = null;
|
|
93
97
|
const budgetSignalState = { quotaPressureDisclosed: false };
|
|
94
98
|
try {
|
|
95
99
|
log.emit("harness.started", {
|
|
@@ -141,6 +145,14 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
141
145
|
estimated: safeEv.usage.estimated === true,
|
|
142
146
|
});
|
|
143
147
|
}
|
|
148
|
+
const streamDenial = updateProcessingStreamHold(spec, telemetry.usageCost, ledger, lease.lease.lease_id, adapter.id, attemptId);
|
|
149
|
+
if (streamDenial) {
|
|
150
|
+
processingDenial = streamDenial;
|
|
151
|
+
harnessError = streamDenial.reason;
|
|
152
|
+
plannerAbort.abort();
|
|
153
|
+
void adapter.cancel?.(spec.session_id)?.catch(() => { });
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
144
156
|
answer.observe(safeEv);
|
|
145
157
|
if (safeEv.type === "error")
|
|
146
158
|
harnessError = safeEv.error ? redactSecrets(safeEv.error) : "harness emitted an error";
|
|
@@ -149,6 +161,8 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
149
161
|
}
|
|
150
162
|
catch (error) {
|
|
151
163
|
harnessError = safeErrorMessage(error);
|
|
164
|
+
if (error instanceof ProcessingBudgetAdmissionError)
|
|
165
|
+
processingDenial = error.denial;
|
|
152
166
|
}
|
|
153
167
|
finally {
|
|
154
168
|
input.signal?.removeEventListener("abort", onAbort);
|
|
@@ -216,7 +230,8 @@ export async function runPlannerAttempt(deps, args) {
|
|
|
216
230
|
reportProblem: planUnwrapped.reportProblem,
|
|
217
231
|
text: hasPlanText ? planText : null,
|
|
218
232
|
telemetry,
|
|
219
|
-
budgetDenied:
|
|
233
|
+
budgetDenied: processingDenial !== null,
|
|
234
|
+
...(processingDenial ? { budgetDenial: processingDenial } : {}),
|
|
220
235
|
};
|
|
221
236
|
}
|
|
222
237
|
const text = planText || "(no output)";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plannerAttempt.js","sourceRoot":"","sources":["../src/plannerAttempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"plannerAttempt.js","sourceRoot":"","sources":["../src/plannerAttempt.ts"],"names":[],"mappings":"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"}
|
package/dist/policyFindings.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ProtectedPathApproval, ReviewFinding } from "@claudexor/schema";
|
|
2
|
+
import { type DirectoryCandidate } from "./directoryCandidate.js";
|
|
2
3
|
/**
|
|
3
4
|
* Deterministic policy findings from the typed diff (no LLM, no regex over
|
|
4
5
|
* prose): protected-path changes and critical-risk diffs escalate NEEDS_HUMAN;
|
|
@@ -7,6 +8,7 @@ import type { ProtectedPathApproval, ReviewFinding } from "@claudexor/schema";
|
|
|
7
8
|
*/
|
|
8
9
|
export declare function policyFindings(run: {
|
|
9
10
|
diff: string;
|
|
11
|
+
files?: DirectoryCandidate;
|
|
10
12
|
}, reviewVerified: boolean, protectedPaths?: string[], autoProtectedPaths?: string[], protectedPathApprovals?: ProtectedPathApproval[], denyPaths?: string[], reviewRequested?: boolean): {
|
|
11
13
|
findings: ReviewFinding[];
|
|
12
14
|
risk: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyFindings.d.ts","sourceRoot":"","sources":["../src/policyFindings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"policyFindings.d.ts","sourceRoot":"","sources":["../src/policyFindings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAAE,EACjD,cAAc,EAAE,OAAO,EACvB,cAAc,GAAE,MAAM,EAAO,EAC7B,kBAAkB,GAAE,MAAM,EAAO,EACjC,sBAAsB,GAAE,qBAAqB,EAAO,EACpD,SAAS,GAAE,MAAM,EAAO,EACxB,eAAe,UAAO,GACrB;IACD,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE,CAkLA"}
|
package/dist/policyFindings.js
CHANGED
|
@@ -3,6 +3,7 @@ import { classifyRisk, DEFAULT_REQUIRE_HUMAN_PATHS, requireHuman, reviewDepthFor
|
|
|
3
3
|
import { summarizeDiffPaths as diffStats } from "@claudexor/core";
|
|
4
4
|
import { ReviewFinding as ReviewFindingSchema } from "@claudexor/schema";
|
|
5
5
|
import { newId } from "@claudexor/util";
|
|
6
|
+
import { directoryChangedEntries } from "./directoryCandidate.js";
|
|
6
7
|
/**
|
|
7
8
|
* Deterministic policy findings from the typed diff (no LLM, no regex over
|
|
8
9
|
* prose): protected-path changes and critical-risk diffs escalate NEEDS_HUMAN;
|
|
@@ -10,7 +11,16 @@ import { newId } from "@claudexor/util";
|
|
|
10
11
|
* finding cites the matched files as evidence (BIBLE: evidence beats summaries).
|
|
11
12
|
*/
|
|
12
13
|
export function policyFindings(run, reviewVerified, protectedPaths = [], autoProtectedPaths = [], protectedPathApprovals = [], denyPaths = [], reviewRequested = true) {
|
|
13
|
-
const
|
|
14
|
+
const changes = run.files ? directoryChangedEntries(run.files.manifest) : null;
|
|
15
|
+
const stats = changes
|
|
16
|
+
? {
|
|
17
|
+
paths: changes.map((entry) => entry.path),
|
|
18
|
+
touchedPaths: changes.map((entry) => entry.path),
|
|
19
|
+
existingPaths: changes.filter((entry) => entry.before !== null).map((entry) => entry.path),
|
|
20
|
+
additions: 0,
|
|
21
|
+
deletions: 0,
|
|
22
|
+
}
|
|
23
|
+
: diffStats(run.diff);
|
|
14
24
|
// Path policy gates match stats.touchedPaths — the one owner of "what the
|
|
15
25
|
// diff touches" (core diff.ts, G1 class); a gate matching a narrower
|
|
16
26
|
// projection is an EXPLICIT decision, never an accident. deny_paths: ANY
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyFindings.js","sourceRoot":"","sources":["../src/policyFindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,2BAA2B,EAC3B,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"policyFindings.js","sourceRoot":"","sources":["../src/policyFindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BudgetLedger } from "@claudexor/budget";
|
|
2
|
+
import type { ProcessingAdmission } from "@claudexor/core";
|
|
3
|
+
import type { HarnessRunSpec } from "@claudexor/schema";
|
|
4
|
+
import type { ReviewerSpec } from "@claudexor/review";
|
|
5
|
+
import type { AttemptUsageCost } from "./attemptUsageCost.js";
|
|
6
|
+
import type { BudgetDenial } from "./budgetFailure.js";
|
|
7
|
+
/** A budget refusal before native dispatch, never an adapter or auth failure. */
|
|
8
|
+
export declare class ProcessingBudgetAdmissionError extends Error {
|
|
9
|
+
readonly denial: BudgetDenial;
|
|
10
|
+
readonly retryable = false;
|
|
11
|
+
readonly category = "budget";
|
|
12
|
+
readonly code: BudgetDenial["code"];
|
|
13
|
+
constructor(denial: BudgetDenial);
|
|
14
|
+
}
|
|
15
|
+
/** Bind once when the logical lease and spec meet. Copies/retries preserve the
|
|
16
|
+
* callback, which receives each actual prepared profile/model before spawn. */
|
|
17
|
+
export declare function processingAdmissionForLease(ledger: BudgetLedger, leaseId: string, harnessId: string, attemptId: string | null, onDenied?: (denial: BudgetDenial) => void): ProcessingAdmission;
|
|
18
|
+
export declare function bindProcessingAdmission(spec: HarnessRunSpec, ledger: BudgetLedger, leaseId: string, harnessId: string, attemptId: string | null, onDenied?: (denial: BudgetDenial) => void, admission?: ProcessingAdmission): ProcessingAdmission;
|
|
19
|
+
/** One panel owns one lease. A later slot must not erase another slot's paid
|
|
20
|
+
* prospective class; observed panel hold/debt stays in the same ledger. */
|
|
21
|
+
export declare function reviewerProcessingAdmission(ledger: BudgetLedger, leaseId: string, reviewers: ReviewerSpec[], attemptId: string | null, onDenied?: (denial: BudgetDenial) => void): (index: number, spec: HarnessRunSpec) => void;
|
|
22
|
+
/** Streamed amounts share the same lease as admission. Included subscription
|
|
23
|
+
* valuation never becomes a paid hold; unresolved potentially paid amounts do. */
|
|
24
|
+
export declare function updateProcessingStreamHold(spec: HarnessRunSpec, usage: AttemptUsageCost, ledger: BudgetLedger, leaseId: string, harnessId: string, attemptId: string): BudgetDenial | null;
|
|
25
|
+
//# sourceMappingURL=processing-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-dispatch.d.ts","sourceRoot":"","sources":["../src/processing-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,iFAAiF;AACjF,qBAAa,8BAA+B,SAAQ,KAAK;IAI3C,QAAQ,CAAC,MAAM,EAAE,YAAY;IAHzC,QAAQ,CAAC,SAAS,SAAS;IAC3B,QAAQ,CAAC,QAAQ,YAAY;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,YAAqB,MAAM,EAAE,YAAY,EAIxC;CACF;AAyDD;+EAC+E;AAC/E,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GACxC,mBAAmB,CAKrB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,EACzC,SAAS,CAAC,EAAE,mBAAmB,GAC9B,mBAAmB,CAMrB;AAED;2EAC2E;AAC3E,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GACxC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAgC/C;AAED;kFACkF;AAClF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,IAAI,CAarB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { processingCostEvidence } from "./processing-routing.js";
|
|
2
|
+
/** A budget refusal before native dispatch, never an adapter or auth failure. */
|
|
3
|
+
export class ProcessingBudgetAdmissionError extends Error {
|
|
4
|
+
denial;
|
|
5
|
+
retryable = false;
|
|
6
|
+
category = "budget";
|
|
7
|
+
code;
|
|
8
|
+
constructor(denial) {
|
|
9
|
+
super(denial.reason);
|
|
10
|
+
this.denial = denial;
|
|
11
|
+
this.code = denial.code;
|
|
12
|
+
this.name = "ProcessingBudgetAdmissionError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function preparedCost(spec, harnessId) {
|
|
16
|
+
if (!spec.processing || !spec.processing_cost_basis)
|
|
17
|
+
return undefined;
|
|
18
|
+
// A concrete profile on the prepared spec is authoritative. The extra is
|
|
19
|
+
// only a resolver/fallback for routes that have no profile identity yet.
|
|
20
|
+
const profileBilling = spec.credential_profile?.credential_kind === "api_key"
|
|
21
|
+
? "metered"
|
|
22
|
+
: spec.credential_profile
|
|
23
|
+
? "subscription_entitlement"
|
|
24
|
+
: undefined;
|
|
25
|
+
const resolver = spec.extra["routeBillingKnowledge"];
|
|
26
|
+
const resolved = profileBilling ??
|
|
27
|
+
(typeof resolver === "function"
|
|
28
|
+
? resolver(spec)
|
|
29
|
+
: resolver);
|
|
30
|
+
const ordinary = resolved === "metered" || resolved === "subscription_entitlement" || resolved === "unknown"
|
|
31
|
+
? resolved
|
|
32
|
+
: spec.credential_profile?.credential_kind === "api_key"
|
|
33
|
+
? "metered"
|
|
34
|
+
: spec.credential_profile
|
|
35
|
+
? "subscription_entitlement"
|
|
36
|
+
: spec.auth_preference === "api_key"
|
|
37
|
+
? "metered"
|
|
38
|
+
: spec.auth_preference === "subscription"
|
|
39
|
+
? "subscription_entitlement"
|
|
40
|
+
: "unknown";
|
|
41
|
+
return processingCostEvidence({ model: spec.model_hint, receipt: spec.processing, costBasis: spec.processing_cost_basis }, ordinary, [`harness:${harnessId}`, `profile:${spec.credential_profile?.profile_id ?? "default"}`]);
|
|
42
|
+
}
|
|
43
|
+
function reprice(ledger, leaseId, cost, harnessId, attemptId, onDenied) {
|
|
44
|
+
const result = ledger.repriceReservedLease(leaseId, cost);
|
|
45
|
+
if (result.granted)
|
|
46
|
+
return;
|
|
47
|
+
const denial = {
|
|
48
|
+
code: result.denied,
|
|
49
|
+
reason: result.reason,
|
|
50
|
+
harnessId,
|
|
51
|
+
attemptId,
|
|
52
|
+
};
|
|
53
|
+
onDenied?.(denial);
|
|
54
|
+
throw new ProcessingBudgetAdmissionError(denial);
|
|
55
|
+
}
|
|
56
|
+
/** Bind once when the logical lease and spec meet. Copies/retries preserve the
|
|
57
|
+
* callback, which receives each actual prepared profile/model before spawn. */
|
|
58
|
+
export function processingAdmissionForLease(ledger, leaseId, harnessId, attemptId, onDenied) {
|
|
59
|
+
return (actual) => {
|
|
60
|
+
const cost = preparedCost(actual, harnessId);
|
|
61
|
+
if (cost)
|
|
62
|
+
reprice(ledger, leaseId, cost, harnessId, attemptId, onDenied);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function bindProcessingAdmission(spec, ledger, leaseId, harnessId, attemptId, onDenied, admission) {
|
|
66
|
+
const bound = admission ?? processingAdmissionForLease(ledger, leaseId, harnessId, attemptId, onDenied);
|
|
67
|
+
spec.extra["processingAdmission"] = bound;
|
|
68
|
+
spec.extra["markPhysicalDispatchStarted"] = () => ledger.markPhysicalDispatchStarted(leaseId);
|
|
69
|
+
return bound;
|
|
70
|
+
}
|
|
71
|
+
/** One panel owns one lease. A later slot must not erase another slot's paid
|
|
72
|
+
* prospective class; observed panel hold/debt stays in the same ledger. */
|
|
73
|
+
export function reviewerProcessingAdmission(ledger, leaseId, reviewers, attemptId, onDenied) {
|
|
74
|
+
const costs = reviewers.map((reviewer) => processingCostEvidence(reviewer.processing, "unknown", [`harness:${reviewer.adapter.id}`]));
|
|
75
|
+
let paidOrUnknownSeen = false;
|
|
76
|
+
return (index, spec) => {
|
|
77
|
+
const current = preparedCost(spec, reviewers[index].adapter.id);
|
|
78
|
+
if (!current)
|
|
79
|
+
return;
|
|
80
|
+
costs[index] = current;
|
|
81
|
+
const currentPaid = current.billing !== "proven_zero" && current.billing !== "subscription_entitlement";
|
|
82
|
+
paidOrUnknownSeen ||= currentPaid;
|
|
83
|
+
// A later included route must not erase the paid/unknown class already
|
|
84
|
+
// admitted for this panel lease. The marker remains until settle/cancel.
|
|
85
|
+
if (!currentPaid && paidOrUnknownSeen)
|
|
86
|
+
return;
|
|
87
|
+
if (!costs.some(Boolean))
|
|
88
|
+
return;
|
|
89
|
+
const included = costs.every((cost) => cost?.billing === "subscription_entitlement" || cost?.billing === "proven_zero");
|
|
90
|
+
const cost = {
|
|
91
|
+
billing: included
|
|
92
|
+
? "subscription_entitlement"
|
|
93
|
+
: costs.some((c) => c?.billing === "metered")
|
|
94
|
+
? "metered"
|
|
95
|
+
: "unknown",
|
|
96
|
+
knowledge: included ? "exact" : "unknown",
|
|
97
|
+
estimatedUsd: null,
|
|
98
|
+
source: "review-processing-dispatch",
|
|
99
|
+
provenance: costs.flatMap((c) => c?.provenance ?? ["processing:unknown"]),
|
|
100
|
+
};
|
|
101
|
+
reprice(ledger, leaseId, cost, "review-panel", attemptId, onDenied);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** Streamed amounts share the same lease as admission. Included subscription
|
|
105
|
+
* valuation never becomes a paid hold; unresolved potentially paid amounts do. */
|
|
106
|
+
export function updateProcessingStreamHold(spec, usage, ledger, leaseId, harnessId, attemptId) {
|
|
107
|
+
if (!spec.processing)
|
|
108
|
+
return null;
|
|
109
|
+
const amount = usage.cashUsd + (usage.unknownPaidUsd ?? usage.unknownUsd);
|
|
110
|
+
if (!(amount > 0))
|
|
111
|
+
return null;
|
|
112
|
+
ledger.updateHold(leaseId, amount);
|
|
113
|
+
return ledger.tier() === "hard"
|
|
114
|
+
? {
|
|
115
|
+
code: "hard_cap",
|
|
116
|
+
reason: "The paid budget cap was reached during processing",
|
|
117
|
+
harnessId,
|
|
118
|
+
attemptId,
|
|
119
|
+
}
|
|
120
|
+
: null;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=processing-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-dispatch.js","sourceRoot":"","sources":["../src/processing-dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,iFAAiF;AACjF,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAIlC,MAAM;IAHlB,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAG,QAAQ,CAAC;IACpB,IAAI,CAAuB;IACpC,YAAqB,MAAoB;QACvC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;sBADF,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,SAAS,YAAY,CAAC,IAAoB,EAAE,SAAiB;IAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,qBAAqB;QAAE,OAAO,SAAS,CAAC;IACtE,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,cAAc,GAClB,IAAI,CAAC,kBAAkB,EAAE,eAAe,KAAK,SAAS;QACpD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,kBAAkB;YACvB,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrD,MAAM,QAAQ,GACZ,cAAc;QACd,CAAC,OAAO,QAAQ,KAAK,UAAU;YAC7B,CAAC,CAAE,QAAgD,CAAC,IAAI,CAAC;YACzD,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChB,MAAM,QAAQ,GACZ,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,0BAA0B,IAAI,QAAQ,KAAK,SAAS;QACzF,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,eAAe,KAAK,SAAS;YACtD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,kBAAkB;gBACvB,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;oBAClC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAI,CAAC,eAAe,KAAK,cAAc;wBACvC,CAAC,CAAC,0BAA0B;wBAC5B,CAAC,CAAC,SAAS,CAAC;IACxB,OAAO,sBAAsB,CAC3B,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAC3F,QAAQ,EACR,CAAC,WAAW,SAAS,EAAE,EAAE,WAAW,IAAI,CAAC,kBAAkB,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC,CACxF,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CACd,MAAoB,EACpB,OAAe,EACf,IAAkB,EAClB,SAAiB,EACjB,SAAwB,EACxB,QAAyC;IAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO;IAC3B,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,MAAM,CAAC,MAAO;QACpB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,SAAS;QACT,SAAS;KACV,CAAC;IACF,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,IAAI,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,2BAA2B,CACzC,MAAoB,EACpB,OAAe,EACf,SAAiB,EACjB,SAAwB,EACxB,QAAyC;IAEzC,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,IAAI;YAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAoB,EACpB,MAAoB,EACpB,OAAe,EACf,SAAiB,EACjB,SAAwB,EACxB,QAAyC,EACzC,SAA+B;IAE/B,MAAM,KAAK,GACT,SAAS,IAAI,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5F,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,2BAA2B,CACzC,MAAoB,EACpB,OAAe,EACf,SAAyB,EACzB,SAAwB,EACxB,QAAyC;IAEzC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACvC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,WAAW,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAC3F,CAAC;IACF,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QACvB,MAAM,WAAW,GACf,OAAO,CAAC,OAAO,KAAK,aAAa,IAAI,OAAO,CAAC,OAAO,KAAK,0BAA0B,CAAC;QACtF,iBAAiB,KAAK,WAAW,CAAC;QAClC,uEAAuE;QACvE,yEAAyE;QACzE,IAAI,CAAC,WAAW,IAAI,iBAAiB;YAAE,OAAO;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAC1B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,0BAA0B,IAAI,IAAI,EAAE,OAAO,KAAK,aAAa,CAC1F,CAAC;QACF,MAAM,IAAI,GAAiB;YACzB,OAAO,EAAE,QAAQ;gBACf,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,SAAS,CAAC;oBAC3C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS;YACf,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACzC,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,4BAA4B;YACpC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAC1E,CAAC;QACF,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED;kFACkF;AAClF,MAAM,UAAU,0BAA0B,CACxC,IAAoB,EACpB,KAAuB,EACvB,MAAoB,EACpB,OAAe,EACf,SAAiB,EACjB,SAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM;QAC7B,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,mDAAmD;YAC3D,SAAS;YACT,SAAS;SACV;QACH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type PreparedHarnessProcessing } from "@claudexor/core";
|
|
2
|
+
import type { BillingKnowledge, CostEvidence, GlobalConfig, PaidBudget } from "@claudexor/schema";
|
|
3
|
+
import type { RoutedAdapter, RunInput } from "./orchestrator.js";
|
|
4
|
+
import type { ReviewerSpec } from "@claudexor/review";
|
|
5
|
+
export declare function prepareRoutedProcessing(routes: RoutedAdapter[], input: RunInput, cwd: string, config: GlobalConfig, paidBudget: PaidBudget, envFor?: (id: string) => Record<string, string> | undefined): Promise<void>;
|
|
6
|
+
export declare function processingCostEvidence(prepared: PreparedHarnessProcessing | undefined, ordinary: BillingKnowledge, provenance: string[]): CostEvidence | undefined;
|
|
7
|
+
export declare function prepareReviewerProcessing(reviewers: ReviewerSpec[], input: RunInput, config: GlobalConfig, budget: PaidBudget): Promise<ReviewerSpec[]>;
|
|
8
|
+
export declare function reviewerProcessingCost(reviewers: ReviewerSpec[]): CostEvidence | undefined;
|
|
9
|
+
//# sourceMappingURL=processing-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-routing.d.ts","sourceRoot":"","sources":["../src/processing-routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EAAE,EACvB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1D,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,MAAM,EAAE,GACnB,YAAY,GAAG,SAAS,CA0B1B;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,YAAY,EAAE,EACzB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAyBzB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAmB1F"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { prepareHarnessProcessing } from "@claudexor/core";
|
|
2
|
+
import { processingBillingKnowledge } from "@claudexor/budget";
|
|
3
|
+
export async function prepareRoutedProcessing(routes, input, cwd, config, paidBudget, envFor) {
|
|
4
|
+
await Promise.all(routes.map(async (route) => {
|
|
5
|
+
if (!input.processingPreference && !route.adapter.prepareProcessing)
|
|
6
|
+
return;
|
|
7
|
+
route.processingAllowPaid =
|
|
8
|
+
config.routing.paid_fallback !== "never" &&
|
|
9
|
+
!(paidBudget.kind === "finite" && paidBudget.maxUsd === 0);
|
|
10
|
+
route.processing = await prepareHarnessProcessing(route.adapter, {
|
|
11
|
+
preference: input.processingPreference,
|
|
12
|
+
model: route.quotaAdmission.model,
|
|
13
|
+
effort: input.efforts?.[route.adapter.id] ?? input.effort ?? route.settings?.effort ?? null,
|
|
14
|
+
cwd,
|
|
15
|
+
env: envFor?.(route.adapter.id),
|
|
16
|
+
credentialProfile: route.quotaAdmission.profile,
|
|
17
|
+
authPreference: input.authPreference,
|
|
18
|
+
allowPaid: route.processingAllowPaid,
|
|
19
|
+
});
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
export function processingCostEvidence(prepared, ordinary, provenance) {
|
|
23
|
+
if (!prepared ||
|
|
24
|
+
prepared.receipt.reason === "processing_control_unavailable" ||
|
|
25
|
+
(prepared.receipt.requested === null &&
|
|
26
|
+
prepared.receipt.submitted === null &&
|
|
27
|
+
prepared.receipt.reason !== "native_explicit" &&
|
|
28
|
+
!prepared.receipt.reason?.startsWith("paid_processing_")))
|
|
29
|
+
return undefined;
|
|
30
|
+
const costBasis = prepared.costBasis.kind === "unknown" &&
|
|
31
|
+
prepared.receipt.submitted === "standard" &&
|
|
32
|
+
ordinary === "subscription_entitlement"
|
|
33
|
+
? { ...prepared.costBasis, kind: "included" }
|
|
34
|
+
: prepared.costBasis;
|
|
35
|
+
const billing = processingBillingKnowledge(costBasis, ordinary);
|
|
36
|
+
return {
|
|
37
|
+
billing,
|
|
38
|
+
knowledge: billing === "subscription_entitlement" || billing === "proven_zero" ? "exact" : "unknown",
|
|
39
|
+
estimatedUsd: null,
|
|
40
|
+
source: prepared.costBasis.source,
|
|
41
|
+
provenance,
|
|
42
|
+
processing: costBasis,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export async function prepareReviewerProcessing(reviewers, input, config, budget) {
|
|
46
|
+
return Promise.all(reviewers.map(async (reviewer) => {
|
|
47
|
+
const preference = reviewer.processingPreference ?? input.processingPreference;
|
|
48
|
+
if (!preference && !reviewer.adapter.prepareProcessing)
|
|
49
|
+
return reviewer;
|
|
50
|
+
const allowPaid = config.routing.paid_fallback !== "never" &&
|
|
51
|
+
!(budget.kind === "finite" && budget.maxUsd === 0);
|
|
52
|
+
const processing = await prepareHarnessProcessing(reviewer.adapter, {
|
|
53
|
+
preference,
|
|
54
|
+
model: reviewer.requestedModel ?? null,
|
|
55
|
+
effort: reviewer.requestedEffort ?? null,
|
|
56
|
+
cwd: input.repoRoot,
|
|
57
|
+
credentialProfile: reviewer.credentialProfile,
|
|
58
|
+
authPreference: reviewer.authPreference ?? undefined,
|
|
59
|
+
allowPaid,
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
...reviewer,
|
|
63
|
+
processingPreference: preference,
|
|
64
|
+
processing,
|
|
65
|
+
processingAllowPaid: allowPaid,
|
|
66
|
+
};
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
export function reviewerProcessingCost(reviewers) {
|
|
70
|
+
if (!reviewers.some((r) => r.processing))
|
|
71
|
+
return undefined;
|
|
72
|
+
const costs = reviewers.map((r) => processingCostEvidence(r.processing, "unknown", [`harness:${r.adapter.id}`]));
|
|
73
|
+
const included = costs.every((c) => c?.billing === "subscription_entitlement" || c?.billing === "proven_zero");
|
|
74
|
+
return {
|
|
75
|
+
billing: included
|
|
76
|
+
? "subscription_entitlement"
|
|
77
|
+
: costs.some((c) => c?.billing === "metered")
|
|
78
|
+
? "metered"
|
|
79
|
+
: "unknown",
|
|
80
|
+
knowledge: included ? "exact" : "unknown",
|
|
81
|
+
estimatedUsd: null,
|
|
82
|
+
source: "review-processing-preflight",
|
|
83
|
+
provenance: costs.flatMap((c) => c?.provenance ?? ["processing:unknown"]),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=processing-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-routing.js","sourceRoot":"","sources":["../src/processing-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HarnessEvent, ProcessingCostBasis, ProcessingReceipt } from "@claudexor/schema";
|
|
2
|
+
export interface ProcessingTelemetry {
|
|
3
|
+
processing?: ProcessingReceipt;
|
|
4
|
+
processingCostBasis?: ProcessingCostBasis;
|
|
5
|
+
processingIntervals?: ProcessingReceipt[];
|
|
6
|
+
currentProcessing?: ProcessingReceipt;
|
|
7
|
+
}
|
|
8
|
+
/** Adapters own each native session's observations. Preserve completed native
|
|
9
|
+
* retry intervals as well, so a later ordinary run cannot erase paid/mixed work. */
|
|
10
|
+
export declare function observeProcessing(t: ProcessingTelemetry, event: HarnessEvent): void;
|
|
11
|
+
//# sourceMappingURL=processing-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-telemetry.d.ts","sourceRoot":"","sources":["../src/processing-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE9F,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED;oFACoF;AACpF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAyBnF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Adapters own each native session's observations. Preserve completed native
|
|
2
|
+
* retry intervals as well, so a later ordinary run cannot erase paid/mixed work. */
|
|
3
|
+
export function observeProcessing(t, event) {
|
|
4
|
+
if (event.type === "started")
|
|
5
|
+
t.currentProcessing = t.processing
|
|
6
|
+
? { ...t.processing, observed: "unknown", observedNative: [] }
|
|
7
|
+
: undefined;
|
|
8
|
+
if (event.processing)
|
|
9
|
+
t.currentProcessing = event.processing;
|
|
10
|
+
if (event.processing_cost_basis)
|
|
11
|
+
t.processingCostBasis = event.processing_cost_basis;
|
|
12
|
+
const current = t.currentProcessing;
|
|
13
|
+
if (!current)
|
|
14
|
+
return;
|
|
15
|
+
const all = [...(t.processingIntervals ?? []), current];
|
|
16
|
+
const modes = new Set(all.map((receipt) => receipt.observed));
|
|
17
|
+
t.processing = {
|
|
18
|
+
...current,
|
|
19
|
+
observedNative: [...new Set(all.flatMap((receipt) => receipt.observedNative))],
|
|
20
|
+
observed: modes.has("mixed") || [...modes].filter((mode) => mode !== "unknown").length > 1
|
|
21
|
+
? "mixed"
|
|
22
|
+
: modes.has("unknown")
|
|
23
|
+
? "unknown"
|
|
24
|
+
: current.observed,
|
|
25
|
+
};
|
|
26
|
+
if (event.type === "completed") {
|
|
27
|
+
(t.processingIntervals ??= []).push(current);
|
|
28
|
+
t.currentProcessing = undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=processing-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-telemetry.js","sourceRoot":"","sources":["../src/processing-telemetry.ts"],"names":[],"mappings":"AASA;oFACoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,CAAsB,EAAE,KAAmB;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAC1B,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,UAAU;YAChC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;YAC9D,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,KAAK,CAAC,UAAU;QAAE,CAAC,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC;IAC7D,IAAI,KAAK,CAAC,qBAAqB;QAAE,CAAC,CAAC,mBAAmB,GAAG,KAAK,CAAC,qBAAqB,CAAC;IACrF,MAAM,OAAO,GAAG,CAAC,CAAC,iBAAiB,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,UAAU,GAAG;QACb,GAAG,OAAO;QACV,cAAc,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9E,QAAQ,EACN,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;YAC9E,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;gBACpB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,QAAQ;KACzB,CAAC;IACF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewerPanel.d.ts","sourceRoot":"","sources":["../src/reviewerPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,yBAAyB,EACzB,iBAAiB,EACjB,UAAU,EAGV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAClE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,cAAc,CAAC;IACzD,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,cAAc,EAAE,cAAc,CAAC;QAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KAC1C,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACxC;;4CAEwC;IACxC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAwED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,yBAAyB,EAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"reviewerPanel.d.ts","sourceRoot":"","sources":["../src/reviewerPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,yBAAyB,EACzB,iBAAiB,EACjB,UAAU,EAGV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAClE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,cAAc,CAAC;IACzD,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,cAAc,EAAE,cAAc,CAAC;QAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KAC1C,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACxC;;4CAEwC;IACxC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAwED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,yBAAyB,EAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAyMzB;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,iBAAiB,EACvB,SAAS,GAAE,0BAA+B,GACzC,OAAO,CAAC,YAAY,EAAE,CAAC,CAsKzB"}
|
package/dist/reviewerPanel.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConformanceReport, effortLevelsForModel, estimateEffectiveAuthRoute, knownModelIdsForRoute, } from "@claudexor/schema";
|
|
2
|
-
import { HarnessUnavailableError, validateModel } from "@claudexor/core";
|
|
2
|
+
import { HarnessUnavailableError, hasModelInventoryForRoute, validateModel } from "@claudexor/core";
|
|
3
3
|
import { WorkspaceManager } from "@claudexor/workspace";
|
|
4
4
|
import { safeErrorMessage } from "./runSupport.js";
|
|
5
5
|
const MODEL_INVENTORY_RETRY_DELAY_MS = 250;
|
|
@@ -156,13 +156,14 @@ export async function resolveExplicitReviewerPanel(deps, panel) {
|
|
|
156
156
|
throw new HarnessUnavailableError(`reviewer harness '${entry.harness}' cannot perform readonly review`);
|
|
157
157
|
}
|
|
158
158
|
if (requestedModel) {
|
|
159
|
-
|
|
159
|
+
const route = credentialProfile
|
|
160
|
+
? credentialProfileAuthRoute(credentialProfile)
|
|
161
|
+
: estimateEffectiveAuthRoute(authPreference, status.authSources);
|
|
162
|
+
if (!hasModelInventoryForRoute(adapter, manifest.capabilities.model_inventory_routes, route)) {
|
|
160
163
|
// STRICT: the manifest list is the truth source here; an empty
|
|
161
164
|
// list means the harness cannot verify models and the explicit
|
|
162
165
|
// model is refused (validateModel phrases both refusals).
|
|
163
|
-
const check = validateModel(requestedModel, knownModelIdsForRoute(manifest.capabilities.known_models,
|
|
164
|
-
? credentialProfileAuthRoute(credentialProfile)
|
|
165
|
-
: estimateEffectiveAuthRoute(authPreference, status.authSources)), "manifest");
|
|
166
|
+
const check = validateModel(requestedModel, knownModelIdsForRoute(manifest.capabilities.known_models, route), "manifest");
|
|
166
167
|
if (check.status !== "ok") {
|
|
167
168
|
if (!entry.credentialProfileId && credentialProfile && deps.resolveReviewerProfile) {
|
|
168
169
|
excludedProfileIds.add(credentialProfile.profile_id);
|
|
@@ -207,6 +208,7 @@ export async function resolveExplicitReviewerPanel(deps, panel) {
|
|
|
207
208
|
requestedModel,
|
|
208
209
|
requestedEffort,
|
|
209
210
|
authPreference,
|
|
211
|
+
processingPreference: entry.processingPreference,
|
|
210
212
|
...(deps.resolveReviewerProfile ? { credentialProfile } : {}),
|
|
211
213
|
});
|
|
212
214
|
break;
|
|
@@ -315,7 +317,10 @@ export async function resolveAutoReviewerPanel(deps, overrides = {}) {
|
|
|
315
317
|
// explicit panel — a doomed reviewer model is refused here, never
|
|
316
318
|
// forwarded to die as an opaque native error mid-review.
|
|
317
319
|
if (requestedModel) {
|
|
318
|
-
const
|
|
320
|
+
const route = credentialProfile
|
|
321
|
+
? credentialProfileAuthRoute(credentialProfile)
|
|
322
|
+
: estimateEffectiveAuthRoute(authPreference, report.auth_sources);
|
|
323
|
+
const inventory = hasModelInventoryForRoute(adapter, m.capabilities.model_inventory_routes, route)
|
|
319
324
|
? await readAutoModelInventory(adapter, {
|
|
320
325
|
cwd,
|
|
321
326
|
env: reviewHome.env,
|
|
@@ -323,9 +328,7 @@ export async function resolveAutoReviewerPanel(deps, overrides = {}) {
|
|
|
323
328
|
...(credentialProfile ? { credentialProfile } : {}),
|
|
324
329
|
})
|
|
325
330
|
: (() => {
|
|
326
|
-
const ids = knownModelIdsForRoute(m.capabilities.known_models,
|
|
327
|
-
? credentialProfileAuthRoute(credentialProfile)
|
|
328
|
-
: estimateEffectiveAuthRoute(authPreference, report.auth_sources));
|
|
331
|
+
const ids = knownModelIdsForRoute(m.capabilities.known_models, route);
|
|
329
332
|
return ids.length > 0
|
|
330
333
|
? {
|
|
331
334
|
status: "available",
|