{"version":3,"sources":["../src/debug/formatters/ai.ts","../src/colors.ts","../src/debug/formatters/human.ts","../src/debug/utilities.ts","../src/debug/formatters/timeline.ts","../src/format.ts","../src/debug/components/output.ts","../src/debug/components/tree.ts","../src/debug/components/trace.ts"],"names":["formatDuration"],"mappings":"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","file":"debug.cjs","sourcesContent":["import type { DebugEntry, DebugFormat } from '../types';\n\nexport function formatDebugEntryAI(entry: DebugEntry): string {\n  return JSON.stringify(entry, null, 2);\n}\n\nexport function formatDebugEntriesAI(entries: DebugEntry[]): string {\n  return JSON.stringify(entries, null, 2);\n}\n\nexport function shouldUseAIFormat(format?: DebugFormat, jsonMode?: boolean): boolean {\n  if (jsonMode) {\n    return true;\n  }\n  return format === 'ai';\n}\n\n","/**\n * Minimalist color utilities for CLI output\n * Uses strategic color application - only for status, not decoration\n */\n\nconst CSI = '\\x1b[';\nconst RESET = '\\x1b[0m';\n\nconst createColor =\n  (...codes: Array<number | string>) =>\n  (text: string): string =>\n    `${CSI}${codes.join(';')}m${text}${RESET}`;\n\nconst accentBlue = '38;5;39';\nconst accentViolet = '38;5;99';\nconst accentTeal = '38;5;51';\nconst accentIndigo = '38;5;63';\nconst neutral = 37;\nconst neutralMuted = 90;\n\nexport const colors = {\n  // Semantic colors\n  success: createColor(32),\n  error: createColor(31),\n  warning: createColor(33),\n  info: createColor(36),\n\n  // Accent palette (reused across CLI)\n  primary: createColor(accentBlue),\n  accent: createColor(accentViolet),\n  highlight: createColor(accentTeal),\n  secondary: createColor(accentIndigo),\n  emphasis: createColor('38;5;117'),\n  muted: createColor(neutralMuted),\n  foreground: createColor(neutral),\n\n  // Formatting helpers\n  dim: createColor(2),\n  bold: createColor(1),\n  underline: createColor(4),\n  inverse: createColor(7),\n};\n\n// Unicode symbols — KB Labs visual identity\nconst symbolCharacters = {\n  success: '✓',\n  error: '✗',\n  warning: '⚠',\n  info: '◆',\n  bullet: '•',\n  clock: '◷',\n  folder: '▸',\n  package: '◆',\n  pointer: '❯',\n  section: '│',\n  step: '○',\n  stepDone: '●',\n  arrow: '→',\n  diamond: '◆',\n};\n\nexport const symbols = {\n  success: colors.success(symbolCharacters.success),\n  error: colors.error(symbolCharacters.error),\n  warning: colors.warning(symbolCharacters.warning),\n  info: colors.info(symbolCharacters.info),\n  bullet: colors.muted(symbolCharacters.bullet),\n  clock: colors.muted(symbolCharacters.clock),\n  folder: colors.primary(symbolCharacters.folder),\n  package: colors.accent(symbolCharacters.package),\n  pointer: colors.primary(symbolCharacters.pointer),\n  section: colors.muted(symbolCharacters.section),\n  step: colors.muted(symbolCharacters.step),\n  stepDone: colors.success(symbolCharacters.stepDone),\n  arrow: colors.primary(symbolCharacters.arrow),\n  diamond: colors.primary(symbolCharacters.diamond),\n};\n\n// Check if colors are supported\nconst isTruthyEnv = (value: string | undefined): boolean => {\n  if (!value) {return false;}\n  const normalized = value.trim().toLowerCase();\n  return normalized !== '' && normalized !== '0' && normalized !== 'false' && normalized !== 'off';\n};\n\nexport const supportsColor = (() => {\n  if (typeof process === 'undefined') {return false;}\n\n  const forceColor = process.env.FORCE_COLOR;\n  if (isTruthyEnv(process.env.NO_COLOR)) {\n    return false;\n  }\n  if (isTruthyEnv(forceColor)) {\n    return true;\n  }\n\n  if (!process.stdout) {return false;}\n\n  if (process.stdout.isTTY === false) {\n    return false;\n  }\n\n  return true;\n})();\n\n// Color functions that respect NO_COLOR\nconst passthrough =\n  (fn: (text: string) => string) =>\n  (text: string): string =>\n    supportsColor ? fn(text) : text;\n\nexport const safeColors = {\n  success: passthrough(colors.success),\n  error: passthrough(colors.error),\n  warning: passthrough(colors.warning),\n  info: passthrough(colors.info),\n  accent: passthrough(colors.accent),\n  primary: passthrough(colors.primary),\n  highlight: passthrough(colors.highlight),\n  secondary: passthrough(colors.secondary),\n  emphasis: passthrough(colors.emphasis),\n  foreground: passthrough(colors.foreground),\n  muted: passthrough(colors.muted),\n  dim: passthrough(colors.dim),\n  bold: passthrough(colors.bold),\n  underline: passthrough(colors.underline),\n  inverse: passthrough(colors.inverse),\n};\n\nexport const safeSymbols = {\n  success: supportsColor ? symbols.success : '✓',\n  error: supportsColor ? symbols.error : '✗',\n  warning: supportsColor ? symbols.warning : '⚠',\n  info: supportsColor ? symbols.info : '◆',\n  bullet: supportsColor ? symbols.bullet : '•',\n  clock: supportsColor ? symbols.clock : '◷',\n  folder: supportsColor ? symbols.folder : '▸',\n  package: supportsColor ? symbols.package : '◆',\n  pointer: supportsColor ? symbols.pointer : '❯',\n  section: supportsColor ? symbols.section : '│',\n  step: supportsColor ? symbols.step : '○',\n  stepDone: supportsColor ? symbols.stepDone : '●',\n  arrow: supportsColor ? symbols.arrow : '→',\n  diamond: supportsColor ? symbols.diamond : '◆',\n  // Box-drawing characters\n  separator: '─',\n  border: '│',\n  topLeft: '┌',\n  topRight: '┐',\n  bottomLeft: '└',\n  bottomRight: '┘',\n  leftT: '├',\n  rightT: '┤',\n};\n","import { safeColors, safeSymbols } from '../../colors';\nimport type { DebugEntry } from '../types';\n\nexport interface HumanFormatterOptions {\n  showTimestamp?: boolean;\n  showDuration?: boolean;\n  groupBy?: 'namespace' | 'group' | 'none';\n}\n\nfunction formatTimestamp(timestamp: number): string {\n  const date = new Date(timestamp);\n  return date.toISOString();\n}\n\nfunction formatDuration(duration: number): string {\n  if (duration < 1000) {\n    return `${duration}ms`;\n  }\n  return `${(duration / 1000).toFixed(2)}s`;\n}\n\nexport function formatDebugEntryHuman(entry: DebugEntry, options: HumanFormatterOptions = {}): string {\n  const parts: string[] = [];\n\n  if (options.showTimestamp) {\n    parts.push(safeColors.dim(formatTimestamp(entry.timestamp)));\n  }\n\n  parts.push(safeColors.bold(`[${entry.namespace}]`));\n  parts.push(entry.message);\n\n  if (options.showDuration && typeof entry.duration === 'number') {\n    parts.push(safeColors.dim(`(${formatDuration(entry.duration)})`));\n  }\n\n  if (entry.level === 'error') {\n    parts.push(safeColors.error(safeSymbols.error));\n  } else if (entry.level === 'warn') {\n    parts.push(safeColors.warning(safeSymbols.warning));\n  }\n\n  return parts.join(' ');\n}\n\nexport function formatDebugEntriesHuman(entries: DebugEntry[], options: HumanFormatterOptions = {}): string {\n  if (entries.length === 0) {\n    return '';\n  }\n\n  const sorted = [...entries].sort((a, b) => a.timestamp - b.timestamp);\n  const lines: string[] = [];\n\n  if (options.groupBy === 'namespace') {\n    const namespaces = new Map<string, DebugEntry[]>();\n    for (const entry of sorted) {\n      if (!namespaces.has(entry.namespace)) {\n        namespaces.set(entry.namespace, []);\n      }\n      namespaces.get(entry.namespace)!.push(entry);\n    }\n\n    for (const [namespace, namespaceEntries] of namespaces) {\n      lines.push(safeColors.bold(namespace));\n      for (const entry of namespaceEntries) {\n        lines.push(`  ${formatDebugEntryHuman(entry, options)}`);\n      }\n      lines.push('');\n    }\n    return lines.join('\\n').trimEnd();\n  }\n\n  if (options.groupBy === 'group') {\n    const groups = new Map<string, DebugEntry[]>();\n    for (const entry of sorted) {\n      const groupName = entry.group ?? 'default';\n      if (!groups.has(groupName)) {\n        groups.set(groupName, []);\n      }\n      groups.get(groupName)!.push(entry);\n    }\n\n    for (const [groupName, groupEntries] of groups) {\n      lines.push(safeColors.bold(groupName));\n      for (const entry of groupEntries) {\n        lines.push(`  ${formatDebugEntryHuman(entry, options)}`);\n      }\n      lines.push('');\n    }\n    return lines.join('\\n').trimEnd();\n  }\n\n  for (const entry of sorted) {\n    lines.push(formatDebugEntryHuman(entry, options));\n  }\n\n  return lines.join('\\n');\n}\n\n","import { formatDebugEntriesHuman } from './formatters/human';\nimport { formatDebugEntriesAI } from './formatters/ai';\nimport { formatTimelineWithSummary } from './formatters/timeline';\nimport type { DebugEntry, DebugExportOptions, DebugFilterOptions, DebugTreeNode } from './types';\n\nfunction toRegex(pattern: string): RegExp {\n  if (!pattern.includes('*')) {\n    return new RegExp(`^${pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}$`, 'i');\n  }\n  const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*');\n  return new RegExp(`^${escaped}$`, 'i');\n}\n\nexport function filterByNamespace(entries: DebugEntry[], pattern: string | RegExp): DebugEntry[] {\n  const matcher = typeof pattern === 'string' ? toRegex(pattern) : pattern;\n  return entries.filter((entry) => matcher.test(entry.namespace));\n}\n\nexport function filterByLevel(entries: DebugEntry[], level: string | string[]): DebugEntry[] {\n  const allowed = Array.isArray(level) ? new Set(level) : new Set([level]);\n  return entries.filter((entry) => allowed.has(entry.level));\n}\n\nexport function filterByTimeRange(entries: DebugEntry[], from?: number, to?: number): DebugEntry[] {\n  return entries.filter((entry) => {\n    if (from !== undefined && entry.timestamp < from) {\n      return false;\n    }\n    if (to !== undefined && entry.timestamp > to) {\n      return false;\n    }\n    return true;\n  });\n}\n\nexport function searchInLogs(entries: DebugEntry[], query: string): DebugEntry[] {\n  const lowered = query.toLowerCase();\n  return entries.filter((entry) => {\n    if (entry.message.toLowerCase().includes(lowered)) {\n      return true;\n    }\n    if (entry.namespace.toLowerCase().includes(lowered)) {\n      return true;\n    }\n    if (entry.meta) {\n      const metaString = JSON.stringify(entry.meta).toLowerCase();\n      if (metaString.includes(lowered)) {\n        return true;\n      }\n    }\n    return false;\n  });\n}\n\nexport function filterDebugEntries(entries: DebugEntry[], options: DebugFilterOptions): DebugEntry[] {\n  let filtered = [...entries];\n\n  if (options.namespace) {\n    filtered = filterByNamespace(filtered, options.namespace);\n  }\n\n  if (options.level) {\n    filtered = filterByLevel(filtered, options.level);\n  }\n\n  if (options.timeRange) {\n    filtered = filterByTimeRange(filtered, options.timeRange.from, options.timeRange.to);\n  }\n\n  if (options.search) {\n    filtered = searchInLogs(filtered, options.search);\n  }\n\n  if (options.traceId) {\n    filtered = filtered.filter((entry) => entry.traceId === options.traceId);\n  }\n\n  return filtered;\n}\n\nexport function groupByNamespace(entries: DebugEntry[]): Map<string, DebugEntry[]> {\n  const map = new Map<string, DebugEntry[]>();\n  for (const entry of entries) {\n    if (!map.has(entry.namespace)) {\n      map.set(entry.namespace, []);\n    }\n    map.get(entry.namespace)!.push(entry);\n  }\n  return map;\n}\n\nexport function groupByGroup(entries: DebugEntry[]): Map<string, DebugEntry[]> {\n  const map = new Map<string, DebugEntry[]>();\n  for (const entry of entries) {\n    const group = entry.group ?? 'default';\n    if (!map.has(group)) {\n      map.set(group, []);\n    }\n    map.get(group)!.push(entry);\n  }\n  return map;\n}\n\nexport function createDebugTree(entries: DebugEntry[]): DebugTreeNode | null {\n  if (entries.length === 0) {\n    return null;\n  }\n\n  const sorted = [...entries].sort((a, b) => a.timestamp - b.timestamp);\n  const nodes = new Map<string, DebugTreeNode>();\n  let root: DebugTreeNode | null = null;\n\n  function ensureNode(entry: DebugEntry): DebugTreeNode {\n    if (entry.spanId && nodes.has(entry.spanId)) {\n      return nodes.get(entry.spanId)!;\n    }\n    const node: DebugTreeNode = { entry, children: [], depth: 0 };\n    if (entry.spanId) {\n      nodes.set(entry.spanId, node);\n    }\n    return node;\n  }\n\n  for (const entry of sorted) {\n    const node = ensureNode(entry);\n\n    if (entry.parentSpanId && nodes.has(entry.parentSpanId)) {\n      const parent = nodes.get(entry.parentSpanId)!;\n      node.depth = parent.depth + 1;\n      parent.children.push(node);\n    } else if (root === null) {\n      root = node;\n    } else {\n      // Fallback: attach additional roots under primary root to preserve output\n      node.depth = root.depth + 1;\n      root.children.push(node);\n    }\n  }\n\n  return root;\n}\n\nexport function exportToJSON(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  if (options.includeMeta === false) {\n    return JSON.stringify(\n      filtered.map(({ meta: _meta, ...rest }) => rest),\n      null,\n      2,\n    );\n  }\n  return JSON.stringify(filtered, null, 2);\n}\n\nexport function exportToChromeFormat(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  const traceEvents = filtered.map((entry) => ({\n    name: entry.message,\n    cat: entry.namespace,\n    ph: entry.level === 'error' ? 'E' : entry.level === 'warn' ? 'W' : 'X',\n    ts: entry.timestamp * 1000,\n    dur: (entry.duration ?? 0) * 1000,\n    pid: 1,\n    tid: entry.spanId ?? entry.namespace,\n    args: entry.meta ?? {},\n  }));\n\n  return JSON.stringify({ traceEvents }, null, 2);\n}\n\nexport function exportToPlainText(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  return formatDebugEntriesHuman(filtered, { groupBy: 'namespace', showTimestamp: true, showDuration: true });\n}\n\nexport function exportDebugEntries(entries: DebugEntry[], options: DebugExportOptions): string {\n  const format = options.format ?? 'json';\n  switch (format) {\n    case 'chrome':\n      return exportToChromeFormat(entries, options);\n    case 'text':\n      return exportToPlainText(entries, options);\n    case 'json':\n    default:\n      return exportToJSON(entries, options);\n  }\n}\n\nexport function describeEntriesHuman(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatDebugEntriesHuman(filtered, { showTimestamp: true, showDuration: true, groupBy: 'namespace' });\n}\n\nexport function describeEntriesAI(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatDebugEntriesAI(filtered);\n}\n\nexport function describeEntriesTimeline(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatTimelineWithSummary(filtered);\n}\n\n","import { safeColors, safeSymbols } from '../../colors';\nimport type { DebugEntry, DebugTreeNode } from '../types';\nimport { createDebugTree } from '../utilities';\n\nfunction formatDuration(duration: number): string {\n  if (duration < 1000) {\n    return `${duration}ms`;\n  }\n  return `${(duration / 1000).toFixed(2)}s`;\n}\n\nexport function formatTimelineNode(\n  node: DebugTreeNode,\n  isLast: boolean,\n  prefix = '',\n  maxDepth?: number,\n): string[] {\n  const lines: string[] = [];\n  const connector = isLast ? '└─' : '├─';\n  const parts: string[] = [];\n\n  parts.push(safeColors.bold(`[${node.entry.namespace}]`));\n  parts.push(node.entry.message);\n\n  if (typeof node.entry.duration === 'number') {\n    parts.push(safeColors.dim(`(${formatDuration(node.entry.duration)})`));\n  }\n\n  if (node.entry.level === 'error') {\n    parts.push(safeColors.error(safeSymbols.error));\n  } else if (node.entry.level === 'warn') {\n    parts.push(safeColors.warning(safeSymbols.warning));\n  }\n\n  lines.push(`${prefix}${connector} ${parts.join(' ')}`.trimEnd());\n\n  if (maxDepth !== undefined && node.depth + 1 >= maxDepth) {\n    return lines;\n  }\n\n  const childPrefix = prefix + (isLast ? '   ' : '│  ');\n  for (let index = 0; index < node.children.length; index++) {\n    const child = node.children[index];\n    if (!child) {\n      continue;\n    }\n    const childIsLast = index === node.children.length - 1;\n    lines.push(...formatTimelineNode(child, childIsLast, childPrefix, maxDepth));\n  }\n\n  return lines;\n}\n\nexport function formatTimeline(entries: DebugEntry[]): string {\n  if (entries.length === 0) {\n    return '';\n  }\n\n  const tree = createDebugTree(entries);\n  if (!tree) {\n    return '';\n  }\n\n  return formatTimelineNode(tree, true).join('\\n');\n}\n\nexport function formatTimelineWithSummary(entries: DebugEntry[]): string {\n  const timeline = formatTimeline(entries);\n  if (timeline.length === 0) {\n    return '';\n  }\n\n  const totalDuration = entries.reduce((acc, entry) => acc + (entry.duration ?? 0), 0);\n  const errorCount = entries.filter((entry) => entry.level === 'error').length;\n  const warnCount = entries.filter((entry) => entry.level === 'warn').length;\n\n  const summaryParts: string[] = [];\n  if (totalDuration > 0) {\n    summaryParts.push(`Total: ${formatDuration(totalDuration)}`);\n  }\n  if (errorCount > 0) {\n    summaryParts.push(safeColors.error(`${errorCount} errors`));\n  }\n  if (warnCount > 0) {\n    summaryParts.push(safeColors.warning(`${warnCount} warnings`));\n  }\n\n  if (summaryParts.length === 0) {\n    return timeline;\n  }\n\n  return `${timeline}\\n\\n${safeColors.bold('Summary:')} ${summaryParts.join(', ')}`;\n}\n\n","/**\n * Output formatting utilities for structured CLI output\n */\n\nimport { safeColors, safeSymbols } from './colors';\n\nconst ANSI_PATTERN = /\\u001B\\[[0-9;]*m/g;\n\nexport function stripAnsi(input: string): string {\n  return input.replace(ANSI_PATTERN, '');\n}\n\nexport function hasAnsi(input: string): boolean {\n  return /\\u001B\\[[0-9;]*m/.test(input);\n}\n\nfunction visibleLength(input: string): number {\n  return stripAnsi(input).length;\n}\n\n/**\n * Create a boxed section with title\n */\nexport function box(title: string, content: string[] = [], maxWidth?: number): string {\n  const lines = content.length > 0 ? content : [''];\n  const titleWidth = visibleLength(title);\n  \n  // Determine max width: use provided maxWidth, or terminal width (default 80), or content width\n  const terminalWidth = typeof process !== 'undefined' && process.stdout?.columns ? process.stdout.columns : 80;\n  const effectiveMaxWidth = maxWidth ?? Math.min(terminalWidth - 4, 120); // -4 for borders and padding\n  \n  const bodyWidth = Math.min(\n    effectiveMaxWidth,\n    Math.max(titleWidth, ...lines.map(line => visibleLength(line)))\n  );\n\n  // Wrap long lines\n  const wrappedLines: string[] = [];\n  for (const line of lines) {\n    const lineLength = visibleLength(line);\n    if (lineLength <= bodyWidth) {\n      wrappedLines.push(line);\n    } else {\n      // Split long lines at word boundaries when possible\n      const words = line.split(/(\\s+)/);\n      let currentLine = '';\n      for (const word of words) {\n        const testLine = currentLine + word;\n        if (visibleLength(testLine) <= bodyWidth) {\n          currentLine = testLine;\n        } else {\n          if (currentLine) {\n            wrappedLines.push(currentLine.trimEnd());\n          }\n          // If single word is too long, truncate it\n          if (visibleLength(word) > bodyWidth) {\n            wrappedLines.push(truncate(word, bodyWidth));\n            currentLine = '';\n          } else {\n            currentLine = word;\n          }\n        }\n      }\n      if (currentLine) {\n        wrappedLines.push(currentLine.trimEnd());\n      }\n    }\n  }\n\n  const topBorder = `┌${'─'.repeat(bodyWidth + 2)}┐`;\n  const titleLine = `│ ${safeColors.bold(title)}${' '.repeat(Math.max(0, bodyWidth - titleWidth))} │`;\n  const bodyLines = wrappedLines.map((line) => {\n    const padding = Math.max(0, bodyWidth - visibleLength(line));\n    return `│ ${line}${' '.repeat(padding)} │`;\n  });\n  const bottomBorder = `└${'─'.repeat(bodyWidth + 2)}┘`;\n\n  return [topBorder, titleLine, ...bodyLines, bottomBorder].join('\\n');\n}\n\n/**\n * Add consistent indentation to lines\n */\nexport function indent(lines: string[], level = 1): string[] {\n  const prefix = '  '.repeat(level);\n  return lines.map(line => `${prefix}${line}`);\n}\n\n/**\n * Create a section with header and content\n */\nexport function section(header: string, content: string[]): string[] {\n  return [\n    '',\n    safeColors.bold(header),\n    ...indent(content),\n  ];\n}\n\n/**\n * Format a table with consistent spacing\n */\nexport function table(rows: (string | number)[][], headers?: string[]): string[] {\n  if (rows.length === 0) {return [];}\n  \n  // Calculate column widths\n  const allRows = headers ? [headers, ...rows] : rows;\n  if (allRows.length === 0) {return [];}\n  \n  const columnWidths = allRows[0]!.map((_, colIndex) => \n    Math.max(...allRows.map(row => String(row[colIndex] || '').length))\n  );\n  \n  // Format rows\n  return allRows.map(row => {\n    return row.map((cell, colIndex) => \n      String(cell || '').padEnd(columnWidths[colIndex] || 0)\n    ).join('  ');\n  });\n}\n\n/**\n * Format key-value pairs\n */\nexport interface KeyValueOptions {\n  padKeys?: boolean;\n}\n\nexport function keyValue(\n  pairs: Record<string, string | number>,\n  options: KeyValueOptions = {},\n): string[] {\n  const { padKeys = true } = options;\n  return safeKeyValue(pairs, { pad: padKeys });\n}\n\n/**\n * Format a list with bullets\n */\nexport function bulletList(items: string[]): string[] {\n  return items.map(item => `${safeSymbols.bullet} ${item}`);\n}\n\nexport interface SafeKeyValueOptions {\n  indent?: number;\n  pad?: boolean;\n  valueColor?: (value: string, key: string) => string;\n}\n\nexport function safeKeyValue(\n  pairs: Record<string, string | number>,\n  options: SafeKeyValueOptions = {},\n): string[] {\n  const { indent = 0, pad = true, valueColor } = options;\n  const keys = Object.keys(pairs);\n  if (keys.length === 0) {\n    return [];\n  }\n  const indentStr = ' '.repeat(indent);\n  const maxKeyLength = pad\n    ? Math.max(...keys.map(key => indent + stripAnsi(key).length))\n    : 0;\n  return keys.map((key) => {\n    const rawKey = key;\n    const rawValue = String(pairs[key] ?? '');\n    const keyLength = indent + stripAnsi(rawKey).length;\n    const padding = pad ? Math.max(0, maxKeyLength - keyLength) : 0;\n    const formattedKey = `${indentStr}${rawKey}${' '.repeat(padding)}`;\n    const computedValue = valueColor ? valueColor(rawValue, key) : rawValue;\n    const valueText = hasAnsi(computedValue) ? computedValue : safeColors.muted(computedValue);\n    return `${safeColors.bold(formattedKey)}: ${valueText}`;\n  });\n}\n\nconst pad2 = (value: number): string => value.toString().padStart(2, '0');\n\nconst toDate = (value: string | Date): Date => (value instanceof Date ? new Date(value.getTime()) : new Date(value));\n\nconst isValidDate = (date: Date): boolean => Number.isFinite(date.getTime());\n\nfunction getOffsetMinutes(date: Date, timeZone?: string): number {\n  if (!timeZone) {\n    return -date.getTimezoneOffset();\n  }\n\n  const dtf = new Intl.DateTimeFormat('en-US', {\n    timeZone,\n    hour12: false,\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n  });\n\n  const parts = dtf.formatToParts(date);\n  const lookup = Object.fromEntries(\n    parts\n      .filter(part => part.type !== 'literal')\n      .map(part => [part.type, Number(part.value)]),\n  ) as Record<string, number | undefined>;\n\n  const year = lookup.year ?? date.getUTCFullYear();\n  const month = (lookup.month ?? date.getUTCMonth() + 1) - 1;\n  const day = lookup.day ?? date.getUTCDate();\n  // Intl.DateTimeFormat with hour12:false may return 24 for midnight, normalize to 0\n  const hour = (lookup.hour ?? date.getUTCHours()) % 24;\n  const minute = lookup.minute ?? date.getUTCMinutes();\n  const second = lookup.second ?? date.getUTCSeconds();\n\n  const asUTC = Date.UTC(year, month, day, hour, minute, second);\n\n  return Math.round((asUTC - date.getTime()) / 60000);\n}\n\nfunction formatOffset(offsetMinutes: number): string {\n  const sign = offsetMinutes >= 0 ? '+' : '-';\n  const absMinutes = Math.abs(offsetMinutes);\n  const hours = Math.floor(absMinutes / 60);\n  const minutes = absMinutes % 60;\n  return `${sign}${pad2(hours)}:${pad2(minutes)}`;\n}\n\nfunction getDateParts(date: Date, timeZone?: string): {\n  year: number;\n  month: number;\n  day: number;\n  hour: number;\n  minute: number;\n  second: number;\n} {\n  if (!timeZone) {\n    return {\n      year: date.getFullYear(),\n      month: date.getMonth() + 1,\n      day: date.getDate(),\n      hour: date.getHours(),\n      minute: date.getMinutes(),\n      second: date.getSeconds(),\n    };\n  }\n\n  const dtf = new Intl.DateTimeFormat('en-US', {\n    timeZone,\n    hour12: false,\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n  });\n\n  const parts = dtf.formatToParts(date);\n  const lookup = Object.fromEntries(\n    parts\n      .filter(part => part.type !== 'literal')\n      .map(part => [part.type, Number(part.value)]),\n  ) as Record<string, number | undefined>;\n\n  return {\n    year: lookup.year ?? date.getUTCFullYear(),\n    month: lookup.month ?? date.getUTCMonth() + 1,\n    day: lookup.day ?? date.getUTCDate(),\n    // Intl.DateTimeFormat with hour12:false may return 24 for midnight, normalize to 0\n    hour: (lookup.hour ?? date.getUTCHours()) % 24,\n    minute: lookup.minute ?? date.getUTCMinutes(),\n    second: lookup.second ?? date.getUTCSeconds(),\n  };\n}\n\n/**\n * Apply primary headline styling\n */\nexport function headline(text: string): string {\n  return safeColors.primary(safeColors.bold(text));\n}\n\n/**\n * Accent label style (used for tags/pills)\n */\nexport function accentLabel(text: string): string {\n  return safeColors.accent(safeColors.bold(text));\n}\n\n/**\n * Muted helper\n */\nexport function muted(text: string): string {\n  return safeColors.muted(text);\n}\n\n/**\n * Format file size\n */\nexport function formatSize(bytes: number): string {\n  const units = ['B', 'KB', 'MB', 'GB'];\n  let size = bytes;\n  let unitIndex = 0;\n  \n  while (size >= 1024 && unitIndex < units.length - 1) {\n    size /= 1024;\n    unitIndex++;\n  }\n  \n  return `${size.toFixed(unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format relative time\n */\nexport function formatRelativeTime(timestamp: string | Date): string {\n  const now = new Date();\n  const time = toDate(timestamp);\n\n  if (!isValidDate(time)) {\n    return 'Invalid date';\n  }\n\n  const diffMs = now.getTime() - time.getTime();\n  \n  const seconds = Math.floor(diffMs / 1000);\n  const minutes = Math.floor(seconds / 60);\n  const hours = Math.floor(minutes / 60);\n  const days = Math.floor(hours / 24);\n  \n  if (days > 0) {\n    return `${days} day${days > 1 ? 's' : ''} ago`;\n  } else if (hours > 0) {\n    return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n  } else if (minutes > 0) {\n    return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;\n  } else {\n    return `${seconds} second${seconds > 1 ? 's' : ''} ago`;\n  }\n}\n\nexport interface FormatTimestampOptions {\n  mode?: 'local' | 'iso';\n  timeZone?: string;\n  includeSeconds?: boolean;\n  includeMilliseconds?: boolean;\n  includeOffset?: boolean;\n}\n\n/**\n * Format timestamps as absolute values (local or ISO) with optional offsets\n */\nexport function formatTimestamp(\n  timestamp: string | Date,\n  options: FormatTimestampOptions = {},\n): string {\n  const {\n    mode = 'local',\n    timeZone,\n    includeSeconds = false,\n    includeMilliseconds = true,\n    includeOffset = true,\n  } = options;\n\n  const date = toDate(timestamp);\n  if (!isValidDate(date)) {\n    return 'Invalid date';\n  }\n\n  const offsetMinutes = includeOffset ? getOffsetMinutes(date, timeZone) : null;\n  const offsetSuffix =\n    includeOffset && offsetMinutes !== null ? ` (${formatOffset(offsetMinutes)})` : '';\n\n  if (mode === 'iso') {\n    const isoRaw = date.toISOString();\n    const iso = includeMilliseconds ? isoRaw : isoRaw.replace(/\\.\\d{3}Z$/, 'Z');\n    return `${iso}${offsetSuffix}`;\n  }\n\n  const { year, month, day, hour, minute, second } = getDateParts(date, timeZone);\n  const base = [\n    `${year}-${pad2(month)}-${pad2(day)}`,\n    `${pad2(hour)}:${pad2(minute)}${includeSeconds ? `:${pad2(second)}` : ''}`,\n  ].join(' ');\n\n  return `${base}${offsetSuffix}`;\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n  if (text.length <= maxLength) {return text;}\n  return text.substring(0, maxLength - 3) + '...';\n}\n\n/**\n * Pad string to specific width\n */\nexport function pad(text: string, width: number, align: 'left' | 'right' | 'center' = 'left'): string {\n  if (text.length >= width) {return text;}\n  \n  const padding = width - text.length;\n  \n  switch (align) {\n    case 'right':\n      return ' '.repeat(padding) + text;\n    case 'center':\n      const leftPad = Math.floor(padding / 2);\n      const rightPad = padding - leftPad;\n      return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n    default:\n      return text + ' '.repeat(padding);\n  }\n}\n","import { box } from '../../format';\nimport { formatDebugEntryAI, formatDebugEntriesAI, shouldUseAIFormat } from '../formatters/ai';\nimport {\n  formatDebugEntryHuman,\n  formatDebugEntriesHuman,\n  type HumanFormatterOptions,\n} from '../formatters/human';\nimport { formatTimelineWithSummary } from '../formatters/timeline';\nimport type { DebugDetailLevel, DebugEntry, DebugFormat } from '../types';\n\nexport interface DebugOutputOptions extends HumanFormatterOptions {\n  format?: DebugFormat;\n  detailLevel?: DebugDetailLevel;\n  useTimeline?: boolean;\n}\n\nexport function formatDebugOutput(entry: DebugEntry, options: DebugOutputOptions = {}): string {\n  if (shouldUseAIFormat(options.format)) {\n    return formatDebugEntryAI(entry);\n  }\n\n  return formatDebugEntryHuman(entry, options);\n}\n\nexport function formatDebugOutputs(entries: DebugEntry[], options: DebugOutputOptions = {}): string {\n  if (shouldUseAIFormat(options.format)) {\n    return formatDebugEntriesAI(entries);\n  }\n\n  if (options.useTimeline) {\n    return formatTimelineWithSummary(entries);\n  }\n\n  return formatDebugEntriesHuman(entries, options);\n}\n\nexport class DebugSection {\n  private readonly entries: DebugEntry[] = [];\n  private readonly title: string;\n  private readonly options: DebugOutputOptions;\n\n  constructor(title: string, options: DebugOutputOptions = {}) {\n    this.title = title;\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.entries.push(entry);\n  }\n\n  addAll(entries: DebugEntry[]): void {\n    this.entries.push(...entries);\n  }\n\n  clear(): void {\n    this.entries.length = 0;\n  }\n\n  format(): string {\n    if (this.entries.length === 0) {\n      return '';\n    }\n\n    const content = formatDebugOutputs(this.entries, this.options);\n    if (!content) {\n      return '';\n    }\n\n    if (shouldUseAIFormat(this.options.format)) {\n      return content;\n    }\n\n    return box(this.title, content.split('\\n'));\n  }\n\n  get count(): number {\n    return this.entries.length;\n  }\n}\n\nexport class DebugOutput {\n  private readonly sections = new Map<string, DebugSection>();\n  private readonly globalEntries: DebugEntry[] = [];\n  private readonly options: DebugOutputOptions;\n\n  constructor(options: DebugOutputOptions = {}) {\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.globalEntries.push(entry);\n  }\n\n  addToSection(sectionName: string, entry: DebugEntry): void {\n    if (!this.sections.has(sectionName)) {\n      this.sections.set(sectionName, new DebugSection(sectionName, this.options));\n    }\n    this.sections.get(sectionName)!.add(entry);\n  }\n\n  getSection(sectionName: string): DebugSection {\n    if (!this.sections.has(sectionName)) {\n      this.sections.set(sectionName, new DebugSection(sectionName, this.options));\n    }\n    return this.sections.get(sectionName)!;\n  }\n\n  format(): string {\n    const parts: string[] = [];\n\n    if (this.globalEntries.length > 0) {\n      const formatted = formatDebugOutputs(this.globalEntries, this.options);\n      if (formatted) {\n        parts.push(formatted);\n      }\n    }\n\n    for (const [, section] of this.sections) {\n      const formatted = section.format();\n      if (formatted) {\n        parts.push(formatted);\n      }\n    }\n\n    return parts.join('\\n\\n');\n  }\n\n  clear(): void {\n    this.globalEntries.length = 0;\n    this.sections.clear();\n  }\n\n  get totalCount(): number {\n    let count = this.globalEntries.length;\n    for (const section of this.sections.values()) {\n      count += section.count;\n    }\n    return count;\n  }\n}\n\n","import type { DebugEntry, DebugTreeNode } from '../types';\nimport { createDebugTree } from '../utilities';\nimport { formatTimelineNode } from '../formatters/timeline';\n\nexport interface DebugTreeOptions {\n  showSummary?: boolean;\n  maxDepth?: number;\n}\n\ninterface DebugTreeStats {\n  totalDuration: number;\n  errorCount: number;\n  warnCount: number;\n  nodeCount: number;\n}\n\nexport class DebugTree {\n  private tree: DebugTreeNode | null = null;\n  private readonly options: DebugTreeOptions;\n\n  constructor(entries: DebugEntry[], options: DebugTreeOptions = {}) {\n    this.options = options;\n    this.tree = createDebugTree(entries);\n  }\n\n  update(entries: DebugEntry[]): void {\n    this.tree = createDebugTree(entries);\n  }\n\n  format(): string {\n    if (!this.tree) {\n      return '';\n    }\n\n    const lines = formatTimelineNode(this.tree, true, '', this.options.maxDepth);\n    if (this.options.showSummary) {\n      const summary = this.getSummary();\n      if (summary) {\n        lines.push('', summary);\n      }\n    }\n    return lines.join('\\n');\n  }\n\n  private getSummary(): string {\n    if (!this.tree) {\n      return '';\n    }\n\n    const stats = this.collectStats(this.tree);\n    const parts: string[] = [];\n\n    if (stats.totalDuration > 0) {\n      parts.push(`total ${stats.totalDuration}ms`);\n    }\n    if (stats.errorCount > 0) {\n      parts.push(`${stats.errorCount} errors`);\n    }\n    if (stats.warnCount > 0) {\n      parts.push(`${stats.warnCount} warnings`);\n    }\n    parts.push(`${stats.nodeCount} nodes`);\n\n    return `Summary: ${parts.join(', ')}`;\n  }\n\n  private collectStats(node: DebugTreeNode): DebugTreeStats {\n    let totalDuration = node.entry.duration ?? 0;\n    let errorCount = node.entry.level === 'error' ? 1 : 0;\n    let warnCount = node.entry.level === 'warn' ? 1 : 0;\n    let nodeCount = 1;\n\n    for (const child of node.children) {\n      const childStats = this.collectStats(child);\n      totalDuration += childStats.totalDuration;\n      errorCount += childStats.errorCount;\n      warnCount += childStats.warnCount;\n      nodeCount += childStats.nodeCount;\n    }\n\n    return { totalDuration, errorCount, warnCount, nodeCount };\n  }\n\n  get root(): DebugTreeNode | null {\n    return this.tree;\n  }\n}\n\n","import type { DebugEntry } from '../types';\nimport { formatTimelineWithSummary } from '../formatters/timeline';\nimport { DebugTree } from './tree';\n\nexport interface TraceOptions {\n  showSummary?: boolean;\n  groupByPlugin?: boolean;\n  maxDepth?: number;\n}\n\nexport class DebugTrace {\n  private readonly entries: DebugEntry[] = [];\n  private readonly options: TraceOptions;\n\n  constructor(entries: DebugEntry[] = [], options: TraceOptions = {}) {\n    this.entries.push(...entries);\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.entries.push(entry);\n  }\n\n  addAll(entries: DebugEntry[]): void {\n    this.entries.push(...entries);\n  }\n\n  clear(): void {\n    this.entries.length = 0;\n  }\n\n  format(): string {\n    if (this.entries.length === 0) {\n      return '';\n    }\n\n    const sorted = [...this.entries].sort((a, b) => a.timestamp - b.timestamp);\n    if (this.options.groupByPlugin) {\n      return this.formatGrouped(sorted);\n    }\n\n    return formatTimelineWithSummary(sorted);\n  }\n\n  private formatGrouped(entries: DebugEntry[]): string {\n    const groups = new Map<string, DebugEntry[]>();\n    for (const entry of entries) {\n      const plugin = entry.namespace.split(':')[0] ?? entry.namespace;\n      if (!groups.has(plugin)) {\n        groups.set(plugin, []);\n      }\n      groups.get(plugin)!.push(entry);\n    }\n\n    const parts: string[] = [];\n    for (const [plugin, pluginEntries] of groups) {\n      const tree = new DebugTree(pluginEntries, {\n        showSummary: this.options.showSummary,\n        maxDepth: this.options.maxDepth,\n      });\n      const formatted = tree.format();\n      if (formatted) {\n        parts.push(`[${plugin}]`, formatted);\n      }\n    }\n    return parts.join('\\n\\n');\n  }\n\n  getStats(): {\n    totalEntries: number;\n    plugins: string[];\n    totalDuration: number;\n    errorCount: number;\n    warnCount: number;\n  } {\n    const plugins = new Set<string>();\n    let totalDuration = 0;\n    let errorCount = 0;\n    let warnCount = 0;\n\n    for (const entry of this.entries) {\n      const plugin = entry.namespace.split(':')[0] ?? entry.namespace;\n      plugins.add(plugin);\n      totalDuration += entry.duration ?? 0;\n      if (entry.level === 'error') {\n        errorCount += 1;\n      } else if (entry.level === 'warn') {\n        warnCount += 1;\n      }\n    }\n\n    return {\n      totalEntries: this.entries.length,\n      plugins: Array.from(plugins),\n      totalDuration,\n      errorCount,\n      warnCount,\n    };\n  }\n}\n\n"]}