@tangle-network/agent-eval 0.202.0 → 0.202.2
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.
- package/CHANGELOG.md +11 -0
- package/dist/adapters/http.d.ts +2 -2
- package/dist/analyst/index.d.ts +5 -5
- package/dist/analyst/index.js +1 -1
- package/dist/benchmarks/index.d.ts +4 -4
- package/dist/benchmarks/index.js +1 -1
- package/dist/campaign/index.d.ts +5 -5
- package/dist/campaign/index.js +3 -3
- package/dist/{campaign-XXmOU0R0.js → campaign-Btk1yFfw.js} +130 -20
- package/dist/{campaign-XXmOU0R0.js.map → campaign-Btk1yFfw.js.map} +1 -1
- package/dist/{claude-jsonl-CxZZrDJ3.js → claude-jsonl-DoQJBCVR.js} +49 -15
- package/dist/claude-jsonl-DoQJBCVR.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/contract/index.d.ts +7 -7
- package/dist/contract/index.js +1 -1
- package/dist/{default-registry-D4qXx2aG.js → default-registry-6QOiTzqi.js} +2 -2
- package/dist/{default-registry-D4qXx2aG.js.map → default-registry-6QOiTzqi.js.map} +1 -1
- package/dist/{default-registry-D1rNS2yB.d.ts → default-registry-DesnDBvl.d.ts} +3 -3
- package/dist/{default-registry-D1rNS2yB.d.ts.map → default-registry-DesnDBvl.d.ts.map} +1 -1
- package/dist/{define-agent-eval-DQXLPqWc.d.ts → define-agent-eval-BDPV3ieA.d.ts} +5 -5
- package/dist/{define-agent-eval-DQXLPqWc.d.ts.map → define-agent-eval-BDPV3ieA.d.ts.map} +1 -1
- package/dist/{engine-DlKIzDKo.d.ts → engine-neXmlmTu.d.ts} +2 -2
- package/dist/{engine-DlKIzDKo.d.ts.map → engine-neXmlmTu.d.ts.map} +1 -1
- package/dist/evaluation.d.ts +1 -1
- package/dist/experiment/index.d.ts +1 -1
- package/dist/{exporters-XMCYJlqT.d.ts → exporters-DjCu6-lX.d.ts} +2 -2
- package/dist/{exporters-XMCYJlqT.d.ts.map → exporters-DjCu6-lX.d.ts.map} +1 -1
- package/dist/{exporters-Coiv-qO2.js → exporters-ISzpUY3e.js} +10 -4
- package/dist/{exporters-Coiv-qO2.js.map → exporters-ISzpUY3e.js.map} +1 -1
- package/dist/{hf-dataset-kjIfIK_e.js → hf-dataset-DdT7nNkf.js} +3 -3
- package/dist/{hf-dataset-kjIfIK_e.js.map → hf-dataset-DdT7nNkf.js.map} +1 -1
- package/dist/{index-D4pC7Tvd.d.ts → index-BCBpEreJ.d.ts} +18 -14
- package/dist/{index-D4pC7Tvd.d.ts.map → index-BCBpEreJ.d.ts.map} +1 -1
- package/dist/{index-giYkbitB.d.ts → index-BPCdNSMW.d.ts} +20 -5
- package/dist/index-BPCdNSMW.d.ts.map +1 -0
- package/dist/{index-Bi2fLITd.d.ts → index-BtcxmabC.d.ts} +4 -4
- package/dist/{index-Bi2fLITd.d.ts.map → index-BtcxmabC.d.ts.map} +1 -1
- package/dist/{index-D1ZX28rV.d.ts → index-CnKgaHKA.d.ts} +6 -6
- package/dist/{index-D1ZX28rV.d.ts.map → index-CnKgaHKA.d.ts.map} +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.js +3 -3
- package/dist/{integrity-uwK7XC-8.js → integrity-atFlABhR.js} +2 -2
- package/dist/{integrity-uwK7XC-8.js.map → integrity-atFlABhR.js.map} +1 -1
- package/dist/{jev-protocol-CpKI7XSu.d.ts → jev-protocol-BQLxwbqD.d.ts} +24 -7
- package/dist/jev-protocol-BQLxwbqD.d.ts.map +1 -0
- package/dist/jev-protocol.d.ts +2 -2
- package/dist/jev-protocol.js +19 -4
- package/dist/jev-protocol.js.map +1 -1
- package/dist/{jev-review-D4ynCORp.d.ts → jev-review-DX6MI_jq.d.ts} +2 -2
- package/dist/{jev-review-D4ynCORp.d.ts.map → jev-review-DX6MI_jq.d.ts.map} +1 -1
- package/dist/jev.d.ts +4 -4
- package/dist/jev.js +2 -2
- package/dist/{matrix--IZKROxD.d.ts → matrix-DRXCV70M.d.ts} +2 -2
- package/dist/{matrix--IZKROxD.d.ts.map → matrix-DRXCV70M.d.ts.map} +1 -1
- package/dist/{mint-C9Lojt1V.d.ts → mint-BFTrlq4t.d.ts} +10 -2
- package/dist/mint-BFTrlq4t.d.ts.map +1 -0
- package/dist/{mint-vlRckJEX.js → mint-DE6nQrX_.js} +26 -7
- package/dist/mint-DE6nQrX_.js.map +1 -0
- package/dist/multishot/golden/index.d.ts +1 -1
- package/dist/multishot/index.d.ts +2 -2
- package/dist/openapi.json +1 -1
- package/dist/rl.d.ts +6 -6
- package/dist/rl.js +3 -3
- package/dist/rollout/index.d.ts +5 -5
- package/dist/rollout/index.js +6 -6
- package/dist/{rollout-BUQixCoc.js → rollout-DTunVdJE.js} +41 -21
- package/dist/{rollout-BUQixCoc.js.map → rollout-DTunVdJE.js.map} +1 -1
- package/dist/{schema-B5LtYvn9.d.ts → schema-Bp8S20Ii.d.ts} +25 -5
- package/dist/{schema-B5LtYvn9.d.ts.map → schema-Bp8S20Ii.d.ts.map} +1 -1
- package/dist/{schema-DAMp77zB.js → schema-D08IIzui.js} +27 -1
- package/dist/{schema-DAMp77zB.js.map → schema-D08IIzui.js.map} +1 -1
- package/dist/search/index.d.ts +2 -2
- package/dist/{search-kernel-C9CXvFR7.d.ts → search-kernel-zI-rsHoG.d.ts} +2 -2
- package/dist/{search-kernel-C9CXvFR7.d.ts.map → search-kernel-zI-rsHoG.d.ts.map} +1 -1
- package/dist/{statistical-heldout-HswMvzbP.d.ts → statistical-heldout-BAbd_oXC.d.ts} +2 -2
- package/dist/{statistical-heldout-HswMvzbP.d.ts.map → statistical-heldout-BAbd_oXC.d.ts.map} +1 -1
- package/dist/{store-tool-spans-Dv9x4XYG.d.ts → store-tool-spans-CKRw7JHa.d.ts} +3 -3
- package/dist/{store-tool-spans-Dv9x4XYG.d.ts.map → store-tool-spans-CKRw7JHa.d.ts.map} +1 -1
- package/dist/supervisor-run/index.d.ts +2 -2
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +22 -14
- package/dist/supervisor-run/index.js.map +1 -1
- package/dist/{tool-groups-BY1MdSIE.d.ts → tool-groups-V23aGP_g.d.ts} +2 -2
- package/dist/tool-groups-V23aGP_g.d.ts.map +1 -0
- package/dist/{trace-questions-DnqdmwyV.d.ts → trace-questions-B-Wf0W3Q.d.ts} +2 -2
- package/dist/{trace-questions-DnqdmwyV.d.ts.map → trace-questions-B-Wf0W3Q.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +1 -1
- package/dist/traces.d.ts +2 -2
- package/dist/{types-DfvQOe91.d.ts → types-BR1LLIxm.d.ts} +2 -2
- package/dist/{types-DfvQOe91.d.ts.map → types-BR1LLIxm.d.ts.map} +1 -1
- package/dist/{types-C4hH69a9.d.ts → types-BbiT5NPH.d.ts} +2 -2
- package/dist/{types-C4hH69a9.d.ts.map → types-BbiT5NPH.d.ts.map} +1 -1
- package/dist/{types-DRNlLbBR.d.ts → types-DUlbOCwL.d.ts} +2 -2
- package/dist/{types-DRNlLbBR.d.ts.map → types-DUlbOCwL.d.ts.map} +1 -1
- package/docs/campaign-coverage.md +20 -0
- package/docs/changes/jev-recorded-evidence.md +24 -0
- package/docs/jev-replay.md +50 -0
- package/docs/retained-dispatch.md +56 -0
- package/docs/rollout.md +3 -1
- package/package.json +1 -1
- package/dist/claude-jsonl-CxZZrDJ3.js.map +0 -1
- package/dist/index-giYkbitB.d.ts.map +0 -1
- package/dist/jev-protocol-CpKI7XSu.d.ts.map +0 -1
- package/dist/mint-C9Lojt1V.d.ts.map +0 -1
- package/dist/mint-vlRckJEX.js.map +0 -1
- package/dist/tool-groups-BY1MdSIE.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as parseClaudeEntries, o as transcriptFromEntries } from "../claude-jsonl-
|
|
2
|
-
import { n as supervisorRunRolloutLines, r as SUPERVISOR_RUN_INTEGRITY_SCHEMA, t as analyzeSupervisorRunIntegrity } from "../integrity-
|
|
1
|
+
import { i as parseClaudeEntries, o as transcriptFromEntries } from "../claude-jsonl-DoQJBCVR.js";
|
|
2
|
+
import { n as supervisorRunRolloutLines, r as SUPERVISOR_RUN_INTEGRITY_SCHEMA, t as analyzeSupervisorRunIntegrity } from "../integrity-atFlABhR.js";
|
|
3
3
|
import { d as SUPERVISOR_RUN_SCHEMA, f as isUnavailable, l as NO_SOURCE_LIMITS, m as unavailable, n as RUNTIME_FAILED_STATUS, p as showMeasured, r as readTerminalRecord, s as parseSupervisorTree, t as NO_TERMINAL_RECORD, u as SUPERVISOR_RUN_ROLLUP_SCHEMA } from "../terminal-record-BHocwFw1.js";
|
|
4
4
|
import { a as writeSupervisorRunReport, c as readRuntimeSupervisorRun, d as renderSupervisorRunHeadline, f as renderSupervisorRunMarkdown, h as rollupSupervisorRuns, i as reportSupervisorRound, l as runtimeSupervisorRunReader, m as parsePatch, n as analyzeSupervisorRun, o as writeSupervisorRunReportSafe, p as analyzeSupervisorRunSources, r as findSupervisorRunDirs, s as isRuntimeSupervisorRunDir, t as runSupervisorRunCommand, u as renderSupervisorRollupMarkdown } from "../report-command-DzPpFgjB.js";
|
|
5
5
|
import { basename, dirname, join } from "node:path";
|
|
@@ -181,8 +181,12 @@ async function readChildren(dir) {
|
|
|
181
181
|
const path = join(dir, name);
|
|
182
182
|
const raw = await readFile(path, "utf8").catch(() => null);
|
|
183
183
|
if (raw === null) continue;
|
|
184
|
-
const
|
|
185
|
-
const
|
|
184
|
+
const sourceGaps = [];
|
|
185
|
+
const entries = parseClaudeEntries(raw, (gap) => sourceGaps.push(gap));
|
|
186
|
+
const projected = transcriptFromEntries(entries, {
|
|
187
|
+
includeSidechain: true,
|
|
188
|
+
sourceGaps
|
|
189
|
+
});
|
|
186
190
|
const metaRaw = await readFile(path.replace(/\.jsonl$/, ".meta.json"), "utf8").catch(() => null);
|
|
187
191
|
let meta = {};
|
|
188
192
|
if (metaRaw !== null) try {
|
|
@@ -203,6 +207,7 @@ async function readChildren(dir) {
|
|
|
203
207
|
tokensOut: projected.usage.tokensOut,
|
|
204
208
|
cacheRead: projected.usage.cacheRead,
|
|
205
209
|
cacheWrite: projected.usage.cacheWrite,
|
|
210
|
+
gaps: projected.gaps,
|
|
206
211
|
firstAt: projected.startedAt,
|
|
207
212
|
lastAt: projected.endedAt,
|
|
208
213
|
model: projected.model,
|
|
@@ -258,9 +263,10 @@ async function readClaudeCodeSupervisorRun(opts) {
|
|
|
258
263
|
},
|
|
259
264
|
traceCommand
|
|
260
265
|
};
|
|
261
|
-
const
|
|
266
|
+
const mainSourceGaps = [];
|
|
267
|
+
const allEntries = parseClaudeEntries(raw, (gap) => mainSourceGaps.push(gap));
|
|
262
268
|
const main = threadCalls(allEntries.filter((e) => !e.isSidechain));
|
|
263
|
-
const mainTranscript = transcriptFromEntries(allEntries);
|
|
269
|
+
const mainTranscript = transcriptFromEntries(allEntries, { sourceGaps: mainSourceGaps });
|
|
264
270
|
const subagentsDir = opts.subagentsDir === void 0 ? join(dirname(opts.transcriptPath), sessionId, "subagents") : opts.subagentsDir;
|
|
265
271
|
const children = subagentsDir === null ? [] : await readChildren(subagentsDir);
|
|
266
272
|
const childByAgentId = new Map(children.map((c) => [c.agentId, c]));
|
|
@@ -364,7 +370,7 @@ async function readClaudeCodeSupervisorRun(opts) {
|
|
|
364
370
|
reason: "stopped by supervisor",
|
|
365
371
|
at: c.at
|
|
366
372
|
}));
|
|
367
|
-
journalLines.push(line({
|
|
373
|
+
if (mainTranscript.gaps.length === 0 && mainTranscript.usage.tokensIn !== null && mainTranscript.usage.tokensOut !== null && mainTranscript.usage.cacheRead !== null && mainTranscript.usage.cacheWrite !== null) journalLines.push(line({
|
|
368
374
|
kind: "metered",
|
|
369
375
|
id: sessionId,
|
|
370
376
|
spend: { tokens: {
|
|
@@ -429,16 +435,17 @@ async function readClaudeCodeSupervisorRun(opts) {
|
|
|
429
435
|
});
|
|
430
436
|
}
|
|
431
437
|
const joined = children.length;
|
|
432
|
-
const
|
|
438
|
+
const missingChildren = spawns.filter((spawn) => !childByAgentId.has(spawn.agentId)).length;
|
|
439
|
+
const incompleteChildren = children.filter((child) => child.gaps.length > 0 || child.tokensIn === null || child.tokensOut === null || child.cacheRead === null || child.cacheWrite === null).length;
|
|
440
|
+
const harnessMissingReason = subagentsDir === null ? "subagent transcript join disabled" : joined === 0 ? `no subagent transcripts under ${subagentsDir}` : missingChildren > 0 ? `${missingChildren}/${spawns.length} spawned agents have no retained transcript under ${subagentsDir}` : incompleteChildren > 0 ? `${incompleteChildren}/${joined} subagent transcripts have malformed lines or unknown usage` : null;
|
|
441
|
+
const harnessWorkerTokens = joined === 0 || incompleteChildren > 0 ? null : {
|
|
433
442
|
store: "claude-code subagent transcripts",
|
|
434
443
|
sessions: joined,
|
|
435
|
-
input: children.reduce((a,
|
|
436
|
-
output: children.reduce((a,
|
|
437
|
-
cacheRead: children.reduce((a,
|
|
438
|
-
cacheWrite: children.reduce((a,
|
|
444
|
+
input: children.reduce((a, child) => a + (child.tokensIn ?? 0), 0),
|
|
445
|
+
output: children.reduce((a, child) => a + (child.tokensOut ?? 0), 0),
|
|
446
|
+
cacheRead: children.reduce((a, child) => a + (child.cacheRead ?? 0), 0),
|
|
447
|
+
cacheWrite: children.reduce((a, child) => a + (child.cacheWrite ?? 0), 0)
|
|
439
448
|
};
|
|
440
|
-
const missingChildren = spawns.filter((s) => !childByAgentId.has(s.agentId)).length;
|
|
441
|
-
const harnessMissingReason = subagentsDir === null ? "subagent transcript join disabled" : joined === 0 ? `no subagent transcripts under ${subagentsDir}` : missingChildren === 0 ? null : `${missingChildren}/${spawns.length} spawned agents have no retained transcript under ${subagentsDir} (Claude Code prunes them; their tokens are unrecoverable)`;
|
|
442
449
|
const liveWorkers = spawns.filter((s) => !lastNotification.has(s.agentId) && !cancelledIds.has(s.agentId)).length;
|
|
443
450
|
const state = JSON.stringify({
|
|
444
451
|
id: sessionId,
|
|
@@ -467,6 +474,7 @@ async function readClaudeCodeSupervisorRun(opts) {
|
|
|
467
474
|
harnessMissingReason,
|
|
468
475
|
limits: {
|
|
469
476
|
...limits,
|
|
477
|
+
managerTokens: mainTranscript.gaps.length > 0 ? `main transcript has ${mainTranscript.gaps.length} parse or usage gaps` : null,
|
|
470
478
|
workerTokens: spawns.length === 0 ? null : harnessMissingReason,
|
|
471
479
|
deliverables: NO_DELIVERABLES
|
|
472
480
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/supervisor-run/claude-code-reader.ts"],"sourcesContent":["/**\n * Supervision-tree reader over a THIRD-PARTY harness: Claude Code.\n *\n * The Runtime reader reads a supervisor journal designed for this analysis.\n * for this analysis. This reader reads a harness we do not control, whose\n * transcript was designed for replaying a chat — and recovers the same tree\n * from it. If both produce a `SupervisorRunSources`, the tree model is a\n * property of multi-agent runs, not of our journal format.\n *\n * ## Where the tree hides in a Claude Code transcript\n *\n * | Tree fact | Claude Code evidence |\n * |---|---|\n * | spawn | assistant `tool_use` (`Agent` / `Task`), answered by a `tool_result` whose `toolUseResult.agentId` names the child |\n * | settle | a `<task-notification>` block in a later user line: `<task-id>` = agentId, `<status>` |\n * | steer | assistant `tool_use` (`SendMessage`) with `input.to` = agentId — mid-task, to a LIVE child |\n * | delivered | that steer's `tool_result` carrying `success` / `resumedAgentId` |\n * | cancel | assistant `tool_use` (`TaskStop`) targeting an agentId |\n * | brain spend| `message.usage` on the main thread's assistant lines |\n * | worker spend| `message.usage` inside `<session>/subagents/agent-<id>.jsonl` |\n * | depth | a child transcript that itself contains `Agent` tool_use lines |\n *\n * Every one of those is read through `parseClaudeEntries` — the SAME line\n * parser `src/rollout/readers/claude-jsonl.ts` uses for solo rollouts. There\n * is no second transcript parser.\n *\n * ## What Claude Code cannot say\n *\n * It records tokens but never a price, runs no per-worker verify, and keeps no\n * per-worker patch. Those are declared once in `limits`, so the analyzer\n * reports `unavailable — <reason>` instead of the $0 / 0-accepted that summing\n * an empty field would produce. See `SourceLimits`.\n *\n * ## Metric coverage vs the Runtime journal\n *\n * Measured on a real 52-agent session (fixture:\n * `tests/fixtures/supervisor-run/claude-code-session-*`).\n *\n * | Metric | Runtime | Claude Code | Why |\n * |---|---|---|---|\n * | workersSpawned / Settled / Cancelled | full | full | spawn tool_use + task-notification + TaskStop |\n * | steers / steersDelivered / steersByWorker | full | full | `SendMessage`; delivery from its tool_result |\n * | waves / waveSizes / maxConcurrency | full | full | derived from spawn/settle instants |\n * | respawns / repeatedLabels | full | full | same derivation |\n * | delegationDepth | full | full | a child transcript's own spawn calls |\n * | timeToFirstSpawn / supervisorWall | full | full | transcript instants |\n * | idleMs / idlePct / workerUtilization | full | PARTIAL | an agent that never notifies is counted live to the end of the transcript |\n * | observeThenRespawn / respawnWithoutEvidence | full | full | ordering of spawn vs settle instants |\n * | workerEvidenceBytes | full | PARTIAL | the child's closing message; 0 for pruned transcripts |\n * | brain tokens in/out + cache | full | full | main-thread `message.usage` |\n * | worker tokens in/out + cache | via harness join | full or unavailable | totals are refused if any spawned transcript was pruned; retained per-worker rows remain available |\n * | perWorker wall | full | full | spawn → settle instants |\n * | accepted / rejected / emptyPass / settledVerdicts | full | NONE | no per-worker verify step exists |\n * | brain/worker/total usd, costPerAcceptedPatch | full | NONE | transcripts carry no price |\n * | patch stats, delivered, verifyPass/Rc | full | NONE | no diff is handed back |\n * | judgeResolved / Score / Passed / Total | full | NONE | no judge in the loop |\n * | driverSteerCalls, brainTruncations | full | NONE | no outer driver log, no per-call finish_reason tap |\n */\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { basename, dirname, join } from 'node:path'\nimport {\n type ClaudeEntry,\n parseClaudeEntries,\n transcriptFromEntries,\n} from '../rollout/readers/claude-jsonl'\nimport type { SupervisorRunReader, SupervisorRunSources, WorkerLogSource } from './types'\n\n/** Tool names that spawn a child agent. `Task` is the older name for `Agent`. */\nconst DEFAULT_SPAWN_TOOLS = ['Agent', 'Task'] as const\n/** Tool names that deliver a message to an ALREADY-RUNNING child agent. */\nconst DEFAULT_STEER_TOOLS = ['SendMessage'] as const\n/** Tool names that stop a running child agent. */\nconst DEFAULT_CANCEL_TOOLS = ['TaskStop', 'KillAgent'] as const\n\nconst SPEND_UNPRICED =\n 'Claude Code transcripts record token usage but never a price — usd is not in the store'\nconst NO_VERDICTS =\n 'Claude Code runs no per-worker verify step — a subagent reports prose, not pass/fail'\nconst NO_DELIVERABLES =\n 'Claude Code retains no per-worker patch — subagents commit to git, they do not hand back a diff'\n\nexport interface ClaudeCodeReaderOptions {\n /** The main session transcript: `~/.claude/projects/<slug>/<sessionId>.jsonl`. */\n readonly transcriptPath: string\n /**\n * Directory of child transcripts. Defaults to `<transcript-dir>/<sessionId>/subagents`.\n * `null` skips the join, and every per-worker token count becomes unavailable.\n */\n readonly subagentsDir?: string | null\n readonly runRef?: string\n readonly instanceId?: string | null\n readonly arm?: string | null\n readonly spawnTools?: readonly string[]\n readonly steerTools?: readonly string[]\n readonly cancelTools?: readonly string[]\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v)\n\nconst str = (v: unknown): string | null => (typeof v === 'string' ? v : null)\n\ninterface ToolUse {\n readonly id: string\n readonly name: string\n readonly input: Record<string, unknown>\n readonly at: string | null\n}\n\ninterface ToolResult {\n readonly id: string\n readonly at: string | null\n readonly structured: unknown\n readonly text: string\n}\n\n/** Every tool call and tool result on one thread, in order, with instants. */\ninterface ThreadCalls {\n readonly uses: ToolUse[]\n readonly results: Map<string, ToolResult>\n readonly notifications: TaskNotification[]\n readonly firstAt: string | null\n readonly lastAt: string | null\n}\n\ninterface TaskNotification {\n readonly taskId: string\n readonly toolUseId: string | null\n readonly status: string\n readonly summary: string | null\n readonly at: string | null\n}\n\nfunction blockText(content: unknown): string {\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n const parts: string[] = []\n for (const b of content) {\n if (isRecord(b) && b.type === 'text' && typeof b.text === 'string') parts.push(b.text)\n }\n return parts.join('\\n')\n}\n\nconst tag = (xml: string, name: string): string | null => {\n const m = xml.match(new RegExp(`<${name}>([\\\\s\\\\S]*?)</${name}>`))\n return m === null ? null : (m[1] as string)\n}\n\n/**\n * Task notifications are the settle instants. A notification fires each time an\n * agent stops, so a resumed agent produces several — they are kept in order and\n * the LAST one is the settle the analyzer sees, with the earlier ones acting as\n * the intermediate stops they actually were.\n */\nfunction parseNotifications(text: string, at: string | null): TaskNotification[] {\n const out: TaskNotification[] = []\n for (const m of text.matchAll(/<task-notification>[\\s\\S]*?<\\/task-notification>/g)) {\n const xml = m[0]\n const taskId = tag(xml, 'task-id')\n if (taskId === null) continue\n out.push({\n taskId: taskId.trim(),\n toolUseId: tag(xml, 'tool-use-id')?.trim() ?? null,\n status: tag(xml, 'status')?.trim() ?? 'unknown',\n summary: tag(xml, 'summary')?.trim() ?? null,\n at,\n })\n }\n return out\n}\n\n/** Project entries of ONE thread (main or a single sidechain) into tool traffic. */\nfunction threadCalls(entries: readonly ClaudeEntry[]): ThreadCalls {\n const uses: ToolUse[] = []\n const results = new Map<string, ToolResult>()\n const notifications: TaskNotification[] = []\n let firstAt: string | null = null\n let lastAt: string | null = null\n\n for (const entry of entries) {\n if (entry.timestamp !== null) {\n if (firstAt === null) firstAt = entry.timestamp\n lastAt = entry.timestamp\n }\n const content = entry.message.content\n if (entry.type === 'assistant') {\n if (!Array.isArray(content)) continue\n for (const block of content) {\n if (!isRecord(block) || block.type !== 'tool_use') continue\n const id = str(block.id)\n const name = str(block.name)\n if (id === null || name === null) continue\n uses.push({\n id,\n name,\n input: isRecord(block.input) ? block.input : {},\n at: entry.timestamp,\n })\n }\n continue\n }\n if (typeof content === 'string') {\n notifications.push(...parseNotifications(content, entry.timestamp))\n continue\n }\n if (!Array.isArray(content)) continue\n for (const block of content) {\n if (!isRecord(block)) continue\n if (block.type === 'tool_result' && typeof block.tool_use_id === 'string') {\n results.set(block.tool_use_id, {\n id: block.tool_use_id,\n at: entry.timestamp,\n structured: entry.toolUseResult,\n text: blockText(block.content),\n })\n } else if (block.type === 'text' && typeof block.text === 'string') {\n notifications.push(...parseNotifications(block.text, entry.timestamp))\n }\n }\n }\n return { uses, results, notifications, firstAt, lastAt }\n}\n\n/**\n * The agent id a spawn produced. Claude Code puts it in the structured\n * `toolUseResult`; the same id is echoed in the result text for transcripts\n * written before that field existed, so both are tried before giving up.\n */\nfunction spawnedAgentId(result: ToolResult | undefined): string | null {\n if (result === undefined) return null\n if (isRecord(result.structured)) {\n const id = str(result.structured.agentId)\n if (id !== null) return id\n }\n return result.text.match(/agentId:\\s*([A-Za-z0-9_-]+)/)?.[1] ?? null\n}\n\ninterface ChildTranscript {\n readonly agentId: string\n readonly path: string\n readonly description: string | null\n readonly spawnToolUseId: string | null\n readonly spawnDepth: number | null\n readonly entries: ClaudeEntry[]\n readonly tokensIn: number\n readonly tokensOut: number\n readonly cacheRead: number\n readonly cacheWrite: number\n readonly firstAt: string | null\n readonly lastAt: string | null\n readonly model: string | null\n /**\n * The child's closing assistant message — what it actually handed back. This\n * is the Claude Code analogue of a worker's `evidence` blob.\n */\n readonly finalReport: string | null\n}\n\nasync function readChildren(dir: string): Promise<ChildTranscript[]> {\n const names = await readdir(dir).catch(() => null)\n if (names === null) return []\n const out: ChildTranscript[] = []\n for (const name of names.filter((n) => n.endsWith('.jsonl')).sort()) {\n const path = join(dir, name)\n const raw = await readFile(path, 'utf8').catch(() => null)\n if (raw === null) continue\n const entries = parseClaudeEntries(raw)\n // A subagent transcript is sidechain end to end — that flag is what marks it\n // a separate invocation rather than a turn of the parent.\n const projected = transcriptFromEntries(entries, { includeSidechain: true })\n const metaRaw = await readFile(path.replace(/\\.jsonl$/, '.meta.json'), 'utf8').catch(() => null)\n let meta: Record<string, unknown> = {}\n if (metaRaw !== null) {\n try {\n const parsed: unknown = JSON.parse(metaRaw)\n if (isRecord(parsed)) meta = parsed\n } catch {\n meta = {}\n }\n }\n const agentId =\n entries.find((e) => e.agentId !== null)?.agentId ??\n name.replace(/^agent-/, '').replace(/\\.jsonl$/, '')\n out.push({\n agentId,\n path,\n description: str(meta.description),\n spawnToolUseId: str(meta.toolUseId),\n spawnDepth: typeof meta.spawnDepth === 'number' ? meta.spawnDepth : null,\n entries,\n tokensIn: projected.usage.tokensIn,\n tokensOut: projected.usage.tokensOut,\n cacheRead: projected.usage.cacheRead,\n cacheWrite: projected.usage.cacheWrite,\n firstAt: projected.startedAt,\n lastAt: projected.endedAt,\n model: projected.model,\n finalReport:\n [...projected.messages]\n .reverse()\n .find((m) => m.role === 'assistant' && typeof m.content === 'string')?.content ?? null,\n })\n }\n return out\n}\n\ninterface SpawnFact {\n readonly agentId: string\n readonly parentId: string\n readonly label: string\n readonly at: string | null\n readonly model: string | null\n}\n\n/** A journal line in the dialect `parseSupervisorTree` reads. */\nconst line = (obj: Record<string, unknown>): string => JSON.stringify(obj)\n\n/**\n * Read a Claude Code session (plus its subagent transcripts) as supervision-tree\n * source bytes. Never throws on a missing artifact.\n */\nexport async function readClaudeCodeSupervisorRun(\n opts: ClaudeCodeReaderOptions,\n): Promise<SupervisorRunSources> {\n const spawnTools = new Set(opts.spawnTools ?? DEFAULT_SPAWN_TOOLS)\n const steerTools = new Set(opts.steerTools ?? DEFAULT_STEER_TOOLS)\n const cancelTools = new Set(opts.cancelTools ?? DEFAULT_CANCEL_TOOLS)\n\n const raw = await readFile(opts.transcriptPath, 'utf8').catch(() => null)\n const sessionId = basename(opts.transcriptPath).replace(/\\.jsonl$/, '')\n const runRef = opts.runRef ?? opts.transcriptPath\n const limits = {\n managerTokens: null,\n workerTokens: null,\n spendUsd: SPEND_UNPRICED,\n workerVerdicts: NO_VERDICTS,\n deliverables: null,\n }\n const traceCommand = `npx --yes @tangle-network/traces@latest analyze --harness claude-code --session ${sessionId}`\n\n if (raw === null) {\n return {\n runRef,\n instanceId: opts.instanceId ?? sessionId,\n arm: opts.arm ?? null,\n supRunDir: null,\n journal: null,\n brainLog: null,\n state: null,\n progress: null,\n workers: null,\n workersMissingReason: `session transcript unreadable at ${opts.transcriptPath}`,\n result: null,\n judge: null,\n judgeSource: null,\n patch: null,\n driverLog: null,\n harnessWorkerTokens: null,\n harnessMissingReason: `session transcript unreadable at ${opts.transcriptPath}`,\n limits: {\n ...limits,\n managerTokens: `session transcript unreadable at ${opts.transcriptPath}`,\n workerTokens: `session transcript unreadable at ${opts.transcriptPath}`,\n deliverables: NO_DELIVERABLES,\n },\n traceCommand,\n }\n }\n\n const allEntries = parseClaudeEntries(raw)\n const main = threadCalls(allEntries.filter((e) => !e.isSidechain))\n const mainTranscript = transcriptFromEntries(allEntries)\n\n const subagentsDir =\n opts.subagentsDir === undefined\n ? join(dirname(opts.transcriptPath), sessionId, 'subagents')\n : opts.subagentsDir\n const children = subagentsDir === null ? [] : await readChildren(subagentsDir)\n const childByAgentId = new Map(children.map((c) => [c.agentId, c]))\n const childBySpawnToolUseId = new Map(\n children.filter((c) => c.spawnToolUseId !== null).map((c) => [c.spawnToolUseId as string, c]),\n )\n\n // Every thread that can spawn: the session itself, plus each child transcript\n // (a child that calls the spawn tool is a second delegation level).\n const threads: Array<{ id: string; calls: ThreadCalls }> = [{ id: sessionId, calls: main }]\n for (const child of children) {\n threads.push({ id: child.agentId, calls: threadCalls(child.entries) })\n }\n\n const spawns: SpawnFact[] = []\n const steersByTarget = new Map<\n string,\n Array<{ requestId: string; at: string | null; delivered: boolean }>\n >()\n const cancels: Array<{ agentId: string; at: string | null }> = []\n const settles: TaskNotification[] = []\n\n for (const thread of threads) {\n for (const use of thread.calls.uses) {\n if (spawnTools.has(use.name)) {\n const result = thread.calls.results.get(use.id)\n const agentId = spawnedAgentId(result) ?? childBySpawnToolUseId.get(use.id)?.agentId ?? null\n if (agentId === null) continue\n const label =\n str(use.input.description) ?? childByAgentId.get(agentId)?.description ?? agentId\n spawns.push({\n agentId,\n parentId: thread.id,\n label,\n // The spawn is complete when the launch call is answered; the tool_use\n // instant is the fallback for a call that never got a result line.\n at: result?.at ?? use.at,\n model: isRecord(result?.structured) ? str(result.structured.resolvedModel) : null,\n })\n continue\n }\n if (steerTools.has(use.name)) {\n const target = str(use.input.to) ?? str(use.input.recipient)\n if (target === null) continue\n const result = thread.calls.results.get(use.id)\n const structured = isRecord(result?.structured) ? result.structured : null\n // `success` is the harness confirming the message reached a live agent;\n // absent, the steer is counted queued but not delivered.\n const delivered = structured?.success === true || str(structured?.resumedAgentId) === target\n const rows = steersByTarget.get(target) ?? []\n rows.push({ requestId: use.id, at: use.at, delivered })\n steersByTarget.set(target, rows)\n continue\n }\n if (cancelTools.has(use.name)) {\n const target = str(use.input.agentId) ?? str(use.input.to) ?? str(use.input.taskId)\n if (target !== null) cancels.push({ agentId: target, at: use.at })\n }\n }\n settles.push(...thread.calls.notifications)\n }\n\n const spawnedIds = new Set(spawns.map((s) => s.agentId))\n const cancelledIds = new Set(\n cancels.filter((c) => spawnedIds.has(c.agentId)).map((c) => c.agentId),\n )\n const startedAt = main.firstAt\n const completedAt = main.lastAt\n\n const journalLines: string[] = [\n line({\n kind: 'spawned',\n id: sessionId,\n parent: null,\n label: `session:${sessionId}`,\n role: 'supervisor',\n at: startedAt,\n }),\n ]\n for (const s of spawns) {\n journalLines.push(\n line({\n kind: 'spawned',\n id: s.agentId,\n parent: s.parentId,\n label: s.label,\n role: 'worker',\n at: s.at,\n }),\n )\n }\n\n // Only the LAST notification per agent is its settle; an earlier one is a stop\n // the supervisor resumed from, which the steer count already records.\n const lastNotification = new Map<string, TaskNotification>()\n for (const n of settles) {\n if (!spawnedIds.has(n.taskId)) continue\n lastNotification.set(n.taskId, n)\n }\n for (const [agentId, n] of lastNotification) {\n if (cancelledIds.has(agentId)) continue\n journalLines.push(\n line({\n kind: 'settled',\n id: agentId,\n status: n.status,\n verdict: n.summary,\n at: n.at,\n // No `spent` key: Claude Code prices nothing, and a zeroed spend object\n // would read as a $0 worker. `limits.spendUsd` carries the reason.\n }),\n )\n }\n // One cancel per agent: Claude Code can emit a stop then a retry-stop for the\n // same agentId, and each raw entry would otherwise mint a duplicate `cancelled`\n // line that double-counts in `workersCancelled`. Keep the last, mirroring the\n // last-notification dedup the settle path already does.\n const lastCancel = new Map<string, { agentId: string; at: string | null }>()\n for (const c of cancels) {\n if (!spawnedIds.has(c.agentId)) continue\n lastCancel.set(c.agentId, c)\n }\n for (const c of lastCancel.values()) {\n journalLines.push(\n line({ kind: 'cancelled', id: c.agentId, reason: 'stopped by supervisor', at: c.at }),\n )\n }\n // `metered` carries the brain's own inference. The token counts are real; the\n // usd stays absent and `limits.spendUsd` explains why.\n journalLines.push(\n line({\n kind: 'metered',\n id: sessionId,\n spend: {\n tokens: {\n input: mainTranscript.usage.tokensIn,\n output: mainTranscript.usage.tokensOut,\n cacheRead: mainTranscript.usage.cacheRead,\n cacheWrite: mainTranscript.usage.cacheWrite,\n },\n },\n at: completedAt,\n }),\n )\n\n const settleAtByAgent = new Map(\n [...lastNotification.entries()].map(([id, n]) => [id, n.at] as const),\n )\n const spawnAtByAgent = new Map(spawns.map((s) => [s.agentId, s.at] as const))\n\n const workers: WorkerLogSource[] = []\n for (const spawn of spawns) {\n const { agentId, label } = spawn\n const events: string[] = []\n const inbox: string[] = []\n const child = childByAgentId.get(agentId) ?? null\n const startAt = child?.firstAt ?? spawnAtByAgent.get(agentId) ?? null\n const endAt = settleAtByAgent.get(agentId) ?? child?.lastAt ?? null\n if (startAt !== null) events.push(line({ kind: 'started', label, at: startAt, agentId }))\n for (const steer of steersByTarget.get(agentId) ?? []) {\n inbox.push(line({ id: steer.requestId, at: steer.at, worker: label, message: 'steer' }))\n events.push(\n line({\n kind: 'message',\n label,\n direction: 'down',\n at: steer.at,\n requestId: steer.requestId,\n delivered: steer.delivered,\n }),\n )\n }\n if (endAt !== null) {\n events.push(\n line({\n kind: 'finished',\n label,\n at: endAt,\n agentId,\n // No `passed` / `patchBytes`: this harness has neither. Emitting\n // `passed: false` here would invent a failed worker.\n // `evidence` is the child's closing message — what it handed back.\n ...(child?.finalReport === null || child?.finalReport === undefined\n ? {}\n : { evidence: child.finalReport }),\n }),\n )\n }\n workers.push({\n workerId: agentId,\n label,\n events: events.length === 0 ? '' : `${events.join('\\n')}\\n`,\n inbox: inbox.length === 0 ? '' : `${inbox.join('\\n')}\\n`,\n patchBytes: null,\n transcriptRef: child?.path ?? null,\n patchPath: null,\n tokensIn: child?.tokensIn ?? null,\n tokensOut: child?.tokensOut ?? null,\n cacheRead: child?.cacheRead ?? null,\n cacheWrite: child?.cacheWrite ?? null,\n })\n }\n\n const joined = children.length\n const harnessWorkerTokens =\n joined === 0\n ? null\n : {\n store: 'claude-code subagent transcripts',\n sessions: joined,\n input: children.reduce((a, c) => a + c.tokensIn, 0),\n output: children.reduce((a, c) => a + c.tokensOut, 0),\n cacheRead: children.reduce((a, c) => a + c.cacheRead, 0),\n cacheWrite: children.reduce((a, c) => a + c.cacheWrite, 0),\n }\n\n const missingChildren = spawns.filter((s) => !childByAgentId.has(s.agentId)).length\n const harnessMissingReason =\n subagentsDir === null\n ? 'subagent transcript join disabled'\n : joined === 0\n ? `no subagent transcripts under ${subagentsDir}`\n : missingChildren === 0\n ? null\n : `${missingChildren}/${spawns.length} spawned agents have no retained transcript under ${subagentsDir} (Claude Code prunes them; their tokens are unrecoverable)`\n\n const liveWorkers = spawns.filter(\n (s) => !lastNotification.has(s.agentId) && !cancelledIds.has(s.agentId),\n ).length\n const state = JSON.stringify({\n id: sessionId,\n // Derived, not asserted: a spawned agent with no notification and no stop\n // is still running, which is exactly what a live transcript looks like.\n status: liveWorkers > 0 ? 'running' : 'idle',\n startedAt,\n completedAt,\n result: { delivered: null },\n })\n\n return {\n runRef,\n instanceId: opts.instanceId ?? sessionId,\n arm: opts.arm ?? null,\n supRunDir: subagentsDir,\n journal: `${journalLines.join('\\n')}\\n`,\n brainLog: null,\n state,\n progress: null,\n workers,\n workersMissingReason: null,\n result: null,\n judge: null,\n judgeSource: null,\n patch: null,\n driverLog: null,\n harnessWorkerTokens,\n harnessMissingReason,\n limits: {\n ...limits,\n workerTokens: spawns.length === 0 ? null : harnessMissingReason,\n deliverables: NO_DELIVERABLES,\n },\n rootTranscriptRef: opts.transcriptPath,\n traceCommand,\n }\n}\n\n/** A `SupervisorRunReader` over a Claude Code session — the same contract Runtime implements. */\nexport function claudeCodeSupervisorRunReader(opts: ClaudeCodeReaderOptions): SupervisorRunReader {\n return {\n runRef: opts.runRef ?? opts.transcriptPath,\n read: () => readClaudeCodeSupervisorRun(opts),\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/supervisor-run/claude-code-reader.ts"],"sourcesContent":["/**\n * Supervision-tree reader over a THIRD-PARTY harness: Claude Code.\n *\n * The Runtime reader reads a supervisor journal designed for this analysis.\n * for this analysis. This reader reads a harness we do not control, whose\n * transcript was designed for replaying a chat — and recovers the same tree\n * from it. If both produce a `SupervisorRunSources`, the tree model is a\n * property of multi-agent runs, not of our journal format.\n *\n * ## Where the tree hides in a Claude Code transcript\n *\n * | Tree fact | Claude Code evidence |\n * |---|---|\n * | spawn | assistant `tool_use` (`Agent` / `Task`), answered by a `tool_result` whose `toolUseResult.agentId` names the child |\n * | settle | a `<task-notification>` block in a later user line: `<task-id>` = agentId, `<status>` |\n * | steer | assistant `tool_use` (`SendMessage`) with `input.to` = agentId — mid-task, to a LIVE child |\n * | delivered | that steer's `tool_result` carrying `success` / `resumedAgentId` |\n * | cancel | assistant `tool_use` (`TaskStop`) targeting an agentId |\n * | brain spend| `message.usage` on the main thread's assistant lines |\n * | worker spend| `message.usage` inside `<session>/subagents/agent-<id>.jsonl` |\n * | depth | a child transcript that itself contains `Agent` tool_use lines |\n *\n * Every one of those is read through `parseClaudeEntries` — the SAME line\n * parser `src/rollout/readers/claude-jsonl.ts` uses for solo rollouts. There\n * is no second transcript parser.\n *\n * ## What Claude Code cannot say\n *\n * It records tokens but never a price, runs no per-worker verify, and keeps no\n * per-worker patch. Those are declared once in `limits`, so the analyzer\n * reports `unavailable — <reason>` instead of the $0 / 0-accepted that summing\n * an empty field would produce. See `SourceLimits`.\n *\n * ## Metric coverage vs the Runtime journal\n *\n * Measured on a real 52-agent session (fixture:\n * `tests/fixtures/supervisor-run/claude-code-session-*`).\n *\n * | Metric | Runtime | Claude Code | Why |\n * |---|---|---|---|\n * | workersSpawned / Settled / Cancelled | full | full | spawn tool_use + task-notification + TaskStop |\n * | steers / steersDelivered / steersByWorker | full | full | `SendMessage`; delivery from its tool_result |\n * | waves / waveSizes / maxConcurrency | full | full | derived from spawn/settle instants |\n * | respawns / repeatedLabels | full | full | same derivation |\n * | delegationDepth | full | full | a child transcript's own spawn calls |\n * | timeToFirstSpawn / supervisorWall | full | full | transcript instants |\n * | idleMs / idlePct / workerUtilization | full | PARTIAL | an agent that never notifies is counted live to the end of the transcript |\n * | observeThenRespawn / respawnWithoutEvidence | full | full | ordering of spawn vs settle instants |\n * | workerEvidenceBytes | full | PARTIAL | the child's closing message; 0 for pruned transcripts |\n * | brain tokens in/out + cache | full | full | main-thread `message.usage` |\n * | worker tokens in/out + cache | via harness join | full or unavailable | totals are refused if any spawned transcript was pruned; retained per-worker rows remain available |\n * | perWorker wall | full | full | spawn → settle instants |\n * | accepted / rejected / emptyPass / settledVerdicts | full | NONE | no per-worker verify step exists |\n * | brain/worker/total usd, costPerAcceptedPatch | full | NONE | transcripts carry no price |\n * | patch stats, delivered, verifyPass/Rc | full | NONE | no diff is handed back |\n * | judgeResolved / Score / Passed / Total | full | NONE | no judge in the loop |\n * | driverSteerCalls, brainTruncations | full | NONE | no outer driver log, no per-call finish_reason tap |\n */\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { basename, dirname, join } from 'node:path'\nimport {\n type ClaudeEntry,\n parseClaudeEntries,\n transcriptFromEntries,\n} from '../rollout/readers/claude-jsonl'\nimport type { SupervisorRunReader, SupervisorRunSources, WorkerLogSource } from './types'\n\n/** Tool names that spawn a child agent. `Task` is the older name for `Agent`. */\nconst DEFAULT_SPAWN_TOOLS = ['Agent', 'Task'] as const\n/** Tool names that deliver a message to an ALREADY-RUNNING child agent. */\nconst DEFAULT_STEER_TOOLS = ['SendMessage'] as const\n/** Tool names that stop a running child agent. */\nconst DEFAULT_CANCEL_TOOLS = ['TaskStop', 'KillAgent'] as const\n\nconst SPEND_UNPRICED =\n 'Claude Code transcripts record token usage but never a price — usd is not in the store'\nconst NO_VERDICTS =\n 'Claude Code runs no per-worker verify step — a subagent reports prose, not pass/fail'\nconst NO_DELIVERABLES =\n 'Claude Code retains no per-worker patch — subagents commit to git, they do not hand back a diff'\n\nexport interface ClaudeCodeReaderOptions {\n /** The main session transcript: `~/.claude/projects/<slug>/<sessionId>.jsonl`. */\n readonly transcriptPath: string\n /**\n * Directory of child transcripts. Defaults to `<transcript-dir>/<sessionId>/subagents`.\n * `null` skips the join, and every per-worker token count becomes unavailable.\n */\n readonly subagentsDir?: string | null\n readonly runRef?: string\n readonly instanceId?: string | null\n readonly arm?: string | null\n readonly spawnTools?: readonly string[]\n readonly steerTools?: readonly string[]\n readonly cancelTools?: readonly string[]\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v)\n\nconst str = (v: unknown): string | null => (typeof v === 'string' ? v : null)\n\ninterface ToolUse {\n readonly id: string\n readonly name: string\n readonly input: Record<string, unknown>\n readonly at: string | null\n}\n\ninterface ToolResult {\n readonly id: string\n readonly at: string | null\n readonly structured: unknown\n readonly text: string\n}\n\n/** Every tool call and tool result on one thread, in order, with instants. */\ninterface ThreadCalls {\n readonly uses: ToolUse[]\n readonly results: Map<string, ToolResult>\n readonly notifications: TaskNotification[]\n readonly firstAt: string | null\n readonly lastAt: string | null\n}\n\ninterface TaskNotification {\n readonly taskId: string\n readonly toolUseId: string | null\n readonly status: string\n readonly summary: string | null\n readonly at: string | null\n}\n\nfunction blockText(content: unknown): string {\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n const parts: string[] = []\n for (const b of content) {\n if (isRecord(b) && b.type === 'text' && typeof b.text === 'string') parts.push(b.text)\n }\n return parts.join('\\n')\n}\n\nconst tag = (xml: string, name: string): string | null => {\n const m = xml.match(new RegExp(`<${name}>([\\\\s\\\\S]*?)</${name}>`))\n return m === null ? null : (m[1] as string)\n}\n\n/**\n * Task notifications are the settle instants. A notification fires each time an\n * agent stops, so a resumed agent produces several — they are kept in order and\n * the LAST one is the settle the analyzer sees, with the earlier ones acting as\n * the intermediate stops they actually were.\n */\nfunction parseNotifications(text: string, at: string | null): TaskNotification[] {\n const out: TaskNotification[] = []\n for (const m of text.matchAll(/<task-notification>[\\s\\S]*?<\\/task-notification>/g)) {\n const xml = m[0]\n const taskId = tag(xml, 'task-id')\n if (taskId === null) continue\n out.push({\n taskId: taskId.trim(),\n toolUseId: tag(xml, 'tool-use-id')?.trim() ?? null,\n status: tag(xml, 'status')?.trim() ?? 'unknown',\n summary: tag(xml, 'summary')?.trim() ?? null,\n at,\n })\n }\n return out\n}\n\n/** Project entries of ONE thread (main or a single sidechain) into tool traffic. */\nfunction threadCalls(entries: readonly ClaudeEntry[]): ThreadCalls {\n const uses: ToolUse[] = []\n const results = new Map<string, ToolResult>()\n const notifications: TaskNotification[] = []\n let firstAt: string | null = null\n let lastAt: string | null = null\n\n for (const entry of entries) {\n if (entry.timestamp !== null) {\n if (firstAt === null) firstAt = entry.timestamp\n lastAt = entry.timestamp\n }\n const content = entry.message.content\n if (entry.type === 'assistant') {\n if (!Array.isArray(content)) continue\n for (const block of content) {\n if (!isRecord(block) || block.type !== 'tool_use') continue\n const id = str(block.id)\n const name = str(block.name)\n if (id === null || name === null) continue\n uses.push({\n id,\n name,\n input: isRecord(block.input) ? block.input : {},\n at: entry.timestamp,\n })\n }\n continue\n }\n if (typeof content === 'string') {\n notifications.push(...parseNotifications(content, entry.timestamp))\n continue\n }\n if (!Array.isArray(content)) continue\n for (const block of content) {\n if (!isRecord(block)) continue\n if (block.type === 'tool_result' && typeof block.tool_use_id === 'string') {\n results.set(block.tool_use_id, {\n id: block.tool_use_id,\n at: entry.timestamp,\n structured: entry.toolUseResult,\n text: blockText(block.content),\n })\n } else if (block.type === 'text' && typeof block.text === 'string') {\n notifications.push(...parseNotifications(block.text, entry.timestamp))\n }\n }\n }\n return { uses, results, notifications, firstAt, lastAt }\n}\n\n/**\n * The agent id a spawn produced. Claude Code puts it in the structured\n * `toolUseResult`; the same id is echoed in the result text for transcripts\n * written before that field existed, so both are tried before giving up.\n */\nfunction spawnedAgentId(result: ToolResult | undefined): string | null {\n if (result === undefined) return null\n if (isRecord(result.structured)) {\n const id = str(result.structured.agentId)\n if (id !== null) return id\n }\n return result.text.match(/agentId:\\s*([A-Za-z0-9_-]+)/)?.[1] ?? null\n}\n\ninterface ChildTranscript {\n readonly agentId: string\n readonly path: string\n readonly description: string | null\n readonly spawnToolUseId: string | null\n readonly spawnDepth: number | null\n readonly entries: ClaudeEntry[]\n readonly tokensIn: number | null\n readonly tokensOut: number | null\n readonly cacheRead: number | null\n readonly cacheWrite: number | null\n readonly gaps: readonly string[]\n readonly firstAt: string | null\n readonly lastAt: string | null\n readonly model: string | null\n /**\n * The child's closing assistant message — what it actually handed back. This\n * is the Claude Code analogue of a worker's `evidence` blob.\n */\n readonly finalReport: string | null\n}\n\nasync function readChildren(dir: string): Promise<ChildTranscript[]> {\n const names = await readdir(dir).catch(() => null)\n if (names === null) return []\n const out: ChildTranscript[] = []\n for (const name of names.filter((n) => n.endsWith('.jsonl')).sort()) {\n const path = join(dir, name)\n const raw = await readFile(path, 'utf8').catch(() => null)\n if (raw === null) continue\n const sourceGaps: string[] = []\n const entries = parseClaudeEntries(raw, (gap) => sourceGaps.push(gap))\n // A subagent transcript is sidechain end to end — that flag is what marks it\n // a separate invocation rather than a turn of the parent.\n const projected = transcriptFromEntries(entries, { includeSidechain: true, sourceGaps })\n const metaRaw = await readFile(path.replace(/\\.jsonl$/, '.meta.json'), 'utf8').catch(() => null)\n let meta: Record<string, unknown> = {}\n if (metaRaw !== null) {\n try {\n const parsed: unknown = JSON.parse(metaRaw)\n if (isRecord(parsed)) meta = parsed\n } catch {\n meta = {}\n }\n }\n const agentId =\n entries.find((e) => e.agentId !== null)?.agentId ??\n name.replace(/^agent-/, '').replace(/\\.jsonl$/, '')\n out.push({\n agentId,\n path,\n description: str(meta.description),\n spawnToolUseId: str(meta.toolUseId),\n spawnDepth: typeof meta.spawnDepth === 'number' ? meta.spawnDepth : null,\n entries,\n tokensIn: projected.usage.tokensIn,\n tokensOut: projected.usage.tokensOut,\n cacheRead: projected.usage.cacheRead,\n cacheWrite: projected.usage.cacheWrite,\n gaps: projected.gaps,\n firstAt: projected.startedAt,\n lastAt: projected.endedAt,\n model: projected.model,\n finalReport:\n [...projected.messages]\n .reverse()\n .find((m) => m.role === 'assistant' && typeof m.content === 'string')?.content ?? null,\n })\n }\n return out\n}\n\ninterface SpawnFact {\n readonly agentId: string\n readonly parentId: string\n readonly label: string\n readonly at: string | null\n readonly model: string | null\n}\n\n/** A journal line in the dialect `parseSupervisorTree` reads. */\nconst line = (obj: Record<string, unknown>): string => JSON.stringify(obj)\n\n/**\n * Read a Claude Code session (plus its subagent transcripts) as supervision-tree\n * source bytes. Never throws on a missing artifact.\n */\nexport async function readClaudeCodeSupervisorRun(\n opts: ClaudeCodeReaderOptions,\n): Promise<SupervisorRunSources> {\n const spawnTools = new Set(opts.spawnTools ?? DEFAULT_SPAWN_TOOLS)\n const steerTools = new Set(opts.steerTools ?? DEFAULT_STEER_TOOLS)\n const cancelTools = new Set(opts.cancelTools ?? DEFAULT_CANCEL_TOOLS)\n\n const raw = await readFile(opts.transcriptPath, 'utf8').catch(() => null)\n const sessionId = basename(opts.transcriptPath).replace(/\\.jsonl$/, '')\n const runRef = opts.runRef ?? opts.transcriptPath\n const limits = {\n managerTokens: null,\n workerTokens: null,\n spendUsd: SPEND_UNPRICED,\n workerVerdicts: NO_VERDICTS,\n deliverables: null,\n }\n const traceCommand = `npx --yes @tangle-network/traces@latest analyze --harness claude-code --session ${sessionId}`\n\n if (raw === null) {\n return {\n runRef,\n instanceId: opts.instanceId ?? sessionId,\n arm: opts.arm ?? null,\n supRunDir: null,\n journal: null,\n brainLog: null,\n state: null,\n progress: null,\n workers: null,\n workersMissingReason: `session transcript unreadable at ${opts.transcriptPath}`,\n result: null,\n judge: null,\n judgeSource: null,\n patch: null,\n driverLog: null,\n harnessWorkerTokens: null,\n harnessMissingReason: `session transcript unreadable at ${opts.transcriptPath}`,\n limits: {\n ...limits,\n managerTokens: `session transcript unreadable at ${opts.transcriptPath}`,\n workerTokens: `session transcript unreadable at ${opts.transcriptPath}`,\n deliverables: NO_DELIVERABLES,\n },\n traceCommand,\n }\n }\n\n const mainSourceGaps: string[] = []\n const allEntries = parseClaudeEntries(raw, (gap) => mainSourceGaps.push(gap))\n const main = threadCalls(allEntries.filter((e) => !e.isSidechain))\n const mainTranscript = transcriptFromEntries(allEntries, { sourceGaps: mainSourceGaps })\n\n const subagentsDir =\n opts.subagentsDir === undefined\n ? join(dirname(opts.transcriptPath), sessionId, 'subagents')\n : opts.subagentsDir\n const children = subagentsDir === null ? [] : await readChildren(subagentsDir)\n const childByAgentId = new Map(children.map((c) => [c.agentId, c]))\n const childBySpawnToolUseId = new Map(\n children.filter((c) => c.spawnToolUseId !== null).map((c) => [c.spawnToolUseId as string, c]),\n )\n\n // Every thread that can spawn: the session itself, plus each child transcript\n // (a child that calls the spawn tool is a second delegation level).\n const threads: Array<{ id: string; calls: ThreadCalls }> = [{ id: sessionId, calls: main }]\n for (const child of children) {\n threads.push({ id: child.agentId, calls: threadCalls(child.entries) })\n }\n\n const spawns: SpawnFact[] = []\n const steersByTarget = new Map<\n string,\n Array<{ requestId: string; at: string | null; delivered: boolean }>\n >()\n const cancels: Array<{ agentId: string; at: string | null }> = []\n const settles: TaskNotification[] = []\n\n for (const thread of threads) {\n for (const use of thread.calls.uses) {\n if (spawnTools.has(use.name)) {\n const result = thread.calls.results.get(use.id)\n const agentId = spawnedAgentId(result) ?? childBySpawnToolUseId.get(use.id)?.agentId ?? null\n if (agentId === null) continue\n const label =\n str(use.input.description) ?? childByAgentId.get(agentId)?.description ?? agentId\n spawns.push({\n agentId,\n parentId: thread.id,\n label,\n // The spawn is complete when the launch call is answered; the tool_use\n // instant is the fallback for a call that never got a result line.\n at: result?.at ?? use.at,\n model: isRecord(result?.structured) ? str(result.structured.resolvedModel) : null,\n })\n continue\n }\n if (steerTools.has(use.name)) {\n const target = str(use.input.to) ?? str(use.input.recipient)\n if (target === null) continue\n const result = thread.calls.results.get(use.id)\n const structured = isRecord(result?.structured) ? result.structured : null\n // `success` is the harness confirming the message reached a live agent;\n // absent, the steer is counted queued but not delivered.\n const delivered = structured?.success === true || str(structured?.resumedAgentId) === target\n const rows = steersByTarget.get(target) ?? []\n rows.push({ requestId: use.id, at: use.at, delivered })\n steersByTarget.set(target, rows)\n continue\n }\n if (cancelTools.has(use.name)) {\n const target = str(use.input.agentId) ?? str(use.input.to) ?? str(use.input.taskId)\n if (target !== null) cancels.push({ agentId: target, at: use.at })\n }\n }\n settles.push(...thread.calls.notifications)\n }\n\n const spawnedIds = new Set(spawns.map((s) => s.agentId))\n const cancelledIds = new Set(\n cancels.filter((c) => spawnedIds.has(c.agentId)).map((c) => c.agentId),\n )\n const startedAt = main.firstAt\n const completedAt = main.lastAt\n\n const journalLines: string[] = [\n line({\n kind: 'spawned',\n id: sessionId,\n parent: null,\n label: `session:${sessionId}`,\n role: 'supervisor',\n at: startedAt,\n }),\n ]\n for (const s of spawns) {\n journalLines.push(\n line({\n kind: 'spawned',\n id: s.agentId,\n parent: s.parentId,\n label: s.label,\n role: 'worker',\n at: s.at,\n }),\n )\n }\n\n // Only the LAST notification per agent is its settle; an earlier one is a stop\n // the supervisor resumed from, which the steer count already records.\n const lastNotification = new Map<string, TaskNotification>()\n for (const n of settles) {\n if (!spawnedIds.has(n.taskId)) continue\n lastNotification.set(n.taskId, n)\n }\n for (const [agentId, n] of lastNotification) {\n if (cancelledIds.has(agentId)) continue\n journalLines.push(\n line({\n kind: 'settled',\n id: agentId,\n status: n.status,\n verdict: n.summary,\n at: n.at,\n // No `spent` key: Claude Code prices nothing, and a zeroed spend object\n // would read as a $0 worker. `limits.spendUsd` carries the reason.\n }),\n )\n }\n // One cancel per agent: Claude Code can emit a stop then a retry-stop for the\n // same agentId, and each raw entry would otherwise mint a duplicate `cancelled`\n // line that double-counts in `workersCancelled`. Keep the last, mirroring the\n // last-notification dedup the settle path already does.\n const lastCancel = new Map<string, { agentId: string; at: string | null }>()\n for (const c of cancels) {\n if (!spawnedIds.has(c.agentId)) continue\n lastCancel.set(c.agentId, c)\n }\n for (const c of lastCancel.values()) {\n journalLines.push(\n line({ kind: 'cancelled', id: c.agentId, reason: 'stopped by supervisor', at: c.at }),\n )\n }\n // `metered` carries the brain's own inference. The token counts are real; the\n // usd stays absent and `limits.spendUsd` explains why.\n if (\n mainTranscript.gaps.length === 0 &&\n mainTranscript.usage.tokensIn !== null &&\n mainTranscript.usage.tokensOut !== null &&\n mainTranscript.usage.cacheRead !== null &&\n mainTranscript.usage.cacheWrite !== null\n ) {\n journalLines.push(\n line({\n kind: 'metered',\n id: sessionId,\n spend: {\n tokens: {\n input: mainTranscript.usage.tokensIn,\n output: mainTranscript.usage.tokensOut,\n cacheRead: mainTranscript.usage.cacheRead,\n cacheWrite: mainTranscript.usage.cacheWrite,\n },\n },\n at: completedAt,\n }),\n )\n }\n\n const settleAtByAgent = new Map(\n [...lastNotification.entries()].map(([id, n]) => [id, n.at] as const),\n )\n const spawnAtByAgent = new Map(spawns.map((s) => [s.agentId, s.at] as const))\n\n const workers: WorkerLogSource[] = []\n for (const spawn of spawns) {\n const { agentId, label } = spawn\n const events: string[] = []\n const inbox: string[] = []\n const child = childByAgentId.get(agentId) ?? null\n const startAt = child?.firstAt ?? spawnAtByAgent.get(agentId) ?? null\n const endAt = settleAtByAgent.get(agentId) ?? child?.lastAt ?? null\n if (startAt !== null) events.push(line({ kind: 'started', label, at: startAt, agentId }))\n for (const steer of steersByTarget.get(agentId) ?? []) {\n inbox.push(line({ id: steer.requestId, at: steer.at, worker: label, message: 'steer' }))\n events.push(\n line({\n kind: 'message',\n label,\n direction: 'down',\n at: steer.at,\n requestId: steer.requestId,\n delivered: steer.delivered,\n }),\n )\n }\n if (endAt !== null) {\n events.push(\n line({\n kind: 'finished',\n label,\n at: endAt,\n agentId,\n // No `passed` / `patchBytes`: this harness has neither. Emitting\n // `passed: false` here would invent a failed worker.\n // `evidence` is the child's closing message — what it handed back.\n ...(child?.finalReport === null || child?.finalReport === undefined\n ? {}\n : { evidence: child.finalReport }),\n }),\n )\n }\n workers.push({\n workerId: agentId,\n label,\n events: events.length === 0 ? '' : `${events.join('\\n')}\\n`,\n inbox: inbox.length === 0 ? '' : `${inbox.join('\\n')}\\n`,\n patchBytes: null,\n transcriptRef: child?.path ?? null,\n patchPath: null,\n tokensIn: child?.tokensIn ?? null,\n tokensOut: child?.tokensOut ?? null,\n cacheRead: child?.cacheRead ?? null,\n cacheWrite: child?.cacheWrite ?? null,\n })\n }\n\n const joined = children.length\n const missingChildren = spawns.filter((spawn) => !childByAgentId.has(spawn.agentId)).length\n const incompleteChildren = children.filter(\n (child) =>\n child.gaps.length > 0 ||\n child.tokensIn === null ||\n child.tokensOut === null ||\n child.cacheRead === null ||\n child.cacheWrite === null,\n ).length\n const harnessMissingReason =\n subagentsDir === null\n ? 'subagent transcript join disabled'\n : joined === 0\n ? `no subagent transcripts under ${subagentsDir}`\n : missingChildren > 0\n ? `${missingChildren}/${spawns.length} spawned agents have no retained transcript under ${subagentsDir}`\n : incompleteChildren > 0\n ? `${incompleteChildren}/${joined} subagent transcripts have malformed lines or unknown usage`\n : null\n const harnessWorkerTokens =\n joined === 0 || incompleteChildren > 0\n ? null\n : {\n store: 'claude-code subagent transcripts',\n sessions: joined,\n input: children.reduce((a, child) => a + (child.tokensIn ?? 0), 0),\n output: children.reduce((a, child) => a + (child.tokensOut ?? 0), 0),\n cacheRead: children.reduce((a, child) => a + (child.cacheRead ?? 0), 0),\n cacheWrite: children.reduce((a, child) => a + (child.cacheWrite ?? 0), 0),\n }\n\n const liveWorkers = spawns.filter(\n (s) => !lastNotification.has(s.agentId) && !cancelledIds.has(s.agentId),\n ).length\n const state = JSON.stringify({\n id: sessionId,\n // Derived, not asserted: a spawned agent with no notification and no stop\n // is still running, which is exactly what a live transcript looks like.\n status: liveWorkers > 0 ? 'running' : 'idle',\n startedAt,\n completedAt,\n result: { delivered: null },\n })\n\n return {\n runRef,\n instanceId: opts.instanceId ?? sessionId,\n arm: opts.arm ?? null,\n supRunDir: subagentsDir,\n journal: `${journalLines.join('\\n')}\\n`,\n brainLog: null,\n state,\n progress: null,\n workers,\n workersMissingReason: null,\n result: null,\n judge: null,\n judgeSource: null,\n patch: null,\n driverLog: null,\n harnessWorkerTokens,\n harnessMissingReason,\n limits: {\n ...limits,\n managerTokens:\n mainTranscript.gaps.length > 0\n ? `main transcript has ${mainTranscript.gaps.length} parse or usage gaps`\n : null,\n workerTokens: spawns.length === 0 ? null : harnessMissingReason,\n deliverables: NO_DELIVERABLES,\n },\n rootTranscriptRef: opts.transcriptPath,\n traceCommand,\n }\n}\n\n/** A `SupervisorRunReader` over a Claude Code session — the same contract Runtime implements. */\nexport function claudeCodeSupervisorRunReader(opts: ClaudeCodeReaderOptions): SupervisorRunReader {\n return {\n runRef: opts.runRef ?? opts.transcriptPath,\n read: () => readClaudeCodeSupervisorRun(opts),\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { O as TraceAnalysisStore } from "./types-CeDfCRXp.js";
|
|
2
|
-
import { h as TraceAnalysisToolDescriptor } from "./engine-
|
|
2
|
+
import { h as TraceAnalysisToolDescriptor } from "./engine-neXmlmTu.js";
|
|
3
3
|
//#region src/analyst/tool-groups.d.ts
|
|
4
4
|
/** Named tool sets. Kinds pass `tools: TRACE_TOOL_GROUPS.failureForensics` etc. */
|
|
5
5
|
type TraceToolGroupName =
|
|
@@ -25,4 +25,4 @@ type TraceToolGroupName =
|
|
|
25
25
|
declare function buildTraceToolsForGroup(group: TraceToolGroupName, store: TraceAnalysisStore): TraceAnalysisToolDescriptor[];
|
|
26
26
|
//#endregion
|
|
27
27
|
export { buildTraceToolsForGroup as n, TraceToolGroupName as t };
|
|
28
|
-
//# sourceMappingURL=tool-groups-
|
|
28
|
+
//# sourceMappingURL=tool-groups-V23aGP_g.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-groups-V23aGP_g.d.ts","names":[],"sources":["../src/analyst/tool-groups.ts"],"mappings":";;;;KAmBY;;;;;;;;;;;;;;;;;;;;iBAyDI,wBACd,OAAO,oBACP,OAAO,qBACN"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as CostLedgerHandle } from "./cost-ledger-DbQdN3nO.js";
|
|
2
2
|
import { O as TraceAnalysisStore } from "./types-CeDfCRXp.js";
|
|
3
|
-
import { a as TraceAnalystLimits, l as RawAnalystFinding, n as TraceAnalysisEngine } from "./engine-
|
|
3
|
+
import { a as TraceAnalystLimits, l as RawAnalystFinding, n as TraceAnalysisEngine } from "./engine-neXmlmTu.js";
|
|
4
4
|
//#region src/analyst/trace-questions.d.ts
|
|
5
5
|
/** One question to ask of the store. */
|
|
6
6
|
interface TraceQuestionSpec {
|
|
@@ -65,4 +65,4 @@ declare function askTraceQuestions(opts: AskTraceQuestionsOptions): Promise<Trac
|
|
|
65
65
|
declare function citedSpansOnly(store: TraceAnalysisStore, allowed: ReadonlyMap<string, ReadonlySet<string>>): TraceAnalysisStore;
|
|
66
66
|
//#endregion
|
|
67
67
|
export { askTraceQuestions as a, VerifiedTraceFinding as i, TraceQuestionOutcome as n, citedSpansOnly as o, TraceQuestionSpec as r, AskTraceQuestionsOptions as t };
|
|
68
|
-
//# sourceMappingURL=trace-questions-
|
|
68
|
+
//# sourceMappingURL=trace-questions-B-Wf0W3Q.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-questions-
|
|
1
|
+
{"version":3,"file":"trace-questions-B-Wf0W3Q.d.ts","names":[],"sources":["../src/analyst/trace-questions.ts"],"mappings":";;;;;UA6BiB;;WAEN;WACA;;WAEA;;UAGM;WACN,oBAAoB;WACpB,OAAO;WACP,QAAQ;;WAER,YAAY;;WAEZ;;WAEA;;WAEA;;WAEA;;WAEA;WACA,SAAS,QAAQ;WACjB,SAAS;WACT,OAAO,iBAAiB,SAAS;;;UAI3B;WACN,SAAS;;WAET;;WAEA;;WAEA;;UAGM;WACN;WACA;WACA;WACA;;WAEA;WACA,mBAAmB;;WAEnB;WACA;;;;;;;iBAyBW,kBACpB,MAAM,2BACL,QAAQ;;;;;iBA2JK,eACd,OAAO,oBACP,SAAS,oBAAoB,uBAC5B"}
|
|
@@ -2,7 +2,7 @@ import { r as CaptureIntegrityError } from "../errors-DEE6u6ot.js";
|
|
|
2
2
|
import { b as CustomTokenPricing, c as CostLedgerHandle, p as CostProvenance } from "../cost-ledger-DbQdN3nO.js";
|
|
3
3
|
import { d as RunTokenUsage } from "../run-record-DF-fuu31.js";
|
|
4
4
|
import { t as DefaultVerdict } from "../verdict-E4eRNf7-.js";
|
|
5
|
-
import { a as TraceAnalystLimits, n as TraceAnalysisEngine } from "../engine-
|
|
5
|
+
import { a as TraceAnalystLimits, n as TraceAnalysisEngine } from "../engine-neXmlmTu.js";
|
|
6
6
|
import { t as PrimeBridgeTransport } from "../prime-bridge-transport-6feEglLf.js";
|
|
7
7
|
import { a as RecordedTrajectoryStep, h as isRecordedTimeout } from "../steps-Bg5-KVx1.js";
|
|
8
8
|
//#region src/trace-repair/mini-swe-scaffold.d.ts
|
package/dist/traces.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ import { a as RunRecord, c as RunSplitTag, d as RunTokenUsage, u as RunTerminalO
|
|
|
4
4
|
import { A as DEFAULT_TRACE_ANALYST_BUDGETS, B as TraceAnalystSpan, C as BoundedTraceAnalysisStoreOptions, D as TRACE_ANALYSIS_LIMITS, E as SpanSourceReader, F as SearchTraceResult, G as ViewTraceOversized, H as TraceAnalystSpanStatus, I as SpanMatchRecord, K as ViewTraceResult, L as TRACE_ANALYST_TRUNCATION_MARKER_PREFIX, M as ErrorCluster, N as QueryTracesPage, O as TraceAnalysisStore, P as SearchSpanResult, R as TraceAnalystByteBudgets, S as createBoundedTraceAnalysisStore, T as ReadSpanSourceResult, U as TraceAnalystTraceSummary, V as TraceAnalystSpanKind, W as ViewSpansResult, j as DatasetOverview, k as TraceAnalysisStoreContext, w as ReadSpanSourceInput, z as TraceAnalystFilters } from "./types-CeDfCRXp.js";
|
|
5
5
|
import { $ as NoopRawProviderSink, Q as InMemoryRawProviderSinkOptions, X as FileSystemRawProviderSinkOptions, Y as FileSystemRawProviderSink, Z as InMemoryRawProviderSink, at as defaultProviderRedactor, et as ProviderRedactor, it as RawProviderSinkFilter, nt as RawProviderEvent, ot as providerFromBaseUrl, rt as RawProviderSink, tt as RawProviderDirection } from "./types-C0bWoSKC.js";
|
|
6
6
|
import { a as RunFilter, i as InMemoryTraceStore, n as FileSystemTraceStore, o as SpanFilter, r as FileSystemTraceStoreOptions, s as TraceStore, t as EventFilter } from "./store-C4avFjIi.js";
|
|
7
|
-
import { _ as buildTraceAnalysisToolDescriptors, g as UNTRUSTED_TRACE_TEXT, h as TraceAnalysisToolDescriptor, m as TRACE_ANALYST_TOOL_NAMESPACE, p as BuildTraceAnalysisToolsOptions, v as traceAnalystFunctionGroup } from "./engine-
|
|
7
|
+
import { _ as buildTraceAnalysisToolDescriptors, g as UNTRUSTED_TRACE_TEXT, h as TraceAnalysisToolDescriptor, m as TRACE_ANALYST_TOOL_NAMESPACE, p as BuildTraceAnalysisToolsOptions, v as traceAnalystFunctionGroup } from "./engine-neXmlmTu.js";
|
|
8
8
|
import { a as SpanHandle, i as RunCompleteHookContext, n as CaptureWrite, o as TraceEmitter, r as RunCompleteHook, s as TraceEmitterOptions, t as CaptureErrorHandler } from "./emitter-HcCmFQl_.js";
|
|
9
9
|
import { S as shareAllowed, _ as emptyRedactionReport, a as RedactionFinding, b as redactForShare, c as SafetyCategory, d as ShareSafetyVerdict, f as assessShareSafety, g as detectPersonalData, h as detectCredential, i as RedactOptions, l as ShareSafetyFinding, m as combineVerdicts, n as REDACTION_PROFILES, o as RedactionProfile, p as classifyKey, r as REDACTION_VERSION, s as RedactionReport, t as AssessOptions, u as ShareSafetyStatus, v as normalizeKey, x as redactText, y as redact } from "./redact-Cveoq6fJ.js";
|
|
10
10
|
import { C as TOOL_LATENCY_MS, D as asNumber, E as applyLlmSpanOtlpAttributes, O as contextInputTokens, S as TOOL_ARGS_CAPTURED, T as TOOL_NAME_ATTR_KEYS, _ as LlmSpanOtlpInput, a as LLM_CACHE_WRITE_TOKEN_ATTR_KEYS, b as RUN_COST_ATTR_KEYS, c as LLM_COST_USD, d as LLM_MODEL_ATTR_KEYS, f as LLM_MODEL_NAME, g as LLM_REASONING_TOKEN_ATTR_KEYS, h as LLM_REASONING_TOKENS, i as LLM_CACHE_WRITE_TOKENS, k as firstNumberAttr, l as LLM_INPUT_TOKENS, m as LLM_OUTPUT_TOKEN_ATTR_KEYS, n as LLM_CACHED_TOKENS, o as LLM_CONTEXT_TOKENS, p as LLM_OUTPUT_TOKENS, r as LLM_CACHED_TOKEN_ATTR_KEYS, s as LLM_COST_ATTR_KEYS, t as INPUT_VALUE, u as LLM_INPUT_TOKEN_ATTR_KEYS, v as OPENINFERENCE_SPAN_KIND, w as TOOL_NAME, x as SPAN_KIND_ATTR_KEYS, y as OUTPUT_VALUE } from "./attribute-vocabulary-CcXqHODT.js";
|
|
11
|
-
import { A as AnalyzeTracesInput, B as CaptureFetchContext, C as inferDomainKeywords, D as planTraceInsightQuestions, E as isTraceInsightEvidence, F as OTEL_AGENT_EVAL_SCOPE, G as SseUsageMode, H as captureFetchToRawSink, I as OtlpExport, J as extractUsageFromSse, K as extractUsage, L as OtlpResourceSpans, M as AnalyzeTracesResult, N as analyzeTraces, O as scoreTraceInsightReadiness, P as OtlpFlatLine, R as OtlpSpan, S as domainEvidencePattern, T as isTraceInsightAttribution, U as ExtractUsageFromSseOptions, V as CaptureFetchOptions, W as ExtractedUsage, _ as TraceInsightTask, a as ToolSpansToTraceAnalysisStoreOptions, b as defaultTraceInsightPanel, c as TraceInsightContext, d as TraceInsightPanelRole, f as TraceInsightPromptInput, g as TraceInsightSuite, h as TraceInsightReadiness, i as OtlpFileTraceStoreOptions, j as AnalyzeTracesOptions, k as tokenizeDomainWords, l as TraceInsightEvidence, m as TraceInsightQuestion, n as toolSpansToTraceAnalysisStore, o as otlpTextToTraceAnalysisStore, p as TraceInsightQualityGate, q as extractUsageFromResponse, r as OtlpFileTraceStore, s as TraceInsightAttribution, t as ToolTraceMissingError, u as TraceInsightFinding, v as buildTraceInsightContext, w as isTraceInsightArtifact, x as describeTraceInsightScope, y as buildTraceInsightPrompt, z as exportRunAsOtlp } from "./store-tool-spans-
|
|
11
|
+
import { A as AnalyzeTracesInput, B as CaptureFetchContext, C as inferDomainKeywords, D as planTraceInsightQuestions, E as isTraceInsightEvidence, F as OTEL_AGENT_EVAL_SCOPE, G as SseUsageMode, H as captureFetchToRawSink, I as OtlpExport, J as extractUsageFromSse, K as extractUsage, L as OtlpResourceSpans, M as AnalyzeTracesResult, N as analyzeTraces, O as scoreTraceInsightReadiness, P as OtlpFlatLine, R as OtlpSpan, S as domainEvidencePattern, T as isTraceInsightAttribution, U as ExtractUsageFromSseOptions, V as CaptureFetchOptions, W as ExtractedUsage, _ as TraceInsightTask, a as ToolSpansToTraceAnalysisStoreOptions, b as defaultTraceInsightPanel, c as TraceInsightContext, d as TraceInsightPanelRole, f as TraceInsightPromptInput, g as TraceInsightSuite, h as TraceInsightReadiness, i as OtlpFileTraceStoreOptions, j as AnalyzeTracesOptions, k as tokenizeDomainWords, l as TraceInsightEvidence, m as TraceInsightQuestion, n as toolSpansToTraceAnalysisStore, o as otlpTextToTraceAnalysisStore, p as TraceInsightQualityGate, q as extractUsageFromResponse, r as OtlpFileTraceStore, s as TraceInsightAttribution, t as ToolTraceMissingError, u as TraceInsightFinding, v as buildTraceInsightContext, w as isTraceInsightArtifact, x as describeTraceInsightScope, y as buildTraceInsightPrompt, z as exportRunAsOtlp } from "./store-tool-spans-CKRw7JHa.js";
|
|
12
12
|
import { a as RunIntegrityReport, i as RunIntegrityIssueCode, n as RunIntegrityExpectations, o as assertRunCaptured, r as RunIntegrityIssue, s as throwIfRunIncomplete, t as RunIntegrityError } from "./integrity-CaeNeusS.js";
|
|
13
13
|
import { a as groupBy, c as judgeSpans, d as runMetricExtractor, f as runsForScenario, i as argHash, l as llmSpans, n as RunMetric, o as hasCapturedToolArgs, p as toolSpans, r as aggregateLlm, s as isRunMetric, t as RUN_METRICS, u as runFailureClass } from "./query-DBUQhehH.js";
|
|
14
14
|
import { SpanKind as SpanKind$1 } from "@tangle-network/agent-trace-contract";
|
|
@@ -5,7 +5,7 @@ import { M as LlmCallMetadata } from "./types-C0bWoSKC.js";
|
|
|
5
5
|
import { t as SeriesDistribution } from "./descriptive-B2iPaT9J.js";
|
|
6
6
|
import { A as SearchLedgerHash, G as SearchSplit, I as SearchNodeStatus, L as SearchOpenedEvent, N as SearchNodeDecision, O as SearchLedgerEntry, P as SearchNodeRef, Q as SearchTaskOutcome, R as SearchOperationKind, U as SearchReservation, Z as SearchTask, b as SearchClosedEvent, d as SearchCellCancelledEvent, i as SearchArtifactRef, l as SearchCandidateSurface, o as SearchAudit, p as SearchCellStage, t as NodeEstimate, w as SearchEdgeRecordedEvent, z as SearchOperationRecordedEvent } from "./search-ledger-types-p2xKfiDJ.js";
|
|
7
7
|
import { p as LedgerProjector } from "./index-Bj96W0jZ.js";
|
|
8
|
-
import { i as RolloutSearchLineage } from "./mint-
|
|
8
|
+
import { i as RolloutSearchLineage } from "./mint-BFTrlq4t.js";
|
|
9
9
|
//#region src/campaign/search-state.d.ts
|
|
10
10
|
/** Deterministic node id: identical content in one search is one node. */
|
|
11
11
|
declare function searchNodeId(searchId: string, artifactDigest: string): string;
|
|
@@ -1009,4 +1009,4 @@ interface CampaignResult<TArtifact = unknown, TScenario extends Scenario = Scena
|
|
|
1009
1009
|
}
|
|
1010
1010
|
//#endregion
|
|
1011
1011
|
export { SearchNode as $, LabeledScenarioWrite as A, ScoredSurfaceOutcome as B, JudgeDimension as C, LabeledScenarioSampleArgs as D, LabeledScenarioRecord as E, ProposeContext as F, labelTrustRank as G, SurfaceProposer as H, ProposedCandidate as I, renderSearchSummary as J, SearchProposerView as K, RedactionStatus as L, OptimizerConfig as M, ParetoParent as N, LabeledScenarioSource as O, ProposalTrackContext as P, SearchDecisionRecord as Q, Scenario as R, JudgeConfig as S, LabelTrust as T, TraceSpan as U, SessionScript as V, isProposedCandidate as W, SearchCell as X, searchProposerView as Y, SearchCompletion as Z, GateDecision as _, CampaignResult as a, SearchUnitScore as at, GenerationRecord as b, CampaignTraceWriter as c, searchTaskSetDigest as ct, DispatchContext as d, SearchOperation as et, DispatchFn as f, GateContribution as g, GateContext as h, CampaignCostMeter as i, SearchStateView as it, MutableSurface as j, LabeledScenarioStore as k, CodeSurface as l, searchUnitScores as lt, GateCheckStatus as m, CampaignArtifactWriter as n, SearchSpend as nt, CampaignScenarioIdentity as o, searchCellId as ot, Gate as p, SearchSummaryOptions as q, CampaignCellResult as r, SearchState as rt, CampaignTokenUsage as s, searchNodeId as st, CampaignAggregates as t, SearchScoredCell as tt, ComponentSurface as u, GateResult as v, JudgeScore as w, JudgeAggregate as x, GenerationCandidate as y, ScenarioAggregate as z };
|
|
1012
|
-
//# sourceMappingURL=types-
|
|
1012
|
+
//# sourceMappingURL=types-BR1LLIxm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-BR1LLIxm.d.ts","names":[],"sources":["../src/campaign/search-state.ts","../src/campaign/search-summary.ts","../src/campaign/types.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as RunSplitTag } from "./run-record-DF-fuu31.js";
|
|
2
|
-
import { R as Scenario, d as DispatchContext } from "./types-
|
|
2
|
+
import { R as Scenario, d as DispatchContext } from "./types-BR1LLIxm.js";
|
|
3
3
|
//#region src/benchmarks/types.d.ts
|
|
4
4
|
type BenchmarkTaskKind = 'retrieval' | 'rag-answer' | 'hallucination' | 'kb-improvement' | 'routing' | 'custom';
|
|
5
5
|
type BenchmarkFamily = 'beir' | 'mteb-retrieval' | 'msmarco' | 'trec-dl' | 'miracl' | 'lotte' | 'bright' | 'crag' | 'hotpotqa' | 'kilt' | 'ragtruth' | 'faithbench' | 'first-party' | 'custom';
|
|
@@ -99,4 +99,4 @@ declare const BENCHMARK_SPLIT_SEED = "agent-eval-v1";
|
|
|
99
99
|
declare function deterministicSplit(itemId: string, seed?: string): RunSplitTag;
|
|
100
100
|
//#endregion
|
|
101
101
|
export { BenchmarkFamily as a, BenchmarkSource as c, BenchmarkEvaluation as i, BenchmarkTaskKind as l, BenchmarkAdapter as n, BenchmarkResponder as o, BenchmarkDatasetItem as r, BenchmarkScenario as s, BENCHMARK_SPLIT_SEED as t, deterministicSplit as u };
|
|
102
|
-
//# sourceMappingURL=types-
|
|
102
|
+
//# sourceMappingURL=types-BbiT5NPH.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-BbiT5NPH.d.ts","names":[],"sources":["../src/benchmarks/types.ts"],"mappings":";;;KASY;KAQA;UAgBK,qBAAqB;;;EAGpC;;EAEA,SAAS;;EAET,QAAQ;;EAER,SAAS;;EAET,WAAW;;EAEX;;EAEA,SAAS;EACT,WAAW;;UAGI;;;;EAIf;;EAEA;;EAEA,aAAa;;;EAGb,KAAK;EACL;;UAGe;EACf;EACA;EACA;;EAEA;EACA;EACA;;EAEA;;;;;EAKA;;;UAQe,iBAAiB,kBAAkB,oBAAoB;;EAEtE;EACA,SAAS;EACT,WAAW;EACX;EACA,SAAS;EACT;;;;;EAKA,YAAY,OAAO,cAAc,QAAQ,qBAAqB;;EAE9D,SAAS,MAAM,qBAAqB,WAAW,UAAU,YAAY,QAAQ;;;;EAI7E,YAAY,iBAAiB;;UAGd,kBAAkB,4BAA4B;EAC7D;EACA;EACA,QAAQ;EACR,UAAU;EACV,UAAU;EACV,MAAM,qBAAqB;;KAGjB,mBAAmB,oBAAoB,uBAAuB;EACxE,UAAU,kBAAkB;EAC5B,MAAM,qBAAqB;EAC3B,SAAS;MACL,QAAQ,aAAa;;;cAoBd;;;;;;;;;iBAUG,mBACd,gBACA,gBACC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as SeriesDistribution } from "./descriptive-B2iPaT9J.js";
|
|
2
|
-
import {
|
|
2
|
+
import { h as RolloutLine } from "./schema-Bp8S20Ii.js";
|
|
3
3
|
//#region src/supervisor-run/types.d.ts
|
|
4
4
|
/** A metric that could not be computed, with the reason its artifact was missing. */
|
|
5
5
|
interface Unavailable {
|
|
@@ -546,4 +546,4 @@ interface SupervisorRunTreeGap {
|
|
|
546
546
|
}
|
|
547
547
|
//#endregion
|
|
548
548
|
export { WallDistribution as A, SupervisorRunSources as C, SupervisorStatusSource as D, SupervisorRunTreeGapCode as E, showMeasured as F, unavailable as I, WorkerNativeSession as M, WorkerTurnCoverage as N, TerminalFailure as O, isUnavailable as P, SupervisorRunRollup as S, SupervisorRunTreeGap as T, SpendMeasurements as _, NamedResourceReceipt as a, SupervisorRunReader as b, PatchStats as c, RoleSpend as d, RollupCellRow as f, SpendMeasurement as g, SourceLimits as h, NO_SOURCE_LIMITS as i, WorkerLogSource as j, Unavailable as k, PerWorkerRow as l, SUPERVISOR_RUN_SCHEMA as m, EconomicsMetrics as n, OrchestrationMetrics as o, SUPERVISOR_RUN_ROLLUP_SCHEMA as p, Measured as r, OutcomeMetrics as s, DecisionMetrics as t, ResourceSpendRecord as u, SteerBreakdown as v, SupervisorRunTree as w, SupervisorRunReport as x, SupervisorRunNodeRole as y };
|
|
549
|
-
//# sourceMappingURL=types-
|
|
549
|
+
//# sourceMappingURL=types-DUlbOCwL.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-DUlbOCwL.d.ts","names":[],"sources":["../src/supervisor-run/types.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Campaign coverage
|
|
2
|
+
|
|
3
|
+
Import `campaignCoverage` and `CampaignCoverage` from `@tangle-network/agent-eval/campaign`. This is the same implementation used by campaign evidence and optimization; product adapters must not copy a weaker coverage loop.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { campaignCoverage } from '@tangle-network/agent-eval/campaign'
|
|
7
|
+
|
|
8
|
+
const coverage = campaignCoverage(campaign.cells, scenarios, reps, true)
|
|
9
|
+
if (!coverage.complete) {
|
|
10
|
+
console.error(coverage.unscorableCells)
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The intended scenarios and replicate count establish the denominator. The result identifies missing, duplicate, unexpected and incorrectly identified cells; absent artifacts; execution failures; failed or incomplete judge panels; and nonfinite scores. With `requireJudgeScore: true`, every intended cell needs a successful finite judgment.
|
|
15
|
+
|
|
16
|
+
Coverage is not quality, provenance, cost completeness, or permission to promote. A failed task with a captured artifact and a valid zero score may be fully measured. A missing measurement is not a zero. Product adapters remain responsible for their named judge, required score dimensions, paired seeds, authenticated outcomes, and complete observed costs.
|
|
17
|
+
|
|
18
|
+
When comparing arms from one campaign, preserve the original physical execution cell identity separately and project each arm to the intended task/replicate identities before checking coverage. Do not change the underlying retained campaign.
|
|
19
|
+
|
|
20
|
+
Verification uses the existing `src/campaign/coverage.test.ts`, repository typecheck/build, and packed-package checks. This export adds no evaluator, execution dependency, scheduler, or new statistics. Consumers need the published release containing this export; a source branch is not a registry release.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Recorded Jev evidence and live requests
|
|
2
|
+
|
|
3
|
+
The existing `/jev/protocol` entrypoint now exports `parseJevRecordedRequest` and its recorded request/question types. It reads historical Tangle observations containing null state or score levels without rewriting them. The same `parseJevResult` validates their answers, distributions, usage and original rubric. It does not certify the source of a saved record.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import {
|
|
7
|
+
parseJevRecordedRequest,
|
|
8
|
+
parseJevRequest,
|
|
9
|
+
parseJevResult,
|
|
10
|
+
} from '@tangle-network/agent-eval/jev/protocol'
|
|
11
|
+
|
|
12
|
+
const request = parseJevRecordedRequest(observation.request)
|
|
13
|
+
const result = parseJevResult(observation.result, request)
|
|
14
|
+
// Inspect or re-score result without model execution.
|
|
15
|
+
|
|
16
|
+
// Re-execution is different: it must meet today's provider contract.
|
|
17
|
+
const dispatchable = parseJevRequest(request) // rejects a legacy null state/score level
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
No live validation is relaxed. The shared implementation has one question/result grammar and two explicit admission policies. New inference uses `parseJevRequest`; archive readers use `parseJevRecordedRequest`. Do not replace null with empty text in persisted evidence or hash a rewritten surrogate as the original request. Native JSON order, extension metadata and recorded decimal receipts remain caller-owned and unchanged.
|
|
21
|
+
|
|
22
|
+
Consumer order: publish the actual package version containing this export, update affected dependency pins/lockfiles, then replace archive-only calls to the live request validator. Do not invent a version or install an unpublished source import. Preserve output-vs-text consistency checks, tenant authorization, served-model policy, receipt ownership and the existing action archive. A historical decoder is not permission to repeat paid work.
|
|
23
|
+
|
|
24
|
+
`tests/jev-recorded-request.test.ts` writes an observation to disk, reads it twice through the real parsers, rejects contradictory results, and confirms that the live path still rejects historical-only requests. No provider, database, scheduler, migration or new package dependency is added.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Inspect recorded Jev evidence without new inference
|
|
2
|
+
|
|
3
|
+
The historical decoder from #897 is already the protocol owner. This example
|
|
4
|
+
uses that implementation; it adds no parser, SDK, ledger, database or replay
|
|
5
|
+
policy.
|
|
6
|
+
|
|
7
|
+
From a repository checkout with dependencies installed:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
pnpm exec tsx examples/jev-replay.ts request.json response.json
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Supply the original native request and response as separate JSON files. The
|
|
14
|
+
command validates the saved request, then checks the response's question names,
|
|
15
|
+
answer kinds, distributions, rubric legend and usage against it. Successful
|
|
16
|
+
output is the preserved response serialized as JSON, including extension
|
|
17
|
+
metadata such as generation IDs and decimal receipt strings. Neither input file
|
|
18
|
+
is rewritten. This is offline inspection, not replay of a paid provider request.
|
|
19
|
+
|
|
20
|
+
Historical null state and null score levels remain readable through
|
|
21
|
+
`parseJevRecordedRequest`. They are still invalid for new paid calls through
|
|
22
|
+
`parseJevRequest`. Do not cast a historical request to the live type, or change
|
|
23
|
+
its stored rubric just to satisfy today's admission schema.
|
|
24
|
+
|
|
25
|
+
A mismatch, unreadable file or malformed record returns exit code 1 with a
|
|
26
|
+
redacted diagnostic. Incorrect command-line arguments return exit code 2. The
|
|
27
|
+
successful response may contain private trace evidence; select an appropriate
|
|
28
|
+
terminal or output destination and retain its existing access controls.
|
|
29
|
+
|
|
30
|
+
The same helper is importable from the example:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { inspectJevFiles } from './examples/jev-replay'
|
|
34
|
+
|
|
35
|
+
const observation = await inspectJevFiles('request.json', 'response.json')
|
|
36
|
+
// Apply an application-owned deterministic mapping to the retained answers.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Decoding does not authenticate the source, prove a model produced the result,
|
|
40
|
+
validate customer wallet settlement, authorize external actions, or grant
|
|
41
|
+
permission to issue another inference request. It also does not establish
|
|
42
|
+
served-model alias policy. Those decisions remain with the existing execution,
|
|
43
|
+
identity, billing and evidence owners. A different mapping may be evaluated
|
|
44
|
+
without paying for inference again; changed execution behavior needs its own
|
|
45
|
+
independent outcome check.
|
|
46
|
+
|
|
47
|
+
Run the normal example typecheck and existing recorded-protocol compatibility
|
|
48
|
+
suite before merge. The original implementation bundle recorded successful
|
|
49
|
+
execution against an archived fixture in a restored dependency tree; that is
|
|
50
|
+
not a replacement for current-head CI or live model-quality evidence.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Retained external dispatch
|
|
2
|
+
|
|
3
|
+
`createRetainedDispatch` from `@tangle-network/agent-eval/campaign` wraps an external dispatch. `runEval` remains the scheduler and measurement owner. Separate named allowances reserve development and audit calls; they are counts, not monetary receipts.
|
|
4
|
+
|
|
5
|
+
The owning durable Run binds authority, execution revision and receipt-decoder revision in `scope`. Record that a scope has started outside its local directory, then use `requireExisting: true` when recovering that scope. Complete directory loss must not be mistaken for a new allowance.
|
|
6
|
+
|
|
7
|
+
An immutable `dispatch-scope.json` binds the run scope and named limits.
|
|
8
|
+
Every history event is committed in two durable steps through the existing compare-and-append contract.
|
|
9
|
+
The event is appended to `dispatches.jsonl`, then `dispatch-anchor.jsonl` records the committed byte length and cumulative digest.
|
|
10
|
+
The digest covers the history header, which binds the anchor to the scope and limits.
|
|
11
|
+
An event takes effect only after its anchor entry is durable.
|
|
12
|
+
An external dispatch therefore cannot run before its `started` event is anchored.
|
|
13
|
+
Settlement cannot be replayed before its event is anchored.
|
|
14
|
+
|
|
15
|
+
On open and before every replay, history must match its durable high-water mark exactly.
|
|
16
|
+
Truncation below the anchor, including to a valid header-only journal, stops for reconciliation.
|
|
17
|
+
History that diverges from the anchor or extends beyond it also stops for reconciliation.
|
|
18
|
+
Committed allowances are not reset, no allowance is reissued, and no dispatch is repeated.
|
|
19
|
+
An unanchored suffix is never trusted or synthesized.
|
|
20
|
+
A crash between the journal and anchor appends also stops for reconciliation.
|
|
21
|
+
Missing, empty, torn, or changed history is refused.
|
|
22
|
+
History without its anchor is half-initialized or tampered, and no such state is cleared automatically.
|
|
23
|
+
A live instance also rechecks the anchored history before replay.
|
|
24
|
+
|
|
25
|
+
Concurrent processes use compare-and-append for each file.
|
|
26
|
+
A writer that loses the journal append race refreshes and retries against committed state.
|
|
27
|
+
A reader that lands inside another writer's two-step commit window fails closed.
|
|
28
|
+
Retry after the writer completes by constructing a new instance.
|
|
29
|
+
If the writer stopped before anchoring its event, reconcile the incomplete state before resuming.
|
|
30
|
+
Explicit measured failures can be retained.
|
|
31
|
+
An external throw or an unretained side effect remains `outcome_unknown` and keeps its reservation.
|
|
32
|
+
The existing retained-result reconciliation handles a result written before its settlement event.
|
|
33
|
+
|
|
34
|
+
Receipt parsing must preserve the canonical stored value. A different decoder cannot transform old evidence while keeping the original digest. This check is not proof that the external receipt is true; the caller still owns its provenance and authorization.
|
|
35
|
+
|
|
36
|
+
## Upgrading existing runs
|
|
37
|
+
|
|
38
|
+
Existing v1 directories without a scope anchor deliberately stop for reconciliation.
|
|
39
|
+
Directories with a scope anchor but no `dispatch-anchor.jsonl` also stop.
|
|
40
|
+
That state may be half-initialized, interrupted between the history and anchor appends, or tampered.
|
|
41
|
+
This release never synthesizes an anchor from potentially incomplete state.
|
|
42
|
+
Do not delete them, change their directory, or clear the owning Run's started marker to retry.
|
|
43
|
+
Drain existing runs with their pinned implementation, or have the authority owner reconcile their original history and evidence before migration.
|
|
44
|
+
|
|
45
|
+
A partially initialized scope also stops rather than assuming nothing ran. The durable owner can distinguish an initialization failure from an issued external dispatch using its own record.
|
|
46
|
+
|
|
47
|
+
This mechanism does not certify arbitrary storage rollback or corruption, globally exactly-once remote effects, financial settlement, or semantic correctness. An independent durable Run/fence and proper storage retention remain necessary.
|
|
48
|
+
|
|
49
|
+
## Executed checks
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
pnpm exec tsx scripts/prove-retained-dispatch.ts
|
|
53
|
+
pnpm exec tsx scripts/prove-retained-dispatch-integrity.ts
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The first maintained proof exercises contention, SIGKILL, failed dispatches, retained-result reconciliation and audit reservations. The second adds independent-process journal-loss, empty-history, header-only-truncation, whole-directory-loss, stale-live-instance and changed-decoder checks. Both perform real filesystem and child-process operations, with no provider calls.
|