{"version":3,"sources":["../src/trace-metadata.ts","../src/trace-filter.ts","../src/stats.ts","../src/timeline.ts","../src/what.ts"],"names":["pickCorrelation"],"mappings":"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","file":"chunk-7YYS742B.mjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  TraceEvent,\n  TraceMetadata,\n  TraceMetadataStatus,\n  RunSummary,\n  StepType,\n  StepStatus,\n} from \"./types.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n  return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction parseIsoToMs(value: string | undefined): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Date.parse(value);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport async function extractMetadata(\n  filePath: string,\n  _quickScan?: boolean,\n): Promise<TraceMetadata> {\n  const stats = await stat(filePath);\n\n  let runIdFromFile = path.basename(filePath);\n  if (runIdFromFile.endsWith(\".jsonl\")) {\n    runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n  }\n\n  const raw = await readFile(filePath, \"utf-8\");\n  const parsedTrace = parseTraceJsonl(raw, { warnings: false });\n\n  let runId: string | undefined;\n  let name: string | undefined;\n  let startedAt: number | undefined;\n  let endedAt: number | undefined;\n  let explicitDurationMs: number | undefined;\n\n  let hasRunStarted = false;\n  let hasRunCompleted = false;\n  let runCompletedStatus: \"success\" | \"error\" | undefined;\n  let anyStepError = false;\n  const anyKnownEvent = parsedTrace.sourceEventCount > 0;\n  let persistedStatus: TraceMetadataStatus | undefined;\n\n  const persistedRun = parsedTrace.persisted.find(\n    (event) => event.kind === \"RUN\",\n  );\n  if (persistedRun) {\n    runId = persistedRun.runId;\n    if (persistedRun.name.trim() !== \"\") {\n      name = persistedRun.name;\n    }\n    startedAt =\n      parseIsoToMs(persistedRun.startedAt) ??\n      parseIsoToMs(persistedRun.timestamp);\n    endedAt = parseIsoToMs(persistedRun.endedAt);\n    if (isFiniteNumber(persistedRun.durationMs)) {\n      explicitDurationMs = persistedRun.durationMs;\n      if (endedAt === undefined && startedAt !== undefined) {\n        endedAt = startedAt + persistedRun.durationMs;\n      }\n    }\n    if (persistedRun.status === \"ok\") persistedStatus = \"success\";\n    else if (persistedRun.status === \"error\") persistedStatus = \"error\";\n    else if (persistedRun.status === \"running\") persistedStatus = \"running\";\n    else if (persistedRun.status === \"unknown\") persistedStatus = \"unknown\";\n  } else {\n    runId = parsedTrace.persisted[0]?.runId;\n  }\n\n  for (const e of parsedTrace.events) {\n    if (\n      runId === undefined &&\n      typeof (e as { runId?: unknown }).runId === \"string\"\n    ) {\n      runId = (e as { runId: string }).runId;\n    }\n\n    if (e.event === \"run_started\") {\n      hasRunStarted = true;\n      const rs = e as RunStartedEvent;\n      if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n        name = rs.name;\n      }\n      if (isFiniteNumber(rs.startTime)) {\n        startedAt = rs.startTime;\n      } else if (isFiniteNumber(rs.timestamp)) {\n        startedAt = rs.timestamp;\n      }\n    }\n\n    if (e.event === \"run_completed\") {\n      hasRunCompleted = true;\n      const rc = e as RunCompletedEvent;\n      runCompletedStatus = rc.status;\n      if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n      else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n      if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n    }\n\n    if (e.event === \"step_completed\") {\n      const sc = e as StepCompletedEvent;\n      if (sc.status === \"error\") {\n        anyStepError = true;\n      }\n    }\n  }\n\n  const resolvedRunId = runId ?? runIdFromFile;\n\n  let status: TraceMetadataStatus = \"unknown\";\n  if (\n    hasRunCompleted &&\n    (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")\n  ) {\n    status = runCompletedStatus;\n  } else if (anyStepError) {\n    // If run_completed is missing, but at least one step failed, treat as error.\n    status = \"error\";\n  } else if (persistedStatus !== undefined) {\n    status = persistedStatus;\n  } else if (hasRunStarted && !hasRunCompleted) {\n    status = \"running\";\n  } else if (anyKnownEvent) {\n    status = \"unknown\";\n  } else {\n    status = \"unknown\";\n  }\n\n  const durationMs =\n    explicitDurationMs ??\n    (startedAt !== undefined &&\n    endedAt !== undefined &&\n    Number.isFinite(startedAt) &&\n    Number.isFinite(endedAt) &&\n    endedAt >= startedAt\n      ? endedAt - startedAt\n      : undefined);\n\n  return {\n    runId: resolvedRunId,\n    name,\n    status,\n    startedAt,\n    endedAt,\n    durationMs,\n    eventCount: parsedTrace.sourceEventCount,\n    filePath,\n    fileSize: stats.size,\n    createdAt: stats.birthtime,\n  };\n}\n\ntype StepAgg = {\n  type: StepType;\n  name: string;\n  status: StepStatus;\n  durationMs?: number;\n  parentId?: string;\n  tokensInput?: number;\n  tokensOutput?: number;\n  tokensTotal?: number;\n  tokensCached?: number;\n  tokensCacheWrite?: number;\n  tokensReasoning?: number;\n};\n\nconst ROOT_STEP_DEPTH = 0;\nconst MAX_RUN_SUMMARY_DEPTH = 1000;\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction resolveParentStepId(\n  step: StepAgg,\n  steps: ReadonlyMap<string, StepAgg>,\n): string | undefined {\n  const parentId = step.parentId;\n  if (typeof parentId !== \"string\" || parentId.trim() === \"\") {\n    return undefined;\n  }\n\n  return steps.has(parentId) ? parentId : undefined;\n}\n\n// Resolve ancestry iteratively so malformed cycles and deeply nested\n// valid traces cannot overflow the JavaScript call stack.\nfunction computeStepDepth(\n  stepId: string,\n  steps: ReadonlyMap<string, StepAgg>,\n  depthCache: Map<string, number>,\n): number {\n  const cached = depthCache.get(stepId);\n  if (cached !== undefined) return cached;\n\n  const ancestry: string[] = [];\n  const ancestryIndexes = new Map<string, number>();\n  let currentStepId = stepId;\n  let resolvedDepth: number | undefined;\n\n  while (resolvedDepth === undefined) {\n    const cachedDepth = depthCache.get(currentStepId);\n    if (cachedDepth !== undefined) {\n      resolvedDepth = cachedDepth;\n      continue;\n    }\n\n    const cycleStart = ancestryIndexes.get(currentStepId);\n    if (cycleStart !== undefined) {\n      const cycleStepIds = ancestry.splice(cycleStart);\n      for (const cycleStepId of cycleStepIds) {\n        depthCache.set(cycleStepId, ROOT_STEP_DEPTH);\n      }\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    const currentStep = steps.get(currentStepId);\n    if (!currentStep) {\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    ancestryIndexes.set(currentStepId, ancestry.length);\n    ancestry.push(currentStepId);\n\n    const parentStepId = resolveParentStepId(currentStep, steps);\n    if (parentStepId === undefined) {\n      ancestry.pop();\n      depthCache.set(currentStepId, ROOT_STEP_DEPTH);\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    currentStepId = parentStepId;\n  }\n\n  // Depth is parent depth + 1. Cap at a sane limit after cycles are resolved.\n  ancestry.reverse();\n  for (const ancestorStepId of ancestry) {\n    resolvedDepth = Math.min(MAX_RUN_SUMMARY_DEPTH, resolvedDepth + 1);\n    depthCache.set(ancestorStepId, resolvedDepth);\n  }\n\n  return depthCache.get(stepId) ?? ROOT_STEP_DEPTH;\n}\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n  const name =\n    typeof started?.name === \"string\" && started.name.trim() !== \"\"\n      ? started.name\n      : undefined;\n\n  const status: TraceMetadataStatus = lastCompleted\n    ? lastCompleted.status\n    : started\n      ? \"running\"\n      : \"unknown\";\n\n  const durationMs =\n    lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n      ? lastCompleted.durationMs\n      : undefined;\n\n  const startedAt =\n    started && isFiniteNumber(started.startTime)\n      ? started.startTime\n      : undefined;\n\n  const steps = new Map<string, StepAgg>();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      steps.set(s.stepId, {\n        type: s.type,\n        name: s.name,\n        status: \"running\",\n        parentId: s.parentId,\n        tokensInput:\n          isNonNegativeFiniteNumber(s.metadata?.tokens?.input)\n            ? s.metadata.tokens.input\n            : undefined,\n        tokensOutput:\n          isNonNegativeFiniteNumber(s.metadata?.tokens?.output)\n            ? s.metadata.tokens.output\n            : undefined,\n        tokensTotal: isNonNegativeFiniteNumber(s.metadata?.tokens?.total)\n          ? s.metadata.tokens.total\n          : undefined,\n        tokensCached: isNonNegativeFiniteNumber(s.metadata?.tokens?.cached)\n          ? s.metadata.tokens.cached\n          : undefined,\n        tokensCacheWrite: isNonNegativeFiniteNumber(\n          s.metadata?.tokens?.cacheWrite,\n        )\n          ? s.metadata.tokens.cacheWrite\n          : undefined,\n        tokensReasoning: isNonNegativeFiniteNumber(\n          s.metadata?.tokens?.reasoning,\n        )\n          ? s.metadata.tokens.reasoning\n          : undefined,\n      });\n    }\n  }\n\n  for (const e of events) {\n    if (e.event === \"step_completed\") {\n      const c = e as StepCompletedEvent;\n      const existing = steps.get(c.stepId);\n      if (!existing) continue;\n      existing.status = c.status;\n      existing.durationMs = c.durationMs;\n    }\n  }\n\n  let totalSteps = 0;\n  let llmSteps = 0;\n  let toolSteps = 0;\n  let logicSteps = 0;\n  let errorSteps = 0;\n  let maxDepth = 0;\n  let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n  let totalTokensInput = 0;\n  let totalTokensOutput = 0;\n  let totalTokensTotal = 0;\n  let totalTokensCached = 0;\n  let totalTokensCacheWrite = 0;\n  let totalTokensReasoning = 0;\n  let tokenBearingSteps = 0;\n  let stepsWithKnownTotal = 0;\n  let hasCachedTokens = false;\n  let hasCacheWriteTokens = false;\n  let hasReasoningTokens = false;\n\n  const depthCache = new Map<string, number>();\n\n  for (const [id, s] of steps.entries()) {\n    totalSteps += 1;\n    if (s.type === \"llm\") llmSteps += 1;\n    else if (s.type === \"tool\") toolSteps += 1;\n    else logicSteps += 1;\n\n    if (s.status === \"error\") errorSteps += 1;\n    const depth = computeStepDepth(id, steps, depthCache);\n    if (depth > maxDepth) maxDepth = depth;\n\n    if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n      if (!longestStep || s.durationMs > longestStep.durationMs) {\n        longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n      }\n    }\n\n    if (\n      s.tokensInput !== undefined ||\n      s.tokensOutput !== undefined ||\n      s.tokensTotal !== undefined ||\n      s.tokensCached !== undefined ||\n      s.tokensCacheWrite !== undefined ||\n      s.tokensReasoning !== undefined\n    ) {\n      tokenBearingSteps += 1;\n      if (s.tokensInput !== undefined) totalTokensInput += s.tokensInput;\n      if (s.tokensOutput !== undefined) totalTokensOutput += s.tokensOutput;\n\n      if (s.tokensTotal !== undefined) {\n        totalTokensTotal += s.tokensTotal;\n        stepsWithKnownTotal += 1;\n      } else if (s.tokensInput !== undefined && s.tokensOutput !== undefined) {\n        totalTokensTotal += s.tokensInput + s.tokensOutput;\n        stepsWithKnownTotal += 1;\n      }\n\n      if (s.tokensCached !== undefined) {\n        totalTokensCached += s.tokensCached;\n        hasCachedTokens = true;\n      }\n      if (s.tokensCacheWrite !== undefined) {\n        totalTokensCacheWrite += s.tokensCacheWrite;\n        hasCacheWriteTokens = true;\n      }\n      if (s.tokensReasoning !== undefined) {\n        totalTokensReasoning += s.tokensReasoning;\n        hasReasoningTokens = true;\n      }\n    }\n  }\n\n  const summary: RunSummary = {\n    runId,\n    name,\n    status,\n    durationMs,\n    totalSteps,\n    llmSteps,\n    toolSteps,\n    logicSteps,\n    errorSteps,\n    maxDepth,\n    ...(longestStep ? { longestStep } : {}),\n    ...(tokenBearingSteps > 0\n      ? {\n          totalTokens: {\n            input: totalTokensInput,\n            output: totalTokensOutput,\n            ...(stepsWithKnownTotal === tokenBearingSteps\n              ? { total: totalTokensTotal }\n              : {}),\n            ...(hasCachedTokens ? { cached: totalTokensCached } : {}),\n            ...(hasCacheWriteTokens\n              ? { cacheWrite: totalTokensCacheWrite }\n              : {}),\n            ...(hasReasoningTokens\n              ? { reasoning: totalTokensReasoning }\n              : {}),\n          },\n        }\n      : {}),\n  };\n\n  // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n  void startedAt;\n  return summary;\n}\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n  status?: TraceMetadataStatus;\n  name?: string;\n  since?: string;\n  limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n  return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n  traces: TraceMetadata[],\n  options: TraceFilterOptions,\n): TraceMetadata[] {\n  const input = [...traces];\n\n  let out = input.filter((t) => {\n    if (options.status && t.status !== options.status) return false;\n\n    if (options.name) {\n      const q = options.name.toLowerCase();\n      const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n      if (!hay.includes(q)) return false;\n    }\n\n    if (options.since) {\n      const windowMs = parseDuration(options.since);\n      const cutoff = Date.now() - windowMs;\n      const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n      const basis = started ?? t.createdAt.getTime();\n      if (!Number.isFinite(basis) || basis < cutoff) return false;\n    }\n\n    return true;\n  });\n\n  out.sort((a, b) => {\n    const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n    const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n    return bTime - aTime;\n  });\n\n  if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n    const n = Math.max(0, Math.floor(options.limit));\n    out = out.slice(0, n);\n  }\n\n  return out;\n}\n\n","import type { RunStartedEvent, TraceEvent, TraceMetadata } from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { filterTraces } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface DurationStats {\n  minMs?: number;\n  maxMs?: number;\n  avgMs?: number;\n  p50Ms?: number;\n  p95Ms?: number;\n}\n\nexport interface TraceStatsRankedRun {\n  runId: string;\n  name?: string;\n  durationMs?: number;\n  status: string;\n}\n\nexport interface TraceStatsRankedStep {\n  runId: string;\n  stepName: string;\n  stepType: string;\n  durationMs: number;\n}\n\nexport interface TraceStats {\n  traceDir: string;\n  since?: string;\n  correlationId?: string;\n  groupId?: string;\n  totalRuns: number;\n  successCount: number;\n  errorCount: number;\n  runningCount: number;\n  unknownCount: number;\n  errorRate: number;\n  duration: DurationStats;\n  totalSteps: number;\n  avgStepsPerRun: number;\n  totalLlmSteps: number;\n  totalToolSteps: number;\n  totalErrorSteps: number;\n  slowestRuns: TraceStatsRankedRun[];\n  slowestSteps: TraceStatsRankedStep[];\n}\n\nexport interface TraceStatsOptions {\n  traceDir: string;\n  since?: string;\n  correlationId?: string;\n  groupId?: string;\n  slowRunLimit?: number;\n  slowStepLimit?: number;\n}\n\nfunction percentile(sorted: number[], p: number): number | undefined {\n  if (sorted.length === 0) return undefined;\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nasync function readRunStartedMetadata(\n  filePath: string,\n): Promise<Record<string, unknown> | undefined> {\n  try {\n    const events = await readTraceEventsFromFile(filePath);\n    for (const event of events) {\n      if (event.event !== \"run_started\") continue;\n      const rs = event as RunStartedEvent;\n      if (rs.metadata && typeof rs.metadata === \"object\") {\n        return rs.metadata as Record<string, unknown>;\n      }\n      return undefined;\n    }\n  } catch {\n    /* skip */\n  }\n  return undefined;\n}\n\nfunction metaMatchesCorrelation(\n  metadata: Record<string, unknown> | undefined,\n  correlationId?: string,\n  groupId?: string,\n): boolean {\n  if (correlationId) {\n    const v = metadata?.correlationId;\n    if (typeof v !== \"string\" || v !== correlationId) return false;\n  }\n  if (groupId) {\n    const v = metadata?.groupId;\n    if (typeof v !== \"string\" || v !== groupId) return false;\n  }\n  return true;\n}\n\nexport async function buildTraceStats(\n  metas: TraceMetadata[],\n  options: TraceStatsOptions,\n): Promise<TraceStats> {\n  let filtered = filterTraces(metas, { since: options.since });\n\n  if (options.correlationId || options.groupId) {\n    const next: TraceMetadata[] = [];\n    for (const m of filtered) {\n      const md = await readRunStartedMetadata(m.filePath);\n      if (metaMatchesCorrelation(md, options.correlationId, options.groupId)) {\n        next.push(m);\n      }\n    }\n    filtered = next;\n  }\n\n  let successCount = 0;\n  let errorCount = 0;\n  let runningCount = 0;\n  let unknownCount = 0;\n  const durations: number[] = [];\n  let totalSteps = 0;\n  let totalLlmSteps = 0;\n  let totalToolSteps = 0;\n  let totalErrorSteps = 0;\n  const slowestRuns: TraceStatsRankedRun[] = [];\n  const slowestSteps: TraceStatsRankedStep[] = [];\n\n  for (const m of filtered) {\n    if (m.status === \"success\") successCount += 1;\n    else if (m.status === \"error\") errorCount += 1;\n    else if (m.status === \"running\") runningCount += 1;\n    else unknownCount += 1;\n\n    if (\n      typeof m.durationMs === \"number\" &&\n      Number.isFinite(m.durationMs) &&\n      m.durationMs >= 0\n    ) {\n      durations.push(m.durationMs);\n      slowestRuns.push({\n        runId: m.runId,\n        name: m.name,\n        durationMs: m.durationMs,\n        status: m.status,\n      });\n    }\n\n    try {\n      const events = await readTraceEventsFromFile(m.filePath);\n      if (events.length === 0) continue;\n      const summary = buildRunSummary(events);\n      totalSteps += summary.totalSteps;\n      totalLlmSteps += summary.llmSteps;\n      totalToolSteps += summary.toolSteps;\n      totalErrorSteps += summary.errorSteps;\n\n      const steps = collectCompletedSteps(events, m.runId);\n      for (const s of steps) {\n        slowestSteps.push(s);\n      }\n    } catch {\n      /* skip malformed */\n    }\n  }\n\n  slowestRuns.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n  slowestSteps.sort((a, b) => b.durationMs - a.durationMs);\n\n  const runLimit = options.slowRunLimit ?? 5;\n  const stepLimit = options.slowStepLimit ?? 5;\n  const sortedDur = [...durations].sort((a, b) => a - b);\n  const totalRuns = filtered.length;\n  const errorRate = totalRuns > 0 ? errorCount / totalRuns : 0;\n  const sumDur = durations.reduce((a, b) => a + b, 0);\n\n  return {\n    traceDir: options.traceDir,\n    ...(options.since ? { since: options.since } : {}),\n    ...(options.correlationId ? { correlationId: options.correlationId } : {}),\n    ...(options.groupId ? { groupId: options.groupId } : {}),\n    totalRuns,\n    successCount,\n    errorCount,\n    runningCount,\n    unknownCount,\n    errorRate,\n    duration: {\n      ...(sortedDur.length > 0\n        ? {\n            minMs: sortedDur[0],\n            maxMs: sortedDur[sortedDur.length - 1],\n            avgMs: sumDur / sortedDur.length,\n            p50Ms: percentile(sortedDur, 50),\n            p95Ms: percentile(sortedDur, 95),\n          }\n        : {}),\n    },\n    totalSteps,\n    avgStepsPerRun: totalRuns > 0 ? totalSteps / totalRuns : 0,\n    totalLlmSteps,\n    totalToolSteps,\n    totalErrorSteps,\n    slowestRuns: slowestRuns.slice(0, runLimit),\n    slowestSteps: slowestSteps.slice(0, stepLimit),\n  };\n}\n\nfunction collectCompletedSteps(\n  events: TraceEvent[],\n  runId: string,\n): TraceStatsRankedStep[] {\n  const started = new Map<string, { name: string; type: string }>();\n  const out: TraceStatsRankedStep[] = [];\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as { stepId: string; name: string; type: string };\n      started.set(s.stepId, { name: s.name, type: s.type });\n    }\n    if (e.event === \"step_completed\") {\n      const c = e as {\n        stepId: string;\n        durationMs?: number;\n        status: string;\n      };\n      if (c.status !== \"success\" && c.status !== \"error\") continue;\n      if (typeof c.durationMs !== \"number\" || !Number.isFinite(c.durationMs)) {\n        continue;\n      }\n      const meta = started.get(c.stepId);\n      out.push({\n        runId,\n        stepName: meta?.name ?? c.stepId,\n        stepType: meta?.type ?? \"logic\",\n        durationMs: c.durationMs,\n      });\n    }\n  }\n  return out;\n}\n\n/**\n * Formats a step label for display. `step.tool`/`step.llm` already store the\n * name with its type prefix (e.g. \"tool:lookup\"), while plain `step()` stores a\n * bare name, so prefixing unconditionally would double the prefix. Add the type\n * prefix only when the name does not already carry it, matching what list/view\n * show for the same step.\n */\nexport function formatStepLabel(stepType: string, stepName: string): string {\n  return stepName.startsWith(`${stepType}:`) ? stepName : `${stepType}:${stepName}`;\n}\n\nexport function renderTraceStats(stats: TraceStats): string {\n  const lines: string[] = [];\n  lines.push(\"Trace stats (local)\");\n  lines.push(`Directory: ${stats.traceDir}`);\n  if (stats.since) lines.push(`Since: ${stats.since}`);\n  if (stats.correlationId) lines.push(`Correlation ID: ${stats.correlationId}`);\n  if (stats.groupId) lines.push(`Group ID: ${stats.groupId}`);\n  lines.push(\"\");\n  lines.push(`Runs: ${stats.totalRuns}`);\n  lines.push(\n    `  success: ${stats.successCount}  error: ${stats.errorCount}  running: ${stats.runningCount}  unknown: ${stats.unknownCount}`,\n  );\n  lines.push(`Error rate: ${(stats.errorRate * 100).toFixed(1)}%`);\n  if (stats.duration.avgMs !== undefined) {\n    lines.push(\n      `Duration: min ${formatDuration(stats.duration.minMs ?? 0)} | avg ${formatDuration(stats.duration.avgMs)} | p50 ${formatDuration(stats.duration.p50Ms ?? 0)} | p95 ${formatDuration(stats.duration.p95Ms ?? 0)} | max ${formatDuration(stats.duration.maxMs ?? 0)}`,\n    );\n  }\n  lines.push(\"\");\n  lines.push(`Steps: ${stats.totalSteps} (avg ${stats.avgStepsPerRun.toFixed(1)} per run)`);\n  lines.push(\n    `  LLM: ${stats.totalLlmSteps}  tool: ${stats.totalToolSteps}  errors: ${stats.totalErrorSteps}`,\n  );\n  if (stats.slowestRuns.length > 0) {\n    lines.push(\"\");\n    lines.push(\"Slowest runs:\");\n    for (const r of stats.slowestRuns) {\n      lines.push(\n        `  ${r.runId} | ${r.name ?? \"-\"} | ${formatDuration(r.durationMs ?? 0)} | ${r.status}`,\n      );\n    }\n  }\n  if (stats.slowestSteps.length > 0) {\n    lines.push(\"\");\n    lines.push(\"Slowest steps:\");\n    for (const s of stats.slowestSteps) {\n      lines.push(\n        `  ${s.runId} | ${formatStepLabel(s.stepType, s.stepName)} | ${formatDuration(s.durationMs)}`,\n      );\n    }\n  }\n  return lines.join(\"\\n\");\n}\n","import type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  StepStatus,\n  StepType,\n  TraceEvent,\n  TraceMetadataStatus,\n} from \"./types.js\";\nimport { formatStepLabel } from \"./stats.js\";\nimport { formatDuration, formatTimestamp } from \"./utils.js\";\n\nexport type TimelineFocus = \"all\" | \"slow\";\n\nexport interface TimelineEntry {\n  stepId: string;\n  name: string;\n  type: StepType;\n  status: StepStatus;\n  depth: number;\n  startedAt: number;\n  offsetMs: number;\n  durationMs?: number;\n  isError: boolean;\n  slow?: boolean;\n  streaming?: {\n    chunkCount?: number;\n    streamDurationMs?: number;\n    streamedCharCount?: number;\n  };\n}\n\nexport interface RunTimeline {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  correlation?: {\n    correlationId?: string;\n    requestId?: string;\n    decisionId?: string;\n    groupId?: string;\n  };\n  entries: TimelineEntry[];\n}\n\nexport interface TimelineOptions {\n  focus?: TimelineFocus;\n  slowTopN?: number;\n}\n\nconst ROOT_TIMELINE_DEPTH = 0;\nconst MAX_TIMELINE_DEPTH = 1000;\n\nfunction finite(n: unknown): n is number {\n  return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction pickStreamingMeta(\n  metadata: Record<string, unknown> | undefined,\n): TimelineEntry[\"streaming\"] | undefined {\n  if (!metadata || typeof metadata !== \"object\") return undefined;\n  const chunkCount = metadata.chunkCount;\n  const streamDurationMs = metadata.streamDurationMs;\n  const streamedCharCount = metadata.streamedCharCount;\n  if (\n    !finite(chunkCount) &&\n    !finite(streamDurationMs) &&\n    !finite(streamedCharCount)\n  ) {\n    return undefined;\n  }\n  return {\n    ...(finite(chunkCount) ? { chunkCount } : {}),\n    ...(finite(streamDurationMs) ? { streamDurationMs } : {}),\n    ...(finite(streamedCharCount) ? { streamedCharCount } : {}),\n  };\n}\n\nfunction pickCorrelation(\n  metadata: Record<string, unknown> | undefined,\n): RunTimeline[\"correlation\"] | undefined {\n  if (!metadata || typeof metadata !== \"object\") return undefined;\n  const out: NonNullable<RunTimeline[\"correlation\"]> = {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const v = metadata[key];\n    if (typeof v === \"string\" && v.trim() !== \"\") {\n      out[key] = v;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function buildRunTimeline(\n  events: readonly TraceEvent[],\n  options: TimelineOptions = {},\n): RunTimeline {\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const runId =\n    started?.runId ??\n    events.find((e) => typeof (e as { runId?: string }).runId === \"string\")\n      ?.runId ??\n    \"unknown-run\";\n\n  const runStart =\n    started && finite(started.startTime)\n      ? started.startTime\n      : started && finite(started.timestamp)\n        ? started.timestamp\n        : undefined;\n\n  const status: TraceMetadataStatus = lastCompleted\n    ? lastCompleted.status\n    : started\n      ? \"running\"\n      : \"unknown\";\n\n  const steps = new Map<\n    string,\n    {\n      name: string;\n      type: StepType;\n      parentId?: string;\n      startedAt: number;\n      status: StepStatus;\n      durationMs?: number;\n      metadata?: Record<string, unknown>;\n    }\n  >();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      steps.set(s.stepId, {\n        name: s.name,\n        type: s.type,\n        parentId: s.parentId,\n        startedAt: finite(s.startTime) ? s.startTime : s.timestamp,\n        status: \"running\",\n        metadata: s.metadata as Record<string, unknown> | undefined,\n      });\n    }\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const c = e as StepCompletedEvent;\n    const node = steps.get(c.stepId);\n    if (!node) continue;\n    node.status = c.status;\n    if (finite(c.durationMs)) node.durationMs = c.durationMs;\n  }\n\n  const depthCache = new Map<string, number>();\n  const computeDepth = (stepId: string): number => {\n    const cached = depthCache.get(stepId);\n    if (cached !== undefined) return cached;\n\n    const ancestry: string[] = [];\n    const ancestryIndexes = new Map<string, number>();\n    let currentStepId = stepId;\n    let resolvedDepth: number | undefined;\n\n    while (resolvedDepth === undefined) {\n      const cachedDepth = depthCache.get(currentStepId);\n      if (cachedDepth !== undefined) {\n        resolvedDepth = cachedDepth;\n        continue;\n      }\n\n      const cycleStart = ancestryIndexes.get(currentStepId);\n      if (cycleStart !== undefined) {\n        const cycleStepIds = ancestry.splice(cycleStart);\n        for (const cycleStepId of cycleStepIds) {\n          depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);\n        }\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      const currentStep = steps.get(currentStepId);\n      if (!currentStep) {\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      ancestryIndexes.set(currentStepId, ancestry.length);\n      ancestry.push(currentStepId);\n\n      const parentId = currentStep.parentId;\n      if (\n        typeof parentId !== \"string\" ||\n        parentId.trim() === \"\" ||\n        !steps.has(parentId)\n      ) {\n        ancestry.pop();\n        depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      currentStepId = parentId;\n    }\n\n    ancestry.reverse();\n    for (const ancestorStepId of ancestry) {\n      resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);\n      depthCache.set(ancestorStepId, resolvedDepth);\n    }\n\n    const resolvedStepDepth = depthCache.get(stepId);\n    if (resolvedStepDepth === undefined) {\n      throw new Error(`Failed to resolve timeline depth for step \"${stepId}\"`);\n    }\n    return resolvedStepDepth;\n  };\n\n  const entries: TimelineEntry[] = [];\n  for (const [stepId, s] of steps.entries()) {\n    const offsetMs =\n      runStart !== undefined && finite(s.startedAt)\n        ? Math.max(0, s.startedAt - runStart)\n        : 0;\n    entries.push({\n      stepId,\n      name: s.name,\n      type: s.type,\n      status: s.status,\n      depth: computeDepth(stepId),\n      startedAt: s.startedAt,\n      offsetMs,\n      durationMs: s.durationMs,\n      isError: s.status === \"error\",\n      streaming: pickStreamingMeta(s.metadata),\n    });\n  }\n\n  entries.sort((a, b) => a.startedAt - b.startedAt);\n\n  const slowTopN = options.slowTopN ?? 3;\n  if (options.focus === \"slow\" && entries.length > 0) {\n    const ranked = [...entries]\n      .filter((e) => finite(e.durationMs))\n      .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n    const slowIds = new Set(\n      ranked.slice(0, slowTopN).map((e) => e.stepId),\n    );\n    for (const e of entries) {\n      if (slowIds.has(e.stepId)) e.slow = true;\n    }\n  }\n\n  return {\n    runId,\n    name:\n      typeof started?.name === \"string\" && started.name.trim() !== \"\"\n        ? started.name\n        : undefined,\n    status,\n    startedAt: runStart,\n    endedAt:\n      lastCompleted && finite(lastCompleted.endTime)\n        ? lastCompleted.endTime\n        : undefined,\n    durationMs:\n      lastCompleted && finite(lastCompleted.durationMs)\n        ? lastCompleted.durationMs\n        : undefined,\n    correlation: pickCorrelation(\n      started?.metadata as Record<string, unknown> | undefined,\n    ),\n    entries,\n  };\n}\n\nexport interface RenderTimelineOptions {\n  focus?: TimelineFocus;\n}\n\nexport function renderTimeline(\n  timeline: RunTimeline,\n  options: RenderTimelineOptions = {},\n): string {\n  const lines: string[] = [];\n  lines.push(`Timeline: ${timeline.name ?? timeline.runId}`);\n  lines.push(`Run ID: ${timeline.runId}`);\n  lines.push(`Status: ${timeline.status}`);\n  if (timeline.startedAt !== undefined) {\n    lines.push(`Started: ${formatTimestamp(timeline.startedAt)}`);\n  }\n  if (timeline.durationMs !== undefined) {\n    lines.push(`Duration: ${formatDuration(timeline.durationMs)}`);\n  }\n  if (timeline.correlation) {\n    const parts = Object.entries(timeline.correlation)\n      .filter(([, v]) => typeof v === \"string\")\n      .map(([k, v]) => `${k}=${v}`);\n    if (parts.length > 0) {\n      lines.push(`Correlation: ${parts.join(\", \")}`);\n    }\n  }\n  lines.push(\"\");\n  lines.push(\"Steps (chronological):\");\n\n  const show = timeline.entries.filter((e) => {\n    if (options.focus === \"slow\") return e.slow === true;\n    return true;\n  });\n\n  if (show.length === 0) {\n    lines.push(\n      options.focus === \"slow\"\n        ? \"(no steps with duration for slow focus)\"\n        : \"(no steps)\",\n    );\n    return lines.join(\"\\n\");\n  }\n\n  for (const e of show) {\n    const prefix = e.slow ? \"[slow] \" : \"\";\n    const typeTag =\n      e.type === \"llm\" ? \"llm\" : e.type === \"tool\" ? \"tool\" : e.type;\n    const dur =\n      e.durationMs !== undefined ? formatDuration(e.durationMs) : \"-\";\n    const err = e.isError ? \" error\" : \"\";\n    const off = formatDuration(e.offsetMs);\n    let line = `${prefix}+${off} ${formatStepLabel(typeTag, e.name)} (${dur})${err}`;\n    if (e.streaming?.chunkCount !== undefined) {\n      line += ` chunks=${e.streaming.chunkCount}`;\n    }\n    if (e.streaming?.streamDurationMs !== undefined) {\n      line += ` stream=${formatDuration(e.streaming.streamDurationMs)}`;\n    }\n    lines.push(line);\n  }\n\n  return lines.join(\"\\n\");\n}\n","import type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  TraceCorrelationMetadata,\n  TraceEvent,\n  TraceMetadataStatus,\n} from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface RunWhatSummary {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  durationMs?: number;\n  totalSteps: number;\n  llmSteps: number;\n  toolSteps: number;\n  logicSteps: number;\n  errorSteps: number;\n  maxDepth: number;\n  longestStep?: {\n    name: string;\n    durationMs: number;\n    type: string;\n  };\n  totalTokens?: {\n    input: number;\n    output: number;\n    total?: number;\n    cached?: number;\n    cacheWrite?: number;\n    reasoning?: number;\n  };\n  correlation?: TraceCorrelationMetadata;\n  failedStepNames: string[];\n  runErrorMessage?: string;\n}\n\nfunction pickCorrelation(\n  metadata: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n  if (!metadata) return undefined;\n  const out: TraceCorrelationMetadata = {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const value = metadata[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction stepMixLine(summary: RunWhatSummary): string {\n  const parts: string[] = [];\n  if (summary.llmSteps > 0) parts.push(`${summary.llmSteps} LLM`);\n  if (summary.toolSteps > 0) parts.push(`${summary.toolSteps} tool`);\n  if (summary.logicSteps > 0) parts.push(`${summary.logicSteps} logic`);\n  return parts.length > 0 ? parts.join(\", \") : \"none\";\n}\n\nfunction outcomeLine(summary: RunWhatSummary): string {\n  if (summary.status === \"success\") {\n    return summary.errorSteps > 0\n      ? \"Completed with step errors recorded.\"\n      : \"Completed successfully.\";\n  }\n  if (summary.status === \"error\") {\n    if (summary.failedStepNames.length > 0) {\n      const names = summary.failedStepNames.slice(0, 3).join(\", \");\n      const suffix =\n        summary.failedStepNames.length > 3\n          ? ` (+${summary.failedStepNames.length - 3} more)`\n          : \"\";\n      return `Failed at step(s): ${names}${suffix}.`;\n    }\n    if (summary.runErrorMessage) {\n      return `Run failed: ${summary.runErrorMessage}`;\n    }\n    return \"Run failed.\";\n  }\n  if (summary.status === \"running\") {\n    return \"Run is still in progress (no run_completed).\";\n  }\n  return \"Outcome unknown — inspect events may be incomplete.\";\n}\n\n/**\n * Build a concise inspection summary for `what` / report workflows.\n * Read-only over in-memory v0.1 {@link TraceEvent} rows.\n */\nexport function buildRunWhatSummary(events: TraceEvent[]): RunWhatSummary {\n  const base = buildRunSummary(events);\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const failedStepNames: string[] = [];\n  const stepNames = new Map<string, string>();\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      stepNames.set(s.stepId, s.name);\n    }\n  }\n  for (const e of events) {\n    if (e.event === \"step_completed\") {\n      const sc = e as StepCompletedEvent;\n      if (sc.status === \"error\") {\n        failedStepNames.push(stepNames.get(sc.stepId) ?? sc.stepId);\n      }\n    }\n  }\n\n  return {\n    runId: base.runId,\n    name: base.name,\n    status: base.status,\n    durationMs: base.durationMs,\n    totalSteps: base.totalSteps,\n    llmSteps: base.llmSteps,\n    toolSteps: base.toolSteps,\n    logicSteps: base.logicSteps,\n    errorSteps: base.errorSteps,\n    maxDepth: base.maxDepth,\n    longestStep: base.longestStep,\n    totalTokens: base.totalTokens,\n    correlation: pickCorrelation(started?.metadata),\n    failedStepNames,\n    runErrorMessage: lastCompleted?.error?.message,\n  };\n}\n\nexport interface RenderWhatOptions {\n  /** Include correlation ids when present (default true). */\n  correlation?: boolean;\n}\n\n/**\n * Render a human-readable `what` summary (plain text, no ANSI).\n */\nexport function renderRunWhat(\n  summary: RunWhatSummary,\n  options: RenderWhatOptions = {},\n): string {\n  const showCorrelation = options.correlation !== false;\n  const lines: string[] = [];\n  const label = summary.name ?? summary.runId;\n  lines.push(`What: ${label}`);\n\n  const duration =\n    summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"—\";\n  lines.push(\n    `Status: ${summary.status} · Duration: ${duration} · Steps: ${summary.totalSteps} (${stepMixLine(summary)})`,\n  );\n\n  if (summary.totalTokens) {\n    const tokenParts = [\n      `${summary.totalTokens.input} in`,\n      `${summary.totalTokens.output} out`,\n    ];\n    if (summary.totalTokens.total !== undefined) {\n      tokenParts.push(`${summary.totalTokens.total} total`);\n    }\n    if (summary.totalTokens.cached !== undefined) {\n      tokenParts.push(`${summary.totalTokens.cached} cached`);\n    }\n    if (summary.totalTokens.cacheWrite !== undefined) {\n      tokenParts.push(`${summary.totalTokens.cacheWrite} cache-write`);\n    }\n    if (summary.totalTokens.reasoning !== undefined) {\n      tokenParts.push(`${summary.totalTokens.reasoning} reasoning`);\n    }\n    lines.push(`Tokens: ${tokenParts.join(\" / \")}`);\n  }\n\n  if (showCorrelation && summary.correlation) {\n    const parts: string[] = [];\n    if (summary.correlation.correlationId) {\n      parts.push(`correlationId=${summary.correlation.correlationId}`);\n    }\n    if (summary.correlation.requestId) {\n      parts.push(`requestId=${summary.correlation.requestId}`);\n    }\n    if (summary.correlation.decisionId) {\n      parts.push(`decisionId=${summary.correlation.decisionId}`);\n    }\n    if (summary.correlation.groupId) {\n      parts.push(`groupId=${summary.correlation.groupId}`);\n    }\n    if (parts.length > 0) {\n      lines.push(`Correlation: ${parts.join(\", \")}`);\n    }\n  }\n\n  lines.push(`Outcome: ${outcomeLine(summary)}`);\n\n  if (summary.longestStep && summary.totalSteps > 0) {\n    lines.push(\n      `Slowest: ${summary.longestStep.name} (${formatDuration(summary.longestStep.durationMs)}, ${summary.longestStep.type})`,\n    );\n  }\n\n  if (summary.maxDepth > 0) {\n    lines.push(`Max depth: ${summary.maxDepth}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n"]}