@tangle-network/agent-eval 0.144.3 → 0.144.5

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 (82) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/analyst/index.d.ts +363 -16
  3. package/dist/analyst/index.d.ts.map +1 -1
  4. package/dist/analyst/index.js +8 -8
  5. package/dist/{benchmark-CYtcIF2V.js → benchmark-B181aMF9.js} +2 -2
  6. package/dist/{benchmark-CYtcIF2V.js.map → benchmark-B181aMF9.js.map} +1 -1
  7. package/dist/{benchmark-CP6kWfj8.d.ts → benchmark-Fmo42QVE.d.ts} +3 -3
  8. package/dist/{benchmark-CP6kWfj8.d.ts.map → benchmark-Fmo42QVE.d.ts.map} +1 -1
  9. package/dist/{benchmark-command-CQPKRUr-.js → benchmark-command-CA_NFOmy.js} +919 -35
  10. package/dist/benchmark-command-CA_NFOmy.js.map +1 -0
  11. package/dist/benchmarks/index.d.ts +1 -1
  12. package/dist/benchmarks/index.js +1 -1
  13. package/dist/{benchmarks-CkG1bWFa.js → benchmarks-CWbsj0t4.js} +2 -2
  14. package/dist/{benchmarks-CkG1bWFa.js.map → benchmarks-CWbsj0t4.js.map} +1 -1
  15. package/dist/campaign/index.d.ts +4 -4
  16. package/dist/campaign/index.js +2 -2
  17. package/dist/{campaign-DjGFyPxH.js → campaign-ClpnD7Ug.js} +2 -2
  18. package/dist/{campaign-DjGFyPxH.js.map → campaign-ClpnD7Ug.js.map} +1 -1
  19. package/dist/cli.js +1 -1
  20. package/dist/{client-Bbht4xxl.d.ts → client-DAb7MWtL.d.ts} +2 -2
  21. package/dist/{client-Bbht4xxl.d.ts.map → client-DAb7MWtL.d.ts.map} +1 -1
  22. package/dist/{completion-verifier-EJERfFwF.d.ts → completion-verifier-VvpHRu78.d.ts} +3 -3
  23. package/dist/{completion-verifier-EJERfFwF.d.ts.map → completion-verifier-VvpHRu78.d.ts.map} +1 -1
  24. package/dist/contract/index.d.ts +6 -6
  25. package/dist/contract/index.js +4 -4
  26. package/dist/control.d.ts +2 -2
  27. package/dist/{default-registry-iXfu2trt.d.ts → default-registry-BwbZ9N9v.d.ts} +5 -5
  28. package/dist/{default-registry-iXfu2trt.d.ts.map → default-registry-BwbZ9N9v.d.ts.map} +1 -1
  29. package/dist/{default-registry-SOyHB6qG.js → default-registry-RLNNoeEP.js} +3 -3
  30. package/dist/{default-registry-SOyHB6qG.js.map → default-registry-RLNNoeEP.js.map} +1 -1
  31. package/dist/{dspy-rlm-engine-IRCG8kdi.js → dspy-rlm-engine-19FQEMBK.js} +2 -2
  32. package/dist/{dspy-rlm-engine-IRCG8kdi.js.map → dspy-rlm-engine-19FQEMBK.js.map} +1 -1
  33. package/dist/{exact-types-BygCBR4L.d.ts → exact-types-BQ7W90C4.d.ts} +2 -2
  34. package/dist/{exact-types-BygCBR4L.d.ts.map → exact-types-BQ7W90C4.d.ts.map} +1 -1
  35. package/dist/{extract-usage-7l1Xq5ti.js → extract-usage-BW27f3XW.js} +2 -2
  36. package/dist/{extract-usage-7l1Xq5ti.js.map → extract-usage-BW27f3XW.js.map} +1 -1
  37. package/dist/{feedback-trajectory-CSIkRLQX.d.ts → feedback-trajectory-WK7x4mhy.d.ts} +3 -3
  38. package/dist/{feedback-trajectory-CSIkRLQX.d.ts.map → feedback-trajectory-WK7x4mhy.d.ts.map} +1 -1
  39. package/dist/hosted/index.d.ts +2 -2
  40. package/dist/{index-BuHs_OnD.d.ts → index-CpxZSlB7.d.ts} +6 -6
  41. package/dist/{index-BuHs_OnD.d.ts.map → index-CpxZSlB7.d.ts.map} +1 -1
  42. package/dist/{index-D_qTihaQ.d.ts → index-CsuAo2-J.d.ts} +4 -4
  43. package/dist/{index-D_qTihaQ.d.ts.map → index-CsuAo2-J.d.ts.map} +1 -1
  44. package/dist/index.d.ts +13 -13
  45. package/dist/index.js +10 -10
  46. package/dist/{kind-factory-Bvwe3pup.js → kind-factory-BHIgPmzS.js} +2 -2
  47. package/dist/{kind-factory-Bvwe3pup.js.map → kind-factory-BHIgPmzS.js.map} +1 -1
  48. package/dist/multishot/index.d.ts +1 -1
  49. package/dist/multishot/index.js +1 -1
  50. package/dist/multishot/index.js.map +1 -1
  51. package/dist/openapi.json +1 -1
  52. package/dist/{replay-DQ-55DC_.d.ts → replay-B7S7Pdbw.d.ts} +3 -3
  53. package/dist/{replay-DQ-55DC_.d.ts.map → replay-B7S7Pdbw.d.ts.map} +1 -1
  54. package/dist/{replay-CqOsGjzU.js → replay-GW61ezMW.js} +4 -4
  55. package/dist/{replay-CqOsGjzU.js.map → replay-GW61ezMW.js.map} +1 -1
  56. package/dist/rl.d.ts +1 -1
  57. package/dist/{run-evidence-H1vRpIdT.d.ts → run-evidence-j5Ynww6L.d.ts} +2 -2
  58. package/dist/{run-evidence-H1vRpIdT.d.ts.map → run-evidence-j5Ynww6L.d.ts.map} +1 -1
  59. package/dist/{semantic-concept-judge-Do5aM9wP.js → semantic-concept-judge-DKRtp2sY.js} +2 -2
  60. package/dist/{semantic-concept-judge-Do5aM9wP.js.map → semantic-concept-judge-DKRtp2sY.js.map} +1 -1
  61. package/dist/{skill-usage-DtpLou9L.d.ts → skill-usage-DUvvudWR.d.ts} +5 -5
  62. package/dist/{skill-usage-DtpLou9L.d.ts.map → skill-usage-DUvvudWR.d.ts.map} +1 -1
  63. package/dist/{skillopt-optimization-method-CvSJGdm3.d.ts → skillopt-optimization-method-CGz9ywhM.d.ts} +4 -4
  64. package/dist/{skillopt-optimization-method-CvSJGdm3.d.ts.map → skillopt-optimization-method-CGz9ywhM.d.ts.map} +1 -1
  65. package/dist/{store-otlp-D4I90_vR.js → store-otlp-CKtTpRhv.js} +2 -2
  66. package/dist/{store-otlp-D4I90_vR.js.map → store-otlp-CKtTpRhv.js.map} +1 -1
  67. package/dist/{tool-groups-CMmsgTzj.d.ts → tool-groups-ByZiqpVk.d.ts} +4 -4
  68. package/dist/{tool-groups-CMmsgTzj.d.ts.map → tool-groups-ByZiqpVk.d.ts.map} +1 -1
  69. package/dist/traces.d.ts +3 -3
  70. package/dist/traces.js +4 -4
  71. package/dist/{types-y8jrxXWd.d.ts → types-CZt1PBIk.d.ts} +19 -1
  72. package/dist/{types-y8jrxXWd.d.ts.map → types-CZt1PBIk.d.ts.map} +1 -1
  73. package/dist/{types-DcJxgsLy.d.ts → types-Dcoaqcsc.d.ts} +2 -2
  74. package/dist/{types-DcJxgsLy.d.ts.map → types-Dcoaqcsc.d.ts.map} +1 -1
  75. package/dist/{usage-receipt-CgxMEBZq.js → usage-receipt-EVI8B8Xu.js} +8 -1
  76. package/dist/usage-receipt-EVI8B8Xu.js.map +1 -0
  77. package/dist/wire/index.d.ts +1 -1
  78. package/docs/prime-analyst.md +120 -0
  79. package/docs/trace-analysis.md +1 -1
  80. package/package.json +3 -3
  81. package/dist/benchmark-command-CQPKRUr-.js.map +0 -1
  82. package/dist/usage-receipt-CgxMEBZq.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-command-CQPKRUr-.js","names":["nonEmpty","isRecord","isRecord","nonEmpty","isRecord","summarizeRunner","escapeCell","rate","number","mean","requiredString","safeInteger","positiveInteger","rate","isRecord","TextDecoder","isNodeError","slashRelative","isRecord","mean","escapeCell","rate","pricingForModel","trajectoryIdFromCaseId","isPaidCallControlError"],"sources":["../src/analyst/benchmark-dataset-utils.ts","../src/analyst/benchmark-dataset-agentrx.ts","../src/analyst/benchmark-dataset-codetrace.ts","../src/analyst/benchmark-agentrx-calibration.ts","../src/analyst/benchmark-command-validation.ts","../src/analyst/benchmark-command-artifact.ts","../src/analyst/benchmark-implementation.ts","../src/analyst/benchmark-evidence-validation.ts","../src/analyst/benchmark-verification-outcome.ts","../src/analyst/benchmark-verification-artifacts.ts","../src/analyst/benchmark-public-prompt.ts","../src/analyst/benchmark-instructions-override.ts","../src/analyst/benchmark-command-persistence.ts","../src/analyst/benchmark-comparison.ts","../src/analyst/benchmark-public-calibration.ts","../src/analyst/benchmark-command-result.ts","../src/analyst/benchmark-public-adapters.ts","../src/analyst/benchmark-public-errors.ts","../src/analyst/benchmark-public-types.ts","../src/analyst/benchmark-response-cache.ts","../src/analyst/benchmark-public-model.ts","../src/analyst/benchmark-public-consensus.ts","../src/analyst/benchmark-public-rlm.ts","../src/analyst/benchmark-public-data.ts","../src/analyst/benchmark-report.ts","../src/analyst/benchmark-command.ts"],"sourcesContent":["import type { ExternalId } from './benchmark-dataset-types'\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\nexport function 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\nexport function assertStepWithinRange(\n step: number,\n stepCount: number | undefined,\n field: string,\n): 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\nexport function defaultStepUri(trajectoryId: string, step: number): string {\n return `trace://${encodeURIComponent(trajectoryId)}/span/step-${step}`\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function 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\nexport function 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\nexport function 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 { AnalystBenchmarkCase } from './benchmark'\nimport type {\n AgentRxBenchmarkCaseOptions,\n AgentRxPrediction,\n AgentRxPredictionReport,\n AgentRxRow,\n ExternalId,\n UpstreamPredictionAdapterOptions,\n} from './benchmark-dataset-types'\nimport {\n assertStepWithinRange,\n defaultStepUri,\n externalId,\n isRecord,\n normalizeBenchmarkLabel,\n positiveStep,\n predictionConfidence,\n} from './benchmark-dataset-utils'\nimport { type AnalystFinding, makeFinding } from './types'\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 failureMetadata: Array<{ id: string; step: number; category: 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 if (typeof failure.failure_category !== 'string') {\n throw new TypeError(\n `AgentRx trajectory '${trajectoryId}' failure '${failureId}' category must be a string`,\n )\n }\n const category = normalizeAgentRxCategory(failure.failure_category)\n if (!AGENT_RX_TAXONOMY_BY_LABEL.has(category)) {\n throw new RangeError(\n `AgentRx trajectory '${trajectoryId}' failure '${failureId}' category '${failure.failure_category}' is outside the AgentRx taxonomy`,\n )\n }\n failureMetadata.push({ id: failureId, step, 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 const rootCause = failureMetadata.find((failure) => failure.id === rootCauseId)!\n const orderedFailures = [...failureMetadata].sort(\n (left, right) => left.step - right.step || left.id.localeCompare(right.id),\n )\n\n return {\n id: `agentrx:${trajectoryId}`,\n clusterId: `agentrx:${trajectoryId}`,\n labelState: 'positive',\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 rootCauseStep: rootCause.step,\n rootCauseCategory: rootCause.category,\n allFailureCategories: [...new Set(failureMetadata.map((failure) => failure.category))].sort(),\n earliestFailureCategory: orderedFailures[0]!.category,\n terminalFailureCategory: orderedFailures.at(-1)!.category,\n ...(options.stepCount === undefined ? {} : { trajectoryLength: options.stepCount }),\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\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\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 roundAgentRxStep(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\n/** Match Python's round() behavior used by AgentRx for consensus steps. */\nexport function roundAgentRxStep(value: number): number {\n if (!Number.isFinite(value)) {\n throw new TypeError('AgentRx step mean must be finite')\n }\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","import type { AnalystBenchmarkCase } from './benchmark'\nimport type {\n CodeTraceBenchCaseOptions,\n CodeTraceBenchLabelSet,\n CodeTraceBenchRow,\n CodeTracerPredictionAdapterOptions,\n CodeTracerPredictions,\n CodeTracerStepLabel,\n CodeTraceStageAnnotation,\n} from './benchmark-dataset-types'\nimport {\n assertStepWithinRange,\n defaultStepUri,\n isRecord,\n nonEmpty,\n positiveStep,\n predictionConfidence,\n} from './benchmark-dataset-utils'\nimport { type AnalystFinding, makeFinding } from './types'\n\nexport function codeTraceBenchCase<TInput>(\n row: CodeTraceBenchRow,\n input: TInput,\n options: CodeTraceBenchCaseOptions = {},\n): AnalystBenchmarkCase<TInput> {\n const trajectoryId = requiredCodeTraceString(row.traj_id, 'CodeTraceBench traj_id')\n const taskName = requiredCodeTraceString(\n row.task_name,\n `CodeTraceBench '${trajectoryId}' task_name`,\n )\n const agent = requiredCodeTraceString(row.agent, `CodeTraceBench '${trajectoryId}' agent`)\n const model = requiredCodeTraceString(row.model, `CodeTraceBench '${trajectoryId}' model`)\n const difficulty = optionalCodeTraceString(\n row.difficulty,\n `CodeTraceBench '${trajectoryId}' difficulty`,\n )\n const category = optionalCodeTraceString(\n row.category,\n `CodeTraceBench '${trajectoryId}' category`,\n )\n const sourceRelpath = optionalSourceRelativePath(row.source_relpath, trajectoryId)\n const solved = codeTraceSolved(row.solved, trajectoryId)\n const tags = parseTags(row.tags, trajectoryId)\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 const labelState =\n expectedIssues.length > 0 ? 'positive' : solved === true ? 'trusted-negative' : 'unlabeled'\n\n return {\n id: `codetrace:${trajectoryId}`,\n clusterId: `codetrace-task:${taskName}`,\n labelState,\n input,\n expectedIssues,\n ...(labelState === 'unlabeled'\n ? {}\n : { labeledEvidence: expectedIssues.flatMap((issue) => issue.evidence ?? []) }),\n tags: [\n 'codetracebench',\n agent,\n model,\n ...(difficulty === undefined ? [] : [difficulty]),\n ...(category === undefined ? [] : [category]),\n ...tags,\n ],\n metadata: {\n benchmark: 'CodeTraceBench',\n trajectoryId,\n taskName,\n agent,\n model,\n solved,\n stepCount,\n labelSet,\n ...(sourceRelpath === undefined ? {} : { sourceRelpath }),\n ...(difficulty === undefined ? {} : { difficulty }),\n ...(category === undefined ? {} : { category }),\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 CodeTracer's `codetracer_labels.json` into shared findings. */\nexport function codeTracerPredictionsToFindings(\n trajectoryIdValue: string,\n predictions: CodeTracerPredictions,\n options: CodeTracerPredictionAdapterOptions = {},\n): AnalystFinding[] {\n const trajectoryId = nonEmpty(trajectoryIdValue, 'CodeTracer prediction trajectory id')\n const labels = parseCodeTracerPredictionLabels(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 label of labels) {\n const step = positiveStep(\n label.step,\n `CodeTracer prediction '${trajectoryId}' ${label.area} step`,\n )\n assertStepWithinRange(step, options.stepCount, `CodeTracer prediction '${trajectoryId}'`)\n const key = `${label.area}:${step}`\n if (seen.has(key)) {\n throw new TypeError(`CodeTracer prediction '${trajectoryId}' repeats label '${key}'`)\n }\n seen.add(key)\n if (label.area === 'unuseful' && labelSet === 'incorrect-only') continue\n findings.push(\n makeFinding({\n analyst_id: options.analystId ?? 'codetracer',\n produced_at: options.producedAt,\n area: label.area,\n subject: `step-${step}`,\n claim: `CodeTracer labeled step ${step} as ${label.area}.`,\n id_basis: key,\n rationale: label.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: label.stageId,\n step,\n },\n }),\n )\n }\n return findings\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 const stageIds = new Set<number>()\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 const stageId = (stage as CodeTraceStageAnnotation).stage_id\n if (stageIds.has(stageId)) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' repeats stage_id ${stageId}`)\n }\n stageIds.add(stageId)\n }\n return parsed as unknown as readonly CodeTraceStageAnnotation[]\n}\n\nfunction parseCodeTracerPredictionLabels(\n value: CodeTracerPredictions,\n trajectoryId: string,\n): Array<{\n stageId: string | number\n area: CodeTracerStepLabel['label']\n step: number\n reasoning?: string\n}> {\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 `CodeTracer prediction '${trajectoryId}' is invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n if (!Array.isArray(parsed)) {\n throw new TypeError(`CodeTracer prediction '${trajectoryId}' must be an array`)\n }\n if (parsed.length === 0) return []\n\n if (parsed.every(isCodeTraceStageAnnotation)) {\n return (parsed as readonly CodeTraceStageAnnotation[]).flatMap((stage) => [\n ...(stage.incorrect_step_ids ?? []).map((step) => ({\n stageId: stage.stage_id,\n area: 'incorrect' as const,\n step,\n ...(stage.reasoning === undefined ? {} : { reasoning: stage.reasoning }),\n })),\n ...(stage.unuseful_step_ids ?? []).map((step) => ({\n stageId: stage.stage_id,\n area: 'unuseful' as const,\n step,\n ...(stage.reasoning === undefined ? {} : { reasoning: stage.reasoning }),\n })),\n ])\n }\n\n const flat: Array<{\n stageId: string | number\n area: CodeTracerStepLabel['label']\n step: number\n reasoning?: string\n }> = []\n for (const [index, item] of parsed.entries()) {\n if (isCodeTracerStepLabel(item)) {\n flat.push(\n toCodeTracerPredictionLabel(\n item,\n codeTracerStageId(item, index + 1, trajectoryId),\n trajectoryId,\n ),\n )\n continue\n }\n if (!isRecord(item) || !Array.isArray(item.labels)) {\n throw new TypeError(\n `CodeTracer prediction '${trajectoryId}' contains an unsupported label row`,\n )\n }\n const stageId = codeTracerStageId(item, index + 1, trajectoryId)\n for (const label of item.labels) {\n if (!isCodeTracerStepLabel(label)) {\n throw new TypeError(\n `CodeTracer prediction '${trajectoryId}' contains an invalid step label`,\n )\n }\n flat.push(toCodeTracerPredictionLabel(label, stageId, trajectoryId))\n }\n }\n return flat\n}\n\nfunction isCodeTraceStageAnnotation(value: unknown): value is CodeTraceStageAnnotation {\n return (\n isRecord(value) &&\n Number.isSafeInteger(value.stage_id) &&\n (value.stage_id as number) > 0 &&\n optionalStepArray(value.incorrect_step_ids as readonly number[] | undefined) &&\n optionalStepArray(value.unuseful_step_ids as readonly number[] | undefined) &&\n (value.reasoning === undefined || typeof value.reasoning === 'string')\n )\n}\n\nfunction isCodeTracerStepLabel(value: unknown): value is CodeTracerStepLabel {\n return (\n isRecord(value) &&\n Number.isSafeInteger(value.step_id) &&\n (value.step_id as number) > 0 &&\n (value.stage === undefined ||\n typeof value.stage === 'string' ||\n typeof value.stage === 'number') &&\n (value.stage_name === undefined ||\n typeof value.stage_name === 'string' ||\n typeof value.stage_name === 'number') &&\n (value.stage_id === undefined ||\n typeof value.stage_id === 'string' ||\n typeof value.stage_id === 'number') &&\n (value.label === 'incorrect' || value.label === 'unuseful') &&\n (value.rationale === undefined || typeof value.rationale === 'string') &&\n (value.reason === undefined || typeof value.reason === 'string') &&\n (value.note === undefined || typeof value.note === 'string') &&\n (value.comment === undefined || typeof value.comment === 'string')\n )\n}\n\nfunction toCodeTracerPredictionLabel(\n label: CodeTracerStepLabel,\n stageId: string | number,\n trajectoryId: string,\n): {\n stageId: string | number\n area: CodeTracerStepLabel['label']\n step: number\n reasoning?: string\n} {\n if (!isCodeTracerStepLabel(label)) {\n throw new TypeError(`CodeTracer prediction '${trajectoryId}' contains an invalid step label`)\n }\n return {\n stageId,\n area: label.label,\n step: label.step_id,\n ...codeTracerReason(label, trajectoryId),\n }\n}\n\nfunction codeTracerStageId(\n value: { stage?: unknown; stage_name?: unknown; stage_id?: unknown },\n fallback: number,\n trajectoryId: string,\n): string | number {\n const candidates = [value.stage, value.stage_name, value.stage_id].filter(\n (candidate): candidate is string | number =>\n typeof candidate === 'string' || typeof candidate === 'number',\n )\n if (new Set(candidates).size > 1) {\n throw new TypeError(`CodeTracer prediction '${trajectoryId}' has conflicting stage fields`)\n }\n return candidates[0] ?? fallback\n}\n\nfunction codeTracerReason(\n label: CodeTracerStepLabel,\n trajectoryId: string,\n): { reasoning?: string } {\n const candidates = [label.rationale, label.reason, label.note, label.comment].filter(\n (candidate): candidate is string => candidate !== undefined,\n )\n if (new Set(candidates).size > 1) {\n throw new TypeError(\n `CodeTracer prediction '${trajectoryId}' step ${label.step_id} has conflicting reason fields`,\n )\n }\n return candidates[0] === undefined ? {} : { reasoning: candidates[0] }\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)) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' tags must be an array of strings`)\n }\n const tags = parsed.map((tag, index) =>\n requiredCodeTraceString(tag, `CodeTraceBench '${trajectoryId}' tags[${index}]`),\n )\n if (new Set(tags).size !== tags.length) {\n throw new TypeError(`CodeTraceBench '${trajectoryId}' tags must not repeat values`)\n }\n return tags\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 optionalStepArray(value: readonly number[] | undefined): boolean {\n return value === undefined || (Array.isArray(value) && value.every(Number.isSafeInteger))\n}\n\nfunction requiredCodeTraceString(value: unknown, field: string): string {\n if (typeof value !== 'string') throw new TypeError(`${field} must be a string`)\n return nonEmpty(value, field)\n}\n\nfunction optionalCodeTraceString(value: unknown, field: string): string | undefined {\n if (value === undefined) return undefined\n return requiredCodeTraceString(value, field)\n}\n\nfunction optionalSourceRelativePath(value: unknown, trajectoryId: string): string | undefined {\n const path = optionalCodeTraceString(value, `CodeTraceBench '${trajectoryId}' source_relpath`)\n if (path === undefined) return undefined\n const segments = path.replaceAll('\\\\', '/').split('/')\n if (\n path.startsWith('/') ||\n /^[a-zA-Z]:[\\\\/]/.test(path) ||\n segments.some((segment) => segment === '..')\n ) {\n throw new TypeError(\n `CodeTraceBench '${trajectoryId}' source_relpath must stay within the artifact root`,\n )\n }\n return path\n}\n\nfunction codeTraceSolved(value: unknown, trajectoryId: string): boolean | null | undefined {\n if (value === undefined || value === null || typeof value === 'boolean') return value\n throw new TypeError(`CodeTraceBench '${trajectoryId}' solved must be a boolean or null`)\n}\n","import type { AnalystBenchmarkObservation, AnalystBenchmarkResult } from './benchmark'\nimport { roundAgentRxStep } from './benchmark-datasets'\n\nexport const AGENT_RX_UPSTREAM_REVISION = 'f228165bfec60a801fd5fedd9d8ffe0f9de0c69d'\n\nexport interface AgentRxCalibrationRunnerSummary {\n runnerId: string\n selectedRuns: number\n completedRuns: number\n failedRuns: number\n predictedRuns: number\n missingPredictionRuns: number\n exactStepAccuracy: number | null\n stepAccuracyWithin1: number | null\n stepAccuracyWithin2: number | null\n stepAccuracyWithin3: number | null\n stepAccuracyWithin4: number | null\n stepAccuracyWithin5: number | null\n meanStepDistance: number | null\n normalizedMeanStepDistance: number | null\n normalizedDistanceRuns: number\n normalizedDistanceUnknownRuns: number\n rootCauseCategoryAccuracy: number | null\n anyFailureCategoryAccuracy: number | null\n earliestFailureCategoryAccuracy: number | null\n terminalFailureCategoryAccuracy: number | null\n}\n\nexport interface AgentRxCalibrationSummary {\n protocol: 'official-agentrx-root-cause'\n upstreamRevision: string\n rationale: string\n runners: AgentRxCalibrationRunnerSummary[]\n}\n\nexport function summarizeAgentRxCalibration(\n result: AnalystBenchmarkResult,\n upstreamRevision: string,\n): AgentRxCalibrationSummary {\n if (!upstreamRevision.trim()) {\n throw new TypeError('AgentRx calibration requires an upstream revision')\n }\n return {\n protocol: 'official-agentrx-root-cause',\n upstreamRevision,\n rationale:\n 'Matches AgentRx root-category accuracy, Python-rounded exact and tolerance step accuracy, unrounded mean step distance, normalized distance, and any, earliest, and terminal category accuracy. Failed runs and empty predictions score as no prediction.',\n runners: result.provenance.runnerIds.map((runnerId) =>\n summarizeRunner(\n runnerId,\n result.observations.filter((observation) => observation.runnerId === runnerId),\n ),\n ),\n }\n}\n\nexport function renderAgentRxCalibrationMarkdown(summary: AgentRxCalibrationSummary): string {\n return [\n '## AgentRx Published Metrics',\n '',\n summary.rationale,\n '',\n `Upstream revision: \\`${summary.upstreamRevision}\\`.`,\n '',\n '| Runner | Completed/selected | Failed | Predictions | Missing predictions | Exact step | Within 1 | Within 2 | Within 3 | Within 4 | Within 5 | Mean step distance | Normalized distance | Normalized known/unknown | Root category | Any category | Earliest category | Terminal category |',\n '| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |',\n ...summary.runners.map(\n (runner) =>\n `| ${escapeCell(runner.runnerId)} | ${runner.completedRuns}/${runner.selectedRuns} | ${runner.failedRuns} | ${runner.predictedRuns} | ${runner.missingPredictionRuns} | ${rate(runner.exactStepAccuracy)} | ${rate(runner.stepAccuracyWithin1)} | ${rate(runner.stepAccuracyWithin2)} | ${rate(runner.stepAccuracyWithin3)} | ${rate(runner.stepAccuracyWithin4)} | ${rate(runner.stepAccuracyWithin5)} | ${number(runner.meanStepDistance)} | ${number(runner.normalizedMeanStepDistance)} | ${runner.normalizedDistanceRuns}/${runner.normalizedDistanceUnknownRuns} | ${rate(runner.rootCauseCategoryAccuracy)} | ${rate(runner.anyFailureCategoryAccuracy)} | ${rate(runner.earliestFailureCategoryAccuracy)} | ${rate(runner.terminalFailureCategoryAccuracy)} |`,\n ),\n ].join('\\n')\n}\n\nfunction summarizeRunner(\n runnerId: string,\n observations: readonly AnalystBenchmarkObservation[],\n): AgentRxCalibrationRunnerSummary {\n const scored = observations.map(scoredObservation)\n const normalized = scored.filter(\n (row): row is ReturnType<typeof scoredObservation> & { normalizedDistance: number } =>\n row.normalizedDistance !== null,\n )\n const predicted = scored.filter(\n (row): row is ReturnType<typeof scoredObservation> & { distance: number } =>\n row.distance !== null,\n )\n return {\n runnerId,\n selectedRuns: observations.length,\n completedRuns: observations.filter((observation) => !observation.error).length,\n failedRuns: observations.filter((observation) => Boolean(observation.error)).length,\n predictedRuns: predicted.length,\n missingPredictionRuns: scored.length - predicted.length,\n exactStepAccuracy: mean(scored.map((row) => Number(row.roundedDistance === 0))),\n stepAccuracyWithin1: mean(\n scored.map((row) => Number(row.roundedDistance !== null && row.roundedDistance <= 1)),\n ),\n stepAccuracyWithin2: mean(\n scored.map((row) => Number(row.roundedDistance !== null && row.roundedDistance <= 2)),\n ),\n stepAccuracyWithin3: mean(\n scored.map((row) => Number(row.roundedDistance !== null && row.roundedDistance <= 3)),\n ),\n stepAccuracyWithin4: mean(\n scored.map((row) => Number(row.roundedDistance !== null && row.roundedDistance <= 4)),\n ),\n stepAccuracyWithin5: mean(\n scored.map((row) => Number(row.roundedDistance !== null && row.roundedDistance <= 5)),\n ),\n meanStepDistance: mean(predicted.map((row) => row.distance)),\n normalizedMeanStepDistance: mean(normalized.map((row) => row.normalizedDistance)),\n normalizedDistanceRuns: normalized.length,\n normalizedDistanceUnknownRuns: scored.length - normalized.length,\n rootCauseCategoryAccuracy: mean(scored.map((row) => Number(row.rootCategoryMatch))),\n anyFailureCategoryAccuracy: mean(scored.map((row) => Number(row.anyCategoryMatch))),\n earliestFailureCategoryAccuracy: mean(scored.map((row) => Number(row.earliestCategoryMatch))),\n terminalFailureCategoryAccuracy: mean(scored.map((row) => Number(row.terminalCategoryMatch))),\n }\n}\n\nfunction scoredObservation(observation: AnalystBenchmarkObservation) {\n const metadata = record(observation.caseMetadata)\n const rootStep = requiredPositiveNumber(\n metadata.rootCauseStep,\n observation.caseId,\n 'rootCauseStep',\n )\n const rootCategory = requiredString(\n metadata.rootCauseCategory,\n observation.caseId,\n 'rootCauseCategory',\n )\n const allCategories = requiredStringArray(\n metadata.allFailureCategories,\n observation.caseId,\n 'allFailureCategories',\n )\n const earliestCategory = requiredString(\n metadata.earliestFailureCategory,\n observation.caseId,\n 'earliestFailureCategory',\n )\n const terminalCategory = requiredString(\n metadata.terminalFailureCategory,\n observation.caseId,\n 'terminalFailureCategory',\n )\n const finding = observation.error ? undefined : observation.findings[0]\n const findingMetadata = record(finding?.metadata)\n const stepMean = finding\n ? finiteNonNegative(\n findingMetadata.step_mean ?? findingMetadata.step,\n observation.caseId,\n 'predicted step',\n )\n : null\n const roundedDistance = stepMean === null ? null : Math.abs(roundAgentRxStep(stepMean) - rootStep)\n const distance = stepMean === null ? null : Math.abs(stepMean - rootStep)\n const trajectoryLength =\n metadata.trajectoryLength === undefined\n ? null\n : requiredPositiveNumber(metadata.trajectoryLength, observation.caseId, 'trajectoryLength')\n const predictedCategory = finding?.area\n return {\n roundedDistance,\n distance,\n normalizedDistance:\n trajectoryLength === null || distance === null ? null : distance / trajectoryLength,\n rootCategoryMatch: predictedCategory === rootCategory,\n anyCategoryMatch: predictedCategory !== undefined && allCategories.includes(predictedCategory),\n earliestCategoryMatch: predictedCategory === earliestCategory,\n terminalCategoryMatch: predictedCategory === terminalCategory,\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction requiredPositiveNumber(value: unknown, caseId: string, field: string): number {\n const numberValue = finiteNonNegative(value, caseId, field)\n if (numberValue <= 0) throw new TypeError(`${caseId}: ${field} must be positive`)\n return numberValue\n}\n\nfunction finiteNonNegative(value: unknown, caseId: string, field: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new TypeError(`${caseId}: ${field} must be a finite non-negative number`)\n }\n return value\n}\n\nfunction requiredString(value: unknown, caseId: string, field: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new TypeError(`${caseId}: ${field} must be a non-empty string`)\n }\n return value\n}\n\nfunction requiredStringArray(value: unknown, caseId: string, field: string): string[] {\n if (\n !Array.isArray(value) ||\n value.length === 0 ||\n value.some((entry) => typeof entry !== 'string' || !entry.trim())\n ) {\n throw new TypeError(`${caseId}: ${field} must be a non-empty string array`)\n }\n return value as string[]\n}\n\nfunction mean(values: readonly number[]): number | null {\n return values.length === 0\n ? null\n : values.reduce((total, value) => total + value, 0) / values.length\n}\n\nfunction rate(value: number | null): string {\n return value === null ? 'n/a' : value.toFixed(3)\n}\n\nfunction number(value: number | null): string {\n return value === null ? 'n/a' : value.toFixed(3)\n}\n\nfunction escapeCell(value: string): string {\n return value.replaceAll('|', '\\\\|').replaceAll('\\n', ' ')\n}\n","import { z } from 'zod'\nimport type { AnalystBenchmarkObservation } from './benchmark'\nimport type { AnalystBenchmarkArtifact } from './benchmark-command-artifact'\n\nconst nonEmptyString = z.string().refine((value) => value.trim().length > 0, {\n message: 'must be a non-empty string',\n})\nconst safeInteger = z.number().refine(Number.isSafeInteger, {\n message: 'must be a safe integer',\n})\nconst nonNegativeInteger = safeInteger.refine((value) => value >= 0, {\n message: 'must be a non-negative safe integer',\n})\nconst positiveInteger = safeInteger.refine((value) => value > 0, {\n message: 'must be a positive safe integer',\n})\nconst nonNegativeNumber = z.number().nonnegative()\nconst rate = z.number().min(0).max(1)\nconst nullableRate = rate.nullable()\nconst finiteNumber = z.number()\nconst nullableFiniteNumber = finiteNumber.nullable()\nconst sha256 = z.string().regex(/^[a-f0-9]{64}$/, 'must be a lowercase SHA-256 digest')\nconst revision = z\n .string()\n .regex(/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/, 'must be a lowercase 40 or 64 character revision')\nconst timestamp = z.string().refine((value) => Number.isFinite(Date.parse(value)), {\n message: 'must be a valid timestamp',\n})\nconst stringArray = z.array(z.string())\nconst nonEmptyStringArray = z.array(nonEmptyString)\nconst metadata = z.record(z.string(), z.unknown())\n\nconst errorSchema = z.strictObject({\n class: nonEmptyString,\n message: nonEmptyString,\n code: nonEmptyString.optional(),\n status: z.number().int().min(100).max(599).optional(),\n})\n\nconst evidenceSchema = z.strictObject({\n kind: z.enum(['span', 'event', 'artifact', 'finding', 'metric']),\n uri: nonEmptyString,\n excerpt: z.string().optional(),\n})\n\nconst findingSchema = z.strictObject({\n schema_version: z.literal('1.0.0'),\n finding_id: nonEmptyString,\n analyst_id: nonEmptyString,\n produced_at: timestamp,\n severity: z.enum(['critical', 'high', 'medium', 'low', 'info']),\n area: nonEmptyString,\n claim: nonEmptyString,\n rationale: z.string().optional(),\n evidence_refs: z.array(evidenceSchema),\n recommended_action: z.string().optional(),\n validation_plan: z.string().optional(),\n confidence: rate,\n subject: z.string().optional(),\n derived_from_judge: z.boolean().optional(),\n metadata: metadata.optional(),\n})\n\nconst tokenUsageSchema = z\n .strictObject({\n input: nonNegativeInteger,\n output: nonNegativeInteger,\n reasoning: nonNegativeInteger.optional(),\n cached: nonNegativeInteger.optional(),\n cacheWrite: nonNegativeInteger.optional(),\n })\n .superRefine((usage, context) => {\n if (usage.reasoning !== undefined && usage.reasoning > usage.output) {\n context.addIssue({\n code: 'custom',\n path: ['reasoning'],\n message: 'must not exceed output tokens',\n })\n }\n })\n\nconst costSchema = z.discriminatedUnion('kind', [\n z.strictObject({\n kind: z.literal('observed'),\n usd: nonNegativeNumber,\n }),\n z.strictObject({\n kind: z.literal('estimated'),\n usd: nonNegativeNumber,\n }),\n z.strictObject({\n kind: z.literal('uncaptured'),\n usd: z.null(),\n }),\n])\n\nconst usageSchema = z.strictObject({\n calls: nonNegativeInteger.nullable(),\n tokens: tokenUsageSchema.nullable(),\n cost: costSchema,\n knownCostUsd: nonNegativeNumber.optional(),\n})\n\nconst findingScoreSchema = z.strictObject({\n expectedIssueCount: nonNegativeInteger,\n matchedIssueIds: nonEmptyStringArray,\n missedIssueIds: nonEmptyStringArray,\n supportedFindingIndexes: z.array(nonNegativeInteger),\n unsupportedFindingIndexes: z.array(nonNegativeInteger),\n unlabeledEvidence: z.array(evidenceSchema),\n issueRecall: rate,\n findingPrecision: rate,\n f1: rate,\n criticalStepAccuracy: nullableRate,\n citationCoverage: nullableRate,\n citationExcerptCoverage: nullableRate,\n citationLabelAgreement: nullableRate,\n predictionOnLabelEmptyCase: z.boolean(),\n})\n\nconst evidenceResolutionSchema = z.strictObject({\n checked: nonNegativeInteger,\n resolved: nonNegativeInteger,\n unresolvedEvidence: z.array(evidenceSchema),\n errors: z.array(\n z.strictObject({\n evidence: evidenceSchema,\n class: nonEmptyString,\n message: nonEmptyString,\n }),\n ),\n validity: nullableRate,\n})\n\nconst observationSchema: z.ZodType<AnalystBenchmarkObservation> = z\n .strictObject({\n runnerId: nonEmptyString,\n caseId: nonEmptyString,\n clusterId: nonEmptyString,\n labelState: z.enum(['positive', 'trusted-negative', 'unlabeled']),\n repetition: nonNegativeInteger,\n executionIndex: nonNegativeInteger,\n latencyMs: nonNegativeNumber.nullable(),\n latencySource: z.enum(['benchmark-clock', 'runner-reported', 'uncaptured']),\n findings: z.array(findingSchema),\n score: findingScoreSchema,\n evidenceResolution: evidenceResolutionSchema.optional(),\n caseTags: stringArray,\n caseMetadata: metadata.optional(),\n usage: usageSchema.optional(),\n runnerMetadata: metadata.optional(),\n error: errorSchema.optional(),\n })\n .superRefine((observation, context) => {\n const latencyIsMissing = observation.latencyMs === null\n if (\n (observation.latencySource === 'uncaptured' && !latencyIsMissing) ||\n (observation.latencySource !== 'uncaptured' && latencyIsMissing)\n ) {\n context.addIssue({\n code: 'custom',\n path: ['latencyMs'],\n message: `must ${observation.latencySource === 'uncaptured' ? '' : 'not '}be null for '${observation.latencySource}' latency`,\n })\n }\n })\n\nconst latencyDistributionSchema = z.strictObject({\n min: nonNegativeNumber,\n mean: nonNegativeNumber,\n p50: nonNegativeNumber,\n p95: nonNegativeNumber,\n max: nonNegativeNumber,\n})\n\nconst summarySchema = z.strictObject({\n runnerId: nonEmptyString,\n plannedRuns: nonNegativeInteger,\n completedRuns: nonNegativeInteger,\n failedRuns: nonNegativeInteger,\n issueBearingRuns: nonNegativeInteger,\n trustedNegativeRuns: nonNegativeInteger,\n unlabeledRuns: nonNegativeInteger,\n issueRecall: nullableRate,\n findingPrecision: nullableRate,\n f1: nullableRate,\n macroIssueRecall: nullableRate,\n macroFindingPrecision: nullableRate,\n macroF1: nullableRate,\n criticalStepAccuracy: nullableRate,\n citationCoverage: nullableRate,\n citationExcerptCoverage: nullableRate,\n citationLabelAgreement: nullableRate,\n citationResolution: nullableRate,\n citationResolutionUnknownRuns: nonNegativeInteger,\n unresolvedCitations: nonNegativeInteger,\n citationResolutionErrors: nonNegativeInteger,\n trustedNegativeFalsePositiveRate: nullableRate,\n trustedNegativeFailureRate: nullableRate,\n unlabeledPredictionRate: nullableRate,\n unlabeledFailureRate: nullableRate,\n predictionAgreement: nullableRate,\n predictionAgreementCases: nonNegativeInteger,\n matchedLabelAgreement: nullableRate,\n matchedLabelAgreementCases: nonNegativeInteger,\n latencyMs: latencyDistributionSchema.nullable(),\n benchmarkClockLatencyRuns: nonNegativeInteger,\n runnerReportedLatencyRuns: nonNegativeInteger,\n latencyUnknownRuns: nonNegativeInteger,\n calls: nonNegativeInteger,\n callsUnknownRuns: nonNegativeInteger,\n inputTokens: nonNegativeInteger,\n outputTokens: nonNegativeInteger,\n reasoningTokens: nonNegativeInteger,\n cachedTokens: nonNegativeInteger,\n cacheWriteTokens: nonNegativeInteger,\n tokenUsageUnknownRuns: nonNegativeInteger,\n reasoningTokenUsageUnknownRuns: nonNegativeInteger,\n cachedTokenUsageUnknownRuns: nonNegativeInteger,\n cacheWriteTokenUsageUnknownRuns: nonNegativeInteger,\n knownCostUsd: nonNegativeNumber,\n costUnknownRuns: nonNegativeInteger,\n})\n\nconst provenanceSchema = z\n .strictObject({\n id: nonEmptyString.optional(),\n dataset: z\n .strictObject({\n id: nonEmptyString,\n revision: nonEmptyString,\n split: nonEmptyString.optional(),\n })\n .optional(),\n command: nonEmptyString.optional(),\n environment: z.record(z.string(), z.string()).optional(),\n metadata: metadata.optional(),\n startedAt: timestamp,\n endedAt: timestamp,\n caseCount: positiveInteger,\n runnerIds: nonEmptyStringArray.min(1),\n repetitions: positiveInteger,\n maxConcurrency: positiveInteger,\n runnerOrderSeed: safeInteger,\n })\n .superRefine((provenance, context) => {\n if (Date.parse(provenance.endedAt) < Date.parse(provenance.startedAt)) {\n context.addIssue({\n code: 'custom',\n path: ['endedAt'],\n message: 'must not precede startedAt',\n })\n }\n })\n\nconst resultSchema = z.strictObject({\n provenance: provenanceSchema,\n observations: z.array(observationSchema),\n summaries: z.array(summarySchema),\n})\n\nconst comparisonMetricSchema = z.strictObject({\n metric: z.enum([\n 'completion',\n 'issueRecall',\n 'findingPrecision',\n 'f1',\n 'criticalStepAccuracy',\n 'citationCoverage',\n 'citationExcerptCoverage',\n 'citationLabelAgreement',\n 'citationResolution',\n 'trustedNegativeAccuracy',\n 'latencyMs',\n 'calls',\n 'inputTokens',\n 'outputTokens',\n 'reasoningTokens',\n 'cachedTokens',\n 'cacheWriteTokens',\n 'costUsd',\n ]),\n direction: z.enum(['higher', 'lower']),\n pairedCases: nonNegativeInteger,\n pairedClusters: nonNegativeInteger,\n eligibleObservations: nonNegativeInteger,\n pairedObservations: nonNegativeInteger,\n baselineMissingObservations: nonNegativeInteger,\n candidateMissingObservations: nonNegativeInteger,\n asymmetricMissingObservations: nonNegativeInteger,\n survivorOnly: z.boolean(),\n baselineMean: nullableFiniteNumber,\n candidateMean: nullableFiniteNumber,\n meanDelta: nullableFiniteNumber,\n intervalLow: nullableFiniteNumber,\n intervalHigh: nullableFiniteNumber,\n confidence: z.number().gt(0).lt(1),\n resamples: positiveInteger,\n minimumSampleMet: z.boolean(),\n populationInferenceEligible: z.boolean(),\n inferenceLimitations: stringArray,\n})\n\nconst comparisonSchema = z.strictObject({\n baselineRunnerId: nonEmptyString,\n candidateRunnerId: nonEmptyString,\n metrics: z.array(comparisonMetricSchema),\n})\n\nconst valueDistributionSchema = z.strictObject({\n total: nonNegativeInteger,\n missing: nonNegativeInteger,\n counts: z.record(z.string(), nonNegativeInteger),\n})\n\nconst distributionsSchema = z.strictObject({\n class: valueDistributionSchema,\n agent: valueDistributionSchema,\n model: valueDistributionSchema,\n difficulty: valueDistributionSchema,\n solved: valueDistributionSchema,\n})\n\nconst selectionReportSchema = z.strictObject({\n method: z.enum(['census', 'deterministic-hash']),\n seed: safeInteger,\n sourceCount: positiveInteger,\n selectedCount: positiveInteger,\n stratified: z.literal(false),\n representativeOfInput: z.boolean(),\n source: distributionsSchema,\n selected: distributionsSchema,\n})\n\nconst verificationOutcomeSchema = z.strictObject({\n status: z.enum(['passed', 'failed', 'unavailable']),\n reason: z\n .enum([\n 'missing-result',\n 'result-output-unavailable',\n 'result-parse-error',\n 'result-label-disagreement',\n ])\n .optional(),\n parseError: errorSchema.optional(),\n sources: z.array(\n z.strictObject({\n path: nonEmptyString,\n format: z.enum(['terminal-bench', 'swe-bench', 'swe-multi']),\n status: z.enum(['passed', 'failed', 'unavailable']),\n }),\n ),\n passedCheckCount: nonNegativeInteger,\n failedCheckCount: nonNegativeInteger,\n passedChecks: stringArray,\n failedChecks: stringArray,\n})\n\nconst verificationArtifactRole = z.enum(['final-test-output', 'final-result', 'final-metrics'])\n\nconst verificationArtifactSchema = z.strictObject({\n traceId: nonEmptyString,\n status: z.enum(['present', 'missing']),\n outcome: verificationOutcomeSchema,\n outcomeSpanId: nonEmptyString,\n caseDirectory: nonEmptyString,\n caseDirectoriesSearched: nonEmptyStringArray,\n totalBytes: nonNegativeInteger,\n maxBytes: positiveInteger,\n files: z.array(\n z.strictObject({\n role: verificationArtifactRole,\n path: nonEmptyString,\n relativePath: nonEmptyString,\n sha256,\n bytes: nonNegativeInteger,\n spanId: nonEmptyString,\n }),\n ),\n missingRoles: z.array(verificationArtifactRole),\n searched: z.strictObject({\n 'final-test-output': stringArray,\n 'final-result': stringArray,\n 'final-metrics': stringArray,\n }),\n})\n\nconst verificationAvailabilitySchema = z.strictObject({\n cases: nonNegativeInteger,\n resultFilesPresent: nonNegativeInteger,\n resultFilesMissing: nonNegativeInteger,\n outcomes: z.strictObject({\n passed: nonNegativeInteger,\n failed: nonNegativeInteger,\n unavailable: nonNegativeInteger,\n }),\n})\n\nconst codeTraceCalibrationSchema = z.strictObject({\n protocol: z.literal('labeled-positive-and-solved-negative'),\n rationale: nonEmptyString,\n runners: z.array(\n z.strictObject({\n runnerId: nonEmptyString,\n selectedRuns: nonNegativeInteger,\n positiveRuns: nonNegativeInteger,\n trustedNegativeRuns: nonNegativeInteger,\n unlabeledRuns: nonNegativeInteger,\n failedLabelEmptyRuns: nonNegativeInteger,\n unknownLabelEmptyRuns: nonNegativeInteger,\n completedRuns: nonNegativeInteger,\n failedRuns: nonNegativeInteger,\n expectedIncorrectSteps: nonNegativeInteger,\n predictedIncorrectSteps: nonNegativeInteger,\n matchedIncorrectSteps: nonNegativeInteger,\n officialAllRowF1: nullableRate,\n officialAllRowRuns: nonNegativeInteger,\n precision: nullableRate,\n recall: nullableRate,\n f1: nullableRate,\n trustedNegativeFalsePositiveRate: nullableRate,\n trustedNegativeFailureRate: nullableRate,\n unlabeledPredictionRate: nullableRate,\n unlabeledFailureRate: nullableRate,\n }),\n ),\n})\n\nconst agentRxCalibrationSchema = z.strictObject({\n protocol: z.literal('official-agentrx-root-cause'),\n upstreamRevision: revision,\n rationale: nonEmptyString,\n runners: z.array(\n z.strictObject({\n runnerId: nonEmptyString,\n selectedRuns: nonNegativeInteger,\n completedRuns: nonNegativeInteger,\n failedRuns: nonNegativeInteger,\n predictedRuns: nonNegativeInteger,\n missingPredictionRuns: nonNegativeInteger,\n exactStepAccuracy: nullableRate,\n stepAccuracyWithin1: nullableRate,\n stepAccuracyWithin2: nullableRate,\n stepAccuracyWithin3: nullableRate,\n stepAccuracyWithin4: nullableRate,\n stepAccuracyWithin5: nullableRate,\n meanStepDistance: nonNegativeNumber.nullable(),\n normalizedMeanStepDistance: nullableRate,\n normalizedDistanceRuns: nonNegativeInteger,\n normalizedDistanceUnknownRuns: nonNegativeInteger,\n rootCauseCategoryAccuracy: nullableRate,\n anyFailureCategoryAccuracy: nullableRate,\n earliestFailureCategoryAccuracy: nullableRate,\n terminalFailureCategoryAccuracy: nullableRate,\n }),\n ),\n})\n\nconst artifactSchema: z.ZodType<AnalystBenchmarkArtifact> = z\n .strictObject({\n kind: z.literal('agent-eval/analyst-benchmark-result'),\n runIdentitySha256: sha256,\n inputs: z.strictObject({\n dataset: z.enum(['agentrx', 'codetracebench']),\n datasetRevision: revision,\n datasetSplit: nonEmptyString,\n labelsSha256: sha256,\n sourceRowCount: positiveInteger,\n traceFiles: z.array(\n z.strictObject({\n traceId: nonEmptyString,\n relativePath: nonEmptyString,\n sha256,\n }),\n ),\n verificationArtifacts: z.array(verificationArtifactSchema),\n verificationAvailability: verificationAvailabilitySchema,\n selection: z.strictObject({\n limit: positiveInteger,\n seed: safeInteger,\n selectedCaseIds: nonEmptyStringArray.min(1),\n report: selectionReportSchema,\n }),\n execution: z.strictObject({\n repetitions: positiveInteger,\n concurrency: positiveInteger,\n rlmSamples: positiveInteger.optional(),\n model: nonEmptyString,\n modelOwnerCallRef: nonEmptyString.optional(),\n maxOutputTokens: positiveInteger,\n maxReasoningTokens: nonNegativeInteger.optional(),\n maxModelRequestBytes: positiveInteger.optional(),\n maxModelResponseBytes: positiveInteger.optional(),\n modelRequestTimeoutMs: positiveInteger.optional(),\n timeoutMs: positiveInteger,\n pricing: z\n .strictObject({\n inputUsdPerMillion: nonNegativeNumber,\n cachedInputUsdPerMillion: nonNegativeNumber.optional(),\n cacheWriteUsdPerMillion: nonNegativeNumber.optional(),\n outputUsdPerMillion: nonNegativeNumber,\n })\n .optional(),\n recursiveLimits: z\n .strictObject({\n maxIterations: positiveInteger,\n maxLlmCalls: positiveInteger,\n maxToolCalls: positiveInteger,\n maxOutputChars: positiveInteger,\n maxModelRequests: positiveInteger.nullable(),\n traceToolRequestBytes: positiveInteger,\n traceToolResponseBytes: positiveInteger,\n traceToolTimeoutMs: positiveInteger,\n })\n .optional(),\n processLimits: z\n .strictObject({\n maxInputBytes: positiveInteger,\n maxResultBytes: positiveInteger,\n maxOutputChars: positiveInteger,\n })\n .optional(),\n maxCostUsd: nonNegativeNumber,\n maxArtifactBytes: positiveInteger,\n analystProtocolSha256: sha256,\n implementationSha256: sha256,\n dependencyLockSha256: sha256,\n }),\n }),\n result: resultSchema,\n comparisons: z.array(comparisonSchema),\n codeTraceCalibration: codeTraceCalibrationSchema.optional(),\n agentRxCalibration: agentRxCalibrationSchema.optional(),\n })\n .superRefine((artifact, context) => {\n const isCodeTrace = artifact.inputs.dataset === 'codetracebench'\n if (isCodeTrace && !artifact.codeTraceCalibration) {\n context.addIssue({\n code: 'custom',\n path: ['codeTraceCalibration'],\n message: 'is required for CodeTraceBench artifacts',\n })\n }\n if (isCodeTrace && artifact.agentRxCalibration) {\n context.addIssue({\n code: 'custom',\n path: ['agentRxCalibration'],\n message: 'is not allowed for CodeTraceBench artifacts',\n })\n }\n if (!isCodeTrace && !artifact.agentRxCalibration) {\n context.addIssue({\n code: 'custom',\n path: ['agentRxCalibration'],\n message: 'is required for AgentRx artifacts',\n })\n }\n if (!isCodeTrace && artifact.codeTraceCalibration) {\n context.addIssue({\n code: 'custom',\n path: ['codeTraceCalibration'],\n message: 'is not allowed for AgentRx artifacts',\n })\n }\n })\n\nexport function assertAnalystBenchmarkObservation(\n value: unknown,\n context: string,\n): asserts value is AnalystBenchmarkObservation {\n assertSchema(observationSchema, value, context)\n}\n\nexport function assertAnalystBenchmarkArtifact(\n value: unknown,\n context: string,\n): asserts value is AnalystBenchmarkArtifact {\n assertSchema(artifactSchema, value, context)\n}\n\nfunction assertSchema(schema: z.ZodType, value: unknown, context: string): void {\n const result = schema.safeParse(value)\n if (result.success) return\n throw new TypeError(formatIssue(result.error.issues[0]!, context))\n}\n\nfunction formatIssue(issue: z.core.$ZodIssue, context: string): string {\n const path = issue.path.length === 0 ? context : `${context}.${issue.path.join('.')}`\n if (issue.code === 'unrecognized_keys') {\n return `${path} contains unknown field '${issue.keys[0]}'`\n }\n return `${path} ${issue.message}`\n}\n","import { createHash } from 'node:crypto'\nimport type { CustomTokenPricing } from '../cost-ledger'\nimport type { AnalystBenchmarkObservation, AnalystBenchmarkResult } from './benchmark'\nimport type { AgentRxCalibrationSummary } from './benchmark-agentrx-calibration'\nimport type { AnalystRunnerComparison } from './benchmark-comparison'\nimport type { CodeTraceCalibrationSummary } from './benchmark-public-calibration'\nimport type {\n PublicAnalystBenchmarkDataset,\n PublicBenchmarkSelectionReport,\n} from './benchmark-real-model'\nimport type { VerificationArtifactManifest } from './benchmark-verification-artifacts'\n\nexport { assertAnalystBenchmarkObservation } from './benchmark-command-validation'\n\nexport interface AnalystBenchmarkArtifact {\n kind: 'agent-eval/analyst-benchmark-result'\n runIdentitySha256: string\n inputs: {\n dataset: PublicAnalystBenchmarkDataset\n datasetRevision: string\n datasetSplit: string\n labelsSha256: string\n sourceRowCount: number\n traceFiles: Array<{ traceId: string; relativePath: string; sha256: string }>\n verificationArtifacts: VerificationArtifactManifest[]\n verificationAvailability: VerificationAvailabilitySummary\n selection: {\n limit: number\n seed: number\n selectedCaseIds: string[]\n report: PublicBenchmarkSelectionReport\n }\n execution: {\n repetitions: number\n concurrency: number\n /** Absent on artifacts produced before consensus sampling existed. */\n rlmSamples?: number\n model: string\n /** These fields are absent only on immutable evidence produced before model owners existed. */\n modelOwnerCallRef?: string\n maxOutputTokens: number\n maxReasoningTokens?: number\n maxModelRequestBytes?: number\n maxModelResponseBytes?: number\n modelRequestTimeoutMs?: number\n timeoutMs: number\n pricing?: CustomTokenPricing\n recursiveLimits?: {\n maxIterations: number\n maxLlmCalls: number\n maxToolCalls: number\n maxOutputChars: number\n maxModelRequests: number | null\n traceToolRequestBytes: number\n traceToolResponseBytes: number\n traceToolTimeoutMs: number\n }\n processLimits?: {\n maxInputBytes: number\n maxResultBytes: number\n maxOutputChars: number\n }\n maxCostUsd: number\n maxArtifactBytes: number\n analystProtocolSha256: string\n /** Present only when the run replaced the recursive analyst instructions. */\n instructionsOverrideSha256?: string\n implementationSha256: string\n dependencyLockSha256: string\n }\n }\n result: AnalystBenchmarkResult\n comparisons: AnalystRunnerComparison[]\n codeTraceCalibration?: CodeTraceCalibrationSummary\n agentRxCalibration?: AgentRxCalibrationSummary\n}\n\nexport interface VerificationAvailabilitySummary {\n cases: number\n resultFilesPresent: number\n resultFilesMissing: number\n outcomes: {\n passed: number\n failed: number\n unavailable: number\n }\n}\n\nexport interface AnalystBenchmarkRunIdentity {\n config: {\n dataset: PublicAnalystBenchmarkDataset\n datasetRevision: string\n datasetSplit: string\n model: {\n id: string\n ownerCallRef: string\n maxOutputTokens: number\n maxReasoningTokens: number\n maxRequestBytes: number\n maxResponseBytes: number\n requestTimeoutMs: number\n timeoutMs: number\n pricing: CustomTokenPricing\n recursiveLimits: {\n maxIterations: number\n maxLlmCalls: number\n maxToolCalls: number\n maxOutputChars: number\n maxModelRequests: number | null\n traceToolRequestBytes: number\n traceToolResponseBytes: number\n traceToolTimeoutMs: number\n }\n processLimits: {\n maxInputBytes: number\n maxResultBytes: number\n maxOutputChars: number\n }\n }\n limit: number\n seed: number\n concurrency: number\n repetitions: number\n /** Absent on manifests written before consensus sampling existed. */\n rlmSamples?: number\n maxCostUsd: number\n maxArtifactBytes: number\n analystProtocolSha256: string\n /** Present only when the run replaced the recursive analyst instructions. */\n instructionsOverrideSha256?: string\n implementationSha256: string\n dependencyLockSha256: string\n runnerIds: readonly ['empty', string]\n }\n inputs: {\n labelsSha256: string\n sourceRowCount: number\n selectedCaseIds: string[]\n traceFiles: Array<{ traceId: string; relativePath: string; sha256: string }>\n verificationArtifactsSha256: string\n caseDefinitionsSha256: string\n }\n}\n\nexport interface AnalystBenchmarkRunManifest {\n kind: 'agent-eval/analyst-benchmark-run'\n createdAt: string\n identitySha256: string\n localIdentitySha256: string\n identity: AnalystBenchmarkRunIdentity\n}\n\nexport interface AnalystBenchmarkLocalRunReceipt {\n kind: 'agent-eval/analyst-benchmark-local-run'\n runIdentitySha256: string\n localIdentitySha256: string\n local: {\n labelsPath: string\n traceDir: string\n artifactDir?: string\n outputDir: string\n modelOwnerModule: string\n }\n command: string\n environment: {\n node: string\n platform: string\n arch: string\n }\n files: {\n manifest: string\n observations: string\n costLedger: string\n modelResponses: string\n result: string\n report: string\n }\n}\n\nexport interface AnalystBenchmarkProgressRow {\n sequence: number\n runIdentitySha256: string\n previousRowSha256: string | null\n observation: AnalystBenchmarkObservation\n rowSha256: string\n}\n\nexport const ANALYST_BENCHMARK_MANIFEST_FILE = 'manifest.json'\nexport const ANALYST_BENCHMARK_OBSERVATIONS_FILE = 'observations.jsonl'\nexport const ANALYST_BENCHMARK_LOCAL_RECEIPT_FILE = 'run.local.json'\nexport const ANALYST_BENCHMARK_COST_LEDGER_FILE = 'cost-ledger.jsonl'\n\nexport function observationKey(observation: {\n runnerId: string\n caseId: string\n repetition: number\n}): string {\n return `${observation.runnerId}\\u0000${observation.caseId}\\u0000${observation.repetition}`\n}\n\nexport function parseJson(text: string, source: string): unknown {\n try {\n return JSON.parse(text)\n } catch {\n throw new Error(`invalid JSON in ${source}`)\n }\n}\n\nexport function assertExactKeys(\n value: Record<string, unknown>,\n allowed: readonly string[],\n context: string,\n optional: readonly string[] = [],\n): void {\n const allowedSet = new Set(allowed)\n const optionalSet = new Set(optional)\n for (const key of Object.keys(value)) {\n if (!allowedSet.has(key)) throw new TypeError(`${context} contains unknown field '${key}'`)\n }\n for (const key of allowed) {\n if (!optionalSet.has(key) && !(key in value)) {\n throw new TypeError(`${context} is missing field '${key}'`)\n }\n }\n}\n\nexport function digestCanonical(value: unknown): string {\n return createHash('sha256').update(canonicalJson(value)).digest('hex')\n}\n\nexport function canonicalJson(value: unknown): string {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n return JSON.stringify(value)\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new TypeError('cannot hash a non-finite number')\n return JSON.stringify(value)\n }\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(',')}]`\n if (isRecord(value)) {\n return `{${Object.keys(value)\n .filter((key) => value[key] !== undefined)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`)\n .join(',')}}`\n }\n throw new TypeError(`cannot hash ${typeof value}`)\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function isSha256(value: unknown): value is string {\n return typeof value === 'string' && /^[a-f0-9]{64}$/.test(value)\n}\n\nexport function isNonNegativeSafeInteger(value: unknown): value is number {\n return Number.isSafeInteger(value) && Number(value) >= 0\n}\n\nexport function isNonNegativeFinite(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0\n}\n","export const ANALYST_BENCHMARK_IMPLEMENTATION_DIGEST_ALGORITHM = 'sha256-canonical-source-manifest'\n\nexport const ANALYST_BENCHMARK_DEPENDENCY_LOCK_DIGEST_ALGORITHM = 'sha256-canonical-file-manifest'\n\nexport const ANALYST_BENCHMARK_DEPENDENCY_LOCK_FILES = Object.freeze([\n 'clients/python/pyproject.toml',\n 'clients/python/uv.lock',\n 'package.json',\n 'pnpm-lock.yaml',\n])\n\nexport const ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256 =\n 'f0d788f72ea83b6bd485f2ae61e58dda7e1d87ec79284ce245b3a7f0cc7ca812'\n\n/** The published benchmark evidence was produced at this package version, by\n * the retired one-shot direct runner, before trace analysts moved to the\n * recursive DSPy RLM engine. Both evidence digests below are historical facts\n * about that artifact: the current implementation and dependency manifest have\n * since changed, so they cannot describe the current engine. A fresh certified\n * run must replace the published evidence before any accuracy number is\n * attributed to the engine that ships today. */\nexport const ANALYST_BENCHMARK_EVIDENCE_PACKAGE_VERSION = '0.137.0'\n\nexport const ANALYST_BENCHMARK_EVIDENCE_DEPENDENCY_LOCK_SHA256 =\n '1e03f2daed356d60316aabefb407ec1e437ac94d408d61eea4ae096e9c6fbb5b'\n\nexport const ANALYST_BENCHMARK_EVIDENCE_IMPLEMENTATION_SHA256 =\n '4dba263b6256a30d56c7fdb2d992d3a953c0035d731f359b704db806f68f75ac'\n\nexport const ANALYST_BENCHMARK_IMPLEMENTATION_FILES = Object.freeze([\n 'clients/python/src/agent_eval_rpc/dspy_rlm_bridge.py',\n 'clients/python/src/agent_eval_rpc/optimizer_bridge_common.py',\n 'src/analyst/benchmark-agentrx-calibration.ts',\n 'src/analyst/benchmark-command-artifact.ts',\n 'src/analyst/benchmark-command-persistence.ts',\n 'src/analyst/benchmark-command-result.ts',\n 'src/analyst/benchmark-command-validation.ts',\n 'src/analyst/benchmark-command.ts',\n 'src/analyst/benchmark-comparison.ts',\n 'src/analyst/benchmark-dataset-agentrx.ts',\n 'src/analyst/benchmark-dataset-codetrace.ts',\n 'src/analyst/benchmark-dataset-utils.ts',\n 'src/analyst/benchmark-datasets.ts',\n 'src/analyst/benchmark-evidence-validation.ts',\n 'src/analyst/benchmark-instructions-override.ts',\n 'src/analyst/benchmark-public-adapters.ts',\n 'src/analyst/benchmark-public-calibration.ts',\n 'src/analyst/benchmark-public-consensus.ts',\n 'src/analyst/benchmark-public-data.ts',\n 'src/analyst/benchmark-public-errors.ts',\n 'src/analyst/benchmark-public-model.ts',\n 'src/analyst/benchmark-public-prompt.ts',\n 'src/analyst/benchmark-public-rlm.ts',\n 'src/analyst/benchmark-public-types.ts',\n 'src/analyst/benchmark-real-model.ts',\n 'src/analyst/benchmark-report.ts',\n 'src/analyst/benchmark-response-cache.ts',\n 'src/analyst/benchmark-scoring.ts',\n 'src/analyst/benchmark-summary.ts',\n 'src/analyst/benchmark-verification-artifacts.ts',\n 'src/analyst/benchmark-verification-outcome.ts',\n 'src/analyst/benchmark.ts',\n 'src/analyst/dspy-rlm-engine.ts',\n 'src/analyst/engine.ts',\n 'src/analyst/exact-types.ts',\n 'src/analyst/finding-signature.ts',\n 'src/analyst/finding-subject.ts',\n 'src/analyst/kind-factory.ts',\n 'src/analyst/parse-tolerant.ts',\n 'src/analyst/tool-groups.ts',\n 'src/analyst/trace-tool-callback.ts',\n 'src/analyst/types.ts',\n 'src/analyst/usage-receipt.ts',\n 'src/campaign/external-optimizer-callback.ts',\n 'src/campaign/external-optimizer-contracts.ts',\n 'src/campaign/external-optimizer-http.ts',\n 'src/campaign/external-optimizer-model-proxy.ts',\n 'src/campaign/external-optimizer-process.ts',\n 'src/campaign/external-optimizer-resources.ts',\n 'src/campaign/external-optimizer-subprocess.ts',\n 'src/campaign/search-ledger-errors.ts',\n 'src/campaign/search-ledger-file.ts',\n 'src/campaign/single-run-lock.ts',\n 'src/campaign/storage.ts',\n 'src/concurrency.ts',\n 'src/cost-ledger.ts',\n 'src/errors.ts',\n 'src/judge-calibration.ts',\n 'src/ledger-core/atomic-file-lock.ts',\n 'src/ledger-core/canonical.ts',\n 'src/ledger-core/deep-freeze.ts',\n 'src/ledger-core/index.ts',\n 'src/ledger-core/journal-file.ts',\n 'src/ledger-core/journal.ts',\n 'src/ledger-core/trusted-head.ts',\n 'src/llm-client.ts',\n 'src/math/normal.ts',\n 'src/math/special-functions.ts',\n 'src/math/student-t.ts',\n 'src/metrics.ts',\n 'src/statistics.ts',\n 'src/trace-analyst/errors.ts',\n 'src/trace-analyst/otlp-span.ts',\n 'src/trace-analyst/shared-abortable-task.ts',\n 'src/trace-analyst/store-boundary.ts',\n 'src/trace-analyst/store-bounds.ts',\n 'src/trace-analyst/store-contract.ts',\n 'src/trace-analyst/store-otlp.ts',\n 'src/trace-analyst/store-schemas.ts',\n 'src/trace-analyst/store.ts',\n 'src/trace-analyst/tools.ts',\n 'src/trace-analyst/types.ts',\n 'src/trace/attribute-vocabulary.ts',\n 'src/trace/otlp-attributes.ts',\n 'src/trace/raw-provider-sink.ts',\n 'src/verdict-cache.ts',\n])\n\nexport const ANALYST_BENCHMARK_IMPLEMENTATION_SHA256 =\n '67cd83aaaa158d44a9fa32e172cbe68fa97f01ae673ccb117469688b628bb9b1'\n\nexport function analystBenchmarkImplementationDigest() {\n return ANALYST_BENCHMARK_IMPLEMENTATION_SHA256\n}\n\nexport function analystBenchmarkDependencyLockDigest() {\n return ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256\n}\n","import { TRACE_ANALYSIS_LIMITS, type TraceAnalysisStore } from '../trace-analyst/store'\nimport type { AnalystFinding, EvidenceRef } from './types'\n\nconst MIN_ACTION_EXCERPT_CHARACTERS = 12\nexport const MAX_ASSISTANT_STEP_EVIDENCE_EXCERPT_CHARACTERS = 512\nconst MAX_LABEL_SCAN_DEPTH = 64\nconst MAX_SERIALIZED_JSON_SCAN_BYTES = 64 * 1024\nconst MAX_SERIALIZED_JSON_SCAN_DEPTH = 8\n\nconst BENCHMARK_LABEL_KEYS = new Set([\n 'category_reason',\n 'failure_category',\n 'failure_summary',\n 'incorrect_stages',\n 'incorrect_step_ids',\n 'root_cause',\n 'root_cause_failure_id',\n 'root_cause_reason',\n 'step_reason',\n 'unuseful_step_ids',\n])\nconst BENCHMARK_LABEL_KEY_TOKENS = [...BENCHMARK_LABEL_KEYS].sort(\n (left, right) => right.length - left.length,\n)\n\nconst BENCHMARK_LABEL_PATH_MARKERS = [\n 'bench_manifest.verified',\n 'codetracer_labels.json',\n '/ground_truth/',\n '\\\\ground_truth\\\\',\n] as const\n\nexport interface BenchmarkLabelLeakScan {\n passed: true\n scannedBytes: number\n scannedValues: number\n}\n\nexport function assertNoBenchmarkLabelsInTrace(options: {\n traceId: string\n otlpText: string\n}): BenchmarkLabelLeakScan {\n let scannedValues = 0\n for (const [index, line] of options.otlpText.split(/\\r?\\n/).entries()) {\n if (!line.trim()) continue\n let value: unknown\n try {\n value = JSON.parse(line)\n } catch (error) {\n throw new TypeError(\n `trace '${options.traceId}' line ${index + 1} is invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n scannedValues += scanValue(value, options.traceId, `$line[${index + 1}]`, 0, 0)\n }\n if (scannedValues === 0) {\n throw new Error(`trace '${options.traceId}' contains no JSON values`)\n }\n return {\n passed: true,\n scannedBytes: Buffer.byteLength(options.otlpText),\n scannedValues,\n }\n}\n\nexport function assertNoBenchmarkLabelsInArtifact(options: {\n traceId: string\n relativePath: string\n content: string\n}): void {\n const normalizedPath = options.relativePath.toLowerCase()\n for (const marker of BENCHMARK_LABEL_PATH_MARKERS) {\n if (normalizedPath.includes(marker.toLowerCase())) {\n throw new Error(\n `trace '${options.traceId}' verification artifact path contains benchmark label marker '${marker}'`,\n )\n }\n }\n const normalizedContent = options.content.toLowerCase()\n for (const key of BENCHMARK_LABEL_KEYS) {\n if (normalizedContent.includes(key)) {\n throw new Error(\n `trace '${options.traceId}' verification artifact contains benchmark label key '${key}'`,\n )\n }\n }\n for (const marker of BENCHMARK_LABEL_PATH_MARKERS) {\n if (normalizedContent.includes(marker.toLowerCase())) {\n throw new Error(\n `trace '${options.traceId}' verification artifact contains benchmark label path marker '${marker}'`,\n )\n }\n }\n}\n\nexport async function validateCodeTraceFindingEvidence(options: {\n trajectoryId: string\n findings: readonly AnalystFinding[]\n store: TraceAnalysisStore\n signal?: AbortSignal\n}): Promise<void> {\n const citations = options.findings.flatMap((finding) =>\n finding.evidence_refs.map((evidence) => ({\n evidence,\n findingId: finding.finding_id,\n location: codeTraceStepFromEvidence(evidence.uri),\n })),\n )\n if (citations.length === 0) return\n\n for (const citation of citations) {\n if (!citation.location || citation.location.traceId !== options.trajectoryId) {\n throw new Error(\n `model finding '${citation.findingId}' cites non-case evidence '${citation.evidence.uri}'`,\n )\n }\n }\n\n const spanIds = [...new Set(citations.map((citation) => `step-${citation.location!.step}`))]\n const { spans, missing } = await fetchTraceSpans(options.store, {\n trajectoryId: options.trajectoryId,\n spanIds,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n if (missing.length > 0) {\n throw new Error(\n `model finding evidence is unavailable in the case trace: ${missing.join(', ')}`,\n )\n }\n\n for (const citation of citations) {\n const spanId = `step-${citation.location!.step}`\n const span = spans.get(spanId)\n if (!span) {\n throw new Error(`model finding '${citation.findingId}' cites missing span '${spanId}'`)\n }\n if (span.kind !== 'LLM') {\n throw new Error(\n `model finding '${citation.findingId}' cites '${spanId}', which is ${span.kind}, not an assistant LLM span`,\n )\n }\n assertExactActionExcerpt(citation.findingId, citation.evidence, spanId, span.attributes.content)\n }\n}\n\n/**\n * Resolve assistant-step evidence for a trajectory.\n *\n * `steps` are claims the model made explicitly: an unresolvable one is a model\n * error and throws. `optionalSteps` are derived by the runner (a block's\n * interior, a block's consequence step), so an unresolvable one is simply\n * absent from the returned map and the caller decides what that means.\n */\nexport async function resolveAssistantStepEvidence(options: {\n trajectoryId: string\n steps: readonly number[]\n optionalSteps?: readonly number[]\n store: TraceAnalysisStore\n signal?: AbortSignal\n}): Promise<Map<number, EvidenceRef>> {\n const required = [...new Set(options.steps)]\n const optional = [...new Set(options.optionalSteps ?? [])].filter(\n (step) => !required.includes(step),\n )\n for (const step of [...required, ...optional]) {\n if (!Number.isSafeInteger(step) || step < 1) {\n throw new TypeError(`assistant evidence step must be a positive safe integer: ${step}`)\n }\n }\n const steps = [...required, ...optional]\n if (steps.length === 0) return new Map()\n\n const { spans, missing } = await fetchTraceSpans(options.store, {\n trajectoryId: options.trajectoryId,\n spanIds: steps.map((step) => `step-${step}`),\n ...(options.signal ? { signal: options.signal } : {}),\n })\n const missingRequired = missing.filter((spanId) =>\n required.some((step) => `step-${step}` === spanId),\n )\n if (missingRequired.length > 0) {\n throw new Error(`model selected unavailable assistant steps: ${missingRequired.join(', ')}`)\n }\n\n const evidence = new Map<number, EvidenceRef>()\n for (const step of steps) {\n const spanId = `step-${step}`\n const optionalStep = optional.includes(step)\n const span = spans.get(spanId)\n if (!span) {\n if (optionalStep) continue\n throw new Error(`model selected missing assistant step '${spanId}'`)\n }\n if (span.kind !== 'LLM') {\n if (optionalStep) continue\n throw new Error(\n `model selected '${spanId}', which is ${span.kind}, not an assistant LLM span`,\n )\n }\n const content = span.attributes.content\n if (typeof content !== 'string' || content.trim().length === 0) {\n if (optionalStep) continue\n throw new Error(`model selected '${spanId}' without action content`)\n }\n evidence.set(step, {\n kind: 'span',\n uri: codeTraceStepEvidenceUri(options.trajectoryId, step),\n excerpt: content.trim().slice(0, MAX_ASSISTANT_STEP_EVIDENCE_EXCERPT_CHARACTERS),\n })\n }\n return evidence\n}\n\n/**\n * Read spans by id, paging over the store's byte-budget omissions.\n *\n * `omitted_span_ids` names spans that exist but did not fit the response\n * ceiling; the store guarantees at least one span lands per call, so\n * re-requesting exactly the omitted ids terminates. Only `missing_span_ids`\n * describes a span the trace does not contain.\n */\nasync function fetchTraceSpans(\n store: TraceAnalysisStore,\n options: { trajectoryId: string; spanIds: readonly string[]; signal?: AbortSignal },\n): Promise<{\n spans: Map<string, Awaited<ReturnType<TraceAnalysisStore['viewSpans']>>['spans'][number]>\n missing: string[]\n}> {\n const spans = new Map<\n string,\n Awaited<ReturnType<TraceAnalysisStore['viewSpans']>>['spans'][number]\n >()\n const missing: string[] = []\n const unique = [...new Set(options.spanIds)]\n const context = options.signal ? { signal: options.signal } : undefined\n for (let offset = 0; offset < unique.length; offset += TRACE_ANALYSIS_LIMITS.viewSpans) {\n let pending = unique.slice(offset, offset + TRACE_ANALYSIS_LIMITS.viewSpans)\n while (pending.length > 0) {\n const result = await store.viewSpans(\n { trace_id: options.trajectoryId, span_ids: pending },\n context,\n )\n for (const span of result.spans) spans.set(span.span_id, span)\n missing.push(...result.missing_span_ids)\n const omitted = result.omitted_span_ids.filter((spanId) => !spans.has(spanId))\n if (omitted.length >= pending.length) {\n throw new Error(\n `trace '${options.trajectoryId}' cannot project spans within the store response budget: ${omitted.join(', ')}`,\n )\n }\n pending = omitted\n }\n }\n return { spans, missing }\n}\n\nfunction scanValue(\n value: unknown,\n traceId: string,\n path: string,\n depth: number,\n serializedDepth: number,\n): number {\n if (depth > MAX_LABEL_SCAN_DEPTH) {\n throw new Error(`trace '${traceId}' exceeds benchmark label scan depth at ${path}`)\n }\n if (Array.isArray(value)) {\n return (\n 1 +\n value.reduce(\n (count, entry, index) =>\n count + scanValue(entry, traceId, `${path}[${index}]`, depth + 1, serializedDepth),\n 0,\n )\n )\n }\n if (typeof value === 'object' && value !== null) {\n let count = 1\n for (const [key, entry] of Object.entries(value)) {\n if (BENCHMARK_LABEL_KEYS.has(key.toLowerCase())) {\n throw new Error(`trace '${traceId}' exposes benchmark label key '${key}' at ${path}`)\n }\n count += scanValue(entry, traceId, `${path}.${key}`, depth + 1, serializedDepth)\n }\n return count\n }\n if (typeof value === 'string') {\n const normalized = value.toLowerCase()\n const labelKey = BENCHMARK_LABEL_KEY_TOKENS.find((candidate) => normalized.includes(candidate))\n if (labelKey) {\n throw new Error(\n `trace '${traceId}' exposes benchmark label key '${labelKey}' inside a string at ${path}`,\n )\n }\n const marker = BENCHMARK_LABEL_PATH_MARKERS.find((candidate) => normalized.includes(candidate))\n if (marker) {\n throw new Error(\n `trace '${traceId}' exposes benchmark label path marker '${marker}' at ${path}`,\n )\n }\n const trimmed = value.trim()\n if (\n serializedDepth < MAX_SERIALIZED_JSON_SCAN_DEPTH &&\n Buffer.byteLength(trimmed) <= MAX_SERIALIZED_JSON_SCAN_BYTES &&\n looksLikeSerializedJson(trimmed)\n ) {\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch {\n return 1\n }\n return (\n 1 + scanValue(parsed, traceId, `${path}<serialized-json>`, depth + 1, serializedDepth + 1)\n )\n }\n }\n return 1\n}\n\nfunction looksLikeSerializedJson(value: string): boolean {\n return (\n (value.startsWith('{') && value.endsWith('}')) ||\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('\"') && value.endsWith('\"'))\n )\n}\n\nexport function codeTraceStepFromEvidence(uri: string): { traceId: string; step: number } | null {\n const match = /^trace:\\/\\/([^/]+)\\/span\\/step-(\\d+)$/.exec(uri)\n if (!match) return null\n try {\n const traceId = decodeURIComponent(match[1]!)\n const step = Number(match[2])\n return traceId && Number.isSafeInteger(step) && step > 0 ? { traceId, step } : null\n } catch {\n return null\n }\n}\n\nexport function codeTraceStepEvidenceUri(traceId: string, step: number): string {\n return `trace://${encodeURIComponent(traceId)}/span/step-${step}`\n}\n\nfunction assertExactActionExcerpt(\n findingId: string,\n evidence: EvidenceRef,\n spanId: string,\n content: unknown,\n): void {\n if (typeof content !== 'string' || content.length === 0) {\n throw new Error(`model finding '${findingId}' cites '${spanId}' without action content`)\n }\n const excerpt = evidence.excerpt?.trim()\n if (!excerpt) {\n throw new Error(`model finding '${findingId}' must quote action content from '${spanId}'`)\n }\n const requiredLength = Math.min(MIN_ACTION_EXCERPT_CHARACTERS, content.trim().length)\n if (excerpt.length < requiredLength) {\n throw new Error(\n `model finding '${findingId}' excerpt for '${spanId}' is too short; expected at least ${requiredLength} characters`,\n )\n }\n if (!content.includes(excerpt)) {\n throw new Error(\n `model finding '${findingId}' excerpt is not present in '${spanId}' action content`,\n )\n }\n}\n","import { z } from 'zod'\n\nexport type VerificationOutcomeStatus = 'passed' | 'failed' | 'unavailable'\n\nexport interface VerificationOutcomeSource {\n path: string\n format: 'terminal-bench' | 'swe-bench' | 'swe-multi'\n status: VerificationOutcomeStatus\n}\n\nexport interface VerificationOutcome {\n status: VerificationOutcomeStatus\n reason?:\n | 'missing-result'\n | 'result-output-unavailable'\n | 'result-parse-error'\n | 'result-label-disagreement'\n parseError?: { class: string; message: string }\n sources: VerificationOutcomeSource[]\n passedCheckCount: number\n failedCheckCount: number\n passedChecks: string[]\n failedChecks: string[]\n}\n\nexport interface VerificationResultFile {\n relativePath: string\n content: string\n}\n\nconst MAX_REPORTED_CHECKS = 20\nconst SWE_MULTI_NO_TEST_RESULTS =\n 'After applying the fix patch, no test results were captured when executing the test command.'\n\nconst checkNameSchema = z.string().min(1)\nconst checkListSchema = z.array(checkNameSchema).superRefine((checks, context) => {\n const seen = new Set<string>()\n for (const [index, check] of checks.entries()) {\n if (seen.has(check)) {\n context.addIssue({\n code: 'custom',\n path: [index],\n message: `duplicate check '${check}'`,\n })\n }\n seen.add(check)\n }\n})\nconst nonNegativeCountSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)\n\nconst terminalBenchSchema = z\n .object({\n is_resolved: z.boolean().nullable(),\n failure_mode: z.string().min(1),\n parser_results: z.record(z.string().min(1), z.enum(['passed', 'failed'])).nullable(),\n })\n .passthrough()\n\nconst directSweBenchSchema = z\n .object({\n resolved: z.boolean(),\n passed_tests: checkListSchema,\n failed_tests: checkListSchema,\n })\n .passthrough()\n\nconst nestedSweBenchCategorySchema = z\n .object({\n success: checkListSchema,\n failure: checkListSchema,\n })\n .passthrough()\n\nconst nestedSweBenchInstanceSchema = z\n .object({\n resolved: z.boolean(),\n tests_status: z\n .record(z.string().min(1), nestedSweBenchCategorySchema)\n .refine((value) => Object.keys(value).length > 0, 'must contain at least one test category'),\n })\n .passthrough()\n\nconst nestedSweBenchSchema = z\n .record(z.string().min(1), nestedSweBenchInstanceSchema)\n .refine((value) => Object.keys(value).length > 0, 'must contain at least one instance')\n\nconst sweMultiCheckResultSchema = z\n .object({\n passed_count: nonNegativeCountSchema,\n failed_count: nonNegativeCountSchema,\n skipped_count: nonNegativeCountSchema,\n passed_tests: checkListSchema,\n failed_tests: checkListSchema,\n skipped_tests: checkListSchema,\n })\n .passthrough()\n\nconst sweMultiSchema = z\n .object({\n valid: z.boolean(),\n error_msg: z.string(),\n fix_patch_result: sweMultiCheckResultSchema,\n })\n .passthrough()\n\nexport function parseVerificationOutcome(\n files: readonly VerificationResultFile[],\n): VerificationOutcome {\n if (files.length === 0) {\n throw new Error('final verification outcome requires at least one result file')\n }\n\n const sources: VerificationOutcomeSource[] = []\n const passedChecks = new Set<string>()\n const failedChecks = new Set<string>()\n const unavailableReasons = new Set<NonNullable<VerificationOutcome['reason']>>()\n\n for (const file of files) {\n let value: unknown\n try {\n value = JSON.parse(file.content)\n } catch (error) {\n throw new TypeError(\n `final verification result is not valid JSON: ${file.relativePath}: ${errorMessage(error)}`,\n )\n }\n const parsed = parseResult(value, file.relativePath)\n sources.push({\n path: file.relativePath,\n format: parsed.format,\n status: parsed.status,\n })\n if (parsed.reason) unavailableReasons.add(parsed.reason)\n for (const check of parsed.passedChecks) passedChecks.add(check)\n for (const check of parsed.failedChecks) failedChecks.add(check)\n }\n\n const statuses = new Set(sources.map((source) => source.status))\n if (statuses.size !== 1) {\n throw new Error(\n `final verification result files disagree: ${sources\n .map((source) => `${source.path}=${source.status}`)\n .join(', ')}`,\n )\n }\n if (unavailableReasons.size > 1) {\n throw new Error(\n `final verification result files disagree on why the outcome is unavailable: ${[\n ...unavailableReasons,\n ].join(', ')}`,\n )\n }\n const [unavailableReason] = unavailableReasons\n\n const passed = [...passedChecks].sort()\n const failed = [...failedChecks].sort()\n assertDisjointChecks(passed, failed, 'final verification result')\n return {\n status: sources[0]!.status,\n ...(unavailableReason ? { reason: unavailableReason } : {}),\n sources,\n passedCheckCount: passed.length,\n failedCheckCount: failed.length,\n passedChecks: passed.slice(0, MAX_REPORTED_CHECKS),\n failedChecks: failed.slice(0, MAX_REPORTED_CHECKS),\n }\n}\n\ninterface ParsedResult {\n format: VerificationOutcomeSource['format']\n status: VerificationOutcomeStatus\n reason?: NonNullable<VerificationOutcome['reason']>\n passedChecks: string[]\n failedChecks: string[]\n}\n\nfunction parseResult(value: unknown, path: string): ParsedResult {\n const record = asRecord(value)\n if (!record) {\n throw unsupported(path)\n }\n\n const discriminators = ['is_resolved', 'resolved', 'valid'].filter((field) =>\n Object.hasOwn(record, field),\n )\n if (discriminators.length > 1) {\n throw new TypeError(\n `final verification result is ambiguous: ${path}: found ${discriminators.join(', ')}`,\n )\n }\n if (discriminators[0] === 'is_resolved') return parseTerminalBench(record, path)\n if (discriminators[0] === 'resolved') return parseDirectSweBench(record, path)\n if (discriminators[0] === 'valid') return parseSweMulti(record, path)\n\n const entries = Object.entries(record)\n const looksNested = entries.some(([, candidate]) => {\n const nested = asRecord(candidate)\n return nested !== null && Object.hasOwn(nested, 'resolved')\n })\n if (looksNested) return parseNestedSweBench(record, path)\n\n throw unsupported(path)\n}\n\nfunction parseTerminalBench(value: unknown, path: string): ParsedResult {\n const record = parseSchema(terminalBenchSchema, value, path, 'Terminal-Bench')\n if (record.is_resolved === null) {\n if (record.parser_results !== null) {\n throw malformed(\n path,\n 'Terminal-Bench',\n 'parser_results must be null when is_resolved is null',\n )\n }\n if (record.failure_mode === 'unset') {\n throw malformed(path, 'Terminal-Bench', \"failure_mode cannot be 'unset' when unresolved\")\n }\n return {\n format: 'terminal-bench',\n status: 'unavailable',\n reason:\n record.failure_mode === 'parse_error' ? 'result-parse-error' : 'result-output-unavailable',\n passedChecks: [],\n failedChecks: [],\n }\n }\n if (record.parser_results === null) {\n throw malformed(\n path,\n 'Terminal-Bench',\n 'parser_results must be an object when is_resolved is boolean',\n )\n }\n const checks = stringStatusChecks(record.parser_results)\n if (checks.passedChecks.length + checks.failedChecks.length === 0) {\n throw malformed(path, 'Terminal-Bench', 'parser_results must contain at least one check')\n }\n assertOutcomeConsistency(record.is_resolved, checks, path, 'Terminal-Bench is_resolved', true)\n return {\n format: 'terminal-bench',\n status: status(record.is_resolved),\n ...checks,\n }\n}\n\nfunction parseDirectSweBench(value: unknown, path: string): ParsedResult {\n const record = parseSchema(directSweBenchSchema, value, path, 'SWE-bench')\n const checks = {\n passedChecks: record.passed_tests,\n failedChecks: record.failed_tests,\n }\n assertOutcomeConsistency(record.resolved, checks, path, 'SWE-bench resolved')\n return {\n format: 'swe-bench',\n status: status(record.resolved),\n ...checks,\n }\n}\n\nfunction parseNestedSweBench(value: unknown, path: string): ParsedResult {\n const record = parseSchema(nestedSweBenchSchema, value, path, 'SWE-bench instance report')\n const instances = Object.entries(record)\n const statuses = new Set(instances.map(([, instance]) => status(instance.resolved)))\n if (statuses.size !== 1) {\n throw new Error(\n `final verification report contains conflicting instance outcomes: ${path}: ${instances\n .map(([id, instance]) => `${id}=${status(instance.resolved)}`)\n .join(', ')}`,\n )\n }\n\n const passedChecks: string[] = []\n const failedChecks: string[] = []\n for (const [instanceId, instance] of instances) {\n const checks = nestedSweBenchChecks(instanceId, instance.tests_status)\n assertOutcomeConsistency(\n instance.resolved,\n checks,\n path,\n `SWE-bench instance '${instanceId}' resolved`,\n )\n passedChecks.push(...checks.passedChecks)\n failedChecks.push(...checks.failedChecks)\n }\n return {\n format: 'swe-bench',\n status: [...statuses][0]!,\n passedChecks,\n failedChecks,\n }\n}\n\nfunction parseSweMulti(value: unknown, path: string): ParsedResult {\n const record = parseSchema(sweMultiSchema, value, path, 'SWE-Multi')\n const fix = record.fix_patch_result\n assertCount(fix.passed_count, fix.passed_tests, 'passed', path)\n assertCount(fix.failed_count, fix.failed_tests, 'failed', path)\n assertCount(fix.skipped_count, fix.skipped_tests, 'skipped', path)\n assertDisjointChecks(fix.passed_tests, fix.failed_tests, `SWE-Multi result ${path}`)\n assertDisjointChecks(fix.passed_tests, fix.skipped_tests, `SWE-Multi result ${path}`)\n assertDisjointChecks(fix.failed_tests, fix.skipped_tests, `SWE-Multi result ${path}`)\n\n const checks = {\n passedChecks: fix.passed_tests,\n failedChecks: fix.failed_tests,\n }\n if (record.valid === false && isSweMultiOutputUnavailable(record)) {\n return {\n format: 'swe-multi',\n status: 'unavailable',\n reason: 'result-output-unavailable',\n ...checks,\n }\n }\n assertOutcomeConsistency(record.valid, checks, path, 'SWE-Multi valid')\n return {\n format: 'swe-multi',\n status: status(record.valid),\n ...checks,\n }\n}\n\nfunction isSweMultiOutputUnavailable(record: z.infer<typeof sweMultiSchema>): boolean {\n const fix = record.fix_patch_result\n return (\n (record.error_msg === SWE_MULTI_NO_TEST_RESULTS ||\n record.error_msg.startsWith(`${SWE_MULTI_NO_TEST_RESULTS} `)) &&\n fix.passed_count === 0 &&\n fix.failed_count === 0 &&\n fix.skipped_count === 0\n )\n}\n\nfunction stringStatusChecks(record: Record<string, 'passed' | 'failed'>): {\n passedChecks: string[]\n failedChecks: string[]\n} {\n const passedChecks: string[] = []\n const failedChecks: string[] = []\n for (const [name, result] of Object.entries(record)) {\n if (result === 'passed') passedChecks.push(name)\n else failedChecks.push(name)\n }\n return { passedChecks, failedChecks }\n}\n\nfunction nestedSweBenchChecks(\n instanceId: string,\n testsStatus: z.infer<typeof nestedSweBenchInstanceSchema>['tests_status'],\n): { passedChecks: string[]; failedChecks: string[] } {\n const passedChecks: string[] = []\n const failedChecks: string[] = []\n for (const [category, result] of Object.entries(testsStatus)) {\n passedChecks.push(...result.success.map((name) => `${instanceId}:${category}:${name}`))\n failedChecks.push(...result.failure.map((name) => `${instanceId}:${category}:${name}`))\n }\n return { passedChecks, failedChecks }\n}\n\nfunction assertOutcomeConsistency(\n passed: boolean,\n checks: { passedChecks: readonly string[]; failedChecks: readonly string[] },\n path: string,\n field: string,\n requireFailedCheck = false,\n): void {\n assertDisjointChecks(checks.passedChecks, checks.failedChecks, `${field} in ${path}`)\n if (passed && checks.failedChecks.length > 0) {\n throw malformed(\n path,\n field,\n `cannot be true while failed checks are reported: ${checks.failedChecks.join(', ')}`,\n )\n }\n if (passed && checks.passedChecks.length === 0) {\n throw malformed(path, field, 'cannot be true without at least one passed check')\n }\n if (!passed && requireFailedCheck && checks.failedChecks.length === 0) {\n throw malformed(path, field, 'cannot be false without at least one failed check')\n }\n}\n\nfunction assertCount(count: number, checks: readonly string[], kind: string, path: string): void {\n if (count !== checks.length) {\n throw malformed(\n path,\n 'SWE-Multi',\n `${kind}_count=${count} does not match ${kind}_tests length ${checks.length}`,\n )\n }\n}\n\nfunction assertDisjointChecks(\n left: readonly string[],\n right: readonly string[],\n source: string,\n): void {\n const rightSet = new Set(right)\n const contradictions = [...new Set(left.filter((check) => rightSet.has(check)))].sort()\n if (contradictions.length > 0) {\n throw new Error(\n `${source} marks checks as both passed and failed: ${contradictions.join(', ')}`,\n )\n }\n}\n\nfunction parseSchema<T>(schema: z.ZodType<T>, value: unknown, path: string, format: string): T {\n const parsed = schema.safeParse(value)\n if (parsed.success) return parsed.data\n const details = parsed.error.issues\n .map((issue) => `${issue.path.join('.') || '<root>'}: ${issue.message}`)\n .join('; ')\n throw malformed(path, format, details)\n}\n\nfunction malformed(path: string, format: string, details: string): TypeError {\n return new TypeError(`malformed ${format} verification result: ${path}: ${details}`)\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null\n}\n\nfunction status(value: boolean): VerificationOutcomeStatus {\n return value ? 'passed' : 'failed'\n}\n\nfunction unsupported(path: string): TypeError {\n return new TypeError(\n `final verification result has no supported outcome field: ${path}; expected is_resolved, resolved, valid, or a SWE-bench instance report`,\n )\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import { createHash } from 'node:crypto'\nimport { constants, type Stats } from 'node:fs'\nimport { type FileHandle, open, readdir, realpath, stat } from 'node:fs/promises'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\nimport { TextDecoder } from 'node:util'\nimport type { CodeTraceBenchRow } from './benchmark-datasets'\nimport {\n parseVerificationOutcome,\n type VerificationOutcome,\n} from './benchmark-verification-outcome'\n\nexport const DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES = 8 * 1024 * 1024\n\nexport type VerificationArtifactRole = 'final-test-output' | 'final-result' | 'final-metrics'\n\nexport interface VerificationArtifactFile {\n role: VerificationArtifactRole\n path: string\n relativePath: string\n sha256: string\n bytes: number\n spanId: string\n}\n\nexport interface VerificationArtifactManifest {\n traceId: string\n status: 'present' | 'missing'\n outcome: VerificationOutcome\n outcomeSpanId: string\n caseDirectory: string\n caseDirectoriesSearched: string[]\n totalBytes: number\n maxBytes: number\n files: VerificationArtifactFile[]\n missingRoles: VerificationArtifactRole[]\n searched: Record<VerificationArtifactRole, string[]>\n}\n\nexport interface LoadedVerificationArtifacts {\n manifest: VerificationArtifactManifest\n outcome: VerificationOutcome\n files: Array<VerificationArtifactFile & { content: string }>\n}\n\nconst SEARCHED_ARTIFACTS: Record<VerificationArtifactRole, string[]> = {\n 'final-test-output': ['panes/post-test.txt', 'sessions/tests.log', 'test_output.txt'],\n 'final-result': ['results.json', 'result.json', 'report.json', '*_result.json'],\n 'final-metrics': ['*_metrics.json'],\n}\n\nconst REQUIRED_ROLES = new Set<VerificationArtifactRole>(['final-result'])\n\nconst UTF8 = new TextDecoder('utf-8', { fatal: true })\n\nexport async function loadCodeTraceVerificationArtifacts(options: {\n artifactDir: string\n row: CodeTraceBenchRow\n maxBytes?: number\n}): Promise<LoadedVerificationArtifacts> {\n const maxBytes = positiveInteger(\n options.maxBytes ?? DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES,\n 'max verification artifact bytes',\n )\n const sourceRelativePath = nonEmpty(\n options.row.source_relpath,\n `CodeTraceBench '${options.row.traj_id}' source_relpath`,\n )\n const artifactRoot = await realpath(resolve(options.artifactDir))\n const caseDirectoriesSearched = [\n resolve(artifactRoot, options.row.traj_id, sourceRelativePath),\n resolve(artifactRoot, sourceRelativePath),\n ].filter((path, index, paths) => paths.indexOf(path) === index)\n for (const path of caseDirectoriesSearched) {\n assertContained(artifactRoot, path, sourceRelativePath)\n }\n const existingCaseDirectories = new Set<string>()\n for (const path of caseDirectoriesSearched) {\n try {\n const canonicalPath = await realpath(path)\n assertContained(artifactRoot, canonicalPath, sourceRelativePath)\n const metadata = await stat(canonicalPath)\n if (!metadata.isDirectory()) {\n throw new TypeError(\n `CodeTraceBench '${options.row.traj_id}' artifact case path is not a directory: ${canonicalPath}`,\n )\n }\n existingCaseDirectories.add(canonicalPath)\n } catch (error) {\n if (!isMissing(error)) throw error\n }\n }\n if (existingCaseDirectories.size === 0) {\n return missingArtifacts(\n options.row.traj_id,\n caseDirectoriesSearched[0]!,\n caseDirectoriesSearched,\n maxBytes,\n )\n }\n if (existingCaseDirectories.size > 1) {\n throw new Error(\n `CodeTraceBench '${options.row.traj_id}' artifact directory is ambiguous: ${[...existingCaseDirectories].join(', ')}`,\n )\n }\n const [caseDirectory] = existingCaseDirectories\n\n const candidates = await artifactCandidates(caseDirectory!)\n const files: LoadedVerificationArtifacts['files'] = []\n let totalBytes = 0\n for (const candidate of candidates) {\n const snapshot = await readArtifactSnapshot({\n artifactRoot,\n candidatePath: candidate.path,\n relativePath: candidate.relativePath,\n traceId: options.row.traj_id,\n totalBytes,\n maxBytes,\n })\n const { bytes, canonicalPath } = snapshot\n totalBytes += bytes.byteLength\n let content: string\n try {\n content = UTF8.decode(bytes)\n } catch {\n throw new TypeError(\n `CodeTraceBench '${options.row.traj_id}' verification artifact is not UTF-8 text: ${canonicalPath}`,\n )\n }\n if (!content.trim()) {\n throw new Error(\n `CodeTraceBench '${options.row.traj_id}' verification artifact is empty: ${canonicalPath}`,\n )\n }\n const relativePath = candidate.relativePath\n files.push({\n role: candidate.role,\n path: canonicalPath,\n relativePath,\n sha256: sha256Digest(bytes),\n bytes: bytes.byteLength,\n spanId: verificationSpanId(candidate.role, relativePath),\n content,\n })\n }\n\n const roles = new Set(files.map((file) => file.role))\n const missingRoles = (Object.keys(SEARCHED_ARTIFACTS) as VerificationArtifactRole[]).filter(\n (role) => !roles.has(role),\n )\n const hasFinalVerification = [...REQUIRED_ROLES].every((role) => roles.has(role))\n const outcome = hasFinalVerification\n ? loadVerificationOutcome(\n files\n .filter((file) => file.role === 'final-result')\n .map((file) => ({ relativePath: file.relativePath, content: file.content })),\n options.row,\n )\n : unavailableOutcome('missing-result')\n const outcomeSpanId = verificationOutcomeSpanId(options.row.traj_id, outcome)\n return {\n manifest: {\n traceId: options.row.traj_id,\n status: hasFinalVerification ? 'present' : 'missing',\n outcome,\n outcomeSpanId,\n caseDirectory: caseDirectory!,\n caseDirectoriesSearched,\n totalBytes,\n maxBytes,\n files: files.map(({ content: _content, ...file }) => file),\n missingRoles,\n searched: searchedArtifacts(),\n },\n outcome,\n files,\n }\n}\n\nexport function appendVerificationArtifactsToOtlp(\n otlpText: string,\n traceId: string,\n artifacts: LoadedVerificationArtifacts,\n afterTimestamp: string,\n): string {\n if (!otlpText.trim()) throw new Error(`trace '${traceId}' OTLP input is empty`)\n if (artifacts.manifest.traceId !== traceId) {\n throw new Error(\n `verification artifacts for trace '${artifacts.manifest.traceId}' cannot be attached to '${traceId}'`,\n )\n }\n if (!artifacts.outcome || !artifacts.manifest.outcomeSpanId) {\n throw new Error(`trace '${traceId}' has no final verification artifacts to attach`)\n }\n const afterMs = Date.parse(afterTimestamp)\n if (!Number.isFinite(afterMs)) {\n throw new TypeError(`trace '${traceId}' latest timestamp is invalid: ${afterTimestamp}`)\n }\n const outcome = artifacts.outcome\n const outcomeLine = JSON.stringify({\n trace_id: traceId,\n span_id: artifacts.manifest.outcomeSpanId,\n parent_span_id: null,\n name: `final verification outcome: ${outcome.status}`,\n start_time: timestampAfter(afterMs, 1, traceId),\n end_time: timestampAfter(afterMs, 2, traceId),\n status: {\n code:\n outcome.status === 'passed'\n ? 'STATUS_CODE_OK'\n : outcome.status === 'failed'\n ? 'STATUS_CODE_ERROR'\n : 'STATUS_CODE_UNSET',\n },\n resource: {\n attributes: {\n 'service.name': 'agent-eval-public-benchmark',\n },\n },\n attributes: {\n 'openinference.span.kind': 'EVALUATOR',\n 'benchmark.evidence.role': 'final-verification',\n 'benchmark.verification.outcome': outcome.status,\n 'benchmark.verification.passed_check_count': outcome.passedCheckCount,\n 'benchmark.verification.failed_check_count': outcome.failedCheckCount,\n 'benchmark.verification.passed_checks': JSON.stringify(outcome.passedChecks),\n 'benchmark.verification.failed_checks': JSON.stringify(outcome.failedChecks),\n 'benchmark.verification.sources': JSON.stringify(outcome.sources),\n ...(outcome.reason ? { 'benchmark.verification.reason': outcome.reason } : {}),\n ...(outcome.parseError\n ? { 'benchmark.verification.parse_error': JSON.stringify(outcome.parseError) }\n : {}),\n },\n })\n const artifactLines = artifacts.files\n .filter((artifact) => artifact.role === 'final-test-output')\n .map((artifact, index) =>\n JSON.stringify({\n trace_id: traceId,\n span_id: artifact.spanId,\n parent_span_id: null,\n name: `final verification artifact: ${artifact.relativePath}`,\n start_time: timestampAfter(afterMs, index * 2 + 3, traceId),\n end_time: timestampAfter(afterMs, index * 2 + 4, traceId),\n status: { code: 'STATUS_CODE_UNSET' },\n resource: {\n attributes: {\n 'service.name': 'agent-eval-public-benchmark',\n },\n },\n attributes: {\n 'openinference.span.kind': 'EVALUATOR',\n 'benchmark.evidence.role': 'final-verification-artifact',\n 'benchmark.verification.outcome': outcome.status,\n 'artifact.role': artifact.role,\n 'artifact.path': artifact.relativePath,\n 'artifact.sha256': artifact.sha256,\n 'artifact.bytes': artifact.bytes,\n 'artifact.content': artifact.content,\n },\n }),\n )\n return `${otlpText.trimEnd()}\\n${[outcomeLine, ...artifactLines].join('\\n')}\\n`\n}\n\nfunction timestampAfter(afterMs: number, offsetMs: number, traceId: string): string {\n const date = new Date(afterMs + offsetMs)\n if (!Number.isFinite(date.getTime())) {\n throw new RangeError(`trace '${traceId}' cannot place final verification after its latest span`)\n }\n return date.toISOString()\n}\n\nexport function sha256Digest(value: string | NodeJS.ArrayBufferView): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nasync function readArtifactSnapshot(options: {\n artifactRoot: string\n candidatePath: string\n relativePath: string\n traceId: string\n totalBytes: number\n maxBytes: number\n}): Promise<{ canonicalPath: string; bytes: Buffer }> {\n const safeOpenFlags =\n constants.O_RDONLY |\n (process.platform === 'win32' ? 0 : constants.O_NOFOLLOW | constants.O_NONBLOCK)\n let handle: FileHandle\n try {\n handle = await open(options.candidatePath, safeOpenFlags)\n } catch (error) {\n if (isNodeError(error, 'ELOOP')) {\n throw new Error(\n `CodeTraceBench '${options.traceId}' verification artifact must not be a symbolic link: ${options.relativePath}`,\n )\n }\n throw error\n }\n\n try {\n const before = await handle.stat()\n if (!before.isFile()) {\n throw new TypeError(\n `CodeTraceBench '${options.traceId}' verification artifact is not a regular file: ${options.relativePath}`,\n )\n }\n const bytes = checkedFileSize(before.size, options)\n const descriptorPath = await openedDescriptorPath(handle.fd)\n if (descriptorPath !== null) {\n assertContained(options.artifactRoot, descriptorPath, options.relativePath)\n }\n\n const canonicalPath = await realpath(options.candidatePath)\n assertContained(options.artifactRoot, canonicalPath, options.relativePath)\n const current = await stat(canonicalPath)\n if (!sameFile(before, current)) {\n throw changedArtifact(options.traceId, options.relativePath)\n }\n\n const content = Buffer.allocUnsafe(bytes)\n let offset = 0\n while (offset < content.byteLength) {\n const { bytesRead } = await handle.read(content, offset, content.byteLength - offset, offset)\n if (bytesRead === 0) break\n offset += bytesRead\n }\n const eofProbe = Buffer.allocUnsafe(1)\n const { bytesRead: trailingBytes } = await handle.read(\n eofProbe,\n 0,\n eofProbe.byteLength,\n content.byteLength,\n )\n const after = await handle.stat()\n if (offset !== content.byteLength || trailingBytes !== 0 || !sameSnapshot(before, after)) {\n throw changedArtifact(options.traceId, options.relativePath)\n }\n return { canonicalPath, bytes: content }\n } finally {\n await handle.close()\n }\n}\n\nfunction checkedFileSize(\n bytes: number,\n options: {\n traceId: string\n relativePath: string\n totalBytes: number\n maxBytes: number\n },\n): number {\n if (!Number.isSafeInteger(bytes) || bytes < 0) {\n throw new RangeError(\n `CodeTraceBench '${options.traceId}' verification artifact has an invalid byte size: ${options.relativePath}`,\n )\n }\n if (bytes > options.maxBytes) {\n throw new RangeError(\n `CodeTraceBench '${options.traceId}' verification artifact '${options.relativePath}' requires ${bytes} bytes, over the ${options.maxBytes}-byte per-file limit`,\n )\n }\n if (options.totalBytes > options.maxBytes - bytes) {\n throw new RangeError(\n `CodeTraceBench '${options.traceId}' verification artifacts require ${options.totalBytes + bytes} bytes, over the ${options.maxBytes}-byte cumulative limit`,\n )\n }\n return bytes\n}\n\nasync function openedDescriptorPath(fileDescriptor: number): Promise<string | null> {\n if (process.platform !== 'linux') return null\n try {\n return await realpath(`/proc/self/fd/${fileDescriptor}`)\n } catch (error) {\n if (\n isNodeError(error, 'ENOENT') ||\n isNodeError(error, 'ENOTDIR') ||\n isNodeError(error, 'EACCES')\n ) {\n return null\n }\n throw error\n }\n}\n\nfunction sameFile(left: Stats, right: Stats): boolean {\n return (\n left.isFile() &&\n right.isFile() &&\n left.dev === right.dev &&\n left.ino === right.ino &&\n left.size === right.size\n )\n}\n\nfunction sameSnapshot(left: Stats, right: Stats): boolean {\n return (\n sameFile(left, right) &&\n left.mode === right.mode &&\n left.mtimeMs === right.mtimeMs &&\n left.ctimeMs === right.ctimeMs\n )\n}\n\nfunction changedArtifact(traceId: string, relativePath: string): Error {\n return new Error(\n `CodeTraceBench '${traceId}' verification artifact changed while being read: ${relativePath}`,\n )\n}\n\nasync function artifactCandidates(\n caseDirectory: string,\n): Promise<Array<{ role: VerificationArtifactRole; path: string; relativePath: string }>> {\n const entries = await readdir(caseDirectory, { withFileTypes: true })\n const rootFiles = entries\n .filter((entry) => entry.isFile() || entry.isSymbolicLink())\n .map((entry) => entry.name)\n const testOutput = await firstExisting(caseDirectory, SEARCHED_ARTIFACTS['final-test-output'])\n const finalResults = [\n ...SEARCHED_ARTIFACTS['final-result']\n .filter((name) => !name.includes('*'))\n .map((name) => resolve(caseDirectory, name)),\n ...rootFiles\n .filter((name) => name.endsWith('_result.json'))\n .map((name) => resolve(caseDirectory, name)),\n ]\n const finalMetrics = rootFiles\n .filter((name) => name.endsWith('_metrics.json'))\n .map((name) => resolve(caseDirectory, name))\n\n const candidates = [\n ...testOutput.map((path) => candidate('final-test-output', caseDirectory, path)),\n ...(await existing(finalResults)).map((path) => candidate('final-result', caseDirectory, path)),\n ...(await existing(finalMetrics)).map((path) =>\n candidate('final-metrics', caseDirectory, path),\n ),\n ]\n const seen = new Set<string>()\n return candidates\n .filter((entry) => {\n if (seen.has(entry.path)) return false\n seen.add(entry.path)\n return true\n })\n .sort(\n (left, right) =>\n artifactRoleOrder(left.role) - artifactRoleOrder(right.role) ||\n left.relativePath.localeCompare(right.relativePath),\n )\n}\n\nasync function firstExisting(\n caseDirectory: string,\n candidates: readonly string[],\n): Promise<string[]> {\n for (const relativePath of candidates) {\n const path = resolve(caseDirectory, relativePath)\n if (await isFile(path)) return [path]\n }\n return []\n}\n\nasync function existing(paths: readonly string[]): Promise<string[]> {\n const out: string[] = []\n for (const path of paths) {\n if (await isFile(path)) out.push(path)\n }\n return out\n}\n\nasync function isFile(path: string): Promise<boolean> {\n try {\n return (await stat(path)).isFile()\n } catch (error) {\n if (isMissing(error)) return false\n throw error\n }\n}\n\nfunction candidate(\n role: VerificationArtifactRole,\n caseDirectory: string,\n path: string,\n): { role: VerificationArtifactRole; path: string; relativePath: string } {\n return { role, path, relativePath: slashRelative(caseDirectory, path) }\n}\n\nfunction missingArtifacts(\n traceId: string,\n caseDirectory: string,\n caseDirectoriesSearched: string[],\n maxBytes: number,\n): LoadedVerificationArtifacts {\n const outcome = unavailableOutcome('missing-result')\n return {\n manifest: {\n traceId,\n status: 'missing',\n outcome,\n outcomeSpanId: verificationOutcomeSpanId(traceId, outcome),\n caseDirectory,\n caseDirectoriesSearched,\n totalBytes: 0,\n maxBytes,\n files: [],\n missingRoles: Object.keys(SEARCHED_ARTIFACTS) as VerificationArtifactRole[],\n searched: searchedArtifacts(),\n },\n outcome,\n files: [],\n }\n}\n\nfunction verificationOutcomeSpanId(traceId: string, outcome: VerificationOutcome): string {\n return `benchmark-verification-outcome-${sha256Digest(\n `${traceId}\\u0000${JSON.stringify(outcome.sources)}\\u0000${outcome.status}`,\n ).slice(0, 16)}`\n}\n\nfunction unavailableOutcome(\n reason: NonNullable<VerificationOutcome['reason']>,\n): VerificationOutcome {\n return {\n status: 'unavailable',\n reason,\n sources: [],\n passedCheckCount: 0,\n failedCheckCount: 0,\n passedChecks: [],\n failedChecks: [],\n }\n}\n\nfunction loadVerificationOutcome(\n files: Parameters<typeof parseVerificationOutcome>[0],\n row: CodeTraceBenchRow,\n): VerificationOutcome {\n try {\n const outcome = parseVerificationOutcome(files)\n if (outcome.status === 'unavailable' || typeof row.solved !== 'boolean') {\n return outcome\n }\n const labelStatus = row.solved ? 'passed' : 'failed'\n if (outcome.status === labelStatus) {\n return outcome\n }\n return {\n ...outcome,\n status: 'unavailable',\n reason: 'result-label-disagreement',\n parseError: {\n class: 'ResultLabelDisagreementError',\n message: `CodeTraceBench '${row.traj_id}' solved=${row.solved} disagrees with parsed final verification status '${outcome.status}' from ${outcome.sources\n .map((source) => `${source.path}=${source.status}`)\n .join(', ')}`,\n },\n }\n } catch (error) {\n return {\n ...unavailableOutcome('result-parse-error'),\n parseError: {\n class: error instanceof Error ? error.constructor.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n },\n }\n }\n}\n\nfunction verificationSpanId(role: VerificationArtifactRole, relativePath: string): string {\n return `benchmark-verification-${sha256Digest(`${role}\\u0000${relativePath}`).slice(0, 16)}`\n}\n\nfunction artifactRoleOrder(role: VerificationArtifactRole): number {\n return role === 'final-test-output' ? 0 : role === 'final-result' ? 1 : 2\n}\n\nfunction assertContained(root: string, candidate: string, source: string): void {\n const rel = relative(root, candidate)\n if (isAbsolute(rel) || rel === '..' || rel.startsWith(`..${sep}`)) {\n throw new Error(`verification artifact path escapes --artifact-dir: ${source}`)\n }\n}\n\nfunction searchedArtifacts(): Record<VerificationArtifactRole, string[]> {\n return {\n 'final-test-output': [...SEARCHED_ARTIFACTS['final-test-output']],\n 'final-result': [...SEARCHED_ARTIFACTS['final-result']],\n 'final-metrics': [...SEARCHED_ARTIFACTS['final-metrics']],\n }\n}\n\nfunction slashRelative(root: string, path: string): string {\n return relative(root, path).split(sep).join('/')\n}\n\nfunction nonEmpty(value: unknown, field: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new TypeError(`${field} must be a non-empty string`)\n }\n return value.trim()\n}\n\nfunction positiveInteger(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 isMissing(error: unknown): boolean {\n return isNodeError(error, 'ENOENT')\n}\n\nfunction isNodeError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && 'code' in error && error.code === code\n}\n","import { MAX_ASSISTANT_STEP_EVIDENCE_EXCERPT_CHARACTERS } from './benchmark-evidence-validation'\nimport type { PublicAnalystBenchmarkDataset } from './benchmark-public-types'\nimport { sha256Digest } from './benchmark-verification-artifacts'\n\n/** Widest contiguous failure block a model may report. The published corpus's\n * widest labeled block is 8 steps and its widest stage span is 9, so this bound\n * never binds honest enumeration; it caps how far one over-wide block can push\n * unlabeled steps into the precision denominator. */\nexport const MAX_INCORRECT_BLOCK_STEPS = 12\n\n/** Most blocks a model may report for one trajectory. The published corpus's\n * densest case carries 4 disjoint labeled blocks. Together with the per-block\n * cap this bounds one case at 192 predicted steps without a second ceiling. */\nexport const MAX_INCORRECT_BLOCKS = 16\n\nexport const TRACE_PROJECTION_ATTRIBUTE_BYTE_CAPS = [\n 4_096, 2_048, 1_024, 512, 256, 128, 64,\n] as const\n\nexport const CODE_TRACE_BENCH_ANALYST_PROMPT = `Analyze exactly one coding-agent trajectory and its attached final verification.\nYour task is the CodeTraceBench incorrect-step task: identify every incorrect step, defined as a wrong state-changing intervention given the evidence — a mislocalized edit, a wrong hypothesis that drives an action, a regression, an irrelevant change, or an incorrect dependency or configuration choice.\nIf the final verification failed, the trajectory MUST contain at least one incorrect step. Never return an empty findings array on a failing trajectory; trace backward until you find the root cause.\nWork backward, the way this benchmark was annotated, never by scanning forward for suspicious steps: start from the final verification outcome or the latest observed failure evidence, identify the immediately preceding step whose action or output produced that observed error, then recursively ask which earlier decision led to each intermediate failure, until the preceding steps contain no error or the cause is unrelated to the trajectory's own decisions.\nEach backward chain terminates at an error-critical step — the earliest decision that triggered the downstream cascade — and that step is the block's first_step: the step that committed the mistake, not the step that planned it and not a later step that repeats it.\nA block is a maximal contiguous sequence of strictly incorrect steps. A step belongs in the block ONLY if it introduces, propagates, or compounds the error. \nDo NOT include steps that merely \"act on\", diagnose, or react to the error. A diagnostic command, a test run exposing the bug, or a correct exploratory read is a CORRECT step. \nIf an incorrect step is followed by a correct diagnostic step and then another incorrect step, you MUST emit two separate blocks. NEVER bridge correct steps by grouping them into a single block with incorrect steps. Over-blocking drastically hurts your precision.\nAfter identifying first_step, extend last_step forward ONLY through consecutive steps that independently introduce, propagate, or compound the mistake. A cascade of repeated failed attempts at the same wrong approach is one maximal block, provided EVERY step is independently incorrect.\nDo not end a block merely because the agent tried a variation of the same wrong approach; a variation that still carries the error stays inside the block.\nA partially correct or ambiguous fix still counts as incorrect; the block ends only at the first step free of the error — a clean diagnostic read, the corrective action that closes the issue and needs no further rework, or a genuine abandonment of the wrong approach.\nBlock extent follows the traced chain and this forward extension, nothing else.\nReport each failure block as exactly one finding whose first_step is the block's first incorrect step and whose last_step is its last, covering every consecutive step between them.\nEvery step inside a block is scored on its own: naming a correct step costs exactly as much as missing an incorrect one, and naming only the first step of a longer block forfeits every unnamed step. Because of this, carefully verify every step between first_step and last_step. Only include steps that introduce, propagate, or compound the error.\nReport blocks separated by at least one correct step as separate findings, and never let two blocks overlap. If there are multiple separate failure cascades, emit a separate finding for each one.\nPrefer anchored blocks: a block whose chain traces back from observed failure evidence — a failing command or verification, an error observation, a regression, or, on a solved trajectory, a later step that reverts or supersedes it — outranks one without.\nWhen an action is clearly wrong on its own evidence but you cannot trace such an anchor, report the block anyway with proportionally lower confidence.\nA solved trajectory still carries every mistake made along the way: inspect its final patching and verification stages for a state-changing action that a later step reverted, superseded, or corrected — a wrong edit just before the final fix is incorrect even when every test ends green.\nBefore emitting a candidate block, check its boundaries.\nNeighbor check: ask whether the accusation fits one step earlier (the decision rather than its consequence) or one step later (the next step still acts on or reworks the same error) better than where you placed it, and move the boundary when it does; a boundary off by one step scores zero at that step.\nCompleteness check: a block must cover the maximal contiguous sequence of incorrect steps. If an agent fails at step 10, tries to fix it at 11, fails, and tries again at 12 and 13, all four steps are incorrect and must be included in the block. Never truncate a cascade. If you miss the later steps of a cascade, your recall drops to zero for them.\nCounterfactual check: ask which step's correct execution would have made the downstream failure or rework disappear, and move first_step onto that step; use this check only to move a boundary, never to delete a block.\nWidth check: inspect the step immediately before first_step and the step immediately after last_step; when either neighbor commits to, compounds, or propagates the same mistake, it belongs inside the block — move that boundary outward and repeat until both neighbors are free of the error.\nFor each block you keep, name as consequence_step the step number whose action or observation shows the damage — a failing command, a wrong file state, a repeated failure, or rework the agent had to do because of this block; that step is the block's own last step when its observation already shows the damage, and a later step otherwise.\nWhen you cannot name that step number from the trace you were given, drop the block; a plausible story about why a step looks wrong is not evidence that it was.\nA passing final verification is not evidence that a block caused nothing, and a failing final verification is not evidence that any particular block caused it.\nFor every block, decide whether the agent escaped the failure.\nMark escape_status \"escaped\" only when you can name the single later step that fully reversed the block, the agent needed no other step to recover, and nothing after that step revisits the same file, command, or hypothesis; write that step number in the rationale. If the agent required multiple steps to fix the issue, or if you are unsure, it is not escaped.\nMark escape_status \"unescaped\" in every other case, including whenever you are unsure.\nA passing final verification never makes a block escaped.\nDo not label a diagnostic probe or test run merely because its output exposes an earlier defect.\nDo not label a redundant but correct read or search; CodeTraceBench scores unuseful steps separately, and this run scores incorrect steps only. Never include a correct step in a block just to bridge two incorrect steps; instead, emit two separate blocks.\nDo not label a step solely because final verification failed.\nWhen final verification is unavailable, trace backward from the latest failure evidence inside the trajectory itself.\nEvery step in a reported block MUST be the positive integer n from an existing assistant LLM span named step-<n>.\nNever select an EVALUATOR, TOOL, CHAIN, final-verification, benchmark-verification, or message-<n> span.\nBefore emitting a finding, inspect every covered span's attributes.content and describe only the actions shown there.\nReport at most 16 blocks and at most 12 steps in one block; when more candidates than that exist, report the ones whose chains carry the clearest downstream evidence.\nWhen the trajectory has no incorrect steps — its final verification passed and the final-stage sweep found no reverted, superseded, or corrected action — return an empty findings array.`\n\nconst AGENT_RX_PROMPT = `Analyze exactly one failed agent trajectory.\nFind the first unrecoverable critical failure, not every later symptom.\nInspect the complete supplied trace data.\nEmit zero findings only when the trace does not contain enough evidence.\nOtherwise emit exactly one finding.\nIts category MUST be exactly one of:\ninstruction-plan-adherence-failure\ninvention-of-new-information\ninvalid-invocation\nmisinterpretation-of-tool-output-handoff-failure\nintent-plan-misalignment\nunderspecified-user-intent\nintent-not-supported\nguardrails-triggered\nsystem-failure\ninconclusive\nIts step is the positive integer n from the first unrecoverable assistant span named step-<n>.`\n\nconst AGENT_RX_JSON_CONTRACT = `Each finding must contain only:\n- \"step\": a positive integer matching an existing assistant LLM span named step-<n>\n- \"severity\": \"critical\", \"high\", \"medium\", \"low\", or \"info\"\n- \"claim\": one sentence\n- \"confidence\": a number from 0 through 1\n- optional \"rationale\" and \"recommended_action\" strings\n- \"category\": one allowed failure category listed above`\n\nconst CODE_TRACE_JSON_CONTRACT = `Each finding is one contiguous failure block and must contain only:\n- \"first_step\": a positive integer, the block's first incorrect step, matching an existing assistant LLM span named step-<n>\n- \"last_step\": a positive integer >= first_step, the block's last incorrect step; every step from first_step through last_step must be an existing assistant LLM span, and a block spans at most ${MAX_INCORRECT_BLOCK_STEPS} steps\n- \"consequence_step\": a positive integer >= first_step, the step whose action or following observation shows the damage this block caused; it may sit inside the block when the damage is already visible there\n- \"escape_status\": \"escaped\" only when one single later step fully reversed the block and nothing afterwards revisits it, \"unescaped\" otherwise and whenever you are unsure\n- \"severity\": \"critical\", \"high\", \"medium\", \"low\", or \"info\"\n- \"claim\": one sentence describing the block's failure\n- \"confidence\": a number from 0 through 1\n- optional \"rationale\" and \"recommended_action\" strings`\n\nconst AGENT_RX_RLM_CONTRACT = `Use the trace tools to inspect the action and its following observation.\nEmit exactly one finding whose subject is exactly one of the allowed failure categories.\nCite exactly one assistant span named step-<n> as trace://<URL-encoded-trace-id>/span/step-<n>.\nThe excerpt must quote the assistant action exactly.`\n\nconst CODE_TRACE_RLM_CONTRACT = `Use the trace tools rather than asking for the whole trajectory in the prompt.\nKeep retrieved trace objects in Python variables.\nNever print an entire trace, full source file, or more than 12000 characters in one iteration.\nRead the final verification and the latest failure evidence first, then build a compact table of assistant step ids, actions, and following observations.\nTrace backward from that evidence with viewSpans or searchSpan, confirming each candidate step's own action content, instead of repeatedly printing the table.\nThis runner emits no JSON fields, so the block is encoded in the finding's subject.\nOnly findings_json is scored; your prose answer is ignored, so every incorrect block you identify must appear as a finding, never only in the answer.\nEmit exactly one finding per contiguous failure block.\nSet the finding's subject to incorrect-steps-<first_step>-<last_step>-<escape_status>-consequence-<consequence_step>, using the same four values the task defines; for a block covering only step 7 that the agent never escaped and whose damage shows at step 9, the subject is incorrect-steps-7-7-unescaped-consequence-9.\nThe runner expands the block to one scored step per member and builds every scored citation itself.\nCite the block's first step and its last step as trace://<URL-encoded-trace-id>/span/step-<n>, each excerpt an exact quote from that step's own action content.\nGive the rationale as the concrete downstream evidence visible at the consequence step.\nSubmit as soon as every candidate failure block has a supported verdict.\nReturn no finding for a clean trajectory.`\n\n/** One-shot JSON transport prompt for the direct runner. */\nexport function publicBenchmarkSystemPrompt(dataset: PublicAnalystBenchmarkDataset): string {\n const fieldContract = dataset === 'agentrx' ? AGENT_RX_JSON_CONTRACT : CODE_TRACE_JSON_CONTRACT\n return `${publicBenchmarkTaskPrompt(dataset)}\n\n${fieldContract}\n\nReturn exactly one JSON object with:\n- \"report\": a concise evidence-based explanation, at most 4000 characters\n- \"findings\": the strict finding array\nUse an empty findings array when the trace does not support a finding.\nDo not return a bare array, markdown, trace URIs, copied excerpts, or fields not listed above.\nThe runner constructs exact trace URIs and action previews from each selected step.`\n}\n\n/** Tool-loop prompt for the recursive runner. Same task, subject-encoded block. */\nexport function publicBenchmarkRlmInstructions(dataset: PublicAnalystBenchmarkDataset): string {\n const outputContract = dataset === 'agentrx' ? AGENT_RX_RLM_CONTRACT : CODE_TRACE_RLM_CONTRACT\n return `${publicBenchmarkTaskPrompt(dataset)}\n${outputContract}`\n}\n\nfunction publicBenchmarkTaskPrompt(dataset: PublicAnalystBenchmarkDataset): string {\n return dataset === 'agentrx' ? AGENT_RX_PROMPT : CODE_TRACE_BENCH_ANALYST_PROMPT\n}\n\n/** Digest of every prompt a runner can send plus the shared transport limits.\n * Both runner contracts are hashed so an edit to either one changes the digest\n * a run records, whichever runner executed. */\nexport function publicBenchmarkProtocolSha256(dataset: PublicAnalystBenchmarkDataset): string {\n return sha256Digest(\n JSON.stringify({\n dataset,\n systemPrompt: publicBenchmarkSystemPrompt(dataset),\n rlmInstructions: publicBenchmarkRlmInstructions(dataset),\n transport: {\n attempts: 1,\n jsonMode: true,\n thinking: 'disabled',\n },\n blockLimits:\n dataset === 'agentrx'\n ? null\n : {\n maxBlocks: MAX_INCORRECT_BLOCKS,\n maxBlockSteps: MAX_INCORRECT_BLOCK_STEPS,\n },\n traceProjectionAttributeByteCaps: TRACE_PROJECTION_ATTRIBUTE_BYTE_CAPS,\n evidence: {\n location: 'model-selected-positive-integer-assistant-step',\n uri: 'deterministic-trace-uri',\n excerpt: `exact-action-prefix-${MAX_ASSISTANT_STEP_EVIDENCE_EXCERPT_CHARACTERS}`,\n },\n }),\n )\n}\n","import { readFileSync } from 'node:fs'\nimport { publicBenchmarkProtocolSha256 } from './benchmark-public-prompt'\nimport type {\n AnalystInstructionsOverride,\n PublicAnalystBenchmarkDataset,\n} from './benchmark-public-types'\nimport { sha256Digest } from './benchmark-verification-artifacts'\n\n/** Build an override from instruction text. Blank text is a caller error. */\nexport function analystInstructionsOverrideFromText(text: string): AnalystInstructionsOverride {\n if (typeof text !== 'string' || !text.trim()) {\n throw new Error('analyst instructions override must contain non-empty instruction text')\n }\n return { text, sha256: sha256Digest(text) }\n}\n\n/** Read override instructions from a file. Any read failure is fatal. */\nexport function readAnalystInstructionsOverride(path: string): AnalystInstructionsOverride {\n let text: string\n try {\n text = readFileSync(path, 'utf8')\n } catch (error) {\n throw new Error(\n `cannot read --instructions-file '${path}': ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n if (!text.trim()) {\n throw new Error(`--instructions-file '${path}' is empty; refusing to run without instructions`)\n }\n return analystInstructionsOverrideFromText(text)\n}\n\n/**\n * Protocol digest of the run as executed.\n *\n * Without an override this is exactly `publicBenchmarkProtocolSha256(dataset)`,\n * so stock runs stay byte-identical to runs recorded before the override\n * existed. With an override the digest binds the stock protocol digest (which\n * covers both shipped prompts, including the abstention fallback's direct\n * prompt) to the exact override text, so the recorded digest always hashes the\n * instructions that actually ran.\n */\nexport function effectiveAnalystProtocolSha256(\n dataset: PublicAnalystBenchmarkDataset,\n override?: Pick<AnalystInstructionsOverride, 'sha256'>,\n): string {\n const stock = publicBenchmarkProtocolSha256(dataset)\n if (!override) return stock\n return sha256Digest(\n JSON.stringify({\n kind: 'analyst-instructions-override-protocol',\n dataset,\n stockProtocolSha256: stock,\n rlmInstructionsSha256: override.sha256,\n }),\n )\n}\n","import { randomUUID } from 'node:crypto'\nimport { constants } from 'node:fs'\nimport { link, lstat, mkdir, open, readFile, unlink } from 'node:fs/promises'\nimport { arch, platform } from 'node:os'\nimport { dirname, resolve } from 'node:path'\nimport { resolveExternalOptimizerProcessLimits } from '../campaign/external-optimizer-contracts'\nimport { resolveModelPricing } from '../metrics'\nimport type { AnalystBenchmarkObservation } from './benchmark'\nimport {\n ANALYST_BENCHMARK_COST_LEDGER_FILE,\n ANALYST_BENCHMARK_LOCAL_RECEIPT_FILE,\n ANALYST_BENCHMARK_MANIFEST_FILE,\n ANALYST_BENCHMARK_OBSERVATIONS_FILE,\n type AnalystBenchmarkLocalRunReceipt,\n type AnalystBenchmarkProgressRow,\n type AnalystBenchmarkRunIdentity,\n type AnalystBenchmarkRunManifest,\n assertAnalystBenchmarkObservation,\n assertExactKeys,\n canonicalJson,\n digestCanonical,\n isRecord,\n isSha256,\n observationKey,\n parseJson,\n} from './benchmark-command-artifact'\nimport {\n ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256,\n ANALYST_BENCHMARK_IMPLEMENTATION_SHA256,\n} from './benchmark-implementation'\nimport { effectiveAnalystProtocolSha256 } from './benchmark-instructions-override'\nimport type {\n PreparedPublicAnalystBenchmark,\n PublicAnalystBenchmarkDataset,\n PublicAnalystBenchmarkModelConfig,\n} from './benchmark-real-model'\n\nexport interface AnalystBenchmarkOutputPaths {\n directory: string\n initializationComplete: string\n manifest: string\n observations: string\n costLedger: string\n modelResponses: string\n localReceipt: string\n result: string\n report: string\n}\n\nexport const ANALYST_BENCHMARK_INITIALIZATION_COMPLETE_FILE = 'initialization-complete.json'\n\nexport interface AnalystBenchmarkProgress {\n observations: AnalystBenchmarkObservation[]\n nextSequence: number\n previousRowSha256: string | null\n}\n\ninterface AnalystBenchmarkPersistenceConfig {\n dataset: PublicAnalystBenchmarkDataset\n analyst: string\n labelsPath: string\n traceDir: string\n artifactDir?: string\n revision: string\n split: string\n model: PublicAnalystBenchmarkModelConfig\n limit: number\n seed: number\n concurrency: number\n repetitions: number\n rlmSamples: number\n maxCostUsd: number\n maxArtifactBytes: number\n modelOwnerModule: string\n command: string\n}\n\nexport async function openOutputDirectory(\n outDir: string,\n resume: boolean,\n): Promise<AnalystBenchmarkOutputPaths> {\n const directory = resolve(outDir)\n if (resume) {\n let outputStat: Awaited<ReturnType<typeof lstat>>\n try {\n outputStat = await lstat(directory)\n } catch (error) {\n if (isNodeError(error, 'ENOENT')) {\n throw new Error(`cannot resume missing benchmark output directory: ${directory}`)\n }\n throw error\n }\n if (!outputStat.isDirectory() || outputStat.isSymbolicLink()) {\n throw new Error(`benchmark output must be a real directory: ${directory}`)\n }\n } else {\n await mkdir(dirname(directory), { recursive: true })\n try {\n await mkdir(directory)\n } catch (error) {\n if (isNodeError(error, 'EEXIST')) {\n throw new Error(`refusing to use existing benchmark output directory: ${directory}`)\n }\n throw error\n }\n await syncDirectory(dirname(directory))\n }\n return {\n directory,\n initializationComplete: resolve(directory, ANALYST_BENCHMARK_INITIALIZATION_COMPLETE_FILE),\n manifest: resolve(directory, ANALYST_BENCHMARK_MANIFEST_FILE),\n observations: resolve(directory, ANALYST_BENCHMARK_OBSERVATIONS_FILE),\n costLedger: resolve(directory, ANALYST_BENCHMARK_COST_LEDGER_FILE),\n modelResponses: resolve(directory, 'model-responses'),\n localReceipt: resolve(directory, ANALYST_BENCHMARK_LOCAL_RECEIPT_FILE),\n result: resolve(directory, 'result.json'),\n report: resolve(directory, 'report.md'),\n }\n}\n\nexport async function prepareOutputLockPath(outDir: string): Promise<string> {\n const directory = resolve(outDir)\n await mkdir(dirname(directory), { recursive: true })\n return `${directory}.lock`\n}\n\nexport function createRunIdentity(\n config: AnalystBenchmarkPersistenceConfig,\n prepared: PreparedPublicAnalystBenchmark,\n): AnalystBenchmarkRunIdentity {\n const model = commandModelIdentity(config.model)\n const caseDefinitions = prepared.cases.map((testCase) => ({\n id: testCase.id,\n clusterId: testCase.clusterId,\n labelState: testCase.labelState,\n expectedIssues: testCase.expectedIssues,\n labeledEvidence: testCase.labeledEvidence ?? [],\n tags: testCase.tags ?? [],\n metadata: testCase.metadata ?? {},\n }))\n return {\n config: {\n dataset: config.dataset,\n datasetRevision: config.revision,\n datasetSplit: config.split,\n model: {\n id: config.model.model,\n ...model,\n },\n limit: config.limit,\n seed: config.seed,\n concurrency: config.concurrency,\n repetitions: config.repetitions,\n rlmSamples: config.rlmSamples,\n maxCostUsd: config.maxCostUsd,\n maxArtifactBytes: config.maxArtifactBytes,\n analystProtocolSha256: effectiveAnalystProtocolSha256(\n config.dataset,\n config.model.instructionsOverride,\n ),\n ...(config.model.instructionsOverride\n ? { instructionsOverrideSha256: config.model.instructionsOverride.sha256 }\n : {}),\n implementationSha256: ANALYST_BENCHMARK_IMPLEMENTATION_SHA256,\n dependencyLockSha256: ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256,\n runnerIds: ['empty', config.analyst] as const,\n },\n inputs: {\n labelsSha256: prepared.labelsSha256,\n sourceRowCount: prepared.sourceRowCount,\n selectedCaseIds: [...prepared.selectedCaseIds],\n traceFiles: prepared.traceFiles.map((traceFile) => ({ ...traceFile })),\n verificationArtifactsSha256: digestCanonical(prepared.verificationArtifacts),\n caseDefinitionsSha256: digestCanonical(caseDefinitions),\n },\n }\n}\n\nfunction commandModelIdentity(config: PublicAnalystBenchmarkModelConfig) {\n const catalogPricing = resolveModelPricing(config.model)\n const pricing =\n config.pricing ??\n (catalogPricing\n ? {\n inputUsdPerMillion: catalogPricing.input * 1_000,\n outputUsdPerMillion: catalogPricing.output * 1_000,\n }\n : undefined)\n if (!pricing) {\n throw new Error(`benchmark model '${config.model}' has no recorded pricing`)\n }\n const recursive = config.dspyRlm\n return {\n ownerCallRef: config.callRef,\n maxOutputTokens: config.maxOutputTokens,\n maxReasoningTokens: config.maxReasoningTokens ?? config.maxOutputTokens * 4,\n maxRequestBytes: config.maxModelRequestBytes ?? 16 * 1024 * 1024,\n maxResponseBytes: config.maxModelResponseBytes ?? 4 * 1024 * 1024,\n requestTimeoutMs: config.modelRequestTimeoutMs ?? config.timeoutMs,\n timeoutMs: config.timeoutMs,\n pricing: { ...pricing },\n recursiveLimits: {\n maxIterations: recursive?.maxIterations ?? 14,\n maxLlmCalls: recursive?.maxLlmCalls ?? 8,\n maxToolCalls: recursive?.maxToolCalls ?? 80,\n maxOutputChars: recursive?.maxOutputChars ?? 8_000,\n maxModelRequests: recursive?.maxModelRequests ?? null,\n traceToolRequestBytes: recursive?.traceToolRequestBytes ?? 1_000_000,\n traceToolResponseBytes: recursive?.traceToolResponseBytes ?? 4_000_000,\n traceToolTimeoutMs: recursive?.traceToolTimeoutMs ?? 60_000,\n },\n processLimits: resolveExternalOptimizerProcessLimits(recursive?.runner?.limits),\n }\n}\n\nexport function createLocalRunReceipt(\n config: AnalystBenchmarkPersistenceConfig,\n paths: AnalystBenchmarkOutputPaths,\n): Omit<AnalystBenchmarkLocalRunReceipt, 'runIdentitySha256' | 'localIdentitySha256'> {\n return {\n kind: 'agent-eval/analyst-benchmark-local-run',\n local: {\n labelsPath: resolve(config.labelsPath),\n traceDir: resolve(config.traceDir),\n ...(config.artifactDir ? { artifactDir: resolve(config.artifactDir) } : {}),\n outputDir: paths.directory,\n modelOwnerModule: config.modelOwnerModule,\n },\n command: config.command,\n environment: {\n node: process.version,\n platform: platform(),\n arch: arch(),\n },\n files: {\n manifest: paths.manifest,\n observations: paths.observations,\n costLedger: paths.costLedger,\n modelResponses: paths.modelResponses,\n result: paths.result,\n report: paths.report,\n },\n }\n}\n\nexport async function initializeRunFiles(\n paths: AnalystBenchmarkOutputPaths,\n identity: AnalystBenchmarkRunIdentity,\n identitySha256: string,\n localIdentitySha256: string,\n localReceiptInput: Omit<\n AnalystBenchmarkLocalRunReceipt,\n 'runIdentitySha256' | 'localIdentitySha256'\n >,\n): Promise<AnalystBenchmarkRunManifest> {\n const existingManifest = await readOptionalRegularFile(paths.manifest, 'benchmark run manifest')\n const manifest = existingManifest\n ? await readAndValidateManifestContent(\n paths.manifest,\n existingManifest,\n identity,\n identitySha256,\n localIdentitySha256,\n )\n : {\n kind: 'agent-eval/analyst-benchmark-run' as const,\n createdAt: new Date().toISOString(),\n identitySha256,\n localIdentitySha256,\n identity,\n }\n const localReceipt: AnalystBenchmarkLocalRunReceipt = {\n ...localReceiptInput,\n runIdentitySha256: identitySha256,\n localIdentitySha256,\n }\n const manifestContent = `${JSON.stringify(manifest, null, 2)}\\n`\n const localReceiptContent = `${JSON.stringify(localReceipt, null, 2)}\\n`\n const initializationCompleteContent = renderInitializationComplete(manifest)\n\n await assertAbsentOrExact(paths.observations, '', 'benchmark observation log')\n await assertAbsentOrExact(paths.localReceipt, localReceiptContent, 'benchmark local run receipt')\n await assertAbsentOrExact(paths.manifest, manifestContent, 'benchmark run manifest')\n for (const path of [paths.costLedger, paths.modelResponses, paths.result, paths.report]) {\n if (await regularFileExists(path)) {\n throw new Error(\n `benchmark initialization marker is missing but later run artifact exists: ${path}`,\n )\n }\n }\n if (await regularFileExists(paths.initializationComplete)) {\n throw new Error(\n `benchmark initialization marker already exists during partial initialization: ${paths.initializationComplete}`,\n )\n }\n\n await writeExclusiveOrVerify(paths.observations, '')\n await writeExclusiveOrVerify(paths.localReceipt, localReceiptContent)\n await writeExclusiveOrVerify(paths.manifest, manifestContent)\n await writeExclusiveOrVerify(paths.initializationComplete, initializationCompleteContent)\n return manifest\n}\n\nexport async function readAndValidateResumeFiles(\n paths: AnalystBenchmarkOutputPaths,\n currentIdentity: AnalystBenchmarkRunIdentity,\n currentIdentitySha256: string,\n currentLocalIdentitySha256: string,\n localReceiptInput: Omit<\n AnalystBenchmarkLocalRunReceipt,\n 'runIdentitySha256' | 'localIdentitySha256'\n >,\n): Promise<AnalystBenchmarkRunManifest> {\n if (!(await regularFileExists(paths.initializationComplete))) {\n return initializeRunFiles(\n paths,\n currentIdentity,\n currentIdentitySha256,\n currentLocalIdentitySha256,\n localReceiptInput,\n )\n }\n const manifest = await readAndValidateManifest(\n paths.manifest,\n currentIdentity,\n currentIdentitySha256,\n currentLocalIdentitySha256,\n )\n const localReceiptContent = await readRegularFile(\n paths.localReceipt,\n 'benchmark local run receipt',\n )\n const value = parseJson(localReceiptContent, paths.localReceipt)\n if (!isRecord(value)) {\n throw new TypeError(`benchmark local run receipt must be an object: ${paths.localReceipt}`)\n }\n assertExactKeys(\n value,\n [\n 'kind',\n 'runIdentitySha256',\n 'localIdentitySha256',\n 'local',\n 'command',\n 'environment',\n 'files',\n ],\n 'benchmark local run receipt',\n )\n if (\n value.kind !== 'agent-eval/analyst-benchmark-local-run' ||\n value.runIdentitySha256 !== currentIdentitySha256 ||\n value.localIdentitySha256 !== currentLocalIdentitySha256 ||\n !isRecord(value.local)\n ) {\n throw new Error('benchmark local run receipt does not match the requested resume')\n }\n const expectedLocalReceipt: AnalystBenchmarkLocalRunReceipt = {\n ...localReceiptInput,\n runIdentitySha256: currentIdentitySha256,\n localIdentitySha256: currentLocalIdentitySha256,\n }\n const storedLocalIdentitySha256 = digestCanonical(value.local)\n if (\n storedLocalIdentitySha256 !== currentLocalIdentitySha256 ||\n canonicalJson(value.local) !== canonicalJson(localReceiptInput.local)\n ) {\n throw new Error('benchmark local paths or model-owner module do not match the requested resume')\n }\n if (localReceiptContent !== `${JSON.stringify(expectedLocalReceipt, null, 2)}\\n`) {\n throw new Error(`benchmark local run receipt does not exactly match: ${paths.localReceipt}`)\n }\n const initializationCompleteContent = await readRegularFile(\n paths.initializationComplete,\n 'benchmark initialization marker',\n )\n if (initializationCompleteContent !== renderInitializationComplete(manifest)) {\n throw new Error(\n `benchmark initialization marker does not match the run manifest: ${paths.initializationComplete}`,\n )\n }\n return manifest\n}\n\nasync function readAndValidateManifest(\n path: string,\n currentIdentity: AnalystBenchmarkRunIdentity,\n currentIdentitySha256: string,\n currentLocalIdentitySha256: string,\n): Promise<AnalystBenchmarkRunManifest> {\n const content = await readRegularFile(path, 'benchmark run manifest')\n const manifest = await readAndValidateManifestContent(\n path,\n content,\n currentIdentity,\n currentIdentitySha256,\n currentLocalIdentitySha256,\n )\n if (content !== `${JSON.stringify(manifest, null, 2)}\\n`) {\n throw new Error(`benchmark run manifest does not exactly match: ${path}`)\n }\n return manifest\n}\n\nasync function readAndValidateManifestContent(\n path: string,\n content: string,\n currentIdentity: AnalystBenchmarkRunIdentity,\n currentIdentitySha256: string,\n currentLocalIdentitySha256: string,\n): Promise<AnalystBenchmarkRunManifest> {\n const value = parseJson(content, path)\n if (!isRecord(value)) throw new TypeError(`benchmark run manifest must be an object: ${path}`)\n assertExactKeys(\n value,\n ['kind', 'createdAt', 'identitySha256', 'localIdentitySha256', 'identity'],\n 'benchmark run manifest',\n )\n if (value.kind !== 'agent-eval/analyst-benchmark-run') {\n throw new TypeError(`unsupported benchmark run manifest: ${path}`)\n }\n if (typeof value.createdAt !== 'string' || !Number.isFinite(Date.parse(value.createdAt))) {\n throw new TypeError(`benchmark run manifest has an invalid createdAt: ${path}`)\n }\n if (\n !isSha256(value.identitySha256) ||\n !isSha256(value.localIdentitySha256) ||\n !isRecord(value.identity)\n ) {\n throw new TypeError(`benchmark run manifest has an invalid identity: ${path}`)\n }\n const storedIdentitySha256 = digestCanonical(value.identity)\n if (storedIdentitySha256 !== value.identitySha256) {\n throw new Error(`benchmark run manifest identity digest does not match its contents: ${path}`)\n }\n if (\n currentIdentitySha256 !== value.identitySha256 ||\n currentLocalIdentitySha256 !== value.localIdentitySha256 ||\n canonicalJson(currentIdentity) !== canonicalJson(value.identity)\n ) {\n throw new Error(\n `benchmark resume configuration or inputs do not match ${ANALYST_BENCHMARK_MANIFEST_FILE}`,\n )\n }\n return {\n kind: 'agent-eval/analyst-benchmark-run',\n createdAt: value.createdAt,\n identitySha256: currentIdentitySha256,\n localIdentitySha256: currentLocalIdentitySha256,\n identity: currentIdentity,\n }\n}\n\nfunction renderInitializationComplete(manifest: AnalystBenchmarkRunManifest): string {\n return `${JSON.stringify(\n {\n kind: 'agent-eval/analyst-benchmark-initialization-complete',\n runIdentitySha256: manifest.identitySha256,\n localIdentitySha256: manifest.localIdentitySha256,\n createdAt: manifest.createdAt,\n },\n null,\n 2,\n )}\\n`\n}\n\nasync function assertAbsentOrExact(path: string, expected: string, label: string): Promise<void> {\n const existing = await readOptionalRegularFile(path, label)\n if (existing !== undefined && existing !== expected) {\n throw new Error(`${label} does not exactly match interrupted initialization: ${path}`)\n }\n}\n\nasync function readOptionalRegularFile(path: string, label: string): Promise<string | undefined> {\n if (!(await regularFileExists(path))) return undefined\n return readRegularFile(path, label)\n}\n\nexport function createObservationAppender(\n path: string,\n runIdentitySha256: string,\n progress: AnalystBenchmarkProgress,\n): (observation: AnalystBenchmarkObservation) => Promise<void> {\n let writes = Promise.resolve()\n const seen = new Set(progress.observations.map(observationKey))\n return (observation) => {\n const write = writes.then(async () => {\n assertAnalystBenchmarkObservation(observation, 'benchmark observation')\n const key = observationKey(observation)\n if (seen.has(key)) {\n throw new Error(\n `refusing duplicate benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`,\n )\n }\n const rowWithoutDigest = {\n sequence: progress.nextSequence,\n runIdentitySha256,\n previousRowSha256: progress.previousRowSha256,\n observation,\n }\n const row: AnalystBenchmarkProgressRow = {\n ...rowWithoutDigest,\n rowSha256: digestCanonical(rowWithoutDigest),\n }\n await appendDurable(path, `${JSON.stringify(row)}\\n`)\n progress.nextSequence += 1\n progress.previousRowSha256 = row.rowSha256\n progress.observations.push(observation)\n seen.add(key)\n })\n writes = write\n return write\n }\n}\n\nexport async function readProgress(\n path: string,\n runIdentitySha256: string,\n caseIds: readonly string[],\n repetitions: number,\n analystRunnerId: string,\n): Promise<AnalystBenchmarkProgress> {\n const text = await readRegularFile(path, 'benchmark observation log')\n const rawLines = text.split('\\n')\n if (rawLines.at(-1) === '') rawLines.pop()\n const observations: AnalystBenchmarkObservation[] = []\n const seen = new Set<string>()\n const executionIndexes = new Set<number>()\n let previousRowSha256: string | null = null\n const allowedCases = new Set(caseIds)\n const plannedObservationCount = caseIds.length * 2 * repetitions\n\n for (const [index, line] of rawLines.entries()) {\n if (!line.trim()) {\n throw new Error(`benchmark observation log contains an empty row at line ${index + 1}`)\n }\n const parsed = parseJson(line, `${path}:${index + 1}`)\n if (!isRecord(parsed)) {\n throw new TypeError(`benchmark observation row ${index + 1} must be an object`)\n }\n assertExactKeys(\n parsed,\n ['sequence', 'runIdentitySha256', 'previousRowSha256', 'observation', 'rowSha256'],\n `benchmark observation row ${index + 1}`,\n )\n assertAnalystBenchmarkObservation(\n parsed.observation,\n `benchmark observation row ${index + 1}.observation`,\n )\n const observation = parsed.observation\n const key = observationKey(observation)\n if (seen.has(key)) {\n throw new Error(\n `duplicate benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' at line ${index + 1}`,\n )\n }\n if (parsed.sequence !== index) {\n throw new Error(\n `benchmark observation row ${index + 1} has sequence ${String(parsed.sequence)}; expected ${index}`,\n )\n }\n if (parsed.runIdentitySha256 !== runIdentitySha256) {\n throw new Error(`benchmark observation row ${index + 1} belongs to another run`)\n }\n if (parsed.previousRowSha256 !== previousRowSha256) {\n throw new Error(`benchmark observation row ${index + 1} breaks the digest chain`)\n }\n if (!isSha256(parsed.rowSha256)) {\n throw new TypeError(`benchmark observation row ${index + 1} has an invalid digest`)\n }\n const expectedDigest = digestCanonical({\n sequence: parsed.sequence,\n runIdentitySha256: parsed.runIdentitySha256,\n previousRowSha256: parsed.previousRowSha256,\n observation,\n })\n if (expectedDigest !== parsed.rowSha256) {\n throw new Error(`benchmark observation row ${index + 1} digest does not match its contents`)\n }\n if (\n !allowedCases.has(observation.caseId) ||\n (observation.runnerId !== 'empty' && observation.runnerId !== analystRunnerId) ||\n observation.repetition >= repetitions ||\n observation.executionIndex >= plannedObservationCount\n ) {\n throw new Error(\n `benchmark observation row ${index + 1} does not match a planned case, runner, and repetition`,\n )\n }\n if (executionIndexes.has(observation.executionIndex)) {\n throw new Error(\n `duplicate benchmark executionIndex ${observation.executionIndex} at line ${index + 1}`,\n )\n }\n observations.push(observation)\n seen.add(key)\n executionIndexes.add(observation.executionIndex)\n previousRowSha256 = parsed.rowSha256\n }\n\n return {\n observations,\n nextSequence: observations.length,\n previousRowSha256,\n }\n}\n\nexport async function writeExclusiveOrVerify(path: string, content: string): Promise<void> {\n try {\n await writeExclusive(path, content)\n } catch (error) {\n if (!isNodeError(error, 'EEXIST')) throw error\n const existing = await readRegularFile(path, 'existing benchmark artifact')\n if (existing !== content) {\n throw new Error(`refusing to replace existing benchmark artifact: ${path}`)\n }\n }\n}\n\nexport async function regularFileExists(path: string): Promise<boolean> {\n try {\n const fileStat = await lstat(path)\n if (!fileStat.isFile() || fileStat.isSymbolicLink()) {\n throw new Error(`benchmark artifact path must be a real file: ${path}`)\n }\n return true\n } catch (error) {\n if (isNodeError(error, 'ENOENT')) return false\n throw error\n }\n}\n\nasync function appendDurable(path: string, content: string): Promise<void> {\n const handle = await open(path, constants.O_APPEND | constants.O_WRONLY | constants.O_NOFOLLOW)\n try {\n await handle.writeFile(content, 'utf8')\n await handle.sync()\n } finally {\n await handle.close()\n }\n}\n\nasync function writeExclusive(path: string, content: string): Promise<void> {\n const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`\n let handle: Awaited<ReturnType<typeof open>> | undefined\n try {\n handle = await open(temporary, 'wx')\n await handle.writeFile(content, 'utf8')\n await handle.sync()\n await handle.close()\n handle = undefined\n await link(temporary, path)\n await syncDirectory(dirname(path))\n } finally {\n await handle?.close().catch(() => undefined)\n await unlink(temporary).catch(() => undefined)\n }\n}\n\nexport async function readRegularFile(path: string, label: string): Promise<string> {\n let fileStat: Awaited<ReturnType<typeof lstat>>\n try {\n fileStat = await lstat(path)\n } catch (error) {\n if (isNodeError(error, 'ENOENT')) throw new Error(`${label} is missing: ${path}`)\n throw error\n }\n if (!fileStat.isFile() || fileStat.isSymbolicLink()) {\n throw new Error(`${label} must be a real file: ${path}`)\n }\n return readFile(path, 'utf8')\n}\n\nasync function syncDirectory(path: string): Promise<void> {\n const directory = await open(path, 'r')\n try {\n await directory.sync()\n } finally {\n await directory.close()\n }\n}\n\nfunction isNodeError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && 'code' in error && error.code === code\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 | 'citationExcerptCoverage'\n | 'citationLabelAgreement'\n | 'citationResolution'\n | 'trustedNegativeAccuracy'\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 /** Trajectories with at least one complete pair for this metric. */\n pairedCases: number\n /** Independent task or incident groups resampled by the interval. */\n pairedClusters: number\n /** Same-run pairs where this metric applies before missing values are removed. */\n eligibleObservations: number\n pairedObservations: number\n baselineMissingObservations: number\n candidateMissingObservations: number\n asymmetricMissingObservations: number\n survivorOnly: boolean\n baselineMean: number | null\n candidateMean: number | null\n meanDelta: number | null\n intervalLow: number | null\n intervalHigh: number | null\n confidence: number\n resamples: number\n minimumSampleMet: boolean\n populationInferenceEligible: boolean\n inferenceLimitations: string[]\n}\n\nexport interface AnalystRunnerComparison {\n baselineRunnerId: string\n candidateRunnerId: string\n metrics: AnalystMetricComparison[]\n}\n\ninterface PairedCaseMetric {\n clusterId: string\n baseline: number\n candidate: number\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 populationRepresentativenessProven =\n result.provenance.metadata?.populationRepresentativenessProven === true\n const metrics = METRICS.map((metric) =>\n compareMetric({\n metric,\n baseline,\n candidate,\n confidence,\n resamples,\n seed: options.seed,\n populationRepresentativenessProven,\n }),\n )\n\n return {\n baselineRunnerId: options.baselineRunnerId,\n candidateRunnerId: options.candidateRunnerId,\n metrics,\n }\n}\n\nfunction compareMetric(options: {\n metric: AnalystComparisonMetric\n baseline: Map<string, AnalystBenchmarkObservation[]>\n candidate: Map<string, AnalystBenchmarkObservation[]>\n confidence: number\n resamples: number\n seed?: number\n populationRepresentativenessProven: boolean\n}): AnalystMetricComparison {\n const pairedCases: PairedCaseMetric[] = []\n let eligibleObservations = 0\n let pairedObservations = 0\n let baselineMissingObservations = 0\n let candidateMissingObservations = 0\n let asymmetricMissingObservations = 0\n\n const caseIds = new Set([...options.baseline.keys(), ...options.candidate.keys()])\n for (const caseId of caseIds) {\n const baselineByRepetition = new Map(\n (options.baseline.get(caseId) ?? []).map((observation) => [\n observation.repetition,\n observation,\n ]),\n )\n const candidateByRepetition = new Map(\n (options.candidate.get(caseId) ?? []).map((observation) => [\n observation.repetition,\n observation,\n ]),\n )\n const caseBefore: number[] = []\n const caseAfter: number[] = []\n let clusterId: string | undefined\n const repetitions = new Set([...baselineByRepetition.keys(), ...candidateByRepetition.keys()])\n for (const repetition of repetitions) {\n const baselineObservation = baselineByRepetition.get(repetition)\n const candidateObservation = candidateByRepetition.get(repetition)\n const identity = baselineObservation ?? candidateObservation\n if (!identity || !metricApplies(identity, options.metric)) continue\n if (baselineObservation && candidateObservation) {\n assertSameCaseIdentity(baselineObservation, candidateObservation)\n }\n eligibleObservations += 1\n clusterId = identity.clusterId\n const baselineValue = baselineObservation\n ? metricValue(baselineObservation, options.metric)\n : null\n const candidateValue = candidateObservation\n ? metricValue(candidateObservation, options.metric)\n : null\n const baselineMissing = baselineValue === null\n const candidateMissing = candidateValue === null\n if (baselineMissing) baselineMissingObservations += 1\n if (candidateMissing) candidateMissingObservations += 1\n if (baselineMissing !== candidateMissing) asymmetricMissingObservations += 1\n if (baselineMissing || candidateMissing) continue\n caseBefore.push(baselineValue)\n caseAfter.push(candidateValue)\n pairedObservations += 1\n }\n if (caseBefore.length === 0 || !clusterId) continue\n pairedCases.push({\n clusterId,\n baseline: mean(caseBefore),\n candidate: mean(caseAfter),\n })\n }\n\n const byCluster = new Map<string, PairedCaseMetric[]>()\n for (const pairedCase of pairedCases) {\n const rows = byCluster.get(pairedCase.clusterId) ?? []\n rows.push(pairedCase)\n byCluster.set(pairedCase.clusterId, rows)\n }\n const before = [...byCluster.values()].map((rows) => mean(rows.map((row) => row.baseline)))\n const after = [...byCluster.values()].map((rows) => mean(rows.map((row) => row.candidate)))\n const interval =\n before.length === 0\n ? null\n : pairedBootstrap(before, after, {\n confidence: options.confidence,\n resamples: options.resamples,\n statistic: 'mean',\n seed: options.seed,\n })\n const survivorOnly = pairedObservations < eligibleObservations\n const limitations: string[] = []\n if (!interval?.gateEligible) limitations.push('fewer-than-20-independent-clusters')\n if (!options.populationRepresentativenessProven) {\n limitations.push('population-representativeness-not-proven')\n }\n if (survivorOnly) limitations.push('missing-observations')\n\n const comparison: AnalystMetricComparison = {\n metric: options.metric,\n direction: LOWER_IS_BETTER.has(options.metric) ? 'lower' : 'higher',\n pairedCases: pairedCases.length,\n pairedClusters: before.length,\n eligibleObservations,\n pairedObservations,\n baselineMissingObservations,\n candidateMissingObservations,\n asymmetricMissingObservations,\n survivorOnly,\n baselineMean: before.length === 0 ? null : mean(before),\n candidateMean: after.length === 0 ? null : mean(after),\n meanDelta: interval?.mean ?? null,\n intervalLow: interval?.low ?? null,\n intervalHigh: interval?.high ?? null,\n confidence: options.confidence,\n resamples: options.resamples,\n minimumSampleMet: interval?.gateEligible ?? false,\n populationInferenceEligible: limitations.length === 0,\n inferenceLimitations: limitations,\n }\n assertValidComparison(comparison)\n return comparison\n}\n\nconst METRICS: readonly AnalystComparisonMetric[] = [\n 'completion',\n 'issueRecall',\n 'findingPrecision',\n 'f1',\n 'criticalStepAccuracy',\n 'citationCoverage',\n 'citationExcerptCoverage',\n 'citationLabelAgreement',\n 'citationResolution',\n 'trustedNegativeAccuracy',\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 assertSameCaseIdentity(\n baseline: AnalystBenchmarkObservation,\n candidate: AnalystBenchmarkObservation,\n): void {\n if (baseline.clusterId !== candidate.clusterId || baseline.labelState !== candidate.labelState) {\n throw new Error(\n `analyst comparison case identity differs for '${baseline.caseId}' repetition ${baseline.repetition}`,\n )\n }\n}\n\nfunction metricApplies(\n observation: AnalystBenchmarkObservation,\n metric: AnalystComparisonMetric,\n): boolean {\n if (metric === 'trustedNegativeAccuracy') {\n return observation.labelState === 'trusted-negative'\n }\n if (metric === 'issueRecall' || metric === 'findingPrecision' || metric === 'f1') {\n return observation.labelState === 'positive'\n }\n if (metric === 'criticalStepAccuracy') {\n return observation.labelState === 'positive' && observation.score.criticalStepAccuracy !== null\n }\n return true\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 === 'trustedNegativeAccuracy') {\n if (observation.error) return 0\n return observation.score.predictionOnLabelEmptyCase ? 0 : 1\n }\n if (\n observation.error &&\n (metric === 'issueRecall' ||\n metric === 'findingPrecision' ||\n metric === 'f1' ||\n metric === 'criticalStepAccuracy')\n ) {\n return 0\n }\n if (\n observation.error &&\n (metric === 'citationCoverage' ||\n metric === 'citationExcerptCoverage' ||\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 === 'citationExcerptCoverage') return observation.score.citationExcerptCoverage\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 'pairedClusters',\n 'eligibleObservations',\n 'pairedObservations',\n 'baselineMissingObservations',\n 'candidateMissingObservations',\n 'asymmetricMissingObservations',\n 'confidence',\n 'resamples',\n ] as const\n const nullableFields = [\n 'baselineMean',\n 'candidateMean',\n 'meanDelta',\n 'intervalLow',\n 'intervalHigh',\n ] as const\n if (\n numericFields.some((field) => !Number.isFinite(comparison[field])) ||\n nullableFields.some(\n (field) => comparison[field] !== null && !Number.isFinite(comparison[field]),\n )\n ) {\n throw new Error(\n `compareAnalystRunners: ${comparison.metric} produced non-finite comparison output`,\n )\n }\n if (\n comparison.intervalLow !== null &&\n comparison.intervalHigh !== null &&\n comparison.intervalLow > comparison.intervalHigh\n ) {\n throw new Error(\n `compareAnalystRunners: ${comparison.metric} produced an invalid confidence interval`,\n )\n }\n}\n","import type { AnalystBenchmarkObservation, AnalystBenchmarkResult } from './benchmark'\nimport { codeTraceStepFromEvidence } from './benchmark-evidence-validation'\n\nexport interface CodeTraceCalibrationRunnerSummary {\n runnerId: string\n selectedRuns: number\n positiveRuns: number\n trustedNegativeRuns: number\n unlabeledRuns: number\n failedLabelEmptyRuns: number\n unknownLabelEmptyRuns: number\n completedRuns: number\n failedRuns: number\n expectedIncorrectSteps: number\n predictedIncorrectSteps: number\n matchedIncorrectSteps: number\n /** CodeTraceBench's published mean per-row incorrect-step F1 over every row. */\n officialAllRowF1: number | null\n officialAllRowRuns: number\n precision: number | null\n recall: number | null\n f1: number | null\n trustedNegativeFalsePositiveRate: number | null\n trustedNegativeFailureRate: number | null\n unlabeledPredictionRate: number | null\n unlabeledFailureRate: number | null\n}\n\nexport interface CodeTraceCalibrationSummary {\n protocol: 'labeled-positive-and-solved-negative'\n rationale: string\n runners: CodeTraceCalibrationRunnerSummary[]\n}\n\nexport function summarizeCodeTraceCalibration(\n result: AnalystBenchmarkResult,\n): CodeTraceCalibrationSummary {\n return {\n protocol: 'labeled-positive-and-solved-negative',\n rationale:\n 'Uses rows with incorrect-step labels as positives and solved label-empty rows as trusted negatives. Failed label-empty rows remain in the published result but are not treated as clean controls.',\n runners: result.provenance.runnerIds.map((runnerId) =>\n summarizeRunner(\n runnerId,\n result.observations.filter((observation) => observation.runnerId === runnerId),\n ),\n ),\n }\n}\n\nexport function renderCodeTraceCalibrationMarkdown(summary: CodeTraceCalibrationSummary): string {\n return [\n '## CodeTraceBench Calibrated View',\n '',\n summary.rationale,\n '',\n '| Runner | Completed/selected | Failed | Positive runs | Trusted negative runs | Unlabeled runs | Failed label-empty | Unknown label-empty | Matched/expected steps | Predicted steps | Precision | Recall | F1 | Official all-row F1 | Official rows | Trusted-negative false positives | Trusted-negative failures | Unlabeled predictions | Unlabeled failures |',\n '| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |',\n ...summary.runners.map(\n (runner) =>\n `| ${escapeCell(runner.runnerId)} | ${runner.completedRuns}/${runner.selectedRuns} | ${runner.failedRuns} | ${runner.positiveRuns} | ${runner.trustedNegativeRuns} | ${runner.unlabeledRuns} | ${runner.failedLabelEmptyRuns} | ${runner.unknownLabelEmptyRuns} | ${runner.matchedIncorrectSteps}/${runner.expectedIncorrectSteps} | ${runner.predictedIncorrectSteps} | ${rate(runner.precision)} | ${rate(runner.recall)} | ${rate(runner.f1)} | ${rate(runner.officialAllRowF1)} | ${runner.officialAllRowRuns} | ${rate(runner.trustedNegativeFalsePositiveRate)} | ${rate(runner.trustedNegativeFailureRate)} | ${rate(runner.unlabeledPredictionRate)} | ${rate(runner.unlabeledFailureRate)} |`,\n ),\n ].join('\\n')\n}\n\nfunction summarizeRunner(\n runnerId: string,\n observations: readonly AnalystBenchmarkObservation[],\n): CodeTraceCalibrationRunnerSummary {\n const positive = observations.filter((observation) => observation.labelState === 'positive')\n const trustedNegative = observations.filter(\n (observation) => observation.labelState === 'trusted-negative',\n )\n const excluded = observations.filter((observation) => observation.labelState === 'unlabeled')\n const selected = [...positive, ...trustedNegative]\n const expected = sum(positive.map((observation) => observation.score.expectedIssueCount))\n const predicted = sum(\n selected.map((observation) => (observation.error ? 0 : observation.findings.length)),\n )\n const matched = sum(positive.map((observation) => observation.score.matchedIssueIds.length))\n const precision = predicted === 0 ? (expected > 0 ? 0 : null) : matched / predicted\n const recall = ratio(matched, expected)\n const completedTrustedNegative = trustedNegative.filter((observation) => !observation.error)\n const completedExcluded = excluded.filter((observation) => !observation.error)\n const officialRows = observations.map(officialCodeTraceF1)\n\n return {\n runnerId,\n selectedRuns: selected.length,\n positiveRuns: positive.length,\n trustedNegativeRuns: trustedNegative.length,\n unlabeledRuns: excluded.length,\n failedLabelEmptyRuns: excluded.filter(\n (observation) => observation.caseMetadata?.solved === false,\n ).length,\n unknownLabelEmptyRuns: excluded.filter(\n (observation) => observation.caseMetadata?.solved !== false,\n ).length,\n completedRuns: selected.filter((observation) => !observation.error).length,\n failedRuns: selected.filter((observation) => observation.error).length,\n expectedIncorrectSteps: expected,\n predictedIncorrectSteps: predicted,\n matchedIncorrectSteps: matched,\n officialAllRowF1: mean(officialRows),\n officialAllRowRuns: officialRows.length,\n precision,\n recall,\n f1: harmonicMean(precision, recall),\n trustedNegativeFalsePositiveRate: ratio(\n completedTrustedNegative.filter((observation) => observation.score.predictionOnLabelEmptyCase)\n .length,\n completedTrustedNegative.length,\n ),\n trustedNegativeFailureRate: ratio(\n trustedNegative.filter((observation) => observation.error).length,\n trustedNegative.length,\n ),\n unlabeledPredictionRate: ratio(\n completedExcluded.filter((observation) => observation.findings.length > 0).length,\n completedExcluded.length,\n ),\n unlabeledFailureRate: ratio(\n excluded.filter((observation) => Boolean(observation.error)).length,\n excluded.length,\n ),\n }\n}\n\nfunction officialCodeTraceF1(observation: AnalystBenchmarkObservation): number {\n const trajectoryId = observation.caseMetadata?.trajectoryId\n if (typeof trajectoryId !== 'string' || !trajectoryId.trim()) {\n throw new TypeError(`${observation.caseId}: CodeTraceBench trajectoryId metadata is missing`)\n }\n const expected = new Set(\n [...observation.score.matchedIssueIds, ...observation.score.missedIssueIds].map((issueId) => {\n const match = /^incorrect:(\\d+)$/.exec(issueId)\n if (!match) {\n throw new TypeError(`${observation.caseId}: invalid incorrect-step label '${issueId}'`)\n }\n return Number(match[1])\n }),\n )\n const predicted = new Set<number>()\n if (!observation.error) {\n for (const finding of observation.findings) {\n if (finding.area !== 'incorrect') continue\n for (const evidence of finding.evidence_refs) {\n const location = codeTraceStepFromEvidence(evidence.uri)\n if (!location || location.traceId !== trajectoryId) {\n throw new TypeError(\n `${observation.caseId}: invalid CodeTraceBench prediction evidence '${evidence.uri}'`,\n )\n }\n predicted.add(location.step)\n }\n }\n }\n let matched = 0\n for (const step of predicted) if (expected.has(step)) matched += 1\n const precision = predicted.size === 0 ? 0 : matched / predicted.size\n const recall = expected.size === 0 ? 0 : matched / expected.size\n return harmonicMean(precision, recall) ?? 0\n}\n\nfunction sum(values: readonly number[]): number {\n return values.reduce((total, value) => total + value, 0)\n}\n\nfunction ratio(numerator: number, denominator: number): number | null {\n return denominator === 0 ? null : numerator / denominator\n}\n\nfunction mean(values: readonly number[]): number | null {\n return values.length === 0 ? null : sum(values) / values.length\n}\n\nfunction harmonicMean(left: number | null, right: number | null): number | null {\n if (left === null || right === null) return null\n return left + right === 0 ? 0 : (2 * left * right) / (left + right)\n}\n\nfunction rate(value: number | null): string {\n return value === null ? 'n/a' : value.toFixed(3)\n}\n\nfunction escapeCell(value: string): string {\n return value.replaceAll('|', '\\\\|').replaceAll('\\n', ' ')\n}\n","import type { AnalystBenchmarkObservation } from './benchmark'\nimport {\n AGENT_RX_UPSTREAM_REVISION,\n summarizeAgentRxCalibration,\n} from './benchmark-agentrx-calibration'\nimport {\n type AnalystBenchmarkArtifact,\n type AnalystBenchmarkRunManifest,\n canonicalJson,\n observationKey,\n parseJson,\n} from './benchmark-command-artifact'\nimport { readRegularFile } from './benchmark-command-persistence'\nimport { assertAnalystBenchmarkArtifact } from './benchmark-command-validation'\nimport { compareAnalystRunners } from './benchmark-comparison'\nimport { summarizeCodeTraceCalibration } from './benchmark-public-calibration'\nimport type { PreparedPublicAnalystBenchmark } from './benchmark-real-model'\nimport { summarizeAnalystBenchmarkRunner } from './benchmark-summary'\n\nexport async function readAnalystBenchmarkArtifact(\n path: string,\n): Promise<AnalystBenchmarkArtifact> {\n const value = parseJson(await readRegularFile(path, 'analyst benchmark result'), path)\n assertAnalystBenchmarkArtifact(value, 'analyst benchmark result')\n return value\n}\n\nexport function assertCompletedArtifactMatchesRun(\n artifact: AnalystBenchmarkArtifact,\n manifest: AnalystBenchmarkRunManifest,\n observations: readonly AnalystBenchmarkObservation[],\n prepared: PreparedPublicAnalystBenchmark,\n): void {\n if (artifact.runIdentitySha256 !== manifest.identitySha256) {\n throw new Error('completed benchmark result belongs to another run')\n }\n assertSameObservations(artifact.result.observations, observations)\n const expectedCount =\n manifest.identity.inputs.selectedCaseIds.length *\n manifest.identity.config.runnerIds.length *\n manifest.identity.config.repetitions\n if (observations.length !== expectedCount) {\n throw new Error(\n `completed benchmark result has ${observations.length} observations; expected ${expectedCount}`,\n )\n }\n\n const { config, inputs } = manifest.identity\n const verificationAvailability = {\n cases: prepared.verificationArtifacts.length,\n resultFilesPresent: prepared.verificationArtifacts.filter(\n (artifact) => artifact.status === 'present',\n ).length,\n resultFilesMissing: prepared.verificationArtifacts.filter(\n (artifact) => artifact.status === 'missing',\n ).length,\n outcomes: {\n passed: prepared.verificationArtifacts.filter(\n (artifact) => artifact.outcome.status === 'passed',\n ).length,\n failed: prepared.verificationArtifacts.filter(\n (artifact) => artifact.outcome.status === 'failed',\n ).length,\n unavailable: prepared.verificationArtifacts.filter(\n (artifact) => artifact.outcome.status === 'unavailable',\n ).length,\n },\n }\n const expectedInputs: AnalystBenchmarkArtifact['inputs'] = {\n dataset: config.dataset,\n datasetRevision: config.datasetRevision,\n datasetSplit: config.datasetSplit,\n labelsSha256: inputs.labelsSha256,\n sourceRowCount: inputs.sourceRowCount,\n traceFiles: inputs.traceFiles.map((traceFile) => ({ ...traceFile })),\n verificationArtifacts: prepared.verificationArtifacts,\n verificationAvailability,\n selection: {\n limit: config.limit,\n seed: config.seed,\n selectedCaseIds: [...inputs.selectedCaseIds],\n report: prepared.selection,\n },\n execution: {\n repetitions: config.repetitions,\n concurrency: config.concurrency,\n ...(config.rlmSamples === undefined ? {} : { rlmSamples: config.rlmSamples }),\n model: config.model.id,\n modelOwnerCallRef: config.model.ownerCallRef,\n maxOutputTokens: config.model.maxOutputTokens,\n maxReasoningTokens: config.model.maxReasoningTokens,\n maxModelRequestBytes: config.model.maxRequestBytes,\n maxModelResponseBytes: config.model.maxResponseBytes,\n modelRequestTimeoutMs: config.model.requestTimeoutMs,\n timeoutMs: config.model.timeoutMs,\n pricing: config.model.pricing,\n recursiveLimits: config.model.recursiveLimits,\n processLimits: config.model.processLimits,\n maxCostUsd: config.maxCostUsd,\n maxArtifactBytes: config.maxArtifactBytes,\n analystProtocolSha256: config.analystProtocolSha256,\n ...(config.instructionsOverrideSha256 === undefined\n ? {}\n : { instructionsOverrideSha256: config.instructionsOverrideSha256 }),\n implementationSha256: config.implementationSha256,\n dependencyLockSha256: config.dependencyLockSha256,\n },\n }\n if (canonicalJson(artifact.inputs) !== canonicalJson(expectedInputs)) {\n throw new Error('completed benchmark result inputs do not match the run manifest')\n }\n\n const provenance = artifact.result.provenance\n const expectedDatasetId =\n config.dataset === 'agentrx' ? 'microsoft/AgentRx' : 'NJU-LINK/CodeTraceBench'\n const expectedOutputAdapter =\n config.dataset === 'agentrx'\n ? 'agentrx-taxonomy-and-root-step'\n : 'codetracebench-incorrect-block'\n if (\n provenance.id !== `${config.dataset}-real-model-analyst` ||\n provenance.startedAt !== manifest.createdAt ||\n !Number.isFinite(Date.parse(provenance.endedAt)) ||\n Date.parse(provenance.endedAt) < Date.parse(provenance.startedAt) ||\n canonicalJson(provenance.dataset) !==\n canonicalJson({\n id: expectedDatasetId,\n revision: config.datasetRevision,\n split: config.datasetSplit,\n }) ||\n provenance.caseCount !== inputs.selectedCaseIds.length ||\n canonicalJson(provenance.runnerIds) !== canonicalJson(config.runnerIds) ||\n provenance.repetitions !== config.repetitions ||\n provenance.maxConcurrency !== Math.min(config.concurrency, expectedCount) ||\n provenance.runnerOrderSeed !== config.seed ||\n provenance.metadata?.model !== config.model.id ||\n provenance.metadata?.modelOwnerCallRef !== config.model.ownerCallRef ||\n provenance.metadata?.rlmSamples !== config.rlmSamples ||\n provenance.metadata?.outputAdapter !== expectedOutputAdapter ||\n provenance.metadata?.caseSelection !== prepared.selection.method ||\n provenance.metadata?.caseSelectionSeed !== config.seed ||\n provenance.metadata?.selectionStratified !== prepared.selection.stratified ||\n provenance.metadata?.protocolSha256 !== config.analystProtocolSha256 ||\n provenance.metadata?.implementationSha256 !== config.implementationSha256 ||\n provenance.metadata?.dependencyLockSha256 !== config.dependencyLockSha256 ||\n provenance.metadata?.populationRepresentativenessProven !== false\n ) {\n throw new Error('completed benchmark result provenance does not match the run manifest')\n }\n\n const expectedSummaries = config.runnerIds.map((runnerId) =>\n summarizeAnalystBenchmarkRunner(\n runnerId,\n observations.filter((observation) => observation.runnerId === runnerId),\n ),\n )\n if (canonicalJson(artifact.result.summaries) !== canonicalJson(expectedSummaries)) {\n throw new Error('completed benchmark summaries do not match durable observations')\n }\n\n const expectedComparisons = [\n compareAnalystRunners(artifact.result, {\n baselineRunnerId: 'empty',\n candidateRunnerId: config.runnerIds[1],\n seed: config.seed,\n }),\n ]\n if (canonicalJson(artifact.comparisons) !== canonicalJson(expectedComparisons)) {\n throw new Error('completed benchmark comparisons do not match durable observations')\n }\n\n if (config.dataset === 'codetracebench') {\n if (\n canonicalJson(artifact.codeTraceCalibration) !==\n canonicalJson(summarizeCodeTraceCalibration(artifact.result)) ||\n artifact.agentRxCalibration !== undefined\n ) {\n throw new Error('completed CodeTraceBench calibration does not match durable observations')\n }\n } else if (\n canonicalJson(artifact.agentRxCalibration) !==\n canonicalJson(summarizeAgentRxCalibration(artifact.result, AGENT_RX_UPSTREAM_REVISION)) ||\n artifact.codeTraceCalibration !== undefined\n ) {\n throw new Error('completed AgentRx calibration does not match durable observations')\n }\n}\n\nexport function assertSameObservations(\n expected: readonly AnalystBenchmarkObservation[],\n actual: readonly AnalystBenchmarkObservation[],\n): void {\n if (expected.length !== actual.length) {\n throw new Error(\n `benchmark result has ${expected.length} observations but the durable log has ${actual.length}`,\n )\n }\n const expectedByKey = new Map(\n expected.map((observation) => [observationKey(observation), canonicalJson(observation)]),\n )\n for (const observation of actual) {\n const key = observationKey(observation)\n if (expectedByKey.get(key) !== canonicalJson(observation)) {\n throw new Error(\n `benchmark result does not match durable observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`,\n )\n }\n expectedByKey.delete(key)\n }\n if (expectedByKey.size > 0) {\n throw new Error('benchmark result is missing durable observations')\n }\n}\n","import type { TraceAnalysisStore } from '../trace-analyst/store'\nimport type { AnalystBenchmarkRunner } from './benchmark'\nimport { agentRxPredictionsToFindings } from './benchmark-datasets'\nimport {\n codeTraceStepFromEvidence,\n resolveAssistantStepEvidence,\n validateCodeTraceFindingEvidence,\n} from './benchmark-evidence-validation'\nimport { MAX_INCORRECT_BLOCK_STEPS, MAX_INCORRECT_BLOCKS } from './benchmark-public-prompt'\nimport type { PublicAnalystBenchmarkDataset } from './benchmark-public-types'\nimport type { AnalystFinding, AnalystRunInputs, AnalystSeverity } from './types'\nimport { makeFinding } from './types'\n\n/**\n * One contiguous run of incorrect assistant steps, in the shape both public\n * benchmark runners produce. The direct runner parses it from JSON fields; the\n * recursive runner parses it from the finding subject. Expansion, evidence\n * resolution and scoring are identical from here on.\n */\nexport interface CodeTraceFailureBlock {\n firstStep: number\n lastStep: number\n /** Later step whose action or observation shows the damage this block caused. */\n consequenceStep: number\n escapeStatus: 'escaped' | 'unescaped'\n severity: AnalystSeverity\n claim: string\n confidence: number\n rationale?: string\n recommendedAction?: string\n metadata?: Record<string, unknown>\n}\n\n/**\n * What the expansion did with the model's blocks.\n *\n * Escaped blocks are scored exactly like unescaped ones — the escape decision\n * is recorded, never applied — so `escapedBlocks` measures the model's own\n * judgement without moving precision, recall, or the trusted-negative rate.\n */\nexport interface CodeTraceBlockDiagnostics {\n reportedBlocks: number\n escapedBlocks: number\n /** Blocks dropped because their consequence step is not a real assistant step. */\n blocksWithoutConsequenceEvidence: CodeTraceFailureBlock[]\n /** Interior steps a block claimed that the trace does not carry as assistant steps. */\n unresolvedBlockInteriorSteps: number[]\n /** Steps claimed by more than one block; the first block keeps the step. */\n overlappingBlockSteps: number[]\n /** Blocks dropped for violating the protocol's width, order, or count limits. */\n droppedBlocks: string[]\n /** Findings dropped before expansion because their shape or evidence is invalid. */\n rejectedFindings?: string[]\n /** Out-of-block citations removed from findings that kept at least one in-block citation. */\n trimmedCitations?: string[]\n}\n\n/**\n * One expanded step with the accepted block that owns it. The expansion's\n * per-step ownership record: exactly the steps that survived shape, count,\n * and evidence checks, so consensus voting sees the same step set the\n * benchmark scores.\n */\nexport interface CodeTraceStepAssignment {\n step: number\n block: CodeTraceFailureBlock\n}\n\nexport function emptyPublicBenchmarkRunner(): AnalystBenchmarkRunner<AnalystRunInputs> {\n return {\n id: 'empty',\n analyze() {\n return {\n findings: [],\n usage: {\n calls: 0,\n tokens: { input: 0, output: 0 },\n cost: { kind: 'observed', usd: 0 },\n },\n metadata: { baseline: 'emit-no-findings' },\n }\n },\n }\n}\n\nexport async function adaptPublicBenchmarkFindings(options: {\n dataset: PublicAnalystBenchmarkDataset\n trajectoryId: string\n findings: readonly AnalystFinding[]\n analystId: string\n store: TraceAnalysisStore\n signal?: AbortSignal\n}): Promise<{\n findings: AnalystFinding[]\n diagnostics: CodeTraceBlockDiagnostics | undefined\n /** Present for CodeTraceBench only; AgentRx has no step-level expansion. */\n stepBlocks?: CodeTraceStepAssignment[]\n}> {\n if (options.dataset === 'agentrx') {\n return {\n findings: adaptAgentRxFindings(options.trajectoryId, options.findings, options.analystId),\n diagnostics: undefined,\n }\n }\n return adaptCodeTraceFindings(\n options.trajectoryId,\n options.findings,\n options.analystId,\n options.store,\n options.signal,\n )\n}\n\nfunction adaptAgentRxFindings(\n trajectoryId: string,\n findings: readonly AnalystFinding[],\n analystId: string,\n): AnalystFinding[] {\n if (findings.length === 0) return []\n if (findings.length !== 1) {\n throw new Error(\n `AgentRx model analyst must emit zero or one root cause, received ${findings.length}`,\n )\n }\n const source = findings[0]!\n if (!source.subject) {\n throw new Error('AgentRx model analyst finding is missing its failure-category subject')\n }\n const steps = exactFindingSteps(trajectoryId, source)\n if (steps.length !== 1) {\n throw new Error(\n `AgentRx model analyst must cite exactly one root-cause step, received ${steps.length}`,\n )\n }\n const [adapted] = agentRxPredictionsToFindings(\n trajectoryId,\n [\n {\n failure_case: source.subject,\n step_number: steps[0]!,\n description: source.rationale ?? source.claim,\n },\n ],\n {\n analystId,\n producedAt: source.produced_at,\n confidence: source.confidence,\n },\n )\n if (!adapted) throw new Error('AgentRx output adapter produced no root-cause finding')\n return [\n {\n ...adapted,\n metadata: {\n ...adapted.metadata,\n sourceFindingId: source.finding_id,\n },\n },\n ]\n}\n\nconst CODE_TRACE_BLOCK_SUBJECT =\n /^incorrect-steps-(\\d+)-(\\d+)-(escaped|unescaped)-consequence-(\\d+)$/\n\nasync function adaptCodeTraceFindings(\n trajectoryId: string,\n findings: readonly AnalystFinding[],\n analystId: string,\n store: TraceAnalysisStore,\n signal?: AbortSignal,\n): Promise<{\n findings: AnalystFinding[]\n diagnostics: CodeTraceBlockDiagnostics\n stepBlocks: CodeTraceStepAssignment[]\n}> {\n const clean = findings.filter((finding) => finding.subject === 'clean')\n if (clean.length > 0) {\n if (findings.length !== 1) {\n throw new Error('CodeTraceBench model analyst mixed a clean verdict with incorrect steps')\n }\n exactFindingSteps(trajectoryId, clean[0]!)\n return {\n findings: [],\n diagnostics: emptyCodeTraceBlockDiagnostics(),\n stepBlocks: [],\n }\n }\n // Each finding is model output. One whose subject is unparseable, whose\n // citations all fall outside its own block, or whose evidence does not\n // resolve is dropped with a recorded reason — the rest of a completed, paid\n // investigation must survive it. Citations and excerpts are checked here\n // because expansion replaces them with runner-built evidence.\n const blocks: CodeTraceFailureBlock[] = []\n const rejectedFindings: string[] = []\n const trimmedCitations: string[] = []\n for (const source of findings) {\n try {\n await validateCodeTraceFindingEvidence({\n trajectoryId,\n findings: [source],\n store,\n ...(signal ? { signal } : {}),\n })\n const converted = codeTraceBlockFromFinding(trajectoryId, source)\n trimmedCitations.push(...converted.trimmedCitations)\n blocks.push(converted.block)\n } catch (error) {\n rejectedFindings.push(\n `${source.finding_id}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n const expanded = await expandCodeTraceFailureBlocks({\n trajectoryId,\n blocks,\n store,\n analystId,\n ...(findings[0] ? { producedAt: findings[0].produced_at } : {}),\n ...(signal ? { signal } : {}),\n })\n return {\n findings: expanded.findings,\n diagnostics: { ...expanded.diagnostics, rejectedFindings, trimmedCitations },\n stepBlocks: expanded.stepBlocks,\n }\n}\n\n/**\n * Block coordinates recoverable from a subject in the block grammar, in the\n * metadata field names the expanded findings carry. Returns undefined when the\n * subject does not parse — nothing is invented for a malformed subject.\n */\nexport function codeTraceBlockMetadataFromSubject(\n subject: string | undefined,\n): Record<string, unknown> | undefined {\n const parsed = CODE_TRACE_BLOCK_SUBJECT.exec(subject ?? '')\n if (!parsed) return undefined\n return {\n block_first_step: Number(parsed[1]),\n block_last_step: Number(parsed[2]),\n block_consequence_step: Number(parsed[4]),\n escape_status: parsed[3],\n }\n}\n\nfunction codeTraceBlockFromFinding(\n trajectoryId: string,\n source: AnalystFinding,\n): { block: CodeTraceFailureBlock; trimmedCitations: string[] } {\n const parsed = CODE_TRACE_BLOCK_SUBJECT.exec(source.subject ?? '')\n if (!parsed) {\n throw new Error(\n `CodeTraceBench model finding '${source.finding_id}' must set subject to incorrect-steps-<first>-<last>-<escaped|unescaped>-consequence-<step>, received '${source.subject ?? ''}'`,\n )\n }\n const firstStep = Number(parsed[1])\n const lastStep = Number(parsed[2])\n const consequenceStep = Number(parsed[4])\n const cited = exactFindingSteps(trajectoryId, source)\n // A citation outside [firstStep, lastStep] (typically the consequence step)\n // is trimmed, not fatal: expansion rebuilds per-step evidence, so the block\n // only needs one citation grounding it inside its own range. A finding whose\n // citations ALL fall outside its block has no in-block grounding and is\n // rejected.\n const outOfRange = cited.filter((step) => step < firstStep || step > lastStep)\n if (outOfRange.length === cited.length) {\n throw new Error(\n `CodeTraceBench model finding '${source.finding_id}' cites step ${outOfRange.join(', ')} outside its block ${firstStep}-${lastStep} and no citation falls inside the block`,\n )\n }\n const trimmedCitations = outOfRange.map(\n (step) =>\n `${source.finding_id}: trimmed citation step ${step} outside block ${firstStep}-${lastStep}`,\n )\n return {\n block: {\n firstStep,\n lastStep,\n consequenceStep,\n escapeStatus: parsed[3] as 'escaped' | 'unescaped',\n severity: source.severity,\n claim: source.claim,\n confidence: source.confidence,\n ...(source.rationale === undefined ? {} : { rationale: source.rationale }),\n ...(source.recommended_action === undefined\n ? {}\n : { recommendedAction: source.recommended_action }),\n metadata: { sourceFindingId: source.finding_id },\n },\n trimmedCitations,\n }\n}\n\n/**\n * Expand contiguous failure blocks into one scored finding per member step.\n *\n * The official scorer matches on area plus the exact step evidence URI, so\n * blocks never reach it: every runner reports blocks, and this function turns\n * them into the per-step findings the benchmark defines.\n */\nexport async function expandCodeTraceFailureBlocks(options: {\n trajectoryId: string\n blocks: readonly CodeTraceFailureBlock[]\n store: TraceAnalysisStore\n analystId: string\n producedAt?: string\n signal?: AbortSignal\n}): Promise<{\n findings: AnalystFinding[]\n diagnostics: CodeTraceBlockDiagnostics\n stepBlocks: CodeTraceStepAssignment[]\n}> {\n const diagnostics = emptyCodeTraceBlockDiagnostics()\n diagnostics.reportedBlocks = options.blocks.length\n if (options.blocks.length === 0) return { findings: [], diagnostics, stepBlocks: [] }\n const blocks = acceptCodeTraceBlockShape(options.blocks, diagnostics)\n if (blocks.length === 0) return { findings: [], diagnostics, stepBlocks: [] }\n\n const boundarySteps = blocks.flatMap((block) => [block.firstStep, block.lastStep])\n const derivedSteps = blocks.flatMap((block) => [block.consequenceStep, ...interiorSteps(block)])\n const evidenceByStep = await resolveAssistantStepEvidence({\n trajectoryId: options.trajectoryId,\n steps: boundarySteps,\n optionalSteps: derivedSteps,\n store: options.store,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n\n const byStep = new Map<number, CodeTraceFailureBlock>()\n for (const block of blocks) {\n if (!evidenceByStep.has(block.consequenceStep)) {\n diagnostics.blocksWithoutConsequenceEvidence.push(block)\n continue\n }\n if (block.escapeStatus === 'escaped') diagnostics.escapedBlocks += 1\n for (let step = block.firstStep; step <= block.lastStep; step += 1) {\n if (!evidenceByStep.has(step)) {\n diagnostics.unresolvedBlockInteriorSteps.push(step)\n continue\n }\n if (byStep.has(step)) {\n diagnostics.overlappingBlockSteps.push(step)\n continue\n }\n byStep.set(step, block)\n }\n }\n\n const stepBlocks = [...byStep]\n .sort(([left], [right]) => left - right)\n .map(([step, block]) => ({ step, block }))\n const findings = stepBlocks.map(({ step, block }) =>\n makeFinding({\n analyst_id: options.analystId,\n area: 'incorrect',\n subject: `incorrect-step-${step}`,\n claim: `Step ${step} is incorrect. ${block.claim}`,\n rationale: block.rationale,\n severity: block.severity,\n confidence: block.confidence,\n evidence_refs: [evidenceByStep.get(step)!],\n recommended_action: block.recommendedAction,\n metadata: {\n ...block.metadata,\n block_first_step: block.firstStep,\n block_last_step: block.lastStep,\n block_consequence_step: block.consequenceStep,\n escape_status: block.escapeStatus,\n },\n ...(options.producedAt === undefined ? {} : { produced_at: options.producedAt }),\n id_basis: `incorrect-step-${step}`,\n }),\n )\n return { findings, diagnostics, stepBlocks }\n}\n\n/**\n * Enforce the protocol's per-block and per-case limits without voiding the\n * case: an offending block is dropped and named in `diagnostics.droppedBlocks`\n * while every valid sibling survives. A case whose blocks are ALL invalid ends\n * empty and carries the diagnostic for each drop. Shape is checked before the\n * count, so a malformed block never consumes one of the accepted slots.\n */\nfunction acceptCodeTraceBlockShape(\n blocks: readonly CodeTraceFailureBlock[],\n diagnostics: CodeTraceBlockDiagnostics,\n): CodeTraceFailureBlock[] {\n const accepted: CodeTraceFailureBlock[] = []\n for (const block of blocks) {\n const reason =\n codeTraceBlockShapeViolation(block) ??\n (accepted.length >= MAX_INCORRECT_BLOCKS\n ? `model reported ${blocks.length} failure blocks; the maximum is ${MAX_INCORRECT_BLOCKS}`\n : undefined)\n if (reason) {\n diagnostics.droppedBlocks.push(\n `block ${block.firstStep}-${block.lastStep} (consequence ${block.consequenceStep}): ${reason}`,\n )\n continue\n }\n accepted.push(block)\n }\n return accepted\n}\n\nfunction codeTraceBlockShapeViolation(block: CodeTraceFailureBlock): string | undefined {\n if (block.lastStep < block.firstStep) {\n return `failure block last_step ${block.lastStep} precedes first_step ${block.firstStep}`\n }\n const length = block.lastStep - block.firstStep + 1\n if (length > MAX_INCORRECT_BLOCK_STEPS) {\n return `failure block spans ${length} steps; the maximum is ${MAX_INCORRECT_BLOCK_STEPS}`\n }\n if (block.consequenceStep < block.firstStep) {\n return `failure block consequence_step ${block.consequenceStep} precedes first_step ${block.firstStep}`\n }\n return undefined\n}\n\nfunction interiorSteps(block: CodeTraceFailureBlock): number[] {\n const steps: number[] = []\n for (let step = block.firstStep + 1; step < block.lastStep; step += 1) steps.push(step)\n return steps\n}\n\nfunction emptyCodeTraceBlockDiagnostics(): CodeTraceBlockDiagnostics {\n return {\n reportedBlocks: 0,\n escapedBlocks: 0,\n blocksWithoutConsequenceEvidence: [],\n unresolvedBlockInteriorSteps: [],\n overlappingBlockSteps: [],\n droppedBlocks: [],\n }\n}\n\nfunction exactFindingSteps(trajectoryId: string, finding: AnalystFinding): number[] {\n if (finding.evidence_refs.length === 0) {\n throw new Error(`model finding '${finding.finding_id}' has no step evidence`)\n }\n const steps = finding.evidence_refs.map((evidence) => {\n const parsed = codeTraceStepFromEvidence(evidence.uri)\n if (!parsed || parsed.traceId !== trajectoryId) {\n throw new Error(\n `model finding '${finding.finding_id}' cites non-case evidence '${evidence.uri}'`,\n )\n }\n return parsed.step\n })\n return [...new Set(steps)]\n}\n","import { z } from 'zod'\nimport {\n CostAccountingIncompleteError,\n CostCeilingReachedError,\n CostReservationExceededError,\n} from '../cost-ledger'\nimport { AgentEvalError } from '../errors'\nimport { LlmCallError, LlmResponseError } from '../llm-client'\nimport type { AnalystBenchmarkError } from './benchmark'\n\nexport function publicBenchmarkError(\n error: unknown,\n secrets: readonly string[] = [],\n): AnalystBenchmarkError {\n if (error instanceof LlmCallError) {\n return {\n class: 'LlmCallError',\n code: error.code,\n status: error.status,\n message: `Provider request failed with HTTP ${error.status}.`,\n }\n }\n if (error instanceof LlmResponseError) {\n return {\n class: 'LlmResponseError',\n code: error.code,\n message: 'Provider response did not satisfy the structured output contract.',\n }\n }\n if (error instanceof z.ZodError) {\n return {\n class: 'ModelOutputValidationError',\n message: 'Provider response did not match the benchmark output schema.',\n }\n }\n if (error instanceof SyntaxError) {\n return {\n class: 'ModelOutputParseError',\n message: 'Provider response was not valid JSON.',\n }\n }\n if (\n error instanceof CostCeilingReachedError ||\n error instanceof CostAccountingIncompleteError ||\n error instanceof CostReservationExceededError\n ) {\n return {\n class: error.constructor.name,\n code: error.code,\n message: redactSensitiveText(error.message, secrets),\n }\n }\n if (error instanceof Error && error.name === 'AbortError') {\n return {\n class: 'ProviderTimeoutError',\n message: 'Provider request timed out.',\n }\n }\n if (\n error instanceof Error &&\n /(?:assistant steps?|finding evidence|selected missing|selected unavailable|no readable spans|requires a trace store)/i.test(\n error.message,\n )\n ) {\n return {\n class: 'BenchmarkEvidenceError',\n message: redactSensitiveText(error.message, secrets),\n }\n }\n if (error instanceof AgentEvalError) {\n return {\n class: error.constructor.name,\n code: error.code,\n message: redactSensitiveText(error.message, secrets),\n }\n }\n if (error instanceof Error) {\n return {\n class: error.constructor.name || 'Error',\n message: redactSensitiveText(error.message, secrets),\n }\n }\n return {\n class: 'Error',\n message: 'Benchmark analyst execution failed.',\n }\n}\n\nfunction redactSensitiveText(value: string, secrets: readonly string[]): string {\n let redacted = value\n for (const secret of secrets) {\n if (secret) redacted = redacted.replaceAll(secret, '[REDACTED]')\n }\n redacted = redacted\n .replace(/\\bBearer\\s+[^\\s\"',;]+/gi, 'Bearer [REDACTED]')\n .replace(\n /\\b(api[_-]?key|access[_-]?token|refresh[_-]?token|password|secret)\\b\\s*[:=]\\s*[^\\s\"',;]+/gi,\n '$1=[REDACTED]',\n )\n if (redacted.length <= 500) return redacted\n const head = redacted.slice(0, 180)\n const omitted = redacted.length - 460\n const marker = `...[${omitted} chars omitted]...`\n return `${head}${marker}${redacted.slice(-(500 - head.length - marker.length))}`\n}\n","import type {\n ExternalOptimizerModelCall,\n ExternalOptimizerModelExecutionObservation,\n ExternalOptimizerRunnerCommand,\n} from '../campaign/external-optimizer-contracts'\nimport type { CostLedgerHandle, CustomTokenPricing } from '../cost-ledger'\nimport type { AnalystBenchmarkCase } from './benchmark'\nimport type { VerificationArtifactManifest } from './benchmark-verification-artifacts'\nimport type { AnalystRunInputs } from './types'\n\nexport type PublicAnalystBenchmarkDataset = 'agentrx' | 'codetracebench'\n\n/**\n * Caller-supplied replacement for the recursive runner's analyst instructions.\n * Only the `dspy-rlm` runner accepts one; the direct runner rejects it, and the\n * recursive runner's abstention fallback keeps the stock direct prompt. Every\n * recorded protocol digest for an override run binds the stock protocol digest\n * to `sha256`, so an override run is never confusable with a stock run.\n */\nexport interface AnalystInstructionsOverride {\n /** Complete instruction text used instead of the shipped RLM instructions. */\n readonly text: string\n /** SHA-256 hex digest of `text`. */\n readonly sha256: string\n}\n\n/** Model execution supplied by the package that owns credentials and provider policy. */\nexport interface PublicAnalystBenchmarkModelOwner {\n call: ExternalOptimizerModelCall\n callRef: string\n recordExecution: (observation: ExternalOptimizerModelExecutionObservation) => void\n /** Exact rates when the selected model is absent from Agent Eval's catalog. */\n pricing?: CustomTokenPricing\n}\n\nexport interface PublicAnalystBenchmarkModelConfig {\n /** Caller-owned execution path. Agent Eval never receives provider credentials. */\n call: ExternalOptimizerModelCall\n /** Stable public identity for the caller-owned execution path. */\n callRef: string\n /** Persist every finite execution record returned by the caller-owned path. */\n recordExecution: (observation: ExternalOptimizerModelExecutionObservation) => void\n model: string\n maxOutputTokens: number\n timeoutMs: number\n /** Model request bytes per call. Default: 16 MiB. */\n maxModelRequestBytes?: number\n /** Model response bytes per call. Default: 4 MiB. */\n maxModelResponseBytes?: number\n /** Reasoning tokens billed beyond completion tokens. Default: four times output. */\n maxReasoningTokens?: number\n /** Deadline for one caller-owned model invocation. Default: timeoutMs. */\n modelRequestTimeoutMs?: number\n /** Required when the model is absent from agent-eval's pricing table. */\n pricing?: CustomTokenPricing\n /** Independent per-case recursive-engine spend limit. Default: 1 USD. */\n maxCostUsdPerAnalysis?: number\n /** Replaces the shipped RLM instructions. `dspy-rlm` runner only. */\n instructionsOverride?: AnalystInstructionsOverride\n dspyRlm?: {\n runner?: ExternalOptimizerRunnerCommand\n maxIterations?: number\n maxLlmCalls?: number\n maxToolCalls?: number\n maxOutputChars?: number\n maxModelRequests?: number\n traceToolRequestBytes?: number\n traceToolResponseBytes?: number\n traceToolTimeoutMs?: number\n /**\n * Independent engine runs per case. Above 1 (CodeTraceBench only), the\n * runner scores the step-level majority consensus across all runs instead\n * of a single draw. Default: 1.\n */\n samples?: number\n }\n costLedger?: CostLedgerHandle\n durability?: {\n runIdentitySha256: string\n responseCacheDir: string\n }\n}\n\nexport interface PreparedPublicAnalystBenchmark {\n cases: AnalystBenchmarkCase<AnalystRunInputs>[]\n sourceRowCount: number\n selectedCaseIds: string[]\n labelsSha256: string\n traceFiles: Array<{\n traceId: string\n relativePath: string\n sha256: string\n }>\n verificationArtifacts: VerificationArtifactManifest[]\n selection: PublicBenchmarkSelectionReport\n}\n\nexport interface PublicBenchmarkValueDistribution {\n total: number\n missing: number\n counts: Record<string, number>\n}\n\nexport interface PublicBenchmarkDistributions {\n class: PublicBenchmarkValueDistribution\n agent: PublicBenchmarkValueDistribution\n model: PublicBenchmarkValueDistribution\n difficulty: PublicBenchmarkValueDistribution\n solved: PublicBenchmarkValueDistribution\n}\n\nexport interface PublicBenchmarkSelectionReport {\n method: 'census' | 'deterministic-hash'\n seed: number\n sourceCount: number\n selectedCount: number\n stratified: false\n representativeOfInput: boolean\n source: PublicBenchmarkDistributions\n selected: PublicBenchmarkDistributions\n}\n\nexport function requiredString(value: string, field: string): string {\n const trimmed = value.trim()\n if (!trimmed) throw new TypeError(`${field} must be a non-empty string`)\n return trimmed\n}\n\nexport function positiveSafeInteger(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\nexport function safeInteger(value: number, field: string): number {\n if (!Number.isSafeInteger(value)) throw new RangeError(`${field} must be a safe integer`)\n return value\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n","import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport * as nodePath from 'node:path'\nimport { z } from 'zod'\nimport type { CostReceiptInput } from '../cost-ledger'\nimport { ValidationError } from '../errors'\nimport {\n canonicalString,\n hashCanonical,\n withLedgerFileLock,\n writeLedgerFileAtomically,\n} from '../ledger-core'\nimport type { AnalystBenchmarkError } from './benchmark'\n\nconst SHA256 = /^[a-f0-9]{64}$/\n\nconst CostReceiptInputSchema = z\n .object({\n model: z.string().min(1),\n inputTokens: z.number().int().nonnegative(),\n outputTokens: z.number().int().nonnegative(),\n reasoningTokens: z.number().int().nonnegative().optional(),\n cachedTokens: z.number().int().nonnegative().optional(),\n cacheWriteTokens: z.number().int().nonnegative().optional(),\n customTokenPricing: z\n .object({\n inputUsdPerMillion: z.number().nonnegative(),\n cachedInputUsdPerMillion: z.number().nonnegative().optional(),\n cacheWriteUsdPerMillion: z.number().nonnegative().optional(),\n outputUsdPerMillion: z.number().nonnegative(),\n })\n .strict()\n .optional(),\n actualCostUsd: z.number().nonnegative().optional(),\n estimatedCostUsd: z.number().nonnegative().optional(),\n costUnknown: z.boolean().optional(),\n usageUnknown: z.boolean().optional(),\n })\n .strict()\n\nconst BenchmarkErrorSchema = z\n .object({\n class: z.string().min(1),\n message: z.string(),\n code: z.string().min(1).optional(),\n status: z.number().int().min(100).max(599).optional(),\n })\n .strict()\n\nconst ResponseMetadataSchema = z\n .object({\n providerModel: z.string().min(1),\n providerDurationMs: z.number().nonnegative(),\n finishReason: z.string().nullable(),\n producedAt: z.string().datetime(),\n })\n .strict()\n\nconst CacheIdentityShape = {\n kind: z.literal('agent-eval/public-benchmark-model-response'),\n callId: z.string().min(1),\n runIdentitySha256: z.string().regex(SHA256),\n caseId: z.string().min(1),\n repetition: z.number().int().nonnegative(),\n}\n\nconst SuccessCacheEntryWithoutDigestSchema = z\n .object({\n ...CacheIdentityShape,\n status: z.literal('succeeded'),\n response: z.json(),\n metadata: ResponseMetadataSchema,\n receipt: CostReceiptInputSchema,\n })\n .strict()\n\nconst FailureCacheEntryWithoutDigestSchema = z\n .object({\n ...CacheIdentityShape,\n status: z.literal('failed'),\n error: BenchmarkErrorSchema,\n receipt: CostReceiptInputSchema,\n })\n .strict()\n\nconst CacheEntryWithoutDigestSchema = z.discriminatedUnion('status', [\n SuccessCacheEntryWithoutDigestSchema,\n FailureCacheEntryWithoutDigestSchema,\n])\n\nconst CacheEntrySchema = z.discriminatedUnion('status', [\n SuccessCacheEntryWithoutDigestSchema.extend({\n entrySha256: z.string().regex(SHA256),\n }),\n FailureCacheEntryWithoutDigestSchema.extend({\n entrySha256: z.string().regex(SHA256),\n }),\n])\n\ninterface CacheIdentity {\n runIdentitySha256: string\n caseId: string\n repetition: number\n}\n\nexport interface PublicBenchmarkResponseMetadata {\n providerModel: string\n providerDurationMs: number\n finishReason: string | null\n producedAt: string\n}\n\nexport type PublicBenchmarkResponseCacheEntry =\n | (CacheIdentity & {\n kind: 'agent-eval/public-benchmark-model-response'\n callId: string\n status: 'succeeded'\n response: unknown\n metadata: PublicBenchmarkResponseMetadata\n receipt: CostReceiptInput\n entrySha256: string\n })\n | (CacheIdentity & {\n kind: 'agent-eval/public-benchmark-model-response'\n callId: string\n status: 'failed'\n error: AnalystBenchmarkError\n receipt: CostReceiptInput\n entrySha256: string\n })\n\nexport type PublicBenchmarkResponseCacheInput =\n | Omit<Extract<PublicBenchmarkResponseCacheEntry, { status: 'succeeded' }>, 'entrySha256'>\n | Omit<Extract<PublicBenchmarkResponseCacheEntry, { status: 'failed' }>, 'entrySha256'>\n\nexport function publicBenchmarkCallId(identity: CacheIdentity): string {\n assertCacheIdentity(identity)\n const boundIdentity: CacheIdentity = {\n runIdentitySha256: identity.runIdentitySha256,\n caseId: identity.caseId,\n repetition: identity.repetition,\n }\n return `analyst-benchmark-${hashCanonical(boundIdentity).slice('sha256:'.length)}`\n}\n\nexport function readPublicBenchmarkResponseCache(\n cacheDirectory: string,\n identity: CacheIdentity,\n): PublicBenchmarkResponseCacheEntry | undefined {\n const callId = publicBenchmarkCallId(identity)\n const path = responseCachePath(cacheDirectory, callId)\n if (!existsSync(path)) return undefined\n const metadata = lstatSync(path)\n if (!metadata.isFile() || metadata.isSymbolicLink()) {\n throw new ValidationError(`benchmark response cache must be a real file: ${path}`)\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(readFileSync(path, 'utf8'))\n } catch (error) {\n throw new ValidationError(`benchmark response cache contains invalid JSON: ${path}`, {\n cause: error,\n })\n }\n const entry = parseCacheEntry(parsed, path)\n if (\n entry.callId !== callId ||\n entry.runIdentitySha256 !== identity.runIdentitySha256 ||\n entry.caseId !== identity.caseId ||\n entry.repetition !== identity.repetition\n ) {\n throw new ValidationError(`benchmark response cache identity does not match: ${path}`)\n }\n return entry\n}\n\nexport function writePublicBenchmarkResponseCache(\n cacheDirectory: string,\n entry: PublicBenchmarkResponseCacheInput,\n): PublicBenchmarkResponseCacheEntry {\n const expectedCallId = publicBenchmarkCallId(entry)\n if (entry.callId !== expectedCallId) {\n throw new ValidationError('benchmark response cache callId does not match its identity')\n }\n const validated = JSON.parse(\n JSON.stringify(CacheEntryWithoutDigestSchema.parse(entry)),\n ) as z.infer<typeof CacheEntryWithoutDigestSchema>\n const complete = {\n ...validated,\n entrySha256: hashCanonical(validated).slice('sha256:'.length),\n } as PublicBenchmarkResponseCacheEntry\n const path = responseCachePath(cacheDirectory, complete.callId)\n const content = `${canonicalString(complete)}\\n`\n withLedgerFileLock(path, fileContext(), () => {\n if (existsSync(path)) {\n const existing = readPublicBenchmarkResponseCache(cacheDirectory, complete)\n if (!existing || canonicalString(existing) !== canonicalString(complete)) {\n throw new ValidationError(`benchmark response cache conflicts with existing file: ${path}`)\n }\n return\n }\n writeLedgerFileAtomically(path, content, fileContext())\n })\n return complete\n}\n\nfunction parseCacheEntry(value: unknown, path: string): PublicBenchmarkResponseCacheEntry {\n let parsed: z.infer<typeof CacheEntrySchema>\n try {\n parsed = CacheEntrySchema.parse(value)\n } catch (error) {\n throw new ValidationError(`benchmark response cache has an invalid shape: ${path}`, {\n cause: error,\n })\n }\n const { entrySha256, ...withoutDigest } = parsed\n const expected = hashCanonical(withoutDigest).slice('sha256:'.length)\n if (entrySha256 !== expected) {\n throw new ValidationError(`benchmark response cache digest does not match: ${path}`)\n }\n return parsed as PublicBenchmarkResponseCacheEntry\n}\n\nfunction responseCachePath(cacheDirectory: string, callId: string): string {\n const directory = nodePath.resolve(cacheDirectory)\n const path = nodePath.resolve(directory, `${hashCanonical(callId).slice('sha256:'.length)}.json`)\n if (!isPathInsideDirectory(directory, path, nodePath)) {\n throw new ValidationError('benchmark response cache path escapes its directory')\n }\n return path\n}\n\ninterface PathOperations {\n relative(from: string, to: string): string\n isAbsolute(path: string): boolean\n sep: string\n}\n\nexport function isPathInsideDirectory(\n directory: string,\n candidate: string,\n pathOperations: PathOperations = nodePath,\n): boolean {\n const relative = pathOperations.relative(directory, candidate)\n return (\n relative !== '' &&\n relative !== '..' &&\n !relative.startsWith(`..${pathOperations.sep}`) &&\n !pathOperations.isAbsolute(relative)\n )\n}\n\nfunction assertCacheIdentity(identity: CacheIdentity): void {\n if (!SHA256.test(identity.runIdentitySha256)) {\n throw new ValidationError('benchmark response cache requires a SHA-256 run identity')\n }\n if (!identity.caseId.trim()) {\n throw new ValidationError('benchmark response cache requires a case id')\n }\n if (!Number.isSafeInteger(identity.repetition) || identity.repetition < 0) {\n throw new ValidationError('benchmark response cache repetition must be non-negative')\n }\n}\n\nfunction fileContext() {\n return {\n subject: 'benchmark response cache',\n integrityError: (message: string, options?: { cause?: unknown }) =>\n new ValidationError(message, options),\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport { z } from 'zod'\nimport {\n type ExternalOptimizerModelProxy,\n runWithCleanup,\n startExternalOptimizerModelProxy,\n} from '../campaign/external-optimizer-process'\nimport {\n CostAccountingIncompleteError,\n CostCallConflictError,\n CostCeilingReachedError,\n CostLedger,\n type CostLedgerHandle,\n CostLedgerPersistenceError,\n type CostReceipt,\n CostReceiptCaptureError,\n type CostReceiptInput,\n CostReservationExceededError,\n} from '../cost-ledger'\nimport { ValidationError } from '../errors'\nimport { callLlmJson, type LlmCallRequest, type LlmClientOptions } from '../llm-client'\nimport { resolveModelPricing } from '../metrics'\nimport type { TraceAnalysisStore } from '../trace-analyst/store'\nimport type { AnalystBenchmarkRunner } from './benchmark'\nimport { agentRxPredictionsToFindings } from './benchmark-datasets'\nimport {\n resolveAssistantStepEvidence,\n validateCodeTraceFindingEvidence,\n} from './benchmark-evidence-validation'\nimport {\n type CodeTraceBlockDiagnostics,\n type CodeTraceFailureBlock,\n expandCodeTraceFailureBlocks,\n} from './benchmark-public-adapters'\nimport { publicBenchmarkError } from './benchmark-public-errors'\nimport {\n MAX_INCORRECT_BLOCK_STEPS,\n MAX_INCORRECT_BLOCKS,\n publicBenchmarkProtocolSha256,\n publicBenchmarkSystemPrompt,\n TRACE_PROJECTION_ATTRIBUTE_BYTE_CAPS,\n} from './benchmark-public-prompt'\nimport {\n type PublicAnalystBenchmarkDataset,\n type PublicAnalystBenchmarkModelConfig,\n positiveSafeInteger,\n requiredString,\n} from './benchmark-public-types'\nimport {\n type PublicBenchmarkResponseCacheEntry,\n publicBenchmarkCallId,\n readPublicBenchmarkResponseCache,\n writePublicBenchmarkResponseCache,\n} from './benchmark-response-cache'\nimport type { AnalystFinding, AnalystRunInputs } from './types'\nimport { usageReceiptFromCostLedger } from './usage-receipt'\n\nexport {\n CODE_TRACE_BENCH_ANALYST_PROMPT,\n publicBenchmarkProtocolSha256,\n} from './benchmark-public-prompt'\n\n/** One-shot JSON baseline. This is not a recursive trace analyst. */\nexport function createPublicBenchmarkDirectRunner(\n dataset: PublicAnalystBenchmarkDataset,\n config: PublicAnalystBenchmarkModelConfig,\n): AnalystBenchmarkRunner<AnalystRunInputs> {\n if (config.instructionsOverride) {\n throw new Error(\n 'the direct runner executes only the stock protocol; an instructions override requires the dspy-rlm runner',\n )\n }\n const model = requiredString(config.model, 'model')\n const callRef = requiredString(config.callRef, 'callRef')\n if (typeof config.call !== 'function') throw new TypeError('call must be a function')\n if (typeof config.recordExecution !== 'function') {\n throw new TypeError('recordExecution must be a function')\n }\n const maxOutputTokens = positiveSafeInteger(config.maxOutputTokens, 'maxOutputTokens')\n const timeoutMs = positiveSafeInteger(config.timeoutMs, 'timeoutMs')\n const maxReasoningTokens = config.maxReasoningTokens ?? maxOutputTokens * 4\n const maxModelRequestBytes = config.maxModelRequestBytes ?? 16 * 1024 * 1024\n const maxModelResponseBytes = config.maxModelResponseBytes ?? 4 * 1024 * 1024\n const modelRequestTimeoutMs = config.modelRequestTimeoutMs ?? timeoutMs\n const pricing = config.pricing ?? pricingForModel(model)\n const maxCostUsd = config.maxCostUsdPerAnalysis ?? 1\n const costLedger = config.costLedger ?? new CostLedger()\n const durability = config.durability\n ? {\n runIdentitySha256: requiredString(\n config.durability.runIdentitySha256,\n 'durability.runIdentitySha256',\n ),\n responseCacheDir: requiredString(\n config.durability.responseCacheDir,\n 'durability.responseCacheDir',\n ),\n }\n : undefined\n const actor =\n dataset === 'agentrx' ? 'agentrx-root-cause-localizer' : 'codetracebench-step-localizer'\n const outputAdapter =\n dataset === 'agentrx' ? 'agentrx-taxonomy-and-root-step' : 'codetracebench-incorrect-block'\n return {\n id: 'direct',\n async analyze(input, context) {\n const trajectoryId = trajectoryIdFromCaseId(dataset, context.caseId)\n const costTags = {\n analystId: actor,\n benchmarkCaseId: context.caseId,\n benchmarkRepetition: String(context.repetition),\n }\n let rawPredictions: PublicBenchmarkModelPrediction[] = []\n let rejectedBlocks: string[] = []\n let modelFindings: AnalystFinding[] = []\n let providerModel = model\n let producedAt: string | undefined\n let modelMetadata: Record<string, unknown> = {\n analysisMode: 'direct-baseline',\n outputAdapter,\n protocolSha256: publicBenchmarkProtocolSha256(dataset),\n callRef,\n }\n try {\n if (!input.traceStore) {\n throw new Error(`${dataset} model runner requires a trace store`)\n }\n const preparedContext = await prepareSingleTraceContext(input.traceStore, context)\n if (preparedContext === undefined) {\n throw new Error(`${dataset} trace '${trajectoryId}' has no readable spans`)\n }\n const request: LlmCallRequest = {\n model,\n messages: [\n {\n role: 'system',\n content: publicBenchmarkSystemPrompt(dataset),\n },\n {\n role: 'user',\n content: `TRACE DATA:\\n${preparedContext}\\n\\nReturn the analysis JSON object.`,\n },\n ],\n jsonMode: true,\n thinking: 'disabled',\n maxTokens: maxOutputTokens,\n timeoutMs: modelRequestTimeoutMs,\n }\n const cacheIdentity = durability\n ? {\n runIdentitySha256: durability.runIdentitySha256,\n caseId: context.caseId,\n repetition: context.repetition,\n }\n : undefined\n const callId = cacheIdentity ? publicBenchmarkCallId(cacheIdentity) : undefined\n const cached = cacheIdentity\n ? readPublicBenchmarkResponseCache(durability!.responseCacheDir, cacheIdentity)\n : undefined\n if (cached) {\n const receipt = settleCachedResponse(costLedger, cached)\n modelMetadata = {\n ...modelMetadata,\n responseSource: 'durable-cache',\n cost: costReceiptMetadata(receipt),\n }\n if (cached.status === 'failed') {\n return {\n findings: [],\n usage: usageReceiptFromCostLedger(costLedger, {\n channel: 'analyst',\n tags: costTags,\n }),\n error: cached.error,\n metadata: modelMetadata,\n }\n }\n const response = parsePublicBenchmarkModelResponse(dataset, cached.response)\n rawPredictions = response.findings\n rejectedBlocks = response.rejectedBlocks\n providerModel = cached.metadata.providerModel\n producedAt = cached.metadata.producedAt\n modelMetadata = {\n ...modelMetadata,\n report: response.report,\n providerModel: cached.metadata.providerModel,\n providerDurationMs: cached.metadata.providerDurationMs,\n finishReason: cached.metadata.finishReason,\n }\n } else {\n assertNoSettledResponseWithoutCache(costLedger, callId)\n const providerCallId = callId ?? `analyst-benchmark-${randomUUID()}`\n let modelProxy: ExternalOptimizerModelProxy | undefined\n const completed = await runWithCleanup({\n label: 'public benchmark direct model resources',\n run: async () => {\n modelProxy = await startExternalOptimizerModelProxy({\n call: config.call,\n callRef,\n recordExecution: config.recordExecution,\n model,\n budget: {\n maxCostUsd,\n maxRequests: 1,\n maxRequestBytes: maxModelRequestBytes,\n maxResponseBytes: maxModelResponseBytes,\n maxOutputTokensPerRequest: maxOutputTokens,\n maxReasoningTokensPerRequest: maxReasoningTokens,\n pricing,\n requestTimeoutMs: modelRequestTimeoutMs,\n },\n costLedger,\n channel: 'analyst',\n phase: 'analyst.public-benchmark',\n actor,\n tags: costTags,\n callId: providerCallId,\n ...(context.signal ? { signal: context.signal } : {}),\n })\n const llmOptions: LlmClientOptions = {\n baseUrl: modelProxy.baseUrl,\n apiKey: modelProxy.apiKey,\n maximumAttempts: 1,\n jsonSchemaTransport: 'json-object',\n jsonPayloadMode: 'exact',\n thinking: 'disabled',\n }\n try {\n const completed = await callLlmJson<unknown>(request, {\n ...llmOptions,\n ...(context.signal ? { signal: context.signal } : {}),\n idempotencyKey: providerCallId,\n })\n const response = parsePublicBenchmarkModelResponse(dataset, completed.value)\n const responseProducedAt = new Date().toISOString()\n const receipt = requiredSettledReceipt(costLedger, providerCallId)\n if (cacheIdentity) {\n writePublicBenchmarkResponseCache(durability!.responseCacheDir, {\n kind: 'agent-eval/public-benchmark-model-response',\n ...cacheIdentity,\n callId: providerCallId,\n status: 'succeeded',\n // Cache the provider's own payload, not the parse result: a\n // resume re-parses this value, so it must stay exactly what\n // the contract accepts.\n response: completed.value,\n metadata: {\n providerModel: completed.result.model,\n providerDurationMs: completed.result.durationMs,\n finishReason: completed.result.finishReason ?? null,\n producedAt: responseProducedAt,\n },\n receipt: cacheReceiptInput(receipt),\n })\n }\n modelProxy.assertExecutionComplete()\n return { ...completed, response, producedAt: responseProducedAt, receipt }\n } catch (error) {\n const controlFailure = modelProxy.failures().find(isPaidCallControlError)\n if (controlFailure) throw controlFailure\n const receipt = settledReceipt(costLedger, providerCallId)\n if (cacheIdentity) {\n if (receipt) {\n writePublicBenchmarkResponseCache(durability!.responseCacheDir, {\n kind: 'agent-eval/public-benchmark-model-response',\n ...cacheIdentity,\n callId: providerCallId,\n status: 'failed',\n error: publicBenchmarkError(error, []),\n receipt: cacheReceiptInput(receipt),\n })\n }\n }\n throw error\n }\n },\n cleanup: async () => {\n await modelProxy?.close()\n },\n })\n const response = completed.response\n rawPredictions = response.findings\n rejectedBlocks = response.rejectedBlocks\n providerModel = completed.result.model\n producedAt = completed.producedAt\n modelMetadata = {\n ...modelMetadata,\n responseSource: 'provider',\n report: response.report,\n providerModel: completed.result.model,\n providerDurationMs: completed.result.durationMs,\n finishReason: completed.result.finishReason ?? null,\n cost: costReceiptMetadata(completed.receipt),\n }\n }\n\n const converted = await publicBenchmarkPredictionsToFindings({\n dataset,\n trajectoryId,\n predictions: rawPredictions,\n store: input.traceStore,\n analystId: 'direct',\n providerModel,\n producedAt: requiredString(producedAt ?? '', 'finding producedAt'),\n ...(context.signal ? { signal: context.signal } : {}),\n })\n modelFindings = converted.findings\n if (converted.diagnostics) {\n modelMetadata = {\n ...modelMetadata,\n blockDiagnostics: { ...converted.diagnostics, rejectedBlocks },\n }\n }\n if (dataset === 'codetracebench') {\n await validateCodeTraceFindingEvidence({\n trajectoryId,\n findings: modelFindings,\n store: input.traceStore,\n ...(context.signal ? { signal: context.signal } : {}),\n })\n }\n return {\n findings: modelFindings,\n usage: usageReceiptFromCostLedger(costLedger, {\n channel: 'analyst',\n tags: costTags,\n }),\n metadata: modelMetadata,\n }\n } catch (error) {\n if (context.signal?.aborted) throw error\n if (isPaidCallControlError(error)) throw error\n return {\n findings: [],\n usage: usageReceiptFromCostLedger(costLedger, {\n channel: 'analyst',\n tags: costTags,\n }),\n error: publicBenchmarkError(error, []),\n metadata: {\n ...modelMetadata,\n rawPredictions,\n acceptedFindings: modelFindings,\n },\n }\n }\n },\n }\n}\n\nfunction settleCachedResponse(\n costLedger: CostLedgerHandle,\n cached: PublicBenchmarkResponseCacheEntry,\n): CostReceipt {\n const settled = costLedger.list().find((receipt) => receipt.callId === cached.callId)\n const pending = costLedger.listPending?.().find((record) => record.callId === cached.callId)\n if (settled && pending) {\n throw new CostCallConflictError(\n `benchmark response '${cached.callId}' is both pending and settled`,\n { callId: cached.callId },\n )\n }\n const receipt = pending\n ? costLedger.reconcile(cached.callId, cached.receipt, {\n ...(cached.status === 'failed' ? { failed: true } : {}),\n })\n : settled\n if (!receipt) {\n throw new CostCallConflictError(\n `benchmark response cache '${cached.callId}' has no matching cost record`,\n { callId: cached.callId },\n )\n }\n assertCacheReceiptMatches(cached, receipt)\n return receipt\n}\n\nfunction assertNoSettledResponseWithoutCache(\n costLedger: CostLedgerHandle,\n callId: string | undefined,\n): void {\n if (!callId) return\n if (costLedger.list().some((receipt) => receipt.callId === callId)) {\n throw new CostCallConflictError(\n `settled benchmark call '${callId}' has no durable response cache`,\n { callId },\n )\n }\n}\n\nfunction assertCacheReceiptMatches(\n cached: PublicBenchmarkResponseCacheEntry,\n receipt: CostReceipt,\n): void {\n const expected = cached.receipt\n const mismatch =\n receipt.callId !== cached.callId ||\n receipt.model !== expected.model ||\n receipt.inputTokens !== expected.inputTokens ||\n receipt.outputTokens !== expected.outputTokens ||\n (receipt.reasoningTokens ?? 0) !== (expected.reasoningTokens ?? 0) ||\n (receipt.cachedTokens ?? 0) !== (expected.cachedTokens ?? 0) ||\n (receipt.cacheWriteTokens ?? 0) !== (expected.cacheWriteTokens ?? 0) ||\n (expected.actualCostUsd !== undefined && receipt.actualCostUsd !== expected.actualCostUsd) ||\n (expected.estimatedCostUsd !== undefined &&\n receipt.estimatedCostUsd !== expected.estimatedCostUsd) ||\n (expected.costUnknown === true && !receipt.costUnknown) ||\n (expected.usageUnknown === true && !receipt.usageUnknown) ||\n (cached.status === 'succeeded' && receipt.error !== undefined) ||\n (cached.status === 'failed' && receipt.error === undefined)\n if (mismatch) {\n throw new CostCallConflictError(\n `benchmark response cache receipt does not match cost record '${cached.callId}'`,\n { callId: cached.callId, receipt },\n )\n }\n}\n\nfunction isPaidCallControlError(error: unknown): boolean {\n return (\n error instanceof CostAccountingIncompleteError ||\n error instanceof CostCallConflictError ||\n error instanceof CostCeilingReachedError ||\n error instanceof CostLedgerPersistenceError ||\n error instanceof CostReceiptCaptureError ||\n error instanceof CostReservationExceededError\n )\n}\n\nfunction settledReceipt(costLedger: CostLedgerHandle, callId: string): CostReceipt | undefined {\n return costLedger.list().find((receipt) => receipt.callId === callId)\n}\n\nfunction requiredSettledReceipt(costLedger: CostLedgerHandle, callId: string): CostReceipt {\n const receipt = settledReceipt(costLedger, callId)\n if (!receipt) {\n throw new CostAccountingIncompleteError(\n `caller-owned model call '${callId}' produced no cost receipt`,\n )\n }\n return receipt\n}\n\nfunction cacheReceiptInput(receipt: CostReceipt): CostReceiptInput {\n const usage = {\n model: receipt.model,\n inputTokens: receipt.inputTokens,\n outputTokens: receipt.outputTokens,\n ...(receipt.reasoningTokens === undefined ? {} : { reasoningTokens: receipt.reasoningTokens }),\n ...(receipt.cachedTokens === undefined ? {} : { cachedTokens: receipt.cachedTokens }),\n ...(receipt.cacheWriteTokens === undefined\n ? {}\n : { cacheWriteTokens: receipt.cacheWriteTokens }),\n ...(receipt.usageUnknown === undefined ? {} : { usageUnknown: receipt.usageUnknown }),\n }\n if (receipt.costUnknown) return { ...usage, costUnknown: true }\n if (receipt.actualCostUsd !== undefined) {\n return { ...usage, actualCostUsd: receipt.actualCostUsd }\n }\n if (receipt.estimatedCostUsd !== undefined) {\n return { ...usage, estimatedCostUsd: receipt.estimatedCostUsd }\n }\n if (receipt.pricing) {\n return {\n ...usage,\n customTokenPricing: {\n inputUsdPerMillion: receipt.pricing.inputUsdPerThousand * 1_000,\n ...(receipt.pricing.cachedInputUsdPerThousand === undefined\n ? {}\n : { cachedInputUsdPerMillion: receipt.pricing.cachedInputUsdPerThousand * 1_000 }),\n ...(receipt.pricing.cacheWriteUsdPerThousand === undefined\n ? {}\n : { cacheWriteUsdPerMillion: receipt.pricing.cacheWriteUsdPerThousand * 1_000 }),\n outputUsdPerMillion: receipt.pricing.outputUsdPerThousand * 1_000,\n },\n }\n }\n return { ...usage, estimatedCostUsd: receipt.costUsd }\n}\n\nfunction costReceiptMetadata(receipt: CostReceipt): Record<string, unknown> {\n if (receipt.actualCostUsd !== undefined) {\n return { source: 'provider', actualCostUsd: receipt.actualCostUsd }\n }\n if (receipt.estimatedCostUsd !== undefined) {\n return { source: 'external-estimate', estimatedCostUsd: receipt.estimatedCostUsd }\n }\n if (receipt.pricing) {\n return {\n source: 'agent-eval-model-pricing',\n estimatedCostUsd: receipt.costUsd,\n ratesPerThousandTokens: receipt.pricing,\n }\n }\n return {\n source: 'unknown',\n estimatedCostUsd: null,\n }\n}\n\nfunction pricingForModel(model: string): NonNullable<PublicAnalystBenchmarkModelConfig['pricing']> {\n const pricing = resolveModelPricing(model)\n if (!pricing) {\n throw new Error(\n `no pricing is configured for '${model}'; provide PublicAnalystBenchmarkModelConfig.pricing`,\n )\n }\n return {\n inputUsdPerMillion: pricing.input * 1_000,\n outputUsdPerMillion: pricing.output * 1_000,\n }\n}\n\nconst ModelSeveritySchema = z.enum(['critical', 'high', 'medium', 'low', 'info'])\nconst AgentRxPredictionSchema = z\n .object({\n step: z.number().int().positive(),\n severity: ModelSeveritySchema,\n claim: z.string().min(1),\n confidence: z.number().min(0).max(1),\n rationale: z.string().min(1).optional(),\n recommended_action: z.string().min(1).optional(),\n })\n .strict()\nconst CodeTraceBlockPredictionSchema = z\n .object({\n first_step: z.number().int().positive(),\n last_step: z.number().int().positive(),\n consequence_step: z.number().int().positive(),\n escape_status: z.enum(['escaped', 'unescaped']),\n severity: ModelSeveritySchema,\n claim: z.string().min(1),\n confidence: z.number().min(0).max(1),\n rationale: z.string().min(1).optional(),\n recommended_action: z.string().min(1).optional(),\n })\n .strict()\n .superRefine((block, ctx) => {\n if (block.last_step < block.first_step) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `failure block last_step ${block.last_step} precedes first_step ${block.first_step}`,\n })\n return\n }\n const length = block.last_step - block.first_step + 1\n if (length > MAX_INCORRECT_BLOCK_STEPS) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `failure block spans ${length} steps; the maximum is ${MAX_INCORRECT_BLOCK_STEPS}`,\n })\n }\n // The damage a block caused can surface anywhere from the block's own first\n // step onward: a step carries both the assistant action and the observation\n // it produced, and a long block often shows its damage mid-block rather than\n // at the end. Only a consequence before the block began is incoherent.\n if (block.consequence_step < block.first_step) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `failure block consequence_step ${block.consequence_step} precedes first_step ${block.first_step}`,\n })\n }\n })\nconst AgentRxCategorySchema = z.enum([\n 'instruction-plan-adherence-failure',\n 'invention-of-new-information',\n 'invalid-invocation',\n 'misinterpretation-of-tool-output-handoff-failure',\n 'intent-plan-misalignment',\n 'underspecified-user-intent',\n 'intent-not-supported',\n 'guardrails-triggered',\n 'system-failure',\n 'inconclusive',\n])\nconst CodeTraceModelResponseEnvelopeSchema = z\n .object({\n report: z.string().min(1).max(4_000),\n findings: z.array(z.unknown()).max(MAX_INCORRECT_BLOCKS),\n })\n .strict()\nconst AgentRxModelResponseSchema = z\n .object({\n report: z.string().min(1).max(4_000),\n findings: z\n .array(AgentRxPredictionSchema.extend({ category: AgentRxCategorySchema }).strict())\n .max(1),\n })\n .strict()\n\ntype AgentRxModelPrediction = z.infer<typeof AgentRxPredictionSchema> & {\n category?: z.infer<typeof AgentRxCategorySchema>\n}\ntype CodeTraceModelPrediction = z.infer<typeof CodeTraceBlockPredictionSchema>\ntype PublicBenchmarkModelPrediction = AgentRxModelPrediction | CodeTraceModelPrediction\n\nfunction parsePublicBenchmarkModelResponse(\n dataset: PublicAnalystBenchmarkDataset,\n value: unknown,\n): { report: string; findings: PublicBenchmarkModelPrediction[]; rejectedBlocks: string[] } {\n if (dataset === 'agentrx') {\n return { ...AgentRxModelResponseSchema.parse(value), rejectedBlocks: [] }\n }\n // The envelope is the contract and stays strict. Individual blocks are model\n // output: one malformed block must not void a case whose remaining blocks are\n // usable and whose provider call is already paid for. Every rejection is\n // reported so a run cannot silently lose predictions.\n const envelope = CodeTraceModelResponseEnvelopeSchema.parse(value)\n const findings: CodeTraceModelPrediction[] = []\n const rejectedBlocks: string[] = []\n for (const [index, block] of envelope.findings.entries()) {\n const parsed = CodeTraceBlockPredictionSchema.safeParse(block)\n if (parsed.success) {\n findings.push(parsed.data)\n continue\n }\n rejectedBlocks.push(\n `block ${index}: ${parsed.error.issues\n .map((issue) => `${issue.path.join('.') || '<root>'} ${issue.message}`)\n .join('; ')}`,\n )\n }\n if (findings.length === 0 && envelope.findings.length > 0) {\n throw new ValidationError(\n `every reported failure block was malformed: ${rejectedBlocks.join(' | ')}`,\n )\n }\n return { report: envelope.report, findings, rejectedBlocks }\n}\n\nasync function publicBenchmarkPredictionsToFindings(options: {\n dataset: PublicAnalystBenchmarkDataset\n trajectoryId: string\n predictions: readonly PublicBenchmarkModelPrediction[]\n store: TraceAnalysisStore\n analystId: string\n providerModel: string\n producedAt: string\n signal?: AbortSignal\n}): Promise<{ findings: AnalystFinding[]; diagnostics: CodeTraceBlockDiagnostics | undefined }> {\n if (options.predictions.length === 0 && options.dataset === 'agentrx') {\n return { findings: [], diagnostics: undefined }\n }\n if (options.dataset === 'agentrx') {\n const prediction = options.predictions[0]!\n if (!('step' in prediction)) {\n throw new Error('AgentRx model output must name a single root-cause step')\n }\n if (!prediction.category) {\n throw new Error('AgentRx model output is missing its failure category')\n }\n const evidenceByStep = await resolveAssistantStepEvidence({\n trajectoryId: options.trajectoryId,\n steps: [prediction.step],\n store: options.store,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n const [finding] = agentRxPredictionsToFindings(\n options.trajectoryId,\n [\n {\n failure_case: prediction.category,\n step_number: prediction.step,\n description: prediction.rationale ?? prediction.claim,\n },\n ],\n {\n analystId: options.analystId,\n producedAt: options.producedAt,\n confidence: prediction.confidence,\n },\n )\n if (!finding) throw new Error('AgentRx output adapter produced no root-cause finding')\n return {\n findings: [\n {\n ...finding,\n evidence_refs: [evidenceByStep.get(prediction.step)!],\n metadata: {\n ...finding.metadata,\n model: options.providerModel,\n },\n },\n ],\n diagnostics: undefined,\n }\n }\n\n const blocks = options.predictions.map((prediction): CodeTraceFailureBlock => {\n if (!('first_step' in prediction)) {\n throw new Error('CodeTraceBench model output must report first_step/last_step failure blocks')\n }\n return {\n firstStep: prediction.first_step,\n lastStep: prediction.last_step,\n consequenceStep: prediction.consequence_step,\n escapeStatus: prediction.escape_status,\n severity: prediction.severity,\n claim: prediction.claim,\n confidence: prediction.confidence,\n ...(prediction.rationale === undefined ? {} : { rationale: prediction.rationale }),\n ...(prediction.recommended_action === undefined\n ? {}\n : { recommendedAction: prediction.recommended_action }),\n metadata: { analysis_mode: 'direct-baseline', model: options.providerModel },\n }\n })\n return expandCodeTraceFailureBlocks({\n trajectoryId: options.trajectoryId,\n blocks,\n store: options.store,\n analystId: options.analystId,\n producedAt: options.producedAt,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n}\n\nasync function prepareSingleTraceContext(\n store: TraceAnalysisStore,\n context: { signal?: AbortSignal },\n): Promise<string | undefined> {\n const storeContext = context.signal ? { signal: context.signal } : undefined\n const overview = await store.getOverview(undefined, storeContext)\n if (overview.total_traces !== 1 || overview.sample_trace_ids.length !== 1) {\n throw new Error(\n `public model benchmark requires exactly one trace, received ${overview.total_traces}`,\n )\n }\n const traceId = overview.sample_trace_ids[0]!\n for (const perAttributeByteCap of TRACE_PROJECTION_ATTRIBUTE_BYTE_CAPS) {\n const viewed = await store.viewTrace(\n {\n trace_id: traceId,\n per_attribute_byte_cap: perAttributeByteCap,\n },\n storeContext,\n )\n if (!viewed.spans) continue\n return JSON.stringify({\n trace_id: traceId,\n per_attribute_byte_cap: perAttributeByteCap,\n spans: viewed.spans,\n })\n }\n return undefined\n}\n\nfunction trajectoryIdFromCaseId(dataset: PublicAnalystBenchmarkDataset, caseId: string): string {\n const prefix = dataset === 'agentrx' ? 'agentrx:' : 'codetrace:'\n if (!caseId.startsWith(prefix) || caseId.length === prefix.length) {\n throw new Error(`unexpected ${dataset} benchmark case id '${caseId}'`)\n }\n return caseId.slice(prefix.length)\n}\n","import type { CodeTraceFailureBlock, CodeTraceStepAssignment } from './benchmark-public-adapters'\n\n/**\n * One sample block's contribution to a consensus block, in the shape the\n * decision record persists: block coordinates plus how many consensus steps\n * the block's accepted steps cover.\n */\nexport interface CodeTraceConsensusContributor {\n sample: number\n firstStep: number\n lastStep: number\n consequenceStep: number\n confidence: number\n overlapSteps: number\n}\n\nexport interface CodeTraceConsensusBlockDecision {\n firstStep: number\n lastStep: number\n consequenceStep: number\n escapeStatus: 'escaped' | 'unescaped'\n /** Mean confidence across every contributor. */\n confidence: number\n donor: CodeTraceConsensusContributor\n contributors: CodeTraceConsensusContributor[]\n}\n\n/** The full voting record: every step any sample accepted, and what won. */\nexport interface CodeTraceConsensusDecision {\n samples: number\n threshold: number\n stepVotes: Array<{ step: number; votes: number; kept: boolean }>\n blocks: CodeTraceConsensusBlockDecision[]\n}\n\n/**\n * Step-level majority vote across independent analyst samples.\n *\n * Each sample's accepted, evidence-resolved steps count as one vote per step.\n * Steps present in at least ceil(k/2) samples survive; surviving steps are\n * reassembled into contiguous consensus blocks. Each consensus block borrows\n * its metadata (consequence step, escape status, claim, severity, rationale)\n * from the contributing sample block with the largest step overlap — ties go\n * to the higher-confidence block, then to the earlier sample — while its\n * confidence is the mean across every contributor. The returned blocks still\n * pass through the shared expansion, so width, count, and evidence rules are\n * enforced there, never assumed here.\n */\nexport function consensusCodeTraceBlocks(\n sampleAssignments: ReadonlyArray<readonly CodeTraceStepAssignment[]>,\n): { blocks: CodeTraceFailureBlock[]; decision: CodeTraceConsensusDecision } {\n const samples = sampleAssignments.length\n if (samples < 2) {\n throw new RangeError('step-level consensus requires at least two samples')\n }\n const threshold = Math.ceil(samples / 2)\n const votesByStep = new Map<number, number>()\n sampleAssignments.forEach((assignments, sample) => {\n const seen = new Set<number>()\n for (const { step } of assignments) {\n if (!Number.isSafeInteger(step) || step < 0) {\n throw new RangeError(`sample ${sample} assigned a non-step value: ${step}`)\n }\n if (seen.has(step)) {\n throw new Error(`sample ${sample} assigned step ${step} to more than one block`)\n }\n seen.add(step)\n votesByStep.set(step, (votesByStep.get(step) ?? 0) + 1)\n }\n })\n const stepVotes = [...votesByStep]\n .sort(([left], [right]) => left - right)\n .map(([step, votes]) => ({ step, votes, kept: votes >= threshold }))\n const keptSteps = stepVotes.filter((entry) => entry.kept).map((entry) => entry.step)\n\n const blocks: CodeTraceFailureBlock[] = []\n const blockDecisions: CodeTraceConsensusBlockDecision[] = []\n for (const segment of contiguousSegments(keptSteps)) {\n const contributors = segmentContributors(sampleAssignments, segment)\n // Every kept step carries >= threshold sample votes, so a segment always\n // has at least one contributor.\n const donor = contributors.reduce(betterDonor)\n const confidence =\n contributors.reduce((sum, contributor) => sum + contributor.block.confidence, 0) /\n contributors.length\n blocks.push({\n firstStep: segment.firstStep,\n lastStep: segment.lastStep,\n consequenceStep: donor.block.consequenceStep,\n escapeStatus: donor.block.escapeStatus,\n severity: donor.block.severity,\n claim: donor.block.claim,\n confidence,\n ...(donor.block.rationale === undefined ? {} : { rationale: donor.block.rationale }),\n ...(donor.block.recommendedAction === undefined\n ? {}\n : { recommendedAction: donor.block.recommendedAction }),\n metadata: {\n ...donor.block.metadata,\n consensus_samples: samples,\n consensus_threshold: threshold,\n consensus_contributors: contributors.length,\n consensus_donor_sample: donor.sample,\n },\n })\n blockDecisions.push({\n firstStep: segment.firstStep,\n lastStep: segment.lastStep,\n consequenceStep: donor.block.consequenceStep,\n escapeStatus: donor.block.escapeStatus,\n confidence,\n donor: publicContributor(donor),\n contributors: contributors.map(publicContributor),\n })\n }\n return { blocks, decision: { samples, threshold, stepVotes, blocks: blockDecisions } }\n}\n\ninterface SegmentContributor {\n sample: number\n block: CodeTraceFailureBlock\n overlapSteps: number\n}\n\n/**\n * All (sample, block) pairs whose accepted steps intersect the segment,\n * ordered by sample then by first overlapping step — the deterministic\n * tie-break order for donor selection.\n */\nfunction segmentContributors(\n sampleAssignments: ReadonlyArray<readonly CodeTraceStepAssignment[]>,\n segment: { firstStep: number; lastStep: number },\n): SegmentContributor[] {\n const contributors: SegmentContributor[] = []\n sampleAssignments.forEach((assignments, sample) => {\n const overlapByBlock = new Map<CodeTraceFailureBlock, number>()\n for (const { step, block } of assignments) {\n if (step < segment.firstStep || step > segment.lastStep) continue\n overlapByBlock.set(block, (overlapByBlock.get(block) ?? 0) + 1)\n }\n for (const [block, overlapSteps] of overlapByBlock) {\n contributors.push({ sample, block, overlapSteps })\n }\n })\n return contributors\n}\n\nfunction betterDonor(left: SegmentContributor, right: SegmentContributor): SegmentContributor {\n if (right.overlapSteps !== left.overlapSteps) {\n return right.overlapSteps > left.overlapSteps ? right : left\n }\n if (right.block.confidence !== left.block.confidence) {\n return right.block.confidence > left.block.confidence ? right : left\n }\n // Remaining ties keep the earlier contributor: lower sample index, then the\n // block whose first overlapping step comes first (construction order).\n return left\n}\n\nfunction publicContributor(contributor: SegmentContributor): CodeTraceConsensusContributor {\n return {\n sample: contributor.sample,\n firstStep: contributor.block.firstStep,\n lastStep: contributor.block.lastStep,\n consequenceStep: contributor.block.consequenceStep,\n confidence: contributor.block.confidence,\n overlapSteps: contributor.overlapSteps,\n }\n}\n\nfunction contiguousSegments(\n sortedSteps: readonly number[],\n): Array<{ firstStep: number; lastStep: number }> {\n const segments: Array<{ firstStep: number; lastStep: number }> = []\n for (const step of sortedSteps) {\n const current = segments[segments.length - 1]\n if (current && step === current.lastStep + 1) {\n current.lastStep = step\n continue\n }\n segments.push({ firstStep: step, lastStep: step })\n }\n return segments\n}\n","import {\n CostAccountingIncompleteError,\n CostCallConflictError,\n CostCeilingReachedError,\n CostLedger,\n CostLedgerPersistenceError,\n CostReceiptCaptureError,\n CostReservationExceededError,\n type CustomTokenPricing,\n} from '../cost-ledger'\nimport { resolveModelPricing } from '../metrics'\nimport type { AnalystBenchmarkOutput, AnalystBenchmarkRunner } from './benchmark'\nimport { effectiveAnalystProtocolSha256 } from './benchmark-instructions-override'\nimport {\n adaptPublicBenchmarkFindings,\n type CodeTraceStepAssignment,\n codeTraceBlockMetadataFromSubject,\n expandCodeTraceFailureBlocks,\n} from './benchmark-public-adapters'\nimport { consensusCodeTraceBlocks } from './benchmark-public-consensus'\nimport { publicBenchmarkError } from './benchmark-public-errors'\nimport { createPublicBenchmarkDirectRunner } from './benchmark-public-model'\nimport { publicBenchmarkRlmInstructions } from './benchmark-public-prompt'\nimport type {\n PublicAnalystBenchmarkDataset,\n PublicAnalystBenchmarkModelConfig,\n} from './benchmark-public-types'\nimport { createDspyRlmTraceEngine, type DspyRlmTraceEngineOptions } from './dspy-rlm-engine'\nimport { evidenceRefsFromRawFinding } from './finding-signature'\nimport { runTraceAnalyst, type TraceAnalystDefinition } from './kind-factory'\nimport type { AnalystFinding, AnalystRunInputs, AnalystUsageReceipt } from './types'\nimport { makeFinding } from './types'\nimport { usageReceiptFromCostLedger } from './usage-receipt'\n\n/** Public benchmark candidate that runs the actual recursive trace analyst. */\nexport function createPublicBenchmarkRlmRunner(\n dataset: PublicAnalystBenchmarkDataset,\n config: PublicAnalystBenchmarkModelConfig,\n): AnalystBenchmarkRunner<AnalystRunInputs> {\n const costLedger = config.costLedger ?? new CostLedger()\n const samples = config.dspyRlm?.samples ?? 1\n if (!Number.isSafeInteger(samples) || samples < 1) {\n throw new RangeError('dspyRlm.samples must be a positive safe integer')\n }\n if (samples > 1 && dataset !== 'codetracebench') {\n throw new Error(\n 'dspyRlm.samples > 1 requires the codetracebench dataset; step-level consensus is defined on its block grammar',\n )\n }\n const limits = {\n maxIterations: config.dspyRlm?.maxIterations ?? 14,\n maxLlmCalls: config.dspyRlm?.maxLlmCalls ?? 8,\n maxToolCalls: config.dspyRlm?.maxToolCalls ?? 80,\n maxOutputChars: config.dspyRlm?.maxOutputChars ?? 8_000,\n }\n const pricing = config.pricing ?? pricingForModel(config.model)\n const engine = createDspyRlmTraceEngine({\n call: config.call,\n callRef: config.callRef,\n recordExecution: config.recordExecution,\n model: config.model,\n maxOutputTokens: config.maxOutputTokens,\n timeoutMs: config.timeoutMs,\n maxCostUsd: config.maxCostUsdPerAnalysis ?? 1,\n pricing,\n ...(config.maxReasoningTokens === undefined\n ? {}\n : { maxReasoningTokens: config.maxReasoningTokens }),\n ...(config.maxModelRequestBytes === undefined\n ? {}\n : { maxModelRequestBytes: config.maxModelRequestBytes }),\n ...(config.maxModelResponseBytes === undefined\n ? {}\n : { maxModelResponseBytes: config.maxModelResponseBytes }),\n ...(config.modelRequestTimeoutMs === undefined\n ? {}\n : { modelRequestTimeoutMs: config.modelRequestTimeoutMs }),\n ...(config.dspyRlm?.maxModelRequests === undefined\n ? {}\n : { maxModelRequests: config.dspyRlm.maxModelRequests }),\n ...(config.dspyRlm?.traceToolRequestBytes === undefined &&\n config.dspyRlm?.traceToolResponseBytes === undefined\n ? {}\n : {\n traceToolLimits: {\n ...(config.dspyRlm?.traceToolRequestBytes === undefined\n ? {}\n : { maxRequestBytes: config.dspyRlm.traceToolRequestBytes }),\n ...(config.dspyRlm?.traceToolResponseBytes === undefined\n ? {}\n : { maxResponseBytes: config.dspyRlm.traceToolResponseBytes }),\n },\n }),\n ...(config.dspyRlm?.traceToolTimeoutMs === undefined\n ? {}\n : { traceToolTimeoutMs: config.dspyRlm.traceToolTimeoutMs }),\n ...(config.dspyRlm?.runner ? { runner: config.dspyRlm.runner } : {}),\n } satisfies DspyRlmTraceEngineOptions)\n const instructions = config.instructionsOverride?.text ?? publicBenchmarkRlmInstructions(dataset)\n const protocolSha256 = effectiveAnalystProtocolSha256(dataset, config.instructionsOverride)\n const definition = publicBenchmarkDefinition(dataset, limits, instructions)\n // Abstention floor: shares this runner's cost ledger so a fallback call's\n // spend lands under the same case and repetition tags as the engine's calls.\n // The fallback always runs the stock direct prompt — an instructions override\n // replaces only the recursive instructions, and the effective protocol digest\n // binds the stock digest (covering this fallback prompt) to the override.\n const { instructionsOverride: _rlmOnlyOverride, ...directConfig } = config\n void _rlmOnlyOverride\n const abstentionFallbackRunner = createPublicBenchmarkDirectRunner(dataset, {\n ...directConfig,\n costLedger,\n })\n\n return {\n id: 'dspy-rlm',\n async analyze(input, context) {\n const trajectoryId = trajectoryIdFromCaseId(dataset, context.caseId)\n const tags = {\n benchmarkCaseId: context.caseId,\n benchmarkRepetition: String(context.repetition),\n }\n let usage: AnalystUsageReceipt | undefined\n let rawFindings: AnalystFinding[] = []\n try {\n if (!input.traceStore) {\n throw new Error(`${dataset} DSPy RLM runner requires a trace store`)\n }\n if (samples > 1) {\n const store = input.traceStore\n const caseUsageFilter = { channel: 'analyst' as const, tags }\n const sampleRuns: Array<Record<string, unknown>> = []\n const sampleAssignments: CodeTraceStepAssignment[][] = []\n let totalModelCalls = 0\n let totalToolCalls = 0\n for (let sample = 0; sample < samples; sample += 1) {\n let sampleUsage: AnalystUsageReceipt | undefined\n const completed = await runTraceAnalyst({\n definition,\n engine,\n store,\n context: {\n runId: context.caseId,\n // A distinct correlation id per sample tags each sample's\n // provider calls individually in the shared ledger, while the\n // case and repetition tags keep all k samples' spend — and a\n // fallback's — on this one case.\n correlationId: `${context.caseId}:${context.repetition}:sample-${sample}`,\n costLedger,\n costPhase: 'analyst.public-benchmark.dspy-rlm',\n tags,\n recordUsage: (receipt) => {\n sampleUsage = receipt\n usage = usageReceiptFromCostLedger(costLedger, caseUsageFilter)\n },\n signal: context.signal,\n },\n })\n const producedAt = new Date().toISOString()\n const sampleFindings = completed.findings.map((finding) =>\n makeFinding({\n analyst_id: 'dspy-rlm',\n area: 'incorrect',\n subject: finding.subject,\n claim: finding.claim,\n rationale: finding.rationale,\n severity: finding.severity,\n confidence: finding.confidence,\n evidence_refs: evidenceRefsFromRawFinding(finding),\n recommended_action: finding.recommended_action,\n metadata: {\n analysis_mode: 'recursive',\n engine: 'dspy-rlm',\n model: config.model,\n sample,\n ...(codeTraceBlockMetadataFromSubject(finding.subject) ?? {}),\n },\n produced_at: producedAt,\n }),\n )\n rawFindings = [...rawFindings, ...sampleFindings]\n const adapted = await adaptPublicBenchmarkFindings({\n dataset,\n trajectoryId,\n findings: sampleFindings,\n analystId: 'dspy-rlm',\n store,\n ...(context.signal ? { signal: context.signal } : {}),\n })\n const assignments = adapted.stepBlocks ?? []\n sampleAssignments.push(assignments)\n totalModelCalls += completed.modelCalls\n totalToolCalls += completed.toolCalls\n sampleRuns.push({\n sample,\n answer: completed.answer,\n trajectory: completed.trajectory,\n modelCalls: completed.modelCalls,\n toolCalls: completed.toolCalls,\n runtime: completed.runtime,\n blocks: sampleBlockRecords(assignments),\n steps: assignments.map((assignment) => assignment.step),\n ...(adapted.diagnostics ? { blockDiagnostics: adapted.diagnostics } : {}),\n ...(sampleUsage ? { usage: sampleUsage } : {}),\n })\n }\n const consensus = consensusCodeTraceBlocks(sampleAssignments)\n const expanded = await expandCodeTraceFailureBlocks({\n trajectoryId,\n blocks: consensus.blocks,\n store,\n analystId: 'dspy-rlm',\n producedAt: new Date().toISOString(),\n ...(context.signal ? { signal: context.signal } : {}),\n })\n // Abstention floor, applied AFTER the vote and never per sample:\n // one direct structured call fires only when no step reached the\n // majority threshold, so the whole panel — not one noisy sample —\n // failed to localize anything.\n let fallback: AnalystBenchmarkOutput | undefined\n if (consensus.blocks.length === 0) {\n fallback = await abstentionFallbackRunner.analyze(input, context)\n }\n usage = usageReceiptFromCostLedger(costLedger, caseUsageFilter)\n return {\n findings: fallback && !fallback.error ? fallback.findings : expanded.findings,\n usage,\n metadata: {\n analysisMode: 'recursive',\n engine: 'dspy-rlm',\n protocolSha256,\n samples,\n sampleRuns,\n consensus: consensus.decision,\n blockDiagnostics: expanded.diagnostics,\n modelCalls: totalModelCalls,\n toolCalls: totalToolCalls,\n ...(fallback\n ? {\n abstentionFallback: 'direct',\n ...(fallback.metadata ? { abstentionFallbackMetadata: fallback.metadata } : {}),\n ...(fallback.error ? { abstentionFallbackError: fallback.error } : {}),\n }\n : {}),\n },\n }\n }\n const completed = await runTraceAnalyst({\n definition,\n engine,\n store: input.traceStore,\n context: {\n runId: context.caseId,\n correlationId: `${context.caseId}:${context.repetition}`,\n costLedger,\n costPhase: 'analyst.public-benchmark.dspy-rlm',\n tags,\n recordUsage: (receipt) => {\n usage = receipt\n },\n signal: context.signal,\n },\n })\n const producedAt = new Date().toISOString()\n rawFindings = completed.findings.map((finding) =>\n makeFinding({\n analyst_id: 'dspy-rlm',\n area: dataset === 'agentrx' ? 'root-cause' : 'incorrect',\n subject: finding.subject,\n claim: finding.claim,\n rationale: finding.rationale,\n severity: finding.severity,\n confidence: finding.confidence,\n evidence_refs: evidenceRefsFromRawFinding(finding),\n recommended_action: finding.recommended_action,\n metadata: {\n analysis_mode: 'recursive',\n engine: 'dspy-rlm',\n model: config.model,\n // Block coordinates from the subject grammar, so a row retained\n // by a failed or empty case still carries its block metadata.\n ...(dataset === 'codetracebench'\n ? codeTraceBlockMetadataFromSubject(finding.subject)\n : {}),\n },\n produced_at: producedAt,\n }),\n )\n const adapted = await adaptPublicBenchmarkFindings({\n dataset,\n trajectoryId,\n findings: rawFindings,\n analystId: 'dspy-rlm',\n store: input.traceStore,\n ...(context.signal ? { signal: context.signal } : {}),\n })\n // Abstention floor: the engine finished but submitted no finding at\n // all — indistinguishable from a missed investigation, so one direct\n // structured call gets a second opinion. An explicit clean verdict\n // arrives as a finding and never reaches this branch; an engine error\n // is thrown above and never reaches it either.\n let fallback: AnalystBenchmarkOutput | undefined\n if (completed.findings.length === 0) {\n fallback = await abstentionFallbackRunner.analyze(input, context)\n usage = usageReceiptFromCostLedger(costLedger, {\n channel: 'analyst',\n tags: {\n benchmarkCaseId: context.caseId,\n benchmarkRepetition: String(context.repetition),\n },\n })\n }\n return {\n findings: fallback && !fallback.error ? fallback.findings : adapted.findings,\n usage,\n metadata: {\n analysisMode: 'recursive',\n engine: 'dspy-rlm',\n protocolSha256,\n ...(adapted.diagnostics ? { blockDiagnostics: adapted.diagnostics } : {}),\n answer: completed.answer,\n trajectory: completed.trajectory,\n modelCalls: completed.modelCalls,\n toolCalls: completed.toolCalls,\n runtime: completed.runtime,\n ...(fallback\n ? {\n abstentionFallback: 'direct',\n ...(fallback.metadata ? { abstentionFallbackMetadata: fallback.metadata } : {}),\n ...(fallback.error ? { abstentionFallbackError: fallback.error } : {}),\n }\n : {}),\n },\n }\n } catch (error) {\n if (context.signal?.aborted) throw error\n if (isPaidCallControlError(error)) throw error\n return {\n findings: [],\n usage,\n error: publicBenchmarkError(error, []),\n metadata: {\n analysisMode: 'recursive',\n engine: 'dspy-rlm',\n ...(samples > 1 ? { samples } : {}),\n rawFindings,\n },\n }\n }\n },\n }\n}\n\n/** Per-sample accepted blocks with the exact steps the expansion kept for each. */\nfunction sampleBlockRecords(\n assignments: readonly CodeTraceStepAssignment[],\n): Array<Record<string, unknown>> {\n const stepsByBlock = new Map<CodeTraceStepAssignment['block'], number[]>()\n for (const { step, block } of assignments) {\n const steps = stepsByBlock.get(block)\n if (steps) steps.push(step)\n else stepsByBlock.set(block, [step])\n }\n return [...stepsByBlock].map(([block, acceptedSteps]) => ({\n firstStep: block.firstStep,\n lastStep: block.lastStep,\n consequenceStep: block.consequenceStep,\n escapeStatus: block.escapeStatus,\n severity: block.severity,\n confidence: block.confidence,\n claim: block.claim,\n acceptedSteps,\n }))\n}\n\nfunction publicBenchmarkDefinition(\n dataset: PublicAnalystBenchmarkDataset,\n limits: {\n maxIterations: number\n maxLlmCalls: number\n maxToolCalls: number\n maxOutputChars: number\n },\n instructions: string,\n): TraceAnalystDefinition {\n return {\n id: dataset === 'agentrx' ? 'agentrx-dspy-rlm' : 'codetracebench-dspy-rlm',\n description:\n dataset === 'agentrx'\n ? 'Localizes the first unrecoverable root-cause step.'\n : 'Localizes every incorrect state-changing assistant step.',\n area: dataset === 'agentrx' ? 'root-cause' : 'incorrect',\n version: '1.0.0',\n question:\n dataset === 'agentrx'\n ? 'What is the first unrecoverable root cause in this failed trajectory?'\n : 'Which assistant steps are incorrect under the CodeTraceBench definition?',\n instructions,\n toolGroup: 'singleTrace',\n limits,\n }\n}\n\nfunction pricingForModel(model: string): CustomTokenPricing {\n const pricing = resolveModelPricing(model)\n if (!pricing) {\n throw new Error(\n `no pricing is configured for '${model}'; provide PublicAnalystBenchmarkModelConfig.pricing`,\n )\n }\n return {\n inputUsdPerMillion: pricing.input * 1_000,\n outputUsdPerMillion: pricing.output * 1_000,\n }\n}\n\nfunction trajectoryIdFromCaseId(dataset: PublicAnalystBenchmarkDataset, caseId: string): string {\n const prefix = dataset === 'agentrx' ? 'agentrx:' : 'codetrace:'\n if (!caseId.startsWith(prefix) || caseId.length === prefix.length) {\n throw new Error(`unexpected ${dataset} benchmark case id '${caseId}'`)\n }\n return caseId.slice(prefix.length)\n}\n\nfunction isPaidCallControlError(error: unknown): boolean {\n return (\n error instanceof CostAccountingIncompleteError ||\n error instanceof CostCallConflictError ||\n error instanceof CostCeilingReachedError ||\n error instanceof CostLedgerPersistenceError ||\n error instanceof CostReceiptCaptureError ||\n error instanceof CostReservationExceededError\n )\n}\n","import { constants } from 'node:fs'\nimport { type FileHandle, open, readdir } from 'node:fs/promises'\nimport { relative, resolve, sep } from 'node:path'\nimport type { TraceAnalysisStore } from '../trace-analyst/store'\nimport {\n createOtlpBufferTraceStore,\n DEFAULT_MAX_TRACE_FILE_BYTES,\n otlpTextToTraceAnalysisStore,\n} from '../trace-analyst/store-otlp'\nimport { type AnalystBenchmarkCase, traceStoreEvidenceResolver } from './benchmark'\nimport {\n type AgentRxRow,\n agentRxBenchmarkCase,\n type CodeTraceBenchRow,\n codeTraceBenchCase,\n} from './benchmark-datasets'\nimport {\n assertNoBenchmarkLabelsInArtifact,\n assertNoBenchmarkLabelsInTrace,\n} from './benchmark-evidence-validation'\nimport {\n isRecord,\n type PreparedPublicAnalystBenchmark,\n type PublicAnalystBenchmarkDataset,\n type PublicBenchmarkDistributions,\n type PublicBenchmarkSelectionReport,\n type PublicBenchmarkValueDistribution,\n positiveSafeInteger,\n safeInteger,\n} from './benchmark-public-types'\nimport {\n appendVerificationArtifactsToOtlp,\n DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES,\n loadCodeTraceVerificationArtifacts,\n sha256Digest,\n type VerificationArtifactManifest,\n} from './benchmark-verification-artifacts'\nimport type { AnalystRunInputs } from './types'\n\nconst DEFAULT_MAX_PUBLIC_BENCHMARK_LABEL_BYTES = 256 * 1024 * 1024\nconst INPUT_OPEN_FLAGS = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)\n\ninterface ImmutableInputSnapshot {\n bytes: Buffer\n sha256: string\n text: string\n}\n\nexport async function loadPublicBenchmarkRows(\n path: string,\n): Promise<Array<Record<string, unknown>>> {\n const snapshot = await readImmutableInputSnapshot(\n resolve(path),\n DEFAULT_MAX_PUBLIC_BENCHMARK_LABEL_BYTES,\n )\n return parsePublicBenchmarkRows(snapshot.text, path)\n}\n\nfunction parsePublicBenchmarkRows(text: string, path: string): Array<Record<string, unknown>> {\n const trimmed = text.trim()\n if (!trimmed) throw new Error(`public analyst benchmark dataset is empty: ${path}`)\n\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch {\n return parseJsonl(trimmed, path)\n }\n if (Array.isArray(parsed)) return records(parsed, path)\n if (isRecord(parsed) && Array.isArray(parsed.data)) return records(parsed.data, `${path}.data`)\n if (isRecord(parsed) && Array.isArray(parsed.cases)) {\n return records(parsed.cases, `${path}.cases`)\n }\n if (isRecord(parsed)) return [parsed]\n throw new TypeError(`public analyst benchmark dataset must contain JSON objects: ${path}`)\n}\n\nexport function selectPublicBenchmarkRows(\n dataset: PublicAnalystBenchmarkDataset,\n rows: readonly Record<string, unknown>[],\n options: { limit: number; seed: number },\n): Array<Record<string, unknown>> {\n positiveSafeInteger(options.limit, 'limit')\n safeInteger(options.seed, 'seed')\n if (rows.length === 0) throw new Error('public analyst benchmark dataset has no rows')\n\n const byId = new Map<string, Record<string, unknown>>()\n for (const row of rows) {\n const id = publicBenchmarkRowId(dataset, row)\n if (byId.has(id)) {\n throw new Error(`public analyst benchmark dataset repeats trajectory id '${id}'`)\n }\n byId.set(id, row)\n }\n\n return [...byId]\n .sort(\n ([left], [right]) =>\n selectionKey(options.seed, left).localeCompare(selectionKey(options.seed, right)) ||\n left.localeCompare(right),\n )\n .slice(0, Math.min(options.limit, byId.size))\n .map(([, row]) => row)\n}\n\nexport function publicBenchmarkDistributions(\n dataset: PublicAnalystBenchmarkDataset,\n rows: readonly Record<string, unknown>[],\n): PublicBenchmarkDistributions {\n const values: Record<keyof PublicBenchmarkDistributions, Array<string | undefined>> = {\n class: [],\n agent: [],\n model: [],\n difficulty: [],\n solved: [],\n }\n for (const row of rows) {\n const benchmarkCase =\n dataset === 'agentrx'\n ? agentRxBenchmarkCase(row as unknown as AgentRxRow, undefined)\n : codeTraceBenchCase(row as unknown as CodeTraceBenchRow, undefined)\n values.class.push(\n dataset === 'codetracebench'\n ? benchmarkCase.expectedIssues.length > 0\n ? 'positive'\n : row.solved === true\n ? 'trusted-negative'\n : row.solved === false\n ? 'unlabeled-failure'\n : 'unlabeled-unknown'\n : benchmarkCase.expectedIssues[0]?.areas?.[0],\n )\n values.agent.push(\n scalarDistributionValue(row.agent) ??\n (dataset === 'agentrx' ? rootAgent(row as unknown as AgentRxRow) : undefined),\n )\n values.model.push(scalarDistributionValue(row.model))\n values.difficulty.push(scalarDistributionValue(row.difficulty))\n values.solved.push(scalarDistributionValue(row.solved))\n }\n return {\n class: valueDistribution(values.class),\n agent: valueDistribution(values.agent),\n model: valueDistribution(values.model),\n difficulty: valueDistribution(values.difficulty),\n solved: valueDistribution(values.solved),\n }\n}\n\nexport function publicBenchmarkSelectionReport(\n dataset: PublicAnalystBenchmarkDataset,\n source: readonly Record<string, unknown>[],\n selected: readonly Record<string, unknown>[],\n seed: number,\n): PublicBenchmarkSelectionReport {\n const census = source.length === selected.length\n return {\n method: census ? 'census' : 'deterministic-hash',\n seed,\n sourceCount: source.length,\n selectedCount: selected.length,\n stratified: false,\n representativeOfInput: census,\n source: publicBenchmarkDistributions(dataset, source),\n selected: publicBenchmarkDistributions(dataset, selected),\n }\n}\n\nexport async function preparePublicAnalystBenchmark(options: {\n dataset: PublicAnalystBenchmarkDataset\n labelsPath: string\n traceDir: string\n artifactDir?: string\n maxArtifactBytes?: number\n limit: number\n seed: number\n}): Promise<PreparedPublicAnalystBenchmark> {\n const labelsPath = resolve(options.labelsPath)\n const traceRoot = resolve(options.traceDir)\n const artifactRoot = options.artifactDir ? resolve(options.artifactDir) : undefined\n const labelSnapshot = await readImmutableInputSnapshot(\n labelsPath,\n DEFAULT_MAX_PUBLIC_BENCHMARK_LABEL_BYTES,\n )\n const rows = parsePublicBenchmarkRows(labelSnapshot.text, labelsPath)\n const selected = selectPublicBenchmarkRows(options.dataset, rows, {\n limit: options.limit,\n seed: options.seed,\n })\n const selectedTrajectoryIds = new Set(\n selected.map((row) => publicBenchmarkRowId(options.dataset, row)),\n )\n const stores = await indexSelectedSingleTraceFiles(traceRoot, selectedTrajectoryIds)\n const resolver = traceStoreEvidenceResolver<AnalystRunInputs>((input) => {\n if (!input.traceStore) throw new Error('prepared benchmark case has no trace store')\n return input.traceStore\n })\n const traceFiles: PreparedPublicAnalystBenchmark['traceFiles'] = []\n const verificationArtifacts: VerificationArtifactManifest[] = []\n const cases: AnalystBenchmarkCase<AnalystRunInputs>[] = []\n\n for (const row of selected) {\n const trajectoryId = publicBenchmarkRowId(options.dataset, row)\n const indexed = stores.get(trajectoryId)\n if (!indexed) {\n throw new Error(\n `public analyst benchmark trace directory has no single-trace OTLP JSONL for '${trajectoryId}'`,\n )\n }\n let modelVisibleOtlp = indexed.text\n let traceStore = indexed.store\n let artifactDir: string | undefined\n let verificationManifest: VerificationArtifactManifest | undefined\n if (options.dataset === 'codetracebench') {\n if (!options.artifactDir?.trim()) {\n throw new Error(\n '--artifact-dir is required for CodeTraceBench so final verification evidence is not omitted',\n )\n }\n const artifacts = await loadCodeTraceVerificationArtifacts({\n artifactDir: options.artifactDir,\n row: row as unknown as CodeTraceBenchRow,\n maxBytes: options.maxArtifactBytes ?? DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES,\n })\n for (const artifact of artifacts.files) {\n assertNoBenchmarkLabelsInArtifact({\n traceId: trajectoryId,\n relativePath: artifact.relativePath,\n content: artifact.content,\n })\n }\n verificationManifest = shareableVerificationManifest(\n artifacts.manifest,\n artifactRoot ?? resolve(options.artifactDir),\n )\n const collisions = await indexed.store.hasSpans({\n trace_id: trajectoryId,\n span_ids: [\n ...artifacts.manifest.files.map((file) => file.spanId),\n artifacts.manifest.outcomeSpanId,\n ],\n })\n if (collisions.length > 0) {\n throw new Error(\n `CodeTraceBench '${trajectoryId}' trace already contains benchmark verification span '${collisions[0]}'`,\n )\n }\n modelVisibleOtlp = appendVerificationArtifactsToOtlp(\n indexed.text,\n trajectoryId,\n artifacts,\n indexed.latestTimestamp,\n )\n traceStore = otlpTextToTraceAnalysisStore(modelVisibleOtlp)\n artifactDir =\n artifacts.manifest.status === 'present' ? artifacts.manifest.caseDirectory : undefined\n verificationArtifacts.push(verificationManifest)\n }\n const labelLeakScan = assertNoBenchmarkLabelsInTrace({\n traceId: trajectoryId,\n otlpText: modelVisibleOtlp,\n })\n\n const input: AnalystRunInputs = { traceStore, artifactDir }\n const benchmarkCase =\n options.dataset === 'agentrx'\n ? agentRxBenchmarkCase(row as unknown as AgentRxRow, input, {\n stepCount: indexed.stepCount,\n })\n : codeTraceBenchCase(row as unknown as CodeTraceBenchRow, input)\n\n for (const evidence of benchmarkCase.labeledEvidence ?? []) {\n const resolved = await resolver({\n caseId: benchmarkCase.id,\n caseInput: input,\n evidence: { kind: evidence.kind ?? 'span', uri: evidence.uri },\n })\n if (!resolved) {\n throw new Error(\n `${benchmarkCase.id}: missing labeled span ${spanIdFromEvidence(evidence.uri) ?? evidence.uri} in ${indexed.path}`,\n )\n }\n }\n\n cases.push({\n ...benchmarkCase,\n metadata: {\n ...benchmarkCase.metadata,\n traceFileRelativePath: slashRelative(traceRoot, indexed.path),\n traceFileSha256: indexed.sha256,\n labelLeakScan,\n ...(verificationManifest ? { verificationArtifacts: verificationManifest } : {}),\n },\n })\n traceFiles.push({\n traceId: trajectoryId,\n relativePath: slashRelative(traceRoot, indexed.path),\n sha256: indexed.sha256,\n })\n }\n\n return {\n cases,\n sourceRowCount: rows.length,\n selectedCaseIds: cases.map((testCase) => testCase.id),\n labelsSha256: labelSnapshot.sha256,\n traceFiles,\n verificationArtifacts,\n selection: publicBenchmarkSelectionReport(options.dataset, rows, selected, options.seed),\n }\n}\n\nasync function indexSelectedSingleTraceFiles(\n traceDir: string,\n selectedTraceIds: ReadonlySet<string>,\n): Promise<\n Map<\n string,\n {\n path: string\n sha256: string\n store: TraceAnalysisStore\n latestTimestamp: string\n text: string\n stepCount: number\n }\n >\n> {\n if (selectedTraceIds.size === 0) {\n throw new Error('public analyst benchmark selected no trace ids')\n }\n const entries = await readdir(traceDir, { withFileTypes: true })\n const files = entries\n .filter((entry) => entry.isFile() && entry.name.endsWith('.jsonl'))\n .map((entry) => resolve(traceDir, entry.name))\n .sort()\n if (files.length === 0) {\n throw new Error(`public analyst benchmark trace directory has no JSONL files: ${traceDir}`)\n }\n\n const indexed = new Map<\n string,\n {\n path: string\n sha256: string\n store: TraceAnalysisStore\n latestTimestamp: string\n text: string\n stepCount: number\n }\n >()\n for (const path of files) {\n const snapshot = await readImmutableInputSnapshot(path, DEFAULT_MAX_TRACE_FILE_BYTES)\n const store = createOtlpBufferTraceStore(snapshot.bytes)\n const overview = await store.getOverview()\n if (overview.total_traces !== 1 || overview.sample_trace_ids.length !== 1) {\n throw new Error(\n `public analyst benchmark trace file must contain exactly one trace: ${path} contains ${overview.total_traces}`,\n )\n }\n if (!overview.time_range) {\n throw new Error(`public analyst benchmark trace file has no valid timestamps: ${path}`)\n }\n const traceId = overview.sample_trace_ids[0]!\n if (!selectedTraceIds.has(traceId)) continue\n if (indexed.has(traceId)) {\n throw new Error(`public analyst benchmark trace id '${traceId}' appears in multiple files`)\n }\n indexed.set(traceId, {\n path,\n sha256: snapshot.sha256,\n store,\n latestTimestamp: overview.time_range.latest,\n text: snapshot.text,\n stepCount: traceStepCount(snapshot.text, path),\n })\n }\n return indexed\n}\n\nasync function readImmutableInputSnapshot(\n path: string,\n maxBytes: number,\n): Promise<ImmutableInputSnapshot> {\n if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {\n throw new RangeError('benchmark input maxBytes must be a positive safe integer')\n }\n const handle = await open(path, INPUT_OPEN_FLAGS)\n try {\n return await readImmutableInputHandle(handle, path, maxBytes)\n } finally {\n await handle.close()\n }\n}\n\nasync function readImmutableInputHandle(\n handle: FileHandle,\n path: string,\n maxBytes: number,\n): Promise<ImmutableInputSnapshot> {\n const before = await handle.stat({ bigint: true })\n if (!before.isFile()) {\n throw new TypeError(`public analyst benchmark input must be a regular file: ${path}`)\n }\n if (before.size > BigInt(maxBytes)) {\n throw new RangeError(\n `public analyst benchmark input exceeds ${maxBytes} bytes: ${path} has ${before.size}`,\n )\n }\n\n const size = Number(before.size)\n const bytes = Buffer.allocUnsafe(size)\n let offset = 0\n while (offset < size) {\n const result = await handle.read(bytes, offset, size - offset, offset)\n if (result.bytesRead === 0) {\n throw new Error(`public analyst benchmark input changed while being read: ${path}`)\n }\n offset += result.bytesRead\n }\n const overflow = Buffer.allocUnsafe(1)\n const extra = await handle.read(overflow, 0, 1, size)\n const after = await handle.stat({ bigint: true })\n if (\n extra.bytesRead !== 0 ||\n before.dev !== after.dev ||\n before.ino !== after.ino ||\n before.size !== after.size ||\n before.mtimeNs !== after.mtimeNs ||\n before.ctimeNs !== after.ctimeNs\n ) {\n throw new Error(`public analyst benchmark input changed while being read: ${path}`)\n }\n\n let text: string\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n } catch (error) {\n throw new TypeError(\n `public analyst benchmark input is not valid UTF-8: ${path}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n return Object.freeze({\n bytes,\n sha256: sha256Digest(bytes),\n text,\n })\n}\n\nfunction traceStepCount(text: string, path: string): number {\n const steps = parseJsonl(text, path)\n .map((row) => row.span_id)\n .filter((spanId): spanId is string => typeof spanId === 'string')\n .map((spanId) => /^step-(\\d+)$/.exec(spanId)?.[1])\n .filter((step): step is string => step !== undefined)\n .map(Number)\n .filter((step) => Number.isSafeInteger(step) && step > 0)\n if (steps.length === 0) {\n throw new Error(`public analyst benchmark trace has no step-<n> spans: ${path}`)\n }\n return Math.max(...steps)\n}\n\nfunction shareableVerificationManifest(\n manifest: VerificationArtifactManifest,\n artifactRoot: string,\n): VerificationArtifactManifest {\n return {\n ...manifest,\n caseDirectory: slashRelative(artifactRoot, manifest.caseDirectory),\n caseDirectoriesSearched: manifest.caseDirectoriesSearched.map((path) =>\n slashRelative(artifactRoot, path),\n ),\n files: manifest.files.map((file) => ({\n ...file,\n path: slashRelative(artifactRoot, file.path),\n })),\n }\n}\n\nfunction slashRelative(root: string, path: string): string {\n const value = relative(root, path)\n if (!value || value === '..' || value.startsWith(`..${sep}`)) {\n if (!value) return '.'\n throw new Error(`benchmark artifact path escapes its declared root: ${path}`)\n }\n return value.replaceAll('\\\\', '/')\n}\n\nfunction parseJsonl(text: string, path: string): Array<Record<string, unknown>> {\n const rows: Array<Record<string, unknown>> = []\n for (const [index, line] of text.split(/\\r?\\n/).entries()) {\n const trimmed = line.trim()\n if (!trimmed) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch (error) {\n throw new Error(\n `${path}:${index + 1}: invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n if (!isRecord(parsed)) {\n throw new TypeError(`${path}:${index + 1}: dataset row must be a JSON object`)\n }\n rows.push(parsed)\n }\n if (rows.length === 0) throw new Error(`public analyst benchmark dataset is empty: ${path}`)\n return rows\n}\n\nfunction records(values: readonly unknown[], path: string): Array<Record<string, unknown>> {\n return values.map((value, index) => {\n if (!isRecord(value)) throw new TypeError(`${path}[${index}] must be a JSON object`)\n return value\n })\n}\n\nfunction publicBenchmarkRowId(\n dataset: PublicAnalystBenchmarkDataset,\n row: Record<string, unknown>,\n): string {\n const value = dataset === 'agentrx' ? row.trajectory_id : row.traj_id\n if ((typeof value !== 'string' && typeof value !== 'number') || !String(value).trim()) {\n throw new TypeError(\n `${dataset} dataset row requires a non-empty ${dataset === 'agentrx' ? 'trajectory_id' : 'traj_id'}`,\n )\n }\n return String(value)\n}\n\nfunction spanIdFromEvidence(uri: string): string | null {\n const match = /\\/span\\/([^/]+)$/.exec(uri)\n return match?.[1] ? decodeURIComponent(match[1]) : null\n}\n\nfunction selectionKey(seed: number, id: string): string {\n return sha256Digest(`${seed}\\u0000${id}`)\n}\n\nfunction valueDistribution(\n values: readonly (string | undefined)[],\n): PublicBenchmarkValueDistribution {\n const counts = new Map<string, number>()\n let missing = 0\n for (const value of values) {\n if (value === undefined) {\n missing += 1\n continue\n }\n counts.set(value, (counts.get(value) ?? 0) + 1)\n }\n return {\n total: values.length,\n missing,\n counts: Object.fromEntries([...counts].sort(([left], [right]) => left.localeCompare(right))),\n }\n}\n\nfunction scalarDistributionValue(value: unknown): string | undefined {\n if (typeof value === 'string') return value.trim() || undefined\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return undefined\n}\n\nfunction rootAgent(row: AgentRxRow): string | undefined {\n const rootCauseId = row.root_cause_failure_id ?? row.root_cause?.failure_id\n const root = row.failures.find((failure) => String(failure.failure_id) === String(rootCauseId))\n return scalarDistributionValue(root?.failed_agent)\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 | Issue-bearing | Trusted negatives | Unlabeled | Micro recall | Micro precision | Micro F1 | Macro recall | Macro precision | Macro F1 | Critical step | Citation coverage | Quote coverage | Label-location agreement | Citation resolution | Resolution unknown runs | Unresolved citations | Resolution errors | Trusted-negative false positives | Trusted-negative failures | Unlabeled prediction rate | Unlabeled failures | Prediction repeat | Prediction repeated cases | Matched-label repeat | Matched-label repeated cases | Latency min/mean/p50/p95/max ms | Locally timed runs | Runner-reported latency runs | Unknown latency | 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} | ${summary.issueBearingRuns} | ${summary.trustedNegativeRuns} | ${summary.unlabeledRuns} | ${optionalRate(summary.issueRecall)} | ${optionalRate(summary.findingPrecision)} | ${optionalRate(summary.f1)} | ${optionalRate(summary.macroIssueRecall)} | ${optionalRate(summary.macroFindingPrecision)} | ${optionalRate(summary.macroF1)} | ${optionalRate(summary.criticalStepAccuracy)} | ${optionalRate(summary.citationCoverage)} | ${optionalRate(summary.citationExcerptCoverage)} | ${optionalRate(summary.citationLabelAgreement)} | ${optionalRate(summary.citationResolution)} | ${summary.citationResolutionUnknownRuns} | ${summary.unresolvedCitations} | ${summary.citationResolutionErrors} | ${optionalRate(summary.trustedNegativeFalsePositiveRate)} | ${optionalRate(summary.trustedNegativeFailureRate)} | ${optionalRate(summary.unlabeledPredictionRate)} | ${optionalRate(summary.unlabeledFailureRate)} | ${optionalRate(summary.predictionAgreement)} | ${summary.predictionAgreementCases} | ${optionalRate(summary.matchedLabelAgreement)} | ${summary.matchedLabelAgreementCases} | ${latency(summary.latencyMs)} | ${summary.benchmarkClockLatencyRuns} | ${summary.runnerReportedLatencyRuns} | ${summary.latencyUnknownRuns} | ${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 | Independent clusters | Eligible observations | Paired observations | Missing baseline | Missing candidate | Missing asymmetry | Survivor-only | Baseline mean | Candidate mean | Delta | Interval | Minimum sample | Population inference | Limits |',\n '| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: | ---: | ---: | --- | --- | --- | --- |',\n )\n for (const metric of comparison.metrics) {\n lines.push(\n `| ${metric.metric} | ${metric.direction} | ${metric.pairedCases} | ${metric.pairedClusters} | ${metric.eligibleObservations} | ${metric.pairedObservations} | ${metric.baselineMissingObservations} | ${metric.candidateMissingObservations} | ${metric.asymmetricMissingObservations} | ${metric.survivorOnly ? 'yes' : 'no'} | ${optionalMetricNumber(metric.baselineMean)} | ${optionalMetricNumber(metric.candidateMean)} | ${optionalSigned(metric.meanDelta)} | ${interval(metric.intervalLow, metric.intervalHigh)} | ${metric.minimumSampleMet ? 'yes' : 'no'} | ${metric.populationInferenceEligible ? 'yes' : 'no'} | ${escapeCell(metric.inferenceLimitations.join(', ') || 'none')} |`,\n )\n }\n }\n\n lines.push(\n '',\n '## Runs',\n '',\n '| Runner | Case | Cluster | Label state | Tags | Case metadata | Runner metadata | Rep | Execution index | Completed | Recall | Precision | F1 | Critical step | Citation coverage | Quote coverage | Label-location agreement | Citation resolution | Prediction on label-empty case | Scored findings | Diagnostic findings | Unlabeled citations | Unresolved citations | Resolution errors | Latency ms | Latency source | 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 const positive = observation.labelState === 'positive'\n lines.push(\n `| ${escapeCell(observation.runnerId)} | ${escapeCell(observation.caseId)} | ${escapeCell(observation.clusterId)} | ${observation.labelState} | ${escapeCell(observation.caseTags.join(', '))} | ${escapeCell(json(observation.caseMetadata))} | ${escapeCell(json(observation.runnerMetadata))} | ${observation.repetition} | ${observation.executionIndex} | ${observation.error ? 'no' : 'yes'} | ${positive ? rate(observation.score.issueRecall) : 'n/a'} | ${positive ? rate(observation.score.findingPrecision) : 'n/a'} | ${positive ? rate(observation.score.f1) : 'n/a'} | ${optionalRate(observation.score.criticalStepAccuracy)} | ${optionalRate(observation.score.citationCoverage)} | ${optionalRate(observation.score.citationExcerptCoverage)} | ${optionalRate(observation.score.citationLabelAgreement)} | ${optionalRate(observation.evidenceResolution?.validity ?? null)} | ${positive ? 'n/a' : observation.score.predictionOnLabelEmptyCase ? 'yes' : 'no'} | ${observation.score.supportedFindingIndexes.length}/${observation.error ? 0 : observation.findings.length} | ${observation.error ? observation.findings.length : 0} | ${observation.score.unlabeledEvidence.length} | ${observation.evidenceResolution?.unresolvedEvidence.length ?? 'unknown'} | ${observation.evidenceResolution?.errors.length ?? 'unknown'} | ${optionalNumber(observation.latencyMs)} | ${observation.latencySource} | ${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 optionalNumber(value: number | null): string {\n return value === null ? 'unknown' : number(value)\n}\n\nfunction optionalMetricNumber(value: number | null): string {\n return value === null ? 'n/a' : number(value)\n}\n\nfunction signed(value: number): string {\n return `${value >= 0 ? '+' : ''}${number(value)}`\n}\n\nfunction optionalSigned(value: number | null): string {\n return value === null ? 'n/a' : signed(value)\n}\n\nfunction interval(low: number | null, high: number | null): string {\n return low === null || high === null ? 'n/a' : `[${number(low)}, ${number(high)}]`\n}\n\nfunction latency(value: AnalystBenchmarkResult['summaries'][number]['latencyMs']): string {\n if (value === null) return 'unknown'\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 { arch, platform } from 'node:os'\nimport { resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { acquireSingleRunLock } from '../campaign/single-run-lock'\nimport { createRunCostLedger, fsCampaignStorage } from '../campaign/storage'\nimport {\n CostAccountingIncompleteError,\n type CostLedger,\n type CostLedgerSummary,\n} from '../cost-ledger'\nimport { resolveModelPricing } from '../metrics'\nimport {\n type AnalystBenchmarkObservation,\n type AnalystBenchmarkResult,\n type AnalystBenchmarkRunner,\n runAnalystBenchmark,\n traceStoreEvidenceResolver,\n} from './benchmark'\nimport {\n AGENT_RX_UPSTREAM_REVISION,\n renderAgentRxCalibrationMarkdown,\n summarizeAgentRxCalibration,\n} from './benchmark-agentrx-calibration'\nimport type {\n AnalystBenchmarkArtifact,\n VerificationAvailabilitySummary,\n} from './benchmark-command-artifact'\nimport { digestCanonical } from './benchmark-command-artifact'\nimport {\n type AnalystBenchmarkOutputPaths,\n createLocalRunReceipt,\n createObservationAppender,\n createRunIdentity,\n initializeRunFiles,\n openOutputDirectory,\n prepareOutputLockPath,\n readAndValidateResumeFiles,\n readProgress,\n regularFileExists,\n writeExclusiveOrVerify,\n} from './benchmark-command-persistence'\nimport {\n assertCompletedArtifactMatchesRun,\n assertSameObservations,\n readAnalystBenchmarkArtifact,\n} from './benchmark-command-result'\nimport { compareAnalystRunners } from './benchmark-comparison'\nimport {\n ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256,\n ANALYST_BENCHMARK_IMPLEMENTATION_SHA256,\n} from './benchmark-implementation'\nimport {\n effectiveAnalystProtocolSha256,\n readAnalystInstructionsOverride,\n} from './benchmark-instructions-override'\nimport {\n renderCodeTraceCalibrationMarkdown,\n summarizeCodeTraceCalibration,\n} from './benchmark-public-calibration'\nimport { createPublicBenchmarkDirectRunner } from './benchmark-public-model'\nimport { createPublicBenchmarkRlmRunner } from './benchmark-public-rlm'\nimport {\n emptyPublicBenchmarkRunner,\n type PublicAnalystBenchmarkDataset,\n type PublicAnalystBenchmarkModelConfig,\n type PublicAnalystBenchmarkModelOwner,\n type PublicBenchmarkSelectionReport,\n preparePublicAnalystBenchmark,\n} from './benchmark-real-model'\nimport { renderAnalystBenchmarkMarkdown } from './benchmark-report'\nimport {\n DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES,\n type VerificationArtifactManifest,\n} from './benchmark-verification-artifacts'\nimport type { AnalystRunInputs } from './types'\n\nexport {\n ANALYST_BENCHMARK_COST_LEDGER_FILE,\n ANALYST_BENCHMARK_LOCAL_RECEIPT_FILE,\n ANALYST_BENCHMARK_MANIFEST_FILE,\n ANALYST_BENCHMARK_OBSERVATIONS_FILE,\n type AnalystBenchmarkArtifact,\n type AnalystBenchmarkLocalRunReceipt,\n type AnalystBenchmarkProgressRow,\n type AnalystBenchmarkRunIdentity,\n type AnalystBenchmarkRunManifest,\n type VerificationAvailabilitySummary,\n} from './benchmark-command-artifact'\nexport { readAnalystBenchmarkArtifact } from './benchmark-command-result'\n\nexport interface AnalystBenchmarkCommandDependencies {\n createAnalystRunner?: (\n dataset: PublicAnalystBenchmarkDataset,\n config: PublicAnalystBenchmarkModelConfig,\n ) => AnalystBenchmarkRunner<AnalystRunInputs>\n loadModelExecutionOwner?: (\n moduleRef: string,\n context: {\n model: string\n environment: Readonly<NodeJS.ProcessEnv>\n },\n ) => Promise<PublicAnalystBenchmarkModelOwner>\n}\n\n/**\n * Which analyst produces the scored arm.\n *\n * `dspy-rlm` is the recursive engine. `direct` is the one-shot comparison arm.\n */\nexport type AnalystBenchmarkRunnerKind = 'dspy-rlm' | 'direct'\n\nexport interface AnalystBenchmarkCommandConfig {\n dataset: PublicAnalystBenchmarkDataset\n analyst: AnalystBenchmarkRunnerKind\n labelsPath: string\n traceDir: string\n artifactDir?: string\n outDir: string\n revision: string\n split: string\n model: PublicAnalystBenchmarkModelConfig\n limit: number\n seed: number\n concurrency: number\n repetitions: number\n /** Recursive-engine runs per case; above 1 the consensus is scored. */\n rlmSamples: number\n maxCostUsd: number\n maxArtifactBytes: number\n modelOwnerModule: string\n command: string\n resume: boolean\n}\n\nexport { AGENT_RX_UPSTREAM_REVISION } from './benchmark-agentrx-calibration'\n\nexport async function runAnalystBenchmarkCommand(\n argv: readonly string[],\n env: NodeJS.ProcessEnv = process.env,\n dependencies: AnalystBenchmarkCommandDependencies = {},\n): Promise<number> {\n if (argv.includes('--help') || argv.includes('-h')) {\n process.stdout.write(`${ANALYST_BENCHMARK_HELP}\\n`)\n return 0\n }\n const config = await parseCommandConfig(argv, env, dependencies)\n const outputLock = acquireSingleRunLock({\n lockPath: await prepareOutputLockPath(config.outDir),\n })\n try {\n return await executeAnalystBenchmarkCommand(config, dependencies)\n } finally {\n outputLock.release()\n }\n}\n\nasync function executeAnalystBenchmarkCommand(\n config: AnalystBenchmarkCommandConfig,\n dependencies: AnalystBenchmarkCommandDependencies,\n): Promise<number> {\n const paths = await openOutputDirectory(config.outDir, config.resume)\n\n const prepared = await preparePublicAnalystBenchmark({\n dataset: config.dataset,\n labelsPath: config.labelsPath,\n traceDir: config.traceDir,\n artifactDir: config.artifactDir,\n maxArtifactBytes: config.maxArtifactBytes,\n limit: config.limit,\n seed: config.seed,\n })\n const identity = createRunIdentity(config, prepared)\n const localReceipt = createLocalRunReceipt(config, paths)\n const localIdentitySha256 = digestCanonical(localReceipt.local)\n const identitySha256 = digestCanonical(identity)\n const manifest = config.resume\n ? await readAndValidateResumeFiles(\n paths,\n identity,\n identitySha256,\n localIdentitySha256,\n localReceipt,\n )\n : await initializeRunFiles(paths, identity, identitySha256, localIdentitySha256, localReceipt)\n const progress = await readProgress(\n paths.observations,\n manifest.identitySha256,\n prepared.selectedCaseIds,\n config.repetitions,\n config.analyst,\n )\n const costLedger = createRunCostLedger({\n storage: fsCampaignStorage(),\n runDir: paths.directory,\n costCeilingUsd: config.maxCostUsd,\n })\n\n if (await regularFileExists(paths.result)) {\n assertCostLedgerFinalizable(costLedger)\n const artifact = await readAnalystBenchmarkArtifact(paths.result)\n assertCompletedArtifactMatchesRun(artifact, manifest, progress.observations, prepared)\n const markdown = renderArtifactMarkdown(artifact)\n await writeExclusiveOrVerify(paths.report, markdown)\n printSuccessSummary(artifact, paths)\n return benchmarkExitCode(artifact.result, config.analyst)\n }\n if (await regularFileExists(paths.report)) {\n throw new Error(\n `benchmark report exists without a completed result; refusing ambiguous resume: ${paths.report}`,\n )\n }\n\n const createAnalystRunner =\n dependencies.createAnalystRunner ??\n ((dataset: PublicAnalystBenchmarkDataset, model: PublicAnalystBenchmarkModelConfig) =>\n config.analyst === 'direct'\n ? createPublicBenchmarkDirectRunner(dataset, model)\n : createPublicBenchmarkRlmRunner(dataset, model))\n const runners = [\n emptyPublicBenchmarkRunner(),\n createAnalystRunner(config.dataset, {\n ...config.model,\n costLedger,\n durability: {\n runIdentitySha256: manifest.identitySha256,\n responseCacheDir: paths.modelResponses,\n },\n }),\n ]\n const appendObservation = createObservationAppender(\n paths.observations,\n manifest.identitySha256,\n progress,\n )\n const runAbort = new AbortController()\n let result: AnalystBenchmarkResult\n try {\n result = await runAnalystBenchmark({\n cases: prepared.cases,\n runners,\n repetitions: config.repetitions,\n maxConcurrency: config.concurrency,\n runnerOrderSeed: config.seed,\n initialObservations: progress.observations,\n signal: runAbort.signal,\n onObservation: async (observation) => {\n assertObservationAccountingComplete(observation, costLedger, config.analyst)\n await appendObservation(observation)\n },\n resolveEvidence: traceStoreEvidenceResolver((input) => {\n if (!input.traceStore) throw new Error('benchmark case has no trace store')\n return input.traceStore\n }),\n benchmark: {\n id: `${config.dataset}-real-model-analyst`,\n dataset: {\n id: config.dataset === 'agentrx' ? 'microsoft/AgentRx' : 'NJU-LINK/CodeTraceBench',\n revision: config.revision,\n split: config.split,\n },\n environment: {\n node: process.version,\n platform: platform(),\n arch: arch(),\n },\n metadata: {\n model: config.model.model,\n modelOwnerCallRef: config.model.callRef,\n rlmSamples: config.rlmSamples,\n outputAdapter:\n config.dataset === 'agentrx'\n ? 'agentrx-taxonomy-and-root-step'\n : 'codetracebench-incorrect-block',\n caseSelection: prepared.selection.method,\n caseSelectionSeed: config.seed,\n selectionStratified: prepared.selection.stratified,\n protocolSha256: effectiveAnalystProtocolSha256(\n config.dataset,\n config.model.instructionsOverride,\n ),\n implementationSha256: ANALYST_BENCHMARK_IMPLEMENTATION_SHA256,\n dependencyLockSha256: ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256,\n populationRepresentativenessProven: false,\n },\n },\n })\n } catch (error) {\n runAbort.abort(error)\n const idle = await costLedger.waitForIdle({\n timeoutMs: Math.min(config.model.timeoutMs, 10_000),\n })\n if (!idle) {\n throw accountingError(costLedger, 'provider calls remain unresolved after cancellation')\n }\n throw error\n }\n assertCostLedgerFinalizable(costLedger)\n result.provenance.startedAt = manifest.createdAt\n const persisted = await readProgress(\n paths.observations,\n manifest.identitySha256,\n prepared.selectedCaseIds,\n config.repetitions,\n config.analyst,\n )\n assertSameObservations(result.observations, persisted.observations)\n const comparisons = [\n compareAnalystRunners(result, {\n baselineRunnerId: 'empty',\n candidateRunnerId: config.analyst,\n seed: config.seed,\n }),\n ]\n const codeTraceCalibration =\n config.dataset === 'codetracebench' ? summarizeCodeTraceCalibration(result) : undefined\n const agentRxCalibration =\n config.dataset === 'agentrx'\n ? summarizeAgentRxCalibration(result, AGENT_RX_UPSTREAM_REVISION)\n : undefined\n const artifact: AnalystBenchmarkArtifact = {\n kind: 'agent-eval/analyst-benchmark-result',\n runIdentitySha256: manifest.identitySha256,\n inputs: {\n dataset: config.dataset,\n datasetRevision: config.revision,\n datasetSplit: config.split,\n labelsSha256: prepared.labelsSha256,\n sourceRowCount: prepared.sourceRowCount,\n traceFiles: prepared.traceFiles,\n verificationArtifacts: prepared.verificationArtifacts,\n verificationAvailability: summarizeVerificationAvailability(prepared.verificationArtifacts),\n selection: {\n limit: config.limit,\n seed: config.seed,\n selectedCaseIds: prepared.selectedCaseIds,\n report: prepared.selection,\n },\n execution: {\n repetitions: config.repetitions,\n concurrency: config.concurrency,\n rlmSamples: config.rlmSamples,\n model: config.model.model,\n modelOwnerCallRef: manifest.identity.config.model.ownerCallRef,\n maxOutputTokens: manifest.identity.config.model.maxOutputTokens,\n maxReasoningTokens: manifest.identity.config.model.maxReasoningTokens,\n maxModelRequestBytes: manifest.identity.config.model.maxRequestBytes,\n maxModelResponseBytes: manifest.identity.config.model.maxResponseBytes,\n modelRequestTimeoutMs: manifest.identity.config.model.requestTimeoutMs,\n timeoutMs: manifest.identity.config.model.timeoutMs,\n pricing: manifest.identity.config.model.pricing,\n recursiveLimits: manifest.identity.config.model.recursiveLimits,\n processLimits: manifest.identity.config.model.processLimits,\n maxCostUsd: config.maxCostUsd,\n maxArtifactBytes: config.maxArtifactBytes,\n analystProtocolSha256: effectiveAnalystProtocolSha256(\n config.dataset,\n config.model.instructionsOverride,\n ),\n ...(config.model.instructionsOverride\n ? { instructionsOverrideSha256: config.model.instructionsOverride.sha256 }\n : {}),\n implementationSha256: ANALYST_BENCHMARK_IMPLEMENTATION_SHA256,\n dependencyLockSha256: ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256,\n },\n },\n result,\n comparisons,\n ...(codeTraceCalibration ? { codeTraceCalibration } : {}),\n ...(agentRxCalibration ? { agentRxCalibration } : {}),\n }\n\n const markdown = renderArtifactMarkdown(artifact)\n await writeExclusiveOrVerify(paths.result, `${JSON.stringify(artifact, null, 2)}\\n`)\n await writeExclusiveOrVerify(paths.report, markdown)\n printSuccessSummary(artifact, paths)\n return benchmarkExitCode(result, config.analyst)\n}\n\nconst NON_SCORABLE_COST_ERRORS = new Set([\n 'CostAccountingIncompleteError',\n 'CostCallConflictError',\n 'CostCeilingReachedError',\n 'CostLedgerPersistenceError',\n 'CostReceiptCaptureError',\n 'CostReservationExceededError',\n])\n\nfunction assertObservationAccountingComplete(\n observation: AnalystBenchmarkObservation,\n costLedger: CostLedger,\n analystRunnerId: string,\n): void {\n if (observation.error && NON_SCORABLE_COST_ERRORS.has(observation.error.class)) {\n throw new CostAccountingIncompleteError(\n `Analyst benchmark stopped before scoring: ${observation.error.message}`,\n )\n }\n if (observation.runnerId !== analystRunnerId) return\n const filter = {\n channel: 'analyst' as const,\n tags: {\n benchmarkCaseId: observation.caseId,\n benchmarkRepetition: String(observation.repetition),\n },\n }\n const summary = costLedger.summary(filter)\n // Every settled call is honestly accounted: a known cost is summed, and a\n // provider response that omitted usage is flagged and excluded from the\n // reported total. Neither invalidates a run, whether the case succeeded or\n // failed. Only a call left pending, one lost, or one charged beyond its\n // maximum leaves the cost genuinely unknowable, and those still halt.\n if (!costAccountingIsTrustworthy(summary)) {\n throw accountingError(\n costLedger,\n 'the recursive analyst has incomplete cost accounting',\n filter,\n )\n }\n}\n\nconst BUDGET_BREACH_REASON = /exceeding its enforced maximum/\n\n/**\n * Cost accounting is trustworthy when every call resolved and none breached its\n * budget. A recursive analyst on a real provider will occasionally receive a\n * settled response whose usage the provider omitted; that call is honestly\n * recorded as unknown and excluded from the reported cost, so it does not\n * invalidate a completed run. A call left pending, one lost, or one charged\n * beyond its maximum is a genuine integrity failure and still halts.\n */\nfunction costAccountingIsTrustworthy(summary: CostLedgerSummary): boolean {\n if (summary.pendingCalls > 0 || summary.unresolvedCalls > 0) return false\n return !summary.incompleteReasons.some((reason) => BUDGET_BREACH_REASON.test(reason))\n}\n\nfunction assertCostLedgerFinalizable(costLedger: CostLedger): void {\n const summary = costLedger.summary()\n if (!costAccountingIsTrustworthy(summary)) {\n throw accountingError(costLedger, 'the run has pending or budget-breaching cost entries')\n }\n}\n\nfunction accountingError(\n costLedger: CostLedger,\n reason: string,\n filter?: Parameters<CostLedger['summary']>[0],\n): CostAccountingIncompleteError {\n const summary = costLedger.summary(filter)\n const details = summary.incompleteReasons.slice(0, 3).join('; ')\n return new CostAccountingIncompleteError(\n `Analyst benchmark cannot continue because ${reason}${details ? `: ${details}` : ''}`,\n )\n}\n\nexport const ANALYST_BENCHMARK_HELP = `agent-eval analyst-benchmark\n\nRun the recursive DSPy trace analyst against public AgentRx or CodeTraceBench labels.\n\nRequired:\n --dataset agentrx|codetracebench\n --analyst dspy-rlm|direct Scored analyst. Default: dspy-rlm.\n 'direct' is the one-shot comparison arm.\n --labels <dataset.json|dataset.jsonl>\n --trace-dir <one-trace-per-file OTLP JSONL directory>\n --artifact-dir <extracted artifact root> Required for CodeTraceBench\n --out <new output directory>\n --revision <full 40- or 64-character hex digest>\n --split <dataset split>\n --model-owner-module <module> Module exporting createModelExecutionOwner;\n the owner keeps provider credentials and policy\n --model <provider model id>\n --limit <positive case count>\n\nControls:\n --resume Continue an interrupted run in --out\n --seed <integer> Case-selection and comparison seed. Default: 0\n --concurrency <positive integer> Parallel benchmark jobs. Default: 1\n --repetitions <positive integer> Runs per case and runner. Default: 1\n --rlm-samples <positive integer> Recursive-engine runs per case; above 1 the\n step-level majority consensus is scored\n (CodeTraceBench + dspy-rlm only). Default: 1\n --instructions-file <path> Replace the recursive analyst instructions\n with this file's text (dspy-rlm only). The\n recorded protocol digest binds the stock\n protocol to the override text, and\n result.json records instructionsOverrideSha256.\n --max-output-tokens <positive> Model output limit per call. Default: 16384\n --max-reasoning-tokens <integer> Reasoning-token limit per call. Default: 65536\n --max-model-requests <positive> Caller-owned model calls per analysis.\n Default: max iterations + model calls + 1\n --max-model-request-bytes <positive> Default: 16777216\n --max-model-response-bytes <positive> Default: 4194304\n --model-request-timeout-ms <positive> Default: --timeout-ms\n --max-iterations <positive> Recursive iterations per analysis. Default: 14\n --max-llm-calls <positive> DSPy model calls per analysis. Default: 8\n --max-tool-calls <positive> Trace-tool calls per analysis. Default: 80\n --max-analysis-output-chars <positive> Default: 8000\n --trace-tool-request-bytes <positive> Default: 1000000\n --trace-tool-response-bytes <positive> Default: 4000000\n --trace-tool-timeout-ms <positive> Default: 60000\n --max-process-input-bytes <positive> Default: 67108864\n --max-process-result-bytes <positive> Default: 4194304\n --max-process-output-chars <positive> Default: 64000\n --python <executable> Python with agent-eval-rpc[dspy]. Default: python\n --timeout-ms <positive> Model analyst deadline per case. Default: 300000\n --max-cost-usd <positive> Run-wide spend limit. Default: 5\n --max-artifact-bytes <positive> Final evidence bytes per case. Default: ${DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES}\n\nWrites result.json with every observation, metric, usage field, error, comparison,\ninput digest, artifact digest, case distribution, selected case id, and explicit\nunknown cost. Limited deterministic-hash subsets are marked non-representative.\nCompleted observations are fsynced to observations.jsonl. Shareable output is in\nresult.json and report.md. Machine-local paths, execution-owner module, and command\nare isolated in run.local.json. Provider credentials never enter this command.`\n\nasync function parseCommandConfig(\n argv: readonly string[],\n env: NodeJS.ProcessEnv,\n dependencies: AnalystBenchmarkCommandDependencies,\n): Promise<AnalystBenchmarkCommandConfig> {\n const flags = parseFlags(argv)\n assertKnownFlags(flags)\n const dataset = requiredFlag(flags, 'dataset')\n if (dataset !== 'agentrx' && dataset !== 'codetracebench') {\n throw new Error(\"--dataset must be 'agentrx' or 'codetracebench'\")\n }\n const artifactDir = flags.get('artifact-dir')?.trim()\n if (dataset === 'codetracebench' && !artifactDir) {\n throw new Error('--artifact-dir is required for CodeTraceBench')\n }\n const maxCostUsd = positiveFiniteFlag(flags, 'max-cost-usd', 5)\n const python = flags.get('python')?.trim()\n const analyst = flags.get('analyst')?.trim() ?? 'dspy-rlm'\n if (analyst !== 'dspy-rlm' && analyst !== 'direct') {\n throw new Error(\"--analyst must be 'dspy-rlm' or 'direct'\")\n }\n const rlmSamples = positiveFlag(flags, 'rlm-samples', 1)\n if (rlmSamples > 1 && analyst !== 'dspy-rlm') {\n throw new Error('--rlm-samples above 1 requires --analyst dspy-rlm')\n }\n const instructionsFile = flags.get('instructions-file')?.trim()\n if (instructionsFile && analyst !== 'dspy-rlm') {\n throw new Error('--instructions-file requires --analyst dspy-rlm')\n }\n const instructionsOverride = instructionsFile\n ? readAnalystInstructionsOverride(instructionsFile)\n : undefined\n if (rlmSamples > 1 && dataset !== 'codetracebench') {\n throw new Error(\n '--rlm-samples above 1 requires --dataset codetracebench; step-level consensus is defined on its block grammar',\n )\n }\n const model = requiredFlag(flags, 'model')\n const modelOwnerModule = requiredFlag(flags, 'model-owner-module')\n const owner = await (dependencies.loadModelExecutionOwner ?? loadModelExecutionOwner)(\n modelOwnerModule,\n {\n model,\n environment: Object.freeze({ ...env }),\n },\n )\n assertModelExecutionOwner(owner)\n const pricing = owner.pricing ?? benchmarkModelPricing(model)\n const maxOutputTokens = positiveFlag(flags, 'max-output-tokens', 16_384)\n const timeoutMs = positiveFlag(flags, 'timeout-ms', 300_000)\n return {\n dataset,\n analyst,\n labelsPath: requiredFlag(flags, 'labels'),\n traceDir: requiredFlag(flags, 'trace-dir'),\n ...(artifactDir ? { artifactDir } : {}),\n outDir: requiredFlag(flags, 'out'),\n revision: immutableRevision(requiredFlag(flags, 'revision')),\n split: requiredFlag(flags, 'split'),\n model: {\n call: owner.call,\n callRef: owner.callRef,\n recordExecution: owner.recordExecution,\n model,\n maxOutputTokens,\n timeoutMs,\n maxReasoningTokens: nonNegativeFlag(flags, 'max-reasoning-tokens', maxOutputTokens * 4),\n maxModelRequestBytes: positiveFlag(flags, 'max-model-request-bytes', 16 * 1024 * 1024),\n maxModelResponseBytes: positiveFlag(flags, 'max-model-response-bytes', 4 * 1024 * 1024),\n modelRequestTimeoutMs: positiveFlag(flags, 'model-request-timeout-ms', timeoutMs),\n pricing,\n maxCostUsdPerAnalysis: maxCostUsd,\n ...(instructionsOverride ? { instructionsOverride } : {}),\n dspyRlm: {\n runner: {\n ...(python ? { command: python } : {}),\n limits: {\n maxInputBytes: positiveFlag(flags, 'max-process-input-bytes', 64 * 1024 * 1024),\n maxResultBytes: positiveFlag(flags, 'max-process-result-bytes', 4 * 1024 * 1024),\n maxOutputChars: positiveFlag(flags, 'max-process-output-chars', 64_000),\n },\n },\n maxIterations: positiveFlag(flags, 'max-iterations', 14),\n maxLlmCalls: positiveFlag(flags, 'max-llm-calls', 8),\n maxToolCalls: positiveFlag(flags, 'max-tool-calls', 80),\n maxOutputChars: positiveFlag(flags, 'max-analysis-output-chars', 8_000),\n ...(flags.has('max-model-requests')\n ? { maxModelRequests: positiveFlag(flags, 'max-model-requests') }\n : {}),\n traceToolRequestBytes: positiveFlag(flags, 'trace-tool-request-bytes', 1_000_000),\n traceToolResponseBytes: positiveFlag(flags, 'trace-tool-response-bytes', 4_000_000),\n traceToolTimeoutMs: positiveFlag(flags, 'trace-tool-timeout-ms', 60_000),\n samples: rlmSamples,\n },\n },\n limit: positiveFlag(flags, 'limit'),\n seed: integerFlag(flags, 'seed', 0),\n concurrency: positiveFlag(flags, 'concurrency', 1),\n repetitions: positiveFlag(flags, 'repetitions', 1),\n rlmSamples,\n maxCostUsd,\n maxArtifactBytes: positiveFlag(\n flags,\n 'max-artifact-bytes',\n DEFAULT_MAX_VERIFICATION_ARTIFACT_BYTES,\n ),\n modelOwnerModule,\n command: `agent-eval analyst-benchmark ${argv\n .filter((argument) => argument !== '--resume')\n .map(shellQuote)\n .join(' ')}`,\n resume: flags.has('resume'),\n }\n}\n\nfunction parseFlags(argv: readonly string[]): Map<string, string> {\n const flags = new Map<string, string>()\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index]!\n if (!token.startsWith('--')) throw new Error(`unexpected positional argument: ${token}`)\n const raw = token.slice(2)\n const equalsAt = raw.indexOf('=')\n const name = equalsAt < 0 ? raw : raw.slice(0, equalsAt)\n const inlineValue = equalsAt < 0 ? undefined : raw.slice(equalsAt + 1)\n if (!name || flags.has(name)) throw new Error(`duplicate or empty flag: --${name}`)\n if (BOOLEAN_FLAGS.has(name)) {\n if (inlineValue !== undefined) throw new Error(`--${name} does not accept a value`)\n flags.set(name, 'true')\n continue\n }\n const value = inlineValue ?? argv[++index]\n if (!value || value.startsWith('--')) throw new Error(`--${name} requires a value`)\n flags.set(name, value)\n }\n return flags\n}\n\nconst KNOWN_FLAGS = new Set([\n 'resume',\n 'dataset',\n 'analyst',\n 'labels',\n 'trace-dir',\n 'artifact-dir',\n 'out',\n 'revision',\n 'split',\n 'model-owner-module',\n 'model',\n 'limit',\n 'seed',\n 'concurrency',\n 'repetitions',\n 'rlm-samples',\n 'instructions-file',\n 'max-output-tokens',\n 'max-reasoning-tokens',\n 'max-model-requests',\n 'max-model-request-bytes',\n 'max-model-response-bytes',\n 'model-request-timeout-ms',\n 'max-iterations',\n 'max-llm-calls',\n 'max-tool-calls',\n 'max-analysis-output-chars',\n 'trace-tool-request-bytes',\n 'trace-tool-response-bytes',\n 'trace-tool-timeout-ms',\n 'max-process-input-bytes',\n 'max-process-result-bytes',\n 'max-process-output-chars',\n 'python',\n 'timeout-ms',\n 'max-cost-usd',\n 'max-artifact-bytes',\n])\n\nconst BOOLEAN_FLAGS = new Set(['resume'])\n\nfunction assertKnownFlags(flags: ReadonlyMap<string, string>): void {\n for (const flag of flags.keys()) {\n if (!KNOWN_FLAGS.has(flag)) throw new Error(`unknown analyst-benchmark flag: --${flag}`)\n }\n}\n\nfunction requiredFlag(flags: ReadonlyMap<string, string>, name: string): string {\n const value = flags.get(name)?.trim()\n if (!value) throw new Error(`--${name} is required`)\n return value\n}\n\nfunction positiveFlag(\n flags: ReadonlyMap<string, string>,\n name: string,\n defaultValue?: number,\n): number {\n const raw = flags.get(name)\n if (raw === undefined && defaultValue !== undefined) return defaultValue\n if (raw === undefined) throw new Error(`--${name} is required`)\n const value = Number(raw)\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new Error(`--${name} must be a positive safe integer`)\n }\n return value\n}\n\nfunction integerFlag(\n flags: ReadonlyMap<string, string>,\n name: string,\n defaultValue: number,\n): number {\n const raw = flags.get(name)\n if (raw === undefined) return defaultValue\n const value = Number(raw)\n if (!Number.isSafeInteger(value)) throw new Error(`--${name} must be a safe integer`)\n return value\n}\n\nfunction nonNegativeFlag(\n flags: ReadonlyMap<string, string>,\n name: string,\n defaultValue: number,\n): number {\n const raw = flags.get(name)\n if (raw === undefined) return defaultValue\n const value = Number(raw)\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`--${name} must be a non-negative safe integer`)\n }\n return value\n}\n\nfunction positiveFiniteFlag(\n flags: ReadonlyMap<string, string>,\n name: string,\n defaultValue: number,\n): number {\n const raw = flags.get(name)\n if (raw === undefined) return defaultValue\n const value = Number(raw)\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`--${name} must be a positive finite number`)\n }\n return value\n}\n\nasync function loadModelExecutionOwner(\n moduleRef: string,\n context: { model: string; environment: Readonly<NodeJS.ProcessEnv> },\n): Promise<PublicAnalystBenchmarkModelOwner> {\n const specifier =\n moduleRef.startsWith('.') || moduleRef.startsWith('/')\n ? pathToFileURL(resolve(moduleRef)).href\n : moduleRef\n const imported = (await import(specifier)) as {\n createModelExecutionOwner?: (value: {\n model: string\n environment: Readonly<NodeJS.ProcessEnv>\n }) => PublicAnalystBenchmarkModelOwner | Promise<PublicAnalystBenchmarkModelOwner>\n }\n if (typeof imported.createModelExecutionOwner !== 'function') {\n throw new Error(`${moduleRef} must export createModelExecutionOwner({ model, environment })`)\n }\n return imported.createModelExecutionOwner(context)\n}\n\nfunction assertModelExecutionOwner(value: PublicAnalystBenchmarkModelOwner): void {\n if (!value || typeof value !== 'object') {\n throw new Error('createModelExecutionOwner must return an object')\n }\n if (typeof value.call !== 'function') {\n throw new Error('model execution owner call must be a function')\n }\n if (\n typeof value.callRef !== 'string' ||\n !value.callRef.trim() ||\n value.callRef !== value.callRef.trim()\n ) {\n throw new Error('model execution owner callRef must be trimmed and non-empty')\n }\n if (typeof value.recordExecution !== 'function') {\n throw new Error('model execution owner recordExecution must be a function')\n }\n}\n\nfunction benchmarkModelPricing(\n model: string,\n): NonNullable<PublicAnalystBenchmarkModelConfig['pricing']> {\n const pricing = resolveModelPricing(model)\n if (!pricing) {\n throw new Error(`model execution owner must supply pricing for uncatalogued model '${model}'`)\n }\n return {\n inputUsdPerMillion: pricing.input * 1_000,\n outputUsdPerMillion: pricing.output * 1_000,\n }\n}\n\nfunction immutableRevision(value: string): string {\n if (!/^(?:[a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/.test(value)) {\n throw new Error('--revision must be a full 40- or 64-character hexadecimal digest')\n }\n return value.toLowerCase()\n}\n\nfunction renderSelectionMarkdown(report: PublicBenchmarkSelectionReport): string {\n const rows = (['class', 'agent', 'model', 'difficulty', 'solved'] as const).map((dimension) => {\n const source = report.source[dimension]\n const selected = report.selected[dimension]\n return `| ${dimension} | ${distributionText(source.counts, source.missing, source.total)} | ${distributionText(selected.counts, selected.missing, selected.total)} |`\n })\n return [\n '## Case Selection',\n '',\n `Method: \\`${report.method}\\`; seed: \\`${report.seed}\\`; selected: ${report.selectedCount}/${report.sourceCount}.`,\n report.representativeOfInput\n ? 'This is a census of the supplied input.'\n : 'This deterministic hash subset is not stratified and must not be presented as representative.',\n '',\n '| Dimension | Supplied input | Selected cases |',\n '| --- | --- | --- |',\n ...rows,\n ].join('\\n')\n}\n\nfunction distributionText(\n counts: Readonly<Record<string, number>>,\n missing: number,\n total: number,\n): string {\n const values = Object.entries(counts).map(([value, count]) => `${value}=${count}`)\n if (missing > 0) values.push(`missing=${missing}`)\n return `${values.join(', ') || 'none'} (n=${total})`\n}\n\nfunction summarizeVerificationAvailability(\n manifests: readonly VerificationArtifactManifest[],\n): VerificationAvailabilitySummary {\n return {\n cases: manifests.length,\n resultFilesPresent: manifests.filter((manifest) => manifest.status === 'present').length,\n resultFilesMissing: manifests.filter((manifest) => manifest.status === 'missing').length,\n outcomes: {\n passed: manifests.filter((manifest) => manifest.outcome.status === 'passed').length,\n failed: manifests.filter((manifest) => manifest.outcome.status === 'failed').length,\n unavailable: manifests.filter((manifest) => manifest.outcome.status === 'unavailable').length,\n },\n }\n}\n\nfunction renderVerificationAvailability(summary: VerificationAvailabilitySummary): string {\n return [\n '## Final Verification Availability',\n '',\n '| Cases | Result files present | Result files missing | Passed | Failed | Unavailable |',\n '| ---: | ---: | ---: | ---: | ---: | ---: |',\n `| ${summary.cases} | ${summary.resultFilesPresent} | ${summary.resultFilesMissing} | ${summary.outcomes.passed} | ${summary.outcomes.failed} | ${summary.outcomes.unavailable} |`,\n ].join('\\n')\n}\n\nfunction renderArtifactMarkdown(artifact: AnalystBenchmarkArtifact): string {\n const calibrationMarkdown = artifact.codeTraceCalibration\n ? `\\n\\n${renderCodeTraceCalibrationMarkdown(artifact.codeTraceCalibration)}`\n : artifact.agentRxCalibration\n ? `\\n\\n${renderAgentRxCalibrationMarkdown(artifact.agentRxCalibration)}`\n : ''\n const verificationMarkdown =\n artifact.inputs.dataset === 'codetracebench'\n ? `\\n\\n${renderVerificationAvailability(artifact.inputs.verificationAvailability)}`\n : ''\n return `${renderAnalystBenchmarkMarkdown(artifact.result, artifact.comparisons).trimEnd()}${calibrationMarkdown}${verificationMarkdown}\\n\\n${renderSelectionMarkdown(artifact.inputs.selection.report)}\\n`\n}\n\nfunction benchmarkExitCode(result: AnalystBenchmarkResult, analystRunnerId: string): number {\n return result.summaries.find((summary) => summary.runnerId === analystRunnerId)?.failedRuns\n ? 2\n : 0\n}\n\nfunction printSuccessSummary(\n artifact: AnalystBenchmarkArtifact,\n paths: AnalystBenchmarkOutputPaths,\n): void {\n const failures = artifact.result.summaries.reduce(\n (total, summary) => total + summary.failedRuns,\n 0,\n )\n const knownCostUsd = artifact.result.summaries.reduce(\n (total, summary) => total + summary.knownCostUsd,\n 0,\n )\n const unknownCostRuns = artifact.result.summaries.reduce(\n (total, summary) => total + summary.costUnknownRuns,\n 0,\n )\n process.stdout.write(\n `Analyst benchmark complete: cases=${artifact.result.provenance.caseCount} failures=${failures} known_cost_usd=${knownCostUsd.toFixed(6)} unknown_cost_runs=${unknownCostRuns}\\nresult=${paths.result}\\nreport=${paths.report}\\n`,\n )\n}\n\nfunction shellQuote(value: string): string {\n return /^[a-zA-Z0-9_./:@%+=,-]+$/.test(value) ? value : `'${value.replaceAll(\"'\", \"'\\\\''\")}'`\n}\n"],"mappings":"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CACA;CACA;AACF,CAAC;AAED,MAAa,2CACX;;;;;;;;AASF,MAAa,6CAA6C;AAE1D,MAAa,oDACX;AAEF,MAAa,mDACX;AAEF,MAAa,yCAAyC,OAAO,OAAO;CAClE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,0CACX;AAEF,SAAgB,uCAAuC;CACrD,OAAO;AACT;AAEA,SAAgB,uCAAuC;CACrD,OAAO;AACT;;;AC5HA,MAAM,gCAAgC;AAEtC,MAAM,uBAAuB;AAC7B,MAAM,iCAAiC,KAAK;AAC5C,MAAM,iCAAiC;AAEvC,MAAM,uCAAuB,IAAI,IAAI;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,6BAA6B,CAAC,GAAG,oBAAoB,CAAC,CAAC,MAC1D,MAAM,UAAU,MAAM,SAAS,KAAK,MACvC;AAEA,MAAM,+BAA+B;CACnC;CACA;CACA;CACA;AACF;AAQA,SAAgB,+BAA+B,SAGpB;CACzB,IAAI,gBAAgB;CACpB,KAAK,MAAM,CAAC,OAAO,SAAS,QAAQ,SAAS,MAAM,OAAO,CAAC,CAAC,QAAQ,GAAG;EACrE,IAAI,CAAC,KAAK,KAAK,GAAG;EAClB,IAAI;EACJ,IAAI;GACF,QAAQ,KAAK,MAAM,IAAI;EACzB,SAAS,OAAO;GACd,MAAM,IAAI,UACR,UAAU,QAAQ,QAAQ,SAAS,QAAQ,EAAE,oBAAoB,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"}