@claudexor/budget 3.1.0 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ledger.d.ts +30 -23
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +119 -114
- package/dist/ledger.js.map +1 -1
- package/dist/router.d.ts +9 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +27 -5
- package/dist/router.js.map +1 -1
- package/dist/settlements.d.ts +20 -0
- package/dist/settlements.d.ts.map +1 -0
- package/dist/settlements.js +99 -0
- package/dist/settlements.js.map +1 -0
- package/dist/shared-financial-state.d.ts +29 -0
- package/dist/shared-financial-state.d.ts.map +1 -0
- package/dist/shared-financial-state.js +58 -0
- package/dist/shared-financial-state.js.map +1 -0
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./ledger.js";
|
|
2
|
+
export * from "./settlements.js";
|
|
2
3
|
export * from "./router.js";
|
|
3
4
|
export * from "./observe.js";
|
|
4
|
-
export { loadHarnessMetrics, recordHarnessMetric
|
|
5
|
+
export { loadHarnessMetrics, recordHarnessMetric } from "./metrics.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./ledger.js";
|
|
2
|
+
export * from "./settlements.js";
|
|
2
3
|
export * from "./router.js";
|
|
3
4
|
export * from "./observe.js";
|
|
4
|
-
export { loadHarnessMetrics, recordHarnessMetric
|
|
5
|
+
export { loadHarnessMetrics, recordHarnessMetric } from "./metrics.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/ledger.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BillingKnowledge, BudgetLease, BudgetObservation, CostEvidence, CostKnowledge, CredentialRoute, Intent, PaidBudget, QuotaSnapshot } from "@claudexor/schema";
|
|
2
|
+
import { type SharedFinancialState } from "./shared-financial-state.js";
|
|
2
3
|
export type CircuitTier = "ok" | "soft" | "downgrade" | "hard";
|
|
3
4
|
/** Budget terminal REASON (D8 axes vocabulary): a subset of RunReason. A
|
|
4
5
|
* budget stop always maps the run lifecycle to `failed` with one of these
|
|
@@ -20,6 +21,10 @@ export interface ReserveInput {
|
|
|
20
21
|
}
|
|
21
22
|
export interface BudgetSettlement {
|
|
22
23
|
knowledge: CostKnowledge;
|
|
24
|
+
/** Cash certainty is independent from subscription valuation certainty. */
|
|
25
|
+
cashKnowledge?: CostKnowledge;
|
|
26
|
+
/** Valuation certainty is independent from billed cash certainty. */
|
|
27
|
+
valuationKnowledge?: CostKnowledge;
|
|
23
28
|
source: string;
|
|
24
29
|
provenance: string[];
|
|
25
30
|
cashUsd?: number;
|
|
@@ -34,21 +39,20 @@ export interface ReserveResult {
|
|
|
34
39
|
}
|
|
35
40
|
/** Stable fingerprint of a prompt for loop detection. */
|
|
36
41
|
export declare function promptFingerprint(prompt: string): string;
|
|
37
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* One view over a shared financial authority. The root view reports aggregate
|
|
44
|
+
* family cash/valuation; `scopedToTask` reports only that child's totals while
|
|
45
|
+
* sharing leases, holds, unknown-paid exclusion, and the hard cap. Routing
|
|
46
|
+
* observations, quota snapshots, and prompt-loop counters stay view-local.
|
|
47
|
+
*/
|
|
38
48
|
export declare class BudgetLedger {
|
|
39
|
-
private readonly budget;
|
|
40
|
-
private readonly thresholds;
|
|
41
|
-
private readonly deps;
|
|
42
|
-
private readonly leases;
|
|
43
|
-
private readonly holds;
|
|
44
|
-
private readonly unknownPaidInFlight;
|
|
45
49
|
private readonly observations;
|
|
46
50
|
private readonly quotaSnapshots;
|
|
47
51
|
private readonly promptCounts;
|
|
48
|
-
private
|
|
49
|
-
private
|
|
50
|
-
private
|
|
51
|
-
private
|
|
52
|
+
private readonly financial;
|
|
53
|
+
private readonly taskScope;
|
|
54
|
+
private readonly localOnCashSettled?;
|
|
55
|
+
private released;
|
|
52
56
|
constructor(budget?: PaidBudget, thresholds?: CircuitThresholds, deps?: {
|
|
53
57
|
/**
|
|
54
58
|
* Fires after every settle with the CUMULATIVE ledger truth. The ledger
|
|
@@ -57,19 +61,32 @@ export declare class BudgetLedger {
|
|
|
57
61
|
* consumers (run events → UI) render cash without inferring from route
|
|
58
62
|
* labels. Valuation rides along for telemetry, never for the cash fact.
|
|
59
63
|
*/
|
|
60
|
-
onCashSettled?: (cashSpendUsd: number, valuationUsd: number) => void;
|
|
64
|
+
onCashSettled?: (cashSpendUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: CostKnowledge) => void;
|
|
65
|
+
}, shared?: {
|
|
66
|
+
financial: SharedFinancialState;
|
|
67
|
+
taskScope: string;
|
|
61
68
|
});
|
|
69
|
+
scopedToTask(taskId: string, onCashSettled?: (cashSpendUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: CostKnowledge) => void): BudgetLedger;
|
|
62
70
|
private outstandingHolds;
|
|
63
71
|
private cap;
|
|
64
72
|
tier(): CircuitTier;
|
|
65
73
|
remainingUsd(): number | null;
|
|
66
74
|
reserve(input: ReserveInput): ReserveResult;
|
|
67
|
-
|
|
75
|
+
/** Raise the hold from actual streamed cash/unknown usage. Subscription
|
|
76
|
+
* valuation never calls this; an in-attempt API fallback does. */
|
|
77
|
+
updateHold(leaseId: string, streamedCashUsd: number): void;
|
|
68
78
|
settle(leaseId: string, settlement: BudgetSettlement): void;
|
|
69
79
|
cancel(leaseId: string): void;
|
|
70
80
|
spend(): number;
|
|
71
81
|
valuation(): number;
|
|
82
|
+
estimated(): boolean;
|
|
83
|
+
valuationKnowledge(): CostKnowledge;
|
|
72
84
|
terminal(): BudgetTerminal;
|
|
85
|
+
/** Cancel every still-reserved lease owned by this scoped task and detach
|
|
86
|
+
* its callback. Used when a delegated child reaches terminal. */
|
|
87
|
+
releaseTask(): void;
|
|
88
|
+
private assertTaskScope;
|
|
89
|
+
private leaseForMutation;
|
|
73
90
|
observe(observation: BudgetObservation): void;
|
|
74
91
|
/** Seed durable quota projection without collapsing credential identities. */
|
|
75
92
|
observeQuotaSnapshot(snapshot: QuotaSnapshot): void;
|
|
@@ -94,15 +111,5 @@ export declare function routeCostEvidence(input: {
|
|
|
94
111
|
estimatedUsd?: number | null;
|
|
95
112
|
}): CostEvidence;
|
|
96
113
|
export declare function attemptCostEvidence(harnessId: string, attemptId: string, estimatedUsd?: number, billing?: BillingKnowledge): CostEvidence;
|
|
97
|
-
export declare function usageCostSettlement(cashUsd: number, estimated: boolean, source: string, provenance: string[]): BudgetSettlement;
|
|
98
|
-
export declare function reviewUsageCostSettlement(cashUsd: number, valuationUsd: number, estimated: boolean, provenance: string[], unknownUsd?: number): BudgetSettlement;
|
|
99
|
-
export declare function attemptUsageCostSettlement(totalUsd: number, estimated: boolean, attemptId: string, harnessId: string, authMode?: "local_session" | "api_key" | null, split?: {
|
|
100
|
-
cashUsd: number;
|
|
101
|
-
valuationUsd: number;
|
|
102
|
-
unknownUsd: number;
|
|
103
|
-
}): BudgetSettlement;
|
|
104
|
-
/** One owner for the W4.3 fact used at settlement AND mid-flight cap checks. */
|
|
105
|
-
export declare function isSubscriptionValuation(authMode?: "local_session" | "api_key" | null): boolean;
|
|
106
|
-
export declare function unknownCostSettlement(source: string, cashUsd?: number): BudgetSettlement;
|
|
107
114
|
export declare function isBudgetTerminal(reason: string | null): reason is Exclude<BudgetTerminal, null>;
|
|
108
115
|
//# sourceMappingURL=ledger.d.ts.map
|
package/dist/ledger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,MAAM,EACN,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,MAAM,EACN,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAC/D;;4EAE4E;AAC5E,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,IAAI,CAAC;AAElG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,aAAa,CAAC;IACzB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,wBAAwB,CAAC;CACtF;AAUD,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAK1B;IACV,OAAO,CAAC,QAAQ,CAAS;gBAGvB,MAAM,GAAE,UAAkC,EAC1C,UAAU,GAAE,iBAA2D,EACvE,IAAI,GAAE;QACJ;;;;;;WAMG;QACH,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,aAAa,KAC9B,IAAI,CAAC;KACN,EACN,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,oBAAoB,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAQjE,YAAY,CACV,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,aAAa,KAC9B,IAAI,GACR,YAAY;IAaf,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,GAAG;IAIX,IAAI,IAAI,WAAW;IAYnB,YAAY,IAAI,MAAM,GAAG,IAAI;IAO7B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa;IAqD3C;sEACkE;IAClE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAO1D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IA6C3D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,KAAK,IAAI,MAAM;IAMf,SAAS,IAAI,MAAM;IAMnB,SAAS,IAAI,OAAO;IAIpB,kBAAkB,IAAI,aAAa;IAInC,QAAQ,IAAI,cAAc;IAM1B;qEACiE;IACjE,WAAW,IAAI,IAAI;IAQnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAI7C,8EAA8E;IAC9E,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAWnD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAIvD,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,eAAe,EACjC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,EACnC,GAAG,GAAE,MAAmB,GACvB,OAAO;IA0CV,mFAAmF;IACnF,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,eAAe,EACjC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,EACnC,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,IAAI;IA8DhB;;;;kFAI8E;IAC9E,OAAO,CAAC,YAAY;IAepB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAMzC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO;CAGpD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG,YAAY,CAQf;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,gBAA4B,GACpC,YAAY,CAQd;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAI/F"}
|
package/dist/ledger.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BudgetLease as BudgetLeaseSchema, CostEvidence as CostEvidenceSchema, } from "@claudexor/schema";
|
|
2
2
|
import { newId, nowIso, sha256 } from "@claudexor/util";
|
|
3
|
+
import { newSharedFinancialState, recordSharedSettlement, settlementIsEstimated, taskFinancialTotals, settlementValuationKnowledge, } from "./shared-financial-state.js";
|
|
3
4
|
const UNKNOWN_COST = {
|
|
4
5
|
knowledge: "unknown",
|
|
5
6
|
billing: "unknown",
|
|
@@ -11,57 +12,68 @@ const UNKNOWN_COST = {
|
|
|
11
12
|
export function promptFingerprint(prompt) {
|
|
12
13
|
return sha256(prompt.trim().replace(/\s+/g, " ").toLowerCase());
|
|
13
14
|
}
|
|
14
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* One view over a shared financial authority. The root view reports aggregate
|
|
17
|
+
* family cash/valuation; `scopedToTask` reports only that child's totals while
|
|
18
|
+
* sharing leases, holds, unknown-paid exclusion, and the hard cap. Routing
|
|
19
|
+
* observations, quota snapshots, and prompt-loop counters stay view-local.
|
|
20
|
+
*/
|
|
15
21
|
export class BudgetLedger {
|
|
16
|
-
budget;
|
|
17
|
-
thresholds;
|
|
18
|
-
deps;
|
|
19
|
-
leases = new Map();
|
|
20
|
-
holds = new Map();
|
|
21
|
-
unknownPaidInFlight = new Set();
|
|
22
22
|
observations = [];
|
|
23
23
|
quotaSnapshots = new Map();
|
|
24
24
|
promptCounts = new Map();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
constructor(budget = { kind: "unlimited" }, thresholds = { soft: 0.75, downgrade: 0.9, hard: 1 }, deps = {}) {
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
this.
|
|
25
|
+
financial;
|
|
26
|
+
taskScope;
|
|
27
|
+
localOnCashSettled;
|
|
28
|
+
released = false;
|
|
29
|
+
constructor(budget = { kind: "unlimited" }, thresholds = { soft: 0.75, downgrade: 0.9, hard: 1 }, deps = {}, shared) {
|
|
30
|
+
this.financial =
|
|
31
|
+
shared?.financial ?? newSharedFinancialState(budget, thresholds, deps.onCashSettled);
|
|
32
|
+
this.taskScope = shared?.taskScope ?? null;
|
|
33
|
+
this.localOnCashSettled = shared ? deps.onCashSettled : undefined;
|
|
34
|
+
}
|
|
35
|
+
scopedToTask(taskId, onCashSettled) {
|
|
36
|
+
if (!taskId.trim())
|
|
37
|
+
throw new Error("budget task scope must not be empty");
|
|
38
|
+
return new BudgetLedger(this.financial.budget, this.financial.thresholds, { onCashSettled }, {
|
|
39
|
+
financial: this.financial,
|
|
40
|
+
taskScope: taskId,
|
|
41
|
+
});
|
|
33
42
|
}
|
|
34
43
|
outstandingHolds() {
|
|
35
44
|
let sum = 0;
|
|
36
|
-
for (const value of this.holds.values())
|
|
45
|
+
for (const value of this.financial.holds.values())
|
|
37
46
|
sum += value;
|
|
38
47
|
return sum;
|
|
39
48
|
}
|
|
40
49
|
cap() {
|
|
41
|
-
return this.budget.kind === "finite" ? this.budget.maxUsd : null;
|
|
50
|
+
return this.financial.budget.kind === "finite" ? this.financial.budget.maxUsd : null;
|
|
42
51
|
}
|
|
43
52
|
tier() {
|
|
44
53
|
const cap = this.cap();
|
|
45
54
|
if (cap === null)
|
|
46
55
|
return "ok";
|
|
47
|
-
if (this.overshot)
|
|
56
|
+
if (this.financial.overshot)
|
|
48
57
|
return "hard";
|
|
49
58
|
if (cap === 0)
|
|
50
|
-
return this.
|
|
51
|
-
const ratio = (this.
|
|
52
|
-
if (ratio >= this.thresholds.hard)
|
|
59
|
+
return this.financial.cashUsd > 0 || this.outstandingHolds() > 0 ? "hard" : "ok";
|
|
60
|
+
const ratio = (this.financial.cashUsd + this.outstandingHolds()) / cap;
|
|
61
|
+
if (ratio >= this.financial.thresholds.hard)
|
|
53
62
|
return "hard";
|
|
54
|
-
if (ratio >= this.thresholds.downgrade)
|
|
63
|
+
if (ratio >= this.financial.thresholds.downgrade)
|
|
55
64
|
return "downgrade";
|
|
56
|
-
if (ratio >= this.thresholds.soft)
|
|
65
|
+
if (ratio >= this.financial.thresholds.soft)
|
|
57
66
|
return "soft";
|
|
58
67
|
return "ok";
|
|
59
68
|
}
|
|
60
69
|
remainingUsd() {
|
|
61
70
|
const cap = this.cap();
|
|
62
|
-
return cap === null
|
|
71
|
+
return cap === null
|
|
72
|
+
? null
|
|
73
|
+
: Math.max(0, cap - this.financial.cashUsd - this.outstandingHolds());
|
|
63
74
|
}
|
|
64
75
|
reserve(input) {
|
|
76
|
+
this.assertTaskScope(input.taskId);
|
|
65
77
|
const cost = CostEvidenceSchema.parse(input.cost ?? UNKNOWN_COST);
|
|
66
78
|
const zeroCash = cost.billing === "proven_zero" || cost.billing === "subscription_entitlement";
|
|
67
79
|
const cap = this.cap();
|
|
@@ -77,7 +89,7 @@ export class BudgetLedger {
|
|
|
77
89
|
return { granted: false, tier: "hard", denied: "hard_cap", reason: "budget exhausted" };
|
|
78
90
|
}
|
|
79
91
|
const unknownPaid = !zeroCash && cost.knowledge === "unknown";
|
|
80
|
-
if (cap !== null && cap > 0 && unknownPaid && this.unknownPaidInFlight.size > 0) {
|
|
92
|
+
if (cap !== null && cap > 0 && unknownPaid && this.financial.unknownPaidInFlight.size > 0) {
|
|
81
93
|
return {
|
|
82
94
|
granted: false,
|
|
83
95
|
tier: this.tier(),
|
|
@@ -107,64 +119,115 @@ export class BudgetLedger {
|
|
|
107
119
|
created_at: nowIso(),
|
|
108
120
|
state: "reserved",
|
|
109
121
|
});
|
|
110
|
-
this.leases.set(lease.lease_id, lease);
|
|
122
|
+
this.financial.leases.set(lease.lease_id, lease);
|
|
111
123
|
if (estimate > 0)
|
|
112
|
-
this.holds.set(lease.lease_id, estimate);
|
|
124
|
+
this.financial.holds.set(lease.lease_id, estimate);
|
|
113
125
|
if (unknownPaid && cap !== null)
|
|
114
|
-
this.unknownPaidInFlight.add(lease.lease_id);
|
|
126
|
+
this.financial.unknownPaidInFlight.add(lease.lease_id);
|
|
115
127
|
return { granted: true, tier: this.tier(), lease };
|
|
116
128
|
}
|
|
117
|
-
|
|
118
|
-
|
|
129
|
+
/** Raise the hold from actual streamed cash/unknown usage. Subscription
|
|
130
|
+
* valuation never calls this; an in-attempt API fallback does. */
|
|
131
|
+
updateHold(leaseId, streamedCashUsd) {
|
|
132
|
+
const lease = this.leaseForMutation(leaseId, false);
|
|
119
133
|
if (!lease || lease.state !== "reserved")
|
|
120
134
|
return;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (streamedUsd > current)
|
|
125
|
-
this.holds.set(leaseId, streamedUsd);
|
|
135
|
+
const current = this.financial.holds.get(leaseId) ?? 0;
|
|
136
|
+
if (streamedCashUsd > current)
|
|
137
|
+
this.financial.holds.set(leaseId, streamedCashUsd);
|
|
126
138
|
}
|
|
127
139
|
settle(leaseId, settlement) {
|
|
128
|
-
const lease = this.
|
|
129
|
-
if (!lease)
|
|
130
|
-
throw new Error(`cannot settle unknown lease: ${leaseId}`);
|
|
140
|
+
const lease = this.leaseForMutation(leaseId, true);
|
|
131
141
|
if (lease.state !== "reserved")
|
|
132
142
|
return;
|
|
133
143
|
lease.state = "settled";
|
|
134
|
-
this.holds.delete(leaseId);
|
|
135
|
-
this.unknownPaidInFlight.delete(leaseId);
|
|
136
|
-
const
|
|
144
|
+
this.financial.holds.delete(leaseId);
|
|
145
|
+
this.financial.unknownPaidInFlight.delete(leaseId);
|
|
146
|
+
const reservedZeroCash = lease.cost.billing === "proven_zero" || lease.cost.billing === "subscription_entitlement";
|
|
147
|
+
// A route can change inside one attempt. Component-specific settlement
|
|
148
|
+
// evidence from the actual usage stream outranks the preflight reservation:
|
|
149
|
+
// an API retry must remain cash even when the lease began on subscription.
|
|
150
|
+
const settledCashComponent = settlement.cashKnowledge !== undefined && settlement.cashUsd !== undefined;
|
|
151
|
+
const zeroCash = reservedZeroCash && !settledCashComponent;
|
|
137
152
|
const cashUsd = zeroCash ? 0 : Math.max(0, settlement.cashUsd ?? 0);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
const valuationUsd = Math.max(0, settlement.valuationUsd ?? (zeroCash ? (settlement.cashUsd ?? 0) : 0));
|
|
154
|
+
const taskTotals = taskFinancialTotals(this.financial, lease.task_id);
|
|
155
|
+
const cashKnowledge = zeroCash ? "exact" : (settlement.cashKnowledge ?? settlement.knowledge);
|
|
156
|
+
const cashEstimated = cashKnowledge !== "exact";
|
|
157
|
+
const valuationReported = settlement.valuationUsd !== undefined ||
|
|
158
|
+
settlement.valuationKnowledge !== undefined ||
|
|
159
|
+
(zeroCash && settlement.cashUsd !== undefined);
|
|
160
|
+
recordSharedSettlement(this.financial, taskTotals, cashUsd, valuationUsd, cashEstimated, valuationReported ? (settlement.valuationKnowledge ?? settlement.knowledge) : null);
|
|
161
|
+
if (this.financial.budget.kind === "finite") {
|
|
162
|
+
if (cashKnowledge === "unknown")
|
|
163
|
+
this.financial.unverifiable = true;
|
|
164
|
+
if (this.financial.cashUsd > this.financial.budget.maxUsd)
|
|
165
|
+
this.financial.overshot = true;
|
|
145
166
|
}
|
|
146
|
-
this.
|
|
167
|
+
this.localOnCashSettled?.(taskTotals.cashUsd, taskTotals.valuationUsd, taskTotals.cashEstimated, taskTotals.valuationKnowledge ?? "unknown");
|
|
147
168
|
}
|
|
148
169
|
cancel(leaseId) {
|
|
149
|
-
const lease = this.
|
|
170
|
+
const lease = this.leaseForMutation(leaseId, false);
|
|
150
171
|
if (lease?.state === "reserved")
|
|
151
172
|
lease.state = "cancelled";
|
|
152
|
-
this.holds.delete(leaseId);
|
|
153
|
-
this.unknownPaidInFlight.delete(leaseId);
|
|
173
|
+
this.financial.holds.delete(leaseId);
|
|
174
|
+
this.financial.unknownPaidInFlight.delete(leaseId);
|
|
154
175
|
}
|
|
155
176
|
spend() {
|
|
156
|
-
return this.
|
|
177
|
+
return this.taskScope === null
|
|
178
|
+
? this.financial.cashUsd
|
|
179
|
+
: (this.financial.totalsByTask.get(this.taskScope)?.cashUsd ?? 0);
|
|
157
180
|
}
|
|
158
181
|
valuation() {
|
|
159
|
-
return this.
|
|
182
|
+
return this.taskScope === null
|
|
183
|
+
? this.financial.valuationUsd
|
|
184
|
+
: (this.financial.totalsByTask.get(this.taskScope)?.valuationUsd ?? 0);
|
|
185
|
+
}
|
|
186
|
+
estimated() {
|
|
187
|
+
return settlementIsEstimated(this.financial, this.taskScope);
|
|
188
|
+
}
|
|
189
|
+
valuationKnowledge() {
|
|
190
|
+
return settlementValuationKnowledge(this.financial, this.taskScope);
|
|
160
191
|
}
|
|
161
192
|
terminal() {
|
|
162
|
-
if (this.overshot)
|
|
193
|
+
if (this.financial.overshot)
|
|
163
194
|
return "budget_overshoot";
|
|
164
|
-
if (this.unverifiable)
|
|
195
|
+
if (this.financial.unverifiable)
|
|
165
196
|
return "cost_unverifiable";
|
|
166
197
|
return this.tier() === "hard" ? "budget_exhausted" : null;
|
|
167
198
|
}
|
|
199
|
+
/** Cancel every still-reserved lease owned by this scoped task and detach
|
|
200
|
+
* its callback. Used when a delegated child reaches terminal. */
|
|
201
|
+
releaseTask() {
|
|
202
|
+
if (this.taskScope === null || this.released)
|
|
203
|
+
return;
|
|
204
|
+
for (const [leaseId, lease] of this.financial.leases) {
|
|
205
|
+
if (lease.task_id === this.taskScope && lease.state === "reserved")
|
|
206
|
+
this.cancel(leaseId);
|
|
207
|
+
}
|
|
208
|
+
this.released = true;
|
|
209
|
+
}
|
|
210
|
+
assertTaskScope(taskId) {
|
|
211
|
+
if (this.released) {
|
|
212
|
+
throw Object.assign(new Error("budget task scope is released"), {
|
|
213
|
+
code: "delegation_budget_scope_released",
|
|
214
|
+
status: 409,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (this.taskScope !== null && taskId !== this.taskScope) {
|
|
218
|
+
throw Object.assign(new Error(`budget task scope ${this.taskScope} cannot act for ${taskId}`), { code: "delegation_budget_scope_violation", status: 403 });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
leaseForMutation(leaseId, required) {
|
|
222
|
+
const lease = this.financial.leases.get(leaseId);
|
|
223
|
+
if (!lease) {
|
|
224
|
+
if (required)
|
|
225
|
+
throw new Error(`cannot settle unknown lease: ${leaseId}`);
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
this.assertTaskScope(lease.task_id);
|
|
229
|
+
return lease;
|
|
230
|
+
}
|
|
168
231
|
observe(observation) {
|
|
169
232
|
this.observations.push(observation);
|
|
170
233
|
}
|
|
@@ -304,64 +367,6 @@ export function attemptCostEvidence(harnessId, attemptId, estimatedUsd, billing
|
|
|
304
367
|
estimatedUsd: estimatedUsd ?? null,
|
|
305
368
|
});
|
|
306
369
|
}
|
|
307
|
-
export function usageCostSettlement(cashUsd, estimated, source, provenance) {
|
|
308
|
-
return cashUsd > 0
|
|
309
|
-
? { knowledge: estimated ? "estimated" : "exact", source, provenance, cashUsd }
|
|
310
|
-
: { knowledge: "unknown", source: `${source}-missing`, provenance };
|
|
311
|
-
}
|
|
312
|
-
export function reviewUsageCostSettlement(cashUsd, valuationUsd, estimated, provenance, unknownUsd = 0) {
|
|
313
|
-
const observed = cashUsd > 0 || valuationUsd > 0 || unknownUsd > 0;
|
|
314
|
-
return {
|
|
315
|
-
knowledge: observed && unknownUsd === 0 ? (estimated ? "estimated" : "exact") : "unknown",
|
|
316
|
-
source: observed ? "review-usage" : "review-usage-missing",
|
|
317
|
-
provenance,
|
|
318
|
-
cashUsd: Math.max(0, cashUsd),
|
|
319
|
-
valuationUsd: Math.max(0, valuationUsd),
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
export function attemptUsageCostSettlement(totalUsd, estimated, attemptId, harnessId, authMode, split) {
|
|
323
|
-
if (split) {
|
|
324
|
-
const observed = split.cashUsd + split.valuationUsd + split.unknownUsd;
|
|
325
|
-
if (observed > 0) {
|
|
326
|
-
return {
|
|
327
|
-
knowledge: split.unknownUsd > 0 ? "unknown" : estimated ? "estimated" : "exact",
|
|
328
|
-
source: "harness-usage-by-route",
|
|
329
|
-
provenance: [`attempt:${attemptId}`, `harness:${harnessId}`, "route:per-usage-event"],
|
|
330
|
-
cashUsd: split.cashUsd,
|
|
331
|
-
valuationUsd: split.valuationUsd,
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
if (isSubscriptionValuation(authMode)) {
|
|
336
|
-
return {
|
|
337
|
-
knowledge: estimated ? "estimated" : "exact",
|
|
338
|
-
source: "harness-token-valuation",
|
|
339
|
-
provenance: [`attempt:${attemptId}`, `harness:${harnessId}`, "route:vendor_native"],
|
|
340
|
-
valuationUsd: totalUsd,
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
return usageCostSettlement(totalUsd, estimated, "harness-usage", [
|
|
344
|
-
`attempt:${attemptId}`,
|
|
345
|
-
`harness:${harnessId}`,
|
|
346
|
-
...(authMode ? [`route:${authMode}`] : []),
|
|
347
|
-
]);
|
|
348
|
-
}
|
|
349
|
-
/** One owner for the W4.3 fact used at settlement AND mid-flight cap checks. */
|
|
350
|
-
export function isSubscriptionValuation(authMode) {
|
|
351
|
-
// Vendor-reported cost on a native subscription route is VALUATION,
|
|
352
|
-
// regardless of whether the vendor labels it estimated or exact. It never
|
|
353
|
-
// becomes incremental cash (live-found: Claude reported estimated=false
|
|
354
|
-
// and the UI incorrectly showed ~$0.37 cash for subscription work).
|
|
355
|
-
return authMode === "local_session";
|
|
356
|
-
}
|
|
357
|
-
export function unknownCostSettlement(source, cashUsd) {
|
|
358
|
-
return {
|
|
359
|
-
knowledge: "unknown",
|
|
360
|
-
source,
|
|
361
|
-
provenance: [`orchestrator:${source}`],
|
|
362
|
-
...(cashUsd === undefined ? {} : { cashUsd }),
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
370
|
export function isBudgetTerminal(reason) {
|
|
366
371
|
return (reason === "budget_exhausted" || reason === "budget_overshoot" || reason === "cost_unverifiable");
|
|
367
372
|
}
|
package/dist/ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -45,12 +45,19 @@ export interface RouteContext {
|
|
|
45
45
|
intent: Intent;
|
|
46
46
|
qualityTiers: QualityTierSet;
|
|
47
47
|
ledger: BudgetLedger;
|
|
48
|
+
/**
|
|
49
|
+
* The instant EVERY clock-dependent axis is evaluated at (cooldown expiry and
|
|
50
|
+
* quota pace slack). Optional: each entry point pins one `Date.now()` for the
|
|
51
|
+
* whole call when it is absent. A caller that ranks a pool and then explains
|
|
52
|
+
* the SAME pool must pass a pinned instant so both passes read one clock.
|
|
53
|
+
*/
|
|
54
|
+
now?: number;
|
|
48
55
|
}
|
|
49
56
|
export declare class RoutingPreflightError extends Error {
|
|
50
57
|
readonly code = "routing_preflight_refused";
|
|
51
58
|
}
|
|
52
59
|
/** Order candidates transparently; lower tuple values win. Unknown quota remains eligible. */
|
|
53
|
-
export declare function rankHarnesses(candidates: RouterCandidate[],
|
|
60
|
+
export declare function rankHarnesses(candidates: RouterCandidate[], context: RouteContext): RouterCandidate[];
|
|
54
61
|
export declare function selectHarness(candidates: RouterCandidate[], ctx: RouteContext): RouterCandidate | null;
|
|
55
62
|
/**
|
|
56
63
|
* Explain a ranking as a typed record (QA-034): the per-candidate billing/cost
|
|
@@ -60,5 +67,5 @@ export declare function selectHarness(candidates: RouterCandidate[], ctx: RouteC
|
|
|
60
67
|
* The shape is the schema-owned RouteRankingRationale (snake_case) so it can be
|
|
61
68
|
* persisted verbatim as RunTelemetry.routing_rationale.
|
|
62
69
|
*/
|
|
63
|
-
export declare function explainRanking(candidates: RouterCandidate[],
|
|
70
|
+
export declare function explainRanking(candidates: RouterCandidate[], context: RouteContext): RouteRankingRationale;
|
|
64
71
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,qBAAqB,EAErB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAM1F;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;iFAG6E;IAC7E,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;qEAGiE;IACjE,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,cAAc,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,qBAAqB,EAErB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAM1F;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;iFAG6E;IAC7E,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;qEAGiE;IACjE,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,cAAc,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,+BAA+B;CAC7C;AAkHD,8FAA8F;AAC9F,wBAAgB,aAAa,CAC3B,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,YAAY,GACpB,eAAe,EAAE,CAwBnB;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,eAAe,EAAE,EAC7B,GAAG,EAAE,YAAY,GAChB,eAAe,GAAG,IAAI,CAExB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,YAAY,GACpB,qBAAqB,CAgBvB"}
|
package/dist/router.js
CHANGED
|
@@ -33,9 +33,20 @@ function effectiveBilling(candidate) {
|
|
|
33
33
|
function isIncrementalPaid(candidate) {
|
|
34
34
|
return !["proven_zero", "subscription_entitlement"].includes(effectiveBilling(candidate));
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Pin ONE evaluation instant for a whole ranking pass. Reading the clock again
|
|
38
|
+
* per candidate makes the comparator time-varying: two candidates carrying
|
|
39
|
+
* IDENTICAL quota observations get slacks that differ by whatever milliseconds
|
|
40
|
+
* elapsed between the two reads, so a pool nothing actually separates is
|
|
41
|
+
* ordered by scheduler jitter and reports `expiring_quota_slack` instead of the
|
|
42
|
+
* honest `declared_order`. The pin is what makes equal inputs compare equal.
|
|
43
|
+
*/
|
|
44
|
+
function pinInstant(ctx) {
|
|
45
|
+
return ctx.now === undefined ? { ...ctx, now: Date.now() } : ctx;
|
|
46
|
+
}
|
|
36
47
|
function eligible(candidates, ctx) {
|
|
37
48
|
const ready = candidates.filter((candidate) => candidate.available &&
|
|
38
|
-
!ctx.ledger.cooldownActive(candidate.harnessId, candidate.credentialRoute, candidate.credentialSubjectId));
|
|
49
|
+
!ctx.ledger.cooldownActive(candidate.harnessId, candidate.credentialRoute, candidate.credentialSubjectId, ctx.now));
|
|
39
50
|
const free = ready.filter((candidate) => !isIncrementalPaid(candidate));
|
|
40
51
|
if (ctx.paidFallback === "never")
|
|
41
52
|
return free;
|
|
@@ -48,9 +59,11 @@ function eligible(candidates, ctx) {
|
|
|
48
59
|
function tierValueOf(candidate, ctx) {
|
|
49
60
|
return tierIndex(candidate, ctx) ?? Number.MAX_SAFE_INTEGER;
|
|
50
61
|
}
|
|
51
|
-
/** Binding pace slack the `auto` comparator orders by; null = none observed.
|
|
62
|
+
/** Binding pace slack the `auto` comparator orders by; null = none observed.
|
|
63
|
+
* Evaluated at the pass-wide pinned instant (`ctx.now`) — never at a freshly
|
|
64
|
+
* read clock, which would make two identical quota states differ. */
|
|
52
65
|
function autoSlack(candidate, ctx) {
|
|
53
|
-
return ctx.ledger.bindingPaceSlack(candidate.harnessId, candidate.credentialRoute, candidate.credentialSubjectId);
|
|
66
|
+
return ctx.ledger.bindingPaceSlack(candidate.harnessId, candidate.credentialRoute, candidate.credentialSubjectId, ctx.now);
|
|
54
67
|
}
|
|
55
68
|
/** null slack collapses to this so a slack-carrying candidate always outranks a
|
|
56
69
|
* slack-less one, exactly as the comparator subtraction does. */
|
|
@@ -69,6 +82,11 @@ const AUTO_SLACK_ABSENT = Number.NEGATIVE_INFINITY;
|
|
|
69
82
|
* two EQUAL non-null slacks yield order 0 and a null axis (declared order, and
|
|
70
83
|
* the sort does NOT fall through to tiers). Only when BOTH slacks are absent
|
|
71
84
|
* does the comparator compare tier indices.
|
|
85
|
+
*
|
|
86
|
+
* Both slacks are read at the pass-wide pinned instant (`ctx.now`), so the
|
|
87
|
+
* subtraction compares two quota states and nothing else. Re-reading the clock
|
|
88
|
+
* per candidate made the comparator time-varying and broke exactly the
|
|
89
|
+
* guarantee above: equal quota states produced a non-zero order.
|
|
72
90
|
*/
|
|
73
91
|
function compareAutoTraced(a, b, ctx) {
|
|
74
92
|
const aSlack = autoSlack(a, ctx);
|
|
@@ -81,7 +99,8 @@ function compareAutoTraced(a, b, ctx) {
|
|
|
81
99
|
return { order, axis: order !== 0 ? "quality_tier" : null };
|
|
82
100
|
}
|
|
83
101
|
/** Order candidates transparently; lower tuple values win. Unknown quota remains eligible. */
|
|
84
|
-
export function rankHarnesses(candidates,
|
|
102
|
+
export function rankHarnesses(candidates, context) {
|
|
103
|
+
const ctx = pinInstant(context);
|
|
85
104
|
const routes = eligible(candidates, ctx);
|
|
86
105
|
if (ctx.goal === "quality" && routes.every((candidate) => tierIndex(candidate, ctx) === null)) {
|
|
87
106
|
throw new RoutingPreflightError(`quality routing requires a comparable user-declared tier for intent '${ctx.intent}'`);
|
|
@@ -116,7 +135,10 @@ export function selectHarness(candidates, ctx) {
|
|
|
116
135
|
* The shape is the schema-owned RouteRankingRationale (snake_case) so it can be
|
|
117
136
|
* persisted verbatim as RunTelemetry.routing_rationale.
|
|
118
137
|
*/
|
|
119
|
-
export function explainRanking(candidates,
|
|
138
|
+
export function explainRanking(candidates, context) {
|
|
139
|
+
// ONE instant for both passes: the sort and the reason walk must read the same
|
|
140
|
+
// clock, or the recorded rationale can disagree with the order it explains.
|
|
141
|
+
const ctx = pinInstant(context);
|
|
120
142
|
const rankedCandidates = rankHarnesses(candidates, ctx);
|
|
121
143
|
const order = rankedCandidates.map((c) => c.harnessId);
|
|
122
144
|
const eligibleIds = new Set(order);
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AA4BA;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAA2B;IACtE,IAAI,QAAQ,CAAC,KAAK,KAAK,iBAAiB;QAAE,OAAO,SAAS,CAAC;IAC3D,IAAI,QAAQ,CAAC,KAAK,KAAK,eAAe,IAAI,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7E,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CostKnowledge } from "@claudexor/schema";
|
|
2
|
+
import type { BudgetSettlement } from "./ledger.js";
|
|
3
|
+
export declare function usageCostSettlement(cashUsd: number, estimated: boolean, source: string, provenance: string[]): BudgetSettlement;
|
|
4
|
+
export declare function reviewUsageCostSettlement(cashUsd: number, valuationUsd: number, knowledge: {
|
|
5
|
+
cash: CostKnowledge;
|
|
6
|
+
valuation: CostKnowledge;
|
|
7
|
+
}, provenance: string[], unknownUsd?: number): BudgetSettlement;
|
|
8
|
+
export declare function attemptUsageCostSettlement(totalUsd: number, estimated: boolean, attemptId: string, harnessId: string, authMode?: "local_session" | "api_key" | null, split?: {
|
|
9
|
+
cashUsd: number;
|
|
10
|
+
valuationUsd: number;
|
|
11
|
+
unknownUsd: number;
|
|
12
|
+
cashEstimated?: boolean;
|
|
13
|
+
valuationEstimated?: boolean;
|
|
14
|
+
cashKnowledge?: CostKnowledge;
|
|
15
|
+
valuationKnowledge?: CostKnowledge;
|
|
16
|
+
}): BudgetSettlement;
|
|
17
|
+
/** One owner for the W4.3 fact used at settlement AND mid-flight cap checks. */
|
|
18
|
+
export declare function isSubscriptionValuation(authMode?: "local_session" | "api_key" | null): boolean;
|
|
19
|
+
export declare function unknownCostSettlement(source: string, cashUsd?: number): BudgetSettlement;
|
|
20
|
+
//# sourceMappingURL=settlements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlements.d.ts","sourceRoot":"","sources":["../src/settlements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,GACnB,gBAAgB,CAUlB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAAE,EAC5D,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,SAAI,GACb,gBAAgB,CAoBlB;AAOD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAC7C,KAAK,CAAC,EAAE;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kBAAkB,CAAC,EAAE,aAAa,CAAC;CACpC,GACA,gBAAgB,CA4ClB;AAMD,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAM9F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAOxF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export function usageCostSettlement(cashUsd, estimated, source, provenance) {
|
|
2
|
+
return cashUsd > 0
|
|
3
|
+
? {
|
|
4
|
+
knowledge: measuredKnowledge(estimated),
|
|
5
|
+
cashKnowledge: measuredKnowledge(estimated),
|
|
6
|
+
source,
|
|
7
|
+
provenance,
|
|
8
|
+
cashUsd,
|
|
9
|
+
}
|
|
10
|
+
: { knowledge: "unknown", source: `${source}-missing`, provenance };
|
|
11
|
+
}
|
|
12
|
+
export function reviewUsageCostSettlement(cashUsd, valuationUsd, knowledge, provenance, unknownUsd = 0) {
|
|
13
|
+
const observed = cashUsd > 0 || valuationUsd > 0 || unknownUsd > 0;
|
|
14
|
+
const normalizedValuation = Math.max(0, valuationUsd);
|
|
15
|
+
const aggregateKnowledge = mergeKnowledge([
|
|
16
|
+
knowledge.cash,
|
|
17
|
+
...(normalizedValuation > 0 || unknownUsd > 0 ? [knowledge.valuation] : []),
|
|
18
|
+
]);
|
|
19
|
+
return {
|
|
20
|
+
knowledge: unknownUsd > 0 ? "unknown" : aggregateKnowledge,
|
|
21
|
+
cashKnowledge: unknownUsd > 0 ? "unknown" : knowledge.cash,
|
|
22
|
+
...(normalizedValuation > 0 || unknownUsd > 0
|
|
23
|
+
? {
|
|
24
|
+
valuationKnowledge: unknownUsd > 0 ? "unknown" : knowledge.valuation,
|
|
25
|
+
}
|
|
26
|
+
: {}),
|
|
27
|
+
source: observed ? "review-usage" : "review-usage-missing",
|
|
28
|
+
provenance,
|
|
29
|
+
cashUsd: Math.max(0, cashUsd),
|
|
30
|
+
...(normalizedValuation > 0 ? { valuationUsd: normalizedValuation } : {}),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function mergeKnowledge(values) {
|
|
34
|
+
if (values.includes("unknown"))
|
|
35
|
+
return "unknown";
|
|
36
|
+
return values.includes("estimated") ? "estimated" : "exact";
|
|
37
|
+
}
|
|
38
|
+
export function attemptUsageCostSettlement(totalUsd, estimated, attemptId, harnessId, authMode, split) {
|
|
39
|
+
if (split) {
|
|
40
|
+
const observed = split.cashUsd + split.valuationUsd + split.unknownUsd;
|
|
41
|
+
const componentEvidence = split.cashKnowledge !== undefined || split.valuationKnowledge !== undefined;
|
|
42
|
+
if (observed > 0 || componentEvidence) {
|
|
43
|
+
const normalizedValuation = Math.max(0, split.valuationUsd);
|
|
44
|
+
const cashKnowledge = split.unknownUsd > 0
|
|
45
|
+
? "unknown"
|
|
46
|
+
: (split.cashKnowledge ?? measuredKnowledge(split.cashEstimated === true));
|
|
47
|
+
const valuationKnowledge = split.unknownUsd > 0
|
|
48
|
+
? "unknown"
|
|
49
|
+
: (split.valuationKnowledge ?? measuredKnowledge(split.valuationEstimated === true));
|
|
50
|
+
return {
|
|
51
|
+
knowledge: mergeKnowledge([
|
|
52
|
+
cashKnowledge,
|
|
53
|
+
...(normalizedValuation > 0 || split.unknownUsd > 0 ? [valuationKnowledge] : []),
|
|
54
|
+
]),
|
|
55
|
+
cashKnowledge,
|
|
56
|
+
...(normalizedValuation > 0 || split.unknownUsd > 0 ? { valuationKnowledge } : {}),
|
|
57
|
+
source: observed > 0 ? "harness-usage-by-route" : "harness-route-usage-missing",
|
|
58
|
+
provenance: [`attempt:${attemptId}`, `harness:${harnessId}`, "route:stream-evidence"],
|
|
59
|
+
cashUsd: split.cashUsd,
|
|
60
|
+
...(normalizedValuation > 0 ? { valuationUsd: normalizedValuation } : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (isSubscriptionValuation(authMode)) {
|
|
65
|
+
return {
|
|
66
|
+
knowledge: measuredKnowledge(estimated),
|
|
67
|
+
cashKnowledge: "exact",
|
|
68
|
+
...(totalUsd > 0 ? { valuationKnowledge: measuredKnowledge(estimated) } : {}),
|
|
69
|
+
source: "harness-token-valuation",
|
|
70
|
+
provenance: [`attempt:${attemptId}`, `harness:${harnessId}`, "route:vendor_native"],
|
|
71
|
+
...(totalUsd > 0 ? { valuationUsd: totalUsd } : {}),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return usageCostSettlement(totalUsd, estimated, "harness-usage", [
|
|
75
|
+
`attempt:${attemptId}`,
|
|
76
|
+
`harness:${harnessId}`,
|
|
77
|
+
...(authMode ? [`route:${authMode}`] : []),
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
function measuredKnowledge(estimated) {
|
|
81
|
+
return estimated ? "estimated" : "exact";
|
|
82
|
+
}
|
|
83
|
+
/** One owner for the W4.3 fact used at settlement AND mid-flight cap checks. */
|
|
84
|
+
export function isSubscriptionValuation(authMode) {
|
|
85
|
+
// Vendor-reported cost on a native subscription route is VALUATION,
|
|
86
|
+
// regardless of whether the vendor labels it estimated or exact. It never
|
|
87
|
+
// becomes incremental cash (live-found: Claude reported estimated=false
|
|
88
|
+
// and the UI incorrectly showed ~$0.37 cash for subscription work).
|
|
89
|
+
return authMode === "local_session";
|
|
90
|
+
}
|
|
91
|
+
export function unknownCostSettlement(source, cashUsd) {
|
|
92
|
+
return {
|
|
93
|
+
knowledge: "unknown",
|
|
94
|
+
source,
|
|
95
|
+
provenance: [`orchestrator:${source}`],
|
|
96
|
+
...(cashUsd === undefined ? {} : { cashUsd }),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=settlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlements.js","sourceRoot":"","sources":["../src/settlements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BudgetLease, CostKnowledge, PaidBudget } from "@claudexor/schema";
|
|
2
|
+
import type { CircuitThresholds } from "./ledger.js";
|
|
3
|
+
export interface TaskFinancialTotals {
|
|
4
|
+
cashUsd: number;
|
|
5
|
+
valuationUsd: number;
|
|
6
|
+
cashEstimated: boolean;
|
|
7
|
+
valuationKnowledge: CostKnowledge | null;
|
|
8
|
+
}
|
|
9
|
+
export interface SharedFinancialState {
|
|
10
|
+
budget: PaidBudget;
|
|
11
|
+
thresholds: CircuitThresholds;
|
|
12
|
+
leases: Map<string, BudgetLease>;
|
|
13
|
+
holds: Map<string, number>;
|
|
14
|
+
unknownPaidInFlight: Set<string>;
|
|
15
|
+
totalsByTask: Map<string, TaskFinancialTotals>;
|
|
16
|
+
cashUsd: number;
|
|
17
|
+
valuationUsd: number;
|
|
18
|
+
cashEstimated: boolean;
|
|
19
|
+
valuationKnowledge: CostKnowledge | null;
|
|
20
|
+
overshot: boolean;
|
|
21
|
+
unverifiable: boolean;
|
|
22
|
+
rootOnCashSettled?: (cashSpendUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: CostKnowledge) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function newSharedFinancialState(budget: PaidBudget, thresholds: CircuitThresholds, rootOnCashSettled?: (cashSpendUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: CostKnowledge) => void): SharedFinancialState;
|
|
25
|
+
export declare function recordSharedSettlement(financial: SharedFinancialState, taskTotals: TaskFinancialTotals, cashUsd: number, valuationUsd: number, cashEstimated: boolean, valuationKnowledge: CostKnowledge | null): void;
|
|
26
|
+
export declare function taskFinancialTotals(financial: SharedFinancialState, taskId: string): TaskFinancialTotals;
|
|
27
|
+
export declare function settlementIsEstimated(financial: SharedFinancialState, taskScope: string | null): boolean;
|
|
28
|
+
export declare function settlementValuationKnowledge(financial: SharedFinancialState, taskScope: string | null): CostKnowledge;
|
|
29
|
+
//# sourceMappingURL=shared-financial-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-financial-state.d.ts","sourceRoot":"","sources":["../src/shared-financial-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,aAAa,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,aAAa,KAC9B,IAAI,CAAC;CACX;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,iBAAiB,EAC7B,iBAAiB,CAAC,EAAE,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,aAAa,KAC9B,IAAI,GACR,oBAAoB,CAgBtB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,aAAa,GAAG,IAAI,GACvC,IAAI,CAoBN;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,MAAM,GACb,mBAAmB,CAOrB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,oBAAoB,EAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAIT;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,oBAAoB,EAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,aAAa,CAIf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export function newSharedFinancialState(budget, thresholds, rootOnCashSettled) {
|
|
2
|
+
return {
|
|
3
|
+
budget,
|
|
4
|
+
thresholds,
|
|
5
|
+
leases: new Map(),
|
|
6
|
+
holds: new Map(),
|
|
7
|
+
unknownPaidInFlight: new Set(),
|
|
8
|
+
totalsByTask: new Map(),
|
|
9
|
+
cashUsd: 0,
|
|
10
|
+
valuationUsd: 0,
|
|
11
|
+
cashEstimated: false,
|
|
12
|
+
valuationKnowledge: null,
|
|
13
|
+
overshot: false,
|
|
14
|
+
unverifiable: false,
|
|
15
|
+
rootOnCashSettled,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function recordSharedSettlement(financial, taskTotals, cashUsd, valuationUsd, cashEstimated, valuationKnowledge) {
|
|
19
|
+
financial.cashUsd += cashUsd;
|
|
20
|
+
financial.valuationUsd += valuationUsd;
|
|
21
|
+
taskTotals.cashUsd += cashUsd;
|
|
22
|
+
taskTotals.valuationUsd += valuationUsd;
|
|
23
|
+
taskTotals.cashEstimated ||= cashEstimated;
|
|
24
|
+
financial.cashEstimated ||= cashEstimated;
|
|
25
|
+
if (valuationKnowledge !== null) {
|
|
26
|
+
taskTotals.valuationKnowledge = mergeKnowledge(taskTotals.valuationKnowledge, valuationKnowledge);
|
|
27
|
+
financial.valuationKnowledge = mergeKnowledge(financial.valuationKnowledge, valuationKnowledge);
|
|
28
|
+
}
|
|
29
|
+
financial.rootOnCashSettled?.(financial.cashUsd, financial.valuationUsd, financial.cashEstimated, financial.valuationKnowledge ?? "unknown");
|
|
30
|
+
}
|
|
31
|
+
export function taskFinancialTotals(financial, taskId) {
|
|
32
|
+
let totals = financial.totalsByTask.get(taskId);
|
|
33
|
+
if (!totals) {
|
|
34
|
+
totals = { cashUsd: 0, valuationUsd: 0, cashEstimated: false, valuationKnowledge: null };
|
|
35
|
+
financial.totalsByTask.set(taskId, totals);
|
|
36
|
+
}
|
|
37
|
+
return totals;
|
|
38
|
+
}
|
|
39
|
+
export function settlementIsEstimated(financial, taskScope) {
|
|
40
|
+
return taskScope === null
|
|
41
|
+
? financial.cashEstimated
|
|
42
|
+
: (financial.totalsByTask.get(taskScope)?.cashEstimated ?? false);
|
|
43
|
+
}
|
|
44
|
+
export function settlementValuationKnowledge(financial, taskScope) {
|
|
45
|
+
return taskScope === null
|
|
46
|
+
? (financial.valuationKnowledge ?? "unknown")
|
|
47
|
+
: (financial.totalsByTask.get(taskScope)?.valuationKnowledge ?? "unknown");
|
|
48
|
+
}
|
|
49
|
+
function mergeKnowledge(current, incoming) {
|
|
50
|
+
if (current === null)
|
|
51
|
+
return incoming;
|
|
52
|
+
if (current === "unknown" || incoming === "unknown")
|
|
53
|
+
return "unknown";
|
|
54
|
+
if (current === "estimated" || incoming === "estimated")
|
|
55
|
+
return "estimated";
|
|
56
|
+
return "exact";
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=shared-financial-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-financial-state.js","sourceRoot":"","sources":["../src/shared-financial-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudexor/budget",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Budget governor: pre-call leases, circuit breaker, evidence-based routing goals, and multi-window quota pacing.",
|
|
6
6
|
"type": "module",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@claudexor/
|
|
20
|
-
"@claudexor/
|
|
19
|
+
"@claudexor/schema": "3.1.2",
|
|
20
|
+
"@claudexor/util": "3.1.2"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|