@tangle-network/agent-eval 0.137.0 → 0.138.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +33 -0
  3. package/dist/analyst/index.d.ts +473 -39
  4. package/dist/analyst/index.d.ts.map +1 -1
  5. package/dist/analyst/index.js +11 -593
  6. package/dist/analyst/index.js.map +1 -1
  7. package/dist/{analyze-runs-PVtnfjvA.d.ts → analyze-runs-CPYxfPWT.d.ts} +5 -5
  8. package/dist/{analyze-runs-PVtnfjvA.d.ts.map → analyze-runs-CPYxfPWT.d.ts.map} +1 -1
  9. package/dist/{benchmark-YDrpumqB.js → benchmark-D8dkki-J.js} +299 -159
  10. package/dist/benchmark-D8dkki-J.js.map +1 -0
  11. package/dist/{benchmark-CHX4orG7.d.ts → benchmark-DlQgU_XI.d.ts} +67 -15
  12. package/dist/benchmark-DlQgU_XI.d.ts.map +1 -0
  13. package/dist/benchmark-command-CMqVqReF.js +4332 -0
  14. package/dist/benchmark-command-CMqVqReF.js.map +1 -0
  15. package/dist/benchmarks/index.d.ts +1 -1
  16. package/dist/benchmarks/index.js +1 -1
  17. package/dist/{benchmarks-DCLkQOmc.js → benchmarks-BJ_xK5rQ.js} +4 -3
  18. package/dist/{benchmarks-DCLkQOmc.js.map → benchmarks-BJ_xK5rQ.js.map} +1 -1
  19. package/dist/campaign/index.d.ts +5 -5
  20. package/dist/campaign/index.js +3 -3
  21. package/dist/{campaign-lgObcHFC.js → campaign-BIBS-NHV.js} +16 -9
  22. package/dist/campaign-BIBS-NHV.js.map +1 -0
  23. package/dist/cli.js +9 -2
  24. package/dist/cli.js.map +1 -1
  25. package/dist/{client-C8L6h6Wf.d.ts → client-BwPKohkJ.d.ts} +4 -4
  26. package/dist/{client-C8L6h6Wf.d.ts.map → client-BwPKohkJ.d.ts.map} +1 -1
  27. package/dist/{completion-verifier-DSyRNVzU.d.ts → completion-verifier-B4-IMYcS.d.ts} +3 -3
  28. package/dist/{completion-verifier-DSyRNVzU.d.ts.map → completion-verifier-B4-IMYcS.d.ts.map} +1 -1
  29. package/dist/contract/index.d.ts +10 -10
  30. package/dist/contract/index.js +8 -8
  31. package/dist/control.d.ts +2 -2
  32. package/dist/{cost-ledger-D2o6JOrL.d.ts → cost-ledger-B1D3COAc.d.ts} +5 -4
  33. package/dist/{cost-ledger-D2o6JOrL.d.ts.map → cost-ledger-B1D3COAc.d.ts.map} +1 -1
  34. package/dist/{cost-ledger-D-5_-dhi.js → cost-ledger-CHDLA0Ss.js} +90 -45
  35. package/dist/cost-ledger-CHDLA0Ss.js.map +1 -0
  36. package/dist/{default-registry-Dc5D_Loc.d.ts → default-registry-PUhIVRWz.d.ts} +18 -5
  37. package/dist/default-registry-PUhIVRWz.d.ts.map +1 -0
  38. package/dist/{default-registry-CLXbRt0f.js → default-registry-lp5R0lve.js} +1503 -258
  39. package/dist/default-registry-lp5R0lve.js.map +1 -0
  40. package/dist/{eval-campaign-CHqfLnff.js → eval-campaign-9MozgKL7.js} +2 -2
  41. package/dist/{eval-campaign-CHqfLnff.js.map → eval-campaign-9MozgKL7.js.map} +1 -1
  42. package/dist/exact-types-Dpw2LeHA.d.ts +234 -0
  43. package/dist/exact-types-Dpw2LeHA.d.ts.map +1 -0
  44. package/dist/{extract-usage-p-56bh8q.js → extract-usage-CS391dOE.js} +2 -2
  45. package/dist/{extract-usage-p-56bh8q.js.map → extract-usage-CS391dOE.js.map} +1 -1
  46. package/dist/{feedback-trajectory-N_F0PwHz.d.ts → feedback-trajectory-CoNep7rl.d.ts} +3 -2
  47. package/dist/feedback-trajectory-CoNep7rl.d.ts.map +1 -0
  48. package/dist/fuzz.d.ts +1 -1
  49. package/dist/fuzz.js +1 -1
  50. package/dist/hosted/index.d.ts +3 -3
  51. package/dist/{index-U3RHOShi.d.ts → index-B2-IxCMB.d.ts} +2 -2
  52. package/dist/{index-U3RHOShi.d.ts.map → index-B2-IxCMB.d.ts.map} +1 -1
  53. package/dist/{index-BnP1QJUv.d.ts → index-CjVYlVBK.d.ts} +5 -5
  54. package/dist/{index-BnP1QJUv.d.ts.map → index-CjVYlVBK.d.ts.map} +1 -1
  55. package/dist/{index-C-Pr4OWg.d.ts → index-D0cxAdaV.d.ts} +11 -10
  56. package/dist/index-D0cxAdaV.d.ts.map +1 -0
  57. package/dist/index-DEb46kc6.d.ts.map +1 -1
  58. package/dist/{index-DRNl6g_N.d.ts → index-sMN_hI4E.d.ts} +3 -3
  59. package/dist/{index-DRNl6g_N.d.ts.map → index-sMN_hI4E.d.ts.map} +1 -1
  60. package/dist/index.d.ts +24 -23
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +19 -353
  63. package/dist/index.js.map +1 -1
  64. package/dist/{insight-report-B9ooYH_g.d.ts → insight-report-CXd8VBDR.d.ts} +4 -4
  65. package/dist/{insight-report-B9ooYH_g.d.ts.map → insight-report-CXd8VBDR.d.ts.map} +1 -1
  66. package/dist/{integrity-CKxosZ5Z.d.ts → integrity-B-MLFz0I.d.ts} +2 -2
  67. package/dist/{integrity-CKxosZ5Z.d.ts.map → integrity-B-MLFz0I.d.ts.map} +1 -1
  68. package/dist/ledger-core/index.js +1 -1
  69. package/dist/{ledger-core-t6sItivm.js → ledger-core-C0Yx1I14.js} +220 -27
  70. package/dist/ledger-core-C0Yx1I14.js.map +1 -0
  71. package/dist/{llm-client-DKB25jV8.js → llm-client-Cj3c7PEm.js} +5 -5
  72. package/dist/llm-client-Cj3c7PEm.js.map +1 -0
  73. package/dist/meta-eval/index.d.ts +2 -2
  74. package/dist/multishot/index.d.ts +2 -2
  75. package/dist/openapi.json +1 -1
  76. package/dist/{proposal-findings-DCawte-y.js → proposal-findings-2GIUo1et.js} +2 -68
  77. package/dist/proposal-findings-2GIUo1et.js.map +1 -0
  78. package/dist/{registry-BdM7SuTr.d.ts → registry-C4yJTza7.d.ts} +60 -6
  79. package/dist/registry-C4yJTza7.d.ts.map +1 -0
  80. package/dist/{release-report-CofgVNZt.d.ts → release-report-CoyvyLBs.d.ts} +3 -3
  81. package/dist/{release-report-CofgVNZt.d.ts.map → release-report-CoyvyLBs.d.ts.map} +1 -1
  82. package/dist/{replay-Bju0T8Ls.js → replay-Cb-4Vf0k.js} +8 -7
  83. package/dist/replay-Cb-4Vf0k.js.map +1 -0
  84. package/dist/{replay-K8FaC0CB.d.ts → replay-DbIYwso6.d.ts} +7 -7
  85. package/dist/{replay-K8FaC0CB.d.ts.map → replay-DbIYwso6.d.ts.map} +1 -1
  86. package/dist/reporting.d.ts +4 -4
  87. package/dist/{researcher-Da0Wj-bt.d.ts → researcher-BCeOEjtR.d.ts} +5 -5
  88. package/dist/{researcher-Da0Wj-bt.d.ts.map → researcher-BCeOEjtR.d.ts.map} +1 -1
  89. package/dist/{reward-hacking-CQ3hTCO3.d.ts → reward-hacking-sE2l_NV6.d.ts} +2 -2
  90. package/dist/{reward-hacking-CQ3hTCO3.d.ts.map → reward-hacking-sE2l_NV6.d.ts.map} +1 -1
  91. package/dist/rl.d.ts +5 -5
  92. package/dist/rl.js +1 -1
  93. package/dist/rollout/index.d.ts +1 -1
  94. package/dist/{rubric-predictive-validity-C4sztLR3.d.ts → rubric-predictive-validity-w2klGv1u.d.ts} +2 -2
  95. package/dist/{rubric-predictive-validity-C4sztLR3.d.ts.map → rubric-predictive-validity-w2klGv1u.d.ts.map} +1 -1
  96. package/dist/{run-evidence-BDIircdA.d.ts → run-evidence-CbE0A8Xg.d.ts} +3 -3
  97. package/dist/{run-evidence-BDIircdA.d.ts.map → run-evidence-CbE0A8Xg.d.ts.map} +1 -1
  98. package/dist/{run-record-BPCa2rQ8.d.ts → run-record-DwHMk1Ai.d.ts} +2 -2
  99. package/dist/{run-record-BPCa2rQ8.d.ts.map → run-record-DwHMk1Ai.d.ts.map} +1 -1
  100. package/dist/{semantic-concept-judge-Bz64IckK.js → semantic-concept-judge-DYXDPZW0.js} +11 -5
  101. package/dist/semantic-concept-judge-DYXDPZW0.js.map +1 -0
  102. package/dist/{server-KjXZZUDX.js → server-DLEvyW2z.js} +3 -3
  103. package/dist/{server-KjXZZUDX.js.map → server-DLEvyW2z.js.map} +1 -1
  104. package/dist/single-run-lock-D_bS5xhj.js +318 -0
  105. package/dist/single-run-lock-D_bS5xhj.js.map +1 -0
  106. package/dist/{skill-usage-CFDLLlhF.d.ts → skill-usage-Bv3G4VkA.d.ts} +18 -8
  107. package/dist/skill-usage-Bv3G4VkA.d.ts.map +1 -0
  108. package/dist/{skillopt-optimization-method-f4o9sUT4.js → skillopt-optimization-method-CjKMZy0d.js} +7 -182
  109. package/dist/skillopt-optimization-method-CjKMZy0d.js.map +1 -0
  110. package/dist/{skillopt-optimization-method-BpbnlvAZ.d.ts → skillopt-optimization-method-CzfnA8O-.d.ts} +10 -10
  111. package/dist/{skillopt-optimization-method-BpbnlvAZ.d.ts.map → skillopt-optimization-method-CzfnA8O-.d.ts.map} +1 -1
  112. package/dist/{statistics-_7P642CN.d.ts → statistics-mf70aXKp.d.ts} +2 -2
  113. package/dist/{statistics-_7P642CN.d.ts.map → statistics-mf70aXKp.d.ts.map} +1 -1
  114. package/dist/{tools-DZk2Jn64.js → store-otlp-BenKynPE.js} +4 -192
  115. package/dist/store-otlp-BenKynPE.js.map +1 -0
  116. package/dist/{summary-report-DHipz9Kx.d.ts → summary-report-BKinV4yD.d.ts} +3 -3
  117. package/dist/{summary-report-DHipz9Kx.d.ts.map → summary-report-BKinV4yD.d.ts.map} +1 -1
  118. package/dist/tools-DZGdROtG.js +255 -0
  119. package/dist/tools-DZGdROtG.js.map +1 -0
  120. package/dist/traces.d.ts +5 -5
  121. package/dist/traces.js +4 -3
  122. package/dist/{types-CTvKfr5F.d.ts → types-5q2T25iW.d.ts} +2 -2
  123. package/dist/{types-CTvKfr5F.d.ts.map → types-5q2T25iW.d.ts.map} +1 -1
  124. package/dist/{types-CKswbJGO.d.ts → types-BtJhn8v6.d.ts} +4 -4
  125. package/dist/{types-CKswbJGO.d.ts.map → types-BtJhn8v6.d.ts.map} +1 -1
  126. package/dist/{types-CTGbIm57.d.ts → types-zFYez3PK.d.ts} +5 -5
  127. package/dist/{types-CTGbIm57.d.ts.map → types-zFYez3PK.d.ts.map} +1 -1
  128. package/dist/wire/index.d.ts +3 -3
  129. package/dist/wire/index.js +1 -1
  130. package/docs/trace-analysis.md +123 -3
  131. package/package.json +5 -3
  132. package/dist/benchmark-CHX4orG7.d.ts.map +0 -1
  133. package/dist/benchmark-YDrpumqB.js.map +0 -1
  134. package/dist/campaign-lgObcHFC.js.map +0 -1
  135. package/dist/concurrency-MUjT7VjM.js +0 -109
  136. package/dist/concurrency-MUjT7VjM.js.map +0 -1
  137. package/dist/cost-ledger-D-5_-dhi.js.map +0 -1
  138. package/dist/default-registry-CLXbRt0f.js.map +0 -1
  139. package/dist/default-registry-Dc5D_Loc.d.ts.map +0 -1
  140. package/dist/feedback-trajectory-N_F0PwHz.d.ts.map +0 -1
  141. package/dist/index-C-Pr4OWg.d.ts.map +0 -1
  142. package/dist/ledger-core-t6sItivm.js.map +0 -1
  143. package/dist/llm-client-DKB25jV8.js.map +0 -1
  144. package/dist/proposal-findings-DCawte-y.js.map +0 -1
  145. package/dist/registry-BdM7SuTr.d.ts.map +0 -1
  146. package/dist/replay-Bju0T8Ls.js.map +0 -1
  147. package/dist/semantic-concept-judge-Bz64IckK.js.map +0 -1
  148. package/dist/skill-usage-CFDLLlhF.d.ts.map +0 -1
  149. package/dist/skillopt-optimization-method-f4o9sUT4.js.map +0 -1
  150. package/dist/tools-DZk2Jn64.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { o as runRolloutReleaseCli } from "./hf-dataset-DBJXXoY1.js";
3
- import { a as runRpcBatch, o as runRpcOnce, p as handleVersion, r as startServerAsync, s as buildOpenApi } from "./server-KjXZZUDX.js";
3
+ import { n as runAnalystBenchmarkCommand } from "./benchmark-command-CMqVqReF.js";
4
+ import { a as runRpcBatch, o as runRpcOnce, p as handleVersion, r as startServerAsync, s as buildOpenApi } from "./server-DLEvyW2z.js";
4
5
  import { writeFileSync } from "node:fs";
5
6
  //#region src/cli-config.ts
6
7
  function resolveCliLlmConfig(env = process.env) {
@@ -32,6 +33,7 @@ function nonEmpty(value) {
32
33
  * agent-eval serve [--port 5005] [--host 127.0.0.1]
33
34
  * agent-eval rpc <method> # one request from stdin → one response on stdout
34
35
  * agent-eval rpc-batch <method> # JSONL stdin → JSONL stdout
36
+ * agent-eval analyst-benchmark ... # benchmark a real-model trace analyst
35
37
  * agent-eval openapi [--out path] # write OpenAPI spec
36
38
  * agent-eval version
37
39
  *
@@ -85,6 +87,9 @@ Commands:
85
87
  rollout-release <ledger.jsonl...> --out <dir> [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]
86
88
  Build a HuggingFace-ready dataset dir from tangle.rollout.v1 ledgers:
87
89
  validate, fail-closed split filter, scrub, export formats + card.
90
+ analyst-benchmark --dataset <agentrx|codetracebench> --labels <path> --trace-dir <path> [--artifact-dir <path>] --out <dir> ...
91
+ Compare an empty baseline with a real-model trace analyst on public labels.
92
+ Run with --help for all required inputs and controls.
88
93
  version
89
94
  Print server + wire-protocol version JSON.
90
95
 
@@ -96,6 +101,7 @@ Without arguments, prints this help.`;
96
101
  async function main() {
97
102
  const { command, positional, flags } = parseArgs(process.argv.slice(2));
98
103
  assertKnownFlags(command, flags);
104
+ if (command === "analyst-benchmark" && flags.help === "true") return await runAnalystBenchmarkCommand(process.argv.slice(3));
99
105
  if (flags.help === "true") {
100
106
  process.stdout.write(`${HELP}\n`);
101
107
  return 0;
@@ -148,6 +154,7 @@ async function main() {
148
154
  return 0;
149
155
  }
150
156
  case "rollout-release": return await runRolloutReleaseCli(process.argv.slice(3));
157
+ case "analyst-benchmark": return await runAnalystBenchmarkCommand(process.argv.slice(3));
151
158
  case "version":
152
159
  process.stdout.write(`${JSON.stringify(handleVersion(), null, 2)}\n`);
153
160
  return 0;
@@ -182,7 +189,7 @@ const FLAGS_BY_COMMAND = {
182
189
  "": /* @__PURE__ */ new Set()
183
190
  };
184
191
  function assertKnownFlags(command, flags) {
185
- if (command === "rollout-release") return;
192
+ if (command === "rollout-release" || command === "analyst-benchmark") return;
186
193
  const allowed = FLAGS_BY_COMMAND[command];
187
194
  if (!allowed) return;
188
195
  const unknown = Object.keys(flags).filter((flag) => !allowed.has(flag));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","names":[],"sources":["../src/cli-config.ts","../src/cli.ts"],"sourcesContent":["import type { LlmClientOptions } from './llm-client'\n\nexport interface CliLlmConfig {\n client?: LlmClientOptions\n model?: string\n}\n\nexport function resolveCliLlmConfig(env: NodeJS.ProcessEnv = process.env): CliLlmConfig {\n const explicitBaseUrl = nonEmpty(env.AGENT_EVAL_LLM_BASE_URL)\n const explicitApiKey = nonEmpty(env.AGENT_EVAL_LLM_API_KEY)\n const openAiApiKey = nonEmpty(env.OPENAI_API_KEY)\n const tangleApiKey = nonEmpty(env.TANGLE_API_KEY)\n const baseUrl =\n explicitBaseUrl ??\n nonEmpty(env.OPENAI_BASE_URL) ??\n nonEmpty(env.TANGLE_ROUTER_URL) ??\n (openAiApiKey ? 'https://api.openai.com/v1' : undefined) ??\n (tangleApiKey ? 'https://router.tangle.tools/v1' : undefined)\n const apiKey = explicitApiKey ?? openAiApiKey ?? tangleApiKey\n const model =\n nonEmpty(env.AGENT_EVAL_LLM_MODEL) ?? nonEmpty(env.OPENAI_MODEL) ?? nonEmpty(env.TANGLE_MODEL)\n\n const client =\n baseUrl || apiKey\n ? { ...(baseUrl ? { baseUrl } : {}), ...(apiKey ? { apiKey } : {}) }\n : undefined\n return { ...(client ? { client } : {}), ...(model ? { model } : {}) }\n}\n\nfunction nonEmpty(value: string | undefined): string | undefined {\n const trimmed = value?.trim()\n return trimmed ? trimmed : undefined\n}\n","#!/usr/bin/env node\n/**\n * agent-eval CLI.\n *\n * agent-eval serve [--port 5005] [--host 127.0.0.1]\n * agent-eval rpc <method> # one request from stdin → one response on stdout\n * agent-eval rpc-batch <method> # JSONL stdin → JSONL stdout\n * agent-eval openapi [--out path] # write OpenAPI spec\n * agent-eval version\n *\n * <method> is one of: judge, listRubrics, version. When omitted, the\n * stdin payload must be a full {method, params} envelope.\n */\nimport { writeFileSync } from 'node:fs'\nimport { resolveCliLlmConfig } from './cli-config'\nimport { runRolloutReleaseCli } from './rollout/release/hf-dataset'\nimport { handleVersion } from './wire/handlers'\nimport { buildOpenApi } from './wire/openapi'\nimport { runRpcBatch, runRpcOnce } from './wire/rpc'\nimport { startServerAsync } from './wire/server'\n\ninterface Args {\n command: string\n positional: string[]\n flags: Record<string, string>\n}\n\nfunction parseArgs(argv: string[]): Args {\n const [command, ...rest] = argv\n const positional: string[] = []\n const flags: Record<string, string> = {}\n for (let i = 0; i < rest.length; i++) {\n const tok = rest[i]!\n if (tok.startsWith('--')) {\n const raw = tok.slice(2)\n const equalsAt = raw.indexOf('=')\n if (equalsAt >= 0) {\n flags[raw.slice(0, equalsAt)] = raw.slice(equalsAt + 1)\n continue\n }\n const key = raw\n if (key === 'help') {\n flags[key] = 'true'\n continue\n }\n const next = rest[i + 1]\n if (next != null && !next.startsWith('--')) {\n flags[key] = next\n i++\n } else {\n flags[key] = 'true'\n }\n } else if (tok === '-h') {\n flags.help = 'true'\n } else {\n positional.push(tok)\n }\n }\n return { command: command ?? 'help', positional, flags }\n}\n\nconst HELP = `agent-eval: evaluation RPC and HTTP server.\n\nCommands:\n serve [--port 5005] [--host 127.0.0.1]\n Start the HTTP server. POST /v1/judge, GET /v1/rubrics, GET /v1/version, GET /openapi.json.\n rpc <method>\n Read one JSON object from stdin (the params for <method>), write one\n JSON object to stdout. Methods: judge, listRubrics, version.\n rpc-batch <method>\n Like 'rpc' but JSONL in / JSONL out.\n openapi [--out openapi.json]\n Write the OpenAPI 3.1 spec.\n rollout-release <ledger.jsonl...> --out <dir> [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]\n Build a HuggingFace-ready dataset dir from tangle.rollout.v1 ledgers:\n validate, fail-closed split filter, scrub, export formats + card.\n version\n Print server + wire-protocol version JSON.\n\nJudge provider:\n Set AGENT_EVAL_LLM_BASE_URL, AGENT_EVAL_LLM_API_KEY, and AGENT_EVAL_LLM_MODEL.\n OPENAI_* and TANGLE_* equivalents are also accepted.\n\nWithout arguments, prints this help.`\n\nasync function main(): Promise<number> {\n const { command, positional, flags } = parseArgs(process.argv.slice(2))\n assertKnownFlags(command, flags)\n\n if (flags.help === 'true') {\n process.stdout.write(`${HELP}\\n`)\n return 0\n }\n\n switch (command) {\n case 'serve': {\n const port = parsePort(flags.port ?? '5005')\n const host = flags.host ?? '127.0.0.1'\n const llm = resolveCliLlmConfig()\n const { server } = await startServerAsync({\n port,\n host,\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n // Keep process alive on SIGINT/SIGTERM\n const shutdown = (sig: string) => {\n // eslint-disable-next-line no-console\n console.log(`[agent-eval] received ${sig}, shutting down`)\n server.close(() => process.exit(0))\n // Force exit after 5s if close hangs\n setTimeout(() => process.exit(1), 5000).unref()\n }\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n // Block forever\n await new Promise(() => {})\n return 0\n }\n case 'rpc': {\n const [method] = positional\n const llm = resolveCliLlmConfig()\n return await runRpcOnce(method, {\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n }\n case 'rpc-batch': {\n const [method] = positional\n const llm = resolveCliLlmConfig()\n return await runRpcBatch(method, {\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n }\n case 'openapi': {\n const out = flags.out ?? 'openapi.json'\n const spec = buildOpenApi(handleVersion().version)\n writeFileSync(out, `${JSON.stringify(spec, null, 2)}\\n`, 'utf-8')\n // eslint-disable-next-line no-console\n console.log(`[agent-eval] wrote OpenAPI 3.1 spec to ${out}`)\n return 0\n }\n case 'rollout-release': {\n // The subcommand owns its own flag grammar (multi-value --formats,\n // boolean --include-proposers) — pass raw argv through untouched.\n return await runRolloutReleaseCli(process.argv.slice(3))\n }\n case 'version': {\n process.stdout.write(`${JSON.stringify(handleVersion(), null, 2)}\\n`)\n return 0\n }\n case '--version': {\n process.stdout.write(`${handleVersion().version}\\n`)\n return 0\n }\n case 'help':\n case '--help':\n case '-h':\n case '':\n process.stdout.write(`${HELP}\\n`)\n return 0\n default:\n process.stderr.write(`unknown command: ${command}\\n${HELP}\\n`)\n return 1\n }\n}\n\nconst FLAGS_BY_COMMAND: Record<string, ReadonlySet<string>> = {\n serve: new Set(['help', 'host', 'port']),\n rpc: new Set(['help']),\n 'rpc-batch': new Set(['help']),\n openapi: new Set(['help', 'out']),\n version: new Set(['help']),\n help: new Set(),\n '--help': new Set(),\n '-h': new Set(),\n '--version': new Set(),\n '': new Set(),\n}\n\nfunction assertKnownFlags(command: string, flags: Record<string, string>): void {\n // rollout-release parses its own argv (multi-value flags).\n if (command === 'rollout-release') return\n const allowed = FLAGS_BY_COMMAND[command]\n if (!allowed) return\n const unknown = Object.keys(flags).filter((flag) => !allowed.has(flag))\n if (unknown.length > 0) {\n throw new Error(`unknown flag for ${command || 'help'}: --${unknown[0]}`)\n }\n}\n\nfunction parsePort(raw: string): number {\n const port = Number(raw)\n if (!Number.isInteger(port) || port < 0 || port > 65_535) {\n throw new Error(`--port must be an integer from 0 to 65535; received ${JSON.stringify(raw)}`)\n }\n return port\n}\n\nmain()\n .then((code) => process.exit(code))\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error('[agent-eval] cli error:', err)\n process.exit(1)\n })\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","names":[],"sources":["../src/cli-config.ts","../src/cli.ts"],"sourcesContent":["import type { LlmClientOptions } from './llm-client'\n\nexport interface CliLlmConfig {\n client?: LlmClientOptions\n model?: string\n}\n\nexport function resolveCliLlmConfig(env: NodeJS.ProcessEnv = process.env): CliLlmConfig {\n const explicitBaseUrl = nonEmpty(env.AGENT_EVAL_LLM_BASE_URL)\n const explicitApiKey = nonEmpty(env.AGENT_EVAL_LLM_API_KEY)\n const openAiApiKey = nonEmpty(env.OPENAI_API_KEY)\n const tangleApiKey = nonEmpty(env.TANGLE_API_KEY)\n const baseUrl =\n explicitBaseUrl ??\n nonEmpty(env.OPENAI_BASE_URL) ??\n nonEmpty(env.TANGLE_ROUTER_URL) ??\n (openAiApiKey ? 'https://api.openai.com/v1' : undefined) ??\n (tangleApiKey ? 'https://router.tangle.tools/v1' : undefined)\n const apiKey = explicitApiKey ?? openAiApiKey ?? tangleApiKey\n const model =\n nonEmpty(env.AGENT_EVAL_LLM_MODEL) ?? nonEmpty(env.OPENAI_MODEL) ?? nonEmpty(env.TANGLE_MODEL)\n\n const client =\n baseUrl || apiKey\n ? { ...(baseUrl ? { baseUrl } : {}), ...(apiKey ? { apiKey } : {}) }\n : undefined\n return { ...(client ? { client } : {}), ...(model ? { model } : {}) }\n}\n\nfunction nonEmpty(value: string | undefined): string | undefined {\n const trimmed = value?.trim()\n return trimmed ? trimmed : undefined\n}\n","#!/usr/bin/env node\n/**\n * agent-eval CLI.\n *\n * agent-eval serve [--port 5005] [--host 127.0.0.1]\n * agent-eval rpc <method> # one request from stdin → one response on stdout\n * agent-eval rpc-batch <method> # JSONL stdin → JSONL stdout\n * agent-eval analyst-benchmark ... # benchmark a real-model trace analyst\n * agent-eval openapi [--out path] # write OpenAPI spec\n * agent-eval version\n *\n * <method> is one of: judge, listRubrics, version. When omitted, the\n * stdin payload must be a full {method, params} envelope.\n */\nimport { writeFileSync } from 'node:fs'\nimport { runAnalystBenchmarkCommand } from './analyst/benchmark-command'\nimport { resolveCliLlmConfig } from './cli-config'\nimport { runRolloutReleaseCli } from './rollout/release/hf-dataset'\nimport { handleVersion } from './wire/handlers'\nimport { buildOpenApi } from './wire/openapi'\nimport { runRpcBatch, runRpcOnce } from './wire/rpc'\nimport { startServerAsync } from './wire/server'\n\ninterface Args {\n command: string\n positional: string[]\n flags: Record<string, string>\n}\n\nfunction parseArgs(argv: string[]): Args {\n const [command, ...rest] = argv\n const positional: string[] = []\n const flags: Record<string, string> = {}\n for (let i = 0; i < rest.length; i++) {\n const tok = rest[i]!\n if (tok.startsWith('--')) {\n const raw = tok.slice(2)\n const equalsAt = raw.indexOf('=')\n if (equalsAt >= 0) {\n flags[raw.slice(0, equalsAt)] = raw.slice(equalsAt + 1)\n continue\n }\n const key = raw\n if (key === 'help') {\n flags[key] = 'true'\n continue\n }\n const next = rest[i + 1]\n if (next != null && !next.startsWith('--')) {\n flags[key] = next\n i++\n } else {\n flags[key] = 'true'\n }\n } else if (tok === '-h') {\n flags.help = 'true'\n } else {\n positional.push(tok)\n }\n }\n return { command: command ?? 'help', positional, flags }\n}\n\nconst HELP = `agent-eval: evaluation RPC and HTTP server.\n\nCommands:\n serve [--port 5005] [--host 127.0.0.1]\n Start the HTTP server. POST /v1/judge, GET /v1/rubrics, GET /v1/version, GET /openapi.json.\n rpc <method>\n Read one JSON object from stdin (the params for <method>), write one\n JSON object to stdout. Methods: judge, listRubrics, version.\n rpc-batch <method>\n Like 'rpc' but JSONL in / JSONL out.\n openapi [--out openapi.json]\n Write the OpenAPI 3.1 spec.\n rollout-release <ledger.jsonl...> --out <dir> [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]\n Build a HuggingFace-ready dataset dir from tangle.rollout.v1 ledgers:\n validate, fail-closed split filter, scrub, export formats + card.\n analyst-benchmark --dataset <agentrx|codetracebench> --labels <path> --trace-dir <path> [--artifact-dir <path>] --out <dir> ...\n Compare an empty baseline with a real-model trace analyst on public labels.\n Run with --help for all required inputs and controls.\n version\n Print server + wire-protocol version JSON.\n\nJudge provider:\n Set AGENT_EVAL_LLM_BASE_URL, AGENT_EVAL_LLM_API_KEY, and AGENT_EVAL_LLM_MODEL.\n OPENAI_* and TANGLE_* equivalents are also accepted.\n\nWithout arguments, prints this help.`\n\nasync function main(): Promise<number> {\n const { command, positional, flags } = parseArgs(process.argv.slice(2))\n assertKnownFlags(command, flags)\n\n if (command === 'analyst-benchmark' && flags.help === 'true') {\n return await runAnalystBenchmarkCommand(process.argv.slice(3))\n }\n if (flags.help === 'true') {\n process.stdout.write(`${HELP}\\n`)\n return 0\n }\n\n switch (command) {\n case 'serve': {\n const port = parsePort(flags.port ?? '5005')\n const host = flags.host ?? '127.0.0.1'\n const llm = resolveCliLlmConfig()\n const { server } = await startServerAsync({\n port,\n host,\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n // Keep process alive on SIGINT/SIGTERM\n const shutdown = (sig: string) => {\n // eslint-disable-next-line no-console\n console.log(`[agent-eval] received ${sig}, shutting down`)\n server.close(() => process.exit(0))\n // Force exit after 5s if close hangs\n setTimeout(() => process.exit(1), 5000).unref()\n }\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n // Block forever\n await new Promise(() => {})\n return 0\n }\n case 'rpc': {\n const [method] = positional\n const llm = resolveCliLlmConfig()\n return await runRpcOnce(method, {\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n }\n case 'rpc-batch': {\n const [method] = positional\n const llm = resolveCliLlmConfig()\n return await runRpcBatch(method, {\n llm: llm.client,\n judgeModel: llm.model,\n llmRouteRequirements: { requireExplicitBaseUrl: true },\n })\n }\n case 'openapi': {\n const out = flags.out ?? 'openapi.json'\n const spec = buildOpenApi(handleVersion().version)\n writeFileSync(out, `${JSON.stringify(spec, null, 2)}\\n`, 'utf-8')\n // eslint-disable-next-line no-console\n console.log(`[agent-eval] wrote OpenAPI 3.1 spec to ${out}`)\n return 0\n }\n case 'rollout-release': {\n // The subcommand owns its own flag grammar (multi-value --formats,\n // boolean --include-proposers) — pass raw argv through untouched.\n return await runRolloutReleaseCli(process.argv.slice(3))\n }\n case 'analyst-benchmark': {\n return await runAnalystBenchmarkCommand(process.argv.slice(3))\n }\n case 'version': {\n process.stdout.write(`${JSON.stringify(handleVersion(), null, 2)}\\n`)\n return 0\n }\n case '--version': {\n process.stdout.write(`${handleVersion().version}\\n`)\n return 0\n }\n case 'help':\n case '--help':\n case '-h':\n case '':\n process.stdout.write(`${HELP}\\n`)\n return 0\n default:\n process.stderr.write(`unknown command: ${command}\\n${HELP}\\n`)\n return 1\n }\n}\n\nconst FLAGS_BY_COMMAND: Record<string, ReadonlySet<string>> = {\n serve: new Set(['help', 'host', 'port']),\n rpc: new Set(['help']),\n 'rpc-batch': new Set(['help']),\n openapi: new Set(['help', 'out']),\n version: new Set(['help']),\n help: new Set(),\n '--help': new Set(),\n '-h': new Set(),\n '--version': new Set(),\n '': new Set(),\n}\n\nfunction assertKnownFlags(command: string, flags: Record<string, string>): void {\n // These subcommands parse their own argv.\n if (command === 'rollout-release' || command === 'analyst-benchmark') return\n const allowed = FLAGS_BY_COMMAND[command]\n if (!allowed) return\n const unknown = Object.keys(flags).filter((flag) => !allowed.has(flag))\n if (unknown.length > 0) {\n throw new Error(`unknown flag for ${command || 'help'}: --${unknown[0]}`)\n }\n}\n\nfunction parsePort(raw: string): number {\n const port = Number(raw)\n if (!Number.isInteger(port) || port < 0 || port > 65_535) {\n throw new Error(`--port must be an integer from 0 to 65535; received ${JSON.stringify(raw)}`)\n }\n return port\n}\n\nmain()\n .then((code) => process.exit(code))\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error('[agent-eval] cli error:', err)\n process.exit(1)\n })\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { l as RunTerminalOutcome } from "./run-record-BPCa2rQ8.js";
2
- import { _ as GateDecision, j as MutableSurface } from "./types-CTGbIm57.js";
3
- import { o as InsightReport } from "./insight-report-B9ooYH_g.js";
1
+ import { l as RunTerminalOutcome } from "./run-record-DwHMk1Ai.js";
2
+ import { _ as GateDecision, j as MutableSurface } from "./types-zFYez3PK.js";
3
+ import { o as InsightReport } from "./insight-report-CXd8VBDR.js";
4
4
  //#region src/hosted/types.d.ts
5
5
  declare const HOSTED_WIRE_VERSION: '2026-07-24.v1';
6
6
  type HostedWireVersion = typeof HOSTED_WIRE_VERSION;
@@ -199,4 +199,4 @@ declare function hostedClientFromEnv(overrides?: Partial<HostedTenant> & {
199
199
  }): HostedClient | undefined;
200
200
  //#endregion
201
201
  export { UnixNanoTimestamp as _, hostedTenantFromEnv as a, EvalRunGenerationSnapshot as c, HostedIngestHeaders as d, HostedWireVersion as f, TraceSpanEvent as g, IngestTracesRequest as h, hostedClientFromEnv as i, EvalRunStatus as l, IngestResponse as m, HostedTenant as n, EvalRunCellScore as o, IngestEvalRunsRequest as p, createHostedClient as r, EvalRunEvent as s, HostedClient as t, HOSTED_WIRE_VERSION as u };
202
- //# sourceMappingURL=client-C8L6h6Wf.d.ts.map
202
+ //# sourceMappingURL=client-BwPKohkJ.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-C8L6h6Wf.d.ts","names":[],"sources":["../src/hosted/types.ts","../src/hosted/client.ts"],"mappings":";;;;cAgCa;KACD,2BAA2B;;UAKtB;;EAEf;;EAEA;;EAEA,yBAAyB;;EAEzB;;;KAMU;UAQK;;EAEf;;EAEA;;EAEA;;EAEA,YAAY,eAAe;;EAE3B,iBAAiB;;EAEjB;;EAEA;;UAGe;;EAEf;;;EAGA;;;EAGA,UAAU;;EAEV,OAAO;;EAEP;;EAEA;;EAEA;;;;;;;UAQe;;EAEf;;EAEA;;EAEA;;EAEA,QAAQ;;EAER,QAAQ;;EAER,WAAW;;EAEX,aAAa;;EAEb,eAAe;;EAEf;;EAEA;;EAEA;;EAEA;;;;;;EAMA,gBAAgB;;;;;;KASN;;;;;;UAOK;EACf;EACA;EACA;EACA;EACA,mBAAmB;EACnB,iBAAiB;EACjB,YAAY;EACZ,SAAS;IACP,cAAc;IACd;IACA,aAAa;;EAEf;IAAW;IAAgC;;;EAE3C;;EAEA;;EAEA;;EAEA;;UAKe;EACf,aAAa;EACb,QAAQ;;UAGO;EACf,aAAa;EACb,OAAO;;UAGQ;;EAEf;;EAEA,UAAU;IAAQ;IAAe;;;;;UC1JlB;;EAEf;;EAEA;;EAEA;;EAEA,mBAAmB;;EAEnB;;EAEA;;UAGe;EACf,cAAc,OAAO,cAAc,0BAA0B,QAAQ;EACrE,eAAe,QAAQ,gBAAgB,0BAA0B,QAAQ;EACzE,aAAa,OAAO,kBAAkB,0BAA0B,QAAQ;WAC/D,QAAQ;WACR,aAAa;;iBAyGR,mBAAmB,QAAQ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsE1C,oBACd,YAAW,QAAQ;EAAkB,MAAM;IAC1C;iBAiBa,oBACd,YAAW,QAAQ;EAAkB,MAAM;IAC1C"}
1
+ {"version":3,"file":"client-BwPKohkJ.d.ts","names":[],"sources":["../src/hosted/types.ts","../src/hosted/client.ts"],"mappings":";;;;cAgCa;KACD,2BAA2B;;UAKtB;;EAEf;;EAEA;;EAEA,yBAAyB;;EAEzB;;;KAMU;UAQK;;EAEf;;EAEA;;EAEA;;EAEA,YAAY,eAAe;;EAE3B,iBAAiB;;EAEjB;;EAEA;;UAGe;;EAEf;;;EAGA;;;EAGA,UAAU;;EAEV,OAAO;;EAEP;;EAEA;;EAEA;;;;;;;UAQe;;EAEf;;EAEA;;EAEA;;EAEA,QAAQ;;EAER,QAAQ;;EAER,WAAW;;EAEX,aAAa;;EAEb,eAAe;;EAEf;;EAEA;;EAEA;;EAEA;;;;;;EAMA,gBAAgB;;;;;;KASN;;;;;;UAOK;EACf;EACA;EACA;EACA;EACA,mBAAmB;EACnB,iBAAiB;EACjB,YAAY;EACZ,SAAS;IACP,cAAc;IACd;IACA,aAAa;;EAEf;IAAW;IAAgC;;;EAE3C;;EAEA;;EAEA;;EAEA;;UAKe;EACf,aAAa;EACb,QAAQ;;UAGO;EACf,aAAa;EACb,OAAO;;UAGQ;;EAEf;;EAEA,UAAU;IAAQ;IAAe;;;;;UC1JlB;;EAEf;;EAEA;;EAEA;;EAEA,mBAAmB;;EAEnB;;EAEA;;UAGe;EACf,cAAc,OAAO,cAAc,0BAA0B,QAAQ;EACrE,eAAe,QAAQ,gBAAgB,0BAA0B,QAAQ;EACzE,aAAa,OAAO,kBAAkB,0BAA0B,QAAQ;WAC/D,QAAQ;WACR,aAAa;;iBAyGR,mBAAmB,QAAQ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsE1C,oBACd,YAAW,QAAQ;EAAkB,MAAM;IAC1C;iBAiBa,oBACd,YAAW,QAAQ;EAAkB,MAAM;IAC1C"}
@@ -1,6 +1,6 @@
1
1
  import { t as DefaultVerdict } from "./verdict-Dps8_okt.js";
2
- import { c as CostLedgerHandle } from "./cost-ledger-D2o6JOrL.js";
3
- import { A as ChatClient, _t as RawProviderSink } from "./types-CTvKfr5F.js";
2
+ import { c as CostLedgerHandle } from "./cost-ledger-B1D3COAc.js";
3
+ import { A as ChatClient, _t as RawProviderSink } from "./types-5q2T25iW.js";
4
4
  //#region src/artifact-validator.d.ts
5
5
  /**
6
6
  * Artifact validators.
@@ -237,4 +237,4 @@ declare function createTokenRecallChecker(opts?: {
237
237
  }): CorrectnessChecker;
238
238
  //#endregion
239
239
  export { jsonHasKeys as C, containsAll as S, ValidationContext as _, ProducedProposal as a, byteLengthRange as b, SatisfiedBy as c, createLlmCorrectnessChecker as d, createTokenRecallChecker as f, ArtifactValidator as g, Artifact as h, LlmCorrectnessCheckerOpts as i, TaskGold as l, verifyCompletion as m, CompletionVerdict as n, ProducedState as o, parseCorrectnessResponse as p, CorrectnessChecker as r, RequirementCheck as s, CompletionRequirement as t, completionVerdict as u, ValidationIssue as v, regexMatch as w, composeValidators as x, ValidationResult as y };
240
- //# sourceMappingURL=completion-verifier-DSyRNVzU.d.ts.map
240
+ //# sourceMappingURL=completion-verifier-B4-IMYcS.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"completion-verifier-DSyRNVzU.d.ts","names":[],"sources":["../src/artifact-validator.ts","../src/completion-verifier.ts"],"mappings":";;;;;;;;;;;;;;;;;UAciB;;EAEf;;EAEA;;EAEA;;EAEA,QAAQ;;EAER,WAAW;;UAGI;EACf;EACA;;EAEA,iBAAiB;;EAEjB,QAAQ;;UAGO;EACf;EACA;;EAEA;;UAGe;EACf;;EAEA;EACA,QAAQ;;EAER,WAAW;;UAGI;;EAEf;;EAEA;;EAEA,SAAS,UAAU,UAAU,SAAS,oBAAoB,QAAQ;;;;;;iBAWpD,kBACd,YAAY,qBACZ;EAAY;EAAe;IAC1B;;iBAgCa,WAAW,cAAc,SAAS,SAAS;;iBAkB3C,YAAY,cAAc,0BAA0B;;iBAuCpD,gBAAgB,cAAc,aAAa,cAAc;;iBAoBzD,YACd,cACA,oBACA;EAAY;IACX;;;;KCnJS;UAEK;;EAEf;;EAEA;;EAEA;;EAEA,cAAc;;UAGC;EACf;EACA,cAAc;;UAGC;EACf;EACA;EACA;;EAEA;;;UAIe;;EAEf,WAAW;;EAEX,WAAW;;EAEX;;UAGe;EACf;EACA;;EAEA;;;;;;EAMA;;EAEA;;;;;;;;;EASA;;EAEA;;EAEA;;;;;UAMe,0BAA0B;EACzC;EACA,cAAc;;EAEd;;EAEA;;EAEA;;;;;;;;;iBAUc,kBAAkB;EAChC;EACA,cAAc;IACZ;;;;;;KAoCQ,sBACV,aAAa,uBACb,oBACG;EAAU;EAAkB;;;;;;;;;iBAqLX,iBACpB,MAAM,UACN,OAAO,eACP,kBAAkB,qBACjB,QAAQ;UAoFM;EACf;;EAEA,aAAa;EACb;EACA,WAAW;EACX,SAAS;;EAET;;;;;;EAMA;;;;;;EAMA,UAAU;;;;;;;;;iBAUI,yBAAyB;EAAgB;EAAkB;;;;;;;;iBAiC3D,4BACd,MAAM,YACN,OAAM,4BACL;;;;;;;;;;;;;;;iBA6Ia,yBACd;EAAQ;EAAoB;IAC3B"}
1
+ {"version":3,"file":"completion-verifier-B4-IMYcS.d.ts","names":[],"sources":["../src/artifact-validator.ts","../src/completion-verifier.ts"],"mappings":";;;;;;;;;;;;;;;;;UAciB;;EAEf;;EAEA;;EAEA;;EAEA,QAAQ;;EAER,WAAW;;UAGI;EACf;EACA;;EAEA,iBAAiB;;EAEjB,QAAQ;;UAGO;EACf;EACA;;EAEA;;UAGe;EACf;;EAEA;EACA,QAAQ;;EAER,WAAW;;UAGI;;EAEf;;EAEA;;EAEA,SAAS,UAAU,UAAU,SAAS,oBAAoB,QAAQ;;;;;;iBAWpD,kBACd,YAAY,qBACZ;EAAY;EAAe;IAC1B;;iBAgCa,WAAW,cAAc,SAAS,SAAS;;iBAkB3C,YAAY,cAAc,0BAA0B;;iBAuCpD,gBAAgB,cAAc,aAAa,cAAc;;iBAoBzD,YACd,cACA,oBACA;EAAY;IACX;;;;KCnJS;UAEK;;EAEf;;EAEA;;EAEA;;EAEA,cAAc;;UAGC;EACf;EACA,cAAc;;UAGC;EACf;EACA;EACA;;EAEA;;;UAIe;;EAEf,WAAW;;EAEX,WAAW;;EAEX;;UAGe;EACf;EACA;;EAEA;;;;;;EAMA;;EAEA;;;;;;;;;EASA;;EAEA;;EAEA;;;;;UAMe,0BAA0B;EACzC;EACA,cAAc;;EAEd;;EAEA;;EAEA;;;;;;;;;iBAUc,kBAAkB;EAChC;EACA,cAAc;IACZ;;;;;;KAoCQ,sBACV,aAAa,uBACb,oBACG;EAAU;EAAkB;;;;;;;;;iBAqLX,iBACpB,MAAM,UACN,OAAO,eACP,kBAAkB,qBACjB,QAAQ;UAoFM;EACf;;EAEA,aAAa;EACb;EACA,WAAW;EACX,SAAS;;EAET;;;;;;EAMA;;;;;;EAMA,UAAU;;;;;;;;;iBAUI,yBAAyB;EAAgB;EAAkB;;;;;;;;iBAiC3D,4BACd,MAAM,YACN,OAAM,4BACL;;;;;;;;;;;;;;;iBA6Ia,yBACd;EAAQ;EAAoB;IAC3B"}
@@ -1,14 +1,14 @@
1
- import { c as CostLedgerHandle, f as CostLedgerSummary, m as CostReceipt } from "../cost-ledger-D2o6JOrL.js";
2
- import { a as RunRecord, n as RunCostProvenance, s as RunSplitTag } from "../run-record-BPCa2rQ8.js";
3
- import { A as ChatClient, F as CreateChatClientOpts, V as createChatClient } from "../types-CTvKfr5F.js";
4
- import { h as ProposalFindingOrigin, i as AnalystFinding, m as ProposalFinding, v as makeProposalFinding } from "../types-CKswbJGO.js";
5
- import { n as buildDefaultAnalystRegistry, t as DefaultAnalystRegistryOptions } from "../default-registry-Dc5D_Loc.js";
6
- import { C as JudgeDimension, H as SurfaceProposer, M as OptimizerConfig, R as Scenario, S as JudgeConfig, V as SessionScript, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, p as Gate, r as CampaignCellResult, t as CampaignAggregates, v as GateResult, w as JudgeScore, y as GenerationCandidate } from "../types-CTGbIm57.js";
7
- import { A as RunEvalOptions, B as OptimizerModelBudget, Bt as ComparisonCost, C as RunImprovementLoopOptions, Cn as ReferenceEquivalenceJudgeResult, D as RunOptimizationOptions, Dn as LlmJudgeDimension, E as PremeasuredOptimizationBaseline, En as runReferenceEquivalenceJudge, F as GepaOptimizationMethodConfig, Ft as ExternalTextOptimizerContext, G as ObjectiveSource, Gt as OptimizationMethodProvenance, H as AxisVerdict, Ht as OptimizationMethodComparison, I as GepaOptimizationRecipe, It as ExternalTextOptimizerResult, J as PromotionPolicy, K as ParetoSignificanceGateOptions, Kt as OptimizationMethodResult, L as GepaRunnerCommand, Lt as ExternalOptimizationExample, M as GepaAdaptiveEngineRun, Mt as composeGate, N as GepaEngineOptions, Nt as externalTextOptimizationMethod, On as LlmJudgeOptions, P as GepaEngineRun, Pt as ExternalTextOptimizationMethodConfig, R as gepaOptimizationMethod, Rt as ExternalTextEvaluationResponse, Sn as ReferenceEquivalenceJudgeOptions, T as runImprovementLoop, Tn as createReferenceEquivalenceJudge, U as BuildEvidenceVectorOptions, Ut as OptimizationMethodInput, V as AxisEvidence, Vt as OptimizationMethod, W as EvidenceVector, X as paretoPolicy, Xt as OptimizationTokenUsage, Y as buildEvidenceVector, Yt as OptimizationPackageSource, Z as paretoSignificanceGate, Zt as compareOptimizationMethods, bn as REFERENCE_EQUIVALENCE_JUDGE_VERSION, dt as DefaultProductionGateCheck, en as CampaignCellFailureReceipt, ft as DefaultProductionGateOptions, i as skillOptOptimizationMethod, in as RunCampaignOptions, j as runEval, kn as llmJudge, ln as fsCampaignStorage, lt as HeldOutGateOptions, mn as campaignSplitDigest, mt as defaultProductionGate, n as SkillOptRunnerCommand, on as runCampaign, ot as PowerPreflight, p as LoopProvenanceRecord, pt as DefaultProductionRewardHackingOptions, q as PromotionObjective, r as SkillOptTrainerConfig, sn as CampaignStorage, t as SkillOptOptimizationMethodConfig, un as inMemoryCampaignStorage, ut as heldOutGate, w as RunImprovementLoopResult, wn as ReferenceEquivalenceScenario, xn as ReferenceEquivalenceJudgeInput, yn as REFERENCE_EQUIVALENCE_INPUT_LIMITS, z as OpenAICompatibleOptimizerModel, zt as CompareOptimizationMethodsOptions } from "../skillopt-optimization-method-BpbnlvAZ.js";
8
- import { a as FailureClusterInsight, c as JudgeInsight, d as Recommendation, f as ReleaseSummary, i as FailureClassTally, l as LiftInsight, m as TokenUsageInsight, n as ExecutionErrorOutcomeCell, o as InsightReport, p as ScalarDistribution, r as ExecutionInsight, s as InterRaterInsight, t as CostProvenanceSummary, u as OutcomeCorrelationInsight } from "../insight-report-B9ooYH_g.js";
9
- import { c as EvalRunGenerationSnapshot, g as TraceSpanEvent, n as HostedTenant, o as EvalRunCellScore, s as EvalRunEvent } from "../client-C8L6h6Wf.js";
1
+ import { c as CostLedgerHandle, f as CostLedgerSummary, m as CostReceipt } from "../cost-ledger-B1D3COAc.js";
2
+ import { a as RunRecord, n as RunCostProvenance, s as RunSplitTag } from "../run-record-DwHMk1Ai.js";
3
+ import { A as ChatClient, F as CreateChatClientOpts, V as createChatClient } from "../types-5q2T25iW.js";
4
+ import { h as ProposalFindingOrigin, i as AnalystFinding, m as ProposalFinding, v as makeProposalFinding } from "../types-BtJhn8v6.js";
5
+ import { n as buildDefaultAnalystRegistry, t as DefaultAnalystRegistryOptions } from "../default-registry-PUhIVRWz.js";
6
+ import { C as JudgeDimension, H as SurfaceProposer, M as OptimizerConfig, R as Scenario, S as JudgeConfig, V as SessionScript, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, p as Gate, r as CampaignCellResult, t as CampaignAggregates, v as GateResult, w as JudgeScore, y as GenerationCandidate } from "../types-zFYez3PK.js";
7
+ import { A as RunEvalOptions, B as OptimizerModelBudget, Bt as ComparisonCost, C as RunImprovementLoopOptions, Cn as ReferenceEquivalenceJudgeResult, D as RunOptimizationOptions, Dn as LlmJudgeDimension, E as PremeasuredOptimizationBaseline, En as runReferenceEquivalenceJudge, F as GepaOptimizationMethodConfig, Ft as ExternalTextOptimizerContext, G as ObjectiveSource, Gt as OptimizationMethodProvenance, H as AxisVerdict, Ht as OptimizationMethodComparison, I as GepaOptimizationRecipe, It as ExternalTextOptimizerResult, J as PromotionPolicy, K as ParetoSignificanceGateOptions, Kt as OptimizationMethodResult, L as GepaRunnerCommand, Lt as ExternalOptimizationExample, M as GepaAdaptiveEngineRun, Mt as composeGate, N as GepaEngineOptions, Nt as externalTextOptimizationMethod, On as LlmJudgeOptions, P as GepaEngineRun, Pt as ExternalTextOptimizationMethodConfig, R as gepaOptimizationMethod, Rt as ExternalTextEvaluationResponse, Sn as ReferenceEquivalenceJudgeOptions, T as runImprovementLoop, Tn as createReferenceEquivalenceJudge, U as BuildEvidenceVectorOptions, Ut as OptimizationMethodInput, V as AxisEvidence, Vt as OptimizationMethod, W as EvidenceVector, X as paretoPolicy, Xt as OptimizationTokenUsage, Y as buildEvidenceVector, Yt as OptimizationPackageSource, Z as paretoSignificanceGate, Zt as compareOptimizationMethods, bn as REFERENCE_EQUIVALENCE_JUDGE_VERSION, dt as DefaultProductionGateCheck, en as CampaignCellFailureReceipt, ft as DefaultProductionGateOptions, i as skillOptOptimizationMethod, in as RunCampaignOptions, j as runEval, kn as llmJudge, ln as fsCampaignStorage, lt as HeldOutGateOptions, mn as campaignSplitDigest, mt as defaultProductionGate, n as SkillOptRunnerCommand, on as runCampaign, ot as PowerPreflight, p as LoopProvenanceRecord, pt as DefaultProductionRewardHackingOptions, q as PromotionObjective, r as SkillOptTrainerConfig, sn as CampaignStorage, t as SkillOptOptimizationMethodConfig, un as inMemoryCampaignStorage, ut as heldOutGate, w as RunImprovementLoopResult, wn as ReferenceEquivalenceScenario, xn as ReferenceEquivalenceJudgeInput, yn as REFERENCE_EQUIVALENCE_INPUT_LIMITS, z as OpenAICompatibleOptimizerModel, zt as CompareOptimizationMethodsOptions } from "../skillopt-optimization-method-CzfnA8O-.js";
8
+ import { a as FailureClusterInsight, c as JudgeInsight, d as Recommendation, f as ReleaseSummary, i as FailureClassTally, l as LiftInsight, m as TokenUsageInsight, n as ExecutionErrorOutcomeCell, o as InsightReport, p as ScalarDistribution, r as ExecutionInsight, s as InterRaterInsight, t as CostProvenanceSummary, u as OutcomeCorrelationInsight } from "../insight-report-CXd8VBDR.js";
9
+ import { c as EvalRunGenerationSnapshot, g as TraceSpanEvent, n as HostedTenant, o as EvalRunCellScore, s as EvalRunEvent } from "../client-BwPKohkJ.js";
10
10
  import { i as InMemoryOutcomeStore, n as FileSystemOutcomeStore, o as OutcomeStore, r as FileSystemOutcomeStoreOptions, t as DeploymentOutcome } from "../outcome-store-BYHIuO0e.js";
11
- import { a as summarizeExecution, i as analyzeRuns, n as ExecutionReport, r as SummarizeExecutionOptions, t as AnalyzeRunsOptions } from "../analyze-runs-PVtnfjvA.js";
11
+ import { a as summarizeExecution, i as analyzeRuns, n as ExecutionReport, r as SummarizeExecutionOptions, t as AnalyzeRunsOptions } from "../analyze-runs-CPYxfPWT.js";
12
12
  import { AgentCandidateBenchmarkCellRef, AgentCandidateBenchmarkSuiteInputs, AgentCandidateBenchmarkTask, AgentCandidateBenchmarkTaskMaterial, AgentCandidateBundle, AgentCandidateEvaluationPolicy, AgentCandidateExperiment, AgentCandidateExperimentMaterial, AgentCandidateExperimentMeasurement, AgentImprovementCost, AgentImprovementMeasuredComparison, AgentProfileImprovementExperiment, AgentProfileImprovementExperimentMaterial, AgentProfileImprovementMeasuredComparison, AgentProfileImprovementMeasurement, AgentProfileImprovementRunCell, AgentProfileImprovementRunReceipt, AgentProfileImprovementSuiteInputs, AgentProfileImprovementTask, AgentProfileImprovementTaskMaterial, CandidateExecutionEvidence, Sha256Digest } from "@tangle-network/agent-interface";
13
13
  //#region src/contract/self-improve.d.ts
14
14
  interface SelfImproveBudget {
@@ -1,23 +1,23 @@
1
1
  import { c as ValidationError } from "../errors-D-LKuDhb.js";
2
- import { R as createChatClient, t as buildDefaultAnalystRegistry } from "../default-registry-CLXbRt0f.js";
2
+ import { G as createChatClient, t as buildDefaultAnalystRegistry } from "../default-registry-lp5R0lve.js";
3
3
  import { i as estimateCost, o as isModelPriced } from "../metrics-C9YY1OcL.js";
4
- import { i as CostLedger } from "../cost-ledger-D-5_-dhi.js";
4
+ import { i as CostLedger } from "../cost-ledger-CHDLA0Ss.js";
5
5
  import { LLM_MODEL_ATTR_KEYS, SPAN_KIND_ATTR_KEYS } from "../trace-attributes.js";
6
- import { M as isOtlpModelCall, j as classifyOtlpSpanRole } from "../tools-DZk2Jn64.js";
7
- import { l as makeProposalFinding } from "../proposal-findings-DCawte-y.js";
8
- import { r as mapConcurrentRange } from "../concurrency-MUjT7VjM.js";
9
- import { B as surfaceContentHash, Ct as llmJudge, Ft as decidePairedPromotion, M as compareOptimizationMethods, O as composeGate, Q as inMemoryCampaignStorage, S as defaultProductionGate, T as heldoutSignificance, V as surfaceHash, X as createRunCostLedger, Y as runCampaign, Z as fsCampaignStorage, _ as buildEvidenceVector, a as emitLoopProvenance, b as powerPreflight, ct as campaignSplitDigest, d as runImprovementLoop, dt as REFERENCE_EQUIVALENCE_INPUT_LIMITS, ft as REFERENCE_EQUIVALENCE_JUDGE_VERSION, g as gepaOptimizationMethod, j as assertOptimizationResult, k as externalTextOptimizationMethod, mt as runReferenceEquivalenceJudge, o as loopProvenanceArgsFromResult, p as runEval, pt as createReferenceEquivalenceJudge, rt as resolveRunDir, t as skillOptOptimizationMethod, v as paretoPolicy, x as heldOutGate, y as paretoSignificanceGate } from "../skillopt-optimization-method-f4o9sUT4.js";
6
+ import { A as classifyOtlpSpanRole, j as isOtlpModelCall } from "../store-otlp-BenKynPE.js";
7
+ import { h as makeProposalFinding, i as inMemoryCampaignStorage, n as createRunCostLedger, r as fsCampaignStorage } from "../single-run-lock-D_bS5xhj.js";
8
+ import { m as mapConcurrentRange } from "../ledger-core-C0Yx1I14.js";
9
+ import { A as assertOptimizationResult, B as surfaceHash, Dt as decidePairedPromotion, J as runCampaign, O as composeGate, S as defaultProductionGate, T as heldoutSignificance, Y as resolveRunDir, _ as buildEvidenceVector, a as emitLoopProvenance, at as createReferenceEquivalenceJudge, b as powerPreflight, d as runImprovementLoop, et as campaignSplitDigest, g as gepaOptimizationMethod, ht as llmJudge, it as REFERENCE_EQUIVALENCE_JUDGE_VERSION, j as compareOptimizationMethods, k as externalTextOptimizationMethod, o as loopProvenanceArgsFromResult, ot as runReferenceEquivalenceJudge, p as runEval, rt as REFERENCE_EQUIVALENCE_INPUT_LIMITS, t as skillOptOptimizationMethod, v as paretoPolicy, x as heldOutGate, y as paretoSignificanceGate, z as surfaceContentHash } from "../skillopt-optimization-method-CjKMZy0d.js";
10
10
  import { E as pairedBootstrap } from "../statistics-ByxzSiOM.js";
11
11
  import { i as parseRunRecordSafe, r as modelHasSnapshot } from "../run-record-vRgqWmJw.js";
12
- import { a as recordAggregateMeasurements, i as readTaskFailureLabels, o as summarizeExecutionMeasurements, s as summarizeTraceErrors, t as extractUsage } from "../extract-usage-p-56bh8q.js";
12
+ import { a as recordAggregateMeasurements, i as readTaskFailureLabels, o as summarizeExecutionMeasurements, s as summarizeTraceErrors, t as extractUsage } from "../extract-usage-CS391dOE.js";
13
13
  import { n as summarizeExecution, t as analyzeRuns } from "../analyze-runs-BScZvqMV.js";
14
14
  import { a as campaignCellExecutionEvidence, c as campaignCellToRunRecord, o as campaignCellJudgeDimensions, s as campaignCellTaskScore } from "../reward-hacking-GyN0kMd8.js";
15
15
  import { n as InMemoryOutcomeStore, t as FileSystemOutcomeStore } from "../outcome-store-ChBKlTd_.js";
16
16
  import { t as createHostedClient } from "../client-LIuo-KPv.js";
17
17
  import { dirname, join } from "node:path";
18
18
  import { createHash } from "node:crypto";
19
- import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
20
19
  import { agentCandidateBenchmarkSuiteSchema, agentCandidateBenchmarkTaskSchema, agentCandidateBundleSchema, agentCandidateEvaluationPolicySchema, agentCandidateExperimentSchema, agentImprovementMeasuredComparisonSchema, agentProfileImprovementExperimentSchema, agentProfileImprovementMeasuredComparisonSchema, agentProfileImprovementRunCellSchema, agentProfileImprovementRunReceiptSchema, agentProfileImprovementSuiteInputsSchema, agentProfileImprovementSuiteSchema, agentProfileImprovementTaskSchema, candidateExecutionEvidenceSchema, canonicalCandidateDigest, canonicalCandidateJson, numbersApproximatelyEqual, omitTopLevelDigest } from "@tangle-network/agent-interface";
20
+ import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
21
21
  //#region src/contract/self-improve.ts
22
22
  /** Failed self-improvement run with an immutable receipt snapshot. */
23
23
  var SelfImproveRunError = class extends Error {
package/dist/control.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as ControlRunResult, J as ControlActionOutcome, Q as ControlEvalResult, X as ControlContext, Y as ControlBudget, Z as ControlDecision, at as StopDecision, ct as runAgentControlLoop, dt as subjectiveEval, et as ControlRuntimeConfig, it as ControlStopPolicies, lt as stopOnNoProgress, nt as ControlSeverity, ot as allCriticalPassed, q as ControlActionFailureMode, rt as ControlStep, st as objectiveEval, tt as ControlRuntimeError, ut as stopOnRepeatedAction } from "./feedback-trajectory-N_F0PwHz.js";
2
- import { A as ActionExecutionPolicy, M as evaluateActionPolicy, _ as ProposeReviewReport, a as ProposeReviewControlAction, c as ProposeReviewControlState, g as ProposeReviewConfig, i as scoreFromEvals, j as ActionPolicyDecision, k as runProposeReview, n as RunEvidenceMetadata, o as ProposeReviewControlConfig, r as controlRunToRunRecord, s as ProposeReviewControlResult, t as ControlRunToRunRecordOptions, u as runProposeReviewAsControlLoop } from "./run-evidence-BDIircdA.js";
1
+ import { $ as ControlRunResult, J as ControlActionOutcome, Q as ControlEvalResult, X as ControlContext, Y as ControlBudget, Z as ControlDecision, at as StopDecision, ct as runAgentControlLoop, dt as subjectiveEval, et as ControlRuntimeConfig, it as ControlStopPolicies, lt as stopOnNoProgress, nt as ControlSeverity, ot as allCriticalPassed, q as ControlActionFailureMode, rt as ControlStep, st as objectiveEval, tt as ControlRuntimeError, ut as stopOnRepeatedAction } from "./feedback-trajectory-CoNep7rl.js";
2
+ import { A as ActionExecutionPolicy, M as evaluateActionPolicy, _ as ProposeReviewReport, a as ProposeReviewControlAction, c as ProposeReviewControlState, g as ProposeReviewConfig, i as scoreFromEvals, j as ActionPolicyDecision, k as runProposeReview, n as RunEvidenceMetadata, o as ProposeReviewControlConfig, r as controlRunToRunRecord, s as ProposeReviewControlResult, t as ControlRunToRunRecordOptions, u as runProposeReviewAsControlLoop } from "./run-evidence-CbE0A8Xg.js";
3
3
  export { type ActionExecutionPolicy, type ActionPolicyDecision, type ControlActionFailureMode, type ControlActionOutcome, type ControlBudget, type ControlContext, type ControlDecision, type ControlEvalResult, type ControlRunResult, type ControlRunToRunRecordOptions, type ControlRuntimeConfig, type ControlRuntimeError, type ControlSeverity, type ControlStep, type ControlStopPolicies, type ProposeReviewConfig, type ProposeReviewControlAction, type ProposeReviewControlConfig, type ProposeReviewControlResult, type ProposeReviewControlState, type ProposeReviewReport, type RunEvidenceMetadata, type StopDecision, allCriticalPassed, controlRunToRunRecord, evaluateActionPolicy, objectiveEval, runAgentControlLoop, runProposeReview, runProposeReviewAsControlLoop, scoreFromEvals, stopOnNoProgress, stopOnRepeatedAction, subjectiveEval };
@@ -55,7 +55,7 @@ interface CostReceipt extends CostCallBase, CostUsage {
55
55
  actualCostUsd?: number;
56
56
  /** Known non-provider amount supplied by an external executor. */
57
57
  estimatedCostUsd?: number;
58
- error?: string;
58
+ error?: 'paid-call-failed';
59
59
  }
60
60
  interface CostReceiptInput extends CostUsage {
61
61
  model: string;
@@ -168,7 +168,7 @@ interface CostLedgerOptions {
168
168
  receipts?: readonly CostReceipt[];
169
169
  }
170
170
  declare class CostCeilingReachedError extends ValidationError {
171
- constructor(ceilingUsd: number, committedAndReservedUsd: number, requestedUsd: number, phase: string, actor: string);
171
+ constructor(ceilingUsd: number, committedUsd: number, requestedUsd: number, phase: string, actor: string);
172
172
  }
173
173
  declare class CostAccountingIncompleteError extends ValidationError {}
174
174
  declare class CostReservationExceededError extends ValidationError {
@@ -211,7 +211,7 @@ declare class CostLedger {
211
211
  waitForIdle(options?: CostLedgerWaitOptions): Promise<boolean>;
212
212
  /** Settle a call left pending by a crashed process after reconciling with the provider. */
213
213
  reconcile(callId: string, observed: CostReceiptInput, options?: {
214
- error?: string;
214
+ failed?: boolean;
215
215
  }): CostReceipt;
216
216
  list(filter?: CostLedgerFilter): CostReceipt[];
217
217
  /** Read pending calls without exposing mutable ledger state. */
@@ -222,6 +222,7 @@ declare class CostLedger {
222
222
  private execute;
223
223
  private captureLateOutcome;
224
224
  private releaseActiveCall;
225
+ private waitForReservationRelease;
225
226
  private commitOutcome;
226
227
  private captureFailure;
227
228
  private commitReceipt;
@@ -249,4 +250,4 @@ declare function costForUsage(model: string, usage: CostUsage): CostResult;
249
250
  declare function costForTokenPricing(pricing: CustomTokenPricing, usage: Pick<CostUsage, 'inputTokens' | 'outputTokens' | 'cachedTokens' | 'cacheWriteTokens'>): number;
250
251
  //#endregion
251
252
  export { PendingCostCall as C, costForUsage as D, costForTokenPricing as E, modelPriceKey as O, PaidCallResult as S, RunPaidCallInput as T, CostReservationExceededError as _, CostChannel as a, CustomTokenPricing as b, CostLedgerHandle as c, CostLedgerPersistenceError as d, CostLedgerSummary as f, CostReceiptInput as g, CostReceiptCaptureError as h, CostCeilingReachedError as i, CostLedgerOptions as l, CostReceipt as m, CostAccountingIncompleteError as n, CostLedger as o, CostProvenance as p, CostCallConflictError as r, CostLedgerFilter as s, ChannelRollup as t, CostLedgerPersistence as u, CostResult as v, PendingCostCallView as w, MaximumCharge as x, CostUsage as y };
252
- //# sourceMappingURL=cost-ledger-D2o6JOrL.d.ts.map
253
+ //# sourceMappingURL=cost-ledger-B1D3COAc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost-ledger-D2o6JOrL.d.ts","names":[],"sources":["../src/cost-ledger.ts"],"mappings":";;KAIY;;KAGA;EACN;EAAkB;;EAClB;EAAmB;;EACnB;EAAoB;;UAET;EACf;;EAEA;;EAEA;;EAEA;;EAEA;;UAGQ;EACR;EACA,SAAS;EACT;EACA;EACA;EACA;EACA,OAAO;EACP;;UAGe,wBAAwB;EACvC;;UAGe,4BAA4B;EAC3C;;UAGe,oBAAoB,cAAc;EACjD;EACA;EACA;EACA;;EAEA;IACE;IACA;IACA;IACA;;;EAGF;;EAEA;EACA;;UAKe,yBAAyB;EACxC;;EAEA,qBAAqB;EACrB;;EAEA;EACA;EACA;;;UAIe;;EAEf;;EAEA;;EAEA;EACA;;KAGU;EACN;;EAEA,oBAAoB;IAClB,KAAK;EACN;IAAkB;UAER,iBAAiB;EAChC;EACA,SAAS;EACT;EACA;;EAEA;EACA,OAAO;EACP,SAAS;;EAET,gBAAgB;;EAEhB,QAAQ,QAAQ,aAAa,iBAAiB,QAAQ;EACtD,QAAQ,OAAO,IAAI;EACnB,kBAAkB,OAAO,QAAQ;;KAGvB,eAAe;EACrB;EAAiB;EAAgB,OAAO;EAAG,SAAS;;EACpD;EAAkB;EAAiB,OAAO;EAAO,UAAU;;UAEhD;EACf,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAAgB;EAChB,WAAW;EACX;EACA;EACA;EACA;EACA;;UAGe;EACf,UAAU;EACV;EACA,OAAO;;UAGQ;;EAEf;;EAEA,SAAS;;;UAIM;EACf;IAAU;IAAkB;;EAC5B,OAAO,0BAA0B;;UAGlB;EACf;EACA,cAAc;;EAEd,oBAAoB;;cAGT,gCAAgC;EAC3C,YACE,oBACA,iCACA,sBACA,eACA;;cAQS,sCAAsC;cAEtC,qCAAqC;EAChD,YAAY,eAAe,mBAAmB;;cAOnC,8BAA8B;WAChC;WACA,UAAU;EAEnB,YACE,iBACA;IAAW;IAAiB,UAAU;IAAa;;;cAQ1C,mCAAmC;WACrC;WACA,UAAU;EAEnB,YAAY,gBAAgB,iBAAiB,UAAU;;cAU5C,gCAAgC;WAClC;WACA,UAAU;WACV,cAAc;EAEvB,YAAY,gBAAgB,gBAAgB,uBAAuB,UAAU;;;cAgClE;mBACM;mBACA;mBACA;mBACA;UACT;UACA;UACA;WACC;mBACQ;EAEjB,YAAY,iBAAiB;EAwDvB,YAAY,GAAG,OAAO,iBAAiB,KAAK,QAAQ,eAAe;;EAmFnE,YAAY,UAAS,wBAA6B;;EA0BxD,UACE,gBACA,UAAU,kBACV;IAAW;MACV;EAaH,KAAK,SAAS,mBAAmB;;EAQjC,YAAY,SAAS,mBAAmB;EAcxC,QAAQ,SAAS,mBAAmB;EAkFpC,cAAc;EAYd;UAIc;UAoDN;UAsCA;UAKA;UAmBA;UAsBA;UAaA;UA+BA;UAUA;UAYA;UAMA;;;;;;;;KA0BE,mBAAmB,KAC7B,YACA,cAAc,8CAEd,QAAQ,KAAK;;iBAGC,cAAc;UAIb;EACf;EACA;;iBAGc,aAAa,eAAe,OAAO,YAAY;;iBAc/C,oBACd,SAAS,oBACT,OAAO,KAAK"}
1
+ {"version":3,"file":"cost-ledger-B1D3COAc.d.ts","names":[],"sources":["../src/cost-ledger.ts"],"mappings":";;KAIY;;KAGA;EACN;EAAkB;;EAClB;EAAmB;;EACnB;EAAoB;;UAET;EACf;;EAEA;;EAEA;;EAEA;;EAEA;;UAGQ;EACR;EACA,SAAS;EACT;EACA;EACA;EACA;EACA,OAAO;EACP;;UAGe,wBAAwB;EACvC;;UAGe,4BAA4B;EAC3C;;UAGe,oBAAoB,cAAc;EACjD;EACA;EACA;EACA;;EAEA;IACE;IACA;IACA;IACA;;;EAGF;;EAEA;EACA;;UAKe,yBAAyB;EACxC;;EAEA,qBAAqB;EACrB;;EAEA;EACA;EACA;;;UAIe;;EAEf;;EAEA;;EAEA;EACA;;KAGU;EACN;;EAEA,oBAAoB;IAClB,KAAK;EACN;IAAkB;UAER,iBAAiB;EAChC;EACA,SAAS;EACT;EACA;;EAEA;EACA,OAAO;EACP,SAAS;;EAET,gBAAgB;;EAEhB,QAAQ,QAAQ,aAAa,iBAAiB,QAAQ;EACtD,QAAQ,OAAO,IAAI;EACnB,kBAAkB,OAAO,QAAQ;;KAGvB,eAAe;EACrB;EAAiB;EAAgB,OAAO;EAAG,SAAS;;EACpD;EAAkB;EAAiB,OAAO;EAAO,UAAU;;UAEhD;EACf,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAAgB;EAChB,WAAW;EACX;EACA;EACA;EACA;EACA;;UAGe;EACf,UAAU;EACV;EACA,OAAO;;UAGQ;;EAEf;;EAEA,SAAS;;;UAIM;EACf;IAAU;IAAkB;;EAC5B,OAAO,0BAA0B;;UAGlB;EACf;EACA,cAAc;;EAEd,oBAAoB;;cAGT,gCAAgC;EAC3C,YACE,oBACA,sBACA,sBACA,eACA;;cAQS,sCAAsC;cAEtC,qCAAqC;EAChD,YAAY,eAAe,mBAAmB;;cAOnC,8BAA8B;WAChC;WACA,UAAU;EAEnB,YACE,iBACA;IAAW;IAAiB,UAAU;IAAa;;;cAQ1C,mCAAmC;WACrC;WACA,UAAU;EAEnB,YAAY,gBAAgB,iBAAiB,UAAU;;cAU5C,gCAAgC;WAClC;WACA,UAAU;WACV,cAAc;EAEvB,YAAY,gBAAgB,gBAAgB,uBAAuB,UAAU;;;cAgClE;mBACM;mBACA;mBACA;mBACA;UACT;UACA;UACA;WACC;mBACQ;EAEjB,YAAY,iBAAiB;EAwDvB,YAAY,GAAG,OAAO,iBAAiB,KAAK,QAAQ,eAAe;;EAyGnE,YAAY,UAAS,wBAA6B;;EA0BxD,UACE,gBACA,UAAU,kBACV;IAAW;MACV;EAaH,KAAK,SAAS,mBAAmB;;EAQjC,YAAY,SAAS,mBAAmB;EAcxC,QAAQ,SAAS,mBAAmB;EAkFpC,cAAc;EAYd;UAIc;UAoDN;UAsCA;UAKM;UAoBN;UAmBA;UAkBA;UAaA;UA+BA;UAUA;UAYA;UAMA;;;;;;;;KA0BE,mBAAmB,KAC7B,YACA,cAAc,8CAEd,QAAQ,KAAK;;iBAGC,cAAc;UAIb;EACf;EACA;;iBAGc,aAAa,eAAe,OAAO,YAAY;;iBAc/C,oBACd,SAAS,oBACT,OAAO,KAAK"}
@@ -3,8 +3,8 @@ import { i as estimateCost, o as isModelPriced, s as resolveModelPricing } from
3
3
  import { z } from "zod";
4
4
  //#region src/cost-ledger.ts
5
5
  var CostCeilingReachedError = class extends ValidationError {
6
- constructor(ceilingUsd, committedAndReservedUsd, requestedUsd, phase, actor) {
7
- super(`CostLedger: reserving ${requestedUsd} for '${actor}' during '${phase}' would exceed ceiling ${ceilingUsd} with ${committedAndReservedUsd} already committed or reserved`);
6
+ constructor(ceilingUsd, committedUsd, requestedUsd, phase, actor) {
7
+ super(`CostLedger: reserving ${requestedUsd} for '${actor}' during '${phase}' would exceed ceiling ${ceilingUsd} with ${committedUsd} already committed`);
8
8
  }
9
9
  };
10
10
  var CostAccountingIncompleteError = class extends ValidationError {};
@@ -93,45 +93,55 @@ var CostLedger = class {
93
93
  callId,
94
94
  error: abortError(input.signal)
95
95
  };
96
- if (this.records.has(callId)) return {
97
- succeeded: false,
98
- callId,
99
- error: new CostCallConflictError(`CostLedger: callId '${callId}' already exists`)
100
- };
101
96
  this.ensureCostLimitPersisted(callId);
102
- const summary = this.summary();
103
- if (summary.unresolvedCalls > 0) return {
104
- succeeded: false,
105
- callId,
106
- error: new CostAccountingIncompleteError(`CostLedger: ${summary.unresolvedCalls} unresolved call(s) must be reconciled before new paid work`)
107
- };
108
97
  const maximumCostUsd = this.resolveMaximum(input.maximumCharge);
109
- if (this.costCeilingUsd !== void 0 && this.hasIncompleteSettledCall()) return {
98
+ const existing = this.records.get(callId);
99
+ if (existing) return {
110
100
  succeeded: false,
111
101
  callId,
112
- error: new CostAccountingIncompleteError(`CostLedger: accounting is incomplete; refusing paid call '${input.actor}' during '${input.phase}'`)
102
+ error: new CostCallConflictError(existing.status === "pending" ? `CostLedger: callId '${callId}' is unresolved and must be reconciled before retry` : `CostLedger: callId '${callId}' already exists`, { callId })
113
103
  };
114
- if (this.costCeilingUsd !== void 0) {
115
- const committedAndReserved = summary.totalCostUsd + summary.reservedCostUsd;
116
- if (committedAndReserved + maximumCostUsd > this.costCeilingUsd) return {
117
- succeeded: false,
104
+ if (!pending) {
105
+ while (true) {
106
+ if (this.records.has(callId)) return {
107
+ succeeded: false,
108
+ callId,
109
+ error: new CostCallConflictError(`CostLedger: callId '${callId}' already exists`)
110
+ };
111
+ const summary = this.summary();
112
+ if (summary.unresolvedCalls > 0) return {
113
+ succeeded: false,
114
+ callId,
115
+ error: new CostAccountingIncompleteError(`CostLedger: ${summary.unresolvedCalls} unresolved call(s) must be reconciled before new paid work`)
116
+ };
117
+ if (this.costCeilingUsd === void 0) break;
118
+ if (this.hasIncompleteSettledCall()) return {
119
+ succeeded: false,
120
+ callId,
121
+ error: new CostAccountingIncompleteError(`CostLedger: accounting is incomplete; refusing paid call '${input.actor}' during '${input.phase}'`)
122
+ };
123
+ if (summary.totalCostUsd + maximumCostUsd > this.costCeilingUsd) return {
124
+ succeeded: false,
125
+ callId,
126
+ error: new CostCeilingReachedError(this.costCeilingUsd, summary.totalCostUsd, maximumCostUsd, input.phase, input.actor)
127
+ };
128
+ if (summary.totalCostUsd + summary.reservedCostUsd + maximumCostUsd <= this.costCeilingUsd) break;
129
+ await this.waitForReservationRelease(input.signal);
130
+ }
131
+ pending = {
132
+ status: "pending",
118
133
  callId,
119
- error: new CostCeilingReachedError(this.costCeilingUsd, committedAndReserved, maximumCostUsd, input.phase, input.actor)
134
+ channel: input.channel,
135
+ phase: input.phase,
136
+ actor: input.actor,
137
+ model: pendingModel(input),
138
+ ...maximumCostUsd === void 0 ? {} : { maximumCostUsd },
139
+ ...input.tags ? { tags: { ...input.tags } } : {},
140
+ timestamp: Date.now()
120
141
  };
142
+ this.appendRecord(pending);
143
+ this.activeCallIds.add(callId);
121
144
  }
122
- pending = {
123
- status: "pending",
124
- callId,
125
- channel: input.channel,
126
- phase: input.phase,
127
- actor: input.actor,
128
- model: pendingModel(input),
129
- ...maximumCostUsd === void 0 ? {} : { maximumCostUsd },
130
- ...input.tags ? { tags: { ...input.tags } } : {},
131
- timestamp: Date.now()
132
- };
133
- this.appendRecord(pending);
134
- this.activeCallIds.add(callId);
135
145
  } catch (error) {
136
146
  return {
137
147
  succeeded: false,
@@ -181,7 +191,7 @@ var CostLedger = class {
181
191
  if (!pending) throw new CostCallConflictError(`CostLedger: no pending call '${callId}'`);
182
192
  if (this.activeCallIds.has(callId)) throw new CostCallConflictError(`CostLedger: call '${callId}' is still active`);
183
193
  this.ensureCostLimitPersisted(callId);
184
- return this.commitReceipt(pending, observed, options.error);
194
+ return this.commitReceipt(pending, observed, options.failed === true);
185
195
  }
186
196
  list(filter) {
187
197
  return [...this.records.values()].filter((record) => record.status === "settled").filter((receipt) => matches(receipt, filter)).map(cloneReceipt);
@@ -322,7 +332,7 @@ var CostLedger = class {
322
332
  const error = toError(cause);
323
333
  try {
324
334
  const observed = input.receiptFromError?.(error);
325
- this.commitReceipt(pending, observed ?? unknownReceipt(pending.model), error.message);
335
+ this.commitReceipt(pending, observed ?? unknownReceipt(pending.model), true);
326
336
  } catch (receiptError) {
327
337
  if (receiptError instanceof CostLedgerPersistenceError || receiptError instanceof CostCallConflictError) return;
328
338
  this.captureFailure(pending, error, receiptError);
@@ -336,9 +346,28 @@ var CostLedger = class {
336
346
  this.activeCallIds.delete(callId);
337
347
  for (const resolve of [...this.idleWaiters]) resolve();
338
348
  }
349
+ async waitForReservationRelease(signal) {
350
+ if (signal?.aborted) throw abortError(signal);
351
+ await new Promise((resolve, reject) => {
352
+ let finished = false;
353
+ const finish = (error) => {
354
+ if (finished) return;
355
+ finished = true;
356
+ this.idleWaiters.delete(onRelease);
357
+ signal?.removeEventListener("abort", onAbort);
358
+ if (error) reject(error);
359
+ else resolve();
360
+ };
361
+ const onRelease = () => finish();
362
+ const onAbort = () => finish(abortError(signal));
363
+ this.idleWaiters.add(onRelease);
364
+ signal?.addEventListener("abort", onAbort, { once: true });
365
+ if (this.activeCallIds.size === 0) onRelease();
366
+ });
367
+ }
339
368
  commitOutcome(pending, error, observed) {
340
369
  try {
341
- const receipt = this.commitReceipt(pending, observed, error.message);
370
+ const receipt = this.commitReceipt(pending, observed, true);
342
371
  return paidFailure(pending.callId, error, receipt);
343
372
  } catch (receiptError) {
344
373
  if (receiptError instanceof CostLedgerPersistenceError || receiptError instanceof CostCallConflictError) return paidFailure(pending.callId, receiptError);
@@ -347,15 +376,15 @@ var CostLedger = class {
347
376
  }
348
377
  captureFailure(pending, cause, receiptError) {
349
378
  try {
350
- const receipt = this.commitReceipt(pending, unknownReceipt(pending.model), toError(receiptError).message);
379
+ const receipt = this.commitReceipt(pending, unknownReceipt(pending.model), true);
351
380
  return paidFailure(pending.callId, new CostReceiptCaptureError(pending.callId, cause, receiptError, receipt), receipt);
352
381
  } catch (error) {
353
382
  const typed = error instanceof Error ? error : toError(error);
354
383
  return paidFailure(pending.callId, typed);
355
384
  }
356
385
  }
357
- commitReceipt(pending, observed, error) {
358
- const receipt = buildReceipt(pending, observed, error);
386
+ commitReceipt(pending, observed, failed = false) {
387
+ const receipt = buildReceipt(pending, observed, failed);
359
388
  if (this.records.get(pending.callId)?.status !== "pending") throw new CostCallConflictError(`CostLedger: call '${pending.callId}' is not pending`);
360
389
  this.appendRecord(receipt);
361
390
  return cloneReceipt(receipt);
@@ -469,7 +498,7 @@ async function settle(promise, signal) {
469
498
  }));
470
499
  });
471
500
  }
472
- function buildReceipt(pending, observed, error) {
501
+ function buildReceipt(pending, observed, failed = false) {
473
502
  assertUsage(observed);
474
503
  assertString(observed.model, "receipt.model");
475
504
  if ([
@@ -514,7 +543,7 @@ function buildReceipt(pending, observed, error) {
514
543
  ...hasActual ? { actualCostUsd: observed.actualCostUsd } : {},
515
544
  ...hasExternalEstimate ? { estimatedCostUsd: observed.estimatedCostUsd } : {},
516
545
  ...pending.maximumCostUsd === void 0 ? {} : { maximumCostUsd: pending.maximumCostUsd },
517
- ...error ? { error } : {},
546
+ ...failed ? { error: "paid-call-failed" } : {},
518
547
  ...pending.tags ? { tags: { ...pending.tags } } : {},
519
548
  timestamp: pending.timestamp
520
549
  }, "provider receipt");
@@ -555,7 +584,7 @@ const CostReceiptBaseShape = {
555
584
  pricing: CostPricingSchema.optional(),
556
585
  actualCostUsd: NonNegative.optional(),
557
586
  estimatedCostUsd: NonNegative.optional(),
558
- error: z.string().optional()
587
+ error: z.literal("paid-call-failed").optional()
559
588
  };
560
589
  const CostReceiptSchema = z.strictObject({
561
590
  ...CostReceiptBaseShape,
@@ -649,7 +678,7 @@ function parseEvents(serialized) {
649
678
  let costCeilingUsd;
650
679
  let lineNumber = 0;
651
680
  try {
652
- for (const line of serialized.split("\n")) {
681
+ for (const line of completeJournalPrefix(serialized).split("\n")) {
653
682
  if (!line.trim()) continue;
654
683
  lineNumber += 1;
655
684
  const event = CostLedgerEventSchema.parse(JSON.parse(line));
@@ -674,6 +703,17 @@ function parseEvents(serialized) {
674
703
  throw new ValidationError(`CostLedger: invalid persisted event ${lineNumber || 1}: ${validationMessage(cause)}`, { cause });
675
704
  }
676
705
  }
706
+ function completeJournalPrefix(serialized) {
707
+ if (!serialized || serialized.endsWith("\n")) return serialized;
708
+ const finalNewline = serialized.lastIndexOf("\n");
709
+ const tail = serialized.slice(finalNewline + 1);
710
+ try {
711
+ JSON.parse(tail);
712
+ } catch {
713
+ return finalNewline < 0 ? "" : serialized.slice(0, finalNewline + 1);
714
+ }
715
+ throw new ValidationError("CostLedger: complete final persisted event is missing its newline terminator");
716
+ }
677
717
  function validateTransition(records, record) {
678
718
  const current = records.get(record.callId);
679
719
  if (!current) return;
@@ -681,7 +721,12 @@ function validateTransition(records, record) {
681
721
  if (!sameAttribution(current, record)) throw new ValidationError(`CostLedger: receipt attribution changed for call '${record.callId}'`);
682
722
  }
683
723
  function sameAttribution(before, after) {
684
- return before.channel === after.channel && before.phase === after.phase && before.actor === after.actor && before.maximumCostUsd === after.maximumCostUsd && before.timestamp === after.timestamp && JSON.stringify(before.tags ?? {}) === JSON.stringify(after.tags ?? {});
724
+ return before.channel === after.channel && before.phase === after.phase && before.actor === after.actor && before.maximumCostUsd === after.maximumCostUsd && before.timestamp === after.timestamp && sameTags(before.tags, after.tags);
725
+ }
726
+ function sameTags(left, right) {
727
+ const leftEntries = Object.entries(left ?? {}).sort(([a], [b]) => a.localeCompare(b));
728
+ const rightEntries = Object.entries(right ?? {}).sort(([a], [b]) => a.localeCompare(b));
729
+ return JSON.stringify(leftEntries) === JSON.stringify(rightEntries);
685
730
  }
686
731
  function parseReceipt(value, path) {
687
732
  try {
@@ -836,4 +881,4 @@ function assertString(value, name) {
836
881
  //#endregion
837
882
  export { CostLedgerPersistenceError as a, costForTokenPricing as c, CostLedger as i, costForUsage as l, CostCallConflictError as n, CostReceiptCaptureError as o, CostCeilingReachedError as r, CostReservationExceededError as s, CostAccountingIncompleteError as t, modelPriceKey as u };
838
883
 
839
- //# sourceMappingURL=cost-ledger-D-5_-dhi.js.map
884
+ //# sourceMappingURL=cost-ledger-CHDLA0Ss.js.map