@claudexor/budget 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./ledger.js";
2
+ export * from "./settlements.js";
2
3
  export * from "./router.js";
3
4
  export * from "./observe.js";
4
5
  export { loadHarnessMetrics, recordHarnessMetric } from "./metrics.js";
@@ -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,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
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,4 +1,5 @@
1
1
  export * from "./ledger.js";
2
+ export * from "./settlements.js";
2
3
  export * from "./router.js";
3
4
  export * from "./observe.js";
4
5
  export { loadHarnessMetrics, recordHarnessMetric } from "./metrics.js";
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,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
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
- /** One root incremental-cash ledger. Nested work receives this same instance. */
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 spendUsd;
49
- private valuationUsd;
50
- private overshot;
51
- private unverifiable;
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
- updateHold(leaseId: string, streamedUsd: number): void;
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
@@ -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;AAO3B,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,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,iFAAiF;AACjF,qBAAa,YAAY;IAarB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAdvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;gBAGV,MAAM,GAAE,UAAkC,EAC1C,UAAU,GAAE,iBAA2D,EACvE,IAAI,GAAE;QACrB;;;;;;WAMG;QACH,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;KACjE;IAGR,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,GAAG;IAIX,IAAI,IAAI,WAAW;IAYnB,YAAY,IAAI,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa;IAoD3C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAStD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAsB3D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO7B,KAAK,IAAI,MAAM;IAIf,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,cAAc;IAM1B,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,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,GACnB,gBAAgB,CAIlB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,SAAI,GACb,gBAAgB,CASlB;AAED,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;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpE,gBAAgB,CA0BlB;AAED,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;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAI/F"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
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
- /** One root incremental-cash ledger. Nested work receives this same instance. */
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
- spendUsd = 0;
26
- valuationUsd = 0;
27
- overshot = false;
28
- unverifiable = false;
29
- constructor(budget = { kind: "unlimited" }, thresholds = { soft: 0.75, downgrade: 0.9, hard: 1 }, deps = {}) {
30
- this.budget = budget;
31
- this.thresholds = thresholds;
32
- this.deps = deps;
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.spendUsd > 0 || this.outstandingHolds() > 0 ? "hard" : "ok";
51
- const ratio = (this.spendUsd + this.outstandingHolds()) / cap;
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 ? null : Math.max(0, cap - this.spendUsd - this.outstandingHolds());
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
- updateHold(leaseId, streamedUsd) {
118
- const lease = this.leases.get(leaseId);
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
- if (lease.cost.billing === "proven_zero" || lease.cost.billing === "subscription_entitlement")
122
- return;
123
- const current = this.holds.get(leaseId) ?? 0;
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.leases.get(leaseId);
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 zeroCash = lease.cost.billing === "proven_zero" || lease.cost.billing === "subscription_entitlement";
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
- this.spendUsd += cashUsd;
139
- this.valuationUsd += Math.max(0, settlement.valuationUsd ?? (zeroCash ? (settlement.cashUsd ?? 0) : 0));
140
- if (this.budget.kind === "finite") {
141
- if (!zeroCash && settlement.knowledge === "unknown")
142
- this.unverifiable = true;
143
- if (this.spendUsd > this.budget.maxUsd)
144
- this.overshot = true;
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.deps.onCashSettled?.(this.spendUsd, this.valuationUsd);
167
+ this.localOnCashSettled?.(taskTotals.cashUsd, taskTotals.valuationUsd, taskTotals.cashEstimated, taskTotals.valuationKnowledge ?? "unknown");
147
168
  }
148
169
  cancel(leaseId) {
149
- const lease = this.leases.get(leaseId);
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.spendUsd;
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.valuationUsd;
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
  }
@@ -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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"}
@@ -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.1",
3
+ "version": "3.2.0",
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/schema": "3.1.1",
20
- "@claudexor/util": "3.1.1"
19
+ "@claudexor/schema": "3.2.0",
20
+ "@claudexor/util": "3.2.0"
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",