@tangle-network/agent-eval 0.214.0 → 0.215.1

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.
Files changed (152) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/adapters/http.d.ts +3 -3
  3. package/dist/{agent-profile-BGyt2z8U.d.ts → agent-profile-DmzL8KaJ.d.ts} +5 -5
  4. package/dist/{agent-profile-BGyt2z8U.d.ts.map → agent-profile-DmzL8KaJ.d.ts.map} +1 -1
  5. package/dist/analyst/index.d.ts +13 -13
  6. package/dist/analyst/index.js +7 -7
  7. package/dist/{analyze-runs-BlslTkOJ.d.ts → analyze-runs-BhFLOztS.d.ts} +4 -4
  8. package/dist/{analyze-runs-BlslTkOJ.d.ts.map → analyze-runs-BhFLOztS.d.ts.map} +1 -1
  9. package/dist/{benchmark-command-CMmeV-_Z.js → benchmark-command-CgpGi7vY.js} +9 -9
  10. package/dist/{benchmark-command-CMmeV-_Z.js.map → benchmark-command-CgpGi7vY.js.map} +1 -1
  11. package/dist/benchmarks/index.d.ts +5 -5
  12. package/dist/benchmarks/index.js +3 -3
  13. package/dist/campaign/index.d.ts +7 -7
  14. package/dist/campaign/index.js +4 -4
  15. package/dist/{campaign-Cuw3DQKF.js → campaign-CpnsCgfz.js} +7 -7
  16. package/dist/{campaign-Cuw3DQKF.js.map → campaign-CpnsCgfz.js.map} +1 -1
  17. package/dist/{chat-client-Bnx8NZe4.js → chat-client-DthPOYGd.js} +2 -2
  18. package/dist/{chat-client-Bnx8NZe4.js.map → chat-client-DthPOYGd.js.map} +1 -1
  19. package/dist/{chat-json-call-CZI1NoGZ.js → chat-json-call-BrKsyspg.js} +2 -2
  20. package/dist/{chat-json-call-CZI1NoGZ.js.map → chat-json-call-BrKsyspg.js.map} +1 -1
  21. package/dist/cli.js +3 -3
  22. package/dist/contract/index.d.ts +11 -11
  23. package/dist/contract/index.js +7 -7
  24. package/dist/{cost-ledger-DbQdN3nO.d.ts → cost-ledger-CO7UyEcQ.d.ts} +3 -8
  25. package/dist/{cost-ledger-DbQdN3nO.d.ts.map → cost-ledger-CO7UyEcQ.d.ts.map} +1 -1
  26. package/dist/{cost-ledger-DFOeLeJi.js → cost-ledger-D2FnJPBF.js} +27 -23
  27. package/dist/cost-ledger-D2FnJPBF.js.map +1 -0
  28. package/dist/{default-registry-BAiTePcB.d.ts → default-registry-B4B7GMvI.d.ts} +6 -6
  29. package/dist/{default-registry-BAiTePcB.d.ts.map → default-registry-B4B7GMvI.d.ts.map} +1 -1
  30. package/dist/{default-registry-BhYGMVbV.js → default-registry-KP4-Tolz.js} +3 -3
  31. package/dist/{default-registry-BhYGMVbV.js.map → default-registry-KP4-Tolz.js.map} +1 -1
  32. package/dist/{define-agent-eval-FGtpqnh4.js → define-agent-eval-BdfnqXeP.js} +3 -3
  33. package/dist/{define-agent-eval-FGtpqnh4.js.map → define-agent-eval-BdfnqXeP.js.map} +1 -1
  34. package/dist/{define-agent-eval-CZdBPUkk.d.ts → define-agent-eval-DfXvNho5.d.ts} +8 -8
  35. package/dist/{define-agent-eval-CZdBPUkk.d.ts.map → define-agent-eval-DfXvNho5.d.ts.map} +1 -1
  36. package/dist/diagnosis/index.d.ts +2 -2
  37. package/dist/{dspy-rlm-engine-OMBXVN0u.js → dspy-rlm-engine-DZfHM7kT.js} +3 -3
  38. package/dist/{dspy-rlm-engine-OMBXVN0u.js.map → dspy-rlm-engine-DZfHM7kT.js.map} +1 -1
  39. package/dist/{engine-BzOR5Ygn.d.ts → engine-C37HS2kr.d.ts} +5 -5
  40. package/dist/{engine-BzOR5Ygn.d.ts.map → engine-C37HS2kr.d.ts.map} +1 -1
  41. package/dist/evaluation.d.ts +3 -3
  42. package/dist/evaluation.js +1 -1
  43. package/dist/{exact-types-DjhfZglz.d.ts → exact-types-Dlb73wN4.d.ts} +2 -2
  44. package/dist/{exact-types-DjhfZglz.d.ts.map → exact-types-Dlb73wN4.d.ts.map} +1 -1
  45. package/dist/experiment/index.d.ts +1 -1
  46. package/dist/{external-optimizer-process-DCZx5PdG.js → external-optimizer-process-GngofQML.js} +2 -2
  47. package/dist/{external-optimizer-process-DCZx5PdG.js.map → external-optimizer-process-GngofQML.js.map} +1 -1
  48. package/dist/{external-optimizer-subprocess-CA3aXT8I.js → external-optimizer-subprocess-BUxifb8g.js} +3 -3
  49. package/dist/{external-optimizer-subprocess-CA3aXT8I.js.map → external-optimizer-subprocess-BUxifb8g.js.map} +1 -1
  50. package/dist/{feedback-trajectory-CX01700m.d.ts → feedback-trajectory-BLN_6fEs.d.ts} +3 -3
  51. package/dist/{feedback-trajectory-CX01700m.d.ts.map → feedback-trajectory-BLN_6fEs.d.ts.map} +1 -1
  52. package/dist/fuzz.d.ts +1 -1
  53. package/dist/fuzz.js +1 -1
  54. package/dist/{index-D_rfXep9.d.ts → index-B3WBm953.d.ts} +10 -10
  55. package/dist/{index-D_rfXep9.d.ts.map → index-B3WBm953.d.ts.map} +1 -1
  56. package/dist/{index-BTwxP7L0.d.ts → index-B7m2uzJL.d.ts} +10 -10
  57. package/dist/{index-BTwxP7L0.d.ts.map → index-B7m2uzJL.d.ts.map} +1 -1
  58. package/dist/{index-D0_l25We.d.ts → index-CPJJr98o.d.ts} +2 -2
  59. package/dist/{index-D0_l25We.d.ts.map → index-CPJJr98o.d.ts.map} +1 -1
  60. package/dist/{index-DNgf5gyG.d.ts → index-Ch9VxCpK.d.ts} +2 -2
  61. package/dist/{index-DNgf5gyG.d.ts.map → index-Ch9VxCpK.d.ts.map} +1 -1
  62. package/dist/{index-BWiAAWrk.d.ts → index-tYLUvk_w.d.ts} +8 -8
  63. package/dist/{index-BWiAAWrk.d.ts.map → index-tYLUvk_w.d.ts.map} +1 -1
  64. package/dist/index.d.ts +25 -25
  65. package/dist/index.js +13 -13
  66. package/dist/{integrity-zloavsM_.d.ts → integrity-CCAxGVK6.d.ts} +2 -2
  67. package/dist/{integrity-zloavsM_.d.ts.map → integrity-CCAxGVK6.d.ts.map} +1 -1
  68. package/dist/{judge-gate-B1_O0QIs.d.ts → judge-gate-DNcUrRFA.d.ts} +2 -2
  69. package/dist/{judge-gate-B1_O0QIs.d.ts.map → judge-gate-DNcUrRFA.d.ts.map} +1 -1
  70. package/dist/{kind-factory-CMlOx08-.js → kind-factory-AaEhUADH.js} +2 -2
  71. package/dist/{kind-factory-CMlOx08-.js.map → kind-factory-AaEhUADH.js.map} +1 -1
  72. package/dist/{llm-client-C_o62yG1.js → llm-client-DQveoxSM.js} +2 -2
  73. package/dist/{llm-client-C_o62yG1.js.map → llm-client-DQveoxSM.js.map} +1 -1
  74. package/dist/{llm-judge-Dw0rDpve.js → llm-judge-Cd5s5Ei6.js} +4 -4
  75. package/dist/{llm-judge-Dw0rDpve.js.map → llm-judge-Cd5s5Ei6.js.map} +1 -1
  76. package/dist/matrix/index.d.ts +2 -2
  77. package/dist/{matrix-CQwid3kj.d.ts → matrix-DXVAJMLD.d.ts} +4 -4
  78. package/dist/{matrix-CQwid3kj.d.ts.map → matrix-DXVAJMLD.d.ts.map} +1 -1
  79. package/dist/meta-eval/index.d.ts +2 -2
  80. package/dist/{mint-CDy-brUR.d.ts → mint-DCGoBYhB.d.ts} +2 -2
  81. package/dist/{mint-CDy-brUR.d.ts.map → mint-DCGoBYhB.d.ts.map} +1 -1
  82. package/dist/multishot/golden/index.d.ts +1 -1
  83. package/dist/multishot/index.d.ts +2 -2
  84. package/dist/openapi.json +1 -1
  85. package/dist/{prime-protocol-B7et3tI7.d.ts → prime-protocol-BHia9vDz.d.ts} +3 -3
  86. package/dist/{prime-protocol-B7et3tI7.d.ts.map → prime-protocol-BHia9vDz.d.ts.map} +1 -1
  87. package/dist/{produced-state-C1cTYK6w.js → produced-state-BGp4BX8t.js} +4 -4
  88. package/dist/{produced-state-C1cTYK6w.js.map → produced-state-BGp4BX8t.js.map} +1 -1
  89. package/dist/{registry-BL7H33tj.d.ts → registry-CMYIaDgS.d.ts} +5 -5
  90. package/dist/{registry-BL7H33tj.d.ts.map → registry-CMYIaDgS.d.ts.map} +1 -1
  91. package/dist/{release-confidence-C4kI7lQi.d.ts → release-confidence-BK2QCB5M.d.ts} +3 -3
  92. package/dist/{release-confidence-C4kI7lQi.d.ts.map → release-confidence-BK2QCB5M.d.ts.map} +1 -1
  93. package/dist/reporting.d.ts +3 -3
  94. package/dist/{researcher-DuIJ9IaA.d.ts → researcher-f6mZhh58.d.ts} +5 -5
  95. package/dist/{researcher-DuIJ9IaA.d.ts.map → researcher-f6mZhh58.d.ts.map} +1 -1
  96. package/dist/{reward-hacking-C6Kp54Av.d.ts → reward-hacking-DHA7c1l8.d.ts} +2 -2
  97. package/dist/{reward-hacking-C6Kp54Av.d.ts.map → reward-hacking-DHA7c1l8.d.ts.map} +1 -1
  98. package/dist/rl.d.ts +8 -8
  99. package/dist/rollout/index.d.ts +2 -2
  100. package/dist/{rubric-predictive-validity-BiNNEjpG.d.ts → rubric-predictive-validity-2SgHxoa5.d.ts} +2 -2
  101. package/dist/{rubric-predictive-validity-BiNNEjpG.d.ts.map → rubric-predictive-validity-2SgHxoa5.d.ts.map} +1 -1
  102. package/dist/{run-record-p2AYTrCn.d.ts → run-record-D1Hw-Jml.d.ts} +2 -2
  103. package/dist/{run-record-p2AYTrCn.d.ts.map → run-record-D1Hw-Jml.d.ts.map} +1 -1
  104. package/dist/search/index.d.ts +2 -2
  105. package/dist/{search-kernel-BWp7hfJn.d.ts → search-kernel-BqyBZ9Wm.d.ts} +4 -4
  106. package/dist/{search-kernel-BWp7hfJn.d.ts.map → search-kernel-BqyBZ9Wm.d.ts.map} +1 -1
  107. package/dist/{semantic-concept-judge-sDBNg_mI.js → semantic-concept-judge-BPqbwIVs.js} +6 -6
  108. package/dist/{semantic-concept-judge-sDBNg_mI.js.map → semantic-concept-judge-BPqbwIVs.js.map} +1 -1
  109. package/dist/{server-BRpadnVt.js → server-DbcC7xMl.js} +3 -3
  110. package/dist/{server-BRpadnVt.js.map → server-DbcC7xMl.js.map} +1 -1
  111. package/dist/{skillopt-optimization-method-CvaFGm95.js → skillopt-optimization-method-Dcepr6QL.js} +5 -5
  112. package/dist/{skillopt-optimization-method-CvaFGm95.js.map → skillopt-optimization-method-Dcepr6QL.js.map} +1 -1
  113. package/dist/{statistical-heldout-DZaTo3gZ.d.ts → statistical-heldout-CJTj2EoS.d.ts} +3 -3
  114. package/dist/{statistical-heldout-DZaTo3gZ.d.ts.map → statistical-heldout-CJTj2EoS.d.ts.map} +1 -1
  115. package/dist/{store-otlp-0AiS29kg.js → store-otlp-DWVhUgEj.js} +2 -2
  116. package/dist/{store-otlp-0AiS29kg.js.map → store-otlp-DWVhUgEj.js.map} +1 -1
  117. package/dist/{store-tool-spans-BAcBBSM8.js → store-tool-spans-BNICrhsb.js} +3 -3
  118. package/dist/{store-tool-spans-BAcBBSM8.js.map → store-tool-spans-BNICrhsb.js.map} +1 -1
  119. package/dist/{store-tool-spans-DuvZ4YWb.d.ts → store-tool-spans-BNzls3OD.d.ts} +7 -7
  120. package/dist/{store-tool-spans-DuvZ4YWb.d.ts.map → store-tool-spans-BNzls3OD.d.ts.map} +1 -1
  121. package/dist/{summary-report-CK0ueoJd.d.ts → summary-report-C-CtItCN.d.ts} +2 -2
  122. package/dist/{summary-report-CK0ueoJd.d.ts.map → summary-report-C-CtItCN.d.ts.map} +1 -1
  123. package/dist/{systemone-review-BReh3mvm.d.ts → systemone-review-C4dZgrgN.d.ts} +2 -2
  124. package/dist/{systemone-review-BReh3mvm.d.ts.map → systemone-review-C4dZgrgN.d.ts.map} +1 -1
  125. package/dist/systemone.d.ts +79 -4
  126. package/dist/systemone.d.ts.map +1 -1
  127. package/dist/systemone.js +185 -2
  128. package/dist/systemone.js.map +1 -1
  129. package/dist/{tool-groups-DOriCbkR.d.ts → tool-groups-BKRrtqy4.d.ts} +3 -3
  130. package/dist/tool-groups-BKRrtqy4.d.ts.map +1 -0
  131. package/dist/{trace-questions-RCaYLkwH.d.ts → trace-questions-CLx8vt6t.d.ts} +4 -4
  132. package/dist/{trace-questions-RCaYLkwH.d.ts.map → trace-questions-CLx8vt6t.d.ts.map} +1 -1
  133. package/dist/trace-repair/index.d.ts +3 -3
  134. package/dist/traces.d.ts +6 -6
  135. package/dist/traces.js +3 -3
  136. package/dist/{types-CMnPcbW5.d.ts → types-CGEmVYOk.d.ts} +6 -6
  137. package/dist/{types-CMnPcbW5.d.ts.map → types-CGEmVYOk.d.ts.map} +1 -1
  138. package/dist/{types-Lub7o6bN.d.ts → types-DBZ7keha.d.ts} +2 -2
  139. package/dist/{types-Lub7o6bN.d.ts.map → types-DBZ7keha.d.ts.map} +1 -1
  140. package/dist/{types-KEkKkETv.d.ts → types-DHb5TI36.d.ts} +4 -4
  141. package/dist/{types-KEkKkETv.d.ts.map → types-DHb5TI36.d.ts.map} +1 -1
  142. package/dist/{types-Dj0Qv2qi.d.ts → types-DinHtRJp.d.ts} +3 -3
  143. package/dist/{types-Dj0Qv2qi.d.ts.map → types-DinHtRJp.d.ts.map} +1 -1
  144. package/dist/wire/index.d.ts +3 -3
  145. package/dist/wire/index.js +1 -1
  146. package/docs/campaign-proposers.md +3 -0
  147. package/docs/public-api.md +47 -19
  148. package/docs/systemone-integrations.md +1 -0
  149. package/docs/systemone.md +34 -0
  150. package/package.json +1 -1
  151. package/dist/cost-ledger-DFOeLeJi.js.map +0 -1
  152. package/dist/tool-groups-DOriCbkR.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- import { A as WIRE_VERSION, C as RUBRIC_VERSION_SCHEME, D as TracesIngestRequestSchema, E as TraceEventSchema, O as TracesIngestResponseSchema, S as ListRubricsResponseSchema, T as RubricSchema, _ as FeedbackIngestResponseSchema, a as runRpcBatch, b as JudgeRequestSchema, c as WireError, d as handleListRubrics, f as handleTracesIngest, g as ErrorResponseSchema, h as listBuiltinRubrics, i as dispatchRpc, j as hashRubric, k as VersionResponseSchema, l as handleFeedbackIngest, m as getBuiltinRubric, n as startServer, o as runRpcOnce, p as handleVersion, r as startServerAsync, s as buildOpenApi, t as createApp, u as handleJudge, v as FeedbackTrajectorySchema, w as RubricDimensionSchema, x as JudgeResultSchema, y as HealthResponseSchema } from "../server-BRpadnVt.js";
1
+ import { A as WIRE_VERSION, C as RUBRIC_VERSION_SCHEME, D as TracesIngestRequestSchema, E as TraceEventSchema, O as TracesIngestResponseSchema, S as ListRubricsResponseSchema, T as RubricSchema, _ as FeedbackIngestResponseSchema, a as runRpcBatch, b as JudgeRequestSchema, c as WireError, d as handleListRubrics, f as handleTracesIngest, g as ErrorResponseSchema, h as listBuiltinRubrics, i as dispatchRpc, j as hashRubric, k as VersionResponseSchema, l as handleFeedbackIngest, m as getBuiltinRubric, n as startServer, o as runRpcOnce, p as handleVersion, r as startServerAsync, s as buildOpenApi, t as createApp, u as handleJudge, v as FeedbackTrajectorySchema, w as RubricDimensionSchema, x as JudgeResultSchema, y as HealthResponseSchema } from "../server-DbcC7xMl.js";
2
2
  export { ErrorResponseSchema, FeedbackIngestResponseSchema, FeedbackTrajectorySchema, HealthResponseSchema, JudgeRequestSchema, JudgeResultSchema, ListRubricsResponseSchema, RUBRIC_VERSION_SCHEME, RubricDimensionSchema, RubricSchema, TraceEventSchema, TracesIngestRequestSchema, TracesIngestResponseSchema, VersionResponseSchema, WIRE_VERSION, WireError, buildOpenApi, createApp, dispatchRpc, getBuiltinRubric, handleFeedbackIngest, handleJudge, handleListRubrics, handleTracesIngest, handleVersion, hashRubric, listBuiltinRubrics, runRpcBatch, runRpcOnce, startServer, startServerAsync };
@@ -127,6 +127,9 @@ Pass `context.evaluate` to the optimizer so every candidate is executed and scor
127
127
  Unknown case IDs and calls beyond `maxEvaluations` are rejected.
128
128
 
129
129
  Optimizer-owned model or service calls must use `context.cost.runPaidCall()`.
130
+ Admission derives unresolved calls, reserved amounts, conservative settled spend, and maximum breaches in one record-order pass without constructing reporting summaries.
131
+ Unknown settled costs retain any reserved maximum in the admission total, and unresolved pending calls block new paid work.
132
+
130
133
  The example below assumes the upstream package enforces `maxCostUsd` for the complete run and returns aggregate usage.
131
134
  If the package exposes a model callback instead, wrap each model call separately with the same cost ledger and phase.
132
135
 
@@ -7,11 +7,11 @@ Generated by `pnpm api:census` on demand — this is a dated reading, not a gate
7
7
  | measure | count |
8
8
  | --- | --- |
9
9
  | export subpaths | 33 |
10
- | published value exports (subpath x symbol) | 1584 |
11
- | distinct symbols | 1393 |
10
+ | published value exports (subpath x symbol) | 1612 |
11
+ | distinct symbols | 1413 |
12
12
  | production | 1104 |
13
- | planned | 268 |
14
- | none | 212 |
13
+ | planned | 284 |
14
+ | none | 224 |
15
15
 
16
16
  Type-only exports are not listed: a type binds no runtime surface, and removing one cannot break a caller at run time.
17
17
 
@@ -90,11 +90,12 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
90
90
 
91
91
  ### `.`
92
92
 
93
- 358 value exports — 291 production, 36 planned, 31 none.
93
+ 366 value exports — 291 production, 43 planned, 32 none.
94
94
 
95
95
  | symbol | consumer | evidence |
96
96
  | --- | --- | --- |
97
97
  | `acquisitionPlansForKnowledgeGaps` | production | agent-builder:src/lib/.server/eval/loops/data-acquisition-engine.ts |
98
+ | `addCalibrationVerdicts` | planned | doc: docs/concepts.md |
98
99
  | `admitPolicyEdit` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
99
100
  | `AGENT_PROFILE_KINDS` | production | blueprint-agent:scripts/experiments/lib/agent-profile-cell.ts |
100
101
  | `AgentEvalError` | production | agent-runtime:src/errors.ts |
@@ -117,6 +118,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
117
118
  | `assertCapabilityHeadroom` | production | blueprint-agent:scripts/experiments/lib/validity-gates.ts |
118
119
  | `assertCrossFamily` | production | agent-builder:frontier/judges/artifact-head-to-head.ts |
119
120
  | `assertCrossFamilyServed` | planned | doc: docs/building-doctrine.md |
121
+ | `assertJudgeMayGate` | planned | doc: docs/concepts.md |
120
122
  | `assertNoHiddenLeak` | planned | doc: docs/design/statistics-decisions.md |
121
123
  | `assertNoJudgeVerdict` | production | this package: src/analyst/policy-edit.ts:6 |
122
124
  | `assertProductBenchmarkRun` | production | creative-agent:eval/research-package.ts |
@@ -151,7 +153,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
151
153
  | `canonicalJson` | production | agent-knowledge:src/benchmarks/memory-recovery.ts |
152
154
  | `capabilityHeadroom` | production | blueprint-agent:scripts/experiments/lib/validity-gates.ts |
153
155
  | `captureFetchToRawSink` | production | creative-agent:eval/canonical-runner.ts |
154
- | `certificationEvidenceDigest` | production | this package: src/completion-verifier.ts:38 |
156
+ | `certificationEvidenceDigest` | production | this package: src/completion-verifier.ts:37 |
155
157
  | `checkCanaries` | production | blueprint-agent:scripts/experiments/lib/contamination-preflight.ts |
156
158
  | `checkServedModel` | production | this package: src/integrity/preflight.ts:33 |
157
159
  | `checkTraceContracts` | production | creative-agent:eval/lib/trace-contracts.ts |
@@ -202,6 +204,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
202
204
  | `DECISION_PAIRED_DELTA_STATISTIC` | production | this package: src/campaign/estimate-node.ts:19 |
203
205
  | `DEFAULT_BOUNDED_PROCESS_TIMEOUT_MS` | production | this package: src/command-runner.ts:28 |
204
206
  | `DEFAULT_FAILURE_REASON_RULES` | none | only this package's tests: tests/failure-taxonomy.test.ts:2 |
207
+ | `DEFAULT_JUDGE_GATE_POLICY` | none | — |
205
208
  | `DEFAULT_RED_TEAM_CORPUS` | production | starter-foundry:registry/layers/agent-eval/redteam/files/src/eval/redteam/runner.ts |
206
209
  | `DEFAULT_TRACE_ANALYST_BUDGETS` | production | agent-builder:src/lib/.server/eval/stores/d1-trace-analysis-store-adapter.ts |
207
210
  | `DEFAULT_TRACE_ANALYST_KINDS` | production | agent-dev-container:products/intelligence/api/src/lib/deep-trace-analyst.ts |
@@ -236,7 +239,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
236
239
  | `exportRunAsOtlp` | production | agent-builder:src/lib/.server/eval/analysts/canonical-trace-analyst.ts |
237
240
  | `extractErrorCount` | production | blueprint-agent:scripts/experiments/lib/error-count-extractor.ts |
238
241
  | `extractProducedState` | production | agent-app:src/eval/index.ts |
239
- | `extractUsage` | production | this package: src/contract/intake/code-agent-session.ts:12 |
242
+ | `extractUsage` | production | this package: src/contract/intake/code-agent-session.ts:13 |
240
243
  | `extractUsageFromSse` | production | this package: src/trace/capture-fetch.ts:8 |
241
244
  | `FAILURE_BLAME` | none | only this package's tests: tests/failure-taxonomy.test.ts:2 |
242
245
  | `FAILURE_CLASSES` | production | agent-dev-container:products/intelligence/api/src/lib/deep-trace-analyst.ts |
@@ -288,6 +291,8 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
288
291
  | `judgeAgreementView` | production | insurance-agent:scripts/analyze-agent-eval-evidence.ts |
289
292
  | `JudgeError` | production | agent-runtime:src/errors.ts |
290
293
  | `judgeFamily` | production | agent-builder:frontier/judges/llm.ts |
294
+ | `judgeGateDecision` | planned | doc: docs/concepts.md |
295
+ | `JudgeGateRefusedError` | planned | doc: docs/concepts.md |
291
296
  | `judgeSpans` | production | this package: src/builder-eval/three-layer-eval.ts:25 |
292
297
  | `knowledgeReadinessTracePayload` | production | agent-dev-container:products/intelligence/api/src/routes/project-engines.ts |
293
298
  | `leaderboard` | production | blueprint-agent:scripts/experiments/lib/cross-harness-leaderboard.ts |
@@ -309,6 +314,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
309
314
  | `mcnemar` | production | blueprint-agent:scripts/experiments/analyze-convergence.ts |
310
315
  | `mcnemarPower` | production | discovery:research/e1-topology-20260920/gate/gate.mjs |
311
316
  | `mcnemarRequiredN` | production | blueprint-agent:scripts/experiments/analyze-convergence.ts |
317
+ | `measureJudgeAgreement` | planned | doc: docs/concepts.md |
312
318
  | `minimumPairsForPairedDeltaTest` | production | agent-dev-container:products/intelligence/api/src/routes/optimizations.ts |
313
319
  | `mintRolloutRows` | production | blueprint-agent:scripts/experiments/lib/vb-climb.ts |
314
320
  | `MODEL_PRICING` | production | supervisor-lab:archive/bench/profile-arena.ts |
@@ -373,6 +379,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
373
379
  | `redTeamDataset` | production | creative-agent:eval/red-team.ts |
374
380
  | `redTeamReport` | production | creative-agent:eval/red-team.ts |
375
381
  | `regexMatches` | none | only this package's tests: src/oracle.test.ts:2 |
382
+ | `registerCalibrationSet` | planned | doc: docs/concepts.md |
376
383
  | `renderPreferenceMemoryMarkdown` | production | agent-builder:src/lib/.server/eval/loops/auto-research-runner.ts |
377
384
  | `repeatedActionDetector` | production | agent-runtime:src/runtime/supervise/detector-monitor.ts |
378
385
  | `requiredPairedSampleSize` | production | discovery:research/e1-topology-20260920/gate/gate.mjs |
@@ -409,6 +416,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
409
416
  | `ServedCrossFamilyError` | none | only this package's tests: src/integrity/served-model.test.ts:2 |
410
417
  | `servedModelAcceptable` | production | this package: src/integrity/preflight.ts:33 |
411
418
  | `shareAllowed` | production | agent-dev-container:products/intelligence/api/src/lib/search-blobs.ts |
419
+ | `snapshotFromJudgeAgreement` | planned | doc: docs/concepts.md |
412
420
  | `spanRecordsToTraceAnalysisStore` | production | agent-dev-container:products/intelligence/api/src/lib/pg-trace-analyst-store.ts |
413
421
  | `spearmanR` | production | this package: scripts/synthetic-search-ledger.ts:71 |
414
422
  | `stripFencedJson` | production | agent-builder:src/lib/.server/eval/router-llm-client.ts |
@@ -824,7 +832,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
824
832
 
825
833
  ### `./contract`
826
834
 
827
- 62 value exports — 41 production, 15 planned, 6 none.
835
+ 63 value exports — 41 production, 15 planned, 7 none.
828
836
 
829
837
  | symbol | consumer | evidence |
830
838
  | --- | --- | --- |
@@ -848,6 +856,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
848
856
  | `fromKimiCodeSession` | planned | doc: docs/code-agent-intake.md |
849
857
  | `fromOpenCodeSession` | planned | doc: docs/code-agent-intake.md |
850
858
  | `fromOtelSpans` | production | agent-dev-container:packages/intelligence-kernel/src/deterministic.ts |
859
+ | `fromPiGraphSession` | none | only this package's tests: tests/contract-code-agent-intake.test.ts:6 |
851
860
  | `fromPiSession` | planned | doc: docs/code-agent-intake.md |
852
861
  | `fromRunRecordDir` | production | this package: src/contract/eval-reporting-suite.ts:25 |
853
862
  | `fsCampaignStorage` | production | agent-dev-container:products/intelligence/api/src/lib/eval-engine.ts |
@@ -859,7 +868,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
859
868
  | `makeProposalFinding` | production | agent-lab:projects/playproof/code-surface.ts |
860
869
  | `measuredComparisonFromAgentProfileImprovementExperiment` | production | agent-runtime:src/intelligence/authored-profile-improvement.ts |
861
870
  | `measuredComparisonFromCandidateExperiment` | production | agent-runtime:src/intelligence/improvement-cycle.ts |
862
- | `observeCodeAgentSession` | production | this package: src/contract/intake/code-agent-session.ts:13 |
871
+ | `observeCodeAgentSession` | production | this package: src/contract/intake/code-agent-session.ts:14 |
863
872
  | `observeCodeAgentStore` | none | only this package's tests: tests/contract-code-agent-store.test.ts:5 |
864
873
  | `paretoPolicy` | planned | named in discovery-lab (bind not in the import graph) |
865
874
  | `paretoSignificanceGate` | production | agent-app:src/eval-campaign/index.ts |
@@ -946,7 +955,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
946
955
  | `eProcess` | production | this package: src/campaign/gates/sequential.ts:37 |
947
956
  | `evaluateCondition` | planned | named in agent-dev-container (bind not in the import graph) |
948
957
  | `evaluateHaltRule` | production | this package: src/experiment/define.ts:20 |
949
- | `evaluateHypothesis` | none | only this package's tests: tests/tier2.test.ts:8 |
958
+ | `evaluateHypothesis` | none | only this package's tests: tests/tier2.test.ts:4 |
950
959
  | `evaluateIdentityGate` | production | this package: src/experiment/define.ts:20 |
951
960
  | `evaluateOracleDeterminismGate` | production | this package: src/experiment/define.ts:20 |
952
961
  | `evaluatePopulationReproducibilityGate` | production | this package: src/experiment/define.ts:20 |
@@ -1066,7 +1075,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1066
1075
 
1067
1076
  ### `./ledger-core`
1068
1077
 
1069
- 20 value exports — 19 production, 1 planned, 0 none.
1078
+ 28 value exports — 19 production, 1 planned, 8 none.
1070
1079
 
1071
1080
  | symbol | consumer | evidence |
1072
1081
  | --- | --- | --- |
@@ -1079,6 +1088,12 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1079
1088
  | `LEDGER_HASH_PATTERN` | production | blueprint-agent:scripts/experiments/lib/causal-analytics.ts |
1080
1089
  | `LedgerCanonicalizationError` | planned | named in blueprint-agent (bind not in the import graph) |
1081
1090
  | `MemoryLedgerJournal` | production | this package: src/campaign/search-ledger.ts:23 |
1091
+ | `MERKLE_EMPTY_ROOT` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1092
+ | `merkleConsistencyProof` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1093
+ | `merkleInclusionProof` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1094
+ | `merkleLeafHash` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1095
+ | `merkleRoot` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1096
+ | `merkleSalt` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1082
1097
  | `probeAtomicFileLock` | production | this package: src/campaign/single-run-lock.ts:17 |
1083
1098
  | `projectorSnapshotPathFor` | production | this package: src/ledger-core/journal.ts:48 |
1084
1099
  | `readProjectorSnapshotFile` | production | this package: src/ledger-core/journal.ts:48 |
@@ -1088,6 +1103,8 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1088
1103
  | `tryAcquireAtomicFileLock` | production | discovery-lab:runner/evidence-review.mjs |
1089
1104
  | `tryWithLedgerFileLock` | production | discovery-lab:experiments/diu-campaign-v1/launch-wave-cloud.mjs |
1090
1105
  | `verifyEntriesAgainstTrustedHead` | production | this package: src/ledger-core/journal.ts:55 |
1106
+ | `verifyMerkleConsistency` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1107
+ | `verifyMerkleInclusion` | none | only this package's tests: src/ledger-core/merkle.test.ts:4 |
1091
1108
  | `withLedgerFileLock` | production | this package: src/analyst/benchmark-response-cache.ts:6 |
1092
1109
  | `writeLedgerFileAtomically` | production | discovery-lab:experiments/diu-campaign-v1/launch-wave-cloud.mjs |
1093
1110
 
@@ -1103,10 +1120,12 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1103
1120
 
1104
1121
  ### `./meta-eval`
1105
1122
 
1106
- 35 value exports — 27 production, 7 planned, 1 none.
1123
+ 43 value exports — 27 production, 14 planned, 2 none.
1107
1124
 
1108
1125
  | symbol | consumer | evidence |
1109
1126
  | --- | --- | --- |
1127
+ | `addCalibrationVerdicts` | planned | doc: docs/concepts.md |
1128
+ | `assertJudgeMayGate` | planned | doc: docs/concepts.md |
1110
1129
  | `auditEvaluator` | production | agent-dev-container:products/intelligence/api/src/lib/measurement-factory.ts |
1111
1130
  | `auditProbabilityPolicy` | planned | doc: docs/changes/probability-policy-audit.md |
1112
1131
  | `brierScore` | production | discovery-lab:experiments/decision-bench-v1/score.mjs |
@@ -1118,6 +1137,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1118
1137
  | `clusterBootstrapMean` | production | discovery-lab:experiments/decision-bench-v1/score.mjs |
1119
1138
  | `continuousAgreement` | production | agent-builder:frontier/judges/eval-validity.ts |
1120
1139
  | `correlationStudy` | production | ph0ny:products/builder/api/src/eval/outcomes.ts |
1140
+ | `DEFAULT_JUDGE_GATE_POLICY` | none | — |
1121
1141
  | `definePlant` | production | discovery-lab:experiments/e1-checker/score.mjs |
1122
1142
  | `evalHealthStamp` | production | creative-agent:eval/lib/judge-sentinel.ts |
1123
1143
  | `evaluatorAdmissionPolicySchema` | production | agent-dev-container:products/intelligence/api/src/lib/measurement-factory.ts |
@@ -1125,8 +1145,11 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1125
1145
  | `fileSentinelStore` | production | creative-agent:eval/lib/judge-sentinel.ts |
1126
1146
  | `FileSystemOutcomeStore` | production | ph0ny:products/builder/api/src/eval/outcomes.ts |
1127
1147
  | `InMemoryOutcomeStore` | planned | consumer tests: ph0ny:products/builder/api/src/eval/outcomes-correlate.test.ts |
1128
- | `inMemorySentinelStore` | none | only this package's tests: tests/judge-sentinel.test.ts:7 |
1148
+ | `inMemorySentinelStore` | none | only this package's tests: src/meta-eval/judge-gate.test.ts:2 |
1149
+ | `judgeGateDecision` | planned | doc: docs/concepts.md |
1150
+ | `JudgeGateRefusedError` | planned | doc: docs/concepts.md |
1129
1151
  | `judgeSentinelReport` | production | creative-agent:eval/lib/judge-sentinel.ts |
1152
+ | `measureJudgeAgreement` | planned | doc: docs/concepts.md |
1130
1153
  | `multiclassBrierScore` | production | discovery-lab:experiments/decision-bench-v1/score.mjs |
1131
1154
  | `OutcomeStoreError` | planned | doc: docs/outcome-validity.md |
1132
1155
  | `perturbEvidence` | planned | doc: docs/plants.md |
@@ -1134,11 +1157,13 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1134
1157
  | `plantByPerturbation` | planned | doc: docs/plants.md |
1135
1158
  | `positionalBias` | production | ph0ny:products/builder/api/src/eval/judge-bias.ts |
1136
1159
  | `rankedProbabilityScore` | production | discovery-lab:experiments/decision-bench-v1/score.mjs |
1160
+ | `registerCalibrationSet` | planned | doc: docs/concepts.md |
1137
1161
  | `rubricPredictiveValidity` | production | physim:apps/server/src/scripts/agent-eval/validate-rubrics.ts |
1138
1162
  | `seedPlants` | production | discovery-lab:experiments/e1-checker/score.mjs |
1139
1163
  | `selfPreference` | production | ph0ny:products/builder/api/src/eval/judge-bias.ts |
1140
1164
  | `snapshotFromAgreement` | production | physim:apps/server/src/scripts/agent-eval/judge-sentinel.ts |
1141
1165
  | `snapshotFromCalibration` | production | gtm-agent:eval/calibrate-judges.ts |
1166
+ | `snapshotFromJudgeAgreement` | planned | doc: docs/concepts.md |
1142
1167
  | `snapshotFromSentinelSet` | production | creative-agent:eval/lib/judge-sentinel.ts |
1143
1168
  | `validateSentinelSnapshot` | production | creative-agent:eval/lib/judge-sentinel.ts |
1144
1169
  | `verbosityBias` | production | blueprint-agent:scripts/experiments/calibration/judge-agreement.ts |
@@ -1341,7 +1366,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1341
1366
 
1342
1367
  ### `./rollout`
1343
1368
 
1344
- 68 value exports — 45 production, 13 planned, 10 none.
1369
+ 69 value exports — 45 production, 13 planned, 11 none.
1345
1370
 
1346
1371
  | symbol | consumer | evidence |
1347
1372
  | --- | --- | --- |
@@ -1354,13 +1379,13 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1354
1379
  | `ATIF_SCHEMA_VERSION` | none | only this package's tests: src/rollout/interchange/harbor.test.ts:6 |
1355
1380
  | `buildDatasetCard` | production | this package: src/rollout/release/hf-dataset.ts:25 |
1356
1381
  | `buildHfDataset` | production | supervisor-lab:archive/bench/vertical-rollout-package.ts |
1357
- | `claudeProjectSlug` | none | only this package's tests: src/rollout/readers/claude-jsonl.test.ts:5 |
1382
+ | `claudeProjectSlug` | none | only this package's tests: src/rollout/readers/claude-jsonl.test.ts:11 |
1358
1383
  | `DEFAULT_CLAUDE_PROJECTS_DIR` | planned | named in discovery-lab (bind not in the import graph) |
1359
1384
  | `DEFAULT_OPENCODE_DB` | planned | named in discovery-lab (bind not in the import graph) |
1360
1385
  | `defaultRolloutScrubber` | production | supervisor-lab:archive/bench/vertical-rollout-package.ts |
1361
1386
  | `emptyScrubCounts` | production | this package: src/rollout/release/hf-dataset.ts:34 |
1362
1387
  | `findClaudeTranscripts` | planned | doc: docs/rollout.md |
1363
- | `findOpencodeSessionsByDirectory` | none | only this package's tests: src/rollout/readers/opencode-sqlite.test.ts:6 |
1388
+ | `findOpencodeSessionsByDirectory` | none | only this package's tests: src/rollout/readers/opencode-sqlite.test.ts:7 |
1364
1389
  | `FORMAT_FILES` | production | this package: src/rollout/release/hf-dataset.ts:25 |
1365
1390
  | `FORMAT_GATE_DISPOSITION` | production | this package: src/rollout/release/card.ts:12 |
1366
1391
  | `fromHarborTrajectory` | planned | doc: docs/rollout.md |
@@ -1379,11 +1404,11 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1379
1404
  | `mintRolloutRows` | production | blueprint-agent:scripts/experiments/lib/vb-climb.ts |
1380
1405
  | `observedScore` | production | this package: src/rl/reward-hacking.ts:40 |
1381
1406
  | `observedSplitScore` | production | starter-foundry:src/lib/held-out-gate.ts |
1382
- | `openOpencodeDb` | production | super-agent:evals/conversation-application.ts |
1383
1407
  | `parseClaudeTranscript` | planned | doc: docs/rollout.md |
1384
1408
  | `parseRolloutReleaseArgs` | none | only this package's tests: src/rollout/release/hf-dataset.test.ts:9 |
1385
1409
  | `planPushCommand` | none | only this package's tests: src/rollout/release/hf-dataset.test.ts:9 |
1386
1410
  | `readClaudeTranscript` | production | blueprint-agent:scripts/experiments/lib/vb-climb-coder.ts |
1411
+ | `readOpencodeSession` | none | only this package's tests: src/rollout/readers/opencode-sqlite.test.ts:7 |
1387
1412
  | `readOpencodeSessionMessages` | production | super-agent:evals/conversation-application.ts |
1388
1413
  | `readRolloutJournal` | none | only this package's tests: src/rollout/ledger.test.ts:6 |
1389
1414
  | `readRolloutLedger` | production | this package: src/rollout/release/hf-dataset.ts:23 |
@@ -1410,6 +1435,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1410
1435
  | `toVerifiersRolloutOutputs` | production | this package: src/rollout/release/hf-dataset.ts:22 |
1411
1436
  | `trainingReward` | production | supervisor-lab:archive/bench/vertical-gate-proof.ts |
1412
1437
  | `trainingScore` | production | this package: src/eval-trace-store.ts:20 |
1438
+ | `transcriptFromSession` | production | this package: src/supervisor-run/claude-code-reader.ts:67 |
1413
1439
  | `unmintableReasons` | production | supervisor-lab:archive/bench/mint-audit.ts |
1414
1440
  | `validateRolloutLine` | production | this package: src/supervisor-run/integrity-tree.ts:1 |
1415
1441
  | `writeRolloutLedger` | production | blueprint-agent:scripts/experiments/lib/vb-climb.ts |
@@ -1507,12 +1533,13 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1507
1533
 
1508
1534
  ### `./systemone`
1509
1535
 
1510
- 18 value exports — 10 production, 8 planned, 0 none.
1536
+ 20 value exports — 10 production, 10 planned, 0 none.
1511
1537
 
1512
1538
  | symbol | consumer | evidence |
1513
1539
  | --- | --- | --- |
1514
1540
  | `asAnalyst` | production | this package: src/systemone.ts:5 |
1515
1541
  | `asJudge` | production | this package: src/systemone.ts:5 |
1542
+ | `assessSystemOneDomainMatch` | planned | doc: docs/systemone-integrations.md |
1516
1543
  | `assessSystemOneReview` | planned | doc: docs/changes/systemone-provider-neutral.md |
1517
1544
  | `createEvaluator` | production | blueprint-agent:scripts/experiments/app-grade/drive.ts |
1518
1545
  | `normalizedSystemOneScore` | planned | doc: docs/changes/systemone-provider-neutral.md |
@@ -1521,6 +1548,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1521
1548
  | `parseSystemOneRecordedRequest` | planned | example: examples/systemone-replay.ts:7 |
1522
1549
  | `parseSystemOneRequest` | production | discovery-lab:experiments/diu-campaign-v1/jev-review.mjs |
1523
1550
  | `parseSystemOneResult` | production | discovery-lab:experiments/decision-bench-v1/score.mjs |
1551
+ | `prepareSystemOneDomainMatch` | planned | doc: docs/systemone-integrations.md |
1524
1552
  | `prepareSystemOneReview` | production | this package: src/rl/claim-integrity.ts:47 |
1525
1553
  | `systemOneAnalyst` | planned | example: examples/systemone-behavior-review.ts:3 |
1526
1554
  | `systemOneConfidence` | planned | doc: docs/changes/systemone-provider-neutral.md |
@@ -1716,7 +1744,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1716
1744
  | `emptyRedactionReport` | production | agent-runtime:src/candidate-execution/protected-redaction.ts |
1717
1745
  | `exportRunAsOtlp` | production | agent-builder:src/lib/.server/eval/analysts/canonical-trace-analyst.ts |
1718
1746
  | `extractOtlpAttributes` | production | this package: src/trace-analyst/store-otlp.ts:40 |
1719
- | `extractUsage` | production | this package: src/contract/intake/code-agent-session.ts:12 |
1747
+ | `extractUsage` | production | this package: src/contract/intake/code-agent-session.ts:13 |
1720
1748
  | `extractUsageFromResponse` | none | only this package's tests: src/trace/extract-usage.test.ts:2 |
1721
1749
  | `extractUsageFromSse` | production | this package: src/trace/capture-fetch.ts:8 |
1722
1750
  | `FAILURE_CLASSES` | production | agent-dev-container:products/intelligence/api/src/lib/deep-trace-analyst.ts |
@@ -16,6 +16,7 @@ asJudge and asAnalyst adapt the same operation to existing consumers.
16
16
  | Next verification | Choose a test, retrieval or review that resolves uncertainty | Existing graph checkpoints and awaited boundaries, not new permissions. |
17
17
  | Candidate selection | Choose among generated plans or artifacts | Existing matrix/graph, exact checks first, semantic assessment second. |
18
18
  | Configuration experiments | Compare questions, context, models and thresholds | examples/systemone-decision-benchmark.ts using runAgentMatrix and cost receipts. |
19
+ | Domain classification | Match bounded evidence to a product intent and caller-owned categories | prepareSystemOneDomainMatch plus assessSystemOneDomainMatch; positive matches require a qualified category and exact source. |
19
20
 
20
21
  These are compositions, not ten new frameworks. Product triage and the benchmark recipe are concrete
21
22
  adoption work; other rows reuse existing APIs or identify application policies to configure. An API
package/docs/systemone.md CHANGED
@@ -62,6 +62,40 @@ add their own limits: Clef requires non-null `instructions`, 1–64 questions wi
62
62
  exact answer names and choice-label unions. Runtime JSON must be validated; its
63
63
  labels cannot become compile-time literals automatically.
64
64
 
65
+ ## DomainMatch
66
+
67
+ `prepareSystemOneDomainMatch` builds a frozen three-question classification for products that need
68
+ relevance, a caller-owned category, and an exact source segment. `assessSystemOneDomainMatch`
69
+ revalidates the retained answer and returns `match`, `no_match`, or `uncertain` without another
70
+ model call. It does not choose a domain taxonomy, threshold, credential, endpoint, or effect.
71
+
72
+ ```ts
73
+ const prepared = prepareSystemOneDomainMatch({
74
+ version: 'health-v1',
75
+ model: selectedModel,
76
+ intent: 'Find personal health correspondence, not general wellness marketing.',
77
+ categories: { lab_result: 'A medical laboratory result', appointment: 'An appointment' },
78
+ evidence: [{ id: 'email-1', text: emailText }],
79
+ coverage: 'complete',
80
+ thresholds: {
81
+ matchAtLeast: 0.8,
82
+ noMatchAtLeast: 0.8,
83
+ categoryAtLeast: 0.7,
84
+ sourceAtLeast: 0.7,
85
+ minimumMargin: 0.2,
86
+ },
87
+ })
88
+ const observation = await evaluate(prepared.request, { signal, idempotencyKey })
89
+ const decision = assessSystemOneDomainMatch(prepared, observation.value)
90
+ ```
91
+
92
+ A positive match requires the match, category, and source questions to pass their thresholds and
93
+ margins. Missing evidence stays unresolved; partial evidence can support a match but cannot refute
94
+ one. The report retains native probabilities and an exact host-supplied evidence segment. Those
95
+ probabilities are not calibrated domain confidence, and a result never authorizes storage, hiding,
96
+ sending, deletion, or another effect. Re-assessing the same prepared input and retained answer is
97
+ an offline replay, not new inference.
98
+
65
99
  ## Providers, rounding and confidence
66
100
 
67
101
  The wire format is the same for every provider; how each reports its numbers is not. A
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-eval",
3
- "version": "0.214.0",
3
+ "version": "0.215.1",
4
4
  "description": "Evaluate and improve AI agents from runs, traces, judges, and feedback. Compare candidates, cluster failures, measure lift, and gate releases.",
5
5
  "homepage": "https://github.com/tangle-network/agent-eval#readme",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"cost-ledger-DFOeLeJi.js","names":[],"sources":["../src/cost-ledger.ts"],"sourcesContent":["import { z } from 'zod'\nimport { ValidationError } from './errors'\nimport { estimateCost, isModelPriced, resolveModelPricing } from './metrics'\n\nexport type CostChannel = 'agent' | 'judge' | 'verifier' | 'analyst' | 'driver' | (string & {})\n\n/** How a USD amount was obtained. */\nexport type CostProvenance =\n | { kind: 'observed'; usd: number }\n | { kind: 'estimated'; usd: number }\n | { kind: 'uncaptured'; usd: null }\n\nexport interface CostUsage {\n inputTokens: number\n /** Includes reasoning tokens when the provider bills them as output. */\n outputTokens: number\n /** Reasoning-token subset of outputTokens, when reported. */\n reasoningTokens?: number\n /** Prompt tokens served from a provider cache. */\n cachedTokens?: number\n /** Prompt tokens written into a provider cache. */\n cacheWriteTokens?: number\n}\n\ninterface CostCallBase {\n callId: string\n channel: CostChannel\n phase: string\n actor: string\n model: string\n maximumCostUsd?: number\n tags?: Record<string, string>\n timestamp: number\n}\n\nexport interface PendingCostCall extends CostCallBase {\n status: 'pending'\n}\n\nexport interface PendingCostCallView extends PendingCostCall {\n state: 'active' | 'late' | 'interrupted'\n}\n\nexport interface CostReceipt extends CostCallBase, CostUsage {\n status: 'settled'\n costUsd: number\n costUnknown: boolean\n usageUnknown?: boolean\n /** Rates used to estimate cost locally. Absent when cost is provider-reported or unknown. */\n pricing?: {\n inputUsdPerThousand: number\n cachedInputUsdPerThousand?: number\n cacheWriteUsdPerThousand?: number\n outputUsdPerThousand: number\n }\n /** Cost reported by the provider, not a local token-price calculation. */\n actualCostUsd?: number\n /** Known non-provider amount supplied by an external executor. */\n estimatedCostUsd?: number\n /** Why the call failed. `'paid-call-failed'` is the ledger's own value for\n * recovery settles; a reconciling caller may record its own reason. */\n error?: string\n}\n\nexport type CostLedgerRecord = PendingCostCall | CostReceipt\n\nexport interface CostReceiptInput extends CostUsage {\n model: string\n /** Caller-supplied rates for a local estimate when the provider does not report billed cost. */\n customTokenPricing?: CustomTokenPricing\n actualCostUsd?: number\n /** A known estimate from an external executor that cannot provide token pricing. */\n estimatedCostUsd?: number\n costUnknown?: boolean\n usageUnknown?: boolean\n}\n\n/** Per-million token rates for a model or endpoint not covered by package pricing. */\nexport interface CustomTokenPricing {\n /** Non-cached input tokens. */\n inputUsdPerMillion: number\n /** Cache-read tokens. Falls back to the normal input rate when omitted. */\n cachedInputUsdPerMillion?: number\n /** Cache-creation or cache-write tokens. Falls back to the normal input rate when omitted. */\n cacheWriteUsdPerMillion?: number\n outputUsdPerMillion: number\n}\n\nexport type MaximumCharge =\n | { externallyEnforcedMaximumUsd: number }\n | ({\n customTokenPricing: CustomTokenPricing\n } & Pick<CostUsage, 'inputTokens' | 'outputTokens' | 'cachedTokens' | 'cacheWriteTokens'>)\n | ({ model: string } & CostUsage)\n\nexport interface RunPaidCallInput<T> {\n callId?: string\n channel: CostChannel\n phase: string\n actor: string\n /** Used before a provider receipt exists and on failures without one. */\n model?: string\n tags?: Record<string, string>\n signal?: AbortSignal\n /** Provider-enforced dollar maximum, or maximum token usage with known pricing. Required when capped. */\n maximumCharge?: MaximumCharge\n /** `callId` can be forwarded as the provider's idempotency key. */\n execute(signal: AbortSignal, callId: string): Promise<T>\n receipt(value: T): CostReceiptInput\n receiptFromError?(error: Error): CostReceiptInput | undefined\n}\n\nexport type PaidCallResult<T> =\n | { succeeded: true; callId: string; value: T; receipt: CostReceipt }\n | { succeeded: false; callId?: string; error: Error; receipt?: CostReceipt }\n\nexport interface ChannelRollup {\n channel: CostChannel\n calls: number\n inputTokens: number\n outputTokens: number\n reasoningTokens?: number\n cachedTokens: number\n cacheWriteTokens?: number\n costUsd: number\n unpricedCalls: number\n unknownUsageCalls: number\n}\n\nexport interface CostLedgerSummary {\n totalCalls: number\n pendingCalls: number\n unresolvedCalls: number\n reservedCostUsd: number\n inputTokens: number\n outputTokens: number\n reasoningTokens?: number\n cachedTokens: number\n cacheWriteTokens?: number\n totalCostUsd: number\n costProvenance: CostProvenance\n byChannel: ChannelRollup[]\n unpricedModels: string[]\n fullyPriced: boolean\n usageComplete: boolean\n accountingComplete: boolean\n incompleteReasons: string[]\n}\n\nexport interface CostLedgerFilter {\n channel?: CostChannel\n phase?: string\n tags?: Record<string, string>\n}\n\nexport interface CostLedgerWaitOptions {\n /** Maximum time to wait for active provider calls. Default 5 seconds. */\n timeoutMs?: number\n /** Wait only for calls matching this attribution filter. */\n filter?: CostLedgerFilter\n}\n\n/** Append-only storage. `append` must atomically reject stale revisions. */\nexport interface CostLedgerPersistence {\n read(): { revision: string; events: string }\n append(expectedRevision: string, event: string): string | undefined\n}\n\nexport interface CostLedgerOptions {\n costCeilingUsd?: number\n persistence?: CostLedgerPersistence\n /** Import already-settled receipts without admitting new paid work. */\n receipts?: readonly CostReceipt[]\n}\n\nexport class CostCeilingReachedError extends ValidationError {\n constructor(\n ceilingUsd: number,\n committedUsd: number,\n requestedUsd: number,\n phase: string,\n actor: string,\n ) {\n super(\n `CostLedger: reserving ${requestedUsd} for '${actor}' during '${phase}' would exceed ceiling ${ceilingUsd} with ${committedUsd} already committed`,\n )\n }\n}\n\nexport class CostAccountingIncompleteError extends ValidationError {}\n\nexport class CostReservationExceededError extends ValidationError {\n constructor(actor: string, actualUsd: number, maximumUsd: number) {\n super(\n `CostLedger: '${actor}' charged ${actualUsd}, exceeding its enforced maximum ${maximumUsd}`,\n )\n }\n}\n\nexport class CostCallConflictError extends ValidationError {\n readonly callId?: string\n readonly receipt?: CostReceipt\n\n constructor(\n message: string,\n options: { callId?: string; receipt?: CostReceipt; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause })\n this.callId = options.callId\n this.receipt = options.receipt ? cloneReceipt(options.receipt) : undefined\n }\n}\n\nexport class CostLedgerPersistenceError extends ValidationError {\n readonly callId?: string\n readonly receipt?: CostReceipt\n\n constructor(cause: unknown, callId?: string, receipt?: CostReceipt) {\n super(\n `CostLedger: failed to persist${callId ? ` call '${callId}'` : ''}: ${toError(cause).message}`,\n { cause },\n )\n this.callId = callId\n this.receipt = receipt ? cloneReceipt(receipt) : undefined\n }\n}\n\nexport class CostReceiptCaptureError extends ValidationError {\n readonly callId: string\n readonly receipt?: CostReceipt\n readonly receiptError: Error\n\n constructor(callId: string, cause: unknown, receiptError: unknown, receipt?: CostReceipt) {\n super(`CostLedger: could not capture the provider receipt for call '${callId}'`, { cause })\n this.callId = callId\n this.receipt = receipt ? cloneReceipt(receipt) : undefined\n this.receiptError = toError(receiptError)\n }\n}\n\ninterface PendingCostCallEvent {\n version: 1\n record: PendingCostCall\n}\n\ninterface SettledCostCallEvent {\n version: 2\n record: CostReceipt\n}\n\ninterface CompletedTasksEvent {\n version: 1\n completedTasks: number\n}\n\ninterface CostLimitEvent {\n version: 1\n costCeilingUsd: number\n}\n\ntype CostCallEvent = PendingCostCallEvent | SettledCostCallEvent\ntype CostLedgerEvent = CostCallEvent | CompletedTasksEvent | CostLimitEvent\n\n/** Run-wide paid-call admission, durable call state, receipts, and summaries. */\nexport class CostLedger {\n private readonly records = new Map<string, CostLedgerRecord>()\n private readonly activeCallIds = new Set<string>()\n private readonly lateCallIds = new Set<string>()\n private readonly idleWaiters = new Set<() => void>()\n private completedTasks = 0\n private revision = 'memory'\n private costLimitPersisted = false\n readonly costCeilingUsd?: number\n private readonly persistence?: CostLedgerPersistence\n\n constructor(input?: number | CostLedgerOptions) {\n const options = typeof input === 'number' ? { costCeilingUsd: input } : (input ?? {})\n this.persistence = options.persistence\n if (options.costCeilingUsd !== undefined) {\n assertNonNegative(options.costCeilingUsd, 'costCeilingUsd')\n }\n\n let persistedCostCeilingUsd: number | undefined\n if (this.persistence) {\n let stored: ReturnType<CostLedgerPersistence['read']>\n try {\n stored = this.persistence.read()\n } catch (cause) {\n throw new CostLedgerPersistenceError(cause)\n }\n assertString(stored.revision, 'persistence revision')\n this.revision = stored.revision\n const restored = parseEvents(stored.events)\n for (const record of restored.records) this.records.set(record.callId, record)\n this.completedTasks = restored.completedTasks\n persistedCostCeilingUsd = restored.costCeilingUsd\n }\n\n if (\n options.costCeilingUsd !== undefined &&\n persistedCostCeilingUsd !== undefined &&\n options.costCeilingUsd !== persistedCostCeilingUsd\n ) {\n throw new ValidationError(\n `CostLedger: requested cost ceiling ${options.costCeilingUsd} does not match persisted ceiling ${persistedCostCeilingUsd}`,\n )\n }\n this.costCeilingUsd = persistedCostCeilingUsd ?? options.costCeilingUsd\n this.costLimitPersisted =\n !this.persistence ||\n this.costCeilingUsd === undefined ||\n persistedCostCeilingUsd !== undefined\n\n if (\n this.costCeilingUsd !== undefined &&\n [...this.records.values()].some(\n (record) => record.status === 'pending' && record.maximumCostUsd === undefined,\n )\n ) {\n throw new ValidationError('CostLedger: capped event log contains an unbounded pending call')\n }\n\n if (options.receipts?.length) {\n const imported = options.receipts.map((receipt, index) =>\n parseImportedReceipt(receipt, `imported receipt ${index + 1}`),\n )\n this.ensureCostLimitPersisted()\n for (const receipt of imported) this.appendRecord(receipt)\n }\n }\n\n async runPaidCall<T>(input: RunPaidCallInput<T>): Promise<PaidCallResult<T>> {\n let callId: string | undefined\n let pending: PendingCostCall | undefined\n try {\n callId = resolveCallId(input.callId)\n validateAttribution(input)\n if (input.signal?.aborted) {\n return { succeeded: false, callId, error: abortError(input.signal) }\n }\n this.ensureCostLimitPersisted(callId)\n\n const maximumCostUsd = this.resolveMaximum(input.maximumCharge)\n const existing = this.records.get(callId)\n if (existing) {\n return {\n succeeded: false,\n callId,\n error: new CostCallConflictError(\n existing.status === 'pending'\n ? `CostLedger: callId '${callId}' is unresolved and must be reconciled before retry`\n : `CostLedger: callId '${callId}' already exists`,\n { callId },\n ),\n }\n }\n\n if (!pending) {\n while (true) {\n if (this.records.has(callId)) {\n return {\n succeeded: false,\n callId,\n error: new CostCallConflictError(`CostLedger: callId '${callId}' already exists`),\n }\n }\n const summary = this.summary()\n if (summary.unresolvedCalls > 0) {\n return {\n succeeded: false,\n callId,\n error: new CostAccountingIncompleteError(\n `CostLedger: ${summary.unresolvedCalls} unresolved call(s) must be reconciled before new paid work`,\n ),\n }\n }\n if (this.costCeilingUsd === undefined) break\n if (this.hasBudgetBreachingSettledCall()) {\n return {\n succeeded: false,\n callId,\n error: new CostAccountingIncompleteError(\n `CostLedger: a settled call exceeded its enforced maximum; refusing paid call '${input.actor}' during '${input.phase}'`,\n ),\n }\n }\n // A settled call whose cost the provider left unknown is charged its\n // reserved maximum here, so the ceiling is enforced against a real\n // upper bound and one under-reported response cannot let later calls\n // silently exceed the budget — while still permitting them.\n const committedCostUsd = this.conservativeSettledCostUsd()\n if (committedCostUsd + maximumCostUsd! > this.costCeilingUsd) {\n return {\n succeeded: false,\n callId,\n error: new CostCeilingReachedError(\n this.costCeilingUsd,\n committedCostUsd,\n maximumCostUsd!,\n input.phase,\n input.actor,\n ),\n }\n }\n if (committedCostUsd + summary.reservedCostUsd + maximumCostUsd! <= this.costCeilingUsd) {\n break\n }\n await this.waitForReservationRelease(input.signal)\n }\n\n pending = {\n status: 'pending',\n callId,\n channel: input.channel,\n phase: input.phase,\n actor: input.actor,\n model: pendingModel(input),\n ...(maximumCostUsd === undefined ? {} : { maximumCostUsd }),\n ...(input.tags ? { tags: { ...input.tags } } : {}),\n timestamp: Date.now(),\n }\n this.appendRecord(pending)\n this.activeCallIds.add(callId)\n }\n } catch (error) {\n return { succeeded: false, ...(callId ? { callId } : {}), error: toError(error) }\n }\n\n try {\n return await this.execute(input, pending)\n } catch (error) {\n return { succeeded: false, callId: pending.callId, error: toError(error) }\n } finally {\n if (!this.lateCallIds.has(pending.callId)) this.releaseActiveCall(pending.callId)\n }\n }\n\n /** Wait until every call started by this ledger has produced a durable outcome. */\n async waitForIdle(options: CostLedgerWaitOptions = {}): Promise<boolean> {\n const hasActiveMatch = (): boolean =>\n [...this.activeCallIds].some((callId) => {\n const record = this.records.get(callId)\n return record !== undefined && matches(record, options.filter)\n })\n if (!hasActiveMatch()) return true\n const timeoutMs = options.timeoutMs ?? 5_000\n assertTimeout(timeoutMs, 'waitForIdle.timeoutMs')\n return new Promise<boolean>((resolve) => {\n let timer: ReturnType<typeof setTimeout> | undefined\n const finish = (settled: boolean): void => {\n this.idleWaiters.delete(onIdle)\n if (timer !== undefined) clearTimeout(timer)\n resolve(settled)\n }\n const onIdle = (): void => {\n if (!hasActiveMatch()) finish(true)\n }\n this.idleWaiters.add(onIdle)\n timer = setTimeout(() => finish(false), timeoutMs)\n onIdle()\n })\n }\n\n /** Settle a call left pending by a crashed process after reconciling with the provider. */\n reconcile(\n callId: string,\n observed: CostReceiptInput,\n options: { failed?: boolean; error?: string } = {},\n ): CostReceipt {\n const pending = [...this.records.values()].find(\n (record): record is PendingCostCall =>\n record.callId === callId && record.status === 'pending',\n )\n if (!pending) throw new CostCallConflictError(`CostLedger: no pending call '${callId}'`)\n if (this.activeCallIds.has(callId)) {\n throw new CostCallConflictError(`CostLedger: call '${callId}' is still active`)\n }\n this.ensureCostLimitPersisted(callId)\n return this.commitReceipt(\n pending,\n observed,\n options.failed === true || options.error !== undefined,\n options.error,\n )\n }\n\n list(filter?: CostLedgerFilter): CostReceipt[] {\n return [...this.records.values()]\n .filter((record): record is CostReceipt => record.status === 'settled')\n .filter((receipt) => matches(receipt, filter))\n .map(cloneReceipt)\n }\n\n /** Read pending calls without exposing mutable ledger state. */\n listPending(filter?: CostLedgerFilter): PendingCostCallView[] {\n return [...this.records.values()]\n .filter((record): record is PendingCostCall => record.status === 'pending')\n .filter((record) => matches(record, filter))\n .map((record) => ({\n ...clonePendingCall(record),\n state: this.lateCallIds.has(record.callId)\n ? 'late'\n : this.activeCallIds.has(record.callId)\n ? 'active'\n : 'interrupted',\n }))\n }\n\n summary(filter?: CostLedgerFilter): CostLedgerSummary {\n const records = [...this.records.values()].filter((record) => matches(record, filter))\n const pending = records.filter(\n (record): record is PendingCostCall => record.status === 'pending',\n )\n const receipts = records.filter((record): record is CostReceipt => record.status === 'settled')\n const byChannel = new Map<string, ChannelRollup>()\n const unpriced = new Set<string>()\n const incompleteReasons: string[] = pending.map(\n (record) => `call '${record.callId}' for '${record.actor}' is pending`,\n )\n let inputTokens = 0\n let outputTokens = 0\n let reasoningTokens = 0\n let cachedTokens = 0\n let cacheWriteTokens = 0\n let totalCostUsd = 0\n\n for (const receipt of receipts) {\n inputTokens += receipt.inputTokens\n outputTokens += receipt.outputTokens\n reasoningTokens += receipt.reasoningTokens ?? 0\n cachedTokens += receipt.cachedTokens ?? 0\n cacheWriteTokens += receipt.cacheWriteTokens ?? 0\n totalCostUsd += receipt.costUsd\n if (receipt.costUnknown) {\n unpriced.add(receipt.model)\n incompleteReasons.push(\n receipt.error ?? `cost unknown for '${receipt.actor}' using '${receipt.model}'`,\n )\n }\n if (receipt.usageUnknown) {\n incompleteReasons.push(\n `token usage unknown for '${receipt.actor}' using '${receipt.model}'`,\n )\n }\n if (receipt.maximumCostUsd !== undefined && receipt.costUsd > receipt.maximumCostUsd) {\n incompleteReasons.push(\n `'${receipt.actor}' charged ${receipt.costUsd}, exceeding its enforced maximum ${receipt.maximumCostUsd}`,\n )\n }\n const rollup = byChannel.get(receipt.channel) ?? emptyRollup(receipt.channel)\n rollup.calls += 1\n rollup.inputTokens += receipt.inputTokens\n rollup.outputTokens += receipt.outputTokens\n rollup.reasoningTokens = (rollup.reasoningTokens ?? 0) + (receipt.reasoningTokens ?? 0)\n rollup.cachedTokens += receipt.cachedTokens ?? 0\n rollup.cacheWriteTokens = (rollup.cacheWriteTokens ?? 0) + (receipt.cacheWriteTokens ?? 0)\n rollup.costUsd += receipt.costUsd\n if (receipt.costUnknown) rollup.unpricedCalls += 1\n if (receipt.usageUnknown) rollup.unknownUsageCalls += 1\n byChannel.set(receipt.channel, rollup)\n }\n\n return {\n totalCalls: receipts.length,\n pendingCalls: pending.length,\n unresolvedCalls: pending.filter(\n (record) => !this.activeCallIds.has(record.callId) || this.lateCallIds.has(record.callId),\n ).length,\n reservedCostUsd: pending.reduce((sum, record) => sum + (record.maximumCostUsd ?? 0), 0),\n inputTokens,\n outputTokens,\n reasoningTokens,\n cachedTokens,\n cacheWriteTokens,\n totalCostUsd,\n costProvenance:\n pending.length > 0 || receipts.some((receipt) => receipt.costUnknown)\n ? { kind: 'uncaptured', usd: null }\n : receipts.every((receipt) => receipt.actualCostUsd !== undefined)\n ? { kind: 'observed', usd: totalCostUsd }\n : { kind: 'estimated', usd: totalCostUsd },\n byChannel: [...byChannel.values()].sort((a, b) => a.channel.localeCompare(b.channel)),\n unpricedModels: [...unpriced].sort(),\n fullyPriced: unpriced.size === 0,\n usageComplete: pending.length === 0 && receipts.every((receipt) => !receipt.usageUnknown),\n accountingComplete: incompleteReasons.length === 0,\n incompleteReasons: [...new Set(incompleteReasons)],\n }\n }\n\n markCompleted(count = 1): void {\n if (!Number.isInteger(count) || count < 0) {\n throw new ValidationError(\n `CostLedger.markCompleted: count must be a non-negative integer, got ${count}`,\n )\n }\n if (count === 0) return\n this.ensureCostLimitPersisted()\n this.appendEvent({ version: 1, completedTasks: count })\n this.completedTasks += count\n }\n\n costPerCompletedTask(): number | null {\n return this.completedTasks === 0 ? null : this.summary().totalCostUsd / this.completedTasks\n }\n\n private async execute<T>(\n input: RunPaidCallInput<T>,\n pending: PendingCostCall,\n ): Promise<PaidCallResult<T>> {\n const signal = input.signal ?? new AbortController().signal\n if (signal.aborted) {\n return this.commitOutcome(pending, abortError(signal), {\n model: pending.model,\n inputTokens: 0,\n outputTokens: 0,\n actualCostUsd: 0,\n })\n }\n\n const operation = Promise.resolve().then(() => input.execute(signal, pending.callId))\n const settled = await settle(operation, signal)\n if (settled.kind === 'aborted') {\n this.lateCallIds.add(pending.callId)\n this.captureLateOutcome(input, pending, operation)\n return paidFailure(pending.callId, abortError(signal))\n }\n if (settled.kind === 'error') {\n let observed: CostReceiptInput | undefined\n try {\n observed = input.receiptFromError?.(settled.error)\n } catch (receiptError) {\n return this.captureFailure(pending, settled.error, receiptError)\n }\n return this.commitOutcome(pending, settled.error, observed ?? unknownReceipt(pending.model))\n }\n\n try {\n const receipt = this.commitReceipt(pending, input.receipt(settled.value))\n if (receipt.maximumCostUsd !== undefined && receipt.costUsd > receipt.maximumCostUsd) {\n return paidFailure(\n pending.callId,\n new CostReservationExceededError(pending.actor, receipt.costUsd, receipt.maximumCostUsd),\n receipt,\n )\n }\n return { succeeded: true, callId: pending.callId, value: settled.value, receipt }\n } catch (receiptError) {\n if (\n receiptError instanceof CostLedgerPersistenceError ||\n receiptError instanceof CostCallConflictError\n ) {\n return paidFailure(pending.callId, receiptError)\n }\n return this.captureFailure(pending, receiptError, receiptError)\n }\n }\n\n private captureLateOutcome<T>(\n input: RunPaidCallInput<T>,\n pending: PendingCostCall,\n operation: Promise<T>,\n ): void {\n void operation\n .then(\n (value) => {\n if (this.records.get(pending.callId)?.status !== 'pending') return\n try {\n this.commitReceipt(pending, input.receipt(value))\n } catch {\n // A failed durable settlement leaves the reservation pending and blocks new paid work.\n }\n },\n (cause) => {\n if (this.records.get(pending.callId)?.status !== 'pending') return\n const error = toError(cause)\n try {\n const observed = input.receiptFromError?.(error)\n this.commitReceipt(pending, observed ?? unknownReceipt(pending.model), true)\n } catch (receiptError) {\n if (\n receiptError instanceof CostLedgerPersistenceError ||\n receiptError instanceof CostCallConflictError\n ) {\n return\n }\n this.captureFailure(pending, error, receiptError)\n }\n },\n )\n .finally(() => {\n this.lateCallIds.delete(pending.callId)\n this.releaseActiveCall(pending.callId)\n })\n }\n\n private releaseActiveCall(callId: string): void {\n this.activeCallIds.delete(callId)\n for (const resolve of [...this.idleWaiters]) resolve()\n }\n\n private async waitForReservationRelease(signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) throw abortError(signal)\n await new Promise<void>((resolve, reject) => {\n let finished = false\n const finish = (error?: Error): void => {\n if (finished) return\n finished = true\n this.idleWaiters.delete(onRelease)\n signal?.removeEventListener('abort', onAbort)\n if (error) reject(error)\n else resolve()\n }\n const onRelease = (): void => finish()\n const onAbort = (): void => finish(abortError(signal!))\n this.idleWaiters.add(onRelease)\n signal?.addEventListener('abort', onAbort, { once: true })\n if (this.activeCallIds.size === 0) onRelease()\n })\n }\n\n private commitOutcome<T>(\n pending: PendingCostCall,\n error: Error,\n observed: CostReceiptInput,\n ): PaidCallResult<T> {\n try {\n const receipt = this.commitReceipt(pending, observed, true)\n return paidFailure(pending.callId, error, receipt)\n } catch (receiptError) {\n if (\n receiptError instanceof CostLedgerPersistenceError ||\n receiptError instanceof CostCallConflictError\n ) {\n return paidFailure(pending.callId, receiptError)\n }\n return this.captureFailure(pending, error, receiptError)\n }\n }\n\n private captureFailure<T>(\n pending: PendingCostCall,\n cause: unknown,\n receiptError: unknown,\n ): PaidCallResult<T> {\n try {\n const receipt = this.commitReceipt(pending, unknownReceipt(pending.model), true)\n return paidFailure(\n pending.callId,\n new CostReceiptCaptureError(pending.callId, cause, receiptError, receipt),\n receipt,\n )\n } catch (error) {\n const typed = error instanceof Error ? error : toError(error)\n return paidFailure(pending.callId, typed)\n }\n }\n\n private commitReceipt(\n pending: PendingCostCall,\n observed: CostReceiptInput,\n failed = false,\n error?: string,\n ): CostReceipt {\n const receipt = buildReceipt(pending, observed, failed, error)\n if (this.records.get(pending.callId)?.status !== 'pending') {\n throw new CostCallConflictError(`CostLedger: call '${pending.callId}' is not pending`)\n }\n this.appendRecord(receipt)\n return cloneReceipt(receipt)\n }\n\n private resolveMaximum(maximum: MaximumCharge | undefined): number | undefined {\n if (!maximum) {\n if (this.costCeilingUsd !== undefined) {\n throw new CostAccountingIncompleteError(\n 'CostLedger: capped paid calls require a hard maximumCharge before execution',\n )\n }\n return undefined\n }\n if ('externallyEnforcedMaximumUsd' in maximum) {\n assertNonNegative(\n maximum.externallyEnforcedMaximumUsd,\n 'maximumCharge.externallyEnforcedMaximumUsd',\n )\n return maximum.externallyEnforcedMaximumUsd\n }\n if ('customTokenPricing' in maximum) {\n return costForTokenPricing(maximum.customTokenPricing, maximum)\n }\n const priced = costForUsage(maximum.model, maximum)\n if (priced.costUnknown) {\n if (this.costCeilingUsd !== undefined) {\n throw new CostAccountingIncompleteError(\n `CostLedger: cannot reserve unpriced model '${maximum.model}' in a capped run`,\n )\n }\n return undefined\n }\n return priced.costUsd\n }\n\n private hasBudgetBreachingSettledCall(): boolean {\n return [...this.records.values()].some(\n (record) =>\n record.status === 'settled' &&\n record.maximumCostUsd !== undefined &&\n record.costUsd > record.maximumCostUsd,\n )\n }\n\n /**\n * Total settled cost with each unknown-cost call charged its reserved\n * maximum. A provider that omits a call's cost cannot make the ceiling check\n * under-count: the call is bounded by what it was allowed to spend.\n */\n private conservativeSettledCostUsd(): number {\n let total = 0\n for (const record of this.records.values()) {\n if (record.status !== 'settled') continue\n total += record.costUnknown ? (record.maximumCostUsd ?? record.costUsd) : record.costUsd\n }\n return total\n }\n\n private appendRecord(record: CostLedgerRecord): void {\n const callId = record.callId\n const receipt = record.status === 'settled' ? record : undefined\n validateTransition(this.records, record)\n const event: CostCallEvent =\n record.status === 'settled'\n ? { version: 2, record: cloneReceipt(record) }\n : { version: 1, record: clonePendingCall(record) }\n this.appendEvent(event, callId, receipt)\n this.records.set(callId, cloneRecord(record))\n }\n\n private ensureCostLimitPersisted(callId?: string): void {\n if (this.costLimitPersisted || this.costCeilingUsd === undefined) return\n this.appendEvent({ version: 1, costCeilingUsd: this.costCeilingUsd }, callId)\n this.costLimitPersisted = true\n }\n\n private appendEvent(event: CostLedgerEvent, callId?: string, receipt?: CostReceipt): void {\n try {\n if (this.persistence) {\n const nextRevision = this.persistence.append(this.revision, `${JSON.stringify(event)}\\n`)\n if (nextRevision === undefined) {\n throw new CostCallConflictError(\n `CostLedger: persisted revision changed while writing call '${callId}'`,\n { callId, receipt },\n )\n }\n assertString(nextRevision, 'persistence revision')\n this.revision = nextRevision\n }\n } catch (cause) {\n if (cause instanceof CostCallConflictError) throw cause\n throw new CostLedgerPersistenceError(cause, callId, receipt)\n }\n }\n}\n\n/** Public callback surface for a shared cost ledger.\n *\n * Declaration bundles may expose this type through multiple package subpaths.\n * Keeping callback contracts structural lets those subpaths compose while the\n * concrete {@link CostLedger} retains its private durable state.\n */\nexport type CostLedgerHandle = Pick<\n CostLedger,\n Exclude<keyof CostLedger, 'listPending' | 'waitForIdle'>\n> &\n Partial<Pick<CostLedger, 'listPending' | 'waitForIdle'>>\n\n/** Return the canonical pricing-table key, or null when the model is unpriced. */\nexport function modelPriceKey(model: string): string | null {\n return isModelPriced(model) ? model : null\n}\n\nexport interface CostResult {\n costUsd: number\n costUnknown: boolean\n}\n\nexport function costForUsage(model: string, usage: CostUsage): CostResult {\n assertUsage(usage)\n if (!resolveModelPricing(model)) return { costUsd: 0, costUnknown: true }\n return {\n costUsd: estimateCost(\n usage.inputTokens + (usage.cachedTokens ?? 0) + (usage.cacheWriteTokens ?? 0),\n usage.outputTokens,\n model,\n ),\n costUnknown: false,\n }\n}\n\n/** Price token counts with caller-supplied per-million rates. */\nexport function costForTokenPricing(\n pricing: CustomTokenPricing,\n usage: Pick<CostUsage, 'inputTokens' | 'outputTokens' | 'cachedTokens' | 'cacheWriteTokens'>,\n): number {\n assertTokenCount(usage.inputTokens, 'usage.inputTokens')\n assertTokenCount(usage.outputTokens, 'usage.outputTokens')\n if (usage.cachedTokens !== undefined) {\n assertTokenCount(usage.cachedTokens, 'usage.cachedTokens')\n }\n if (usage.cacheWriteTokens !== undefined) {\n assertTokenCount(usage.cacheWriteTokens, 'usage.cacheWriteTokens')\n }\n assertNonNegative(pricing.inputUsdPerMillion, 'pricing.inputUsdPerMillion')\n if (pricing.cachedInputUsdPerMillion !== undefined) {\n assertNonNegative(pricing.cachedInputUsdPerMillion, 'pricing.cachedInputUsdPerMillion')\n }\n if (pricing.cacheWriteUsdPerMillion !== undefined) {\n assertNonNegative(pricing.cacheWriteUsdPerMillion, 'pricing.cacheWriteUsdPerMillion')\n }\n assertNonNegative(pricing.outputUsdPerMillion, 'pricing.outputUsdPerMillion')\n const cachedInputRate = pricing.cachedInputUsdPerMillion ?? pricing.inputUsdPerMillion\n const cacheWriteRate = pricing.cacheWriteUsdPerMillion ?? pricing.inputUsdPerMillion\n return (\n (usage.inputTokens / 1_000_000) * pricing.inputUsdPerMillion +\n ((usage.cachedTokens ?? 0) / 1_000_000) * cachedInputRate +\n ((usage.cacheWriteTokens ?? 0) / 1_000_000) * cacheWriteRate +\n (usage.outputTokens / 1_000_000) * pricing.outputUsdPerMillion\n )\n}\n\ntype Settled<T> =\n | { kind: 'value'; value: T }\n | { kind: 'error'; error: Error }\n | { kind: 'aborted' }\n\nasync function settle<T>(promise: Promise<T>, signal: AbortSignal): Promise<Settled<T>> {\n return await new Promise((resolve) => {\n let done = false\n const finish = (value: Settled<T>): void => {\n if (done) return\n done = true\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n }\n const onAbort = () => finish({ kind: 'aborted' })\n signal.addEventListener('abort', onAbort, { once: true })\n if (signal.aborted) onAbort()\n promise.then(\n (value) => finish({ kind: 'value', value }),\n (error) => finish({ kind: 'error', error: toError(error) }),\n )\n })\n}\n\nfunction buildReceipt(\n pending: PendingCostCall,\n observed: CostReceiptInput,\n failed = false,\n error?: string,\n): CostReceipt {\n assertUsage(observed)\n assertString(observed.model, 'receipt.model')\n const suppliedAmounts = [\n observed.actualCostUsd,\n observed.estimatedCostUsd,\n observed.customTokenPricing,\n ].filter((value) => value !== undefined)\n if (suppliedAmounts.length > 1) {\n throw new ValidationError(\n 'CostLedger: a receipt can have only one of actualCostUsd, estimatedCostUsd, or customTokenPricing',\n )\n }\n const customPricingSnapshot =\n observed.customTokenPricing === undefined\n ? undefined\n : pricingSnapshot(observed.customTokenPricing)\n const estimated = customPricingSnapshot\n ? {\n costUsd: costFromPricing(observed, customPricingSnapshot),\n costUnknown: false,\n }\n : costForUsage(observed.model, observed)\n const hasActual = observed.actualCostUsd !== undefined\n const hasExternalEstimate = observed.estimatedCostUsd !== undefined\n if (hasActual && observed.costUnknown === true) {\n throw new ValidationError(\n 'CostLedger: a receipt cannot have both actualCostUsd and costUnknown=true',\n )\n }\n if (hasActual) assertNonNegative(observed.actualCostUsd!, 'actualCostUsd')\n if (hasExternalEstimate) assertNonNegative(observed.estimatedCostUsd!, 'estimatedCostUsd')\n if (hasExternalEstimate && observed.costUnknown === true) {\n throw new ValidationError(\n 'CostLedger: a receipt cannot have both estimatedCostUsd and costUnknown=true',\n )\n }\n const usageUnknown = observed.usageUnknown === true\n const costUnknown =\n observed.costUnknown === true ||\n (!hasActual && !hasExternalEstimate && (usageUnknown || estimated.costUnknown))\n const resolvedModelPricing =\n !customPricingSnapshot && !hasActual && !hasExternalEstimate && !costUnknown\n ? resolveModelPricing(observed.model)\n : null\n const receiptPricing =\n !hasActual && !hasExternalEstimate && !costUnknown\n ? (customPricingSnapshot ??\n (resolvedModelPricing\n ? {\n inputUsdPerThousand: resolvedModelPricing.input,\n outputUsdPerThousand: resolvedModelPricing.output,\n }\n : undefined))\n : undefined\n return parseReceipt(\n {\n status: 'settled',\n callId: pending.callId,\n channel: pending.channel,\n phase: pending.phase,\n actor: pending.actor,\n model: observed.model,\n inputTokens: observed.inputTokens,\n outputTokens: observed.outputTokens,\n ...(observed.reasoningTokens === undefined\n ? {}\n : { reasoningTokens: observed.reasoningTokens }),\n ...(observed.cachedTokens === undefined ? {} : { cachedTokens: observed.cachedTokens }),\n ...(observed.cacheWriteTokens === undefined\n ? {}\n : { cacheWriteTokens: observed.cacheWriteTokens }),\n costUsd: costUnknown\n ? 0\n : hasActual\n ? observed.actualCostUsd!\n : hasExternalEstimate\n ? observed.estimatedCostUsd!\n : estimated.costUsd,\n costUnknown,\n usageUnknown,\n ...(receiptPricing ? { pricing: receiptPricing } : {}),\n ...(hasActual ? { actualCostUsd: observed.actualCostUsd } : {}),\n ...(hasExternalEstimate ? { estimatedCostUsd: observed.estimatedCostUsd } : {}),\n ...(pending.maximumCostUsd === undefined ? {} : { maximumCostUsd: pending.maximumCostUsd }),\n ...(failed ? { error: error ?? 'paid-call-failed' } : {}),\n ...(pending.tags ? { tags: { ...pending.tags } } : {}),\n timestamp: pending.timestamp,\n },\n 'provider receipt',\n )\n}\n\nconst NonEmptyString = z.string().refine((value) => value.trim().length > 0, 'must be non-empty')\nconst TokenCount = z.number().int().nonnegative().finite()\nconst NonNegative = z.number().nonnegative().finite()\nconst Tags = z.record(NonEmptyString, z.string())\nconst CostPricingSchema = z.strictObject({\n inputUsdPerThousand: NonNegative,\n cachedInputUsdPerThousand: NonNegative.optional(),\n cacheWriteUsdPerThousand: NonNegative.optional(),\n outputUsdPerThousand: NonNegative,\n})\nconst CostCallBaseShape = {\n callId: NonEmptyString,\n channel: NonEmptyString,\n phase: NonEmptyString,\n actor: NonEmptyString,\n model: NonEmptyString,\n maximumCostUsd: NonNegative.optional(),\n tags: Tags.optional(),\n timestamp: NonNegative,\n}\nconst PendingCostCallSchema = z.strictObject({\n status: z.literal('pending'),\n ...CostCallBaseShape,\n})\nconst CostReceiptBaseShape = {\n status: z.literal('settled'),\n ...CostCallBaseShape,\n inputTokens: TokenCount,\n outputTokens: TokenCount,\n cachedTokens: TokenCount.optional(),\n costUsd: NonNegative,\n costUnknown: z.boolean(),\n usageUnknown: z.boolean().default(false),\n pricing: CostPricingSchema.optional(),\n actualCostUsd: NonNegative.optional(),\n estimatedCostUsd: NonNegative.optional(),\n error: NonEmptyString.optional(),\n}\nconst CostReceiptSchema = z\n .strictObject({\n ...CostReceiptBaseShape,\n reasoningTokens: TokenCount.optional(),\n cacheWriteTokens: TokenCount.optional(),\n })\n .superRefine((receipt, ctx) => validateCostReceipt(receipt, ctx))\n\nfunction validateCostReceipt(\n receipt: CostUsage & {\n costUsd: number\n costUnknown: boolean\n usageUnknown: boolean\n pricing?: NonNullable<CostReceipt['pricing']>\n actualCostUsd?: number\n estimatedCostUsd?: number\n },\n ctx: z.RefinementCtx,\n): void {\n if (receipt.reasoningTokens !== undefined && receipt.reasoningTokens > receipt.outputTokens) {\n ctx.addIssue({ code: 'custom', message: 'reasoningTokens must not exceed outputTokens' })\n }\n\n if (receipt.actualCostUsd !== undefined && receipt.estimatedCostUsd !== undefined) {\n ctx.addIssue({\n code: 'custom',\n message: 'actual and external estimated costs cannot both be present',\n })\n }\n\n if (receipt.actualCostUsd !== undefined) {\n if (receipt.costUnknown || receipt.costUsd !== receipt.actualCostUsd) {\n ctx.addIssue({ code: 'custom', message: 'actual cost must be known and equal costUsd' })\n }\n if (receipt.pricing !== undefined) {\n ctx.addIssue({ code: 'custom', message: 'actual cost must not include estimated pricing' })\n }\n return\n }\n\n if (receipt.estimatedCostUsd !== undefined) {\n if (receipt.costUnknown || receipt.costUsd !== receipt.estimatedCostUsd) {\n ctx.addIssue({ code: 'custom', message: 'external estimate must be known and equal costUsd' })\n }\n if (receipt.pricing !== undefined) {\n ctx.addIssue({ code: 'custom', message: 'external estimate must not include token pricing' })\n }\n return\n }\n\n if (receipt.costUnknown) {\n if (receipt.costUsd !== 0) {\n ctx.addIssue({ code: 'custom', message: 'unknown cost must have costUsd 0' })\n }\n if (receipt.pricing !== undefined) {\n ctx.addIssue({ code: 'custom', message: 'unknown cost must not include estimated pricing' })\n }\n return\n }\n\n if (receipt.usageUnknown) {\n ctx.addIssue({ code: 'custom', message: 'known estimated cost requires known usage' })\n }\n if (!receipt.pricing) {\n ctx.addIssue({ code: 'custom', message: 'known estimated cost requires a pricing snapshot' })\n return\n }\n\n const expected = costFromPricing(receipt, receipt.pricing)\n if (!costAmountsMatch(receipt.costUsd, expected)) {\n ctx.addIssue({\n code: 'custom',\n message: `estimated cost ${receipt.costUsd} does not match pricing snapshot ${expected}`,\n })\n }\n}\n\nfunction costAmountsMatch(left: number, right: number): boolean {\n const scale = Math.max(1, Math.abs(left), Math.abs(right))\n return Math.abs(left - right) <= Number.EPSILON * scale * 8\n}\n\nconst CostLedgerEventSchema = z.union([\n z.strictObject({\n version: z.literal(1),\n record: PendingCostCallSchema,\n }),\n z.strictObject({\n version: z.literal(2),\n record: CostReceiptSchema,\n }),\n z.strictObject({\n version: z.literal(1),\n completedTasks: TokenCount,\n }),\n z.strictObject({\n version: z.literal(1),\n costCeilingUsd: NonNegative,\n }),\n])\n\nfunction parseEvents(serialized: string): {\n records: CostLedgerRecord[]\n completedTasks: number\n costCeilingUsd?: number\n} {\n const records = new Map<string, CostLedgerRecord>()\n let completedTasks = 0\n let costCeilingUsd: number | undefined\n let lineNumber = 0\n try {\n for (const line of completeJournalPrefix(serialized).split('\\n')) {\n if (!line.trim()) continue\n lineNumber += 1\n const event = CostLedgerEventSchema.parse(JSON.parse(line)) as CostLedgerEvent\n if ('record' in event) {\n const record = event.record\n validateTransition(records, record)\n records.set(record.callId, cloneRecord(record))\n } else if ('completedTasks' in event) {\n completedTasks += event.completedTasks\n if (!Number.isSafeInteger(completedTasks)) {\n throw new ValidationError('CostLedger: completed task count exceeds safe integer range')\n }\n } else {\n if (costCeilingUsd !== undefined) {\n throw new ValidationError('CostLedger: duplicate persisted cost ceiling')\n }\n costCeilingUsd = event.costCeilingUsd\n }\n }\n return {\n records: [...records.values()],\n completedTasks,\n ...(costCeilingUsd === undefined ? {} : { costCeilingUsd }),\n }\n } catch (cause) {\n throw new ValidationError(\n `CostLedger: invalid persisted event ${lineNumber || 1}: ${validationMessage(cause)}`,\n { cause },\n )\n }\n}\n\nfunction completeJournalPrefix(serialized: string): string {\n if (!serialized || serialized.endsWith('\\n')) return serialized\n const finalNewline = serialized.lastIndexOf('\\n')\n const tail = serialized.slice(finalNewline + 1)\n try {\n JSON.parse(tail)\n } catch {\n return finalNewline < 0 ? '' : serialized.slice(0, finalNewline + 1)\n }\n throw new ValidationError(\n 'CostLedger: complete final persisted event is missing its newline terminator',\n )\n}\n\nfunction validateTransition(\n records: ReadonlyMap<string, CostLedgerRecord>,\n record: CostLedgerRecord,\n): void {\n const current = records.get(record.callId)\n if (!current) return\n if (record.status === 'pending' || current.status === 'settled') {\n throw new CostCallConflictError(`CostLedger: duplicate callId '${record.callId}'`)\n }\n if (!sameAttribution(current, record)) {\n throw new ValidationError(`CostLedger: receipt attribution changed for call '${record.callId}'`)\n }\n}\n\nfunction sameAttribution(before: CostCallBase, after: CostCallBase): boolean {\n return (\n before.channel === after.channel &&\n before.phase === after.phase &&\n before.actor === after.actor &&\n before.maximumCostUsd === after.maximumCostUsd &&\n before.timestamp === after.timestamp &&\n sameTags(before.tags, after.tags)\n )\n}\n\nfunction sameTags(\n left: Readonly<Record<string, string>> | undefined,\n right: Readonly<Record<string, string>> | undefined,\n): boolean {\n const leftEntries = Object.entries(left ?? {}).sort(([a], [b]) => a.localeCompare(b))\n const rightEntries = Object.entries(right ?? {}).sort(([a], [b]) => a.localeCompare(b))\n return JSON.stringify(leftEntries) === JSON.stringify(rightEntries)\n}\n\nfunction parseReceipt(value: unknown, path: string): CostReceipt {\n try {\n return CostReceiptSchema.parse(value) as CostReceipt\n } catch (cause) {\n throw new ValidationError(`CostLedger: invalid ${path}: ${validationMessage(cause)}`, { cause })\n }\n}\n\nfunction parseImportedReceipt(value: unknown, path: string): CostReceipt {\n if (typeof value !== 'object' || value === null) return parseReceipt(value, path)\n const candidate = { ...value } as Record<string, unknown>\n if (\n candidate.status === 'settled' &&\n candidate.actualCostUsd === undefined &&\n candidate.estimatedCostUsd === undefined &&\n candidate.costUnknown === false &&\n candidate.pricing === undefined &&\n typeof candidate.model === 'string'\n ) {\n const pricing = resolveModelPricing(candidate.model)\n if (pricing) {\n candidate.pricing = {\n inputUsdPerThousand: pricing.input,\n outputUsdPerThousand: pricing.output,\n }\n }\n }\n return parseReceipt(candidate, path)\n}\n\nfunction validateAttribution(\n input: Pick<RunPaidCallInput<unknown>, 'channel' | 'phase' | 'actor' | 'model' | 'tags'>,\n): void {\n assertString(input.channel, 'channel')\n assertString(input.phase, 'phase')\n assertString(input.actor, 'actor')\n if (input.model !== undefined) assertString(input.model, 'model')\n if (input.tags !== undefined) {\n const parsed = Tags.safeParse(input.tags)\n if (!parsed.success)\n throw new ValidationError(`CostLedger: invalid tags: ${parsed.error.message}`)\n }\n}\n\nfunction matches(record: CostCallBase, filter: CostLedgerFilter | undefined): boolean {\n if (!filter) return true\n if (filter.channel !== undefined && record.channel !== filter.channel) return false\n if (filter.phase !== undefined && record.phase !== filter.phase) return false\n return Object.entries(filter.tags ?? {}).every(([key, value]) => record.tags?.[key] === value)\n}\n\nfunction cloneRecord(record: CostLedgerRecord): CostLedgerRecord {\n if (record.status === 'settled') return cloneReceipt(record)\n return clonePendingCall(record)\n}\n\nfunction clonePendingCall(record: PendingCostCall): PendingCostCall {\n const { tags, ...rest } = record\n return { ...rest, ...(tags ? { tags: { ...tags } } : {}) }\n}\n\nfunction cloneReceipt(receipt: CostReceipt): CostReceipt {\n const { pricing, tags, ...rest } = receipt\n return {\n ...rest,\n ...(tags ? { tags: { ...tags } } : {}),\n ...(pricing ? { pricing: { ...pricing } } : {}),\n }\n}\n\nfunction costFromPricing(usage: CostUsage, pricing: NonNullable<CostReceipt['pricing']>): number {\n const cachedInputRate = pricing.cachedInputUsdPerThousand ?? pricing.inputUsdPerThousand\n const cacheWriteRate = pricing.cacheWriteUsdPerThousand ?? pricing.inputUsdPerThousand\n return (\n (usage.inputTokens / 1000) * pricing.inputUsdPerThousand +\n ((usage.cachedTokens ?? 0) / 1000) * cachedInputRate +\n ((usage.cacheWriteTokens ?? 0) / 1000) * cacheWriteRate +\n (usage.outputTokens / 1000) * pricing.outputUsdPerThousand\n )\n}\n\nfunction pricingSnapshot(pricing: CustomTokenPricing): NonNullable<CostReceipt['pricing']> {\n costForTokenPricing(pricing, { inputTokens: 0, outputTokens: 0 })\n return {\n inputUsdPerThousand: pricing.inputUsdPerMillion / 1000,\n ...(pricing.cachedInputUsdPerMillion === undefined\n ? {}\n : { cachedInputUsdPerThousand: pricing.cachedInputUsdPerMillion / 1000 }),\n ...(pricing.cacheWriteUsdPerMillion === undefined\n ? {}\n : { cacheWriteUsdPerThousand: pricing.cacheWriteUsdPerMillion / 1000 }),\n outputUsdPerThousand: pricing.outputUsdPerMillion / 1000,\n }\n}\n\nfunction emptyRollup(channel: CostChannel): ChannelRollup {\n return {\n channel,\n calls: 0,\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n cachedTokens: 0,\n cacheWriteTokens: 0,\n costUsd: 0,\n unpricedCalls: 0,\n unknownUsageCalls: 0,\n }\n}\n\nfunction pendingModel(input: RunPaidCallInput<unknown>): string {\n if (input.model) return input.model\n if (input.maximumCharge && 'model' in input.maximumCharge) return input.maximumCharge.model\n return 'unknown'\n}\n\nfunction unknownReceipt(model: string): CostReceiptInput {\n return { model, inputTokens: 0, outputTokens: 0, costUnknown: true, usageUnknown: true }\n}\n\nfunction resolveCallId(input: string | undefined): string {\n if (input !== undefined) {\n assertString(input, 'callId')\n return input\n }\n if (typeof globalThis.crypto?.randomUUID !== 'function') {\n throw new ValidationError('CostLedger: crypto.randomUUID is required when callId is omitted')\n }\n return globalThis.crypto.randomUUID()\n}\n\nfunction abortError(signal: AbortSignal): Error {\n const reason = (signal as { reason?: unknown }).reason\n if (reason instanceof Error) return reason\n const error = new Error('CostLedger: paid call aborted')\n error.name = 'AbortError'\n return error\n}\n\nfunction toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\nfunction paidFailure<T>(callId: string, error: Error, receipt?: CostReceipt): PaidCallResult<T> {\n return {\n succeeded: false,\n callId,\n error,\n ...(receipt ? { receipt: cloneReceipt(receipt) } : {}),\n }\n}\n\nfunction validationMessage(cause: unknown): string {\n return cause instanceof z.ZodError ? z.prettifyError(cause) : toError(cause).message\n}\n\nfunction assertUsage(usage: CostUsage): void {\n assertTokenCount(usage.inputTokens, 'inputTokens')\n assertTokenCount(usage.outputTokens, 'outputTokens')\n if (usage.reasoningTokens !== undefined) {\n assertTokenCount(usage.reasoningTokens, 'reasoningTokens')\n if (usage.reasoningTokens > usage.outputTokens) {\n throw new ValidationError('CostLedger: reasoningTokens must not exceed outputTokens')\n }\n }\n if (usage.cachedTokens !== undefined) assertTokenCount(usage.cachedTokens, 'cachedTokens')\n if (usage.cacheWriteTokens !== undefined) {\n assertTokenCount(usage.cacheWriteTokens, 'cacheWriteTokens')\n }\n}\n\nfunction assertTokenCount(value: unknown, name: string): asserts value is number {\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {\n throw new ValidationError(\n `CostLedger: ${name} must be a non-negative integer, got ${String(value)}`,\n )\n }\n}\n\nfunction assertNonNegative(value: unknown, name: string): asserts value is number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new ValidationError(\n `CostLedger: ${name} must be a non-negative finite number, got ${String(value)}`,\n )\n }\n}\n\nfunction assertTimeout(value: unknown, name: string): asserts value is number {\n if (\n typeof value !== 'number' ||\n !Number.isSafeInteger(value) ||\n value < 0 ||\n value > 2_147_483_647\n ) {\n throw new ValidationError(\n `CostLedger: ${name} must be a non-negative safe integer no greater than 2147483647, got ${String(value)}`,\n )\n }\n}\n\nfunction assertString(value: unknown, name: string): asserts value is string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`CostLedger: ${name} must be a non-empty string`)\n }\n}\n"],"mappings":";;;;AA+KA,IAAa,0BAAb,cAA6C,gBAAgB;CAC3D,YACE,YACA,cACA,cACA,OACA,OACA;EACA,MACE,yBAAyB,aAAa,QAAQ,MAAM,YAAY,MAAM,yBAAyB,WAAW,QAAQ,aAAa,mBACjI;CACF;AACF;AAEA,IAAa,gCAAb,cAAmD,gBAAgB,CAAC;AAEpE,IAAa,+BAAb,cAAkD,gBAAgB;CAChE,YAAY,OAAe,WAAmB,YAAoB;EAChE,MACE,gBAAgB,MAAM,YAAY,UAAU,mCAAmC,YACjF;CACF;AACF;AAEA,IAAa,wBAAb,cAA2C,gBAAgB;CACzD;CACA;CAEA,YACE,SACA,UAAuE,CAAC,GACxE;EACA,MAAM,SAAS,QAAQ,UAAU,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO,QAAQ,MAAM,CAAC;EACjF,KAAK,SAAS,QAAQ;EACtB,KAAK,UAAU,QAAQ,UAAU,aAAa,QAAQ,OAAO,IAAI,KAAA;CACnE;AACF;AAEA,IAAa,6BAAb,cAAgD,gBAAgB;CAC9D;CACA;CAEA,YAAY,OAAgB,QAAiB,SAAuB;EAClE,MACE,gCAAgC,SAAS,UAAU,OAAO,KAAK,GAAG,IAAI,QAAQ,KAAK,CAAC,CAAC,WACrF,EAAE,MAAM,CACV;EACA,KAAK,SAAS;EACd,KAAK,UAAU,UAAU,aAAa,OAAO,IAAI,KAAA;CACnD;AACF;AAEA,IAAa,0BAAb,cAA6C,gBAAgB;CAC3D;CACA;CACA;CAEA,YAAY,QAAgB,OAAgB,cAAuB,SAAuB;EACxF,MAAM,gEAAgE,OAAO,IAAI,EAAE,MAAM,CAAC;EAC1F,KAAK,SAAS;EACd,KAAK,UAAU,UAAU,aAAa,OAAO,IAAI,KAAA;EACjD,KAAK,eAAe,QAAQ,YAAY;CAC1C;AACF;;AA0BA,IAAa,aAAb,MAAwB;CACtB,0BAA2B,IAAI,IAA8B;CAC7D,gCAAiC,IAAI,IAAY;CACjD,8BAA+B,IAAI,IAAY;CAC/C,8BAA+B,IAAI,IAAgB;CACnD,iBAAyB;CACzB,WAAmB;CACnB,qBAA6B;CAC7B;CACA;CAEA,YAAY,OAAoC;EAC9C,MAAM,UAAU,OAAO,UAAU,WAAW,EAAE,gBAAgB,MAAM,IAAK,SAAS,CAAC;EACnF,KAAK,cAAc,QAAQ;EAC3B,IAAI,QAAQ,mBAAmB,KAAA,GAC7B,kBAAkB,QAAQ,gBAAgB,gBAAgB;EAG5D,IAAI;EACJ,IAAI,KAAK,aAAa;GACpB,IAAI;GACJ,IAAI;IACF,SAAS,KAAK,YAAY,KAAK;GACjC,SAAS,OAAO;IACd,MAAM,IAAI,2BAA2B,KAAK;GAC5C;GACA,aAAa,OAAO,UAAU,sBAAsB;GACpD,KAAK,WAAW,OAAO;GACvB,MAAM,WAAW,YAAY,OAAO,MAAM;GAC1C,KAAK,MAAM,UAAU,SAAS,SAAS,KAAK,QAAQ,IAAI,OAAO,QAAQ,MAAM;GAC7E,KAAK,iBAAiB,SAAS;GAC/B,0BAA0B,SAAS;EACrC;EAEA,IACE,QAAQ,mBAAmB,KAAA,KAC3B,4BAA4B,KAAA,KAC5B,QAAQ,mBAAmB,yBAE3B,MAAM,IAAI,gBACR,sCAAsC,QAAQ,eAAe,oCAAoC,yBACnG;EAEF,KAAK,iBAAiB,2BAA2B,QAAQ;EACzD,KAAK,qBACH,CAAC,KAAK,eACN,KAAK,mBAAmB,KAAA,KACxB,4BAA4B,KAAA;EAE9B,IACE,KAAK,mBAAmB,KAAA,KACxB,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,MACxB,WAAW,OAAO,WAAW,aAAa,OAAO,mBAAmB,KAAA,CACvE,GAEA,MAAM,IAAI,gBAAgB,iEAAiE;EAG7F,IAAI,QAAQ,UAAU,QAAQ;GAC5B,MAAM,WAAW,QAAQ,SAAS,KAAK,SAAS,UAC9C,qBAAqB,SAAS,oBAAoB,QAAQ,GAAG,CAC/D;GACA,KAAK,yBAAyB;GAC9B,KAAK,MAAM,WAAW,UAAU,KAAK,aAAa,OAAO;EAC3D;CACF;CAEA,MAAM,YAAe,OAAwD;EAC3E,IAAI;EACJ,IAAI;EACJ,IAAI;GACF,SAAS,cAAc,MAAM,MAAM;GACnC,oBAAoB,KAAK;GACzB,IAAI,MAAM,QAAQ,SAChB,OAAO;IAAE,WAAW;IAAO;IAAQ,OAAO,WAAW,MAAM,MAAM;GAAE;GAErE,KAAK,yBAAyB,MAAM;GAEpC,MAAM,iBAAiB,KAAK,eAAe,MAAM,aAAa;GAC9D,MAAM,WAAW,KAAK,QAAQ,IAAI,MAAM;GACxC,IAAI,UACF,OAAO;IACL,WAAW;IACX;IACA,OAAO,IAAI,sBACT,SAAS,WAAW,YAChB,uBAAuB,OAAO,uDAC9B,uBAAuB,OAAO,mBAClC,EAAE,OAAO,CACX;GACF;GAGF,IAAI,CAAC,SAAS;IACZ,OAAO,MAAM;KACX,IAAI,KAAK,QAAQ,IAAI,MAAM,GACzB,OAAO;MACL,WAAW;MACX;MACA,OAAO,IAAI,sBAAsB,uBAAuB,OAAO,iBAAiB;KAClF;KAEF,MAAM,UAAU,KAAK,QAAQ;KAC7B,IAAI,QAAQ,kBAAkB,GAC5B,OAAO;MACL,WAAW;MACX;MACA,OAAO,IAAI,8BACT,eAAe,QAAQ,gBAAgB,4DACzC;KACF;KAEF,IAAI,KAAK,mBAAmB,KAAA,GAAW;KACvC,IAAI,KAAK,8BAA8B,GACrC,OAAO;MACL,WAAW;MACX;MACA,OAAO,IAAI,8BACT,iFAAiF,MAAM,MAAM,YAAY,MAAM,MAAM,EACvH;KACF;KAMF,MAAM,mBAAmB,KAAK,2BAA2B;KACzD,IAAI,mBAAmB,iBAAkB,KAAK,gBAC5C,OAAO;MACL,WAAW;MACX;MACA,OAAO,IAAI,wBACT,KAAK,gBACL,kBACA,gBACA,MAAM,OACN,MAAM,KACR;KACF;KAEF,IAAI,mBAAmB,QAAQ,kBAAkB,kBAAmB,KAAK,gBACvE;KAEF,MAAM,KAAK,0BAA0B,MAAM,MAAM;IACnD;IAEA,UAAU;KACR,QAAQ;KACR;KACA,SAAS,MAAM;KACf,OAAO,MAAM;KACb,OAAO,MAAM;KACb,OAAO,aAAa,KAAK;KACzB,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;KACzD,GAAI,MAAM,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,IAAI,CAAC;KAChD,WAAW,KAAK,IAAI;IACtB;IACA,KAAK,aAAa,OAAO;IACzB,KAAK,cAAc,IAAI,MAAM;GAC/B;EACF,SAAS,OAAO;GACd,OAAO;IAAE,WAAW;IAAO,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;IAAI,OAAO,QAAQ,KAAK;GAAE;EAClF;EAEA,IAAI;GACF,OAAO,MAAM,KAAK,QAAQ,OAAO,OAAO;EAC1C,SAAS,OAAO;GACd,OAAO;IAAE,WAAW;IAAO,QAAQ,QAAQ;IAAQ,OAAO,QAAQ,KAAK;GAAE;EAC3E,UAAU;GACR,IAAI,CAAC,KAAK,YAAY,IAAI,QAAQ,MAAM,GAAG,KAAK,kBAAkB,QAAQ,MAAM;EAClF;CACF;;CAGA,MAAM,YAAY,UAAiC,CAAC,GAAqB;EACvE,MAAM,uBACJ,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,MAAM,WAAW;GACvC,MAAM,SAAS,KAAK,QAAQ,IAAI,MAAM;GACtC,OAAO,WAAW,KAAA,KAAa,QAAQ,QAAQ,QAAQ,MAAM;EAC/D,CAAC;EACH,IAAI,CAAC,eAAe,GAAG,OAAO;EAC9B,MAAM,YAAY,QAAQ,aAAa;EACvC,cAAc,WAAW,uBAAuB;EAChD,OAAO,IAAI,SAAkB,YAAY;GACvC,IAAI;GACJ,MAAM,UAAU,YAA2B;IACzC,KAAK,YAAY,OAAO,MAAM;IAC9B,IAAI,UAAU,KAAA,GAAW,aAAa,KAAK;IAC3C,QAAQ,OAAO;GACjB;GACA,MAAM,eAAqB;IACzB,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI;GACpC;GACA,KAAK,YAAY,IAAI,MAAM;GAC3B,QAAQ,iBAAiB,OAAO,KAAK,GAAG,SAAS;GACjD,OAAO;EACT,CAAC;CACH;;CAGA,UACE,QACA,UACA,UAAgD,CAAC,GACpC;EACb,MAAM,UAAU,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,MACxC,WACC,OAAO,WAAW,UAAU,OAAO,WAAW,SAClD;EACA,IAAI,CAAC,SAAS,MAAM,IAAI,sBAAsB,gCAAgC,OAAO,EAAE;EACvF,IAAI,KAAK,cAAc,IAAI,MAAM,GAC/B,MAAM,IAAI,sBAAsB,qBAAqB,OAAO,kBAAkB;EAEhF,KAAK,yBAAyB,MAAM;EACpC,OAAO,KAAK,cACV,SACA,UACA,QAAQ,WAAW,QAAQ,QAAQ,UAAU,KAAA,GAC7C,QAAQ,KACV;CACF;CAEA,KAAK,QAA0C;EAC7C,OAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAC9B,QAAQ,WAAkC,OAAO,WAAW,SAAS,CAAC,CACtE,QAAQ,YAAY,QAAQ,SAAS,MAAM,CAAC,CAAC,CAC7C,IAAI,YAAY;CACrB;;CAGA,YAAY,QAAkD;EAC5D,OAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAC9B,QAAQ,WAAsC,OAAO,WAAW,SAAS,CAAC,CAC1E,QAAQ,WAAW,QAAQ,QAAQ,MAAM,CAAC,CAAC,CAC3C,KAAK,YAAY;GAChB,GAAG,iBAAiB,MAAM;GAC1B,OAAO,KAAK,YAAY,IAAI,OAAO,MAAM,IACrC,SACA,KAAK,cAAc,IAAI,OAAO,MAAM,IAClC,WACA;EACR,EAAE;CACN;CAEA,QAAQ,QAA8C;EACpD,MAAM,UAAU,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,WAAW,QAAQ,QAAQ,MAAM,CAAC;EACrF,MAAM,UAAU,QAAQ,QACrB,WAAsC,OAAO,WAAW,SAC3D;EACA,MAAM,WAAW,QAAQ,QAAQ,WAAkC,OAAO,WAAW,SAAS;EAC9F,MAAM,4BAAY,IAAI,IAA2B;EACjD,MAAM,2BAAW,IAAI,IAAY;EACjC,MAAM,oBAA8B,QAAQ,KACzC,WAAW,SAAS,OAAO,OAAO,SAAS,OAAO,MAAM,aAC3D;EACA,IAAI,cAAc;EAClB,IAAI,eAAe;EACnB,IAAI,kBAAkB;EACtB,IAAI,eAAe;EACnB,IAAI,mBAAmB;EACvB,IAAI,eAAe;EAEnB,KAAK,MAAM,WAAW,UAAU;GAC9B,eAAe,QAAQ;GACvB,gBAAgB,QAAQ;GACxB,mBAAmB,QAAQ,mBAAmB;GAC9C,gBAAgB,QAAQ,gBAAgB;GACxC,oBAAoB,QAAQ,oBAAoB;GAChD,gBAAgB,QAAQ;GACxB,IAAI,QAAQ,aAAa;IACvB,SAAS,IAAI,QAAQ,KAAK;IAC1B,kBAAkB,KAChB,QAAQ,SAAS,qBAAqB,QAAQ,MAAM,WAAW,QAAQ,MAAM,EAC/E;GACF;GACA,IAAI,QAAQ,cACV,kBAAkB,KAChB,4BAA4B,QAAQ,MAAM,WAAW,QAAQ,MAAM,EACrE;GAEF,IAAI,QAAQ,mBAAmB,KAAA,KAAa,QAAQ,UAAU,QAAQ,gBACpE,kBAAkB,KAChB,IAAI,QAAQ,MAAM,YAAY,QAAQ,QAAQ,mCAAmC,QAAQ,gBAC3F;GAEF,MAAM,SAAS,UAAU,IAAI,QAAQ,OAAO,KAAK,YAAY,QAAQ,OAAO;GAC5E,OAAO,SAAS;GAChB,OAAO,eAAe,QAAQ;GAC9B,OAAO,gBAAgB,QAAQ;GAC/B,OAAO,mBAAmB,OAAO,mBAAmB,MAAM,QAAQ,mBAAmB;GACrF,OAAO,gBAAgB,QAAQ,gBAAgB;GAC/C,OAAO,oBAAoB,OAAO,oBAAoB,MAAM,QAAQ,oBAAoB;GACxF,OAAO,WAAW,QAAQ;GAC1B,IAAI,QAAQ,aAAa,OAAO,iBAAiB;GACjD,IAAI,QAAQ,cAAc,OAAO,qBAAqB;GACtD,UAAU,IAAI,QAAQ,SAAS,MAAM;EACvC;EAEA,OAAO;GACL,YAAY,SAAS;GACrB,cAAc,QAAQ;GACtB,iBAAiB,QAAQ,QACtB,WAAW,CAAC,KAAK,cAAc,IAAI,OAAO,MAAM,KAAK,KAAK,YAAY,IAAI,OAAO,MAAM,CAC1F,CAAC,CAAC;GACF,iBAAiB,QAAQ,QAAQ,KAAK,WAAW,OAAO,OAAO,kBAAkB,IAAI,CAAC;GACtF;GACA;GACA;GACA;GACA;GACA;GACA,gBACE,QAAQ,SAAS,KAAK,SAAS,MAAM,YAAY,QAAQ,WAAW,IAChE;IAAE,MAAM;IAAc,KAAK;GAAK,IAChC,SAAS,OAAO,YAAY,QAAQ,kBAAkB,KAAA,CAAS,IAC7D;IAAE,MAAM;IAAY,KAAK;GAAa,IACtC;IAAE,MAAM;IAAa,KAAK;GAAa;GAC/C,WAAW,CAAC,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,cAAc,EAAE,OAAO,CAAC;GACpF,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK;GACnC,aAAa,SAAS,SAAS;GAC/B,eAAe,QAAQ,WAAW,KAAK,SAAS,OAAO,YAAY,CAAC,QAAQ,YAAY;GACxF,oBAAoB,kBAAkB,WAAW;GACjD,mBAAmB,CAAC,GAAG,IAAI,IAAI,iBAAiB,CAAC;EACnD;CACF;CAEA,cAAc,QAAQ,GAAS;EAC7B,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GACtC,MAAM,IAAI,gBACR,uEAAuE,OACzE;EAEF,IAAI,UAAU,GAAG;EACjB,KAAK,yBAAyB;EAC9B,KAAK,YAAY;GAAE,SAAS;GAAG,gBAAgB;EAAM,CAAC;EACtD,KAAK,kBAAkB;CACzB;CAEA,uBAAsC;EACpC,OAAO,KAAK,mBAAmB,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,eAAe,KAAK;CAC/E;CAEA,MAAc,QACZ,OACA,SAC4B;EAC5B,MAAM,SAAS,MAAM,UAAU,IAAI,gBAAgB,CAAC,CAAC;EACrD,IAAI,OAAO,SACT,OAAO,KAAK,cAAc,SAAS,WAAW,MAAM,GAAG;GACrD,OAAO,QAAQ;GACf,aAAa;GACb,cAAc;GACd,eAAe;EACjB,CAAC;EAGH,MAAM,YAAY,QAAQ,QAAQ,CAAC,CAAC,WAAW,MAAM,QAAQ,QAAQ,QAAQ,MAAM,CAAC;EACpF,MAAM,UAAU,MAAM,OAAO,WAAW,MAAM;EAC9C,IAAI,QAAQ,SAAS,WAAW;GAC9B,KAAK,YAAY,IAAI,QAAQ,MAAM;GACnC,KAAK,mBAAmB,OAAO,SAAS,SAAS;GACjD,OAAO,YAAY,QAAQ,QAAQ,WAAW,MAAM,CAAC;EACvD;EACA,IAAI,QAAQ,SAAS,SAAS;GAC5B,IAAI;GACJ,IAAI;IACF,WAAW,MAAM,mBAAmB,QAAQ,KAAK;GACnD,SAAS,cAAc;IACrB,OAAO,KAAK,eAAe,SAAS,QAAQ,OAAO,YAAY;GACjE;GACA,OAAO,KAAK,cAAc,SAAS,QAAQ,OAAO,YAAY,eAAe,QAAQ,KAAK,CAAC;EAC7F;EAEA,IAAI;GACF,MAAM,UAAU,KAAK,cAAc,SAAS,MAAM,QAAQ,QAAQ,KAAK,CAAC;GACxE,IAAI,QAAQ,mBAAmB,KAAA,KAAa,QAAQ,UAAU,QAAQ,gBACpE,OAAO,YACL,QAAQ,QACR,IAAI,6BAA6B,QAAQ,OAAO,QAAQ,SAAS,QAAQ,cAAc,GACvF,OACF;GAEF,OAAO;IAAE,WAAW;IAAM,QAAQ,QAAQ;IAAQ,OAAO,QAAQ;IAAO;GAAQ;EAClF,SAAS,cAAc;GACrB,IACE,wBAAwB,8BACxB,wBAAwB,uBAExB,OAAO,YAAY,QAAQ,QAAQ,YAAY;GAEjD,OAAO,KAAK,eAAe,SAAS,cAAc,YAAY;EAChE;CACF;CAEA,mBACE,OACA,SACA,WACM;EACN,UACG,MACE,UAAU;GACT,IAAI,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC,EAAE,WAAW,WAAW;GAC5D,IAAI;IACF,KAAK,cAAc,SAAS,MAAM,QAAQ,KAAK,CAAC;GAClD,QAAQ,CAER;EACF,IACC,UAAU;GACT,IAAI,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC,EAAE,WAAW,WAAW;GAC5D,MAAM,QAAQ,QAAQ,KAAK;GAC3B,IAAI;IACF,MAAM,WAAW,MAAM,mBAAmB,KAAK;IAC/C,KAAK,cAAc,SAAS,YAAY,eAAe,QAAQ,KAAK,GAAG,IAAI;GAC7E,SAAS,cAAc;IACrB,IACE,wBAAwB,8BACxB,wBAAwB,uBAExB;IAEF,KAAK,eAAe,SAAS,OAAO,YAAY;GAClD;EACF,CACF,CAAC,CACA,cAAc;GACb,KAAK,YAAY,OAAO,QAAQ,MAAM;GACtC,KAAK,kBAAkB,QAAQ,MAAM;EACvC,CAAC;CACL;CAEA,kBAA0B,QAAsB;EAC9C,KAAK,cAAc,OAAO,MAAM;EAChC,KAAK,MAAM,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAQ;CACvD;CAEA,MAAc,0BAA0B,QAAqC;EAC3E,IAAI,QAAQ,SAAS,MAAM,WAAW,MAAM;EAC5C,MAAM,IAAI,SAAe,SAAS,WAAW;GAC3C,IAAI,WAAW;GACf,MAAM,UAAU,UAAwB;IACtC,IAAI,UAAU;IACd,WAAW;IACX,KAAK,YAAY,OAAO,SAAS;IACjC,QAAQ,oBAAoB,SAAS,OAAO;IAC5C,IAAI,OAAO,OAAO,KAAK;SAClB,QAAQ;GACf;GACA,MAAM,kBAAwB,OAAO;GACrC,MAAM,gBAAsB,OAAO,WAAW,MAAO,CAAC;GACtD,KAAK,YAAY,IAAI,SAAS;GAC9B,QAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;GACzD,IAAI,KAAK,cAAc,SAAS,GAAG,UAAU;EAC/C,CAAC;CACH;CAEA,cACE,SACA,OACA,UACmB;EACnB,IAAI;GACF,MAAM,UAAU,KAAK,cAAc,SAAS,UAAU,IAAI;GAC1D,OAAO,YAAY,QAAQ,QAAQ,OAAO,OAAO;EACnD,SAAS,cAAc;GACrB,IACE,wBAAwB,8BACxB,wBAAwB,uBAExB,OAAO,YAAY,QAAQ,QAAQ,YAAY;GAEjD,OAAO,KAAK,eAAe,SAAS,OAAO,YAAY;EACzD;CACF;CAEA,eACE,SACA,OACA,cACmB;EACnB,IAAI;GACF,MAAM,UAAU,KAAK,cAAc,SAAS,eAAe,QAAQ,KAAK,GAAG,IAAI;GAC/E,OAAO,YACL,QAAQ,QACR,IAAI,wBAAwB,QAAQ,QAAQ,OAAO,cAAc,OAAO,GACxE,OACF;EACF,SAAS,OAAO;GACd,MAAM,QAAQ,iBAAiB,QAAQ,QAAQ,QAAQ,KAAK;GAC5D,OAAO,YAAY,QAAQ,QAAQ,KAAK;EAC1C;CACF;CAEA,cACE,SACA,UACA,SAAS,OACT,OACa;EACb,MAAM,UAAU,aAAa,SAAS,UAAU,QAAQ,KAAK;EAC7D,IAAI,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC,EAAE,WAAW,WAC/C,MAAM,IAAI,sBAAsB,qBAAqB,QAAQ,OAAO,iBAAiB;EAEvF,KAAK,aAAa,OAAO;EACzB,OAAO,aAAa,OAAO;CAC7B;CAEA,eAAuB,SAAwD;EAC7E,IAAI,CAAC,SAAS;GACZ,IAAI,KAAK,mBAAmB,KAAA,GAC1B,MAAM,IAAI,8BACR,6EACF;GAEF;EACF;EACA,IAAI,kCAAkC,SAAS;GAC7C,kBACE,QAAQ,8BACR,4CACF;GACA,OAAO,QAAQ;EACjB;EACA,IAAI,wBAAwB,SAC1B,OAAO,oBAAoB,QAAQ,oBAAoB,OAAO;EAEhE,MAAM,SAAS,aAAa,QAAQ,OAAO,OAAO;EAClD,IAAI,OAAO,aAAa;GACtB,IAAI,KAAK,mBAAmB,KAAA,GAC1B,MAAM,IAAI,8BACR,8CAA8C,QAAQ,MAAM,kBAC9D;GAEF;EACF;EACA,OAAO,OAAO;CAChB;CAEA,gCAAiD;EAC/C,OAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,MAC/B,WACC,OAAO,WAAW,aAClB,OAAO,mBAAmB,KAAA,KAC1B,OAAO,UAAU,OAAO,cAC5B;CACF;;;;;;CAOA,6BAA6C;EAC3C,IAAI,QAAQ;EACZ,KAAK,MAAM,UAAU,KAAK,QAAQ,OAAO,GAAG;GAC1C,IAAI,OAAO,WAAW,WAAW;GACjC,SAAS,OAAO,cAAe,OAAO,kBAAkB,OAAO,UAAW,OAAO;EACnF;EACA,OAAO;CACT;CAEA,aAAqB,QAAgC;EACnD,MAAM,SAAS,OAAO;EACtB,MAAM,UAAU,OAAO,WAAW,YAAY,SAAS,KAAA;EACvD,mBAAmB,KAAK,SAAS,MAAM;EACvC,MAAM,QACJ,OAAO,WAAW,YACd;GAAE,SAAS;GAAG,QAAQ,aAAa,MAAM;EAAE,IAC3C;GAAE,SAAS;GAAG,QAAQ,iBAAiB,MAAM;EAAE;EACrD,KAAK,YAAY,OAAO,QAAQ,OAAO;EACvC,KAAK,QAAQ,IAAI,QAAQ,YAAY,MAAM,CAAC;CAC9C;CAEA,yBAAiC,QAAuB;EACtD,IAAI,KAAK,sBAAsB,KAAK,mBAAmB,KAAA,GAAW;EAClE,KAAK,YAAY;GAAE,SAAS;GAAG,gBAAgB,KAAK;EAAe,GAAG,MAAM;EAC5E,KAAK,qBAAqB;CAC5B;CAEA,YAAoB,OAAwB,QAAiB,SAA6B;EACxF,IAAI;GACF,IAAI,KAAK,aAAa;IACpB,MAAM,eAAe,KAAK,YAAY,OAAO,KAAK,UAAU,GAAG,KAAK,UAAU,KAAK,EAAE,GAAG;IACxF,IAAI,iBAAiB,KAAA,GACnB,MAAM,IAAI,sBACR,8DAA8D,OAAO,IACrE;KAAE;KAAQ;IAAQ,CACpB;IAEF,aAAa,cAAc,sBAAsB;IACjD,KAAK,WAAW;GAClB;EACF,SAAS,OAAO;GACd,IAAI,iBAAiB,uBAAuB,MAAM;GAClD,MAAM,IAAI,2BAA2B,OAAO,QAAQ,OAAO;EAC7D;CACF;AACF;;AAeA,SAAgB,cAAc,OAA8B;CAC1D,OAAO,cAAc,KAAK,IAAI,QAAQ;AACxC;AAOA,SAAgB,aAAa,OAAe,OAA8B;CACxE,YAAY,KAAK;CACjB,IAAI,CAAC,oBAAoB,KAAK,GAAG,OAAO;EAAE,SAAS;EAAG,aAAa;CAAK;CACxE,OAAO;EACL,SAAS,aACP,MAAM,eAAe,MAAM,gBAAgB,MAAM,MAAM,oBAAoB,IAC3E,MAAM,cACN,KACF;EACA,aAAa;CACf;AACF;;AAGA,SAAgB,oBACd,SACA,OACQ;CACR,iBAAiB,MAAM,aAAa,mBAAmB;CACvD,iBAAiB,MAAM,cAAc,oBAAoB;CACzD,IAAI,MAAM,iBAAiB,KAAA,GACzB,iBAAiB,MAAM,cAAc,oBAAoB;CAE3D,IAAI,MAAM,qBAAqB,KAAA,GAC7B,iBAAiB,MAAM,kBAAkB,wBAAwB;CAEnE,kBAAkB,QAAQ,oBAAoB,4BAA4B;CAC1E,IAAI,QAAQ,6BAA6B,KAAA,GACvC,kBAAkB,QAAQ,0BAA0B,kCAAkC;CAExF,IAAI,QAAQ,4BAA4B,KAAA,GACtC,kBAAkB,QAAQ,yBAAyB,iCAAiC;CAEtF,kBAAkB,QAAQ,qBAAqB,6BAA6B;CAC5E,MAAM,kBAAkB,QAAQ,4BAA4B,QAAQ;CACpE,MAAM,iBAAiB,QAAQ,2BAA2B,QAAQ;CAClE,OACG,MAAM,cAAc,MAAa,QAAQ,sBACxC,MAAM,gBAAgB,KAAK,MAAa,mBACxC,MAAM,oBAAoB,KAAK,MAAa,iBAC7C,MAAM,eAAe,MAAa,QAAQ;AAE/C;AAOA,eAAe,OAAU,SAAqB,QAA0C;CACtF,OAAO,MAAM,IAAI,SAAS,YAAY;EACpC,IAAI,OAAO;EACX,MAAM,UAAU,UAA4B;GAC1C,IAAI,MAAM;GACV,OAAO;GACP,OAAO,oBAAoB,SAAS,OAAO;GAC3C,QAAQ,KAAK;EACf;EACA,MAAM,gBAAgB,OAAO,EAAE,MAAM,UAAU,CAAC;EAChD,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACxD,IAAI,OAAO,SAAS,QAAQ;EAC5B,QAAQ,MACL,UAAU,OAAO;GAAE,MAAM;GAAS;EAAM,CAAC,IACzC,UAAU,OAAO;GAAE,MAAM;GAAS,OAAO,QAAQ,KAAK;EAAE,CAAC,CAC5D;CACF,CAAC;AACH;AAEA,SAAS,aACP,SACA,UACA,SAAS,OACT,OACa;CACb,YAAY,QAAQ;CACpB,aAAa,SAAS,OAAO,eAAe;CAM5C,IALwB;EACtB,SAAS;EACT,SAAS;EACT,SAAS;CACX,CAAC,CAAC,QAAQ,UAAU,UAAU,KAAA,CACZ,CAAC,CAAC,SAAS,GAC3B,MAAM,IAAI,gBACR,mGACF;CAEF,MAAM,wBACJ,SAAS,uBAAuB,KAAA,IAC5B,KAAA,IACA,gBAAgB,SAAS,kBAAkB;CACjD,MAAM,YAAY,wBACd;EACE,SAAS,gBAAgB,UAAU,qBAAqB;EACxD,aAAa;CACf,IACA,aAAa,SAAS,OAAO,QAAQ;CACzC,MAAM,YAAY,SAAS,kBAAkB,KAAA;CAC7C,MAAM,sBAAsB,SAAS,qBAAqB,KAAA;CAC1D,IAAI,aAAa,SAAS,gBAAgB,MACxC,MAAM,IAAI,gBACR,2EACF;CAEF,IAAI,WAAW,kBAAkB,SAAS,eAAgB,eAAe;CACzE,IAAI,qBAAqB,kBAAkB,SAAS,kBAAmB,kBAAkB;CACzF,IAAI,uBAAuB,SAAS,gBAAgB,MAClD,MAAM,IAAI,gBACR,8EACF;CAEF,MAAM,eAAe,SAAS,iBAAiB;CAC/C,MAAM,cACJ,SAAS,gBAAgB,QACxB,CAAC,aAAa,CAAC,wBAAwB,gBAAgB,UAAU;CACpE,MAAM,uBACJ,CAAC,yBAAyB,CAAC,aAAa,CAAC,uBAAuB,CAAC,cAC7D,oBAAoB,SAAS,KAAK,IAClC;CACN,MAAM,iBACJ,CAAC,aAAa,CAAC,uBAAuB,CAAC,cAClC,0BACA,uBACG;EACE,qBAAqB,qBAAqB;EAC1C,sBAAsB,qBAAqB;CAC7C,IACA,KAAA,KACJ,KAAA;CACN,OAAO,aACL;EACE,QAAQ;EACR,QAAQ,QAAQ;EAChB,SAAS,QAAQ;EACjB,OAAO,QAAQ;EACf,OAAO,QAAQ;EACf,OAAO,SAAS;EAChB,aAAa,SAAS;EACtB,cAAc,SAAS;EACvB,GAAI,SAAS,oBAAoB,KAAA,IAC7B,CAAC,IACD,EAAE,iBAAiB,SAAS,gBAAgB;EAChD,GAAI,SAAS,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,SAAS,aAAa;EACrF,GAAI,SAAS,qBAAqB,KAAA,IAC9B,CAAC,IACD,EAAE,kBAAkB,SAAS,iBAAiB;EAClD,SAAS,cACL,IACA,YACE,SAAS,gBACT,sBACE,SAAS,mBACT,UAAU;EAClB;EACA;EACA,GAAI,iBAAiB,EAAE,SAAS,eAAe,IAAI,CAAC;EACpD,GAAI,YAAY,EAAE,eAAe,SAAS,cAAc,IAAI,CAAC;EAC7D,GAAI,sBAAsB,EAAE,kBAAkB,SAAS,iBAAiB,IAAI,CAAC;EAC7E,GAAI,QAAQ,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,QAAQ,eAAe;EACzF,GAAI,SAAS,EAAE,OAAO,SAAS,mBAAmB,IAAI,CAAC;EACvD,GAAI,QAAQ,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,KAAK,EAAE,IAAI,CAAC;EACpD,WAAW,QAAQ;CACrB,GACA,kBACF;AACF;AAEA,MAAM,iBAAiB,EAAE,OAAO,CAAC,CAAC,QAAQ,UAAU,MAAM,KAAK,CAAC,CAAC,SAAS,GAAG,mBAAmB;AAChG,MAAM,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO;AACzD,MAAM,cAAc,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO;AACpD,MAAM,OAAO,EAAE,OAAO,gBAAgB,EAAE,OAAO,CAAC;AAChD,MAAM,oBAAoB,EAAE,aAAa;CACvC,qBAAqB;CACrB,2BAA2B,YAAY,SAAS;CAChD,0BAA0B,YAAY,SAAS;CAC/C,sBAAsB;AACxB,CAAC;AACD,MAAM,oBAAoB;CACxB,QAAQ;CACR,SAAS;CACT,OAAO;CACP,OAAO;CACP,OAAO;CACP,gBAAgB,YAAY,SAAS;CACrC,MAAM,KAAK,SAAS;CACpB,WAAW;AACb;AACA,MAAM,wBAAwB,EAAE,aAAa;CAC3C,QAAQ,EAAE,QAAQ,SAAS;CAC3B,GAAG;AACL,CAAC;AACD,MAAM,uBAAuB;CAC3B,QAAQ,EAAE,QAAQ,SAAS;CAC3B,GAAG;CACH,aAAa;CACb,cAAc;CACd,cAAc,WAAW,SAAS;CAClC,SAAS;CACT,aAAa,EAAE,QAAQ;CACvB,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACvC,SAAS,kBAAkB,SAAS;CACpC,eAAe,YAAY,SAAS;CACpC,kBAAkB,YAAY,SAAS;CACvC,OAAO,eAAe,SAAS;AACjC;AACA,MAAM,oBAAoB,EACvB,aAAa;CACZ,GAAG;CACH,iBAAiB,WAAW,SAAS;CACrC,kBAAkB,WAAW,SAAS;AACxC,CAAC,CAAC,CACD,aAAa,SAAS,QAAQ,oBAAoB,SAAS,GAAG,CAAC;AAElE,SAAS,oBACP,SAQA,KACM;CACN,IAAI,QAAQ,oBAAoB,KAAA,KAAa,QAAQ,kBAAkB,QAAQ,cAC7E,IAAI,SAAS;EAAE,MAAM;EAAU,SAAS;CAA+C,CAAC;CAG1F,IAAI,QAAQ,kBAAkB,KAAA,KAAa,QAAQ,qBAAqB,KAAA,GACtE,IAAI,SAAS;EACX,MAAM;EACN,SAAS;CACX,CAAC;CAGH,IAAI,QAAQ,kBAAkB,KAAA,GAAW;EACvC,IAAI,QAAQ,eAAe,QAAQ,YAAY,QAAQ,eACrD,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAA8C,CAAC;EAEzF,IAAI,QAAQ,YAAY,KAAA,GACtB,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAiD,CAAC;EAE5F;CACF;CAEA,IAAI,QAAQ,qBAAqB,KAAA,GAAW;EAC1C,IAAI,QAAQ,eAAe,QAAQ,YAAY,QAAQ,kBACrD,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAoD,CAAC;EAE/F,IAAI,QAAQ,YAAY,KAAA,GACtB,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAmD,CAAC;EAE9F;CACF;CAEA,IAAI,QAAQ,aAAa;EACvB,IAAI,QAAQ,YAAY,GACtB,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAmC,CAAC;EAE9E,IAAI,QAAQ,YAAY,KAAA,GACtB,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAkD,CAAC;EAE7F;CACF;CAEA,IAAI,QAAQ,cACV,IAAI,SAAS;EAAE,MAAM;EAAU,SAAS;CAA4C,CAAC;CAEvF,IAAI,CAAC,QAAQ,SAAS;EACpB,IAAI,SAAS;GAAE,MAAM;GAAU,SAAS;EAAmD,CAAC;EAC5F;CACF;CAEA,MAAM,WAAW,gBAAgB,SAAS,QAAQ,OAAO;CACzD,IAAI,CAAC,iBAAiB,QAAQ,SAAS,QAAQ,GAC7C,IAAI,SAAS;EACX,MAAM;EACN,SAAS,kBAAkB,QAAQ,QAAQ,mCAAmC;CAChF,CAAC;AAEL;AAEA,SAAS,iBAAiB,MAAc,OAAwB;CAC9D,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;CACzD,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,OAAO,UAAU,QAAQ;AAC5D;AAEA,MAAM,wBAAwB,EAAE,MAAM;CACpC,EAAE,aAAa;EACb,SAAS,EAAE,QAAQ,CAAC;EACpB,QAAQ;CACV,CAAC;CACD,EAAE,aAAa;EACb,SAAS,EAAE,QAAQ,CAAC;EACpB,QAAQ;CACV,CAAC;CACD,EAAE,aAAa;EACb,SAAS,EAAE,QAAQ,CAAC;EACpB,gBAAgB;CAClB,CAAC;CACD,EAAE,aAAa;EACb,SAAS,EAAE,QAAQ,CAAC;EACpB,gBAAgB;CAClB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,YAInB;CACA,MAAM,0BAAU,IAAI,IAA8B;CAClD,IAAI,iBAAiB;CACrB,IAAI;CACJ,IAAI,aAAa;CACjB,IAAI;EACF,KAAK,MAAM,QAAQ,sBAAsB,UAAU,CAAC,CAAC,MAAM,IAAI,GAAG;GAChE,IAAI,CAAC,KAAK,KAAK,GAAG;GAClB,cAAc;GACd,MAAM,QAAQ,sBAAsB,MAAM,KAAK,MAAM,IAAI,CAAC;GAC1D,IAAI,YAAY,OAAO;IACrB,MAAM,SAAS,MAAM;IACrB,mBAAmB,SAAS,MAAM;IAClC,QAAQ,IAAI,OAAO,QAAQ,YAAY,MAAM,CAAC;GAChD,OAAO,IAAI,oBAAoB,OAAO;IACpC,kBAAkB,MAAM;IACxB,IAAI,CAAC,OAAO,cAAc,cAAc,GACtC,MAAM,IAAI,gBAAgB,6DAA6D;GAE3F,OAAO;IACL,IAAI,mBAAmB,KAAA,GACrB,MAAM,IAAI,gBAAgB,8CAA8C;IAE1E,iBAAiB,MAAM;GACzB;EACF;EACA,OAAO;GACL,SAAS,CAAC,GAAG,QAAQ,OAAO,CAAC;GAC7B;GACA,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;EAC3D;CACF,SAAS,OAAO;EACd,MAAM,IAAI,gBACR,uCAAuC,cAAc,EAAE,IAAI,kBAAkB,KAAK,KAClF,EAAE,MAAM,CACV;CACF;AACF;AAEA,SAAS,sBAAsB,YAA4B;CACzD,IAAI,CAAC,cAAc,WAAW,SAAS,IAAI,GAAG,OAAO;CACrD,MAAM,eAAe,WAAW,YAAY,IAAI;CAChD,MAAM,OAAO,WAAW,MAAM,eAAe,CAAC;CAC9C,IAAI;EACF,KAAK,MAAM,IAAI;CACjB,QAAQ;EACN,OAAO,eAAe,IAAI,KAAK,WAAW,MAAM,GAAG,eAAe,CAAC;CACrE;CACA,MAAM,IAAI,gBACR,8EACF;AACF;AAEA,SAAS,mBACP,SACA,QACM;CACN,MAAM,UAAU,QAAQ,IAAI,OAAO,MAAM;CACzC,IAAI,CAAC,SAAS;CACd,IAAI,OAAO,WAAW,aAAa,QAAQ,WAAW,WACpD,MAAM,IAAI,sBAAsB,iCAAiC,OAAO,OAAO,EAAE;CAEnF,IAAI,CAAC,gBAAgB,SAAS,MAAM,GAClC,MAAM,IAAI,gBAAgB,qDAAqD,OAAO,OAAO,EAAE;AAEnG;AAEA,SAAS,gBAAgB,QAAsB,OAA8B;CAC3E,OACE,OAAO,YAAY,MAAM,WACzB,OAAO,UAAU,MAAM,SACvB,OAAO,UAAU,MAAM,SACvB,OAAO,mBAAmB,MAAM,kBAChC,OAAO,cAAc,MAAM,aAC3B,SAAS,OAAO,MAAM,MAAM,IAAI;AAEpC;AAEA,SAAS,SACP,MACA,OACS;CACT,MAAM,cAAc,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;CACpF,MAAM,eAAe,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;CACtF,OAAO,KAAK,UAAU,WAAW,MAAM,KAAK,UAAU,YAAY;AACpE;AAEA,SAAS,aAAa,OAAgB,MAA2B;CAC/D,IAAI;EACF,OAAO,kBAAkB,MAAM,KAAK;CACtC,SAAS,OAAO;EACd,MAAM,IAAI,gBAAgB,uBAAuB,KAAK,IAAI,kBAAkB,KAAK,KAAK,EAAE,MAAM,CAAC;CACjG;AACF;AAEA,SAAS,qBAAqB,OAAgB,MAA2B;CACvE,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO,aAAa,OAAO,IAAI;CAChF,MAAM,YAAY,EAAE,GAAG,MAAM;CAC7B,IACE,UAAU,WAAW,aACrB,UAAU,kBAAkB,KAAA,KAC5B,UAAU,qBAAqB,KAAA,KAC/B,UAAU,gBAAgB,SAC1B,UAAU,YAAY,KAAA,KACtB,OAAO,UAAU,UAAU,UAC3B;EACA,MAAM,UAAU,oBAAoB,UAAU,KAAK;EACnD,IAAI,SACF,UAAU,UAAU;GAClB,qBAAqB,QAAQ;GAC7B,sBAAsB,QAAQ;EAChC;CAEJ;CACA,OAAO,aAAa,WAAW,IAAI;AACrC;AAEA,SAAS,oBACP,OACM;CACN,aAAa,MAAM,SAAS,SAAS;CACrC,aAAa,MAAM,OAAO,OAAO;CACjC,aAAa,MAAM,OAAO,OAAO;CACjC,IAAI,MAAM,UAAU,KAAA,GAAW,aAAa,MAAM,OAAO,OAAO;CAChE,IAAI,MAAM,SAAS,KAAA,GAAW;EAC5B,MAAM,SAAS,KAAK,UAAU,MAAM,IAAI;EACxC,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,gBAAgB,6BAA6B,OAAO,MAAM,SAAS;CACjF;AACF;AAEA,SAAS,QAAQ,QAAsB,QAA+C;CACpF,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,YAAY,KAAA,KAAa,OAAO,YAAY,OAAO,SAAS,OAAO;CAC9E,IAAI,OAAO,UAAU,KAAA,KAAa,OAAO,UAAU,OAAO,OAAO,OAAO;CACxE,OAAO,OAAO,QAAQ,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,WAAW,OAAO,OAAO,SAAS,KAAK;AAC/F;AAEA,SAAS,YAAY,QAA4C;CAC/D,IAAI,OAAO,WAAW,WAAW,OAAO,aAAa,MAAM;CAC3D,OAAO,iBAAiB,MAAM;AAChC;AAEA,SAAS,iBAAiB,QAA0C;CAClE,MAAM,EAAE,MAAM,GAAG,SAAS;CAC1B,OAAO;EAAE,GAAG;EAAM,GAAI,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC;CAAG;AAC3D;AAEA,SAAS,aAAa,SAAmC;CACvD,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS;CACnC,OAAO;EACL,GAAG;EACH,GAAI,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC;EACpC,GAAI,UAAU,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC;CAC/C;AACF;AAEA,SAAS,gBAAgB,OAAkB,SAAsD;CAC/F,MAAM,kBAAkB,QAAQ,6BAA6B,QAAQ;CACrE,MAAM,iBAAiB,QAAQ,4BAA4B,QAAQ;CACnE,OACG,MAAM,cAAc,MAAQ,QAAQ,uBACnC,MAAM,gBAAgB,KAAK,MAAQ,mBACnC,MAAM,oBAAoB,KAAK,MAAQ,iBACxC,MAAM,eAAe,MAAQ,QAAQ;AAE1C;AAEA,SAAS,gBAAgB,SAAkE;CACzF,oBAAoB,SAAS;EAAE,aAAa;EAAG,cAAc;CAAE,CAAC;CAChE,OAAO;EACL,qBAAqB,QAAQ,qBAAqB;EAClD,GAAI,QAAQ,6BAA6B,KAAA,IACrC,CAAC,IACD,EAAE,2BAA2B,QAAQ,2BAA2B,IAAK;EACzE,GAAI,QAAQ,4BAA4B,KAAA,IACpC,CAAC,IACD,EAAE,0BAA0B,QAAQ,0BAA0B,IAAK;EACvE,sBAAsB,QAAQ,sBAAsB;CACtD;AACF;AAEA,SAAS,YAAY,SAAqC;CACxD,OAAO;EACL;EACA,OAAO;EACP,aAAa;EACb,cAAc;EACd,iBAAiB;EACjB,cAAc;EACd,kBAAkB;EAClB,SAAS;EACT,eAAe;EACf,mBAAmB;CACrB;AACF;AAEA,SAAS,aAAa,OAA0C;CAC9D,IAAI,MAAM,OAAO,OAAO,MAAM;CAC9B,IAAI,MAAM,iBAAiB,WAAW,MAAM,eAAe,OAAO,MAAM,cAAc;CACtF,OAAO;AACT;AAEA,SAAS,eAAe,OAAiC;CACvD,OAAO;EAAE;EAAO,aAAa;EAAG,cAAc;EAAG,aAAa;EAAM,cAAc;CAAK;AACzF;AAEA,SAAS,cAAc,OAAmC;CACxD,IAAI,UAAU,KAAA,GAAW;EACvB,aAAa,OAAO,QAAQ;EAC5B,OAAO;CACT;CACA,IAAI,OAAO,WAAW,QAAQ,eAAe,YAC3C,MAAM,IAAI,gBAAgB,kEAAkE;CAE9F,OAAO,WAAW,OAAO,WAAW;AACtC;AAEA,SAAS,WAAW,QAA4B;CAC9C,MAAM,SAAU,OAAgC;CAChD,IAAI,kBAAkB,OAAO,OAAO;CACpC,MAAM,wBAAQ,IAAI,MAAM,+BAA+B;CACvD,MAAM,OAAO;CACb,OAAO;AACT;AAEA,SAAS,QAAQ,OAAuB;CACtC,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACjE;AAEA,SAAS,YAAe,QAAgB,OAAc,SAA0C;CAC9F,OAAO;EACL,WAAW;EACX;EACA;EACA,GAAI,UAAU,EAAE,SAAS,aAAa,OAAO,EAAE,IAAI,CAAC;CACtD;AACF;AAEA,SAAS,kBAAkB,OAAwB;CACjD,OAAO,iBAAiB,EAAE,WAAW,EAAE,cAAc,KAAK,IAAI,QAAQ,KAAK,CAAC,CAAC;AAC/E;AAEA,SAAS,YAAY,OAAwB;CAC3C,iBAAiB,MAAM,aAAa,aAAa;CACjD,iBAAiB,MAAM,cAAc,cAAc;CACnD,IAAI,MAAM,oBAAoB,KAAA,GAAW;EACvC,iBAAiB,MAAM,iBAAiB,iBAAiB;EACzD,IAAI,MAAM,kBAAkB,MAAM,cAChC,MAAM,IAAI,gBAAgB,0DAA0D;CAExF;CACA,IAAI,MAAM,iBAAiB,KAAA,GAAW,iBAAiB,MAAM,cAAc,cAAc;CACzF,IAAI,MAAM,qBAAqB,KAAA,GAC7B,iBAAiB,MAAM,kBAAkB,kBAAkB;AAE/D;AAEA,SAAS,iBAAiB,OAAgB,MAAuC;CAC/E,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GACnE,MAAM,IAAI,gBACR,eAAe,KAAK,uCAAuC,OAAO,KAAK,GACzE;AAEJ;AAEA,SAAS,kBAAkB,OAAgB,MAAuC;CAChF,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,GAClE,MAAM,IAAI,gBACR,eAAe,KAAK,6CAA6C,OAAO,KAAK,GAC/E;AAEJ;AAEA,SAAS,cAAc,OAAgB,MAAuC;CAC5E,IACE,OAAO,UAAU,YACjB,CAAC,OAAO,cAAc,KAAK,KAC3B,QAAQ,KACR,QAAQ,YAER,MAAM,IAAI,gBACR,eAAe,KAAK,uEAAuE,OAAO,KAAK,GACzG;AAEJ;AAEA,SAAS,aAAa,OAAgB,MAAuC;CAC3E,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,WAAW,GACvD,MAAM,IAAI,gBAAgB,eAAe,KAAK,4BAA4B;AAE9E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-groups-DOriCbkR.d.ts","names":[],"sources":["../src/analyst/tool-groups.ts"],"mappings":";;;;KAmBY;;;;;;;;;;;;;;;;;;;;iBAyDI,wBACd,OAAO,oBACP,OAAO,qBACN"}