@tangle-network/agent-eval 0.137.0 → 0.139.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 (172) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +34 -0
  3. package/dist/analyst/index.d.ts +485 -104
  4. package/dist/analyst/index.d.ts.map +1 -1
  5. package/dist/analyst/index.js +10 -607
  6. package/dist/analyst/index.js.map +1 -1
  7. package/dist/{benchmark-YDrpumqB.js → benchmark-CYtcIF2V.js} +299 -159
  8. package/dist/benchmark-CYtcIF2V.js.map +1 -0
  9. package/dist/{benchmark-CHX4orG7.d.ts → benchmark-DDVdWcwA.d.ts} +67 -15
  10. package/dist/benchmark-DDVdWcwA.d.ts.map +1 -0
  11. package/dist/benchmark-command-BKfjOBJ5.js +4537 -0
  12. package/dist/benchmark-command-BKfjOBJ5.js.map +1 -0
  13. package/dist/benchmarks/index.d.ts +1 -1
  14. package/dist/benchmarks/index.js +1 -1
  15. package/dist/{benchmarks-DCLkQOmc.js → benchmarks-zxhy1QV3.js} +4 -3
  16. package/dist/{benchmarks-DCLkQOmc.js.map → benchmarks-zxhy1QV3.js.map} +1 -1
  17. package/dist/campaign/index.d.ts +5 -5
  18. package/dist/campaign/index.js +4 -3
  19. package/dist/{campaign-lgObcHFC.js → campaign-DrS6_hLd.js} +19 -11
  20. package/dist/campaign-DrS6_hLd.js.map +1 -0
  21. package/dist/canonical-D011XM8r.js +86 -0
  22. package/dist/canonical-D011XM8r.js.map +1 -0
  23. package/dist/cli.js +10 -3
  24. package/dist/cli.js.map +1 -1
  25. package/dist/{client-C8L6h6Wf.d.ts → client-BohnDFBq.d.ts} +4 -4
  26. package/dist/{client-C8L6h6Wf.d.ts.map → client-BohnDFBq.d.ts.map} +1 -1
  27. package/dist/{completion-verifier-DSyRNVzU.d.ts → completion-verifier-IPoP4fQO.d.ts} +178 -4
  28. package/dist/completion-verifier-IPoP4fQO.d.ts.map +1 -0
  29. package/dist/contract/index.d.ts +10 -10
  30. package/dist/contract/index.js +9 -8
  31. package/dist/contract/index.js.map +1 -1
  32. package/dist/control.d.ts +2 -2
  33. package/dist/{cost-ledger-D-5_-dhi.js → cost-ledger-CZ9diLxY.js} +90 -45
  34. package/dist/cost-ledger-CZ9diLxY.js.map +1 -0
  35. package/dist/{cost-ledger-D2o6JOrL.d.ts → cost-ledger-DKgyIWRj.d.ts} +6 -2
  36. package/dist/cost-ledger-DKgyIWRj.d.ts.map +1 -0
  37. package/dist/default-registry-B8vf7Rmf.d.ts +118 -0
  38. package/dist/default-registry-B8vf7Rmf.d.ts.map +1 -0
  39. package/dist/default-registry-BgJJItGr.js +2364 -0
  40. package/dist/default-registry-BgJJItGr.js.map +1 -0
  41. package/dist/dspy-rlm-engine-DTkVyDX-.js +344 -0
  42. package/dist/dspy-rlm-engine-DTkVyDX-.js.map +1 -0
  43. package/dist/{eval-campaign-CHqfLnff.js → eval-campaign-BmptJj50.js} +2 -2
  44. package/dist/{eval-campaign-CHqfLnff.js.map → eval-campaign-BmptJj50.js.map} +1 -1
  45. package/dist/exact-types-MaaFcllV.d.ts +234 -0
  46. package/dist/exact-types-MaaFcllV.d.ts.map +1 -0
  47. package/dist/external-optimizer-contracts-BrxY2Sli.d.ts +32 -0
  48. package/dist/external-optimizer-contracts-BrxY2Sli.d.ts.map +1 -0
  49. package/dist/{extract-usage-p-56bh8q.js → extract-usage-DZs601Va.js} +2 -2
  50. package/dist/{extract-usage-p-56bh8q.js.map → extract-usage-DZs601Va.js.map} +1 -1
  51. package/dist/{feedback-trajectory-N_F0PwHz.d.ts → feedback-trajectory-BJUWOkJM.d.ts} +3 -2
  52. package/dist/feedback-trajectory-BJUWOkJM.d.ts.map +1 -0
  53. package/dist/fuzz.d.ts +1 -1
  54. package/dist/fuzz.js +1 -1
  55. package/dist/{hf-dataset-DBJXXoY1.js → hf-dataset-XggBupCr.js} +2 -2
  56. package/dist/{hf-dataset-DBJXXoY1.js.map → hf-dataset-XggBupCr.js.map} +1 -1
  57. package/dist/hosted/index.d.ts +3 -3
  58. package/dist/{index-C-Pr4OWg.d.ts → index-BTm_P9aC.d.ts} +12 -11
  59. package/dist/index-BTm_P9aC.d.ts.map +1 -0
  60. package/dist/{index-U3RHOShi.d.ts → index-CWOPCJiw.d.ts} +2 -2
  61. package/dist/{index-U3RHOShi.d.ts.map → index-CWOPCJiw.d.ts.map} +1 -1
  62. package/dist/{index-DRNl6g_N.d.ts → index-CtR1xh4V.d.ts} +3 -3
  63. package/dist/{index-DRNl6g_N.d.ts.map → index-CtR1xh4V.d.ts.map} +1 -1
  64. package/dist/index-DEb46kc6.d.ts.map +1 -1
  65. package/dist/{index-BnP1QJUv.d.ts → index-_66rVpwN.d.ts} +5 -5
  66. package/dist/{index-BnP1QJUv.d.ts.map → index-_66rVpwN.d.ts.map} +1 -1
  67. package/dist/index.d.ts +35 -55
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +55 -514
  70. package/dist/index.js.map +1 -1
  71. package/dist/{insight-report-B9ooYH_g.d.ts → insight-report-Bu5Wi9tG.d.ts} +4 -4
  72. package/dist/{insight-report-B9ooYH_g.d.ts.map → insight-report-Bu5Wi9tG.d.ts.map} +1 -1
  73. package/dist/{integrity-CKxosZ5Z.d.ts → integrity-COTh3DTH.d.ts} +2 -2
  74. package/dist/{integrity-CKxosZ5Z.d.ts.map → integrity-COTh3DTH.d.ts.map} +1 -1
  75. package/dist/kind-factory-CFxA0JQX.js +2133 -0
  76. package/dist/kind-factory-CFxA0JQX.js.map +1 -0
  77. package/dist/ledger-core/index.js +2 -1
  78. package/dist/{ledger-core-t6sItivm.js → ledger-core-Dxz0Rkwa.js} +210 -99
  79. package/dist/ledger-core-Dxz0Rkwa.js.map +1 -0
  80. package/dist/{llm-client-DKB25jV8.js → llm-client-bkztEfIx.js} +5 -5
  81. package/dist/llm-client-bkztEfIx.js.map +1 -0
  82. package/dist/meta-eval/index.d.ts +2 -2
  83. package/dist/multishot/index.d.ts +2 -2
  84. package/dist/openapi.json +1 -1
  85. package/dist/{proposal-findings-DCawte-y.js → proposal-findings-2GIUo1et.js} +2 -68
  86. package/dist/proposal-findings-2GIUo1et.js.map +1 -0
  87. package/dist/{release-report-CofgVNZt.d.ts → release-report-fZarvIm-.d.ts} +3 -3
  88. package/dist/{release-report-CofgVNZt.d.ts.map → release-report-fZarvIm-.d.ts.map} +1 -1
  89. package/dist/{replay-K8FaC0CB.d.ts → replay-DjG4IG60.d.ts} +34 -143
  90. package/dist/replay-DjG4IG60.d.ts.map +1 -0
  91. package/dist/{replay-Bju0T8Ls.js → replay-SA4OB7O7.js} +48 -136
  92. package/dist/replay-SA4OB7O7.js.map +1 -0
  93. package/dist/reporting.d.ts +4 -4
  94. package/dist/{researcher-Da0Wj-bt.d.ts → researcher-BxhtGfKa.d.ts} +5 -5
  95. package/dist/{researcher-Da0Wj-bt.d.ts.map → researcher-BxhtGfKa.d.ts.map} +1 -1
  96. package/dist/{reward-hacking-CQ3hTCO3.d.ts → reward-hacking-CqSLiV51.d.ts} +2 -2
  97. package/dist/{reward-hacking-CQ3hTCO3.d.ts.map → reward-hacking-CqSLiV51.d.ts.map} +1 -1
  98. package/dist/rl.d.ts +5 -5
  99. package/dist/rl.js +1 -1
  100. package/dist/rollout/index.d.ts +1 -1
  101. package/dist/rollout/index.js +2 -2
  102. package/dist/{rollout-DQFl0UXA.js → rollout-8nj3mYvx.js} +2 -2
  103. package/dist/{rollout-DQFl0UXA.js.map → rollout-8nj3mYvx.js.map} +1 -1
  104. package/dist/{rubric-predictive-validity-C4sztLR3.d.ts → rubric-predictive-validity-DQBQj6uV.d.ts} +2 -2
  105. package/dist/{rubric-predictive-validity-C4sztLR3.d.ts.map → rubric-predictive-validity-DQBQj6uV.d.ts.map} +1 -1
  106. package/dist/{run-evidence-BDIircdA.d.ts → run-evidence-C4RcRQT5.d.ts} +3 -3
  107. package/dist/{run-evidence-BDIircdA.d.ts.map → run-evidence-C4RcRQT5.d.ts.map} +1 -1
  108. package/dist/{run-record-BPCa2rQ8.d.ts → run-record-CztDMXVF.d.ts} +2 -2
  109. package/dist/{run-record-BPCa2rQ8.d.ts.map → run-record-CztDMXVF.d.ts.map} +1 -1
  110. package/dist/{semantic-concept-judge-Bz64IckK.js → semantic-concept-judge-BuIJ9IfB.js} +49 -6
  111. package/dist/semantic-concept-judge-BuIJ9IfB.js.map +1 -0
  112. package/dist/{server-KjXZZUDX.js → server-DaCpLfi0.js} +3 -3
  113. package/dist/{server-KjXZZUDX.js.map → server-DaCpLfi0.js.map} +1 -1
  114. package/dist/single-run-lock-BTTtPZ9N.js +989 -0
  115. package/dist/single-run-lock-BTTtPZ9N.js.map +1 -0
  116. package/dist/{skill-usage-CFDLLlhF.d.ts → skill-usage-B-BFS8M2.d.ts} +65 -40
  117. package/dist/skill-usage-B-BFS8M2.d.ts.map +1 -0
  118. package/dist/{skillopt-optimization-method-f4o9sUT4.js → skillopt-optimization-method-BbGnCC53.js} +20 -979
  119. package/dist/skillopt-optimization-method-BbGnCC53.js.map +1 -0
  120. package/dist/{skillopt-optimization-method-BpbnlvAZ.d.ts → skillopt-optimization-method-_s0Tub7Y.d.ts} +11 -39
  121. package/dist/skillopt-optimization-method-_s0Tub7Y.d.ts.map +1 -0
  122. package/dist/{statistics-_7P642CN.d.ts → statistics-B5d0Zd-z.d.ts} +2 -2
  123. package/dist/{statistics-_7P642CN.d.ts.map → statistics-B5d0Zd-z.d.ts.map} +1 -1
  124. package/dist/store-otlp-DX4fGIcf.js +757 -0
  125. package/dist/store-otlp-DX4fGIcf.js.map +1 -0
  126. package/dist/{summary-report-DHipz9Kx.d.ts → summary-report-Cg7BifAM.d.ts} +3 -3
  127. package/dist/{summary-report-DHipz9Kx.d.ts.map → summary-report-Cg7BifAM.d.ts.map} +1 -1
  128. package/dist/tool-groups-CdYq22lX.d.ts +258 -0
  129. package/dist/tool-groups-CdYq22lX.d.ts.map +1 -0
  130. package/dist/traces.d.ts +7 -6
  131. package/dist/traces.js +5 -4
  132. package/dist/{types-CTGbIm57.d.ts → types-BBFNHxSK.d.ts} +5 -5
  133. package/dist/{types-CTGbIm57.d.ts.map → types-BBFNHxSK.d.ts.map} +1 -1
  134. package/dist/{types-CKswbJGO.d.ts → types-DoEYskCd.d.ts} +5 -5
  135. package/dist/{types-CKswbJGO.d.ts.map → types-DoEYskCd.d.ts.map} +1 -1
  136. package/dist/{types-CTvKfr5F.d.ts → types-uPrS6mD-.d.ts} +2 -2
  137. package/dist/{types-CTvKfr5F.d.ts.map → types-uPrS6mD-.d.ts.map} +1 -1
  138. package/dist/usage-receipt-CgxMEBZq.js +134 -0
  139. package/dist/usage-receipt-CgxMEBZq.js.map +1 -0
  140. package/dist/wire/index.d.ts +3 -3
  141. package/dist/wire/index.js +1 -1
  142. package/docs/trace-analysis.md +191 -385
  143. package/package.json +5 -4
  144. package/dist/analyze-runs-PVtnfjvA.d.ts +0 -72
  145. package/dist/analyze-runs-PVtnfjvA.d.ts.map +0 -1
  146. package/dist/benchmark-CHX4orG7.d.ts.map +0 -1
  147. package/dist/benchmark-YDrpumqB.js.map +0 -1
  148. package/dist/campaign-lgObcHFC.js.map +0 -1
  149. package/dist/completion-verifier-DSyRNVzU.d.ts.map +0 -1
  150. package/dist/concurrency-MUjT7VjM.js +0 -109
  151. package/dist/concurrency-MUjT7VjM.js.map +0 -1
  152. package/dist/cost-ledger-D-5_-dhi.js.map +0 -1
  153. package/dist/cost-ledger-D2o6JOrL.d.ts.map +0 -1
  154. package/dist/default-registry-CLXbRt0f.js +0 -2594
  155. package/dist/default-registry-CLXbRt0f.js.map +0 -1
  156. package/dist/default-registry-Dc5D_Loc.d.ts +0 -202
  157. package/dist/default-registry-Dc5D_Loc.d.ts.map +0 -1
  158. package/dist/feedback-trajectory-N_F0PwHz.d.ts.map +0 -1
  159. package/dist/index-C-Pr4OWg.d.ts.map +0 -1
  160. package/dist/ledger-core-t6sItivm.js.map +0 -1
  161. package/dist/llm-client-DKB25jV8.js.map +0 -1
  162. package/dist/proposal-findings-DCawte-y.js.map +0 -1
  163. package/dist/registry-BdM7SuTr.d.ts +0 -124
  164. package/dist/registry-BdM7SuTr.d.ts.map +0 -1
  165. package/dist/replay-Bju0T8Ls.js.map +0 -1
  166. package/dist/replay-K8FaC0CB.d.ts.map +0 -1
  167. package/dist/semantic-concept-judge-Bz64IckK.js.map +0 -1
  168. package/dist/skill-usage-CFDLLlhF.d.ts.map +0 -1
  169. package/dist/skillopt-optimization-method-BpbnlvAZ.d.ts.map +0 -1
  170. package/dist/skillopt-optimization-method-f4o9sUT4.js.map +0 -1
  171. package/dist/tools-DZk2Jn64.js +0 -1876
  172. package/dist/tools-DZk2Jn64.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/analyst/adapters.ts","../../src/analyst/benchmark-comparison.ts","../../src/analyst/benchmark-datasets.ts","../../src/analyst/benchmark-report.ts","../../src/analyst/define.ts"],"sourcesContent":["/**\n * Adapter factories — lift each existing agent-eval primitive into the\n * Analyst contract without re-implementing it.\n *\n * Five primitives, five factories. Each one:\n * - Builds an Analyst with a stable id (caller chooses; defaults\n * given), a sensible default `inputKind`, a version derived from\n * the wrapped primitive's version + an adapter revision, and an\n * `analyze()` that calls the primitive and lifts its output to\n * AnalystFinding[] using `makeFinding()`.\n * - Maps severities: the existing `Severity` ('critical' | 'major' |\n * 'minor' | 'info') projects onto AnalystSeverity ('critical' |\n * 'high' | 'medium' | 'low' | 'info'); 'major' → 'high', 'minor' →\n * 'medium'. Domain analysts that want finer-grained mapping override.\n *\n * Adapters never own state. Calling the same factory twice with the\n * same primitive instance is safe.\n */\n\nimport { CostLedger } from '../cost-ledger'\nimport type {\n Finding as LayerFinding,\n Severity as LayerSeverity,\n MultiLayerVerifier,\n VerifyOptions,\n} from '../multi-layer-verifier'\nimport { RunCritic, type RunTrace } from '../run-critic'\nimport {\n runSemanticConceptJudge,\n SEMANTIC_CONCEPT_JUDGE_VERSION,\n type SemanticConceptJudgeInput,\n type SemanticConceptJudgeOptions,\n type SemanticConceptJudgeResult,\n} from '../semantic-concept-judge'\nimport type { JudgeFn, JudgeInput, JudgeScore } from '../types'\nimport type { ChatClient } from './chat-client'\nimport type { Analyst, AnalystFinding, AnalystSeverity } from './types'\nimport { makeFinding } from './types'\nimport { settleUsageReceiptFromCostLedger, validateUsageSettlementTimeout } from './usage-receipt'\n\nconst ADAPTER_REV = '1'\n\n// ── Severity bridges ───────────────────────────────────────────────\n\nexport function liftSeverity(s: LayerSeverity): AnalystSeverity {\n switch (s) {\n case 'critical':\n return 'critical'\n case 'major':\n return 'high'\n case 'minor':\n return 'medium'\n case 'info':\n return 'info'\n }\n}\n\n// ── 1. MultiLayerVerifier → Analyst ─────────────────────────────────\n\nexport interface VerifierAdapterOpts<Env> {\n id?: string\n area?: string\n verifier: MultiLayerVerifier<Env>\n /**\n * The verifier expects an `env` per run. Adapters take it from\n * `AnalystRunInputs.custom[<id>]` via the registry's 'custom' routing.\n */\n options?: Omit<VerifyOptions<Env>, 'env'>\n}\n\nexport function createVerifierAdapter<Env>(opts: VerifierAdapterOpts<Env>): Analyst<Env> {\n const id = opts.id ?? 'multi-layer-verifier'\n const area = opts.area ?? 'verification'\n return {\n id,\n description:\n \"Runs a MultiLayerVerifier and lifts each layer's findings into the analyst envelope.\",\n inputKind: 'custom',\n cost: { kind: 'deterministic' },\n version: `verifier-${ADAPTER_REV}`,\n async analyze(env, ctx) {\n const report = await opts.verifier.run({ env, ...opts.options })\n const out: AnalystFinding[] = []\n for (const layer of report.layers) {\n for (const finding of layer.findings) {\n out.push(liftLayerFinding(id, area, layer.layer, finding))\n }\n // Layer-level signal: a failed/error layer is itself a finding\n // even if it didn't emit per-finding rows.\n if (layer.status === 'fail' || layer.status === 'error' || layer.status === 'timeout') {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: layer.layer,\n claim: `layer \"${layer.layer}\" ${layer.status}: ${layer.reason ?? 'no reason given'}`,\n severity:\n layer.status === 'error' ? 'high' : layer.status === 'timeout' ? 'medium' : 'high',\n confidence: 1,\n evidence_refs: [],\n metadata: {\n layer_status: layer.status,\n duration_ms: layer.durationMs,\n score: layer.score,\n diagnostics: layer.diagnostics,\n },\n }),\n )\n }\n }\n ctx.log?.('verifier complete', {\n layers: report.layers.length,\n blended: report.blendedScore,\n all_pass: report.allPass,\n })\n return out\n },\n }\n}\n\nfunction liftLayerFinding(\n analyst_id: string,\n area: string,\n layer: string,\n f: LayerFinding,\n): AnalystFinding {\n return makeFinding({\n analyst_id,\n area,\n subject: f.layer ?? layer,\n claim: f.message,\n severity: liftSeverity(f.severity),\n confidence: 0.85,\n evidence_refs: f.evidence\n ? [{ kind: 'artifact', uri: 'inline:evidence', excerpt: f.evidence }]\n : [],\n metadata: f.detail,\n })\n}\n\n// ── 2. RunCritic → Analyst ──────────────────────────────────────────\n\nexport interface RunCriticAdapterOpts {\n id?: string\n area?: string\n critic?: RunCritic\n /** Optional threshold below which a dimension is reported as a finding. Default 0.5. */\n threshold?: number\n}\n\nexport function createRunCriticAdapter(opts: RunCriticAdapterOpts = {}): Analyst<RunTrace> {\n const id = opts.id ?? 'run-critic'\n const area = opts.area ?? 'run-quality'\n const critic = opts.critic ?? new RunCritic()\n const threshold = opts.threshold ?? 0.5\n return {\n id,\n description:\n 'Scores a single run across success / grounding / drift / tool-quality and surfaces below-threshold dimensions.',\n inputKind: 'custom',\n cost: { kind: 'deterministic' },\n version: `run-critic-${ADAPTER_REV}`,\n async analyze(trace) {\n const score = critic.scoreTrace(trace)\n const out: AnalystFinding[] = []\n const dims: Array<[keyof typeof score, AnalystSeverity, string]> = [\n ['success', 'critical', 'run did not complete successfully'],\n ['goalProgress', 'high', 'goal progress is low'],\n ['repoGroundedness', 'high', 'output is poorly grounded in the repository'],\n ['toolUseQuality', 'medium', 'tool use quality is low'],\n ['patchQuality', 'medium', 'no real patch/edit evidence'],\n ['testReality', 'high', 'no real test/build evidence'],\n ['finalGate', 'critical', 'final gate is blocking'],\n ]\n for (const [dim, sev, msg] of dims) {\n const value = score[dim] as number\n if (typeof value === 'number' && value < threshold) {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: dim,\n claim: msg,\n rationale: `${dim}=${value.toFixed(2)} below threshold ${threshold}`,\n severity: sev,\n confidence: 1,\n evidence_refs: [],\n metadata: { dimension: dim, value, threshold, run_id: trace.run.runId },\n }),\n )\n }\n }\n // Drift penalty is high → surface as a finding (inverse threshold).\n if (score.driftPenalty > 1 - threshold) {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: 'drift',\n claim: 'agent output drifted from repository signal',\n rationale: `driftPenalty=${score.driftPenalty.toFixed(2)}`,\n severity: 'medium',\n confidence: 0.9,\n evidence_refs: [],\n metadata: { drift_penalty: score.driftPenalty, notes: score.notes },\n }),\n )\n }\n return out\n },\n }\n}\n\n// ── 3. JudgeFn → Analyst ────────────────────────────────────────────\n\nexport interface JudgeAdapterOpts {\n id?: string\n area?: string\n judge: JudgeFn\n /** Chat client passed to the JudgeFn. */\n chat: ChatClient\n /** Optional cost classification — most judges call an LLM. */\n cost?: Analyst['cost']\n /** Optional threshold below which a JudgeScore becomes a finding. Default 6 (on 0-10 scale). */\n threshold?: number\n}\n\nexport function createJudgeAdapter(opts: JudgeAdapterOpts): Analyst<JudgeInput> {\n const id = opts.id ?? 'judge'\n const area = opts.area ?? 'judge'\n const threshold = opts.threshold ?? 6\n return {\n id,\n description:\n 'Wraps an agent-eval JudgeFn into an analyst; below-threshold dimensions surface as findings.',\n inputKind: 'judge-input',\n cost: opts.cost ?? { kind: 'llm' },\n version: `judge-${ADAPTER_REV}`,\n async analyze(input) {\n const scores = await opts.judge(opts.chat, input)\n return scores\n .filter((s) => normalize10(s.score) < threshold)\n .map((s) => liftJudgeScore(id, area, s))\n },\n }\n}\n\nfunction normalize10(s: number): number {\n // JudgeScore convention is 0-10 but some judges emit 0-1. Coerce to 0-10.\n return s <= 1 ? s * 10 : s\n}\n\nfunction liftJudgeScore(analyst_id: string, area: string, s: JudgeScore): AnalystFinding {\n const score10 = normalize10(s.score)\n const severity: AnalystSeverity =\n score10 < 3 ? 'critical' : score10 < 5 ? 'high' : score10 < 7 ? 'medium' : 'low'\n return makeFinding({\n analyst_id,\n area,\n subject: s.dimension,\n claim: `${s.judgeName}/${s.dimension} scored ${score10.toFixed(1)}/10`,\n rationale: s.reasoning,\n severity,\n confidence: 0.8,\n evidence_refs: s.evidence\n ? [{ kind: 'artifact', uri: 'inline:evidence', excerpt: s.evidence }]\n : [],\n // Descriptive origin only. A caller may admit search feedback into candidate\n // generation, but final evaluation findings have no allowed proposal origin.\n derived_from_judge: true,\n metadata: { judge_name: s.judgeName, dimension: s.dimension, score_10: score10 },\n })\n}\n\n// ── 4. SemanticConceptJudge → Analyst ──────────────────────────────\n\nexport interface SemanticConceptJudgeAdapterOpts {\n id?: string\n area?: string\n /** Registry context owns cancellation and the per-analyst cost ledger. */\n options?: Omit<SemanticConceptJudgeOptions, 'costLedger' | 'signal'>\n /** Maximum post-cancellation wait for a provider receipt. Default 5 seconds. */\n settlementTimeoutMs?: number\n}\n\nexport function createSemanticConceptJudgeAdapter(\n opts: SemanticConceptJudgeAdapterOpts = {},\n): Analyst<SemanticConceptJudgeInput> {\n const id = opts.id ?? 'semantic-concept-judge'\n const area = opts.area ?? 'concept-coverage'\n const settlementTimeoutMs = validateUsageSettlementTimeout(opts.settlementTimeoutMs)\n return {\n id,\n description:\n 'Runs the semantic-concept judge and surfaces missing / weak concepts as findings.',\n inputKind: 'custom',\n cost: {\n kind: 'llm',\n models: opts.options?.model ? [opts.options.model] : undefined,\n settlement_timeout_ms: settlementTimeoutMs,\n },\n version: `${SEMANTIC_CONCEPT_JUDGE_VERSION}-adapter-${ADAPTER_REV}`,\n async analyze(input, ctx) {\n const costLedger = new CostLedger(ctx.budgetUsd)\n let result: SemanticConceptJudgeResult\n try {\n result = await runSemanticConceptJudge(input, {\n ...opts.options,\n costLedger,\n signal: ctx.signal,\n })\n } finally {\n const usage = await settleUsageReceiptFromCostLedger(costLedger, {\n channel: 'judge',\n timeoutMs: settlementTimeoutMs,\n })\n if (!usage.settled) {\n ctx.log?.('semantic-concept judge provider settlement timed out', {\n pending_calls: usage.pendingCalls,\n timeout_ms: settlementTimeoutMs,\n })\n }\n ctx.recordUsage?.(usage.receipt)\n }\n if (!result.available) {\n return [\n makeFinding({\n analyst_id: id,\n area,\n claim: 'semantic-concept judge unavailable',\n rationale: result.error,\n severity: 'info',\n confidence: 1,\n evidence_refs: [],\n metadata: { reason: result.error },\n }),\n ]\n }\n const out: AnalystFinding[] = []\n for (const f of result.findings) {\n // Only surface gaps: missing concepts or low scores. Concepts at\n // 7+/10 with present=true are not findings — they're successes.\n if (f.present && f.score >= 7) continue\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: f.concept,\n claim: f.present\n ? `concept \"${f.concept}\" is weak (${f.score}/10)`\n : `concept \"${f.concept}\" is missing`,\n rationale: f.evidence,\n severity: liftSeverity(f.severity),\n confidence: 0.85,\n evidence_refs: [{ kind: 'artifact', uri: 'inline:evidence', excerpt: f.evidence }],\n metadata: {\n concept: f.concept,\n present: f.present,\n score_10: f.score,\n },\n }),\n )\n }\n return out\n },\n }\n}\n","import { pairedBootstrap } from '../statistics'\nimport type { AnalystBenchmarkObservation, AnalystBenchmarkResult } from './benchmark'\n\nexport type AnalystComparisonMetric =\n | 'completion'\n | 'issueRecall'\n | 'findingPrecision'\n | 'f1'\n | 'criticalStepAccuracy'\n | 'citationCoverage'\n | 'citationLabelAgreement'\n | 'citationResolution'\n | 'cleanAccuracy'\n | 'latencyMs'\n | 'calls'\n | 'inputTokens'\n | 'outputTokens'\n | 'reasoningTokens'\n | 'cachedTokens'\n | 'cacheWriteTokens'\n | 'costUsd'\n\nexport interface AnalystMetricComparison {\n metric: AnalystComparisonMetric\n direction: 'higher' | 'lower'\n pairedCases: number\n pairedObservations: number\n baselineMean: number\n candidateMean: number\n meanDelta: number\n intervalLow: number\n intervalHigh: number\n confidence: number\n resamples: number\n enoughCasesForInference: boolean\n}\n\nexport interface AnalystRunnerComparison {\n baselineRunnerId: string\n candidateRunnerId: string\n metrics: AnalystMetricComparison[]\n}\n\nexport function compareAnalystRunners(\n result: AnalystBenchmarkResult,\n options: {\n baselineRunnerId: string\n candidateRunnerId: string\n confidence?: number\n resamples?: number\n seed?: number\n },\n): AnalystRunnerComparison {\n const confidence = options.confidence ?? 0.95\n const resamples = options.resamples ?? 2000\n assertComparisonControls(confidence, resamples)\n\n const runnerIds = new Set(result.summaries.map((summary) => summary.runnerId))\n if (!runnerIds.has(options.baselineRunnerId)) {\n throw new TypeError(`unknown baseline analyst runner '${options.baselineRunnerId}'`)\n }\n if (!runnerIds.has(options.candidateRunnerId)) {\n throw new TypeError(`unknown candidate analyst runner '${options.candidateRunnerId}'`)\n }\n if (options.baselineRunnerId === options.candidateRunnerId) {\n throw new TypeError('baseline and candidate analyst runners must be different')\n }\n\n const baseline = observationsByCase(result.observations, options.baselineRunnerId)\n const candidate = observationsByCase(result.observations, options.candidateRunnerId)\n const metrics: AnalystMetricComparison[] = []\n for (const metric of METRICS) {\n const before: number[] = []\n const after: number[] = []\n let pairedObservations = 0\n for (const [caseId, baselineObservations] of baseline) {\n const candidateObservations = candidate.get(caseId)\n if (!candidateObservations) continue\n const candidateByRepetition = new Map(\n candidateObservations.map((observation) => [observation.repetition, observation]),\n )\n const caseBefore: number[] = []\n const caseAfter: number[] = []\n for (const baselineObservation of baselineObservations) {\n const candidateObservation = candidateByRepetition.get(baselineObservation.repetition)\n if (!candidateObservation) continue\n const baselineValue = metricValue(baselineObservation, metric)\n const candidateValue = metricValue(candidateObservation, metric)\n if (baselineValue === null || candidateValue === null) continue\n caseBefore.push(baselineValue)\n caseAfter.push(candidateValue)\n }\n if (caseBefore.length === 0) continue\n before.push(mean(caseBefore))\n after.push(mean(caseAfter))\n pairedObservations += caseBefore.length\n }\n if (before.length === 0) continue\n const interval = pairedBootstrap(before, after, {\n confidence,\n resamples,\n statistic: 'mean',\n seed: options.seed,\n })\n const comparison: AnalystMetricComparison = {\n metric,\n direction: LOWER_IS_BETTER.has(metric) ? 'lower' : 'higher',\n pairedCases: interval.n,\n pairedObservations,\n baselineMean: mean(before),\n candidateMean: mean(after),\n meanDelta: interval.mean,\n intervalLow: interval.low,\n intervalHigh: interval.high,\n confidence: interval.confidence,\n resamples: interval.resamples,\n enoughCasesForInference: interval.gateEligible,\n }\n assertValidComparison(comparison)\n metrics.push(comparison)\n }\n return {\n baselineRunnerId: options.baselineRunnerId,\n candidateRunnerId: options.candidateRunnerId,\n metrics,\n }\n}\n\nconst METRICS: readonly AnalystComparisonMetric[] = [\n 'completion',\n 'issueRecall',\n 'findingPrecision',\n 'f1',\n 'criticalStepAccuracy',\n 'citationCoverage',\n 'citationLabelAgreement',\n 'citationResolution',\n 'cleanAccuracy',\n 'latencyMs',\n 'calls',\n 'inputTokens',\n 'outputTokens',\n 'reasoningTokens',\n 'cachedTokens',\n 'cacheWriteTokens',\n 'costUsd',\n]\n\nconst LOWER_IS_BETTER = new Set<AnalystComparisonMetric>([\n 'latencyMs',\n 'calls',\n 'inputTokens',\n 'outputTokens',\n 'reasoningTokens',\n 'cachedTokens',\n 'cacheWriteTokens',\n 'costUsd',\n])\n\nfunction observationsByCase(\n observations: readonly AnalystBenchmarkObservation[],\n runnerId: string,\n): Map<string, AnalystBenchmarkObservation[]> {\n const byCase = new Map<string, AnalystBenchmarkObservation[]>()\n for (const observation of observations) {\n if (observation.runnerId !== runnerId) continue\n const rows = byCase.get(observation.caseId) ?? []\n rows.push(observation)\n byCase.set(observation.caseId, rows)\n }\n return byCase\n}\n\nfunction metricValue(\n observation: AnalystBenchmarkObservation,\n metric: AnalystComparisonMetric,\n): number | null {\n if (metric === 'completion') return observation.error ? 0 : 1\n if (metric === 'latencyMs') return observation.latencyMs\n if (metric === 'cleanAccuracy') {\n if (observation.score.expectedIssueCount !== 0) return null\n if (observation.error) return 0\n return observation.score.cleanFalsePositive ? 0 : 1\n }\n if (\n (metric === 'issueRecall' || metric === 'findingPrecision' || metric === 'f1') &&\n observation.score.expectedIssueCount === 0\n ) {\n return null\n }\n if (\n observation.error &&\n (metric === 'issueRecall' ||\n metric === 'findingPrecision' ||\n metric === 'f1' ||\n metric === 'criticalStepAccuracy')\n ) {\n if (metric === 'criticalStepAccuracy' && observation.score.criticalStepAccuracy === null) {\n return null\n }\n return 0\n }\n if (\n observation.error &&\n (metric === 'citationCoverage' ||\n metric === 'citationLabelAgreement' ||\n metric === 'citationResolution')\n ) {\n return null\n }\n if (metric === 'issueRecall') return observation.score.issueRecall\n if (metric === 'findingPrecision') return observation.score.findingPrecision\n if (metric === 'f1') return observation.score.f1\n if (metric === 'criticalStepAccuracy') return observation.score.criticalStepAccuracy\n if (metric === 'citationCoverage') return observation.score.citationCoverage\n if (metric === 'citationLabelAgreement') return observation.score.citationLabelAgreement\n if (metric === 'citationResolution') return observation.evidenceResolution?.validity ?? null\n if (metric === 'calls') return observation.usage?.calls ?? null\n if (metric === 'inputTokens') return observation.usage?.tokens?.input ?? null\n if (metric === 'outputTokens') return observation.usage?.tokens?.output ?? null\n if (metric === 'reasoningTokens') return observation.usage?.tokens?.reasoning ?? null\n if (metric === 'cachedTokens') return observation.usage?.tokens?.cached ?? null\n if (metric === 'cacheWriteTokens') return observation.usage?.tokens?.cacheWrite ?? null\n if (observation.usage?.cost.kind === 'uncaptured') return null\n return observation.usage?.cost.usd ?? null\n}\n\nfunction mean(values: readonly number[]): number {\n return values.reduce((sum, value) => sum + value, 0) / values.length\n}\n\nfunction assertComparisonControls(confidence: number, resamples: number): void {\n if (!Number.isSafeInteger(resamples) || resamples <= 0 || resamples > 1_000_000) {\n throw new Error(\n `compareAnalystRunners: resamples must be a positive safe integer no greater than 1000000, got ${String(resamples)}`,\n )\n }\n if (!Number.isFinite(confidence) || confidence <= 0 || confidence >= 1) {\n throw new Error(\n `compareAnalystRunners: confidence must be a finite number in (0,1), got ${String(confidence)}`,\n )\n }\n}\n\nfunction assertValidComparison(comparison: AnalystMetricComparison): void {\n const numericFields = [\n 'pairedCases',\n 'pairedObservations',\n 'baselineMean',\n 'candidateMean',\n 'meanDelta',\n 'intervalLow',\n 'intervalHigh',\n 'confidence',\n 'resamples',\n ] as const\n if (numericFields.some((field) => !Number.isFinite(comparison[field]))) {\n throw new Error(\n `compareAnalystRunners: ${comparison.metric} produced non-finite comparison output`,\n )\n }\n if (comparison.intervalLow > comparison.intervalHigh) {\n throw new Error(\n `compareAnalystRunners: ${comparison.metric} produced an invalid confidence interval`,\n )\n }\n}\n","import type { AnalystBenchmarkCase } from './benchmark'\nimport { type AnalystFinding, type EvidenceRef, makeFinding } from './types'\n\ntype ExternalId = string | number\n\nexport interface AgentRxFailure {\n failure_id: ExternalId\n step_number: number\n step_reason: string\n failure_category: string\n category_reason?: string\n failed_agent?: string\n}\n\nexport interface AgentRxRow {\n trajectory_id: ExternalId\n failures: readonly AgentRxFailure[]\n root_cause?: { failure_id: ExternalId; reason_for_root_cause?: string }\n root_cause_failure_id?: ExternalId\n root_cause_reason?: string\n failure_summary?: string\n num_failures?: number\n}\n\nexport interface AgentRxPrediction {\n task_id?: ExternalId\n failure_case: number | string\n step_number: number\n description?: string\n checklist_reasoning?: string | null\n}\n\nexport interface AgentRxPredictionReport {\n task_id?: ExternalId\n failures: readonly AgentRxPrediction[]\n num_judges?: number\n trajectory_length?: number\n most_common_failure?: number | string\n modes?: readonly (number | string)[]\n step_mean?: number\n}\n\nexport interface CodeTraceStageAnnotation {\n stage_id: number\n incorrect_step_ids?: readonly number[]\n unuseful_step_ids?: readonly number[]\n reasoning?: string\n}\n\nexport interface CodeTraceBenchRow {\n traj_id: string\n agent: string\n model: string\n task_name: string\n difficulty?: string\n category?: string\n tags?: string | readonly string[]\n solved?: boolean | null\n step_count: number\n incorrect_stages: string | readonly CodeTraceStageAnnotation[]\n}\n\nexport interface StepLabelAdapterOptions {\n evidenceKind?: EvidenceRef['kind']\n stepUri?: (trajectoryId: string, step: number) => string\n}\n\nexport type CodeTraceBenchLabelSet = 'incorrect-only' | 'incorrect-and-unuseful'\n\nexport interface CodeTraceBenchLabelOptions {\n /**\n * CodeTraceBench's published metric scores incorrect steps only.\n * Include unuseful steps only for an explicitly combined experiment.\n */\n labelSet?: CodeTraceBenchLabelSet\n}\n\nexport interface CodeTraceBenchCaseOptions\n extends StepLabelAdapterOptions,\n CodeTraceBenchLabelOptions {}\n\nexport interface AgentRxBenchmarkCaseOptions extends StepLabelAdapterOptions {\n stepCount?: number\n /** AgentRx's published task is root-cause localization. */\n target?: 'root-cause' | 'all-failures'\n}\n\nexport interface UpstreamPredictionAdapterOptions extends StepLabelAdapterOptions {\n analystId?: string\n producedAt?: string\n confidence?: number\n stepCount?: number\n}\n\nexport interface CodeTracerPredictionAdapterOptions\n extends UpstreamPredictionAdapterOptions,\n CodeTraceBenchLabelOptions {}\n\nexport function agentRxBenchmarkCase<TInput>(\n row: AgentRxRow,\n input: TInput,\n options: AgentRxBenchmarkCaseOptions = {},\n): AnalystBenchmarkCase<TInput> {\n const trajectoryId = externalId(row.trajectory_id, 'AgentRx trajectory_id')\n if (!Array.isArray(row.failures) || row.failures.length === 0) {\n throw new TypeError(`AgentRx trajectory '${trajectoryId}' must contain failures`)\n }\n if (row.num_failures !== undefined && row.num_failures !== row.failures.length) {\n throw new TypeError(\n `AgentRx trajectory '${trajectoryId}' declares ${row.num_failures} failures but contains ${row.failures.length}`,\n )\n }\n const rootCauseId = externalId(\n row.root_cause_failure_id ?? row.root_cause?.failure_id,\n `AgentRx trajectory '${trajectoryId}' root cause failure id`,\n )\n const failureIds = new Set<string>()\n const evidenceKind = options.evidenceKind ?? 'span'\n const uri = options.stepUri ?? defaultStepUri\n const allIssues = row.failures.map((failure) => {\n const failureId = externalId(\n failure.failure_id,\n `AgentRx trajectory '${trajectoryId}' failure id`,\n )\n if (failureIds.has(failureId)) {\n throw new TypeError(`AgentRx trajectory '${trajectoryId}' repeats failure id '${failureId}'`)\n }\n failureIds.add(failureId)\n const step = positiveStep(failure.step_number, `AgentRx trajectory '${trajectoryId}'`)\n const evidence = [{ kind: evidenceKind, uri: uri(trajectoryId, step) }]\n const category = normalizeAgentRxCategory(failure.failure_category)\n return {\n id: failureId,\n areas: [category],\n ...(failureId === rootCauseId && (options.target ?? 'root-cause') === 'root-cause'\n ? {}\n : { evidence }),\n criticalEvidence: failureId === rootCauseId ? evidence : undefined,\n }\n })\n if (!failureIds.has(rootCauseId)) {\n throw new TypeError(\n `AgentRx trajectory '${trajectoryId}' root cause '${rootCauseId}' is not in failures`,\n )\n }\n if (\n options.stepCount !== undefined &&\n row.failures.some((failure) => failure.step_number > options.stepCount!)\n ) {\n throw new RangeError(\n `AgentRx trajectory '${trajectoryId}' contains a failure beyond stepCount ${options.stepCount}`,\n )\n }\n const expectedIssues =\n (options.target ?? 'root-cause') === 'root-cause'\n ? allIssues.filter((issue) => issue.id === rootCauseId)\n : allIssues\n\n return {\n id: `agentrx:${trajectoryId}`,\n input,\n expectedIssues,\n labeledEvidence: expectedIssues.flatMap(\n (issue) => issue.evidence ?? issue.criticalEvidence ?? [],\n ),\n tags: ['agentrx'],\n metadata: {\n benchmark: 'AgentRx',\n trajectoryId,\n failureSummary: row.failure_summary,\n rootCauseReason: row.root_cause_reason ?? row.root_cause?.reason_for_root_cause,\n annotatedFailures: row.failures.length,\n target: options.target ?? 'root-cause',\n },\n }\n}\n\nexport function codeTraceBenchCase<TInput>(\n row: CodeTraceBenchRow,\n input: TInput,\n options: CodeTraceBenchCaseOptions = {},\n): AnalystBenchmarkCase<TInput> {\n const trajectoryId = nonEmpty(row.traj_id, 'CodeTraceBench traj_id')\n const stepCount = positiveStep(row.step_count, `CodeTraceBench '${trajectoryId}' step_count`)\n const stages = parseCodeTraceStages(row.incorrect_stages, trajectoryId)\n const evidenceKind = options.evidenceKind ?? 'span'\n const uri = options.stepUri ?? defaultStepUri\n const labelSet = codeTraceLabelSet(options.labelSet)\n const labels = new Set<string>()\n const expectedIssues = stages.flatMap((stage) => {\n const incorrect = stepIssues('incorrect', stage.incorrect_step_ids ?? [])\n const unuseful = stepIssues('unuseful', stage.unuseful_step_ids ?? [])\n return labelSet === 'incorrect-only' ? incorrect : [...incorrect, ...unuseful]\n })\n\n return {\n id: `codetrace:${trajectoryId}`,\n input,\n expectedIssues,\n labeledEvidence: expectedIssues.flatMap((issue) => issue.evidence ?? []),\n tags: [\n 'codetracebench',\n row.agent,\n row.model,\n ...(row.difficulty ? [row.difficulty] : []),\n ...(row.category ? [row.category] : []),\n ...parseTags(row.tags, trajectoryId),\n ],\n metadata: {\n benchmark: 'CodeTraceBench',\n trajectoryId,\n taskName: row.task_name,\n agent: row.agent,\n model: row.model,\n solved: row.solved,\n stepCount,\n labelSet,\n },\n }\n\n function stepIssues(label: 'incorrect' | 'unuseful', steps: readonly number[]) {\n return steps.map((rawStep) => {\n const step = positiveStep(rawStep, `CodeTraceBench '${trajectoryId}' ${label} step`)\n if (step > stepCount) {\n throw new RangeError(\n `CodeTraceBench '${trajectoryId}' ${label} step ${step} exceeds step_count ${stepCount}`,\n )\n }\n const id = `${label}:${step}`\n if (labels.has(id)) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' repeats label '${id}'`)\n }\n labels.add(id)\n return {\n id,\n areas: [label],\n evidence: [{ kind: evidenceKind, uri: uri(trajectoryId, step) }],\n }\n })\n }\n}\n\n/** Translate AgentRx `Report.to_dict()` output or its `failures` array into findings. */\nexport function agentRxPredictionsToFindings(\n trajectoryIdValue: ExternalId,\n output: unknown,\n options: UpstreamPredictionAdapterOptions = {},\n): AnalystFinding[] {\n const trajectoryId = externalId(trajectoryIdValue, 'AgentRx prediction trajectory id')\n const parsed = parseAgentRxPredictions(output, trajectoryId)\n for (const prediction of parsed.predictions) {\n assertStepWithinRange(\n prediction.step_number,\n parsed.report?.trajectory_length,\n `AgentRx prediction '${trajectoryId}' report`,\n )\n assertStepWithinRange(\n prediction.step_number,\n options.stepCount,\n `AgentRx prediction '${trajectoryId}'`,\n )\n }\n const consensus = agentRxConsensus(parsed, trajectoryId)\n if (consensus.failureCase === 0) return []\n const confidence = predictionConfidence(options.confidence)\n const uri = options.stepUri ?? defaultStepUri\n assertStepWithinRange(consensus.step, options.stepCount, `AgentRx prediction '${trajectoryId}'`)\n const area = AGENT_RX_TAXONOMY.get(consensus.failureCase)!\n return [\n makeFinding({\n analyst_id: options.analystId ?? 'agentrx',\n produced_at: options.producedAt,\n area,\n subject: 'root-cause',\n claim: `AgentRx classified step ${consensus.step} as ${area}.`,\n id_basis: `${area}:${consensus.step}`,\n rationale: consensus.representative.description,\n severity: 'high',\n confidence,\n evidence_refs: [\n {\n kind: options.evidenceKind ?? 'span',\n uri: uri(trajectoryId, consensus.step),\n },\n ],\n metadata: {\n upstream: 'AgentRx',\n failure_case: consensus.failureCase,\n step: consensus.step,\n step_mean: consensus.stepMean,\n judge_votes: parsed.predictions.length,\n consensus_votes: consensus.votes,\n category_agreement: consensus.votes / parsed.predictions.length,\n ...(consensus.representative.checklist_reasoning === undefined ||\n consensus.representative.checklist_reasoning === null\n ? {}\n : { checklist_reasoning: consensus.representative.checklist_reasoning }),\n },\n }),\n ]\n}\n\n/** Translate CodeTracer's `codetracer_labels.json` into shared findings. */\nexport function codeTracerPredictionsToFindings(\n trajectoryIdValue: string,\n predictions: string | readonly CodeTraceStageAnnotation[],\n options: CodeTracerPredictionAdapterOptions = {},\n): AnalystFinding[] {\n const trajectoryId = nonEmpty(trajectoryIdValue, 'CodeTracer prediction trajectory id')\n const stages = parseCodeTraceStages(predictions, trajectoryId)\n const confidence = predictionConfidence(options.confidence)\n const uri = options.stepUri ?? defaultStepUri\n const labelSet = codeTraceLabelSet(options.labelSet)\n const seen = new Set<string>()\n const findings: AnalystFinding[] = []\n for (const stage of stages) {\n for (const [area, steps] of [\n ['incorrect', stage.incorrect_step_ids ?? []],\n ['unuseful', stage.unuseful_step_ids ?? []],\n ] as const) {\n for (const rawStep of steps) {\n const step = positiveStep(rawStep, `CodeTracer prediction '${trajectoryId}' ${area} step`)\n assertStepWithinRange(step, options.stepCount, `CodeTracer prediction '${trajectoryId}'`)\n const key = `${area}:${step}`\n if (seen.has(key)) {\n throw new TypeError(`CodeTracer prediction '${trajectoryId}' repeats label '${key}'`)\n }\n seen.add(key)\n if (area === 'unuseful' && labelSet === 'incorrect-only') continue\n findings.push(\n makeFinding({\n analyst_id: options.analystId ?? 'codetracer',\n produced_at: options.producedAt,\n area,\n subject: `step-${step}`,\n claim: `CodeTracer labeled step ${step} as ${area}.`,\n id_basis: key,\n rationale: stage.reasoning,\n severity: 'medium',\n confidence,\n evidence_refs: [\n {\n kind: options.evidenceKind ?? 'span',\n uri: uri(trajectoryId, step),\n },\n ],\n metadata: {\n upstream: 'CodeTracer',\n stage_id: stage.stage_id,\n step,\n },\n }),\n )\n }\n }\n }\n return findings\n}\n\nexport function normalizeBenchmarkLabel(value: string): string {\n const normalized = nonEmpty(value, 'benchmark label')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n if (!normalized) throw new TypeError('benchmark label must contain letters or digits')\n return normalized\n}\n\nfunction parseCodeTraceStages(\n value: CodeTraceBenchRow['incorrect_stages'],\n trajectoryId: string,\n): readonly CodeTraceStageAnnotation[] {\n let parsed: unknown = value\n if (typeof value === 'string') {\n try {\n parsed = JSON.parse(value) as unknown\n } catch (error) {\n throw new TypeError(\n `CodeTraceBench '${trajectoryId}' incorrect_stages is invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n if (!Array.isArray(parsed)) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' incorrect_stages must be an array`)\n }\n for (const stage of parsed) {\n if (\n !stage ||\n typeof stage !== 'object' ||\n !Number.isSafeInteger((stage as CodeTraceStageAnnotation).stage_id) ||\n (stage as CodeTraceStageAnnotation).stage_id < 1 ||\n !optionalStepArray((stage as CodeTraceStageAnnotation).incorrect_step_ids) ||\n !optionalStepArray((stage as CodeTraceStageAnnotation).unuseful_step_ids) ||\n ((stage as CodeTraceStageAnnotation).reasoning !== undefined &&\n typeof (stage as CodeTraceStageAnnotation).reasoning !== 'string')\n ) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' contains an invalid stage annotation`)\n }\n }\n return parsed as unknown as readonly CodeTraceStageAnnotation[]\n}\n\nfunction parseTags(value: CodeTraceBenchRow['tags'], trajectoryId: string): string[] {\n if (value === undefined) return []\n let parsed: unknown = value\n if (typeof value === 'string') {\n try {\n parsed = JSON.parse(value) as unknown\n } catch (error) {\n throw new TypeError(\n `CodeTraceBench '${trajectoryId}' tags is invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n if (!Array.isArray(parsed) || !parsed.every((tag) => typeof tag === 'string')) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' tags must be strings`)\n }\n return [...parsed]\n}\n\nconst AGENT_RX_TAXONOMY = new Map<number, string>([\n [1, 'instruction-plan-adherence-failure'],\n [2, 'invention-of-new-information'],\n [3, 'invalid-invocation'],\n [4, 'misinterpretation-of-tool-output-handoff-failure'],\n [5, 'intent-plan-misalignment'],\n [6, 'underspecified-user-intent'],\n [7, 'intent-not-supported'],\n [8, 'guardrails-triggered'],\n [9, 'system-failure'],\n [10, 'inconclusive'],\n])\n\nconst AGENT_RX_CATEGORY_ALIASES = new Map<string, string>([\n ['instruction-adherence-failure', 'instruction-plan-adherence-failure'],\n ['misinterpretation-of-tool-output', 'misinterpretation-of-tool-output-handoff-failure'],\n])\n\nconst AGENT_RX_TAXONOMY_BY_LABEL = new Map(\n [...AGENT_RX_TAXONOMY].map(([failureCase, label]) => [label, failureCase]),\n)\n\nexport function normalizeAgentRxCategory(value: string): string {\n const normalized = normalizeBenchmarkLabel(value)\n return AGENT_RX_CATEGORY_ALIASES.get(normalized) ?? normalized\n}\n\nfunction parseAgentRxFailureCase(value: unknown, field: string): number {\n if (typeof value !== 'number' && typeof value !== 'string') {\n throw new TypeError(`${field} must be a taxonomy number or label`)\n }\n if (typeof value === 'string' && !/^\\d+$/.test(value.trim())) {\n const normalized = normalizeAgentRxCategory(value)\n const failureCase = AGENT_RX_TAXONOMY_BY_LABEL.get(normalized)\n if (failureCase === undefined) {\n throw new RangeError(`${field} '${value}' is not an AgentRx taxonomy label`)\n }\n return failureCase\n }\n const numeric = typeof value === 'number' ? value : Number(value)\n if (!Number.isSafeInteger(numeric)) {\n throw new TypeError(`${field} must be a taxonomy number or label`)\n }\n if (numeric < 0 || numeric > 10) {\n throw new RangeError(`${field} ${numeric} is outside 0-10`)\n }\n return numeric\n}\n\nfunction predictionConfidence(value: number | undefined): number {\n const confidence = value ?? 0.5\n if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) {\n throw new RangeError('upstream prediction confidence must be between 0 and 1')\n }\n return confidence\n}\n\nfunction codeTraceLabelSet(value: CodeTraceBenchLabelSet | undefined): CodeTraceBenchLabelSet {\n if (value === undefined || value === 'incorrect-only') return 'incorrect-only'\n if (value === 'incorrect-and-unuseful') return value\n throw new TypeError(\n \"CodeTraceBench labelSet must be 'incorrect-only' or 'incorrect-and-unuseful'\",\n )\n}\n\nfunction assertStepWithinRange(step: number, stepCount: number | undefined, field: string): void {\n if (stepCount === undefined) return\n const count = positiveStep(stepCount, `${field} stepCount`)\n if (step > count) throw new RangeError(`${field} step ${step} exceeds stepCount ${count}`)\n}\n\ninterface ParsedAgentRxPredictions {\n predictions: Array<\n Omit<AgentRxPrediction, 'failure_case'> & {\n failure_case: number\n }\n >\n report?: AgentRxPredictionReport\n}\n\nfunction parseAgentRxPredictions(output: unknown, trajectoryId: string): ParsedAgentRxPredictions {\n let failures: unknown\n let report: AgentRxPredictionReport | undefined\n if (Array.isArray(output)) {\n failures = output\n } else if (isRecord(output)) {\n assertMatchingAgentRxTaskId(output.task_id, trajectoryId, 'report.task_id')\n if (!Object.hasOwn(output, 'failures')) {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' report must contain failures`)\n }\n failures = output.failures\n if (output.num_judges !== undefined) {\n if (!Number.isSafeInteger(output.num_judges) || (output.num_judges as number) < 0) {\n throw new RangeError(\n `AgentRx prediction '${trajectoryId}' report.num_judges must be a non-negative safe integer`,\n )\n }\n }\n if (output.trajectory_length !== undefined) {\n positiveStep(\n output.trajectory_length as number,\n `AgentRx prediction '${trajectoryId}' report.trajectory_length`,\n )\n }\n if (output.step_mean !== undefined) {\n if (typeof output.step_mean !== 'number' || !Number.isFinite(output.step_mean)) {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' report.step_mean must be finite`)\n }\n }\n if (output.modes !== undefined && !Array.isArray(output.modes)) {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' report.modes must be an array`)\n }\n report = output as unknown as AgentRxPredictionReport\n } else {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' must be a report or failures array`)\n }\n if (!Array.isArray(failures)) {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' failures must be an array`)\n }\n if (failures.length === 0) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' failures must contain a judge prediction`,\n )\n }\n if (\n isRecord(output) &&\n output.num_judges !== undefined &&\n output.num_judges !== failures.length\n ) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' declares ${output.num_judges} judges but contains ${failures.length} failures`,\n )\n }\n const predictions = failures.map((value, index) => {\n const field = `AgentRx prediction '${trajectoryId}' failures[${index}]`\n if (!isRecord(value)) throw new TypeError(`${field} must be an object`)\n assertMatchingAgentRxTaskId(value.task_id, trajectoryId, `${field}.task_id`)\n const failureCase = parseAgentRxFailureCase(value.failure_case, `${field}.failure_case`)\n if (!Number.isSafeInteger(value.step_number)) {\n throw new TypeError(`${field}.step_number must be a safe integer`)\n }\n const stepNumber = value.step_number as number\n if (failureCase === 0 ? stepNumber !== 0 : stepNumber < 1) {\n throw new RangeError(\n failureCase === 0\n ? `${field}.step_number must be 0 when failure_case is 0`\n : `${field}.step_number must be positive when failure_case is 1-10`,\n )\n }\n if (value.description !== undefined && typeof value.description !== 'string') {\n throw new TypeError(`${field}.description must be a string`)\n }\n if (\n value.checklist_reasoning !== undefined &&\n value.checklist_reasoning !== null &&\n typeof value.checklist_reasoning !== 'string'\n ) {\n throw new TypeError(`${field}.checklist_reasoning must be a string or null`)\n }\n return {\n ...(value.task_id === undefined ? {} : { task_id: value.task_id as ExternalId }),\n failure_case: failureCase,\n step_number: stepNumber,\n ...(value.description === undefined ? {} : { description: value.description as string }),\n ...(value.checklist_reasoning === undefined\n ? {}\n : { checklist_reasoning: value.checklist_reasoning as string | null }),\n }\n })\n return { predictions, report }\n}\n\nfunction agentRxConsensus(\n parsed: ParsedAgentRxPredictions,\n trajectoryId: string,\n): {\n failureCase: number\n step: number\n stepMean: number\n votes: number\n representative: ParsedAgentRxPredictions['predictions'][number]\n} {\n const counts = new Map<number, number>()\n for (const prediction of parsed.predictions) {\n counts.set(prediction.failure_case, (counts.get(prediction.failure_case) ?? 0) + 1)\n }\n const maxVotes = Math.max(...counts.values())\n let failureCase = [...counts].find(([, count]) => count === maxVotes)![0]\n if (parsed.report?.most_common_failure !== undefined) {\n const declared = parseAgentRxFailureCase(\n parsed.report.most_common_failure,\n `AgentRx prediction '${trajectoryId}' report.most_common_failure`,\n )\n if ((counts.get(declared) ?? 0) !== maxVotes) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' report.most_common_failure disagrees with failures`,\n )\n }\n failureCase = declared\n }\n if (parsed.report?.modes !== undefined) {\n const declaredModes = parsed.report.modes.map((value, index) =>\n parseAgentRxFailureCase(value, `AgentRx prediction '${trajectoryId}' report.modes[${index}]`),\n )\n if (new Set(declaredModes).size !== declaredModes.length) {\n throw new TypeError(`AgentRx prediction '${trajectoryId}' report.modes contains duplicates`)\n }\n const expectedModes = [...counts]\n .filter(([, count]) => count === maxVotes)\n .map(([value]) => value)\n .sort((left, right) => left - right)\n if (\n [...new Set(declaredModes)].sort((left, right) => left - right).join(',') !==\n expectedModes.join(',')\n ) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' report.modes disagrees with failures`,\n )\n }\n }\n\n const computedStepMean =\n parsed.predictions.reduce((sum, prediction) => sum + prediction.step_number, 0) /\n parsed.predictions.length\n if (\n parsed.report?.step_mean !== undefined &&\n Math.abs(parsed.report.step_mean - computedStepMean) > 1e-12\n ) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' report.step_mean disagrees with failures`,\n )\n }\n const stepMean = parsed.report?.step_mean ?? computedStepMean\n const step =\n failureCase === 0\n ? 0\n : positiveStep(\n roundHalfToEven(stepMean),\n `AgentRx prediction '${trajectoryId}' consensus step`,\n )\n const representative =\n parsed.predictions\n .filter((prediction) => prediction.failure_case === failureCase)\n .sort(\n (left, right) => Math.abs(left.step_number - step) - Math.abs(right.step_number - step),\n )[0] ?? parsed.predictions[0]!\n return {\n failureCase,\n step,\n stepMean,\n votes: counts.get(failureCase)!,\n representative,\n }\n}\n\nfunction roundHalfToEven(value: number): number {\n const lower = Math.floor(value)\n const fraction = value - lower\n if (Math.abs(fraction - 0.5) <= Number.EPSILON * Math.max(1, Math.abs(value))) {\n return lower % 2 === 0 ? lower : lower + 1\n }\n return Math.round(value)\n}\n\nfunction assertMatchingAgentRxTaskId(value: unknown, trajectoryId: string, field: string): void {\n if (value === undefined) return\n const taskId = externalId(value as ExternalId, `AgentRx prediction '${trajectoryId}' ${field}`)\n if (taskId !== trajectoryId) {\n throw new TypeError(\n `AgentRx prediction '${trajectoryId}' ${field} '${taskId}' does not match trajectory id`,\n )\n }\n}\n\nfunction defaultStepUri(trajectoryId: string, step: number): string {\n return `trace://${encodeURIComponent(trajectoryId)}/span/step-${step}`\n}\n\nfunction optionalStepArray(value: readonly number[] | undefined): boolean {\n return value === undefined || (Array.isArray(value) && value.every(Number.isSafeInteger))\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction positiveStep(value: number, field: string): number {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${field} must be a positive safe integer`)\n }\n return value\n}\n\nfunction externalId(value: ExternalId | undefined, field: string): string {\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new TypeError(`${field} must be a string or number`)\n }\n if (typeof value === 'number' && !Number.isSafeInteger(value)) {\n throw new TypeError(`${field} must be a safe integer when numeric`)\n }\n return nonEmpty(String(value), field)\n}\n\nfunction nonEmpty(value: string, field: string): string {\n if (!value.trim()) throw new TypeError(`${field} must not be empty`)\n return value\n}\n","import type { AnalystBenchmarkResult } from './benchmark'\nimport type { AnalystRunnerComparison } from './benchmark-comparison'\n\nexport function renderAnalystBenchmarkMarkdown(\n result: AnalystBenchmarkResult,\n comparisons: readonly AnalystRunnerComparison[] = [],\n): string {\n const { provenance } = result\n const lines = [\n '# Trace analyst benchmark',\n '',\n '## Run',\n '',\n '| Field | Value |',\n '| --- | --- |',\n `| Benchmark | ${escapeCell(provenance.id ?? 'unspecified')} |`,\n `| Dataset | ${escapeCell(provenance.dataset?.id ?? 'unspecified')} |`,\n `| Dataset revision | ${escapeCell(provenance.dataset?.revision ?? 'unspecified')} |`,\n `| Dataset split | ${escapeCell(provenance.dataset?.split ?? 'unspecified')} |`,\n `| Started | ${escapeCell(provenance.startedAt)} |`,\n `| Ended | ${escapeCell(provenance.endedAt)} |`,\n `| Cases | ${provenance.caseCount} |`,\n `| Runners | ${escapeCell(provenance.runnerIds.join(', '))} |`,\n `| Repetitions | ${provenance.repetitions} |`,\n `| Maximum concurrency | ${provenance.maxConcurrency} |`,\n `| Runner-order seed | ${provenance.runnerOrderSeed} |`,\n `| Command | ${escapeCell(provenance.command ?? 'uncaptured')} |`,\n `| Environment | ${escapeCell(json(provenance.environment))} |`,\n `| Metadata | ${escapeCell(json(provenance.metadata))} |`,\n '',\n '## Summary',\n '',\n ]\n lines.push(\n '| Runner | Runs | Failed | Recall | Precision | F1 | Critical step | Citation coverage | Label-location agreement | Citation resolution | Resolution unknown runs | Unresolved citations | Resolution errors | Clean false positives | Clean failures | Repeat agreement | Latency min/mean/p50/p95/max ms | Calls | Input tokens | Output tokens | Reasoning tokens | Cached tokens | Cache-write tokens | Known cost USD | Unknown calls | Unknown input/output | Unknown reasoning | Unknown cached | Unknown cache-write | Unknown cost |',\n '| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |',\n )\n for (const summary of result.summaries) {\n lines.push(\n `| ${escapeCell(summary.runnerId)} | ${summary.completedRuns}/${summary.plannedRuns} | ${summary.failedRuns} | ${optionalRate(summary.issueRecall)} | ${optionalRate(summary.findingPrecision)} | ${optionalRate(summary.f1)} | ${optionalRate(summary.criticalStepAccuracy)} | ${optionalRate(summary.citationCoverage)} | ${optionalRate(summary.citationLabelAgreement)} | ${optionalRate(summary.citationResolution)} | ${summary.citationResolutionUnknownRuns} | ${summary.unresolvedCitations} | ${summary.citationResolutionErrors} | ${optionalRate(summary.cleanCaseFalsePositiveRate)} | ${optionalRate(summary.cleanCaseFailureRate)} | ${optionalRate(summary.runAgreement)} | ${latency(summary.latencyMs)} | ${summary.calls} | ${summary.inputTokens} | ${summary.outputTokens} | ${summary.reasoningTokens} | ${summary.cachedTokens} | ${summary.cacheWriteTokens} | ${summary.knownCostUsd.toFixed(6)} | ${summary.callsUnknownRuns} | ${summary.tokenUsageUnknownRuns} | ${summary.reasoningTokenUsageUnknownRuns} | ${summary.cachedTokenUsageUnknownRuns} | ${summary.cacheWriteTokenUsageUnknownRuns} | ${summary.costUnknownRuns} |`,\n )\n }\n\n for (const comparison of comparisons) {\n lines.push(\n '',\n `## ${escapeCell(comparison.candidateRunnerId)} compared with ${escapeCell(comparison.baselineRunnerId)}`,\n '',\n '| Metric | Better direction | Paired cases | Paired observations | Baseline mean | Candidate mean | Delta | Interval | At least 20 independent cases |',\n '| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |',\n )\n for (const metric of comparison.metrics) {\n lines.push(\n `| ${metric.metric} | ${metric.direction} | ${metric.pairedCases} | ${metric.pairedObservations} | ${number(metric.baselineMean)} | ${number(metric.candidateMean)} | ${signed(metric.meanDelta)} | [${number(metric.intervalLow)}, ${number(metric.intervalHigh)}] | ${metric.enoughCasesForInference ? 'yes' : 'no'} |`,\n )\n }\n }\n\n lines.push(\n '',\n '## Runs',\n '',\n '| Runner | Case | Tags | Case metadata | Runner metadata | Rep | Execution index | Completed | Recall | Precision | F1 | Critical step | Citation coverage | Label-location agreement | Citation resolution | Clean false positive | Findings | Unlabeled citations | Unresolved citations | Resolution errors | Latency ms | Calls | Input tokens | Output tokens | Reasoning tokens | Cached tokens | Cache-write tokens | Cost USD | Known cost USD | Cost source | Error class | Error |',\n '| --- | --- | --- | --- | --- | ---: | ---: | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- | --- |',\n )\n for (const observation of result.observations) {\n const usage = observation.usage\n const cost = usage?.cost.kind === 'uncaptured' ? null : usage?.cost.usd\n lines.push(\n `| ${escapeCell(observation.runnerId)} | ${escapeCell(observation.caseId)} | ${escapeCell(observation.caseTags.join(', '))} | ${escapeCell(json(observation.caseMetadata))} | ${escapeCell(json(observation.runnerMetadata))} | ${observation.repetition} | ${observation.executionIndex} | ${observation.error ? 'no' : 'yes'} | ${rate(observation.score.issueRecall)} | ${rate(observation.score.findingPrecision)} | ${rate(observation.score.f1)} | ${optionalRate(observation.score.criticalStepAccuracy)} | ${optionalRate(observation.score.citationCoverage)} | ${optionalRate(observation.score.citationLabelAgreement)} | ${optionalRate(observation.evidenceResolution?.validity ?? null)} | ${observation.score.expectedIssueCount === 0 ? (observation.score.cleanFalsePositive ? 'yes' : 'no') : 'n/a'} | ${observation.score.supportedFindingIndexes.length}/${observation.findings.length} | ${observation.score.unlabeledEvidence.length} | ${observation.evidenceResolution?.unresolvedEvidence.length ?? 'unknown'} | ${observation.evidenceResolution?.errors.length ?? 'unknown'} | ${number(observation.latencyMs)} | ${usage?.calls ?? 'unknown'} | ${usage?.tokens?.input ?? 'unknown'} | ${usage?.tokens?.output ?? 'unknown'} | ${usage?.tokens?.reasoning ?? 'unknown'} | ${usage?.tokens?.cached ?? 'unknown'} | ${usage?.tokens?.cacheWrite ?? 'unknown'} | ${cost === null || cost === undefined ? 'unknown' : cost.toFixed(6)} | ${usage?.knownCostUsd?.toFixed(6) ?? (cost === null || cost === undefined ? 'unknown' : cost.toFixed(6))} | ${usage?.cost.kind ?? 'unknown'} | ${escapeCell(observation.error?.class ?? '')} | ${escapeCell(observation.error?.message ?? '')} |`,\n )\n }\n return `${lines.join('\\n')}\\n`\n}\n\nfunction rate(value: number): string {\n return `${(value * 100).toFixed(1)}%`\n}\n\nfunction optionalRate(value: number | null): string {\n return value === null ? 'n/a' : rate(value)\n}\n\nfunction number(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(3)\n}\n\nfunction signed(value: number): string {\n return `${value >= 0 ? '+' : ''}${number(value)}`\n}\n\nfunction latency(value: AnalystBenchmarkResult['summaries'][number]['latencyMs']): string {\n return [value.min, value.mean, value.p50, value.p95, value.max].map(number).join('/')\n}\n\nfunction json(value: unknown): string {\n return value === undefined ? 'uncaptured' : JSON.stringify(value)\n}\n\nfunction escapeCell(value: string): string {\n return value.replaceAll('|', '\\\\|').replaceAll('\\n', ' ')\n}\n","import type { TraceAnalysisStore } from '../trace-analyst/store'\nimport type { Analyst, AnalystCost, AnalystFinding } from './types'\n\nexport interface DefineTraceAnalystOptions {\n id: string\n description: string\n version?: string\n cost: AnalystCost\n analyze: Analyst<TraceAnalysisStore>['analyze']\n}\n\n/** Define a custom trace analyst without repeating fixed registry fields. */\nexport function defineTraceAnalyst(\n options: DefineTraceAnalystOptions,\n): Analyst<TraceAnalysisStore> {\n if (!options.id.trim()) throw new TypeError('defineTraceAnalyst: id must not be empty')\n if (!options.description.trim()) {\n throw new TypeError('defineTraceAnalyst: description must not be empty')\n }\n if (options.cost === undefined) {\n throw new TypeError('defineTraceAnalyst: cost must be declared')\n }\n return {\n id: options.id,\n description: options.description,\n version: options.version ?? '1.0.0',\n inputKind: 'trace-store',\n cost: options.cost,\n analyze: options.analyze,\n }\n}\n\nexport type TraceAnalystAnalyze = (\n store: TraceAnalysisStore,\n context: Parameters<Analyst<TraceAnalysisStore>['analyze']>[1],\n) => Promise<AnalystFinding[]>\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/analyst/adapters.ts"],"sourcesContent":["/**\n * Adapter factories — lift each existing agent-eval primitive into the\n * Analyst contract without re-implementing it.\n *\n * Five primitives, five factories. Each one:\n * - Builds an Analyst with a stable id (caller chooses; defaults\n * given), a sensible default `inputKind`, a version derived from\n * the wrapped primitive's version + an adapter revision, and an\n * `analyze()` that calls the primitive and lifts its output to\n * AnalystFinding[] using `makeFinding()`.\n * - Maps severities: the existing `Severity` ('critical' | 'major' |\n * 'minor' | 'info') projects onto AnalystSeverity ('critical' |\n * 'high' | 'medium' | 'low' | 'info'); 'major' → 'high', 'minor' →\n * 'medium'. Domain analysts that want finer-grained mapping override.\n *\n * Adapters never own state. Calling the same factory twice with the\n * same primitive instance is safe.\n */\n\nimport { CostLedger } from '../cost-ledger'\nimport type {\n Finding as LayerFinding,\n Severity as LayerSeverity,\n MultiLayerVerifier,\n VerifyOptions,\n} from '../multi-layer-verifier'\nimport { RunCritic, type RunTrace } from '../run-critic'\nimport {\n runSemanticConceptJudge,\n SEMANTIC_CONCEPT_JUDGE_VERSION,\n type SemanticConceptJudgeInput,\n type SemanticConceptJudgeOptions,\n type SemanticConceptJudgeResult,\n} from '../semantic-concept-judge'\nimport type { JudgeFn, JudgeInput, JudgeScore } from '../types'\nimport type { ChatClient } from './chat-client'\nimport type { Analyst, AnalystFinding, AnalystSeverity } from './types'\nimport { makeFinding } from './types'\nimport { settleUsageReceiptFromCostLedger, validateUsageSettlementTimeout } from './usage-receipt'\n\nconst ADAPTER_REV = '1'\n\n// ── Severity bridges ───────────────────────────────────────────────\n\nexport function liftSeverity(s: LayerSeverity): AnalystSeverity {\n switch (s) {\n case 'critical':\n return 'critical'\n case 'major':\n return 'high'\n case 'minor':\n return 'medium'\n case 'info':\n return 'info'\n }\n}\n\n// ── 1. MultiLayerVerifier → Analyst ─────────────────────────────────\n\nexport interface VerifierAdapterOpts<Env> {\n id?: string\n area?: string\n verifier: MultiLayerVerifier<Env>\n /**\n * The verifier expects an `env` per run. Adapters take it from\n * `AnalystRunInputs.custom[<id>]` via the registry's 'custom' routing.\n */\n options?: Omit<VerifyOptions<Env>, 'env'>\n}\n\nexport function createVerifierAdapter<Env>(opts: VerifierAdapterOpts<Env>): Analyst<Env> {\n const id = opts.id ?? 'multi-layer-verifier'\n const area = opts.area ?? 'verification'\n return {\n id,\n description:\n \"Runs a MultiLayerVerifier and lifts each layer's findings into the analyst envelope.\",\n inputKind: 'custom',\n cost: { kind: 'deterministic' },\n version: `verifier-${ADAPTER_REV}`,\n async analyze(env, ctx) {\n const report = await opts.verifier.run({ env, ...opts.options })\n const out: AnalystFinding[] = []\n for (const layer of report.layers) {\n for (const finding of layer.findings) {\n out.push(liftLayerFinding(id, area, layer.layer, finding))\n }\n // Layer-level signal: a failed/error layer is itself a finding\n // even if it didn't emit per-finding rows.\n if (layer.status === 'fail' || layer.status === 'error' || layer.status === 'timeout') {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: layer.layer,\n claim: `layer \"${layer.layer}\" ${layer.status}: ${layer.reason ?? 'no reason given'}`,\n severity:\n layer.status === 'error' ? 'high' : layer.status === 'timeout' ? 'medium' : 'high',\n confidence: 1,\n evidence_refs: [],\n metadata: {\n layer_status: layer.status,\n duration_ms: layer.durationMs,\n score: layer.score,\n diagnostics: layer.diagnostics,\n },\n }),\n )\n }\n }\n ctx.log?.('verifier complete', {\n layers: report.layers.length,\n blended: report.blendedScore,\n all_pass: report.allPass,\n })\n return out\n },\n }\n}\n\nfunction liftLayerFinding(\n analyst_id: string,\n area: string,\n layer: string,\n f: LayerFinding,\n): AnalystFinding {\n return makeFinding({\n analyst_id,\n area,\n subject: f.layer ?? layer,\n claim: f.message,\n severity: liftSeverity(f.severity),\n confidence: 0.85,\n evidence_refs: f.evidence\n ? [{ kind: 'artifact', uri: 'inline:evidence', excerpt: f.evidence }]\n : [],\n metadata: f.detail,\n })\n}\n\n// ── 2. RunCritic → Analyst ──────────────────────────────────────────\n\nexport interface RunCriticAdapterOpts {\n id?: string\n area?: string\n critic?: RunCritic\n /** Optional threshold below which a dimension is reported as a finding. Default 0.5. */\n threshold?: number\n}\n\nexport function createRunCriticAdapter(opts: RunCriticAdapterOpts = {}): Analyst<RunTrace> {\n const id = opts.id ?? 'run-critic'\n const area = opts.area ?? 'run-quality'\n const critic = opts.critic ?? new RunCritic()\n const threshold = opts.threshold ?? 0.5\n return {\n id,\n description:\n 'Scores a single run across success / grounding / drift / tool-quality and surfaces below-threshold dimensions.',\n inputKind: 'custom',\n cost: { kind: 'deterministic' },\n version: `run-critic-${ADAPTER_REV}`,\n async analyze(trace) {\n const score = critic.scoreTrace(trace)\n const out: AnalystFinding[] = []\n const dims: Array<[keyof typeof score, AnalystSeverity, string]> = [\n ['success', 'critical', 'run did not complete successfully'],\n ['goalProgress', 'high', 'goal progress is low'],\n ['repoGroundedness', 'high', 'output is poorly grounded in the repository'],\n ['toolUseQuality', 'medium', 'tool use quality is low'],\n ['patchQuality', 'medium', 'no real patch/edit evidence'],\n ['testReality', 'high', 'no real test/build evidence'],\n ['finalGate', 'critical', 'final gate is blocking'],\n ]\n for (const [dim, sev, msg] of dims) {\n const value = score[dim] as number\n if (typeof value === 'number' && value < threshold) {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: dim,\n claim: msg,\n rationale: `${dim}=${value.toFixed(2)} below threshold ${threshold}`,\n severity: sev,\n confidence: 1,\n evidence_refs: [],\n metadata: { dimension: dim, value, threshold, run_id: trace.run.runId },\n }),\n )\n }\n }\n // Drift penalty is high → surface as a finding (inverse threshold).\n if (score.driftPenalty > 1 - threshold) {\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: 'drift',\n claim: 'agent output drifted from repository signal',\n rationale: `driftPenalty=${score.driftPenalty.toFixed(2)}`,\n severity: 'medium',\n confidence: 0.9,\n evidence_refs: [],\n metadata: { drift_penalty: score.driftPenalty, notes: score.notes },\n }),\n )\n }\n return out\n },\n }\n}\n\n// ── 3. JudgeFn → Analyst ────────────────────────────────────────────\n\nexport interface JudgeAdapterOpts {\n id?: string\n area?: string\n judge: JudgeFn\n /** Chat client passed to the JudgeFn. */\n chat: ChatClient\n /** Optional cost classification — most judges call an LLM. */\n cost?: Analyst['cost']\n /** Optional threshold below which a JudgeScore becomes a finding. Default 6 (on 0-10 scale). */\n threshold?: number\n}\n\nexport function createJudgeAdapter(opts: JudgeAdapterOpts): Analyst<JudgeInput> {\n const id = opts.id ?? 'judge'\n const area = opts.area ?? 'judge'\n const threshold = opts.threshold ?? 6\n return {\n id,\n description:\n 'Wraps an agent-eval JudgeFn into an analyst; below-threshold dimensions surface as findings.',\n inputKind: 'judge-input',\n cost: opts.cost ?? { kind: 'llm' },\n version: `judge-${ADAPTER_REV}`,\n async analyze(input) {\n const scores = await opts.judge(opts.chat, input)\n return scores\n .filter((s) => normalize10(s.score) < threshold)\n .map((s) => liftJudgeScore(id, area, s))\n },\n }\n}\n\nfunction normalize10(s: number): number {\n // JudgeScore convention is 0-10 but some judges emit 0-1. Coerce to 0-10.\n return s <= 1 ? s * 10 : s\n}\n\nfunction liftJudgeScore(analyst_id: string, area: string, s: JudgeScore): AnalystFinding {\n const score10 = normalize10(s.score)\n const severity: AnalystSeverity =\n score10 < 3 ? 'critical' : score10 < 5 ? 'high' : score10 < 7 ? 'medium' : 'low'\n return makeFinding({\n analyst_id,\n area,\n subject: s.dimension,\n claim: `${s.judgeName}/${s.dimension} scored ${score10.toFixed(1)}/10`,\n rationale: s.reasoning,\n severity,\n confidence: 0.8,\n evidence_refs: s.evidence\n ? [{ kind: 'artifact', uri: 'inline:evidence', excerpt: s.evidence }]\n : [],\n // Descriptive origin only. A caller may admit search feedback into candidate\n // generation, but final evaluation findings have no allowed proposal origin.\n derived_from_judge: true,\n metadata: { judge_name: s.judgeName, dimension: s.dimension, score_10: score10 },\n })\n}\n\n// ── 4. SemanticConceptJudge → Analyst ──────────────────────────────\n\nexport interface SemanticConceptJudgeAdapterOpts {\n id?: string\n area?: string\n /** Registry context owns cancellation and the per-analyst cost ledger. */\n options?: Omit<SemanticConceptJudgeOptions, 'costLedger' | 'signal'>\n /** Maximum post-cancellation wait for a provider receipt. Default 5 seconds. */\n settlementTimeoutMs?: number\n}\n\nexport function createSemanticConceptJudgeAdapter(\n opts: SemanticConceptJudgeAdapterOpts = {},\n): Analyst<SemanticConceptJudgeInput> {\n const id = opts.id ?? 'semantic-concept-judge'\n const area = opts.area ?? 'concept-coverage'\n const settlementTimeoutMs = validateUsageSettlementTimeout(opts.settlementTimeoutMs)\n return {\n id,\n description:\n 'Runs the semantic-concept judge and surfaces missing / weak concepts as findings.',\n inputKind: 'custom',\n cost: {\n kind: 'llm',\n models: opts.options?.model ? [opts.options.model] : undefined,\n settlement_timeout_ms: settlementTimeoutMs,\n },\n version: `${SEMANTIC_CONCEPT_JUDGE_VERSION}-adapter-${ADAPTER_REV}`,\n async analyze(input, ctx) {\n const costLedger = new CostLedger(ctx.budgetUsd)\n let result: SemanticConceptJudgeResult\n try {\n result = await runSemanticConceptJudge(input, {\n ...opts.options,\n costLedger,\n signal: ctx.signal,\n })\n } finally {\n const usage = await settleUsageReceiptFromCostLedger(costLedger, {\n channel: 'judge',\n timeoutMs: settlementTimeoutMs,\n })\n if (!usage.settled) {\n ctx.log?.('semantic-concept judge provider settlement timed out', {\n pending_calls: usage.pendingCalls,\n timeout_ms: settlementTimeoutMs,\n })\n }\n ctx.recordUsage?.(usage.receipt)\n }\n if (!result.available) {\n return [\n makeFinding({\n analyst_id: id,\n area,\n claim: 'semantic-concept judge unavailable',\n rationale: result.error,\n severity: 'info',\n confidence: 1,\n evidence_refs: [],\n metadata: { reason: result.error },\n }),\n ]\n }\n const out: AnalystFinding[] = []\n for (const f of result.findings) {\n // Only surface gaps: missing concepts or low scores. Concepts at\n // 7+/10 with present=true are not findings — they're successes.\n if (f.present && f.score >= 7) continue\n out.push(\n makeFinding({\n analyst_id: id,\n area,\n subject: f.concept,\n claim: f.present\n ? `concept \"${f.concept}\" is weak (${f.score}/10)`\n : `concept \"${f.concept}\" is missing`,\n rationale: f.evidence,\n severity: liftSeverity(f.severity),\n confidence: 0.85,\n evidence_refs: [{ kind: 'artifact', uri: 'inline:evidence', excerpt: f.evidence }],\n metadata: {\n concept: f.concept,\n present: f.present,\n score_10: f.score,\n },\n }),\n )\n }\n return out\n },\n }\n}\n"],"mappings":"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"}