@tangle-network/agent-runtime 2.3.14 → 3.0.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.
Files changed (78) hide show
  1. package/dist/{activation-B8dLwJj6.d.ts → activation-BzC4bbcR.d.ts} +2 -2
  2. package/dist/{activation-BzNeFJDB.js → activation-DJsJdvb7.js} +4 -4
  3. package/dist/{activation-BzNeFJDB.js.map → activation-DJsJdvb7.js.map} +1 -1
  4. package/dist/agent.d.ts +1 -1
  5. package/dist/agent.js +3 -3
  6. package/dist/{bundle-DhV73H6U.js → bundle-DYwJ3alD.js} +2 -2
  7. package/dist/{bundle-DhV73H6U.js.map → bundle-DYwJ3alD.js.map} +1 -1
  8. package/dist/candidate-execution/index.d.ts +3 -3
  9. package/dist/candidate-execution/index.js +5 -5
  10. package/dist/{coordination-manager-BluavEgY.js → coordination-manager-CXlabreV.js} +4 -4
  11. package/dist/{coordination-manager-BluavEgY.js.map → coordination-manager-CXlabreV.js.map} +1 -1
  12. package/dist/{delegate-Bzpvzgl_.js → delegate-DgMQo-K8.js} +2 -2
  13. package/dist/{delegate-Bzpvzgl_.js.map → delegate-DgMQo-K8.js.map} +1 -1
  14. package/dist/durable.d.ts +1 -1
  15. package/dist/durable.js +9 -9
  16. package/dist/{graph-DHjdkdcj.js → graph-DSVXDbSf.js} +7 -7
  17. package/dist/graph-DSVXDbSf.js.map +1 -0
  18. package/dist/{improve-D9A79N5a.js → improve-CMSrJ22U.js} +7 -7
  19. package/dist/{improve-D9A79N5a.js.map → improve-CMSrJ22U.js.map} +1 -1
  20. package/dist/index.d.ts +4 -4
  21. package/dist/index.js +10 -10
  22. package/dist/intelligence.d.ts +4 -4
  23. package/dist/intelligence.js +7 -7
  24. package/dist/kernel.d.ts +3 -3
  25. package/dist/kernel.js +12 -12
  26. package/dist/{loop-runner-D9fuOb69.d.ts → loop-runner-BU5HX1Y7.d.ts} +2 -2
  27. package/dist/{loop-runner-DqvZtCe5.js → loop-runner-De7RIY_2.js} +2 -2
  28. package/dist/{loop-runner-DqvZtCe5.js.map → loop-runner-De7RIY_2.js.map} +1 -1
  29. package/dist/loop-runner-bin.d.ts +1 -1
  30. package/dist/loop-runner-bin.js +1 -1
  31. package/dist/mcp/bin.js +3 -3
  32. package/dist/mcp/index.d.ts +1 -1
  33. package/dist/mcp/index.js +6 -6
  34. package/dist/{prepare-DrHOZFJy.js → prepare-BfaOus1-.js} +3 -3
  35. package/dist/{prepare-DrHOZFJy.js.map → prepare-BfaOus1-.js.map} +1 -1
  36. package/dist/{profile-BzzmKuIX.js → profile-CvucOo-Q.js} +2 -2
  37. package/dist/{profile-BzzmKuIX.js.map → profile-CvucOo-Q.js.map} +1 -1
  38. package/dist/profiles.d.ts +1 -1
  39. package/dist/{protected-model-port-IKqhTypD.d.ts → protected-model-port-DEsNIYi1.d.ts} +2 -2
  40. package/dist/{provision-supervisor-DP5U58V4.js → provision-supervisor-BoOIYwov.js} +5 -5
  41. package/dist/{provision-supervisor-DP5U58V4.js.map → provision-supervisor-BoOIYwov.js.map} +1 -1
  42. package/dist/{run-cancellation-BxoFCpJ_.js → run-cancellation-3tqWES3A.js} +2 -2
  43. package/dist/{run-cancellation-BxoFCpJ_.js.map → run-cancellation-3tqWES3A.js.map} +1 -1
  44. package/dist/{runtime-LY1ovtim.js → runtime-1dL7Te6f.js} +54 -30
  45. package/dist/runtime-1dL7Te6f.js.map +1 -0
  46. package/dist/{scope-DRaBilEX.js → scope-CwhYLg6s.js} +2550 -2487
  47. package/dist/scope-CwhYLg6s.js.map +1 -0
  48. package/dist/{search-executor-DLo_9jUv.js → search-executor-5d-avuUt.js} +4 -4
  49. package/dist/{search-executor-DLo_9jUv.js.map → search-executor-5d-avuUt.js.map} +1 -1
  50. package/dist/{server-CeQ2alK3.js → server-DtAPLLu3.js} +4 -4
  51. package/dist/{server-CeQ2alK3.js.map → server-DtAPLLu3.js.map} +1 -1
  52. package/dist/{structural-rollout-BIjjZ_XX.js → structural-rollout-Dk0NlRpZ.js} +4 -4
  53. package/dist/{structural-rollout-BIjjZ_XX.js.map → structural-rollout-Dk0NlRpZ.js.map} +1 -1
  54. package/dist/{supervise-BdAUXtjZ.js → supervise-DYtL1RvC.js} +6 -6
  55. package/dist/{supervise-BdAUXtjZ.js.map → supervise-DYtL1RvC.js.map} +1 -1
  56. package/dist/{supervision-discovery-Da5zebY2.js → supervision-discovery-EtxsGdsk.js} +3 -3
  57. package/dist/{supervision-discovery-Da5zebY2.js.map → supervision-discovery-EtxsGdsk.js.map} +1 -1
  58. package/dist/{supervisor-3JHXy3tz.js → supervisor-CORJv7-r.js} +222 -147
  59. package/dist/supervisor-CORJv7-r.js.map +1 -0
  60. package/dist/testing.d.ts +1 -1
  61. package/dist/testing.js +13 -13
  62. package/dist/{top-web-DK6lTMHG.js → top-web-B0a7QfaZ.js} +551 -149
  63. package/dist/top-web-B0a7QfaZ.js.map +1 -0
  64. package/dist/tui/bin.js +4 -3
  65. package/dist/tui/bin.js.map +1 -1
  66. package/dist/tui/index.d.ts +203 -3
  67. package/dist/tui/index.js +3 -3
  68. package/dist/{types-S3RbyJ4x.d.ts → types-QS0ItMiE.d.ts} +151 -21
  69. package/dist/{workspace-streams-Dep2L6XD.js → workspace-streams-COSTjQLW.js} +85 -88
  70. package/dist/workspace-streams-COSTjQLW.js.map +1 -0
  71. package/dist/{workspace-streams-Dq2Fzk3c.d.ts → workspace-streams-DbKiDOWA.d.ts} +9 -3
  72. package/package.json +2 -1
  73. package/dist/graph-DHjdkdcj.js.map +0 -1
  74. package/dist/runtime-LY1ovtim.js.map +0 -1
  75. package/dist/scope-DRaBilEX.js.map +0 -1
  76. package/dist/supervisor-3JHXy3tz.js.map +0 -1
  77. package/dist/top-web-DK6lTMHG.js.map +0 -1
  78. package/dist/workspace-streams-Dep2L6XD.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","names":[],"sources":["../../src/tui/top-frame.ts","../../src/tui/top-app.ts","../../src/tui/bin.ts"],"sourcesContent":["import { supervisorRunsRoot } from '../runtime/supervise/run-layout'\nimport {\n aggregateSnapshot,\n numberValue,\n parseSpend,\n parseTime,\n type SpendStats,\n type SupervisorView,\n type TopSnapshot,\n totalSpend,\n type WorkerView,\n} from './top-snapshot'\n\ninterface RenderOptions {\n readonly width?: number\n readonly height?: number\n readonly color?: boolean\n readonly selectedSupervisorId?: string\n readonly selectedWorkerId?: string\n readonly focus?: 'supervisors' | 'workers'\n readonly mode?: 'overview' | 'detail' | 'log'\n readonly notice?: string\n readonly steerInput?: {\n readonly active: boolean\n readonly value: string\n readonly workerLabel?: string\n }\n}\n\nexport interface RenderTarget {\n readonly row: number\n readonly kind: 'supervisor' | 'worker'\n readonly id: string\n readonly supervisorId?: string\n}\n\ninterface RenderedTopFrame {\n readonly frame: string\n readonly targets: RenderTarget[]\n}\n// Width accounting depends on stripping SGR sequences, which begin with a literal ESC. Matching\n// the control character is the point of an ANSI-aware renderer, not an accident.\n// biome-ignore lint/suspicious/noControlCharactersInRegex: SGR sequences begin with ESC\nconst ansiPattern = /\\x1b\\[[0-9;?]*[ -/]*[@-~]/g\n\nconst colors = {\n reset: '\\x1b[0m',\n dim: '\\x1b[2m',\n bold: '\\x1b[1m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n inverse: '\\x1b[7m',\n}\n\n/** Render one snapshot to an ANSI frame. Use this when nothing needs to be clickable. */\nexport function renderTopFrame(snapshot: TopSnapshot, options: RenderOptions = {}): string {\n return renderTopFrameWithLayout(snapshot, options).frame\n}\n\n/**\n * Render one snapshot, returning the frame together with the row→entity map a mouse click resolves\n * against. The layout is the only thing that knows which row is which run or worker, so emitting it\n * alongside the text is what keeps click handling out of the renderer.\n */\nexport function renderTopFrameWithLayout(\n snapshot: TopSnapshot,\n options: RenderOptions = {},\n): RenderedTopFrame {\n const width = Math.max(88, options.width ?? 128)\n const height = Math.max(24, options.height ?? 42)\n const color = options.color ?? false\n const focus = options.focus ?? 'supervisors'\n const mode = options.mode ?? 'overview'\n const selectedSupervisor = selectEntity(snapshot.supervisors, options.selectedSupervisorId)\n const selectedWorker = selectedSupervisor\n ? selectEntity(selectedSupervisor.workers, options.selectedWorkerId)\n : undefined\n const targets: RenderTarget[] = []\n const lines: string[] = []\n\n const push = (line = '', target?: Omit<RenderTarget, 'row'>) => {\n if (lines.length >= height) return\n if (target) targets.push({ row: lines.length, ...target })\n lines.push(fitAnsi(line, width))\n }\n\n const aggregate = aggregateSnapshot(snapshot)\n push(\n `${paint('SUPERVISOR TOP', 'bold', color)} ${paint(snapshot.root, 'dim', color)} ` +\n `runs ${aggregate.supervisors} workers ${aggregate.workers} live ${aggregate.running} ` +\n `done ${aggregate.done} down ${aggregate.down} ` +\n `${formatMoney(aggregate.usd, aggregate.usdKnown)} tok ${formatTokens(aggregate.tokensInput, aggregate.tokensKnown)}/${formatTokens(aggregate.tokensOutput, aggregate.tokensKnown)}`,\n )\n push(\n `${paint('keys', 'dim', color)} up/down select left/right run tab focus enter detail o overview l log s steer c cancel mouse q quit`,\n )\n if (options.notice) push(paint(options.notice, 'yellow', color))\n if (snapshot.completeness === 'partial')\n push(\n paint(\n `partial snapshot: ${snapshot.diagnostics.length} source${\n snapshot.diagnostics.length === 1 ? '' : 's'\n } skipped or truncated; runs loaded ${snapshot.loaded}/${snapshot.discovered}`,\n 'yellow',\n color,\n ),\n )\n if (options.steerInput?.active) push(renderSteerInput(options.steerInput, width, color))\n push(rule(width, color))\n\n if (snapshot.supervisors.length === 0) {\n if (snapshot.discovered > 0) {\n push(paint('NO READABLE SUPERVISORS', 'yellow', color))\n push(\n `${snapshot.discovered} run director${snapshot.discovered === 1 ? 'y' : 'ies'} found under ${supervisorRunsRoot(snapshot.root)}, none readable`,\n )\n } else {\n push(paint('NO SUPERVISORS', 'yellow', color))\n push(`No run state under ${supervisorRunsRoot(snapshot.root)}`)\n }\n push(\n `A run appears here once its driver writes state.json; re-point with: agent-runtime-top <root>`,\n )\n return { frame: `${lines.join('\\n')}\\n`, targets }\n }\n\n push(sectionTitle('SUPERVISORS', focus === 'supervisors', color))\n push(\n ` id status workers spend tok in/out latency task`,\n )\n for (const supervisor of snapshot.supervisors.slice(0, 9)) {\n const selected = supervisor.id === selectedSupervisor?.id\n const status = statusText(supervisor.status, color)\n const pointer = selected ? paint('>', 'cyan', color) : ' '\n const rowFocus = selected && focus === 'supervisors' ? 'inverse' : undefined\n const workerSummary = `${supervisor.totals.running}/${supervisor.totals.workers} live`\n const task = compact(supervisor.task, 34)\n const line =\n `${pointer} ${pad(supervisor.id, 21)} ${pad(status, 12)} ${pad(workerSummary, 13)} ` +\n `${pad(formatMoney(supervisor.totals.usd, supervisor.totals.usdKnown), 12)} ` +\n `${pad(`${formatTokens(supervisor.totals.tokensInput, supervisor.totals.tokensKnown)}/${formatTokens(supervisor.totals.tokensOutput, supervisor.totals.tokensKnown)}`, 16)} ` +\n `${pad(formatDuration(supervisor.totals.latencyMs), 12)} ${task}`\n push(rowFocus ? paint(line, rowFocus, color) : line, { kind: 'supervisor', id: supervisor.id })\n }\n\n if (!selectedSupervisor) return { frame: `${lines.join('\\n')}\\n`, targets }\n\n push()\n push(sectionTitle(`WORKERS ${selectedSupervisor.id}`, focus === 'workers', color))\n push(\n ` id state runtime latency cost tok in/out score detail`,\n )\n for (const worker of selectedSupervisor.workers.slice(0, 12)) {\n const selected = worker.id === selectedWorker?.id\n const pointer = selected ? paint('>', 'cyan', color) : ' '\n const rowFocus = selected && focus === 'workers' ? 'inverse' : undefined\n const score = worker.verdict ?? (worker.status === 'done' ? 'done' : worker.status)\n const detail = worker.reason ?? worker.outRef ?? worker.parent ?? ''\n const spend = totalSpend(worker)\n const line =\n `${pointer} ${pad(worker.label, 12)} ${pad(statusText(worker.status, color), 12)} ` +\n `${pad(worker.runtime ?? '-', 10)} ${pad(formatDuration(worker.latencyMs), 12)} ` +\n `${pad(formatMoney(spend.usd, spend.usdKnown), 11)} ` +\n `${pad(`${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`, 16)} ` +\n `${pad(compact(score, 9), 10)} ${compact(detail, 30)}`\n push(rowFocus ? paint(line, rowFocus, color) : line, {\n kind: 'worker',\n id: worker.id,\n supervisorId: selectedSupervisor.id,\n })\n }\n if (selectedSupervisor.workers.length === 0) push(' no workers spawned yet')\n\n push()\n push(sectionTitle('OBSERVABILITY', false, color))\n for (const line of renderStatusBars(selectedSupervisor, width, color)) push(line)\n push()\n for (const line of renderSpendBars(selectedSupervisor, width, color, 'usd')) push(line)\n push()\n for (const line of renderSpendBars(selectedSupervisor, width, color, 'tokens')) push(line)\n push()\n for (const line of renderLatencyHistogram(selectedSupervisor, width, color)) push(line)\n\n push()\n if (mode === 'log') {\n push(sectionTitle('JOURNAL TAIL', false, color))\n for (const line of renderJournalTail(selectedSupervisor, width, color)) push(line)\n } else {\n push(sectionTitle(mode === 'detail' ? 'DETAIL' : 'RUN SUMMARY', false, color))\n for (const line of renderDetail(selectedSupervisor, selectedWorker, mode, width, color))\n push(line)\n }\n\n return { frame: `${lines.join('\\n')}\\n`, targets }\n}\n\nfunction renderStatusBars(supervisor: SupervisorView, width: number, color: boolean): string[] {\n const total = Math.max(1, supervisor.totals.workers)\n const barWidth = Math.max(12, Math.min(28, width - 58))\n return [\n `status ` +\n `${pad('running', 9)} ${bar(supervisor.totals.running, total, barWidth, '#', color, 'yellow')} ${supervisor.totals.running}` +\n ` ${pad('done', 5)} ${bar(supervisor.totals.done, total, barWidth, '#', color, 'green')} ${supervisor.totals.done}` +\n ` ${pad('down', 5)} ${bar(supervisor.totals.down, total, barWidth, '#', color, 'red')} ${supervisor.totals.down}`,\n ]\n}\n\nfunction renderSpendBars(\n supervisor: SupervisorView,\n width: number,\n color: boolean,\n channel: 'usd' | 'tokens',\n): string[] {\n const dollars = channel === 'usd'\n const amount = (spend: SpendStats) =>\n dollars ? spend.usd : spend.tokensInput + spend.tokensOutput\n const label = (spend: SpendStats) =>\n dollars\n ? formatMoney(spend.usd, spend.usdKnown)\n : `${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`\n const rows = supervisor.workers\n .map((worker) => ({ worker, spend: totalSpend(worker) }))\n .sort((a, b) => amount(b.spend) - amount(a.spend))\n .slice(0, 6)\n const max = Math.max(\n dollars ? 0.000001 : 1,\n ...rows.map((row) => amount(row.spend)),\n amount(supervisor.driverSpend),\n )\n const total = dollars\n ? formatMoney(supervisor.totals.usd, supervisor.totals.usdKnown)\n : `in ${formatTokens(supervisor.totals.tokensInput, supervisor.totals.tokensKnown)} / out ${formatTokens(supervisor.totals.tokensOutput, supervisor.totals.tokensKnown)}`\n const out = [\n `${dollars ? 'cost ' : 'tokens'} total ${total} driver ${label(supervisor.driverSpend)}`,\n ]\n const barWidth = Math.max(18, Math.min(46, width - (dollars ? 38 : 44)))\n for (const { worker, spend } of rows) {\n const visual = dollars\n ? bar(spend.usd, max, barWidth, '$', color, 'magenta')\n : stackedTokenBar(spend.tokensInput, spend.tokensOutput, max, barWidth, color)\n out.push(` ${pad(worker.label, 12)} ${visual} ${label(spend)}`)\n }\n if (rows.length === 0) out.push(` no worker ${dollars ? 'cost' : 'tokens'} yet`)\n return out\n}\n\nfunction renderLatencyHistogram(\n supervisor: SupervisorView,\n width: number,\n color: boolean,\n): string[] {\n const values = supervisor.workers.map((worker) => worker.latencyMs).filter((value) => value > 0)\n const summary = supervisor.totals.workerLatency\n const out = [\n `latency n=${summary.n} min ${formatDuration(summary.min)} p50 ${formatDuration(summary.median)} ` +\n `p90 ${formatDuration(summary.p90)} max ${formatDuration(summary.max)}`,\n ]\n if (values.length === 0) {\n out.push(' no latency samples yet')\n return out\n }\n const bins = histogram(values, 6)\n const maxCount = Math.max(1, ...bins.map((bin) => bin.count))\n const barWidth = Math.max(18, Math.min(48, width - 34))\n for (const bin of bins) {\n out.push(\n ` ${pad(`${formatDuration(bin.min)}-${formatDuration(bin.max)}`, 15)} ` +\n `${bar(bin.count, maxCount, barWidth, '#', color, 'blue')} ${bin.count}`,\n )\n }\n return out\n}\n\nfunction renderDetail(\n supervisor: SupervisorView,\n worker: WorkerView | undefined,\n mode: 'overview' | 'detail' | 'log',\n width: number,\n color: boolean,\n): string[] {\n if (mode === 'detail' && worker) {\n const spend = totalSpend(worker)\n return [\n `worker ${paint(worker.label, 'bold', color)} (${worker.id}) ${statusText(worker.status, color)} latency ${formatDuration(worker.latencyMs)}`,\n `tokens in/out ${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)} cost ${formatMoney(spend.usd, spend.usdKnown)} iterations ${spend.iterations}`,\n `parent ${worker.parent ?? '-'} runtime ${worker.runtime ?? '-'} out ${worker.outRef ?? '-'}${worker.infra ? ' infra' : ''}`,\n `events ${compact(worker.eventFile ?? '-', width - 8)}`,\n ...(worker.reason ? [`reason ${compact(worker.reason, width - 7)}`] : []),\n ...renderWorkerTail(worker, width, color),\n ]\n }\n\n const caps = [\n supervisor.maxSandboxes !== undefined ? `boxes ${supervisor.maxSandboxes}` : undefined,\n supervisor.maxUsd !== undefined ? `max ${formatMoney(supervisor.maxUsd)}` : undefined,\n supervisor.maxDepth !== undefined ? `depth ${supervisor.maxDepth}` : undefined,\n supervisor.maxLifetimeSeconds !== undefined\n ? `ttl ${supervisor.maxLifetimeSeconds}s`\n : undefined,\n ].filter((value): value is string => value !== undefined)\n return [\n `task ${compact(supervisor.task, width - 7)}`,\n `workspace ${compact(supervisor.workspaceDir, width - 12)}`,\n `verify ${compact(supervisor.verifyCmd ?? '-', width - 9)}`,\n `models worker ${supervisor.workerModel ?? '-'} / driver ${supervisor.driverModel ?? '-'} caps ${caps.join(' | ') || '-'}`,\n `progress ${compact(supervisor.progress ?? supervisor.verdict ?? supervisor.status, width - 10)}`,\n ]\n}\n\nfunction renderJournalTail(supervisor: SupervisorView, width: number, color: boolean): string[] {\n if (supervisor.journalTail.length === 0) return [' no journal events yet']\n return supervisor.journalTail.map((event) => {\n const at = event.at ? formatClock(event.at) : '--:--:--'\n if (event.kind === 'spawned')\n return ` ${at} ${paint('spawn', 'yellow', color)} ${pad(event.label ?? event.id, 16)} ${event.id}`\n if (event.kind !== 'cancelled') {\n const spend = parseSpend(event.kind === 'settled' ? event.spent : event.spend)\n const status =\n event.kind === 'settled'\n ? statusText(event.status ?? 'settled', color)\n : event.kind === 'metered'\n ? `${paint('meter', 'cyan', color)} `\n : `${paint('live', 'blue', color)} `\n return ` ${at} ${status} ${pad(event.id, 18)} ${formatMoney(spend.usd, spend.usdKnown)} ${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`\n }\n return ` ${at} ${paint('cancel', 'red', color)} ${pad(event.id, 18)} ${compact(event.reason ?? '', width - 32)}`\n })\n}\n\nfunction renderWorkerTail(worker: WorkerView, width: number, color: boolean): string[] {\n if (worker.liveTail.length === 0) return ['live events: none recorded yet']\n return [\n 'live events:',\n ...worker.liveTail\n .slice(-5)\n .map((line) => ` ${paint(compact(formatWorkerEvent(line), width - 2), 'dim', color)}`),\n ]\n}\n\nfunction renderSteerInput(\n input: NonNullable<RenderOptions['steerInput']>,\n width: number,\n color: boolean,\n): string {\n const target = input.workerLabel ?? '-'\n const value = compact(input.value, Math.max(10, width - target.length - 14))\n return `${paint('steer', 'cyan', color)} ${target} > ${value}${paint('_', 'inverse', color)}`\n}\n\nfunction formatWorkerEvent(line: string): string {\n try {\n const parsed = JSON.parse(line) as Record<string, unknown>\n const at = typeof parsed.at === 'string' ? formatClock(parsed.at) : '--:--:--'\n const kind = typeof parsed.kind === 'string' ? parsed.kind : 'event'\n if (kind === 'progress')\n return `${at} progress iter ${numberValue(parsed.iteration)} ${String(parsed.phase ?? '')}`\n if (kind === 'message') {\n const state = parsed.queued === true ? 'queued' : 'sent'\n const source =\n typeof parsed.source === 'string' && parsed.source.length > 0 ? `${parsed.source} ` : ''\n const message =\n typeof parsed.message === 'string' && parsed.message.length > 0 ? ` ${parsed.message}` : ''\n return `${at} ${source}steer ${state} delivered=${String(parsed.delivered)}${message}`\n }\n if (kind === 'verify') {\n return `${at} verify passed=${String(parsed.passed)} exit=${String(parsed.exitCode ?? '-')}${evidenceSnippet(parsed.outputTail, 160)}`\n }\n if (kind === 'finished') {\n const branch = typeof parsed.branch === 'string' ? ` branch=${parsed.branch}` : ''\n const files = typeof parsed.filesChanged === 'number' ? ` files=${parsed.filesChanged}` : ''\n const tests =\n typeof parsed.testPassed === 'boolean' ? ` tests=${String(parsed.testPassed)}` : ''\n return `${at} finished passed=${String(parsed.passed)} patchBytes=${numberValue(parsed.patchBytes)}${files}${tests}${branch}${evidenceSnippet(parsed.evidence, 220)}`\n }\n if (kind === 'error') return `${at} error ${String(parsed.error ?? '')}`\n return `${at} ${kind}`\n } catch {\n return line\n }\n}\n\n/** One-line the settle evidence / verify tail a worker event carries so the\n * failure is legible in the tail view (the full block stays in the ndjson). */\nfunction evidenceSnippet(value: unknown, max: number): string {\n if (typeof value !== 'string') return ''\n const oneLine = value.replace(/\\s+/g, ' ').trim()\n return oneLine ? ` :: ${compact(oneLine, max)}` : ''\n}\n\nfunction histogram(\n values: readonly number[],\n count: number,\n): Array<{ min: number; max: number; count: number }> {\n const min = Math.min(...values)\n const max = Math.max(...values)\n if (min === max) return [{ min, max, count: values.length }]\n const step = (max - min) / count\n return Array.from({ length: count }, (_, index) => {\n const low = min + step * index\n const high = index === count - 1 ? max : min + step * (index + 1)\n const binCount = values.filter(\n (value) => value >= low && (index === count - 1 ? value <= high : value < high),\n ).length\n return { min: low, max: high, count: binCount }\n }).filter((bin) => bin.count > 0)\n}\n\nfunction bar(\n value: number,\n max: number,\n width: number,\n ch: string,\n color: boolean,\n colorName: keyof typeof colors,\n): string {\n const filled = Math.max(0, Math.min(width, Math.round((value / Math.max(max, 0.000001)) * width)))\n const text = ch.repeat(filled).padEnd(width, '.')\n return paint(text, colorName, color)\n}\n\nfunction stackedTokenBar(\n input: number,\n output: number,\n max: number,\n width: number,\n color: boolean,\n): string {\n const inputWidth = Math.round((input / Math.max(max, 1)) * width)\n const outputWidth = Math.round((output / Math.max(max, 1)) * width)\n const clippedInput = Math.min(width, inputWidth)\n const clippedOutput = Math.min(width - clippedInput, outputWidth)\n const rest = Math.max(0, width - clippedInput - clippedOutput)\n return `${paint('#'.repeat(clippedInput), 'cyan', color)}${paint('+'.repeat(clippedOutput), 'green', color)}${'.'.repeat(rest)}`\n}\n\nfunction sectionTitle(title: string, focused: boolean, color: boolean): string {\n const text = focused ? `[${title}]` : title\n return paint(text, focused ? 'cyan' : 'bold', color)\n}\n\nfunction statusText(status: string, color: boolean): string {\n if (['completed', 'done', 'delivered', 'valid'].includes(status))\n return paint(status.toUpperCase(), 'green', color)\n if (['failed', 'down', 'cancelled', 'invalid', 'error'].includes(status))\n return paint(status.toUpperCase(), 'red', color)\n if (['running', 'spawned', 'settled'].includes(status))\n return paint(status.toUpperCase(), 'yellow', color)\n return paint(status.toUpperCase(), 'white', color)\n}\n\nfunction selectEntity<T extends { readonly id: string }>(\n entities: readonly T[],\n requested: string | undefined,\n): T | undefined {\n return (requested ? entities.find((entity) => entity.id === requested) : undefined) ?? entities[0]\n}\n\nfunction formatClock(value: string): string {\n const parsed = parseTime(value)\n if (parsed === undefined) return '--:--:--'\n return new Date(parsed).toISOString().slice(11, 19)\n}\n\nfunction formatMoney(value: number, known = true): string {\n if (!known) return value === 0 ? 'unknown' : `≥${formatMoney(value)} + unknown`\n if (value === 0) return '$0'\n if (Math.abs(value) < 0.01) return `$${value.toFixed(4)}`\n return `$${value.toFixed(2)}`\n}\n\nfunction formatTokens(value: number, known = true): string {\n if (!known) return value === 0 ? '?' : `≥${formatTokens(value)}?`\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}m`\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`\n return `${Math.round(value)}`\n}\n\nfunction formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms <= 0) return '0s'\n if (ms < 1000) return `${Math.round(ms)}ms`\n const seconds = ms / 1000\n if (seconds < 60) return `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`\n const minutes = seconds / 60\n if (minutes < 60) return `${minutes.toFixed(minutes < 10 ? 1 : 0)}m`\n return `${(minutes / 60).toFixed(1)}h`\n}\n\nfunction compact(value: string, width: number): string {\n if (width <= 1) return ''\n if (value.length <= width) return value\n return `${value.slice(0, width - 1)}~`\n}\n\nfunction pad(value: string, width: number): string {\n const visible = visibleLength(value)\n if (visible >= width) return fitAnsi(value, width)\n return `${value}${' '.repeat(width - visible)}`\n}\n\nfunction rule(width: number, color: boolean): string {\n return paint('-'.repeat(width), 'dim', color)\n}\n\nfunction paint(\n value: string,\n colorName: keyof typeof colors | undefined,\n enabled: boolean,\n): string {\n if (!enabled || !colorName) return value\n return `${colors[colorName]}${value}${colors.reset}`\n}\n\nfunction visibleLength(value: string): number {\n return stripAnsi(value).length\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(ansiPattern, '')\n}\n\nfunction fitAnsi(value: string, width: number): string {\n if (visibleLength(value) <= width) return value\n let out = ''\n let visible = 0\n let cursor = 0\n // An escape sequence must be copied whole and counted as zero visible columns; truncating\n // inside one would emit a half-sequence the terminal interprets against the next line.\n for (const match of value.matchAll(ansiPattern)) {\n const text = value.slice(cursor, match.index)\n const remaining = width - 1 - visible\n out += text.slice(0, remaining)\n visible += Math.min(text.length, remaining)\n if (text.length > remaining) break\n out += match[0]\n cursor = match.index + match[0].length\n }\n if (visible < width - 1) out += value.slice(cursor, cursor + width - 1 - visible)\n out += '~'\n if (out.includes('\\x1b[') && !out.endsWith(colors.reset)) out += colors.reset\n return out\n}\n","/**\n * The interactive side of the supervisor-run TUI: a keypress/mouse loop over the frames\n * `./top-frame` renders, plus the operator controls that write back to the run — steer a live\n * worker, cancel one worker, and request cancellation of a whole run.\n *\n * The controls go through the owned run layout: steers via `writeWorkerSteer` (the durable inbox\n * append) and worker cancellation via `cancelWorker` (the acknowledged operation the runtime's\n * turn loop applies). Run-level cancellation targets the ROOT, which has no acknowledged runtime\n * path yet for a non-retained tree — it stays a `cancel.request.json` write inside the run\n * directory for a host process to honor. Nothing here joins a path from the workspace root.\n *\n * Extracted from the `loops` repo (`src/top.ts`). The module-level singletons are the origin's\n * shape and are kept: this drives one terminal, and `runTopApp` is its one entry point.\n *\n * @experimental\n */\n\nimport { randomUUID } from 'node:crypto'\nimport { hostname, userInfo } from 'node:os'\nimport { resolve } from 'node:path'\nimport { emitKeypressEvents } from 'node:readline'\nimport { cancelRun } from '../runtime/supervise/run-cancellation'\nimport { cancelWorker, writeWorkerSteer } from '../runtime/supervise/run-layout'\nimport { type RenderTarget, renderTopFrameWithLayout } from './top-frame'\nimport { loadTopSnapshot, type TopSnapshot } from './top-snapshot'\n\ninterface UiState {\n root: string\n color: boolean\n focus: 'supervisors' | 'workers'\n mode: 'overview' | 'detail' | 'log'\n selectedSupervisorId: string | undefined\n selectedWorkerId: string | undefined\n notice: string | undefined\n steerInput: {\n active: boolean\n value: string\n }\n}\n\n/** @experimental How the app was invoked. Defaults read `process.argv` / `process.cwd()`. */\ninterface TopAppOptions {\n readonly argv?: readonly string[]\n readonly cwd?: string\n}\n\nlet state: UiState = initialState([], process.cwd())\nlet snapshot: TopSnapshot = {\n root: state.root,\n generatedAt: 0,\n supervisors: [],\n completeness: 'complete',\n diagnostics: [],\n discovered: 0,\n loaded: 0,\n}\nlet targets: RenderTarget[] = []\nlet timer: NodeJS.Timeout | undefined\n\n/**\n * Render exactly one frame and return it. This is the non-interactive path — `--once`, a pipe, a\n * test — so it never touches raw mode, the alternate screen, or `process.exit`.\n */\nfunction renderTopOnce(options: TopAppOptions = {}): string {\n const args = [...(options.argv ?? process.argv.slice(2))]\n state = initialState(args, options.cwd ?? process.cwd())\n snapshot = loadTopSnapshot(state.root)\n clampSelection()\n return renderTopFrameWithLayout(snapshot, {\n color: state.color,\n width: process.stdout.columns ?? 128,\n focus: state.focus,\n mode: state.mode,\n ...(state.selectedSupervisorId ? { selectedSupervisorId: state.selectedSupervisorId } : {}),\n ...(state.selectedWorkerId ? { selectedWorkerId: state.selectedWorkerId } : {}),\n steerInput: renderSteerInputState(),\n }).frame\n}\n\n/**\n * Run the TUI. With a TTY on both ends and no `--once` this takes over the terminal until `q`;\n * otherwise it writes a single frame to stdout and returns.\n */\nexport function runTopApp(options: TopAppOptions = {}): void {\n const args = [...(options.argv ?? process.argv.slice(2))]\n if (!process.stdout.isTTY || !process.stdin.isTTY || args.includes('--once')) {\n process.stdout.write(renderTopOnce(options))\n return\n }\n state = initialState(args, options.cwd ?? process.cwd())\n snapshot = loadTopSnapshot(state.root)\n start()\n}\n\nfunction initialState(args: readonly string[], cwd: string): UiState {\n const rootArg = args.find((arg) => !arg.startsWith('-'))\n return {\n root: resolve(rootArg ?? cwd),\n color: Boolean(process.stdout.isTTY) && !args.includes('--no-color'),\n focus: args.includes('--detail') ? 'workers' : 'supervisors',\n mode: args.includes('--log') ? 'log' : args.includes('--detail') ? 'detail' : 'overview',\n selectedSupervisorId: undefined,\n selectedWorkerId: undefined,\n notice: undefined,\n steerInput: { active: false, value: '' },\n }\n}\n\nfunction start(): void {\n process.stdout.write('\\x1b[?1049h\\x1b[?25l\\x1b[?1000h\\x1b[?1006h')\n emitKeypressEvents(process.stdin)\n process.stdin.setRawMode(true)\n process.stdin.resume()\n process.stdin.on('keypress', onKey)\n process.stdin.on('data', onData)\n process.on('SIGINT', stop)\n draw()\n timer = setInterval(draw, 1000)\n}\n\nfunction stop(): void {\n if (timer) clearInterval(timer)\n process.stdin.setRawMode(false)\n process.stdout.write('\\x1b[?1000l\\x1b[?1006l\\x1b[?25h\\x1b[?1049l')\n process.exit(0)\n}\n\nfunction draw(): void {\n snapshot = loadTopSnapshot(state.root)\n clampSelection()\n const rendered = renderTopFrameWithLayout(snapshot, {\n width: process.stdout.columns ?? 128,\n height: process.stdout.rows ?? 42,\n color: state.color,\n focus: state.focus,\n mode: state.mode,\n ...(state.notice ? { notice: state.notice } : {}),\n ...(state.selectedSupervisorId ? { selectedSupervisorId: state.selectedSupervisorId } : {}),\n ...(state.selectedWorkerId ? { selectedWorkerId: state.selectedWorkerId } : {}),\n steerInput: renderSteerInputState(),\n })\n targets = rendered.targets\n process.stdout.write(`\\x1b[2J\\x1b[H${rendered.frame}`)\n}\n\nfunction onKey(str: string, key: { name?: string; ctrl?: boolean }): void {\n state.notice = undefined\n if (key.ctrl && key.name === 'c') stop()\n if (state.steerInput.active) {\n handleSteerInput(str, key)\n draw()\n return\n }\n if (key.name === 'q' || key.name === 'escape') stop()\n if (key.name === 'tab') {\n state.focus = state.focus === 'supervisors' ? 'workers' : 'supervisors'\n } else if (key.name === 'up') {\n moveSelection(-1)\n } else if (key.name === 'down') {\n moveSelection(1)\n } else if (key.name === 'left') {\n moveSupervisor(-1)\n } else if (key.name === 'right') {\n moveSupervisor(1)\n } else if (key.name === 'return') {\n state.mode = 'detail'\n state.focus = 'workers'\n } else if (key.name === 'o') {\n state.mode = 'overview'\n } else if (key.name === 'l') {\n state.mode = 'log'\n } else if (key.name === 's') {\n startSteerInput()\n } else if (key.name === 'c') {\n requestCancel()\n }\n draw()\n}\n\nfunction handleSteerInput(str: string, key: { name?: string; ctrl?: boolean }): void {\n if (key.name === 'escape') {\n state.steerInput = { active: false, value: '' }\n return\n }\n if (key.name === 'return') {\n submitSteerInput()\n return\n }\n if (key.name === 'backspace') {\n state.steerInput.value = state.steerInput.value.slice(0, -1)\n return\n }\n if (key.ctrl && key.name === 'u') {\n state.steerInput.value = ''\n return\n }\n if (\n key.ctrl ||\n key.name === 'tab' ||\n key.name === 'up' ||\n key.name === 'down' ||\n key.name === 'left' ||\n key.name === 'right'\n ) {\n return\n }\n if (!str || str === '\\r' || str === '\\n') return\n if ([...str].every((char) => char >= ' ' && char !== '\\x7f')) state.steerInput.value += str\n}\n\nfunction onData(data: Buffer): void {\n const click = parseMouse(data.toString('utf8'))\n if (!click) return\n const target = targets.find((candidate) => candidate.row === click.row)\n if (!target) return\n state.notice = undefined\n if (target.kind === 'supervisor') {\n state.focus = 'supervisors'\n state.selectedSupervisorId = target.id\n state.selectedWorkerId = undefined\n } else {\n state.focus = 'workers'\n state.mode = 'detail'\n state.selectedSupervisorId = target.supervisorId\n state.selectedWorkerId = target.id\n }\n draw()\n}\n\nfunction startSteerInput(): void {\n state.mode = 'detail'\n state.focus = 'workers'\n if (!selectedSupervisor()) {\n state.notice = 'no supervisor selected'\n return\n }\n if (!selectedWorker()) {\n state.notice = 'no worker selected'\n return\n }\n state.steerInput = { active: true, value: '' }\n}\n\nfunction submitSteerInput(): void {\n const supervisor = selectedSupervisor()\n const worker = selectedWorker()\n const message = state.steerInput.value\n state.steerInput = { active: false, value: '' }\n if (!supervisor) {\n state.notice = 'no supervisor selected'\n return\n }\n if (!worker) {\n state.notice = 'no worker selected'\n return\n }\n try {\n // The exact worker id routes this operation to the one manager that owns the child.\n const written = writeWorkerSteer(state.root, supervisor.id, worker.id, {\n operationId: randomUUID(),\n message,\n source: 'agent-runtime-top',\n })\n state.notice = `steer queued for ${supervisor.id}/${worker.label} (op ${written.request.operationId})`\n } catch (err) {\n state.notice = `steer failed: ${err instanceof Error ? err.message : String(err)}`\n }\n}\n\nfunction parseMouse(raw: string): { col: number; row: number } | undefined {\n // ESC is the literal first byte of an SGR mouse report; matching the control character IS the\n // parse, so the control-character rule does not apply to a terminal escape decoder.\n // biome-ignore lint/suspicious/noControlCharactersInRegex: SGR mouse reports begin with ESC\n const match = /\\x1b\\[<(\\d+);(\\d+);(\\d+)([mM])/.exec(raw)\n if (match?.[4] !== 'M') return undefined\n const col = Number(match[2])\n const row = Number(match[3])\n if (!Number.isFinite(col) || !Number.isFinite(row)) return undefined\n return { col: col - 1, row: row - 1 }\n}\n\nfunction moveSelection(delta: number): void {\n if (state.focus === 'supervisors') {\n moveSupervisor(delta)\n return\n }\n const supervisor = selectedSupervisor()\n if (!supervisor || supervisor.workers.length === 0) return\n const current = Math.max(\n 0,\n supervisor.workers.findIndex((worker) => worker.id === state.selectedWorkerId),\n )\n const next = wrap(current + delta, supervisor.workers.length)\n const worker = supervisor.workers[next]\n if (worker) state.selectedWorkerId = worker.id\n}\n\nfunction moveSupervisor(delta: number): void {\n if (snapshot.supervisors.length === 0) return\n const current = Math.max(\n 0,\n snapshot.supervisors.findIndex((supervisor) => supervisor.id === state.selectedSupervisorId),\n )\n const next = wrap(current + delta, snapshot.supervisors.length)\n const supervisor = snapshot.supervisors[next]\n if (!supervisor) return\n state.selectedSupervisorId = supervisor.id\n state.selectedWorkerId = supervisor.workers[0]?.id\n}\n\nfunction clampSelection(): void {\n if (snapshot.supervisors.length === 0) {\n state.selectedSupervisorId = undefined\n state.selectedWorkerId = undefined\n return\n }\n const supervisor = selectedSupervisor() ?? snapshot.supervisors[0]\n if (!supervisor) return\n state.selectedSupervisorId = supervisor.id\n const worker =\n supervisor.workers.find((candidate) => candidate.id === state.selectedWorkerId) ??\n supervisor.workers[0]\n state.selectedWorkerId = worker?.id\n}\n\nfunction selectedSupervisor(): TopSnapshot['supervisors'][number] | undefined {\n return snapshot.supervisors.find((supervisor) => supervisor.id === state.selectedSupervisorId)\n}\n\nfunction selectedWorker(): TopSnapshot['supervisors'][number]['workers'][number] | undefined {\n const supervisor = selectedSupervisor()\n return supervisor?.workers.find((worker) => worker.id === state.selectedWorkerId)\n}\n\nfunction renderSteerInputState(): { active: boolean; value: string; workerLabel?: string } {\n const worker = selectedWorker()\n return {\n active: state.steerInput.active,\n value: state.steerInput.value,\n ...(worker?.label ? { workerLabel: worker.label } : {}),\n }\n}\n\nfunction requestCancel(): void {\n const supervisor = selectedSupervisor()\n if (!supervisor) {\n state.notice = 'no supervisor selected'\n return\n }\n if (supervisor.status !== 'running') {\n state.notice = `${supervisor.id} is ${supervisor.status}; no cancel request written`\n return\n }\n // Worker focus cancels ONE worker through the acknowledged runtime path: the request lands in\n // the run layout's cancellation inbox, the run's own turn loop applies the abort to exactly\n // that worker's subtree, and the acknowledgement records what it proved.\n const worker = state.focus === 'workers' ? selectedWorker() : undefined\n if (worker) {\n if (worker.status !== 'running') {\n state.notice = `${worker.label} is ${worker.status}; nothing to cancel`\n return\n }\n // The request names the exact node id, so it routes to the manager that owns the worker at\n // ANY depth — the owning manager's turn loop applies the abort to exactly that subtree.\n try {\n const record = cancelWorker(supervisor.stateDir, worker.id, randomUUID(), {\n reason: 'operator requested cancel from TUI',\n source: 'agent-runtime-top',\n })\n state.notice =\n record.effect === 'unknown'\n ? `cancel queued for ${supervisor.id}/${worker.label} (op ${record.operationId}); awaiting runtime acknowledgement`\n : `cancel ${record.effect} for ${supervisor.id}/${worker.label} (op ${record.operationId})`\n } catch (err) {\n state.notice = `cancel request failed: ${err instanceof Error ? err.message : String(err)}`\n }\n return\n }\n // Supervisor focus cancels the WHOLE run through the same acknowledged contract: the request\n // lands in the run layout, the run's root manager aborts the whole tree through the one cascade\n // controller it already has, and `supervise()` records the terminal effect.\n try {\n const record = cancelRun(supervisor.stateDir, randomUUID(), {\n reason: 'operator requested cancel from TUI',\n source: 'agent-runtime-top',\n operator: `${userInfo().username}@${hostname()}`,\n })\n state.notice =\n record.effect === 'unknown'\n ? `run cancel queued for ${supervisor.id} (op ${record.operationId}); awaiting runtime acknowledgement`\n : `run cancel ${record.effect} for ${supervisor.id} (op ${record.operationId})`\n } catch (err) {\n state.notice = `cancel request failed: ${err instanceof Error ? err.message : String(err)}`\n }\n}\n\nfunction wrap(value: number, size: number): number {\n return ((value % size) + size) % size\n}\n","#!/usr/bin/env node\n\n/**\n * `agent-runtime-top` — watch the supervisor runs of one workspace.\n *\n * agent-runtime-top [root] [--once] [--no-color] [--detail] [--log]\n *\n * `root` is the workspace whose `.agent/supervisor/` runs are shown; it defaults to the current\n * directory. With a TTY on both ends the view refreshes every second and takes the keys it prints\n * in its header; otherwise (a pipe, `--once`) it writes one frame and exits.\n *\n * @experimental\n */\n\nimport { runTopApp } from './top-app'\nimport { runTopWeb } from './top-web'\n\nif (process.argv.includes('--web')) await runTopWeb(process.argv.slice(2))\nelse runTopApp()\n"],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","names":[],"sources":["../../src/tui/top-frame.ts","../../src/tui/top-app.ts","../../src/tui/bin.ts"],"sourcesContent":["import { supervisorRunsRoot } from '../runtime/supervise/run-layout'\nimport {\n aggregateSnapshot,\n numberValue,\n parseSpend,\n parseTime,\n type SpendStats,\n type SupervisorView,\n type TopSnapshot,\n totalSpend,\n type WorkerView,\n} from './top-snapshot'\n\ninterface RenderOptions {\n readonly width?: number\n readonly height?: number\n readonly color?: boolean\n readonly selectedSupervisorId?: string\n readonly selectedWorkerId?: string\n readonly focus?: 'supervisors' | 'workers'\n readonly mode?: 'overview' | 'detail' | 'log'\n readonly notice?: string\n readonly steerInput?: {\n readonly active: boolean\n readonly value: string\n readonly workerLabel?: string\n }\n}\n\nexport interface RenderTarget {\n readonly row: number\n readonly kind: 'supervisor' | 'worker'\n readonly id: string\n readonly supervisorId?: string\n}\n\ninterface RenderedTopFrame {\n readonly frame: string\n readonly targets: RenderTarget[]\n}\n// Width accounting depends on stripping SGR sequences, which begin with a literal ESC. Matching\n// the control character is the point of an ANSI-aware renderer, not an accident.\n// biome-ignore lint/suspicious/noControlCharactersInRegex: SGR sequences begin with ESC\nconst ansiPattern = /\\x1b\\[[0-9;?]*[ -/]*[@-~]/g\n\nconst colors = {\n reset: '\\x1b[0m',\n dim: '\\x1b[2m',\n bold: '\\x1b[1m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n inverse: '\\x1b[7m',\n}\n\n/** Render one snapshot to an ANSI frame. Use this when nothing needs to be clickable. */\nexport function renderTopFrame(snapshot: TopSnapshot, options: RenderOptions = {}): string {\n return renderTopFrameWithLayout(snapshot, options).frame\n}\n\n/**\n * Render one snapshot, returning the frame together with the row→entity map a mouse click resolves\n * against. The layout is the only thing that knows which row is which run or worker, so emitting it\n * alongside the text is what keeps click handling out of the renderer.\n */\nexport function renderTopFrameWithLayout(\n snapshot: TopSnapshot,\n options: RenderOptions = {},\n): RenderedTopFrame {\n const width = Math.max(88, options.width ?? 128)\n const height = Math.max(24, options.height ?? 42)\n const color = options.color ?? false\n const focus = options.focus ?? 'supervisors'\n const mode = options.mode ?? 'overview'\n const selectedSupervisor = selectEntity(snapshot.supervisors, options.selectedSupervisorId)\n const selectedWorker = selectedSupervisor\n ? selectEntity(selectedSupervisor.workers, options.selectedWorkerId)\n : undefined\n const targets: RenderTarget[] = []\n const lines: string[] = []\n\n const push = (line = '', target?: Omit<RenderTarget, 'row'>) => {\n if (lines.length >= height) return\n if (target) targets.push({ row: lines.length, ...target })\n lines.push(fitAnsi(line, width))\n }\n\n const aggregate = aggregateSnapshot(snapshot)\n push(\n `${paint('SUPERVISOR TOP', 'bold', color)} ${paint(snapshot.root, 'dim', color)} ` +\n `runs ${aggregate.supervisors} workers ${aggregate.workers} live ${aggregate.running} ` +\n `done ${aggregate.done} down ${aggregate.down} ` +\n `${formatMoney(aggregate.usd, aggregate.usdKnown)} tok ${formatTokens(aggregate.tokensInput, aggregate.tokensKnown)}/${formatTokens(aggregate.tokensOutput, aggregate.tokensKnown)}`,\n )\n push(\n `${paint('keys', 'dim', color)} up/down select left/right run tab focus enter detail o overview l log s steer c cancel mouse q quit`,\n )\n if (options.notice) push(paint(options.notice, 'yellow', color))\n if (snapshot.completeness === 'partial')\n push(\n paint(\n `partial snapshot: ${snapshot.diagnostics.length} source${\n snapshot.diagnostics.length === 1 ? '' : 's'\n } skipped or truncated; runs loaded ${snapshot.loaded}/${snapshot.discovered}`,\n 'yellow',\n color,\n ),\n )\n if (options.steerInput?.active) push(renderSteerInput(options.steerInput, width, color))\n push(rule(width, color))\n\n if (snapshot.supervisors.length === 0) {\n if (snapshot.discovered > 0) {\n push(paint('NO READABLE SUPERVISORS', 'yellow', color))\n push(\n `${snapshot.discovered} run director${snapshot.discovered === 1 ? 'y' : 'ies'} found under ${supervisorRunsRoot(snapshot.root)}, none readable`,\n )\n } else {\n push(paint('NO SUPERVISORS', 'yellow', color))\n push(`No run state under ${supervisorRunsRoot(snapshot.root)}`)\n }\n push(\n `A run appears here once its driver writes state.json; re-point with: agent-runtime-top <root>`,\n )\n return { frame: `${lines.join('\\n')}\\n`, targets }\n }\n\n push(sectionTitle('SUPERVISORS', focus === 'supervisors', color))\n push(\n ` id status workers spend tok in/out latency task`,\n )\n for (const supervisor of snapshot.supervisors.slice(0, 9)) {\n const selected = supervisor.id === selectedSupervisor?.id\n const status = statusText(supervisor.status, color)\n const pointer = selected ? paint('>', 'cyan', color) : ' '\n const rowFocus = selected && focus === 'supervisors' ? 'inverse' : undefined\n const workerSummary = `${supervisor.totals.running}/${supervisor.totals.workers} live`\n const task = compact(supervisor.task, 34)\n const line =\n `${pointer} ${pad(supervisor.id, 21)} ${pad(status, 12)} ${pad(workerSummary, 13)} ` +\n `${pad(formatMoney(supervisor.totals.usd, supervisor.totals.usdKnown), 12)} ` +\n `${pad(`${formatTokens(supervisor.totals.tokensInput, supervisor.totals.tokensKnown)}/${formatTokens(supervisor.totals.tokensOutput, supervisor.totals.tokensKnown)}`, 16)} ` +\n `${pad(formatDuration(supervisor.totals.latencyMs), 12)} ${task}`\n push(rowFocus ? paint(line, rowFocus, color) : line, { kind: 'supervisor', id: supervisor.id })\n }\n\n if (!selectedSupervisor) return { frame: `${lines.join('\\n')}\\n`, targets }\n\n push()\n push(sectionTitle(`WORKERS ${selectedSupervisor.id}`, focus === 'workers', color))\n push(\n ` id state runtime latency cost tok in/out score detail`,\n )\n for (const worker of selectedSupervisor.workers.slice(0, 12)) {\n const selected = worker.id === selectedWorker?.id\n const pointer = selected ? paint('>', 'cyan', color) : ' '\n const rowFocus = selected && focus === 'workers' ? 'inverse' : undefined\n const score = worker.verdict ?? (worker.status === 'done' ? 'done' : worker.status)\n const detail = worker.reason ?? worker.outRef ?? worker.parent ?? ''\n const spend = totalSpend(worker)\n const line =\n `${pointer} ${pad(worker.label, 12)} ${pad(statusText(worker.status, color), 12)} ` +\n `${pad(worker.runtime ?? '-', 10)} ${pad(formatDuration(worker.latencyMs), 12)} ` +\n `${pad(formatMoney(spend.usd, spend.usdKnown), 11)} ` +\n `${pad(`${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`, 16)} ` +\n `${pad(compact(score, 9), 10)} ${compact(detail, 30)}`\n push(rowFocus ? paint(line, rowFocus, color) : line, {\n kind: 'worker',\n id: worker.id,\n supervisorId: selectedSupervisor.id,\n })\n }\n if (selectedSupervisor.workers.length === 0) push(' no workers spawned yet')\n\n push()\n push(sectionTitle('OBSERVABILITY', false, color))\n for (const line of renderStatusBars(selectedSupervisor, width, color)) push(line)\n push()\n for (const line of renderSpendBars(selectedSupervisor, width, color, 'usd')) push(line)\n push()\n for (const line of renderSpendBars(selectedSupervisor, width, color, 'tokens')) push(line)\n push()\n for (const line of renderLatencyHistogram(selectedSupervisor, width, color)) push(line)\n\n push()\n if (mode === 'log') {\n push(sectionTitle('JOURNAL TAIL', false, color))\n for (const line of renderJournalTail(selectedSupervisor, width, color)) push(line)\n } else {\n push(sectionTitle(mode === 'detail' ? 'DETAIL' : 'RUN SUMMARY', false, color))\n for (const line of renderDetail(selectedSupervisor, selectedWorker, mode, width, color))\n push(line)\n }\n\n return { frame: `${lines.join('\\n')}\\n`, targets }\n}\n\nfunction renderStatusBars(supervisor: SupervisorView, width: number, color: boolean): string[] {\n const total = Math.max(1, supervisor.totals.workers)\n const barWidth = Math.max(12, Math.min(28, width - 58))\n return [\n `status ` +\n `${pad('running', 9)} ${bar(supervisor.totals.running, total, barWidth, '#', color, 'yellow')} ${supervisor.totals.running}` +\n ` ${pad('done', 5)} ${bar(supervisor.totals.done, total, barWidth, '#', color, 'green')} ${supervisor.totals.done}` +\n ` ${pad('down', 5)} ${bar(supervisor.totals.down, total, barWidth, '#', color, 'red')} ${supervisor.totals.down}`,\n ]\n}\n\nfunction renderSpendBars(\n supervisor: SupervisorView,\n width: number,\n color: boolean,\n channel: 'usd' | 'tokens',\n): string[] {\n const dollars = channel === 'usd'\n const amount = (spend: SpendStats) =>\n dollars ? spend.usd : spend.tokensInput + spend.tokensOutput\n const label = (spend: SpendStats) =>\n dollars\n ? formatMoney(spend.usd, spend.usdKnown)\n : `${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`\n const rows = supervisor.workers\n .map((worker) => ({ worker, spend: totalSpend(worker) }))\n .sort((a, b) => amount(b.spend) - amount(a.spend))\n .slice(0, 6)\n const max = Math.max(\n dollars ? 0.000001 : 1,\n ...rows.map((row) => amount(row.spend)),\n amount(supervisor.driverSpend),\n )\n const total = dollars\n ? formatMoney(supervisor.totals.usd, supervisor.totals.usdKnown)\n : `in ${formatTokens(supervisor.totals.tokensInput, supervisor.totals.tokensKnown)} / out ${formatTokens(supervisor.totals.tokensOutput, supervisor.totals.tokensKnown)}`\n const out = [\n `${dollars ? 'cost ' : 'tokens'} total ${total} driver ${label(supervisor.driverSpend)}`,\n ]\n const barWidth = Math.max(18, Math.min(46, width - (dollars ? 38 : 44)))\n for (const { worker, spend } of rows) {\n const visual = dollars\n ? bar(spend.usd, max, barWidth, '$', color, 'magenta')\n : stackedTokenBar(spend.tokensInput, spend.tokensOutput, max, barWidth, color)\n out.push(` ${pad(worker.label, 12)} ${visual} ${label(spend)}`)\n }\n if (rows.length === 0) out.push(` no worker ${dollars ? 'cost' : 'tokens'} yet`)\n return out\n}\n\nfunction renderLatencyHistogram(\n supervisor: SupervisorView,\n width: number,\n color: boolean,\n): string[] {\n const values = supervisor.workers.map((worker) => worker.latencyMs).filter((value) => value > 0)\n const summary = supervisor.totals.workerLatency\n const out = [\n `latency n=${summary.n} min ${formatDuration(summary.min)} p50 ${formatDuration(summary.median)} ` +\n `p90 ${formatDuration(summary.p90)} max ${formatDuration(summary.max)}`,\n ]\n if (values.length === 0) {\n out.push(' no latency samples yet')\n return out\n }\n const bins = histogram(values, 6)\n const maxCount = Math.max(1, ...bins.map((bin) => bin.count))\n const barWidth = Math.max(18, Math.min(48, width - 34))\n for (const bin of bins) {\n out.push(\n ` ${pad(`${formatDuration(bin.min)}-${formatDuration(bin.max)}`, 15)} ` +\n `${bar(bin.count, maxCount, barWidth, '#', color, 'blue')} ${bin.count}`,\n )\n }\n return out\n}\n\nfunction renderDetail(\n supervisor: SupervisorView,\n worker: WorkerView | undefined,\n mode: 'overview' | 'detail' | 'log',\n width: number,\n color: boolean,\n): string[] {\n if (mode === 'detail' && worker) {\n const spend = totalSpend(worker)\n return [\n `worker ${paint(worker.label, 'bold', color)} (${worker.id}) ${statusText(worker.status, color)} latency ${formatDuration(worker.latencyMs)}`,\n `tokens in/out ${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)} cost ${formatMoney(spend.usd, spend.usdKnown)} iterations ${spend.iterations}`,\n `parent ${worker.parent ?? '-'} runtime ${worker.runtime ?? '-'} out ${worker.outRef ?? '-'}${worker.infra ? ' infra' : ''}`,\n `events ${compact(worker.eventFile ?? '-', width - 8)}`,\n ...(worker.reason ? [`reason ${compact(worker.reason, width - 7)}`] : []),\n ...renderWorkerTail(worker, width, color),\n ]\n }\n\n const caps = [\n supervisor.maxSandboxes !== undefined ? `boxes ${supervisor.maxSandboxes}` : undefined,\n supervisor.maxUsd !== undefined ? `max ${formatMoney(supervisor.maxUsd)}` : undefined,\n supervisor.maxDepth !== undefined ? `depth ${supervisor.maxDepth}` : undefined,\n supervisor.maxLifetimeSeconds !== undefined\n ? `ttl ${supervisor.maxLifetimeSeconds}s`\n : undefined,\n ].filter((value): value is string => value !== undefined)\n return [\n `task ${compact(supervisor.task, width - 7)}`,\n `workspace ${compact(supervisor.workspaceDir, width - 12)}`,\n `verify ${compact(supervisor.verifyCmd ?? '-', width - 9)}`,\n `models worker ${supervisor.workerModel ?? '-'} / driver ${supervisor.driverModel ?? '-'} caps ${caps.join(' | ') || '-'}`,\n `progress ${compact(supervisor.progress ?? supervisor.verdict ?? supervisor.status, width - 10)}`,\n ]\n}\n\nfunction renderJournalTail(supervisor: SupervisorView, width: number, color: boolean): string[] {\n if (supervisor.journalTail.length === 0) return [' no journal events yet']\n return supervisor.journalTail.map((event) => {\n const at = event.at ? formatClock(event.at) : '--:--:--'\n if (event.kind === 'spawned')\n return ` ${at} ${paint('spawn', 'yellow', color)} ${pad(event.label ?? event.id, 16)} ${event.id}`\n if (\n event.kind === 'materialized' ||\n event.kind === 'seat-materialized' ||\n event.kind === 'execution-bound'\n )\n return ` ${at} ${event.kind} ${event.id}`\n if (event.kind !== 'cancelled') {\n const spend = parseSpend(event.kind === 'settled' ? event.spent : event.spend)\n const status =\n event.kind === 'settled'\n ? statusText(event.status ?? 'settled', color)\n : event.kind === 'metered'\n ? `${paint('meter', 'cyan', color)} `\n : `${paint('live', 'blue', color)} `\n return ` ${at} ${status} ${pad(event.id, 18)} ${formatMoney(spend.usd, spend.usdKnown)} ${formatTokens(spend.tokensInput, spend.tokensKnown)}/${formatTokens(spend.tokensOutput, spend.tokensKnown)}`\n }\n return ` ${at} ${paint('cancel', 'red', color)} ${pad(event.id, 18)} ${compact(event.reason ?? '', width - 32)}`\n })\n}\n\nfunction renderWorkerTail(worker: WorkerView, width: number, color: boolean): string[] {\n if (worker.liveTail.length === 0) return ['live events: none recorded yet']\n return [\n 'live events:',\n ...worker.liveTail\n .slice(-5)\n .map((line) => ` ${paint(compact(formatWorkerEvent(line), width - 2), 'dim', color)}`),\n ]\n}\n\nfunction renderSteerInput(\n input: NonNullable<RenderOptions['steerInput']>,\n width: number,\n color: boolean,\n): string {\n const target = input.workerLabel ?? '-'\n const value = compact(input.value, Math.max(10, width - target.length - 14))\n return `${paint('steer', 'cyan', color)} ${target} > ${value}${paint('_', 'inverse', color)}`\n}\n\nfunction formatWorkerEvent(line: string): string {\n try {\n const parsed = JSON.parse(line) as Record<string, unknown>\n const at = typeof parsed.at === 'string' ? formatClock(parsed.at) : '--:--:--'\n const kind = typeof parsed.kind === 'string' ? parsed.kind : 'event'\n if (kind === 'progress')\n return `${at} progress iter ${numberValue(parsed.iteration)} ${String(parsed.phase ?? '')}`\n if (kind === 'message') {\n const state = parsed.queued === true ? 'queued' : 'sent'\n const source =\n typeof parsed.source === 'string' && parsed.source.length > 0 ? `${parsed.source} ` : ''\n const message =\n typeof parsed.message === 'string' && parsed.message.length > 0 ? ` ${parsed.message}` : ''\n return `${at} ${source}steer ${state} delivered=${String(parsed.delivered)}${message}`\n }\n if (kind === 'verify') {\n return `${at} verify passed=${String(parsed.passed)} exit=${String(parsed.exitCode ?? '-')}${evidenceSnippet(parsed.outputTail, 160)}`\n }\n if (kind === 'finished') {\n const branch = typeof parsed.branch === 'string' ? ` branch=${parsed.branch}` : ''\n const files = typeof parsed.filesChanged === 'number' ? ` files=${parsed.filesChanged}` : ''\n const tests =\n typeof parsed.testPassed === 'boolean' ? ` tests=${String(parsed.testPassed)}` : ''\n return `${at} finished passed=${String(parsed.passed)} patchBytes=${numberValue(parsed.patchBytes)}${files}${tests}${branch}${evidenceSnippet(parsed.evidence, 220)}`\n }\n if (kind === 'error') return `${at} error ${String(parsed.error ?? '')}`\n return `${at} ${kind}`\n } catch {\n return line\n }\n}\n\n/** One-line the settle evidence / verify tail a worker event carries so the\n * failure is legible in the tail view (the full block stays in the ndjson). */\nfunction evidenceSnippet(value: unknown, max: number): string {\n if (typeof value !== 'string') return ''\n const oneLine = value.replace(/\\s+/g, ' ').trim()\n return oneLine ? ` :: ${compact(oneLine, max)}` : ''\n}\n\nfunction histogram(\n values: readonly number[],\n count: number,\n): Array<{ min: number; max: number; count: number }> {\n const min = Math.min(...values)\n const max = Math.max(...values)\n if (min === max) return [{ min, max, count: values.length }]\n const step = (max - min) / count\n return Array.from({ length: count }, (_, index) => {\n const low = min + step * index\n const high = index === count - 1 ? max : min + step * (index + 1)\n const binCount = values.filter(\n (value) => value >= low && (index === count - 1 ? value <= high : value < high),\n ).length\n return { min: low, max: high, count: binCount }\n }).filter((bin) => bin.count > 0)\n}\n\nfunction bar(\n value: number,\n max: number,\n width: number,\n ch: string,\n color: boolean,\n colorName: keyof typeof colors,\n): string {\n const filled = Math.max(0, Math.min(width, Math.round((value / Math.max(max, 0.000001)) * width)))\n const text = ch.repeat(filled).padEnd(width, '.')\n return paint(text, colorName, color)\n}\n\nfunction stackedTokenBar(\n input: number,\n output: number,\n max: number,\n width: number,\n color: boolean,\n): string {\n const inputWidth = Math.round((input / Math.max(max, 1)) * width)\n const outputWidth = Math.round((output / Math.max(max, 1)) * width)\n const clippedInput = Math.min(width, inputWidth)\n const clippedOutput = Math.min(width - clippedInput, outputWidth)\n const rest = Math.max(0, width - clippedInput - clippedOutput)\n return `${paint('#'.repeat(clippedInput), 'cyan', color)}${paint('+'.repeat(clippedOutput), 'green', color)}${'.'.repeat(rest)}`\n}\n\nfunction sectionTitle(title: string, focused: boolean, color: boolean): string {\n const text = focused ? `[${title}]` : title\n return paint(text, focused ? 'cyan' : 'bold', color)\n}\n\nfunction statusText(status: string, color: boolean): string {\n if (['completed', 'done', 'delivered', 'valid'].includes(status))\n return paint(status.toUpperCase(), 'green', color)\n if (['failed', 'down', 'cancelled', 'invalid', 'error'].includes(status))\n return paint(status.toUpperCase(), 'red', color)\n if (['running', 'spawned', 'settled'].includes(status))\n return paint(status.toUpperCase(), 'yellow', color)\n return paint(status.toUpperCase(), 'white', color)\n}\n\nfunction selectEntity<T extends { readonly id: string }>(\n entities: readonly T[],\n requested: string | undefined,\n): T | undefined {\n return (requested ? entities.find((entity) => entity.id === requested) : undefined) ?? entities[0]\n}\n\nfunction formatClock(value: string): string {\n const parsed = parseTime(value)\n if (parsed === undefined) return '--:--:--'\n return new Date(parsed).toISOString().slice(11, 19)\n}\n\nfunction formatMoney(value: number, known = true): string {\n if (!known) return value === 0 ? 'unknown' : `≥${formatMoney(value)} + unknown`\n if (value === 0) return '$0'\n if (Math.abs(value) < 0.01) return `$${value.toFixed(4)}`\n return `$${value.toFixed(2)}`\n}\n\nfunction formatTokens(value: number, known = true): string {\n if (!known) return value === 0 ? '?' : `≥${formatTokens(value)}?`\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}m`\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`\n return `${Math.round(value)}`\n}\n\nfunction formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms <= 0) return '0s'\n if (ms < 1000) return `${Math.round(ms)}ms`\n const seconds = ms / 1000\n if (seconds < 60) return `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`\n const minutes = seconds / 60\n if (minutes < 60) return `${minutes.toFixed(minutes < 10 ? 1 : 0)}m`\n return `${(minutes / 60).toFixed(1)}h`\n}\n\nfunction compact(value: string, width: number): string {\n if (width <= 1) return ''\n if (value.length <= width) return value\n return `${value.slice(0, width - 1)}~`\n}\n\nfunction pad(value: string, width: number): string {\n const visible = visibleLength(value)\n if (visible >= width) return fitAnsi(value, width)\n return `${value}${' '.repeat(width - visible)}`\n}\n\nfunction rule(width: number, color: boolean): string {\n return paint('-'.repeat(width), 'dim', color)\n}\n\nfunction paint(\n value: string,\n colorName: keyof typeof colors | undefined,\n enabled: boolean,\n): string {\n if (!enabled || !colorName) return value\n return `${colors[colorName]}${value}${colors.reset}`\n}\n\nfunction visibleLength(value: string): number {\n return stripAnsi(value).length\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(ansiPattern, '')\n}\n\nfunction fitAnsi(value: string, width: number): string {\n if (visibleLength(value) <= width) return value\n let out = ''\n let visible = 0\n let cursor = 0\n // An escape sequence must be copied whole and counted as zero visible columns; truncating\n // inside one would emit a half-sequence the terminal interprets against the next line.\n for (const match of value.matchAll(ansiPattern)) {\n const text = value.slice(cursor, match.index)\n const remaining = width - 1 - visible\n out += text.slice(0, remaining)\n visible += Math.min(text.length, remaining)\n if (text.length > remaining) break\n out += match[0]\n cursor = match.index + match[0].length\n }\n if (visible < width - 1) out += value.slice(cursor, cursor + width - 1 - visible)\n out += '~'\n if (out.includes('\\x1b[') && !out.endsWith(colors.reset)) out += colors.reset\n return out\n}\n","/**\n * The interactive side of the supervisor-run TUI: a keypress/mouse loop over the frames\n * `./top-frame` renders, plus the operator controls that write back to the run — steer a live\n * worker, cancel one worker, and request cancellation of a whole run.\n *\n * The controls go through the owned run layout: steers via `writeWorkerSteer` (the durable inbox\n * append) and worker cancellation via `cancelWorker` (the acknowledged operation the runtime's\n * turn loop applies). Run-level cancellation targets the ROOT, which has no acknowledged runtime\n * path yet for a non-retained tree — it stays a `cancel.request.json` write inside the run\n * directory for a host process to honor. Nothing here joins a path from the workspace root.\n *\n * Extracted from the `loops` repo (`src/top.ts`). The module-level singletons are the origin's\n * shape and are kept: this drives one terminal, and `runTopApp` is its one entry point.\n *\n * @experimental\n */\n\nimport { randomUUID } from 'node:crypto'\nimport { hostname, userInfo } from 'node:os'\nimport { resolve } from 'node:path'\nimport { emitKeypressEvents } from 'node:readline'\nimport { cancelRun } from '../runtime/supervise/run-cancellation'\nimport { cancelWorker, writeWorkerSteer } from '../runtime/supervise/run-layout'\nimport { type RenderTarget, renderTopFrameWithLayout } from './top-frame'\nimport { loadTopSnapshot, type TopSnapshot } from './top-snapshot'\n\ninterface UiState {\n root: string\n color: boolean\n focus: 'supervisors' | 'workers'\n mode: 'overview' | 'detail' | 'log'\n selectedSupervisorId: string | undefined\n selectedWorkerId: string | undefined\n notice: string | undefined\n steerInput: {\n active: boolean\n value: string\n }\n}\n\n/** @experimental How the app was invoked. Defaults read `process.argv` / `process.cwd()`. */\ninterface TopAppOptions {\n readonly argv?: readonly string[]\n readonly cwd?: string\n}\n\nlet state: UiState = initialState([], process.cwd())\nlet snapshot: TopSnapshot = {\n root: state.root,\n generatedAt: 0,\n supervisors: [],\n completeness: 'complete',\n diagnostics: [],\n discovered: 0,\n loaded: 0,\n}\nlet targets: RenderTarget[] = []\nlet timer: NodeJS.Timeout | undefined\n\n/**\n * Render exactly one frame and return it. This is the non-interactive path — `--once`, a pipe, a\n * test — so it never touches raw mode, the alternate screen, or `process.exit`.\n */\nfunction renderTopOnce(options: TopAppOptions = {}): string {\n const args = [...(options.argv ?? process.argv.slice(2))]\n state = initialState(args, options.cwd ?? process.cwd())\n snapshot = loadTopSnapshot(state.root)\n clampSelection()\n return renderTopFrameWithLayout(snapshot, {\n color: state.color,\n width: process.stdout.columns ?? 128,\n focus: state.focus,\n mode: state.mode,\n ...(state.selectedSupervisorId ? { selectedSupervisorId: state.selectedSupervisorId } : {}),\n ...(state.selectedWorkerId ? { selectedWorkerId: state.selectedWorkerId } : {}),\n steerInput: renderSteerInputState(),\n }).frame\n}\n\n/**\n * Run the TUI. With a TTY on both ends and no `--once` this takes over the terminal until `q`;\n * otherwise it writes a single frame to stdout and returns.\n */\nexport function runTopApp(options: TopAppOptions = {}): void {\n const args = [...(options.argv ?? process.argv.slice(2))]\n if (!process.stdout.isTTY || !process.stdin.isTTY || args.includes('--once')) {\n process.stdout.write(renderTopOnce(options))\n return\n }\n state = initialState(args, options.cwd ?? process.cwd())\n snapshot = loadTopSnapshot(state.root)\n start()\n}\n\nfunction initialState(args: readonly string[], cwd: string): UiState {\n const rootArg = args.find((arg) => !arg.startsWith('-'))\n return {\n root: resolve(rootArg ?? cwd),\n color: Boolean(process.stdout.isTTY) && !args.includes('--no-color'),\n focus: args.includes('--detail') ? 'workers' : 'supervisors',\n mode: args.includes('--log') ? 'log' : args.includes('--detail') ? 'detail' : 'overview',\n selectedSupervisorId: undefined,\n selectedWorkerId: undefined,\n notice: undefined,\n steerInput: { active: false, value: '' },\n }\n}\n\nfunction start(): void {\n process.stdout.write('\\x1b[?1049h\\x1b[?25l\\x1b[?1000h\\x1b[?1006h')\n emitKeypressEvents(process.stdin)\n process.stdin.setRawMode(true)\n process.stdin.resume()\n process.stdin.on('keypress', onKey)\n process.stdin.on('data', onData)\n process.on('SIGINT', stop)\n draw()\n timer = setInterval(draw, 1000)\n}\n\nfunction stop(): void {\n if (timer) clearInterval(timer)\n process.stdin.setRawMode(false)\n process.stdout.write('\\x1b[?1000l\\x1b[?1006l\\x1b[?25h\\x1b[?1049l')\n process.exit(0)\n}\n\nfunction draw(): void {\n snapshot = loadTopSnapshot(state.root)\n clampSelection()\n const rendered = renderTopFrameWithLayout(snapshot, {\n width: process.stdout.columns ?? 128,\n height: process.stdout.rows ?? 42,\n color: state.color,\n focus: state.focus,\n mode: state.mode,\n ...(state.notice ? { notice: state.notice } : {}),\n ...(state.selectedSupervisorId ? { selectedSupervisorId: state.selectedSupervisorId } : {}),\n ...(state.selectedWorkerId ? { selectedWorkerId: state.selectedWorkerId } : {}),\n steerInput: renderSteerInputState(),\n })\n targets = rendered.targets\n process.stdout.write(`\\x1b[2J\\x1b[H${rendered.frame}`)\n}\n\nfunction onKey(str: string, key: { name?: string; ctrl?: boolean }): void {\n state.notice = undefined\n if (key.ctrl && key.name === 'c') stop()\n if (state.steerInput.active) {\n handleSteerInput(str, key)\n draw()\n return\n }\n if (key.name === 'q' || key.name === 'escape') stop()\n if (key.name === 'tab') {\n state.focus = state.focus === 'supervisors' ? 'workers' : 'supervisors'\n } else if (key.name === 'up') {\n moveSelection(-1)\n } else if (key.name === 'down') {\n moveSelection(1)\n } else if (key.name === 'left') {\n moveSupervisor(-1)\n } else if (key.name === 'right') {\n moveSupervisor(1)\n } else if (key.name === 'return') {\n state.mode = 'detail'\n state.focus = 'workers'\n } else if (key.name === 'o') {\n state.mode = 'overview'\n } else if (key.name === 'l') {\n state.mode = 'log'\n } else if (key.name === 's') {\n startSteerInput()\n } else if (key.name === 'c') {\n requestCancel()\n }\n draw()\n}\n\nfunction handleSteerInput(str: string, key: { name?: string; ctrl?: boolean }): void {\n if (key.name === 'escape') {\n state.steerInput = { active: false, value: '' }\n return\n }\n if (key.name === 'return') {\n submitSteerInput()\n return\n }\n if (key.name === 'backspace') {\n state.steerInput.value = state.steerInput.value.slice(0, -1)\n return\n }\n if (key.ctrl && key.name === 'u') {\n state.steerInput.value = ''\n return\n }\n if (\n key.ctrl ||\n key.name === 'tab' ||\n key.name === 'up' ||\n key.name === 'down' ||\n key.name === 'left' ||\n key.name === 'right'\n ) {\n return\n }\n if (!str || str === '\\r' || str === '\\n') return\n if ([...str].every((char) => char >= ' ' && char !== '\\x7f')) state.steerInput.value += str\n}\n\nfunction onData(data: Buffer): void {\n const click = parseMouse(data.toString('utf8'))\n if (!click) return\n const target = targets.find((candidate) => candidate.row === click.row)\n if (!target) return\n state.notice = undefined\n if (target.kind === 'supervisor') {\n state.focus = 'supervisors'\n state.selectedSupervisorId = target.id\n state.selectedWorkerId = undefined\n } else {\n state.focus = 'workers'\n state.mode = 'detail'\n state.selectedSupervisorId = target.supervisorId\n state.selectedWorkerId = target.id\n }\n draw()\n}\n\nfunction startSteerInput(): void {\n state.mode = 'detail'\n state.focus = 'workers'\n if (!selectedSupervisor()) {\n state.notice = 'no supervisor selected'\n return\n }\n if (!selectedWorker()) {\n state.notice = 'no worker selected'\n return\n }\n state.steerInput = { active: true, value: '' }\n}\n\nfunction submitSteerInput(): void {\n const supervisor = selectedSupervisor()\n const worker = selectedWorker()\n const message = state.steerInput.value\n state.steerInput = { active: false, value: '' }\n if (!supervisor) {\n state.notice = 'no supervisor selected'\n return\n }\n if (!worker) {\n state.notice = 'no worker selected'\n return\n }\n try {\n // The exact worker id routes this operation to the one manager that owns the child.\n const written = writeWorkerSteer(state.root, supervisor.id, worker.id, {\n operationId: randomUUID(),\n message,\n source: 'agent-runtime-top',\n })\n state.notice = `steer queued for ${supervisor.id}/${worker.label} (op ${written.request.operationId})`\n } catch (err) {\n state.notice = `steer failed: ${err instanceof Error ? err.message : String(err)}`\n }\n}\n\nfunction parseMouse(raw: string): { col: number; row: number } | undefined {\n // ESC is the literal first byte of an SGR mouse report; matching the control character IS the\n // parse, so the control-character rule does not apply to a terminal escape decoder.\n // biome-ignore lint/suspicious/noControlCharactersInRegex: SGR mouse reports begin with ESC\n const match = /\\x1b\\[<(\\d+);(\\d+);(\\d+)([mM])/.exec(raw)\n if (match?.[4] !== 'M') return undefined\n const col = Number(match[2])\n const row = Number(match[3])\n if (!Number.isFinite(col) || !Number.isFinite(row)) return undefined\n return { col: col - 1, row: row - 1 }\n}\n\nfunction moveSelection(delta: number): void {\n if (state.focus === 'supervisors') {\n moveSupervisor(delta)\n return\n }\n const supervisor = selectedSupervisor()\n if (!supervisor || supervisor.workers.length === 0) return\n const current = Math.max(\n 0,\n supervisor.workers.findIndex((worker) => worker.id === state.selectedWorkerId),\n )\n const next = wrap(current + delta, supervisor.workers.length)\n const worker = supervisor.workers[next]\n if (worker) state.selectedWorkerId = worker.id\n}\n\nfunction moveSupervisor(delta: number): void {\n if (snapshot.supervisors.length === 0) return\n const current = Math.max(\n 0,\n snapshot.supervisors.findIndex((supervisor) => supervisor.id === state.selectedSupervisorId),\n )\n const next = wrap(current + delta, snapshot.supervisors.length)\n const supervisor = snapshot.supervisors[next]\n if (!supervisor) return\n state.selectedSupervisorId = supervisor.id\n state.selectedWorkerId = supervisor.workers[0]?.id\n}\n\nfunction clampSelection(): void {\n if (snapshot.supervisors.length === 0) {\n state.selectedSupervisorId = undefined\n state.selectedWorkerId = undefined\n return\n }\n const supervisor = selectedSupervisor() ?? snapshot.supervisors[0]\n if (!supervisor) return\n state.selectedSupervisorId = supervisor.id\n const worker =\n supervisor.workers.find((candidate) => candidate.id === state.selectedWorkerId) ??\n supervisor.workers[0]\n state.selectedWorkerId = worker?.id\n}\n\nfunction selectedSupervisor(): TopSnapshot['supervisors'][number] | undefined {\n return snapshot.supervisors.find((supervisor) => supervisor.id === state.selectedSupervisorId)\n}\n\nfunction selectedWorker(): TopSnapshot['supervisors'][number]['workers'][number] | undefined {\n const supervisor = selectedSupervisor()\n return supervisor?.workers.find((worker) => worker.id === state.selectedWorkerId)\n}\n\nfunction renderSteerInputState(): { active: boolean; value: string; workerLabel?: string } {\n const worker = selectedWorker()\n return {\n active: state.steerInput.active,\n value: state.steerInput.value,\n ...(worker?.label ? { workerLabel: worker.label } : {}),\n }\n}\n\nfunction requestCancel(): void {\n const supervisor = selectedSupervisor()\n if (!supervisor) {\n state.notice = 'no supervisor selected'\n return\n }\n if (supervisor.status !== 'running') {\n state.notice = `${supervisor.id} is ${supervisor.status}; no cancel request written`\n return\n }\n // Worker focus cancels ONE worker through the acknowledged runtime path: the request lands in\n // the run layout's cancellation inbox, the run's own turn loop applies the abort to exactly\n // that worker's subtree, and the acknowledgement records what it proved.\n const worker = state.focus === 'workers' ? selectedWorker() : undefined\n if (worker) {\n if (worker.status !== 'running') {\n state.notice = `${worker.label} is ${worker.status}; nothing to cancel`\n return\n }\n // The request names the exact node id, so it routes to the manager that owns the worker at\n // ANY depth — the owning manager's turn loop applies the abort to exactly that subtree.\n try {\n const record = cancelWorker(supervisor.stateDir, worker.id, randomUUID(), {\n reason: 'operator requested cancel from TUI',\n source: 'agent-runtime-top',\n })\n state.notice =\n record.effect === 'unknown'\n ? `cancel queued for ${supervisor.id}/${worker.label} (op ${record.operationId}); awaiting runtime acknowledgement`\n : `cancel ${record.effect} for ${supervisor.id}/${worker.label} (op ${record.operationId})`\n } catch (err) {\n state.notice = `cancel request failed: ${err instanceof Error ? err.message : String(err)}`\n }\n return\n }\n // Supervisor focus cancels the WHOLE run through the same acknowledged contract: the request\n // lands in the run layout, the run's root manager aborts the whole tree through the one cascade\n // controller it already has, and `supervise()` records the terminal effect.\n try {\n const record = cancelRun(supervisor.stateDir, randomUUID(), {\n reason: 'operator requested cancel from TUI',\n source: 'agent-runtime-top',\n operator: `${userInfo().username}@${hostname()}`,\n })\n state.notice =\n record.effect === 'unknown'\n ? `run cancel queued for ${supervisor.id} (op ${record.operationId}); awaiting runtime acknowledgement`\n : `run cancel ${record.effect} for ${supervisor.id} (op ${record.operationId})`\n } catch (err) {\n state.notice = `cancel request failed: ${err instanceof Error ? err.message : String(err)}`\n }\n}\n\nfunction wrap(value: number, size: number): number {\n return ((value % size) + size) % size\n}\n","#!/usr/bin/env node\n\n/**\n * `agent-runtime-top` — watch the supervisor runs of one workspace.\n *\n * agent-runtime-top [root] [--once] [--no-color] [--detail] [--log]\n *\n * `root` is the workspace whose `.agent/supervisor/` runs are shown; it defaults to the current\n * directory. With a TTY on both ends the view refreshes every second and takes the keys it prints\n * in its header; otherwise (a pipe, `--once`) it writes one frame and exits.\n *\n * @experimental\n */\n\nimport { runTopApp } from './top-app'\nimport { runTopWeb } from './top-web'\n\nif (process.argv.includes('--web')) await runTopWeb(process.argv.slice(2))\nelse runTopApp()\n"],"mappings":"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"}
@@ -1,4 +1,165 @@
1
- import { Gv as RouteFlowEvent, Hr as provisionSupervisor, L as Spend, M as Budget, Wu as PursuitProjection } from "../types-S3RbyJ4x.js";
1
+ import { $i as ResultBlobStore, Ju as PursuitRunProjection, Jv as RouteFlowEvent, Kx as HarnessTranscriptEvidence, L as Spend, M as Budget, Ux as HarnessTranscriptArtifact, Wr as provisionSupervisor, Wu as PursuitNodeProjection, Zb as ExecutionBindingReceipt, ix as ProfileMaterializationReceipt, qu as PursuitProjection, rx as NodeExecutionIdentity } from "../types-QS0ItMiE.js";
2
+ import { _ as AgentCandidateArtifactPort } from "../workspace-streams-DbKiDOWA.js";
3
+ type BaselineAuthority = {
4
+ readonly kind: 'retained-workspace' | 'git-object' | 'git-diff';
5
+ readonly ref: string;
6
+ };
7
+ type FileIdentity = {
8
+ readonly sha256: string;
9
+ readonly byteLength: number;
10
+ };
11
+ interface TopInspection {
12
+ readonly coverage: {
13
+ readonly status: 'complete' | 'partial' | 'missing';
14
+ readonly source: string;
15
+ readonly reason?: string;
16
+ readonly code?: 'source-mismatch' | 'source-unbound';
17
+ readonly ref?: string;
18
+ };
19
+ readonly rows?: readonly (TopTranscriptRow & {
20
+ readonly id: string;
21
+ readonly sessionId: string;
22
+ readonly part: number;
23
+ })[];
24
+ readonly context?: readonly TopTranscriptRow[];
25
+ readonly files?: {
26
+ readonly scope: 'workspace' | 'none';
27
+ readonly complete: boolean;
28
+ readonly reason?: string;
29
+ readonly entries: readonly (FileIdentity & {
30
+ readonly path: string;
31
+ readonly before?: FileIdentity & {
32
+ readonly source: BaselineAuthority;
33
+ };
34
+ })[];
35
+ };
36
+ readonly file?: FileIdentity & {
37
+ readonly path: string;
38
+ readonly content: string;
39
+ readonly before?: FileIdentity & {
40
+ readonly content: string;
41
+ readonly source: BaselineAuthority;
42
+ };
43
+ };
44
+ }
45
+ interface TopTranscriptRow {
46
+ at: string;
47
+ event: {
48
+ kind: string;
49
+ text?: string;
50
+ provenance?: string;
51
+ source?: string;
52
+ actor?: string;
53
+ toolCallId?: string;
54
+ toolName?: string;
55
+ args?: unknown;
56
+ result?: unknown;
57
+ };
58
+ }
59
+ type TopSessionReader = (artifact: HarnessTranscriptArtifact, signal?: AbortSignal) => Promise<readonly HarnessRowsSession[]>;
60
+ /** Task, result and progress use the same projection for file-backed and SQL-backed runs. */
61
+ export declare function readTopAgentHistory(worker: WorkerView, blobs?: Pick<ResultBlobStore, 'get'>, node?: PursuitNodeProjection): Promise<TopTranscriptRow[]>;
62
+ /** Resolve ordinary Runtime transcript evidence, never a product-specific capture registry. */
63
+ export declare function readTopAgentInspection({ worker, runId, blobs, readSessions, artifacts, signal }: {
64
+ worker: WorkerView;
65
+ runId: string;
66
+ blobs: Pick<ResultBlobStore, 'get'>;
67
+ readSessions: TopSessionReader;
68
+ artifacts?: AgentCandidateArtifactPort;
69
+ signal?: AbortSignal;
70
+ }): Promise<TopInspection>;
71
+ /** One selected-agent mapping for filesystem and API transports; no execution or I/O. */
72
+ export declare function topAgentWorker(run: SupervisorView, workerId: string): WorkerView | undefined;
73
+ type TopAgentMetadata = Omit<TopInspection, 'rows' | 'context'> & {
74
+ readonly context: readonly TopTranscriptRow[];
75
+ };
76
+ /** Metadata keeps full recorded context while the conversation can show compact attribution. */
77
+ export declare function topAgentMetadata(inspection: TopInspection | undefined, recorded: readonly TopTranscriptRow[]): TopAgentMetadata;
78
+ interface TopAgentRowsFrame {
79
+ readonly generation: number;
80
+ readonly events: readonly (TopTranscriptRow & {
81
+ readonly seq: number;
82
+ })[];
83
+ readonly lastSeq: number;
84
+ readonly alive: boolean;
85
+ readonly window: 'verified-native' | 'recorded-tail';
86
+ readonly coverage?: TopInspection['coverage'];
87
+ }
88
+ /** Both HTTP transports share conversation selection, stable identity, sequence and batching. */
89
+ type TopAgentStreamFrame = {
90
+ readonly event: 'reset';
91
+ readonly data: {
92
+ readonly generation: number;
93
+ };
94
+ } | {
95
+ readonly event: 'rows';
96
+ readonly data: TopAgentRowsFrame;
97
+ };
98
+ /** Project selected conversation rows into ordered reset and row frames. */
99
+ export declare function createTopAgentStream(generation: number): {
100
+ reset: {
101
+ generation: number;
102
+ };
103
+ frame({ recorded, inspection, alive, includeContext }: {
104
+ recorded: readonly TopTranscriptRow[];
105
+ inspection?: TopInspection;
106
+ alive: boolean;
107
+ includeContext?: boolean;
108
+ }): readonly TopAgentStreamFrame[];
109
+ };
110
+ /** Actual recorded event time and cadence; absence means no event evidence, never file mtime. */
111
+ interface RecordedActivity {
112
+ readonly lastActivityAt?: number;
113
+ readonly medianEventGapMs?: number;
114
+ }
115
+ interface RecordedEvents {
116
+ readonly file: string;
117
+ readonly lines: string[];
118
+ readonly activity: RecordedActivity;
119
+ readonly firstActivityAt?: number;
120
+ }
121
+ /** The normalized subset consumed here; native decoding stays with harness-sessions. */
122
+ interface HarnessRowsSession {
123
+ readonly nativeSessionId: string;
124
+ readonly messages: readonly {
125
+ readonly id: string;
126
+ readonly at?: string | null;
127
+ readonly role: string;
128
+ readonly actor?: string;
129
+ readonly parts: readonly {
130
+ readonly type: string;
131
+ readonly text?: string;
132
+ readonly toolCallId?: string;
133
+ }[];
134
+ }[];
135
+ readonly toolCalls: readonly {
136
+ readonly id: string;
137
+ readonly name: string;
138
+ readonly startedAt?: string | null;
139
+ readonly endedAt?: string | null;
140
+ readonly input?: unknown;
141
+ readonly inputText?: string | null;
142
+ readonly result?: {
143
+ readonly output?: unknown;
144
+ readonly text?: string | null;
145
+ } | null;
146
+ }[];
147
+ }
148
+ type HarnessRowsGap = {
149
+ readonly sessionId: string;
150
+ readonly recordId: string;
151
+ readonly reason: string;
152
+ };
153
+ type HarnessSessionRow = TopTranscriptRow & {
154
+ readonly id: string;
155
+ readonly sessionId: string;
156
+ readonly part: number;
157
+ };
158
+ /** One ordered projection for every strict native reader, with explicit unrenderable evidence. */
159
+ export declare function harnessSessionRows(sessions: readonly HarnessRowsSession[]): {
160
+ rows: HarnessSessionRow[];
161
+ gaps: HarnessRowsGap[];
162
+ };
2
163
  interface TopSnapshot {
3
164
  readonly root: string;
4
165
  readonly generatedAt: number;
@@ -28,6 +189,7 @@ interface TopSnapshotDiagnostic {
28
189
  readonly runId?: string;
29
190
  }
30
191
  interface SupervisorBase {
192
+ readonly reason?: string;
31
193
  readonly id: string;
32
194
  readonly status: string;
33
195
  readonly task: string;
@@ -58,7 +220,6 @@ interface SupervisorView extends SupervisorBase {
58
220
  readonly lastRoute?: Extract<RouteFlowEvent, {
59
221
  kind: 'stopped' | 'unrouted';
60
222
  }>;
61
- readonly reason?: string;
62
223
  /** Epoch milliseconds of actual recorded executor activity, independent of tail truncation. */
63
224
  readonly lastActivityAt?: number;
64
225
  /** Median gap between all recorded activity instants, including real zero gaps. */
@@ -72,6 +233,10 @@ interface SupervisorView extends SupervisorBase {
72
233
  readonly totals: SupervisorTotals;
73
234
  }
74
235
  interface WorkerView {
236
+ readonly harnessTranscript?: HarnessTranscriptEvidence;
237
+ readonly identity?: NodeExecutionIdentity;
238
+ readonly materialization?: ProfileMaterializationReceipt;
239
+ readonly executionBindings?: readonly ExecutionBindingReceipt[];
75
240
  readonly id: string;
76
241
  readonly label: string;
77
242
  readonly eventFile?: string;
@@ -129,12 +294,14 @@ type TopJournalEvent = {
129
294
  readonly at?: string;
130
295
  } & ({
131
296
  readonly kind: 'spawned';
297
+ readonly identity?: NodeExecutionIdentity;
132
298
  readonly parent?: string;
133
299
  readonly label?: string;
134
300
  readonly budget?: unknown;
135
301
  readonly runtime?: string;
136
302
  } | {
137
303
  readonly kind: 'settled';
304
+ readonly harnessTranscript?: HarnessTranscriptEvidence;
138
305
  readonly status?: string;
139
306
  readonly outRef?: string;
140
307
  readonly verdict?: unknown;
@@ -148,10 +315,25 @@ type TopJournalEvent = {
148
315
  readonly kind: 'metered';
149
316
  readonly spend?: unknown;
150
317
  readonly accountingOnly?: boolean;
318
+ } | {
319
+ readonly kind: 'materialized';
320
+ readonly receipt: ProfileMaterializationReceipt;
321
+ } | {
322
+ readonly kind: 'seat-materialized';
323
+ readonly receipt: ProfileMaterializationReceipt;
324
+ } | {
325
+ readonly kind: 'execution-bound';
326
+ readonly binding: ExecutionBindingReceipt;
151
327
  } | {
152
328
  readonly kind: 'progress';
153
329
  readonly spend?: unknown;
154
330
  });
331
+ interface SupervisorState extends SupervisorBase {
332
+ readonly result?: {
333
+ readonly spentUsd?: number;
334
+ readonly spentTokens?: number;
335
+ };
336
+ }
155
337
  /** Read a point-in-time view without writing to the run. Missing or partial sources report
156
338
  * bounded diagnostics, and live event readers cache append offsets. `now` controls elapsed time.
157
339
  */
@@ -161,6 +343,20 @@ export declare function loadTopSnapshot(rootDir: string, options: {
161
343
  now?: number;
162
344
  format?: 'workflow' | 'journal';
163
345
  }): Promise<TopSnapshot>;
346
+ /** Combine supervisor projections and source diagnostics into one snapshot. */
347
+ declare function topSnapshot(root: string, now: number, supervisors: SupervisorView[], diagnostics?: TopSnapshotDiagnostic[], discovered?: number, pursuit?: PursuitProjection): TopSnapshot;
348
+ /** Project committed lifecycle and spend evidence into one supervisor view. */
349
+ declare function buildSupervisorView(state: SupervisorState, stateDir: string, events: readonly TopJournalEvent[], progressTail: readonly string[], now: number, workerEventTails?: Map<string, RecordedEvents>, accounting?: PursuitRunProjection): SupervisorView;
350
+ /** Validate supported journal lifecycle and accounting event shapes. */
351
+ declare function isSpawnEvent<T>(value: T): value is T & TopJournalEvent;
352
+ type TopInspectionSource = (request: {
353
+ readonly root: string;
354
+ readonly runId: string;
355
+ readonly workerId: string;
356
+ readonly signal?: AbortSignal;
357
+ }) => Promise<TopInspection>;
358
+ /** Interval for reconciling missed filesystem notifications in the live viewer. */
359
+ export declare const TOP_SNAPSHOT_RECONCILE_MS = 500;
164
360
  /** A reconnect always receives current truth; deltas replace changed roots atomically. */
165
361
  interface TopSnapshotFrame {
166
362
  readonly sequence: number;
@@ -174,11 +370,15 @@ interface TopWebOptions {
174
370
  readonly assets?: string;
175
371
  readonly host?: string;
176
372
  readonly port?: number;
373
+ /** Product-owned verified conversation reads; no execution or credential access. */
374
+ readonly source?: TopInspectionSource;
375
+ /** Canonical native decoding for ordinary Runtime transcript receipts. */
376
+ readonly readSessions?: TopSessionReader;
177
377
  }
178
378
  /** Read-only web transport over the same snapshots as the terminal. No execution or writes. */
179
379
  export declare function serveTopWeb(options: TopWebOptions): Promise<{
180
380
  url: string;
181
381
  close: () => Promise<void>;
182
382
  }>;
183
- export { type BudgetStats, type Distribution, type SpendStats, type SupervisorTotals, type SupervisorView, type TopJournalEvent, type TopSnapshot, type TopSnapshotCompleteness, type TopSnapshotDiagnostic, type TopSnapshotDiagnosticReason, type TopSnapshotDiagnosticSource, type TopSnapshotFrame, type TopWebOptions, type WorkerView, provisionSupervisor };
383
+ export { type BaselineAuthority, type BudgetStats, type Distribution, type FileIdentity, type HarnessRowsGap, type HarnessRowsSession, type HarnessSessionRow, type RecordedActivity, type RecordedEvents, type SpendStats, type SupervisorTotals, type SupervisorView, type TopAgentMetadata, type TopAgentRowsFrame, type TopAgentStreamFrame, type TopInspection, type TopInspectionSource, type TopJournalEvent, type TopSessionReader, type TopSnapshot, type TopSnapshotCompleteness, type TopSnapshotDiagnostic, type TopSnapshotDiagnosticReason, type TopSnapshotDiagnosticSource, type TopSnapshotFrame, type SupervisorState as TopSupervisorState, type TopTranscriptRow, type TopWebOptions, type WorkerView, isSpawnEvent as isTopJournalEvent, topSnapshot as projectTopSnapshot, buildSupervisorView as projectTopSupervisor, provisionSupervisor };
184
384
  //# sourceMappingURL=index.d.ts.map
package/dist/tui/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as provisionSupervisor } from "../provision-supervisor-DP5U58V4.js";
2
- import { i as loadTopSnapshot, n as serveTopWeb } from "../top-web-DK6lTMHG.js";
3
- export { loadTopSnapshot, provisionSupervisor, serveTopWeb };
1
+ import { t as provisionSupervisor } from "../provision-supervisor-BoOIYwov.js";
2
+ import { _ as topAgentMetadata, a as buildSupervisorView, d as topSnapshot, g as readTopAgentInspection, h as readTopAgentHistory, m as harnessSessionRows, o as isSpawnEvent, p as createTopAgentStream, r as serveTopWeb, s as loadTopSnapshot, t as TOP_SNAPSHOT_RECONCILE_MS, v as topAgentWorker } from "../top-web-B0a7QfaZ.js";
3
+ export { TOP_SNAPSHOT_RECONCILE_MS, createTopAgentStream, harnessSessionRows, isSpawnEvent as isTopJournalEvent, loadTopSnapshot, topSnapshot as projectTopSnapshot, buildSupervisorView as projectTopSupervisor, provisionSupervisor, readTopAgentHistory, readTopAgentInspection, serveTopWeb, topAgentMetadata, topAgentWorker };