@tangle-network/agent-eval 0.209.1 → 0.210.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -1
  3. package/dist/adapters/http.d.ts +1 -1
  4. package/dist/analyst/index.d.ts +2 -2
  5. package/dist/analyst/index.js +1 -1
  6. package/dist/{analyze-runs-0cdYMgob.js → analyze-runs-3xpby3p2.js} +4 -4
  7. package/dist/analyze-runs-3xpby3p2.js.map +1 -0
  8. package/dist/{benchmark-command-Cve7mHNC.js → benchmark-command-S8tCtkxh.js} +3 -3
  9. package/dist/{benchmark-command-Cve7mHNC.js.map → benchmark-command-S8tCtkxh.js.map} +1 -1
  10. package/dist/benchmarks/index.d.ts +1 -1
  11. package/dist/benchmarks/index.js +2 -2
  12. package/dist/campaign/index.d.ts +2 -2
  13. package/dist/campaign/index.js +9 -9
  14. package/dist/{campaign-evidence-B5qsCHEn.js → campaign-evidence-OcUciD-N.js} +2 -2
  15. package/dist/campaign-evidence-OcUciD-N.js.map +1 -0
  16. package/dist/{campaign-CvhmiLKa.js → campaign-wvvJA1ps.js} +10 -10
  17. package/dist/{campaign-CvhmiLKa.js.map → campaign-wvvJA1ps.js.map} +1 -1
  18. package/dist/claude-jsonl-dZir12m6.js +86 -0
  19. package/dist/claude-jsonl-dZir12m6.js.map +1 -0
  20. package/dist/cli.js +4 -4
  21. package/dist/contract/index.d.ts +5 -5
  22. package/dist/contract/index.js +90 -14
  23. package/dist/contract/index.js.map +1 -1
  24. package/dist/counterfactual-DtMWvn7D.js.map +1 -1
  25. package/dist/{define-agent-eval-_nyV5nev.d.ts → define-agent-eval-B_zZY2AZ.d.ts} +3 -3
  26. package/dist/{define-agent-eval-_nyV5nev.d.ts.map → define-agent-eval-B_zZY2AZ.d.ts.map} +1 -1
  27. package/dist/{define-agent-eval-Csd47ur_.js → define-agent-eval-CoXXDCMu.js} +4 -4
  28. package/dist/{define-agent-eval-Csd47ur_.js.map → define-agent-eval-CoXXDCMu.js.map} +1 -1
  29. package/dist/diagnosis/index.js +1 -1
  30. package/dist/{eval-campaign-C31Qbv77.js → eval-campaign-4byTtqrf.js} +2 -2
  31. package/dist/{eval-campaign-C31Qbv77.js.map → eval-campaign-4byTtqrf.js.map} +1 -1
  32. package/dist/experiment/index.d.ts +1 -1
  33. package/dist/experiment/index.js +6 -6
  34. package/dist/feedback-trajectory-CX01700m.d.ts.map +1 -1
  35. package/dist/{index-H-u7f-w3.d.ts → index-D0_l25We.d.ts} +20 -41
  36. package/dist/{index-H-u7f-w3.d.ts.map → index-D0_l25We.d.ts.map} +1 -1
  37. package/dist/{index-BHh9Z9El.d.ts → index-DnZdBxCL.d.ts} +9 -6
  38. package/dist/{index-BHh9Z9El.d.ts.map → index-DnZdBxCL.d.ts.map} +1 -1
  39. package/dist/{index-Ddi5M-TQ.d.ts → index-xnhRdqik.d.ts} +3 -14
  40. package/dist/{index-Ddi5M-TQ.d.ts.map → index-xnhRdqik.d.ts.map} +1 -1
  41. package/dist/index.d.ts +6 -6
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +14 -14
  44. package/dist/index.js.map +1 -1
  45. package/dist/judge-gate-C59znGmR.js +638 -0
  46. package/dist/judge-gate-C59znGmR.js.map +1 -0
  47. package/dist/judge-gate-D2hCppem.d.ts +439 -0
  48. package/dist/judge-gate-D2hCppem.d.ts.map +1 -0
  49. package/dist/{llm-judge-C0256VT_.js → llm-judge-Tr7MBUnf.js} +6 -6
  50. package/dist/llm-judge-Tr7MBUnf.js.map +1 -0
  51. package/dist/meta-eval/index.d.ts +2 -132
  52. package/dist/meta-eval/index.d.ts.map +1 -1
  53. package/dist/meta-eval/index.js +2 -275
  54. package/dist/meta-eval/index.js.map +1 -1
  55. package/dist/openapi.json +1 -1
  56. package/dist/{paired-arms-B5v-X7No.js → paired-arms-DzKn0TfY.js} +2 -2
  57. package/dist/{paired-arms-B5v-X7No.js.map → paired-arms-DzKn0TfY.js.map} +1 -1
  58. package/dist/{paired-binary-b2L3WKqr.js → paired-binary-Q36bhn2R.js} +13 -9
  59. package/dist/paired-binary-Q36bhn2R.js.map +1 -0
  60. package/dist/{paired-promotion-decision-2deJ7sDX.js → paired-promotion-decision-BN6IQTiu.js} +2 -2
  61. package/dist/{paired-promotion-decision-2deJ7sDX.js.map → paired-promotion-decision-BN6IQTiu.js.map} +1 -1
  62. package/dist/{produced-state-CgB9g0VX.js → produced-state-CKybuR9F.js} +3 -3
  63. package/dist/produced-state-CKybuR9F.js.map +1 -0
  64. package/dist/{promotion-policy-CCmyEH_c.js → promotion-policy-CWW35UWq.js} +3 -3
  65. package/dist/{promotion-policy-CCmyEH_c.js.map → promotion-policy-CWW35UWq.js.map} +1 -1
  66. package/dist/reporting.js +2 -2
  67. package/dist/rl.js +3 -3
  68. package/dist/rollout/index.d.ts +2 -2
  69. package/dist/rollout/index.js +3 -3
  70. package/dist/{rollout-BZqQc0YY.js → rollout-D9bKKBnZ.js} +29 -164
  71. package/dist/rollout-D9bKKBnZ.js.map +1 -0
  72. package/dist/search/index.js +2 -2
  73. package/dist/{search-kernel-Bfe3kzRk.js → search-kernel-BIXWM7YV.js} +3 -3
  74. package/dist/search-kernel-BIXWM7YV.js.map +1 -0
  75. package/dist/{search-summary-DK1bwTAf.js → search-summary-nwrtXxC_.js} +3 -3
  76. package/dist/{search-summary-DK1bwTAf.js.map → search-summary-nwrtXxC_.js.map} +1 -1
  77. package/dist/{sequential-BOzBND4t.js → sequential-D-1PPCmM.js} +2 -2
  78. package/dist/{sequential-BOzBND4t.js.map → sequential-D-1PPCmM.js.map} +1 -1
  79. package/dist/{skillopt-optimization-method-BCojvoP1.js → skillopt-optimization-method-DujPOiwD.js} +4 -4
  80. package/dist/{skillopt-optimization-method-BCojvoP1.js.map → skillopt-optimization-method-DujPOiwD.js.map} +1 -1
  81. package/dist/{statistical-heldout-BP6iEJvR.js → statistical-heldout-1Gbmex7v.js} +2 -2
  82. package/dist/{statistical-heldout-BP6iEJvR.js.map → statistical-heldout-1Gbmex7v.js.map} +1 -1
  83. package/dist/{statistical-heldout-D0rX_IDl.d.ts → statistical-heldout-8RGPIeyo.d.ts} +14 -10
  84. package/dist/statistical-heldout-8RGPIeyo.d.ts.map +1 -0
  85. package/dist/{summary-report-BsaEFEwA.js → summary-report-DtdRucM0.js} +2 -2
  86. package/dist/{summary-report-BsaEFEwA.js.map → summary-report-DtdRucM0.js.map} +1 -1
  87. package/dist/supervisor-run/index.d.ts.map +1 -1
  88. package/dist/supervisor-run/index.js +34 -69
  89. package/dist/supervisor-run/index.js.map +1 -1
  90. package/dist/{tree-CZ78tiPg.js → tree-kc1d80yF.js} +3 -3
  91. package/dist/{tree-CZ78tiPg.js.map → tree-kc1d80yF.js.map} +1 -1
  92. package/docs/concepts.md +13 -0
  93. package/docs/experiment.md +10 -0
  94. package/docs/trace-analysis.md +3 -0
  95. package/package.json +4 -3
  96. package/dist/analyze-runs-0cdYMgob.js.map +0 -1
  97. package/dist/campaign-evidence-B5qsCHEn.js.map +0 -1
  98. package/dist/claude-jsonl-CG3JUbTJ.js +0 -211
  99. package/dist/claude-jsonl-CG3JUbTJ.js.map +0 -1
  100. package/dist/llm-judge-C0256VT_.js.map +0 -1
  101. package/dist/paired-binary-b2L3WKqr.js.map +0 -1
  102. package/dist/produced-state-CgB9g0VX.js.map +0 -1
  103. package/dist/rollout-BZqQc0YY.js.map +0 -1
  104. package/dist/search-kernel-Bfe3kzRk.js.map +0 -1
  105. package/dist/series-convergence-CjO2QdRW.js +0 -43
  106. package/dist/series-convergence-CjO2QdRW.js.map +0 -1
  107. package/dist/series-convergence-hEfKdoi-.d.ts +0 -126
  108. package/dist/series-convergence-hEfKdoi-.d.ts.map +0 -1
  109. package/dist/statistical-heldout-D0rX_IDl.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-jsonl-CG3JUbTJ.js","names":[],"sources":["../src/rollout/readers/claude-jsonl.ts"],"sourcesContent":["/**\n * Backfill reader over Claude Code project transcripts\n * (~/.claude/projects/<cwd-slug>/<sessionId>.jsonl) → canonical\n * chat-with-tools messages plus per-session token usage.\n *\n * Transcript lines consumed: type:\"user\" (string content or content blocks —\n * text + tool_result) and type:\"assistant\" (content blocks — thinking, text,\n * tool_use; message.usage carries tokens). Sidechain lines (isSidechain=true,\n * subagent threads) are separate invocations and are excluded from the main\n * transcript. Everything else (queue-operation, attachment, last-prompt…) is\n * transport metadata, not conversation.\n */\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport type { ChatMessage, ChatToolCall } from '../schema'\n\nexport const DEFAULT_CLAUDE_PROJECTS_DIR = join(homedir(), '.claude', 'projects')\n\n/** Claude Code's project-directory slug for a working directory. */\nexport function claudeProjectSlug(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9-]/g, '-')\n}\n\nexport interface ClaudeTranscriptRef {\n sessionId: string\n path: string\n}\n\n/** Transcript files recorded for sessions launched from `cwd`. */\nexport async function findClaudeTranscripts(\n cwd: string,\n projectsDir: string = DEFAULT_CLAUDE_PROJECTS_DIR,\n): Promise<ClaudeTranscriptRef[]> {\n const dir = join(projectsDir, claudeProjectSlug(cwd))\n const names = await readdir(dir).catch(() => [])\n return names\n .filter((n) => n.endsWith('.jsonl'))\n .sort()\n .map((n) => ({ sessionId: n.replace(/\\.jsonl$/, ''), path: join(dir, n) }))\n}\n\nexport interface ClaudeUsageTotals {\n tokensIn: number | null\n tokensOut: number | null\n cacheRead: number | null\n cacheWrite: number | null\n}\n\nexport interface ClaudeTranscript {\n messages: ChatMessage[]\n usage: ClaudeUsageTotals\n /** Timestamp of the first conversation line; null = empty transcript. */\n startedAt: string | null\n endedAt: string | null\n model: string | null\n /** Every parse or usage gap retained beside this semantic projection. */\n gaps: string[]\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v)\n\n/**\n * One conversation line of a transcript, still in Claude Code's own shape.\n *\n * This is the single line-level parse of the format. `readClaudeTranscript`\n * projects it to canonical messages + usage; the supervision-tree reader\n * (`src/supervisor-run/claude-code-reader.ts`) projects the SAME entries to\n * spawn/settle/steer instants. Two projections, one parser — a second\n * transcript parser is how the two views silently disagree.\n */\nexport interface ClaudeEntry {\n readonly type: 'user' | 'assistant'\n /** ISO instant of the line; null when the line carried none. */\n readonly timestamp: string | null\n /** The Anthropic message body (`role`, `content`, `model`, `usage`). */\n readonly message: Record<string, unknown>\n /** Claude Code's structured tool result, when the line carries one. */\n readonly toolUseResult: unknown\n /** True on subagent threads — a separate invocation, not this transcript's turn. */\n readonly isSidechain: boolean\n /** Subagent id Claude Code stamps on sidechain lines; null on main-thread lines. */\n readonly agentId: string | null\n}\n\n/** Parse transcript jsonl text into conversation lines. Non-conversation lines are dropped. */\nexport function parseClaudeEntries(raw: string, onGap?: (gap: string) => void): ClaudeEntry[] {\n const out: ClaudeEntry[] = []\n for (const [index, line] of raw.split('\\n').entries()) {\n if (!line.trim()) continue\n const gap = (reason: string): void => {\n const detail = `line ${index + 1}: ${reason}`\n if (onGap) onGap(detail)\n else throw new Error(`Claude transcript ${detail}`)\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch {\n gap('malformed JSON')\n continue\n }\n if (!isRecord(parsed)) {\n gap('JSON value is not an object')\n continue\n }\n const entry = parsed\n if (entry.type !== 'user' && entry.type !== 'assistant') continue\n const message = entry.message\n if (!isRecord(message)) {\n gap('conversation message is missing')\n continue\n }\n out.push({\n type: entry.type,\n timestamp: typeof entry.timestamp === 'string' ? entry.timestamp : null,\n message,\n toolUseResult: entry.toolUseResult,\n isSidechain: entry.isSidechain === true,\n agentId: typeof entry.agentId === 'string' ? entry.agentId : null,\n })\n }\n return out\n}\n\nexport interface ReadClaudeTranscriptOptions {\n /**\n * Read the sidechain (subagent) thread instead of skipping it. Subagent\n * transcripts under `<session>/subagents/agent-<id>.jsonl` are sidechain\n * lines end to end, so their usage is invisible without this.\n */\n readonly includeSidechain?: boolean\n /** Parser diagnostics from the retained source; used by the shared reader. */\n readonly sourceGaps?: readonly string[]\n}\n\nfunction blockText(content: unknown): string {\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n return content\n .filter(\n (b): b is Record<string, unknown> =>\n isRecord(b) && b.type === 'text' && typeof b.text === 'string',\n )\n .map((b) => b.text as string)\n .join('\\n')\n}\n\n/** Read one transcript file through the same parser used for retained source text. */\nexport async function readClaudeTranscript(\n path: string,\n options: ReadClaudeTranscriptOptions = {},\n): Promise<ClaudeTranscript> {\n return parseClaudeTranscript(await readFile(path, 'utf8'), options)\n}\n\n/** Parse retained JSONL without another file or store; source gaps remain explicit. */\nexport function parseClaudeTranscript(\n raw: string,\n options: ReadClaudeTranscriptOptions = {},\n): ClaudeTranscript {\n const gaps: string[] = []\n const entries = parseClaudeEntries(raw, (gap) => gaps.push(gap))\n return transcriptFromEntries(entries, { ...options, sourceGaps: gaps })\n}\n\n/** The messages+usage projection of already-parsed entries. */\nexport function transcriptFromEntries(\n entries: readonly ClaudeEntry[],\n options: ReadClaudeTranscriptOptions = {},\n): ClaudeTranscript {\n const wantSidechain = options.includeSidechain === true\n const messages: ChatMessage[] = []\n const usage: ClaudeUsageTotals = { tokensIn: 0, tokensOut: 0, cacheRead: 0, cacheWrite: 0 }\n const gaps = [...(options.sourceGaps ?? [])]\n let usageObserved = false\n let startedAt: string | null = null\n let endedAt: string | null = null\n let model: string | null = null\n // Claude Code writes one jsonl line PER CONTENT BLOCK of an API message,\n // repeating message.id and usage on each — merge blocks into one canonical\n // assistant turn and count usage once per API message id.\n let lastAssistantApiId: string | null = null\n let lastAssistantIndex = -1\n\n for (const entry of entries) {\n if (entry.isSidechain !== wantSidechain) continue\n const message = entry.message\n if (entry.timestamp !== null) {\n if (startedAt === null) startedAt = entry.timestamp\n endedAt = entry.timestamp\n }\n\n if (entry.type === 'user') {\n lastAssistantApiId = null\n lastAssistantIndex = -1\n const content = message.content\n if (typeof content === 'string') {\n messages.push({ role: 'user', content })\n continue\n }\n if (!Array.isArray(content)) continue\n // A user line may interleave tool_result blocks (answers to the prior\n // assistant tool_use) with plain text; preserve order.\n let userText = ''\n for (const block of content) {\n if (!isRecord(block)) continue\n if (block.type === 'tool_result' && typeof block.tool_use_id === 'string') {\n messages.push({\n role: 'tool',\n tool_call_id: block.tool_use_id,\n content:\n blockText(block.content) || (typeof block.content === 'string' ? block.content : ''),\n })\n } else if (block.type === 'text' && typeof block.text === 'string') {\n userText += (userText.length > 0 ? '\\n' : '') + block.text\n }\n }\n if (userText.length > 0) messages.push({ role: 'user', content: userText })\n continue\n }\n\n // assistant\n if (typeof message.model === 'string') model = message.model\n const apiId = typeof message.id === 'string' ? message.id : null\n const continuesTurn = apiId !== null && apiId === lastAssistantApiId && lastAssistantIndex >= 0\n const msgUsage = message.usage\n if (!continuesTurn) {\n usageObserved = true\n const fields = [\n ['tokensIn', 'input_tokens'],\n ['tokensOut', 'output_tokens'],\n ['cacheRead', 'cache_read_input_tokens'],\n ['cacheWrite', 'cache_creation_input_tokens'],\n ] as const\n for (const [target, source] of fields) {\n const value = isRecord(msgUsage) ? msgUsage[source] : undefined\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n usage[target] = null\n gaps.push(`assistant ${apiId ?? 'without id'}: ${source} unavailable`)\n } else if (usage[target] !== null) {\n usage[target] += value\n }\n }\n }\n const content = message.content\n if (!Array.isArray(content)) continue\n let reasoning = ''\n let text = ''\n const toolCalls: ChatToolCall[] = []\n for (const block of content) {\n if (!isRecord(block)) continue\n if (\n block.type === 'thinking' &&\n typeof block.thinking === 'string' &&\n block.thinking.length > 0\n ) {\n reasoning += (reasoning.length > 0 ? '\\n' : '') + block.thinking\n } else if (block.type === 'text' && typeof block.text === 'string') {\n text += (text.length > 0 ? '\\n' : '') + block.text\n } else if (block.type === 'tool_use' && typeof block.id === 'string') {\n toolCalls.push({\n id: block.id,\n type: 'function',\n function: {\n name: typeof block.name === 'string' ? block.name : 'unknown',\n arguments: JSON.stringify(block.input ?? {}),\n },\n })\n }\n }\n if (reasoning.length === 0 && text.length === 0 && toolCalls.length === 0) continue\n if (continuesTurn) {\n const prev = messages[lastAssistantIndex]!\n if (text.length > 0) prev.content = prev.content === null ? text : `${prev.content}\\n${text}`\n if (reasoning.length > 0) {\n prev.reasoning_content =\n prev.reasoning_content === undefined\n ? reasoning\n : `${prev.reasoning_content}\\n${reasoning}`\n }\n if (toolCalls.length > 0) prev.tool_calls = [...(prev.tool_calls ?? []), ...toolCalls]\n continue\n }\n messages.push({\n role: 'assistant',\n content: text.length > 0 ? text : null,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n })\n lastAssistantApiId = apiId\n lastAssistantIndex = messages.length - 1\n }\n\n if (!usageObserved) {\n usage.tokensIn = null\n usage.tokensOut = null\n usage.cacheRead = null\n usage.cacheWrite = null\n }\n return { messages, usage, startedAt, endedAt, model, gaps }\n}\n"],"mappings":"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"}