{"version":3,"sources":["../src/app.tsx"],"names":[],"mappings":"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","file":"app-7ZRVYDDE.mjs","sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { Box, Text, useApp, useInput } from \"ink\";\n\nimport { initialExpandedSet } from \"./expand.js\";\nimport { mapInputToAction } from \"./keymap.js\";\nimport type { TuiTraceModel, TuiTraceNode } from \"./types.js\";\n\nfunction collectVisible(\n  roots: TuiTraceNode[],\n  expanded: ReadonlySet<string>,\n  out: TuiTraceNode[],\n): void {\n  for (const n of roots) {\n    out.push(n);\n    if (n.children.length > 0 && expanded.has(n.id)) {\n      collectVisible(n.children, expanded, out);\n    }\n  }\n}\n\nfunction formatDur(ms: number | undefined): string {\n  if (ms === undefined || !Number.isFinite(ms)) return \"-\";\n  if (ms < 1000) return `${Math.round(ms)}ms`;\n  return `${(ms / 1000).toFixed(2)}s`;\n}\n\nexport interface TraceViewerAppProps {\n  model: TuiTraceModel;\n  onExit?: () => void;\n}\n\nexport function TraceViewerApp(props: TraceViewerAppProps): React.ReactElement {\n  const { model, onExit } = props;\n  const { exit } = useApp();\n  const [expanded, setExpanded] = useState(() => initialExpandedSet(model));\n  const [sel, setSel] = useState(0);\n  const [showHelp, setShowHelp] = useState(false);\n  const [showDetails, setShowDetails] = useState(true);\n\n  const visible = useMemo(() => {\n    const out: TuiTraceNode[] = [];\n    collectVisible(model.nodes, expanded, out);\n    return out;\n  }, [model.nodes, expanded]);\n\n  useEffect(() => {\n    if (visible.length === 0) {\n      setSel(0);\n      return;\n    }\n    setSel((i) => Math.min(i, visible.length - 1));\n  }, [visible.length]);\n\n  const safeSel = visible.length === 0 ? 0 : Math.min(sel, visible.length - 1);\n  const selected = visible[safeSel];\n\n  useInput((input, key) => {\n    const action = mapInputToAction(input, key);\n    switch (action) {\n      case \"quit\":\n        onExit?.();\n        exit();\n        break;\n      case \"help\":\n        setShowHelp((h) => !h);\n        break;\n      case \"details\":\n        setShowDetails((d) => !d);\n        break;\n      case \"up\":\n        setSel((i) => Math.max(0, i - 1));\n        break;\n      case \"down\":\n        setSel((i) => Math.min(Math.max(0, visible.length - 1), i + 1));\n        break;\n      case \"expand\": {\n        const cur = visible.length === 0 ? undefined : visible[safeSel];\n        if (cur?.children.length) {\n          setExpanded((prev) => new Set(prev).add(cur.id));\n        }\n        break;\n      }\n      case \"collapse\": {\n        const cur = visible.length === 0 ? undefined : visible[safeSel];\n        if (cur && expanded.has(cur.id)) {\n          setExpanded((prev) => {\n            const n = new Set(prev);\n            n.delete(cur.id);\n            return n;\n          });\n        }\n        break;\n      }\n      case \"toggle\": {\n        const cur = visible.length === 0 ? undefined : visible[safeSel];\n        if (cur?.children.length) {\n          setExpanded((prev) => {\n            const n = new Set(prev);\n            if (n.has(cur.id)) n.delete(cur.id);\n            else n.add(cur.id);\n            return n;\n          });\n        }\n        break;\n      }\n      default:\n        break;\n    }\n  });\n\n  const indent = (d: number) => \"  \".repeat(d);\n\n  return (\n    <Box flexDirection=\"column\">\n      <Box flexDirection=\"column\" marginBottom={1}>\n        <Text bold>AgentInspect Trace Viewer</Text>\n        <Text>\n          {model.name ?? \"(unnamed)\"} · {model.runId} · {model.status ?? \"unknown\"} ·{\" \"}\n          {formatDur(model.durationMs)}\n        </Text>\n      </Box>\n\n      {showHelp ? (\n        <Box flexDirection=\"column\" marginBottom={1} borderStyle=\"round\" paddingX={1}>\n          <Text bold>Keys</Text>\n          <Text>↑/↓ or j/k — move · ←/→ or h/l — collapse/expand · space — toggle branch</Text>\n          <Text>enter — expand · d — toggle details · ? — this help · q / Ctrl+C / esc — quit</Text>\n        </Box>\n      ) : null}\n\n      <Box flexDirection=\"row\">\n        <Box flexDirection=\"column\" width=\"55%\">\n          <Text dimColor>Execution tree</Text>\n          {visible.length === 0 ? (\n            <Text dimColor>No steps recorded</Text>\n          ) : (\n            visible.map((n, i) => {\n              const branch =\n                n.children.length === 0\n                  ? \"  \"\n                  : expanded.has(n.id)\n                    ? \"▼ \"\n                    : \"▶ \";\n              const row = `${indent(n.depth)}${branch}${n.name}`;\n              const mark = i === safeSel ? \"› \" : \"  \";\n              const status = n.status ?? \"?\";\n              const line = `${mark}${row} (${status})`;\n              return (\n                <Text key={n.id} inverse={i === safeSel}>\n                  {line}\n                </Text>\n              );\n            })\n          )}\n        </Box>\n\n        {showDetails ? (\n          <Box flexDirection=\"column\" paddingLeft={2} width=\"45%\">\n            <Text dimColor>Details</Text>\n            {selected ? (\n              <>\n                <Text>\n                  <Text bold>name: </Text>\n                  {selected.name}\n                </Text>\n                <Text>\n                  <Text bold>type: </Text>\n                  {selected.type ?? \"-\"}\n                </Text>\n                <Text>\n                  <Text bold>status: </Text>\n                  {selected.status ?? \"-\"}\n                </Text>\n                <Text>\n                  <Text bold>duration: </Text>\n                  {formatDur(selected.durationMs)}\n                </Text>\n                {selected.error ? (\n                  <Text>\n                    <Text bold>error: </Text>\n                    {selected.error}\n                  </Text>\n                ) : null}\n                {selected.metadata && Object.keys(selected.metadata).length > 0 ? (\n                  <Text>\n                    <Text bold>metadata: </Text>\n                    {JSON.stringify(selected.metadata)}\n                  </Text>\n                ) : null}\n              </>\n            ) : (\n              <Text dimColor>Select a step</Text>\n            )}\n          </Box>\n        ) : null}\n      </Box>\n\n      <Box marginTop={1}>\n        <Text dimColor>\n          ↑/↓ or j/k move · enter/space expand · h/l collapse/expand · d details · ? help · q quit\n        </Text>\n      </Box>\n    </Box>\n  );\n}\n"]}