@kb-labs/shared-cli-ui 2.119.0-canary.bb3d7f2f1 → 2.119.0-canary.ce846d079
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/debug.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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"]}
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/formatters/ai.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/colors.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/formatters/human.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/utilities.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/formatters/timeline.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/format.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/components/output.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/debug/components/tree.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/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"]}
|