@kb-labs/shared-cli-ui 2.118.2 → 2.119.0-canary.0c078654e
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/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/colors.ts","../src/loader.ts","../src/format.ts","../src/command-output.ts","../src/timing-tracker.ts","../src/command-suggestions.ts","../src/command-discovery.ts","../src/manifest-parser.ts","../src/multi-cli-suggestions.ts","../src/dynamic-command-discovery.ts","../src/artifacts-display.ts","../src/table.ts","../src/debug/formatters/ai.ts","../src/debug/formatters/human.ts","../src/debug/utilities.ts","../src/debug/formatters/timeline.ts","../src/debug/components/output.ts","../src/debug/components/tree.ts","../src/debug/components/trace.ts","../src/command-runner.ts","../src/utils/flags.ts","../src/utils/env.ts","../src/utils/context.ts","../src/utils/path.ts","../src/utils/retry.ts","../src/utils/errors.ts","../src/destructive.ts","../src/modern-format.ts","../src/command-result.ts","../src/log-display.ts","../src/badge.ts","../src/interactive/terminal.ts","../src/tasks.ts","../src/interactive/confirm.ts","../src/interactive/text.ts","../src/interactive/select.ts","../src/interactive/multi-select.ts","../src/stdout-ui.ts"],"names":["text","indent","pad","timestamp","path","fsp","padding","formatTimestamp","formatDuration","section","result","formatTiming","bulletList","readline2","readline3"],"mappings":"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","file":"index.js","sourcesContent":["/**\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","/**\n * Progress indicators and loaders for CLI operations\n *\n * Periodic animation implementation (works in child processes as multi-line output).\n */\n\nimport { safeColors, safeSymbols } from './colors';\n\nexport interface LoaderOptions {\n /** Text to show while loading */\n text?: string;\n /** Whether to show spinner (true) or progress bar (false) */\n spinner?: boolean;\n /** Total items for progress bar */\n total?: number;\n /** Current item for progress bar */\n current?: number;\n /** Whether JSON mode is enabled (disables all visual feedback) */\n jsonMode?: boolean;\n}\n\nconst SPINNER_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n// Process-scoped json mode flag. Set by SDK before invoking handler; read by useLoader().\nlet _jsonMode = false;\n\nexport function setJsonMode(enabled: boolean): void {\n _jsonMode = enabled;\n}\n\nexport function isJsonMode(): boolean {\n return _jsonMode;\n}\n\nexport class Loader {\n private isActive = false;\n private options: LoaderOptions;\n private frameIndex = 0;\n private intervalId?: NodeJS.Timeout;\n private currentText: string; // ← Реактивная переменная для текста\n\n constructor(options: LoaderOptions = {}) {\n this.options = {\n text: 'Loading...',\n spinner: true,\n jsonMode: false,\n ...options,\n };\n this.currentText = this.options.text ?? 'Loading...';\n }\n\n start(): void {\n if (this.options.jsonMode || this.isActive) {\n return;\n }\n this.isActive = true;\n\n // Start periodic animation updates (every 200ms)\n if (this.options.spinner && !this.options.jsonMode) {\n this.intervalId = setInterval(() => {\n if (!this.isActive) {\n this.clearInterval();\n return;\n }\n\n const char = SPINNER_CHARS[this.frameIndex % SPINNER_CHARS.length];\n process.stdout.write(`\\r${char} ${this.currentText}`); // ← Читаем реактивный текст\n this.frameIndex++;\n }, 200);\n }\n }\n\n update(options: Partial<LoaderOptions>): void {\n this.options = { ...this.options, ...options };\n\n if (!this.isActive || this.options.jsonMode) {return;}\n\n // Update reactive text - setInterval will pick it up on next tick\n if (options.text !== undefined) {\n this.currentText = options.text;\n }\n\n // For manual updates when no interval (progress bar mode)\n if (!this.intervalId) {\n if (this.options.spinner) {\n const text = this.options.text ?? 'Loading...';\n console.log(`${safeSymbols.info} ${text}`);\n } else if (this.options.total !== undefined) {\n this.updateProgress();\n }\n }\n }\n\n stop(): void {\n this.isActive = false;\n this.clearInterval();\n }\n\n succeed(message?: string): void {\n this.stop();\n if (!this.options.jsonMode && message) {\n process.stdout.write(`\\r\\x1b[K${safeSymbols.success} ${message}\\n`);\n }\n }\n\n fail(message?: string): void {\n this.stop();\n if (!this.options.jsonMode && message) {\n process.stdout.write(`\\r\\x1b[K${safeSymbols.error} ${message}\\n`);\n }\n }\n\n private clearInterval(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = undefined;\n }\n }\n\n private updateProgress(): void {\n if (this.options.total === undefined || this.options.current === undefined) {return;}\n\n const current = this.options.current;\n const total = this.options.total;\n const percentage = Math.round((current / total) * 100);\n const barLength = 20;\n const filledLength = Math.round((current / total) * barLength);\n\n const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);\n const text = this.options.text || 'Progress';\n\n process.stdout.write(`\\r${safeColors.info('→')} ${text}... ${bar} ${percentage}% (${current}/${total})`);\n }\n}\n\n/**\n * Create a simple spinner\n */\nexport function createSpinner(text: string, jsonMode = false): Loader {\n return new Loader({ text, spinner: true, jsonMode });\n}\n\n/**\n * Create a progress bar\n */\nexport function createProgressBar(text: string, total: number, jsonMode = false): Loader {\n return new Loader({ text, spinner: false, total, current: 0, jsonMode });\n}\n\n/**\n * Simple loading message without spinner\n */\nexport function showLoading(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeColors.info('→')} ${text}...`);\n }\n}\n\n/**\n * Show completion message\n */\nexport function showSuccess(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeSymbols.success} ${text}`);\n }\n}\n\n/**\n * Show error message\n */\nexport function showError(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeSymbols.error} ${text}`);\n }\n}\n\n/**\n * Create a loader for progress indication\n *\n * @param text - Text to display while loading\n * @param options - Optional configuration\n * @returns Loader instance\n *\n * @example\n * ```typescript\n * import { useLoader } from '@kb-labs/sdk';\n *\n * const loader = useLoader('Processing data...');\n * loader.start();\n * // ... do work ...\n * loader.succeed('Processing complete!');\n * ```\n */\nexport function useLoader(text: string, options?: Partial<LoaderOptions>): Loader {\n return new Loader({ text, jsonMode: _jsonMode, ...options });\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","/**\n * Command output formatting utilities\n * Provides consistent formatting for CLI command results\n */\n\nimport { box, keyValue } from './format';\nimport { safeColors } from './colors';\n\nexport interface CommandResult {\n title: string;\n summary: Record<string, string | number>;\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n suggestions?: string[];\n}\n\n/**\n * Format timing in milliseconds to human-readable string\n */\nexport function formatTiming(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n } else if (ms < 60000) {\n return `${(ms / 1000).toFixed(1)}s`;\n } else {\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n }\n}\n\n/**\n * Format timing breakdown as array of strings\n */\nexport function formatTimingBreakdown(timings: Record<string, number>): string[] {\n const lines: string[] = [];\n \n // Sort timings by value (descending) for better readability\n const sortedEntries = Object.entries(timings)\n .filter(([key]) => key !== 'total')\n .sort(([, a], [, b]) => b - a);\n \n for (const [name, ms] of sortedEntries) {\n const formattedName = name.charAt(0).toUpperCase() + name.slice(1);\n lines.push(`${formattedName}: ${formatTiming(ms)}`);\n }\n \n // Always show total at the end\n if (timings.total !== undefined) {\n lines.push(`Total: ${formatTiming(timings.total)}`);\n }\n \n return lines;\n}\n\n/**\n * Format complete command output with box, summary, timing, and additional info\n */\nexport function formatCommandOutput(result: CommandResult): string {\n const sections: string[] = [];\n \n // Add summary section\n const summaryLines = keyValue(result.summary);\n sections.push(...summaryLines);\n \n // Add timing section\n if (result.timing !== undefined) {\n sections.push('');\n \n if (typeof result.timing === 'number') {\n sections.push(`Time: ${formatTiming(result.timing)}`);\n } else {\n const timingLines = formatTimingBreakdown(result.timing);\n sections.push(...timingLines);\n }\n }\n \n // Add warnings section\n if (result.warnings && result.warnings.length > 0) {\n sections.push('');\n sections.push(safeColors.warning('Warnings:'));\n result.warnings.forEach(warning => \n sections.push(` ${safeColors.dim('•')} ${warning}`)\n );\n }\n \n // Add errors section\n if (result.errors && result.errors.length > 0) {\n sections.push('');\n sections.push(safeColors.error('Errors:'));\n result.errors.forEach(error => \n sections.push(` ${safeColors.dim('•')} ${error}`)\n );\n }\n \n // Add diagnostics section\n if (result.diagnostics && result.diagnostics.length > 0) {\n sections.push('');\n sections.push(safeColors.info('Diagnostics:'));\n result.diagnostics.forEach(diagnostic => \n sections.push(` ${safeColors.dim('•')} ${diagnostic}`)\n );\n }\n \n // Add suggestions section\n if (result.suggestions && result.suggestions.length > 0) {\n sections.push('');\n sections.push(safeColors.info('Suggestions:'));\n result.suggestions.forEach(suggestion => \n sections.push(` ${safeColors.dim('•')} ${suggestion}`)\n );\n }\n \n return box(result.title, sections);\n}\n\n/**\n * Create a simple command result with just title, summary, and timing\n */\nexport function createSimpleResult(\n title: string, \n summary: Record<string, string | number>, \n timing?: number\n): CommandResult {\n return {\n title,\n summary,\n timing,\n };\n}\n\n/**\n * Create a detailed command result with all optional fields\n */\nexport function createDetailedResult(\n title: string,\n summary: Record<string, string | number>,\n options: {\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n suggestions?: string[];\n } = {}\n): CommandResult {\n return {\n title,\n summary,\n ...options,\n };\n}\n","/**\n * Timing tracker utility for CLI commands\n * Provides checkpoint-based timing measurement\n */\n\nexport class TimingTracker {\n private start: number;\n private checkpoints: Record<string, number> = {};\n \n constructor() {\n this.start = Date.now();\n }\n \n /**\n * Record a timing checkpoint\n */\n checkpoint(name: string): void {\n this.checkpoints[name] = Date.now() - this.start;\n }\n \n /**\n * Get total elapsed time in milliseconds\n */\n total(): number {\n return Date.now() - this.start;\n }\n \n /**\n * Get timing breakdown including total\n */\n breakdown(): Record<string, number> {\n return { ...this.checkpoints, total: this.total() };\n }\n \n /**\n * Get timing breakdown without total\n */\n checkpointsOnly(): Record<string, number> {\n return { ...this.checkpoints };\n }\n \n /**\n * Reset the timer\n */\n reset(): void {\n this.start = Date.now();\n this.checkpoints = {};\n }\n \n /**\n * Get elapsed time since last checkpoint or start\n */\n sinceLastCheckpoint(): number {\n const lastCheckpointTime = Math.max(...Object.values(this.checkpoints), 0);\n return Date.now() - this.start - lastCheckpointTime;\n }\n \n /**\n * Get elapsed time since a specific checkpoint\n */\n sinceCheckpoint(checkpointName: string): number | null {\n const checkpointTime = this.checkpoints[checkpointName];\n if (checkpointTime === undefined) {\n return null;\n }\n return Date.now() - this.start - checkpointTime;\n }\n}\n","/**\n * Command suggestions and validation utilities\n */\n\nexport interface CommandSuggestion {\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available?: boolean;\n}\n\nexport interface CommandRegistry {\n commands: Set<string>;\n groups: Map<string, Set<string>>;\n}\n\n/**\n * Create a command registry from available commands\n */\nexport function createCommandRegistry(commands: string[]): CommandRegistry {\n const commandSet = new Set(commands);\n const groups = new Map<string, Set<string>>();\n \n // Group commands by prefix (e.g., \"devlink:apply\" -> group \"devlink\")\n for (const cmd of commands) {\n const [group, ...rest] = cmd.split(':');\n if (group && rest.length > 0) {\n if (!groups.has(group)) {\n groups.set(group, new Set());\n }\n groups.get(group)!.add(rest.join(':'));\n }\n }\n \n return {\n commands: commandSet,\n groups\n };\n}\n\n/**\n * Check if a command is available in the registry\n */\nexport function isCommandAvailable(\n command: string, \n registry: CommandRegistry\n): boolean {\n // Handle full command strings like \"kb devlink apply\"\n if (command.startsWith('kb ')) {\n const parts = command.split(' ');\n if (parts.length >= 3 && parts[1] && parts[2]) {\n const group = parts[1];\n const subcommand = parts[2];\n const fullCommand = `${group}:${subcommand}`;\n return registry.commands.has(fullCommand);\n }\n }\n \n // Handle direct command names like \"devlink:apply\"\n return registry.commands.has(command);\n}\n\n/**\n * Validate suggestions against available commands\n */\nexport function validateSuggestions(\n suggestions: CommandSuggestion[],\n registry: CommandRegistry\n): CommandSuggestion[] {\n return suggestions.map(suggestion => ({\n ...suggestion,\n available: isCommandAvailable(suggestion.command, registry)\n })).filter(suggestion => suggestion.available);\n}\n\n/**\n * Generate common devlink suggestions\n */\nexport function generateDevlinkSuggestions(\n warningCodes: Set<string>,\n context: { undo?: { available: boolean } },\n registry: CommandRegistry\n): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n\n // LOCK_MISMATCH -> apply\n if (warningCodes.has('LOCK_MISMATCH')) {\n suggestions.push({\n id: 'SYNC_LOCK',\n command: 'kb devlink apply',\n args: ['--yes'],\n description: 'Apply changes to sync manifests',\n impact: 'safe',\n when: 'LOCK_MISMATCH'\n });\n }\n\n // BACKUP_MISSING -> freeze\n if (warningCodes.has('BACKUP_MISSING')) {\n suggestions.push({\n id: 'CREATE_BACKUP',\n command: 'kb devlink freeze',\n args: ['--replace'],\n description: 'Create a fresh backup',\n impact: 'safe',\n when: 'BACKUP_MISSING'\n });\n }\n\n // STALE_LOCK -> freeze\n if (warningCodes.has('STALE_LOCK')) {\n suggestions.push({\n id: 'REFRESH_LOCK',\n command: 'kb devlink freeze',\n args: ['--pin=caret'],\n description: 'Refresh lock file',\n impact: 'safe',\n when: 'STALE_LOCK'\n });\n }\n\n // STALE_YALC_ARTIFACTS -> clean\n if (warningCodes.has('STALE_YALC_ARTIFACTS')) {\n suggestions.push({\n id: 'CLEAN_YALC',\n command: 'kb devlink clean',\n args: [],\n description: 'Remove yalc artifacts',\n impact: 'safe',\n when: 'STALE_YALC_ARTIFACTS'\n });\n }\n\n // PROTOCOL_CONFLICTS -> clean --hard\n if (warningCodes.has('PROTOCOL_CONFLICTS')) {\n suggestions.push({\n id: 'FIX_PROTOCOLS',\n command: 'kb devlink clean',\n args: ['--hard'],\n description: 'Reset all protocols and reapply',\n impact: 'disruptive',\n when: 'PROTOCOL_CONFLICTS'\n });\n }\n\n // Undo suggestion\n if (context.undo?.available) {\n suggestions.push({\n id: 'UNDO_LAST',\n command: 'kb devlink undo',\n args: [],\n description: 'Revert last operation',\n impact: 'safe',\n when: 'BACKUP_AVAILABLE'\n });\n }\n\n // Validate and return only available suggestions\n return validateSuggestions(suggestions, registry);\n}\n\n\n/**\n * Generate quick actions for common scenarios\n */\nexport function generateQuickActions(\n hasWarnings: boolean,\n registry: CommandRegistry,\n group: string = 'devlink'\n): CommandSuggestion[] {\n if (!hasWarnings) {return [];}\n\n const quickActions: CommandSuggestion[] = [\n {\n id: 'QUICK_CLEAN',\n command: `kb ${group} clean`,\n args: [],\n description: 'Clean artifacts',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n },\n {\n id: 'QUICK_PLAN',\n command: `kb ${group} plan`,\n args: [],\n description: 'Create plan',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n },\n {\n id: 'QUICK_APPLY',\n command: `kb ${group} apply`,\n args: [],\n description: 'Apply changes',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n }\n ];\n\n return validateSuggestions(quickActions, registry);\n}\n","/**\n * Command discovery utilities for CLI systems\n */\n\nexport interface CommandInfo {\n id: string;\n group: string;\n name: string;\n description: string;\n available: boolean;\n}\n\n/**\n * Discover available commands from CLI manifest or registry\n * This is a generic interface that can be implemented by different CLI systems\n */\nexport interface CommandDiscovery {\n /**\n * Get all available commands\n */\n getAvailableCommands(): Promise<string[]>;\n \n /**\n * Get command info by ID\n */\n getCommandInfo(commandId: string): Promise<CommandInfo | null>;\n \n /**\n * Check if a command is available\n */\n isCommandAvailable(commandId: string): Promise<boolean>;\n}\n\n/**\n * Simple command discovery that works with a predefined list\n * Can be extended to work with actual CLI registries\n */\nexport class StaticCommandDiscovery implements CommandDiscovery {\n constructor(private commands: string[]) {}\n\n async getAvailableCommands(): Promise<string[]> {\n return [...this.commands];\n }\n\n async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n if (!this.commands.includes(commandId)) {\n return null;\n }\n\n const [group, name] = commandId.split(':');\n return {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: `Execute ${commandId}`,\n available: true\n };\n }\n\n async isCommandAvailable(commandId: string): Promise<boolean> {\n return this.commands.includes(commandId);\n }\n}\n\n\n\n/**\n * Create a command discovery instance from a command list\n */\nexport function createCommandDiscovery(commands: string[]): CommandDiscovery {\n return new StaticCommandDiscovery(commands);\n}\n","/**\n * CLI manifest parsing utilities\n */\n\nexport interface CommandManifest {\n manifestVersion: string;\n id: string;\n aliases?: string[];\n group: string;\n describe: string;\n longDescription?: string;\n requires?: string[];\n flags?: FlagDefinition[];\n examples?: string[];\n loader: () => Promise<{ run: unknown }>;\n}\n\nexport interface FlagDefinition {\n name: string;\n type: 'string' | 'boolean' | 'number' | 'array';\n alias?: string;\n default?: string | boolean | number | string[];\n description?: string;\n choices?: string[];\n required?: boolean;\n}\n\n/**\n * Extract command IDs from a manifest\n */\nexport function extractCommandIds(manifest: CommandManifest[]): string[] {\n return manifest.map(cmd => cmd.id);\n}\n\n/**\n * Extract command groups from a manifest\n */\nexport function extractCommandGroups(manifest: CommandManifest[]): string[] {\n const groups = new Set<string>();\n manifest.forEach(cmd => groups.add(cmd.group));\n return Array.from(groups);\n}\n\n/**\n * Find commands by group\n */\nexport function findCommandsByGroup(manifest: CommandManifest[], group: string): CommandManifest[] {\n return manifest.filter(cmd => cmd.group === group);\n}\n\n/**\n * Find command by ID\n */\nexport function findCommandById(manifest: CommandManifest[], id: string): CommandManifest | undefined {\n return manifest.find(cmd => cmd.id === id);\n}\n\n/**\n * Get command info for suggestions\n */\nexport function getCommandInfo(manifest: CommandManifest[], commandId: string): {\n id: string;\n group: string;\n name: string;\n description: string;\n available: boolean;\n} | null {\n const cmd = findCommandById(manifest, commandId);\n if (!cmd) {\n return null;\n }\n\n const [group, name] = commandId.split(':');\n return {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: cmd.describe,\n available: true\n };\n}\n\n/**\n * Generate suggestions for a specific group\n */\nexport function generateGroupSuggestions(\n manifest: CommandManifest[],\n group: string,\n _warningCodes: Set<string>,\n _context: unknown\n): Array<{\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available: boolean;\n}> {\n const groupCommands = findCommandsByGroup(manifest, group);\n const suggestions: Array<{\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available: boolean;\n }> = [];\n\n // Generate common suggestions for each group\n for (const cmd of groupCommands) {\n // Basic command suggestion\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_${cmd.id.split(':')[1]?.toUpperCase() || 'UNKNOWN'}`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: [],\n description: cmd.describe,\n impact: 'safe',\n when: 'GENERAL',\n available: true\n });\n\n // Add specific suggestions based on command type\n if (cmd.id.includes('init')) {\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_INIT_FORCE`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: ['--force'],\n description: `${cmd.describe} (force)`,\n impact: 'disruptive',\n when: 'INIT_FAILED',\n available: true\n });\n }\n\n if (cmd.id.includes('clean') || cmd.id.includes('reset')) {\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_CLEAN_HARD`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: ['--hard'],\n description: `${cmd.describe} (hard)`,\n impact: 'disruptive',\n when: 'CLEAN_NEEDED',\n available: true\n });\n }\n }\n\n return suggestions;\n}\n","/**\n * Multi-CLI suggestions system\n * Supports multiple CLI packages with their own manifests\n */\n\nimport { \n createCommandRegistry, \n generateDevlinkSuggestions,\n type CommandSuggestion,\n type CommandRegistry \n} from './command-suggestions';\nimport { \n extractCommandIds, \n generateGroupSuggestions,\n type CommandManifest \n} from './manifest-parser';\n\nexport interface MultiCLIContext {\n warningCodes: Set<string>;\n undo?: { available: boolean };\n [key: string]: unknown;\n}\n\nexport interface CLIPackage {\n name: string;\n group: string;\n commands: CommandManifest[];\n priority: number; // Higher priority = more important suggestions\n}\n\n/**\n * Multi-CLI suggestions manager\n */\nexport class MultiCLISuggestions {\n private packages: Map<string, CLIPackage> = new Map();\n private globalRegistry: CommandRegistry | null = null;\n\n /**\n * Register a CLI package\n */\n registerPackage(pkg: CLIPackage): void {\n this.packages.set(pkg.name, pkg);\n this.globalRegistry = null; // Invalidate cache\n }\n\n /**\n * Get or create global command registry\n */\n private getGlobalRegistry(): CommandRegistry {\n if (this.globalRegistry) {\n return this.globalRegistry;\n }\n\n const allCommands: string[] = [];\n for (const pkg of this.packages.values()) {\n allCommands.push(...extractCommandIds(pkg.commands));\n }\n\n this.globalRegistry = createCommandRegistry(allCommands);\n return this.globalRegistry;\n }\n\n /**\n * Generate suggestions for a specific group\n */\n generateGroupSuggestions(\n group: string, \n context: MultiCLIContext\n ): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n const registry = this.getGlobalRegistry();\n\n // Find packages for this group\n const groupPackages = Array.from(this.packages.values())\n .filter(pkg => pkg.group === group)\n .sort((a, b) => b.priority - a.priority);\n\n for (const pkg of groupPackages) {\n const groupSuggestions = generateGroupSuggestions(\n pkg.commands, \n group, \n context.warningCodes, \n context\n );\n\n // Convert to CommandSuggestion format and validate\n for (const suggestion of groupSuggestions) {\n if (registry.commands.has(suggestion.command.replace('kb ', '').replace(' ', ':'))) {\n suggestions.push({\n id: suggestion.id,\n command: suggestion.command,\n args: suggestion.args,\n description: suggestion.description,\n impact: suggestion.impact,\n when: suggestion.when,\n available: true\n });\n }\n }\n }\n\n return suggestions;\n }\n\n /**\n * Generate all suggestions across all packages\n */\n generateAllSuggestions(context: MultiCLIContext): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n const registry = this.getGlobalRegistry();\n\n // Special handling for devlink (highest priority)\n if (this.packages.has('devlink')) {\n const devlinkSuggestions = generateDevlinkSuggestions(\n context.warningCodes, \n { undo: context.undo }, \n registry\n );\n suggestions.push(...devlinkSuggestions);\n }\n\n // Generate suggestions for other groups\n const groups = new Set<string>();\n for (const pkg of this.packages.values()) {\n groups.add(pkg.group);\n }\n\n for (const group of groups) {\n if (group !== 'devlink') { // Skip devlink as it's handled above\n const groupSuggestions = this.generateGroupSuggestions(group, context);\n suggestions.push(...groupSuggestions);\n }\n }\n\n return suggestions;\n }\n\n /**\n * Get available commands for a group\n */\n getAvailableCommands(group: string): string[] {\n const groupPackages = Array.from(this.packages.values())\n .filter(pkg => pkg.group === group);\n \n const commands: string[] = [];\n for (const pkg of groupPackages) {\n commands.push(...extractCommandIds(pkg.commands));\n }\n \n return commands;\n }\n\n /**\n * Get all registered packages\n */\n getPackages(): CLIPackage[] {\n return Array.from(this.packages.values());\n }\n}\n\n","/**\n * Dynamic command discovery that loads commands from actual manifests\n */\n\nimport type { CommandDiscovery} from './command-discovery';\nimport { type CommandInfo } from './command-discovery';\n\nexport interface ManifestLoader {\n loadManifest(packageName: string): Promise<any[]>;\n}\n\n/**\n * Dynamic command discovery that loads commands from manifests\n */\nexport class DynamicCommandDiscovery implements CommandDiscovery {\n private manifestCache = new Map<string, any[]>();\n private commandCache = new Map<string, CommandInfo>();\n\n constructor(\n private manifestLoader: ManifestLoader,\n private packageNames: string[]\n ) {}\n\n async getAvailableCommands(): Promise<string[]> {\n const allCommands: string[] = [];\n \n for (const packageName of this.packageNames) {\n try {\n const manifest = await this.loadManifest(packageName);\n const commands = manifest.map(cmd => cmd.id);\n allCommands.push(...commands);\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n }\n }\n \n return allCommands;\n }\n\n async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n // Check cache first\n if (this.commandCache.has(commandId)) {\n return this.commandCache.get(commandId)!;\n }\n\n // Search through all packages\n for (const packageName of this.packageNames) {\n try {\n const manifest = await this.loadManifest(packageName);\n const command = manifest.find(cmd => cmd.id === commandId);\n \n if (command) {\n const [group, name] = commandId.split(':');\n const info: CommandInfo = {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: command.describe || `Execute ${commandId}`,\n available: true\n };\n \n this.commandCache.set(commandId, info);\n return info;\n }\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n }\n }\n\n return null;\n }\n\n async isCommandAvailable(commandId: string): Promise<boolean> {\n const info = await this.getCommandInfo(commandId);\n return info !== null;\n }\n\n private async loadManifest(packageName: string): Promise<any[]> {\n if (this.manifestCache.has(packageName)) {\n return this.manifestCache.get(packageName)!;\n }\n\n const manifest = await this.manifestLoader.loadManifest(packageName);\n this.manifestCache.set(packageName, manifest);\n return manifest;\n }\n}\n\n/**\n * Create a dynamic command discovery for KB Labs packages\n */\nexport function createKBLabsCommandDiscovery(): DynamicCommandDiscovery {\n const manifestLoader: ManifestLoader = {\n async loadManifest(packageName: string): Promise<any[]> {\n try {\n // Try to load from different possible locations\n const possiblePaths = [\n `@kb-labs/${packageName}/cli.manifest.js`,\n `@kb-labs/${packageName}/dist/cli.manifest.js`,\n `@kb-labs/${packageName}/src/cli.manifest.js`\n ];\n\n for (const path of possiblePaths) {\n try {\n const manifest = await import(path);\n if (manifest.commands && Array.isArray(manifest.commands)) {\n return manifest.commands;\n }\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error(`No manifest found for ${packageName}`);\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n return [];\n }\n }\n };\n\n const packageNames = [\n 'devlink-core',\n 'mind-cli', \n 'tox-cli',\n 'core-cli'\n ];\n\n return new DynamicCommandDiscovery(manifestLoader, packageNames);\n}\n","import path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { safeColors } from './colors';\nimport { formatSize, formatRelativeTime, safeKeyValue } from './format';\n\nexport interface ArtifactInfo {\n name: string;\n path: string;\n size?: number;\n modified?: Date;\n description: string;\n}\n\nexport interface ArtifactDisplayOptions {\n showSize?: boolean;\n showTime?: boolean;\n showDescription?: boolean;\n maxItems?: number;\n title?: string;\n groupBy?: 'none' | 'type' | 'time';\n}\n\n/**\n * Display artifacts information in CLI\n */\nexport function displayArtifacts(\n artifacts: ArtifactInfo[],\n options: ArtifactDisplayOptions = {},\n): string[] {\n const {\n showSize = true,\n showTime = true,\n showDescription = false,\n maxItems = 10,\n title = 'Generated Artifacts',\n groupBy = 'none'\n } = options;\n\n if (artifacts.length === 0) {\n return [];\n }\n\n // Sort and limit artifacts\n let sortedArtifacts = artifacts;\n \n if (groupBy === 'time') {\n sortedArtifacts = [...artifacts].sort(\n (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n );\n } else if (groupBy === 'type') {\n sortedArtifacts = [...artifacts].sort((a, b) => a.name.localeCompare(b.name));\n } else {\n sortedArtifacts = [...artifacts].sort(\n (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n );\n }\n\n sortedArtifacts = sortedArtifacts.slice(0, maxItems);\n\n const lines: string[] = [];\n\n if (title) {\n lines.push(safeColors.bold(title));\n }\n\n if (groupBy === 'type') {\n const grouped = sortedArtifacts.reduce((acc, artifact) => {\n const type = artifact.name.split(' ')[0] || 'Other';\n if (!acc[type]) {acc[type] = [];}\n acc[type]!.push(artifact);\n return acc;\n }, {} as Record<string, ArtifactInfo[]>);\n\n Object.entries(grouped).forEach(([type, items], index) => {\n if (index > 0 || title) {\n lines.push('');\n }\n lines.push(...safeKeyValue({ [type]: '' }, { pad: false }));\n items.forEach((artifact, artifactIndex) => {\n if (artifactIndex > 0) {\n lines.push('');\n }\n lines.push(...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription,\n indent: 2,\n }));\n });\n });\n return lines;\n }\n\n sortedArtifacts.forEach((artifact, index) => {\n if (index > 0) {\n lines.push('');\n }\n lines.push(...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription,\n indent: 0,\n }));\n });\n\n return lines;\n}\n\n/**\n * Format a single artifact line\n */\nfunction formatArtifactLines(\n artifact: ArtifactInfo,\n options: {\n showSize: boolean;\n showTime: boolean;\n showDescription: boolean;\n indent: number;\n },\n): string[] {\n const { showSize, showTime, showDescription, indent } = options;\n const relativePath = path.relative(process.cwd(), artifact.path);\n const lines: string[] = [];\n lines.push(\n ...safeKeyValue({ [artifact.name]: relativePath }, { pad: false, indent }),\n );\n if (showSize && artifact.size) {\n lines.push(\n ...safeKeyValue({ Size: formatSize(artifact.size) }, { pad: false, indent: indent + 2 }),\n );\n }\n\n if (showTime && artifact.modified) {\n lines.push(\n ...safeKeyValue({ Updated: formatRelativeTime(artifact.modified) }, { pad: false, indent: indent + 2 }),\n );\n }\n\n if (showDescription && artifact.description) {\n lines.push(\n ...safeKeyValue({ Note: artifact.description }, { pad: false, indent: indent + 2 }),\n );\n }\n\n return lines;\n}\n\n/**\n * Display a single artifact with full details\n */\nexport function displaySingleArtifact(artifact: ArtifactInfo, title?: string): string[] {\n const relativePath = path.relative(process.cwd(), artifact.path);\n const lines: string[] = [];\n \n if (title) {\n lines.push('');\n lines.push(safeColors.bold(title));\n }\n \n lines.push(` ${safeColors.bold(artifact.name)}: ${safeColors.info(relativePath)}`);\n \n if (artifact.size) {\n lines.push(` Size: ${formatSize(artifact.size)}`);\n }\n \n if (artifact.modified) {\n lines.push(` Modified: ${formatRelativeTime(artifact.modified)}`);\n }\n \n if (artifact.description) {\n lines.push(` Description: ${artifact.description}`);\n }\n \n return lines;\n}\n\n/**\n * Display artifacts in a compact format (for status-like displays)\n */\nexport function displayArtifactsCompact(\n artifacts: ArtifactInfo[],\n options: {\n maxItems?: number;\n showSize?: boolean;\n sortByTime?: boolean;\n showTime?: boolean;\n title?: string;\n } = {},\n): string[] {\n const {\n maxItems = 5,\n showSize = true,\n sortByTime = true,\n showTime = true,\n title = 'Artifacts',\n } = options;\n \n if (artifacts.length === 0) {\n return [];\n }\n\n const sortedArtifacts = (sortByTime\n ? [...artifacts].sort((a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0))\n : artifacts.slice()\n ).slice(0, maxItems);\n\n const lines: string[] = [];\n lines.push(safeColors.bold(title));\n\n sortedArtifacts.forEach((artifact, index) => {\n if (index > 0) {\n lines.push('');\n }\n lines.push(\n ...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription: false,\n indent: 0,\n }),\n );\n });\n\n return lines;\n}\n\n/**\n * Discover artifacts in a directory based on patterns\n * \n * @param baseDir - Base directory to search for artifacts\n * @param patterns - Array of artifact patterns to search for\n * @returns Array of discovered artifacts\n * \n * @example\n * ```typescript\n * const artifacts = await discoverArtifacts('.kb/mind', [\n * { name: 'Index', pattern: 'index.json', description: 'Main index' },\n * { name: 'API Index', pattern: 'api-index.json', description: 'API index' },\n * ]);\n * ```\n */\nexport async function discoverArtifacts(\n baseDir: string,\n patterns: Array<{ name: string; pattern: string; description?: string }>\n): Promise<ArtifactInfo[]> {\n const artifacts: ArtifactInfo[] = [];\n\n for (const artifact of patterns) {\n const artifactPath = path.join(baseDir, artifact.pattern);\n try {\n await fsp.access(artifactPath);\n const stats = await fsp.stat(artifactPath);\n artifacts.push({\n name: artifact.name,\n path: artifactPath,\n size: stats.size,\n modified: stats.mtime,\n description: artifact.description || ''\n });\n } catch {\n // Skip if file doesn't exist\n }\n }\n\n return artifacts;\n}\n","/**\n * Table formatting utilities for CLI output\n * Handles proper column alignment accounting for emoji/unicode width\n */\n\n/**\n * Calculate visual width of a string (accounting for emoji/wide chars and ANSI codes)\n * Simplified version - emoji count as 2 chars, ANSI codes are stripped\n */\nfunction visualWidth(str: string): number {\n const ansiRegex = /\\x1B\\[[0-9;]*[a-zA-Z]/g;\n const cleanStr = str.replace(ansiRegex, '');\n\n // Only count genuinely double-width characters: high-plane emoji (U+1F000+) and CJK blocks.\n // BMP symbols like ✓ ✗ ◆ ○ (dingbats, arrows, geometric shapes) are single-width in terminals.\n const doubleWidthRegex = /[\\u{1100}-\\u{115F}]|[\\u{2E80}-\\u{A4CF}]|[\\u{AC00}-\\u{D7AF}]|[\\u{F900}-\\u{FAFF}]|[\\u{FE10}-\\u{FE1F}]|[\\u{FE30}-\\u{FE4F}]|[\\u{FF01}-\\u{FF60}]|[\\u{FFE0}-\\u{FFE6}]|[\\u{1F000}-\\u{1FFFF}]/gu;\n const wideMatches = cleanStr.match(doubleWidthRegex);\n const wideCount = wideMatches ? wideMatches.length : 0;\n\n // Use codepoint count (not UTF-16 length) so surrogate-pair emoji count as 1 base + 1 extra = 2.\n return [...cleanStr].length + wideCount;\n}\n\n/**\n * Pad string to visual width (accounting for emoji)\n */\nfunction padVisual(str: string, width: number, padChar: string = ' '): string {\n const vWidth = visualWidth(str);\n const padding = Math.max(0, width - vWidth);\n return str + padChar.repeat(padding);\n}\n\nexport interface TableColumn {\n header: string;\n width?: number; // Auto-calculated if not provided\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface TableOptions {\n header?: boolean;\n separator?: string; // Character for separator line (e.g., '─')\n padding?: number; // Padding between columns\n}\n\n/**\n * Format data as a table with proper column alignment\n */\nexport function formatTable(\n columns: TableColumn[],\n rows: string[][],\n options: TableOptions = {}\n): string[] {\n const { header = true, separator = '─', padding = 1 } = options;\n \n // Calculate column widths\n const widths: number[] = columns.map((col, idx) => {\n if (col.width !== undefined) {\n return col.width;\n }\n \n // Calculate max width from header and all rows\n let maxWidth = visualWidth(col.header);\n for (const row of rows) {\n if (row[idx]) {\n maxWidth = Math.max(maxWidth, visualWidth(String(row[idx])));\n }\n }\n return maxWidth;\n });\n \n const lines: string[] = [];\n \n // Header\n if (header) {\n const headerCells = columns.map((col, idx) => {\n const cell = col.header;\n const width = widths[idx]!;\n return padVisual(cell, width);\n });\n lines.push(headerCells.join(' '.repeat(padding)));\n \n // Separator\n if (separator) {\n const separatorLine = widths.map(w => separator.repeat(w)).join(' '.repeat(padding));\n lines.push(separatorLine);\n }\n }\n \n // Rows\n for (const row of rows) {\n const cells = columns.map((col, idx) => {\n const cell = row[idx] !== undefined ? String(row[idx]) : '';\n const align = col.align || 'left';\n const width = widths[idx]!;\n \n if (align === 'right') {\n const vWidth = visualWidth(cell);\n const padding = Math.max(0, width - vWidth);\n return ' '.repeat(padding) + cell;\n } else if (align === 'center') {\n const vWidth = visualWidth(cell);\n const padding = Math.max(0, width - vWidth);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return ' '.repeat(leftPad) + cell + ' '.repeat(rightPad);\n } else {\n return padVisual(cell, width);\n }\n });\n lines.push(cells.join(' '.repeat(padding)));\n }\n \n return lines;\n}\n\n/**\n * Format simple key-value pairs as a table\n */\nexport function formatKeyValueTable(\n data: Record<string, string | number>,\n options: { keyWidth?: number; valueWidth?: number } = {}\n): string[] {\n const keys = Object.keys(data);\n if (keys.length === 0) {return [];}\n \n const keyWidth = options.keyWidth || Math.max(...keys.map(k => visualWidth(k)), 0);\n const valueWidth = options.valueWidth || Math.max(...Object.values(data).map(v => visualWidth(String(v))), 0);\n \n return keys.map(key => {\n const value = String(data[key]);\n return `${padVisual(key, keyWidth)} ${padVisual(value, valueWidth)}`;\n });\n}\n","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","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","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","import { box, keyValue, safeKeyValue, hasAnsi } from './format';\nimport { formatTiming } from './command-output';\nimport { safeColors, safeSymbols } from './colors';\nimport {\n displayArtifacts,\n type ArtifactInfo,\n type ArtifactDisplayOptions,\n} from './artifacts-display';\nimport { TimingTracker } from './timing-tracker';\n\n// Optional analytics types - using interface to avoid type resolution errors\n// when @kb-labs/analytics-sdk-node is not installed\ninterface AnalyticsRunScope {\n (options: { runId?: string; actor?: unknown; ctx?: Record<string, unknown> }, fn: (emit: AnalyticsEmit) => Promise<unknown>): Promise<unknown>;\n}\n\ninterface AnalyticsEmit {\n (event: Partial<{ type: string; payload: Record<string, unknown> }>): Promise<unknown>;\n}\n\nexport interface CommandPresenter {\n info(message: string): void;\n warn?(message: string): void;\n error(message: string): void;\n write(payload: string): void;\n json(payload: unknown): void;\n}\n\nexport interface CommandContext {\n cwd: string;\n presenter: CommandPresenter;\n}\n\nexport interface CommandExecutionResult {\n summary: Record<string, string | number>;\n artifacts?: ArtifactInfo[];\n artifactsOptions?: ArtifactDisplayOptions;\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n data?: Record<string, unknown>;\n}\n\nexport interface AnalyticsConfig {\n actor: string;\n started: string;\n finished: string;\n getPayload?: (flags: Record<string, unknown>, result?: CommandExecutionResult) => Record<string, unknown>;\n}\n\nexport interface CommandRunnerOptions {\n title: string;\n analytics?: AnalyticsConfig;\n execute: (ctx: CommandContext, flags: Record<string, unknown>, tracker: TimingTracker) => Promise<CommandExecutionResult>;\n}\n\nexport function createCommandRunner(options: CommandRunnerOptions) {\n return async (ctx: CommandContext, argv: string[], flags: Record<string, unknown>): Promise<number> => {\n const tracker = new TimingTracker();\n const jsonMode = flags.json === true;\n const quietMode = flags.quiet === true;\n let runScope: AnalyticsRunScope | null = null;\n if (options.analytics !== undefined) {\n try {\n // Dynamic import with type assertion to avoid TypeScript errors\n // @kb-labs/analytics-sdk-node is an optional dependency\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - optional dependency, types may not be available\n const analyticsModule = await import('@kb-labs/analytics-sdk-node') as {\n runScope?: AnalyticsRunScope;\n };\n if (analyticsModule.runScope) {\n runScope = analyticsModule.runScope;\n }\n } catch {\n // Analytics SDK not available, continue without it\n runScope = null;\n }\n }\n\n const execute = async (): Promise<number> => {\n tracker.checkpoint('start');\n try {\n const result = await options.execute(ctx, flags, tracker);\n tracker.checkpoint('complete');\n formatSuccessOutput(ctx, options.title, result, tracker.total(), {\n jsonMode,\n quietMode,\n });\n return 0;\n } catch (error) {\n tracker.checkpoint('error');\n const message = error instanceof Error ? error.message : String(error);\n formatErrorOutput(ctx, message, tracker.total(), {\n jsonMode,\n quietMode,\n });\n return 1;\n }\n };\n\n if (!runScope || !options.analytics) {\n return execute();\n }\n\n const totalStart = Date.now();\n const result = await runScope(\n {\n actor: options.analytics.actor as never,\n ctx: { workspace: ctx.cwd },\n },\n async (emit: AnalyticsEmit) => {\n await emit({\n type: options.analytics!.started,\n payload: options.analytics!.getPayload?.(flags) ?? {},\n });\n\n let exitCode = 0;\n try {\n exitCode = await execute();\n await emit({\n type: options.analytics!.finished,\n payload: {\n ...(options.analytics!.getPayload?.(flags) ?? {}),\n durationMs: Date.now() - totalStart,\n result: exitCode === 0 ? 'success' : 'error',\n },\n });\n } catch (error) {\n await emit({\n type: options.analytics!.finished,\n payload: {\n ...(options.analytics!.getPayload?.(flags) ?? {}),\n durationMs: Date.now() - totalStart,\n result: 'error',\n error: error instanceof Error ? error.message : String(error),\n },\n });\n throw error;\n }\n\n return exitCode;\n },\n );\n\n return result as number;\n };\n}\n\ninterface OutputFlags {\n jsonMode: boolean;\n quietMode: boolean;\n}\n\nfunction formatSuccessOutput(\n ctx: CommandContext,\n title: string,\n result: CommandExecutionResult,\n durationMs: number,\n flags: OutputFlags,\n): void {\n if (flags.jsonMode) {\n const payload: Record<string, unknown> = {\n ok: true,\n summary: result.summary,\n timing: result.timing ?? durationMs,\n diagnostics: result.diagnostics,\n warnings: result.warnings,\n errors: result.errors,\n };\n if (result.artifacts) {\n payload.artifacts = result.artifacts;\n }\n if (result.data) {\n Object.assign(payload, result.data);\n }\n ctx.presenter.json(payload);\n return;\n }\n\n if (flags.quietMode) {\n return;\n }\n\n const statusEntry = extractStatusEntry(result.summary);\n const summaryForDisplay: Record<string, string | number> = statusEntry\n ? { ...result.summary }\n : result.summary;\n\n if (statusEntry) {\n delete summaryForDisplay[statusEntry.key];\n }\n\n const lines: string[] = [];\n const summaryLines = keyValue(summaryForDisplay);\n if (summaryLines.length > 0) {\n lines.push(...summaryLines);\n }\n\n if (result.artifacts && result.artifacts.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(...displayArtifacts(result.artifacts, result.artifactsOptions));\n }\n\n const timing = result.timing ?? durationMs;\n if (typeof timing !== 'number') {\n const entries = Object.entries(timing);\n if (entries.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Timing'));\n for (const [label, value] of entries) {\n lines.push(...safeKeyValue({ [label]: formatTiming(value) }, { indent: 2, pad: false }));\n }\n }\n }\n\n if (result.diagnostics && result.diagnostics.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Diagnostics'));\n result.diagnostics.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (result.warnings && result.warnings.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Warnings'));\n result.warnings.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (result.errors && result.errors.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Errors'));\n result.errors.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(formatStatusLine(statusEntry?.value, durationMs));\n\n ctx.presenter.write(box(title, lines));\n}\n\nfunction formatErrorOutput(\n ctx: CommandContext,\n errorMessage: string,\n durationMs: number,\n flags: OutputFlags,\n): void {\n if (flags.jsonMode) {\n ctx.presenter.json({\n ok: false,\n error: errorMessage,\n timing: durationMs,\n });\n return;\n }\n\n if (flags.quietMode) {\n return;\n }\n\n ctx.presenter.error(errorMessage);\n}\n\ninterface StatusEntry {\n key: string;\n value: string;\n}\n\nfunction extractStatusEntry(summary: Record<string, string | number>): StatusEntry | null {\n for (const [key, value] of Object.entries(summary)) {\n if (typeof value === 'string' && key.toLowerCase().includes('status')) {\n return { key, value };\n }\n }\n return null;\n}\n\nfunction formatStatusLine(statusValue: string | undefined, durationMs: number): string {\n const rawStatus = statusValue ?? 'Done';\n const normalized = rawStatus.toLowerCase();\n\n let symbol = safeSymbols.success;\n let colorize = safeColors.success;\n\n if (normalized.includes('error') || normalized.includes('fail')) {\n symbol = safeSymbols.error;\n colorize = safeColors.error;\n } else if (normalized.includes('partial') || normalized.includes('warn')) {\n symbol = safeSymbols.warning;\n colorize = safeColors.warning;\n }\n\n const statusText = hasAnsi(rawStatus) ? rawStatus : colorize(rawStatus);\n return `${symbol} ${statusText} · ${safeColors.muted(formatTiming(durationMs))}`;\n}\n\n","/**\n * Flag system for declarative CLI flag definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myFlags = defineFlags({\n * scope: { type: 'string', description: 'Filter by scope' },\n * verbose: { type: 'boolean', default: false },\n * });\n *\n * // In command\n * export default defineCommand({\n * flags: myFlags,\n * handler: {\n * async execute(ctx, input: typeof myFlags.type) {\n * const { scope, verbose } = input;\n * }\n * }\n * });\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type FlagType = 'string' | 'boolean' | 'number';\n\nexport interface BaseFlagSpec<T extends FlagType> {\n type: T;\n description?: string;\n examples?: string[];\n deprecated?: boolean | string;\n}\n\nexport interface StringFlagSpec extends BaseFlagSpec<'string'> {\n default?: string;\n validate?: (value: string) => void | Promise<void>;\n}\n\nexport interface BooleanFlagSpec extends BaseFlagSpec<'boolean'> {\n default?: boolean;\n}\n\nexport interface NumberFlagSpec extends BaseFlagSpec<'number'> {\n default?: number;\n validate?: (value: number) => void | Promise<void>;\n}\n\nexport type FlagSpec = StringFlagSpec | BooleanFlagSpec | NumberFlagSpec;\n\nexport type FlagsSchema = Record<string, FlagSpec>;\n\n// ============================================================================\n// Type inference\n// ============================================================================\n\ntype InferFlagType<T extends FlagSpec> =\n T extends StringFlagSpec\n ? T extends { default: string } ? string : string | undefined\n : T extends BooleanFlagSpec\n ? T extends { default: boolean } ? boolean : boolean | undefined\n : T extends NumberFlagSpec\n ? T extends { default: number } ? number : number | undefined\n : never;\n\nexport type InferFlagsType<T extends FlagsSchema> = {\n [K in keyof T]: InferFlagType<T[K]>;\n};\n\n// ============================================================================\n// defineFlags - main API\n// ============================================================================\n\nexport interface FlagsDefinition<T extends FlagsSchema> {\n /** Schema for manifest */\n schema: T;\n /** Inferred TypeScript type */\n type: InferFlagsType<T>;\n /** Parse and validate flags from raw input */\n parse: (input: unknown) => InferFlagsType<T>;\n}\n\n/**\n * Define CLI flags with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitFlags = defineFlags({\n * scope: {\n * type: 'string',\n * description: 'Limit to package or path',\n * examples: ['@kb-labs/core', 'packages/**'],\n * },\n * 'dry-run': {\n * type: 'boolean',\n * description: 'Preview without applying',\n * default: false,\n * },\n * });\n *\n * // Use in command\n * type MyInput = typeof commitFlags.type;\n * // Result: { scope?: string; 'dry-run': boolean }\n * ```\n */\nexport function defineFlags<T extends FlagsSchema>(schema: T): FlagsDefinition<T> {\n return {\n schema,\n type: {} as InferFlagsType<T>,\n parse: (input: unknown) => parseFlagsFromInput(input, schema),\n };\n}\n\n// ============================================================================\n// Runtime parsing and validation\n// ============================================================================\n\n/**\n * Parse flags from raw input with type validation and defaults\n */\nexport function parseFlagsFromInput<T extends FlagsSchema>(\n input: unknown,\n schema: T\n): InferFlagsType<T> {\n const result: Record<string, string | boolean | number | undefined> = {};\n const rawInput = input as Record<string, unknown>;\n\n for (const [key, spec] of Object.entries(schema)) {\n const value = rawInput?.[key];\n\n // Apply default if value is undefined\n if (value === undefined) {\n if ('default' in spec) {\n result[key] = spec.default;\n }\n continue;\n }\n\n // Type validation and coercion\n switch (spec.type) {\n case 'boolean':\n result[key] = parseBoolean(value, key);\n break;\n case 'string':\n result[key] = parseString(value, key);\n // Custom validation for string\n if (spec.validate && result[key] !== undefined) {\n spec.validate(result[key]);\n }\n break;\n case 'number':\n result[key] = parseNumber(value, key);\n // Custom validation for number\n if (spec.validate && result[key] !== undefined) {\n spec.validate(result[key]);\n }\n break;\n }\n }\n\n return result as unknown as InferFlagsType<T>;\n}\n\n// ============================================================================\n// Type parsers (exported for reuse in env.ts)\n// ============================================================================\n\nexport function parseBoolean(value: unknown, flagName: string): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === '1' || lower === 'yes') {return true;}\n if (lower === 'false' || lower === '0' || lower === 'no') {return false;}\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be boolean, got ${typeof value}. ` +\n `Use true/false or 1/0 or yes/no.`\n );\n}\n\nexport function parseString(value: unknown, flagName: string): string {\n if (typeof value === 'string') {\n return value;\n }\n\n // Coerce number to string\n if (typeof value === 'number') {\n return String(value);\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be string, got ${typeof value}.`\n );\n}\n\nexport function parseNumber(value: unknown, flagName: string): number {\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Flag \"${flagName}\" must be finite number, got ${value}.`);\n }\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n throw new Error(\n `Flag \"${flagName}\" must be number, got invalid string \"${value}\".`\n );\n }\n return parsed;\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be number, got ${typeof value}.`\n );\n}\n\n// ============================================================================\n// Legacy helper (keep for backward compatibility)\n// ============================================================================\n\nexport function parseNumberFlag(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n\n const parsed = Number(trimmed);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n return undefined;\n}\n\n// ============================================================================\n// Utility: Merge input.flags into input (for V3 compatibility)\n// ============================================================================\n\n/**\n * Merge input.flags into input root (V3 compatibility helper)\n *\n * @example\n * ```typescript\n * const raw = { scope: 'old', flags: { scope: 'new', json: true } };\n * const merged = mergeFlags(raw);\n * // Result: { scope: 'new', json: true, flags: {...} }\n * ```\n */\nexport function mergeFlags<T extends Record<string, unknown>>(input: T): T {\n if (!input.flags || typeof input.flags !== 'object') {\n return input;\n }\n\n // Merge: root values first, then flags override\n return { ...input, ...input.flags };\n}\n","/**\n * Environment variable system for declarative env definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myEnv = defineEnv({\n * MY_API_KEY: { type: 'string', description: 'API key for service' },\n * MY_ENABLED: { type: 'boolean', default: true },\n * MY_TIMEOUT: { type: 'number', default: 5000 },\n * });\n *\n * // In command\n * export default defineCommand({\n * handler: {\n * async execute(ctx, input) {\n * const env = myEnv.parse(ctx.runtime);\n * console.log(env.MY_API_KEY); // string | undefined\n * console.log(env.MY_ENABLED); // boolean\n * }\n * }\n * });\n * ```\n */\n\nimport {\n type FlagSpec,\n type FlagsSchema,\n type InferFlagsType,\n parseBoolean,\n parseString,\n parseNumber,\n} from './flags.js';\n\n/**\n * Runtime API interface (minimal for env parsing)\n * Avoids dependency on @kb-labs/plugin-contracts\n */\nexport interface RuntimeLike {\n env(key: string): string | undefined;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Environment variable schema (reuses FlagSpec types)\n */\nexport type EnvSchema = FlagsSchema;\n\n/**\n * Environment variable definition with parse method\n */\nexport interface EnvDefinition<T extends EnvSchema> {\n /** Schema for documentation and validation */\n schema: T;\n /** Inferred TypeScript type */\n type: InferFlagsType<T>;\n /** Parse environment variables from RuntimeLike */\n parse: (runtime: RuntimeLike) => InferFlagsType<T>;\n}\n\n// ============================================================================\n// defineEnv - main API\n// ============================================================================\n\n/**\n * Define environment variables with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitEnv = defineEnv({\n * KB_COMMIT_LLM_ENABLED: {\n * type: 'boolean',\n * default: true,\n * description: 'Enable LLM analysis',\n * },\n * KB_COMMIT_LLM_TEMPERATURE: {\n * type: 'number',\n * default: 0.3,\n * description: 'LLM temperature (0-1)',\n * validate: (v) => {\n * if (v < 0 || v > 1) throw new Error('Must be 0-1');\n * },\n * },\n * });\n *\n * // Use in command\n * const env = commitEnv.parse(ctx.runtime);\n * // Type: { KB_COMMIT_LLM_ENABLED: boolean; KB_COMMIT_LLM_TEMPERATURE: number }\n * ```\n */\nexport function defineEnv<T extends EnvSchema>(schema: T): EnvDefinition<T> {\n return {\n schema,\n type: {} as InferFlagsType<T>,\n parse: (runtime: RuntimeLike) => parseEnvFromRuntime(runtime, schema),\n };\n}\n\n// ============================================================================\n// Runtime parsing\n// ============================================================================\n\n/**\n * Parse environment variables from RuntimeLike with validation and defaults\n */\nexport function parseEnvFromRuntime<T extends EnvSchema>(\n runtime: RuntimeLike,\n schema: T\n): InferFlagsType<T> {\n const result: Record<string, unknown> = {};\n\n for (const [key, spec] of Object.entries(schema)) {\n const rawValue = runtime.env(key);\n\n // Apply default if undefined\n if (rawValue === undefined) {\n if ('default' in spec) {\n result[key] = spec.default;\n }\n continue;\n }\n\n // Parse based on type (reuse parsers from flags)\n result[key] = parseEnvValue(rawValue, key, spec);\n }\n\n return result as unknown as InferFlagsType<T>;\n}\n\n/**\n * Parse single env value with type validation\n */\nfunction parseEnvValue(value: string | undefined, key: string, spec: FlagSpec): string | boolean | number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n switch (spec.type) {\n case 'boolean':\n return parseBoolean(value, key);\n\n case 'string':\n const strValue = parseString(value, key);\n // Custom validation for string\n if (spec.validate) {\n spec.validate(strValue);\n }\n return strValue;\n\n case 'number':\n const numValue = parseNumber(value, key);\n // Custom validation for number\n if (spec.validate) {\n spec.validate(numValue);\n }\n return numValue;\n\n default:\n return value;\n }\n}\n","/**\n * Resolve the current working directory from a CLI context-like object.\n * Falls back to the process cwd when the context does not provide one.\n */\nexport function getContextCwd(input: { cwd?: string } | undefined): string {\n if (input && typeof input.cwd === \"string\" && input.cwd.length > 0) {\n return input.cwd;\n }\n return process.cwd();\n}\n\n\n","/**\n * Normalize filesystem paths to POSIX (forward-slash) form.\n */\nexport function toPosixPath(input: string): string {\n return input.replace(/\\\\/g, \"/\");\n}\n\n\n","export interface RetryOptions {\n attempts?: number;\n delay?: number;\n backoff?: 'fixed' | 'exponential';\n onRetry?: (error: unknown, attempt: number) => void;\n}\n\nasync function sleepForRetry(\n attempt: number,\n delay: number,\n backoff: 'fixed' | 'exponential',\n): Promise<void> {\n if (delay <= 0) { return; }\n const wait = backoff === 'exponential' ? delay * 2 ** (attempt - 1) : delay;\n await new Promise<void>((resolve) => { setTimeout(resolve, wait); });\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n if (typeof fn !== 'function') {\n throw new TypeError('fn must be a function');\n }\n\n const { attempts = 3, delay = 0, backoff = 'fixed', onRetry } = options;\n\n if (attempts < 1) {\n throw new RangeError(`attempts must be >= 1, got ${attempts}`);\n }\n if (delay < 0) {\n throw new RangeError(`delay must be >= 0, got ${delay}`);\n }\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n if (attempt < attempts) {\n onRetry?.(err, attempt);\n await sleepForRetry(attempt, delay, backoff);\n }\n }\n }\n\n throw lastError;\n}\n","interface ErrorContext {\n ui?: {\n json?: (data: unknown) => void;\n error?: (message: string, opts?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * Structured validation error — emits { ok: false, error: { code: 'INVALID_ARGS', ... } } in JSON mode.\n * Call before try/catch, right before `return { exitCode: 1 }`.\n */\nexport function validationError(\n ctx: ErrorContext,\n message: string,\n hint?: string,\n isJson?: boolean,\n): void {\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: 'INVALID_ARGS', message, ...(hint && { hint }) } });\n } else {\n ctx.ui?.error?.(message, { ...(hint && { hint }) });\n }\n}\n\n/**\n * Structured runtime/API error — emits { ok: false, error: { code: 'INTERNAL_ERROR', ... } } in JSON mode.\n * Call in catch blocks, right before `return { exitCode: 1 }`.\n */\nexport function handleError(ctx: ErrorContext, err: unknown, isJson?: boolean): void {\n const message = err instanceof Error ? err.message : String(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: 'INTERNAL_ERROR', message } });\n } else {\n ctx.ui?.error?.(message);\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * Envelope middleware reads `err.statusCode` to set HTTP status.\n * If err already has statusCode — preserves it. Otherwise → 500.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err !== null && typeof err === 'object' && 'statusCode' in err) {\n throw err;\n }\n const message = err instanceof Error ? err.message : String(err);\n throw Object.assign(new Error(message), {\n statusCode: 500,\n code: 'INTERNAL_ERROR',\n });\n}\n","import type { CommandFailure } from '@kb-labs/plugin-contracts';\n\n/**\n * Destructive-action protocol (SOFT layer).\n *\n * A single, platform-wide way for a command to declare that an operation is\n * destructive — how bad, how broad, and whether it can be undone — and to gate\n * it behind explicit confirmation in EVERY mode (human and agent).\n *\n * This layer is intentionally SOFT: it informs and asks, it does not enforce.\n * Physical enforcement (can-this-token-even-invoke-this) is the platform's\n * future token/permission layer; it reads the SAME `severity`/`destructive`\n * declaration on the command. So one declaration drives both:\n * - now: this helper renders a clear signal + requires `--yes`;\n * - later: the permission layer filters discovery + blocks invocation by right.\n *\n * Declaring it is OPTIONAL for external plugins (commands work without it) but\n * strongly recommended — agents can only reason about blast radius they're told.\n */\n\nexport type DestructiveSeverity = 'low' | 'medium' | 'high' | 'critical';\n\n/**\n * Severity rubric — worst-case blast radius weighed against recovery cost\n * (keep consistent across plugins so agents can calibrate):\n * - low narrow scope AND trivially auto-rebuilt from source (idempotent)\n * - medium a bounded set is lost; rebuildable, but with effort/recompute\n * - high a WHOLE collection is destroyed (entire index/corpus), OR recovery\n * is slow / manual — even if rebuildable, the loss is large and\n * easy to mis-target\n * - critical irreversible, NO recovery (prod data, tenant wipe)\n */\nexport interface DestructiveAction {\n /** Command identity, e.g. \"mind drop\". */\n action: string;\n /** What is affected, e.g. 'index \"code\"'. */\n resource: string;\n /** Plain-language effect, e.g. \"deletes all vectors + the manifest\". */\n effect: string;\n /** Blast-radius tier. */\n severity: DestructiveSeverity;\n /** Whether the data can be recovered afterwards. */\n reversible: boolean;\n /** How to recover, if reversible (e.g. \"re-run `kb mind index --full`\"). */\n recovery?: string;\n /** Quantified scope — how much, of what, how broad. */\n blastRadius?: { count?: number; unit?: string; scope?: string };\n /** Flag that confirms the action (default `--yes`). */\n confirmFlag?: string;\n}\n\n/** The machine-readable signal an agent receives when confirmation is missing. */\nexport interface ConfirmationRequired {\n ok: false;\n confirmationRequired: true;\n destructive: true;\n irreversible: boolean;\n severity: DestructiveSeverity;\n action: string;\n resource: string;\n effect: string;\n reversible: boolean;\n blastRadius?: { count?: number; unit?: string; scope?: string };\n recovery?: string;\n confirmWith: string;\n message: string;\n}\n\ninterface ConfirmContext {\n ui?: {\n json?: (data: unknown) => void;\n warn?: (message: string, opts?: Record<string, unknown>) => void;\n error?: (message: string, opts?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * Build the machine-readable signal an agent receives when confirmation is\n * missing in json mode. Exported so a non-CLI surface (REST 409, MCP) can reuse\n * the exact shape instead of re-deriving it.\n */\nexport function buildConfirmationSignal(a: DestructiveAction): ConfirmationRequired {\n return {\n ok: false,\n confirmationRequired: true,\n destructive: true,\n irreversible: !a.reversible,\n severity: a.severity,\n action: a.action,\n resource: a.resource,\n effect: a.effect,\n reversible: a.reversible,\n ...(a.blastRadius && { blastRadius: a.blastRadius }),\n ...(a.recovery && { recovery: a.recovery }),\n confirmWith: a.confirmFlag ?? '--yes',\n message: renderDestructiveMessage(a),\n };\n}\n\n/** Render the one-line warning — leads with the scary part (irreversibility + severity). */\nexport function renderDestructiveMessage(a: DestructiveAction): string {\n const flag = a.confirmFlag ?? '--yes';\n const br = a.blastRadius;\n const blast = br\n ? ` (${[br.count != null ? `${br.count} ${br.unit ?? 'item(s)'}` : '', br.scope].filter(Boolean).join(' · ')})`\n : '';\n const lead = a.reversible ? `[${a.severity}]` : `⚠ IRREVERSIBLE [${a.severity}]`;\n const rec = a.recovery\n ? ` Recovery: ${a.recovery}.`\n : a.reversible\n ? ''\n : ' No recovery — data is permanently lost.';\n return `${lead} ${a.action} — ${a.effect} on ${a.resource}${blast}.${rec} Confirm with ${flag}.`;\n}\n\n/**\n * Gate a destructive command. Returns the command result to return immediately\n * when NOT confirmed (in every mode — agents get the structured signal, not a\n * silent execution), or `null` when confirmed so the caller proceeds.\n *\n * const blocked = confirmDestructive(ctx, { confirmed: flags.yes, isJson, action });\n * if (blocked) return blocked;\n */\nexport function confirmDestructive(\n ctx: ConfirmContext,\n opts: { confirmed: boolean; isJson?: boolean; action: DestructiveAction },\n): CommandFailure | null {\n if (opts.confirmed) {\n return null;\n }\n const a = opts.action;\n const signal = buildConfirmationSignal(a);\n if (opts.isJson) {\n // Machine-readable signal — `ctx.ui.json` emits one parseable line by\n // default (the agent extracts it with `grep \"^{\"`).\n ctx.ui?.json?.(signal);\n } else {\n (ctx.ui?.warn ?? ctx.ui?.error)?.(renderDestructiveMessage(a));\n }\n return {\n ok: false,\n error: {\n code: 'CONFIRMATION_REQUIRED',\n kind: 'validation',\n message: signal.message,\n details: { ...signal },\n },\n result: signal,\n };\n}\n","/**\n * Modern CLI formatting utilities with side border design\n * Provides minimalist, modern UI components for CLI output\n */\n\nimport { safeColors, safeSymbols } from './colors';\nimport { stripAnsi, bulletList as baseBulletList } from './format';\nimport { formatTiming as baseFormatTiming } from './command-output';\n\n/**\n * Side border box - Clack-style design\n *\n * @example\n * ```\n * ◆ Command Name\n * │\n * │ Section Header\n * │ Key: value\n * │\n * └ ✓ Success 84ms\n * ```\n */\nexport interface SideBorderBoxOptions {\n title: string;\n sections: SectionContent[];\n footer?: string;\n status?: 'success' | 'error' | 'warning' | 'info';\n timing?: number;\n summary?: Record<string, string | number | boolean>;\n}\n\nexport interface RichSectionItem {\n text: string;\n /** Render text in muted/dim color */\n dim?: boolean;\n /** Hard-truncate to N visible chars instead of wrapping */\n truncate?: number;\n}\n\n/** A section item — either a plain string or a rich descriptor */\nexport type SectionItem = string | RichSectionItem;\n\nexport interface SectionContent {\n header?: string;\n items: SectionItem[];\n}\n\n/**\n * Create a side-bordered box with modern design\n */\nexport function sideBorderBox(options: SideBorderBoxOptions): string {\n const { title, sections, footer, status, timing, summary } = options;\n const lines: string[] = [];\n\n const terminalWidth =\n typeof process !== 'undefined' && process.stdout?.columns\n ? process.stdout.columns\n : 80;\n // Available width for item content: terminalWidth minus \"│ \" prefix (3) and 1 right margin\n const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n // Title line: ◆ Title\n const titleLine = `${safeColors.primary('◆')} ${safeColors.bold(title)}`;\n lines.push(titleLine);\n lines.push(safeColors.muted('│'));\n\n // Summary key-value pairs rendered before sections\n if (summary && Object.keys(summary).length > 0) {\n const entries = Object.entries(summary).map(([k, v]) => [k, String(v)] as [string, string]);\n const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n const metricsLines = metricsList(metricsRecord);\n for (const line of metricsLines) {\n lines.push(`${safeColors.muted('│')} ${line}`);\n }\n if (sections.length > 0) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Sections\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {continue;}\n\n // Section header (optional)\n if (section.header) {\n lines.push(`${safeColors.muted('│')} ${safeColors.bold(section.header)}`);\n }\n\n // Section items — word-wrapped and multiline-safe\n for (const rawItem of section.items) {\n const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n let displayLines: string[];\n\n if (item.truncate !== undefined) {\n const vis = stripAnsi(item.text);\n const truncated = vis.length > item.truncate\n ? ansiSlice(item.text, item.truncate - 1) + '…'\n : item.text;\n displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n } else {\n const wrapped = wrapText(item.text, itemMaxWidth);\n displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n }\n\n for (const dl of displayLines) {\n lines.push(`${safeColors.muted('│')} ${dl}`);\n }\n }\n\n // Add spacing between sections (but not after the last one)\n if (i < sections.length - 1) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Bottom line: └ ✓ Success 84ms\n if (footer || status || timing !== undefined) {\n if (lines[lines.length - 1] !== safeColors.muted('│')) {\n lines.push(safeColors.muted('│'));\n }\n const footerParts: string[] = [];\n\n if (footer) {\n footerParts.push(footer);\n } else if (status) {\n const statusSymbol = getStatusSymbol(status);\n const statusColor = getStatusColor(status);\n footerParts.push(statusColor(`${statusSymbol}`));\n }\n\n if (timing !== undefined) {\n footerParts.push(safeColors.muted(formatTiming(timing)));\n }\n\n const footerLine = `${safeColors.muted('└')} ${footerParts.join(' ')}`;\n lines.push(footerLine);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format a section header\n */\nexport function sectionHeader(text: string): string {\n return safeColors.bold(text);\n}\n\n/**\n * Format metrics list (key: value pairs with aligned values)\n */\nexport function metricsList(metrics: Record<string, string | number>): string[] {\n const entries = Object.entries(metrics);\n if (entries.length === 0) {return [];}\n\n // Find max key length for alignment\n const maxKeyLength = Math.max(\n ...entries.map(([key]) => stripAnsi(key).length)\n );\n\n return entries.map(([key, value]) => {\n const keyLength = stripAnsi(key).length;\n const padding = ' '.repeat(maxKeyLength - keyLength + 2);\n const formattedKey = safeColors.bold(key);\n const formattedValue = safeColors.muted(String(value));\n return `${formattedKey}:${padding}${formattedValue}`;\n });\n}\n\n/**\n * Format a bullet list (re-exported from base utilities)\n */\nexport const bulletList = baseBulletList;\n\n/**\n * Format timing (re-exported from command-output)\n */\nexport const formatTiming = baseFormatTiming;\n\n/**\n * Format status line for footer\n */\nexport function statusLine(\n status: 'success' | 'error' | 'warning' | 'info',\n timing?: number\n): string {\n const symbol = getStatusSymbol(status);\n const color = getStatusColor(status);\n\n const parts = [color(symbol)];\n\n if (timing !== undefined) {\n parts.push(safeColors.muted(formatTiming(timing)));\n }\n\n return parts.join(' ');\n}\n\n// Helper functions\n\n/**\n * Slice a string to maxVisible visible characters, preserving ANSI escape codes.\n */\nfunction ansiSlice(str: string, maxVisible: number): string {\n let visible = 0;\n let i = 0;\n let result = '';\n while (i < str.length) {\n if (str[i] === '\\x1b' && str[i + 1] === '[') {\n let j = i + 2;\n while (j < str.length && !/[A-Za-z]/.test(str[j]!)) { j++; }\n result += str.slice(i, j + 1);\n i = j + 1;\n } else {\n if (visible >= maxVisible) { break; }\n result += str[i];\n visible++;\n i++;\n }\n }\n return result;\n}\n\nfunction getStatusSymbol(status: 'success' | 'error' | 'warning' | 'info'): string {\n switch (status) {\n case 'success':\n return safeSymbols.success;\n case 'error':\n return safeSymbols.error;\n case 'warning':\n return safeSymbols.warning;\n case 'info':\n return safeSymbols.info;\n }\n}\n\nfunction getStatusColor(status: 'success' | 'error' | 'warning' | 'info'): (text: string) => string {\n switch (status) {\n case 'success':\n return safeColors.success;\n case 'error':\n return safeColors.error;\n case 'warning':\n return safeColors.warning;\n case 'info':\n return safeColors.info;\n }\n}\n\n/**\n * Word-wrap plain text to maxWidth visible characters.\n * Handles existing newlines and long words (hard-truncated with ellipsis).\n */\nfunction wrapText(text: string, maxWidth: number): string[] {\n const result: string[] = [];\n const rawLines = text.split('\\n');\n for (const rawLine of rawLines) {\n const line = rawLine.trimEnd();\n if (stripAnsi(line).length <= maxWidth) {\n result.push(line);\n continue;\n }\n const words = line.split(/(\\s+)/);\n let current = '';\n for (const word of words) {\n const test = current + word;\n if (stripAnsi(test).length <= maxWidth) {\n current = test;\n } else {\n if (current.trimEnd()) {result.push(current.trimEnd());}\n const wordLen = stripAnsi(word).length;\n if (wordLen > maxWidth) {\n // Hard-truncate a single oversized word\n result.push(stripAnsi(word).slice(0, maxWidth - 1) + '…');\n current = '';\n } else {\n current = word;\n }\n }\n }\n if (current.trimEnd()) {result.push(current.trimEnd());}\n }\n return result.length > 0 ? result : [''];\n}\n\n/**\n * A single block in a chained output — a title + sections with optional footer on the last block.\n */\nexport interface SideBorderChainItem {\n title: string;\n sections: SectionContent[];\n summary?: Record<string, string | number | boolean>;\n status?: 'success' | 'error' | 'warning' | 'info';\n timing?: number;\n}\n\n/**\n * Render multiple side-border blocks as a continuous visual chain.\n *\n * Every block opens with `◆ Title` on the shared rail.\n * Only the last block gets `└ status timing`.\n *\n * @example\n * ```\n * ◆ workflow metrics\n * │\n * │ Failed to fetch metrics\n * │\n * ◆ Warning\n * │\n * │ Make sure daemon is running\n * │\n * └ ✗ 12ms\n * ```\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function sideBorderChain(items: SideBorderChainItem[]): string {\n if (items.length === 0) { return ''; }\n if (items.length === 1) {\n const item = items[0]!;\n return sideBorderBox({ title: item.title, sections: item.sections, status: item.status, timing: item.timing });\n }\n\n const lines: string[] = [];\n const terminalWidth =\n typeof process !== 'undefined' && process.stdout?.columns\n ? process.stdout.columns\n : 80;\n const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n for (let blockIdx = 0; blockIdx < items.length; blockIdx++) {\n const block = items[blockIdx]!;\n const isLast = blockIdx === items.length - 1;\n\n // Block header: ◆ Title\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(block.title)}`);\n lines.push(safeColors.muted('│'));\n\n // Summary key-value pairs\n if (block.summary && Object.keys(block.summary).length > 0) {\n const entries = Object.entries(block.summary).map(([k, v]) => [k, String(v)] as [string, string]);\n const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n const metricsLines = metricsList(metricsRecord);\n for (const line of metricsLines) {\n lines.push(`${safeColors.muted('│')} ${line}`);\n }\n if (block.sections.length > 0) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Sections\n for (let i = 0; i < block.sections.length; i++) {\n const section = block.sections[i];\n if (!section) { continue; }\n\n if (section.header) {\n lines.push(`${safeColors.muted('│')} ${safeColors.bold(section.header)}`);\n }\n\n for (const rawItem of section.items) {\n const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n let displayLines: string[];\n\n if (item.truncate !== undefined) {\n const vis = stripAnsi(item.text);\n const truncated = vis.length > item.truncate\n ? ansiSlice(item.text, item.truncate - 1) + '…'\n : item.text;\n displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n } else {\n const wrapped = wrapText(item.text, itemMaxWidth);\n displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n }\n\n for (const dl of displayLines) {\n lines.push(`${safeColors.muted('│')} ${dl}`);\n }\n }\n\n if (i < block.sections.length - 1) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n if (isLast) {\n if (block.status || block.timing !== undefined) {\n lines.push(safeColors.muted('│'));\n const footerParts: string[] = [];\n if (block.status) {\n footerParts.push(getStatusColor(block.status)(getStatusSymbol(block.status)));\n }\n if (block.timing !== undefined) {\n footerParts.push(safeColors.muted(formatTiming(block.timing)));\n }\n lines.push(`${safeColors.muted('└')} ${footerParts.join(' ')}`);\n }\n } else {\n // Blank rail line before next ◆ — only if not already there\n if (lines[lines.length - 1] !== safeColors.muted('│')) {\n lines.push(safeColors.muted('│'));\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert an Error or raw string into clean display lines for sideBorderBox items.\n * Splits on newlines, removes blank lines, and caps at maxLines with a \"… N more\" hint.\n *\n * @example\n * items: formatError(err, { maxLines: 6 })\n */\nexport function formatError(err: Error | string, opts?: { maxLines?: number }): string[] {\n const raw = err instanceof Error ? err.message : String(err);\n const allLines = raw.split('\\n').map(l => l.trimEnd()).filter(l => l.length > 0);\n const max = opts?.maxLines ?? 8;\n if (allLines.length <= max) {return allLines;}\n const shown = allLines.slice(0, max - 1);\n shown.push(safeColors.muted(`… ${allLines.length - max + 1} more lines`));\n return shown;\n}\n\n/**\n * Format command help in modern side-border style\n *\n * @example\n * ```typescript\n * const help = formatCommandHelp({\n * title: 'kb version',\n * description: 'Show CLI version',\n * longDescription: 'Displays the current version...',\n * examples: ['kb version', 'kb version --json'],\n * flags: [{name: 'json', description: 'Output in JSON'}]\n * });\n * ```\n */\nexport function formatCommandHelp(options: {\n title: string;\n description?: string;\n longDescription?: string;\n examples?: string[];\n flags?: Array<{ name: string; alias?: string; description?: string; required?: boolean }>;\n aliases?: string[];\n}): string {\n const { title, description, longDescription, examples, flags, aliases } = options;\n const sections: SectionContent[] = [];\n\n // Description section\n if (description) {\n sections.push({\n header: 'Description',\n items: [description],\n });\n }\n\n // Long description\n if (longDescription) {\n sections.push({\n header: 'Details',\n items: [longDescription],\n });\n }\n\n // Aliases\n if (aliases && aliases.length > 0) {\n sections.push({\n header: 'Aliases',\n items: aliases.map(a => safeColors.muted(a)),\n });\n }\n\n // Flags\n if (flags && flags.length > 0) {\n const flagItems = flags.map(flag => {\n const label = flag.alias\n ? `--${flag.name}, -${flag.alias}`\n : `--${flag.name}`;\n const required = flag.required ? safeColors.warning(' (required)') : '';\n const desc = flag.description ? safeColors.muted(` — ${flag.description}`) : '';\n return `${safeColors.bold(label)}${required}${desc}`;\n });\n sections.push({\n header: 'Flags',\n items: flagItems,\n });\n }\n\n // Examples\n if (examples && examples.length > 0) {\n sections.push({\n header: 'Examples',\n items: examples.map(ex => safeColors.muted(` ${ex}`)),\n });\n }\n\n return sideBorderBox({\n title,\n sections,\n status: 'info',\n });\n}\n","/**\n * Command result formatting utilities\n * Provides high and low-level APIs for formatting command output\n */\n\nimport {\n sideBorderBox,\n metricsList,\n bulletList,\n type SectionContent,\n} from './modern-format';\n\n/**\n * Command output with human and machine-readable formats\n * Extends CommandResult contract from command-kit\n */\nexport interface CommandOutput {\n /** Whether command executed successfully - required by CommandResult contract */\n ok: boolean;\n /** Execution status */\n status?: 'success' | 'error' | 'warning' | 'info' | 'failed' | 'cancelled' | 'skipped';\n /** Human-readable output (side border format) */\n human: string;\n /** Machine-readable output (JSON) */\n json: object;\n /** Agent-specific output (optional, for --agent flag) */\n agent?: object;\n}\n\n/**\n * Parameters for formatting command results\n */\nexport interface CommandResultParams {\n title: string;\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n warnings?: string[];\n errors?: string[];\n timing?: number;\n status: 'success' | 'error' | 'warning' | 'info';\n /** Custom JSON data (optional) */\n jsonData?: object;\n}\n\n/**\n * Low-level: Format command result with full control\n *\n * @example\n * ```typescript\n * const output = formatCommandResult({\n * title: 'System Diagnostics',\n * summary: { 'Total Checks': 4, 'OK': 3 },\n * details: [\n * { section: 'Environment', items: ['Node 20.11.0'] }\n * ],\n * warnings: ['Cache is old'],\n * timing: 150,\n * status: 'success',\n * });\n *\n * console.log(output.human); // Pretty CLI output\n * console.log(output.json); // JSON for --json flag\n * ```\n */\nexport function formatCommandResult(params: CommandResultParams): CommandOutput {\n const {\n title,\n summary,\n details = [],\n warnings = [],\n errors = [],\n timing,\n status,\n jsonData,\n } = params;\n\n // Build sections for human output\n const sections: SectionContent[] = [];\n\n // Summary section\n if (summary && Object.keys(summary).length > 0) {\n sections.push({\n header: 'Summary',\n items: metricsList(summary),\n });\n }\n\n // Details sections\n for (const detail of details) {\n sections.push({\n header: detail.section,\n items: detail.items,\n });\n }\n\n // Warnings section\n if (warnings.length > 0) {\n sections.push({\n header: '⚠ Warnings',\n items: bulletList(warnings),\n });\n }\n\n // Errors section\n if (errors.length > 0) {\n sections.push({\n header: '✗ Errors',\n items: bulletList(errors),\n });\n }\n\n // Generate human-readable output\n const human = sideBorderBox({\n title,\n sections,\n status,\n timing,\n });\n\n // Generate JSON output\n const json: Record<string, unknown> = {\n ok: status === 'success',\n status,\n ...(summary && { summary }),\n ...(details.length > 0 && {\n details: details.reduce((acc, d) => {\n acc[d.section] = d.items;\n return acc;\n }, {} as Record<string, string[]>),\n }),\n ...(warnings.length > 0 && { warnings }),\n ...(errors.length > 0 && { errors }),\n ...(timing !== undefined && { timingMs: timing }),\n ...(jsonData && { data: jsonData }),\n };\n\n return {\n ok: status === 'success',\n status,\n human,\n json\n };\n}\n\n/**\n * High-level: Quick success result\n *\n * @example\n * ```typescript\n * return successResult('Version Info', {\n * summary: { 'CLI Version': '0.1.0' },\n * timing: 5,\n * });\n * ```\n */\nexport function successResult(\n title: string,\n data?: {\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n timing?: number;\n json?: object;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n summary: data?.summary,\n details: data?.details,\n timing: data?.timing,\n status: 'success',\n jsonData: data?.json,\n });\n}\n\n/**\n * High-level: Quick error result\n *\n * @example\n * ```typescript\n * return errorResult('Command Failed', new Error('Something went wrong'), {\n * timing: 100,\n * suggestions: ['Try running with --debug flag'],\n * });\n * ```\n */\nexport function errorResult(\n title: string,\n error: Error | string,\n options?: {\n timing?: number;\n suggestions?: string[];\n }\n): CommandOutput {\n const errorMessage = error instanceof Error ? error.message : error;\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n return formatCommandResult({\n title,\n errors: [errorMessage],\n details: options?.suggestions\n ? [{ section: 'Suggestions', items: bulletList(options.suggestions) }]\n : [],\n timing: options?.timing,\n status: 'error',\n jsonData: {\n error: errorMessage,\n ...(errorStack && { stack: errorStack }),\n },\n });\n}\n\n/**\n * High-level: Quick warning result\n *\n * @example\n * ```typescript\n * return warningResult('Configuration Updated', ['Deprecated option used'], {\n * summary: { 'Files Updated': 3 },\n * timing: 50,\n * });\n * ```\n */\nexport function warningResult(\n title: string,\n warnings: string[],\n options?: {\n summary?: Record<string, string | number>;\n timing?: number;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n warnings,\n summary: options?.summary,\n timing: options?.timing,\n status: 'warning',\n });\n}\n\n/**\n * High-level: Info result\n *\n * @example\n * ```typescript\n * return infoResult('Help Information', {\n * details: [\n * { section: 'Usage', items: ['kb command --flag'] }\n * ],\n * });\n * ```\n */\nexport function infoResult(\n title: string,\n data?: {\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n timing?: number;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n summary: data?.summary,\n details: data?.details,\n timing: data?.timing,\n status: 'info',\n });\n}\n","/**\n * Structured log display for CLI output (watch/run/stream commands).\n * Not a spinner — for rendering log lines with level, timestamp, and message.\n */\n\nimport { safeColors } from './colors.js';\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'verbose';\n\nconst LEVEL_CONFIG: Record<LogLevel, { symbol: string; label: string; color: (s: string) => string }> = {\n info: { symbol: '◆', label: 'INFO ', color: safeColors.info },\n warn: { symbol: '⚠', label: 'WARN ', color: safeColors.warning },\n error: { symbol: '✗', label: 'ERROR', color: safeColors.error },\n debug: { symbol: '○', label: 'DEBUG', color: safeColors.muted },\n verbose: { symbol: '·', label: 'VERB ', color: safeColors.muted },\n};\n\nfunction timestamp(): string {\n const now = new Date();\n const h = String(now.getHours()).padStart(2, '0');\n const m = String(now.getMinutes()).padStart(2, '0');\n const s = String(now.getSeconds()).padStart(2, '0');\n return `${h}:${m}:${s}`;\n}\n\nexport function logLine(level: LogLevel, message: string): string {\n const cfg = LEVEL_CONFIG[level];\n const sym = cfg.color(cfg.symbol);\n const lbl = safeColors.muted(cfg.label);\n const ts = safeColors.muted(timestamp());\n return ` ${sym} ${lbl} ${ts} ${message}`;\n}\n\nexport function logGroup(title: string, lines: string[]): string {\n const header = ` ${safeColors.bold(title)}`;\n const body = lines.map((l) => ` ${l}`).join('\\n');\n return body ? `${header}\\n${body}` : header;\n}\n\nexport function printLog(level: LogLevel, message: string): void {\n process.stdout.write(logLine(level, message) + '\\n');\n}\n","/**\n * Inline status badges for CLI output.\n *\n * @example\n * badge('ONLINE', 'success') → green [ONLINE]\n * badge('FAILED', 'error') → red [FAILED]\n * badge('PENDING', 'neutral') → muted [PENDING]\n */\n\nimport { safeColors } from './colors.js';\n\nexport type BadgeVariant = 'success' | 'error' | 'warning' | 'info' | 'neutral';\n\nconst BADGE_COLORS: Record<BadgeVariant, (s: string) => string> = {\n success: safeColors.success,\n error: safeColors.error,\n warning: safeColors.warning,\n info: safeColors.info,\n neutral: safeColors.muted,\n};\n\nexport function badge(label: string, variant: BadgeVariant = 'neutral'): string {\n const colorFn = BADGE_COLORS[variant];\n return colorFn(`[${label.toUpperCase()}]`);\n}\n\nexport function statusBadge(status: string): string {\n const s = status.toLowerCase();\n if (s === 'online' || s === 'running' || s === 'success' || s === 'active' || s === 'done') {\n return badge(status, 'success');\n }\n if (s === 'offline' || s === 'failed' || s === 'error' || s === 'stopped') {\n return badge(status, 'error');\n }\n if (s === 'degraded' || s === 'warning' || s === 'reconnecting' || s === 'pending') {\n return badge(status, 'warning');\n }\n if (s === 'starting' || s === 'initializing') {\n return badge(status, 'info');\n }\n return badge(status, 'neutral');\n}\n","/**\n * Low-level terminal utilities for interactive CLI prompts.\n * All functions check isInteractive() before using raw mode.\n */\n\nimport * as readline from 'node:readline';\n\nexport interface Key {\n name: string;\n ctrl: boolean;\n shift: boolean;\n meta: boolean;\n sequence: string;\n}\n\nexport function isInteractive(): boolean {\n return Boolean(\n process.stdin.isTTY &&\n process.stdout.isTTY &&\n !process.env.CI &&\n !process.env.NO_INTERACTIVE\n );\n}\n\nexport function enableRawMode(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n}\n\nexport function disableRawMode(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n}\n\nexport function clearLine(): void {\n process.stdout.write('\\r\\x1b[K');\n}\n\nexport function clearLines(n: number): void {\n for (let i = 0; i < n; i++) {\n if (i > 0) {process.stdout.write('\\x1b[1A');}\n clearLine();\n }\n}\n\nexport function hideCursor(): void {\n process.stdout.write('\\x1b[?25l');\n}\n\nexport function showCursor(): void {\n process.stdout.write('\\x1b[?25h');\n}\n\nexport function moveCursorUp(n: number): void {\n process.stdout.write(`\\x1b[${n}A`);\n}\n\n/**\n * Listen for keypresses. Returns an unsubscribe function.\n * Caller is responsible for enabling raw mode before calling.\n */\nexport function onKeypress(handler: (key: Key) => void): () => void {\n readline.emitKeypressEvents(process.stdin);\n\n const listener = (_: unknown, key: Key) => {\n if (key) {handler(key);}\n };\n\n process.stdin.on('keypress', listener);\n process.stdin.resume();\n\n return () => {\n process.stdin.off('keypress', listener);\n if (process.stdin.listenerCount('keypress') === 0) {\n process.stdin.pause();\n }\n };\n}\n\nexport function isUpKey(key: Key): boolean {\n return key.name === 'up' || (key.name === 'k' && !key.ctrl);\n}\n\nexport function isDownKey(key: Key): boolean {\n return key.name === 'down' || (key.name === 'j' && !key.ctrl);\n}\n\nexport function isEnterKey(key: Key): boolean {\n return key.name === 'return' || key.name === 'enter';\n}\n\nexport function isEscapeKey(key: Key): boolean {\n return key.name === 'escape' || (key.name === 'c' && key.ctrl) || (key.name === 'q' && !key.ctrl);\n}\n\nexport function isSpaceKey(key: Key): boolean {\n return key.name === 'space';\n}\n","/**\n * Multi-step task runner with visual progress.\n * Each task shows as ○ pending → spinner running → ● done / ✗ failed.\n *\n * @example\n * await runTasks([\n * { title: 'Install dependencies', run: async () => { ... } },\n * { title: 'Build', run: async () => { ... } },\n * ])\n */\n\nimport { safeColors } from './colors.js';\nimport { clearLines } from './interactive/terminal.js';\n\nexport interface Task {\n title: string;\n run: (updateTitle: (t: string) => void) => Promise<void>;\n}\n\ntype TaskState = 'pending' | 'running' | 'done' | 'failed';\n\ninterface TaskStatus {\n title: string;\n state: TaskState;\n error?: string;\n}\n\nconst SPINNER_FRAMES = ['◐', '◓', '◑', '◒'];\n\nfunction renderTasks(statuses: TaskStatus[], spinnerFrame: number): number {\n const lines: string[] = [];\n for (const s of statuses) {\n let prefix: string;\n switch (s.state) {\n case 'pending':\n prefix = safeColors.muted('○');\n break;\n case 'running':\n prefix = safeColors.primary(SPINNER_FRAMES[spinnerFrame % SPINNER_FRAMES.length] ?? '◆');\n break;\n case 'done':\n prefix = safeColors.success('●');\n break;\n case 'failed':\n prefix = safeColors.error('✗');\n break;\n }\n lines.push(` ${prefix} ${s.state === 'done' ? safeColors.muted(s.title) : s.state === 'failed' ? safeColors.error(s.title) : s.title}`);\n if (s.error) {\n lines.push(` ${safeColors.muted(s.error)}`);\n }\n }\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function runTasks(tasks: Task[]): Promise<void> {\n const statuses: TaskStatus[] = tasks.map((t) => ({ title: t.title, state: 'pending' as TaskState }));\n let lineCount = 0;\n let spinnerFrame = 0;\n\n // Initial render\n lineCount = renderTasks(statuses, spinnerFrame);\n\n let spinnerInterval: ReturnType<typeof setInterval> | undefined;\n\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n const status = statuses[i];\n if (!task || !status) {continue;}\n\n status.state = 'running';\n clearLines(lineCount);\n lineCount = renderTasks(statuses, spinnerFrame);\n\n spinnerInterval = setInterval(() => {\n spinnerFrame++;\n clearLines(lineCount);\n lineCount = renderTasks(statuses, spinnerFrame);\n }, 80);\n\n try {\n await task.run((newTitle) => {\n status.title = newTitle;\n });\n status.state = 'done';\n } catch (err) {\n status.state = 'failed';\n status.error = err instanceof Error ? err.message : String(err);\n } finally {\n clearInterval(spinnerInterval);\n spinnerInterval = undefined;\n }\n }\n\n // Final render without spinner\n clearLines(lineCount);\n renderTasks(statuses, 0);\n process.stdout.write('\\n');\n\n const failed = statuses.filter((s) => s.state === 'failed');\n if (failed.length > 0) {\n throw new Error(`${failed.length} task${failed.length === 1 ? '' : 's'} failed`);\n }\n}\n","/**\n * Interactive y/n confirmation prompt.\n *\n * @example\n * const ok = await confirm({ message: 'Deploy to production?', defaultValue: false })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface ConfirmOptions {\n message: string;\n defaultValue?: boolean;\n}\n\nexport async function confirm(options: ConfirmOptions): Promise<boolean> {\n const { message, defaultValue = false } = options;\n\n if (!isInteractive()) {\n return defaultValue;\n }\n\n const hint = defaultValue ? '(Y/n)' : '(y/N)';\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(hint)} `);\n\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: process.stdin, output: undefined });\n\n rl.once('line', (line) => {\n rl.close();\n const trimmed = line.trim().toLowerCase();\n process.stdout.write('\\n');\n if (trimmed === '') {\n resolve(defaultValue);\n } else {\n resolve(trimmed === 'y' || trimmed === 'yes');\n }\n });\n\n rl.once('close', () => {\n resolve(defaultValue);\n });\n });\n}\n","/**\n * Interactive text input prompt.\n *\n * @example\n * const name = await text({ message: 'Plugin name', placeholder: 'my-plugin', validate: v => v ? undefined : 'Required' })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface TextOptions {\n message: string;\n placeholder?: string;\n defaultValue?: string;\n validate?: (value: string) => string | undefined;\n mask?: boolean;\n}\n\nexport async function text(options: TextOptions): Promise<string> {\n const { message, placeholder, defaultValue = '', validate, mask = false } = options;\n\n if (!isInteractive()) {\n return defaultValue;\n }\n\n const hint = placeholder ? safeColors.muted(` (${placeholder})`) : '';\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)}${hint}\\n`);\n process.stdout.write(`${safeColors.muted('│')} `);\n\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: mask ? undefined : process.stdout,\n terminal: !mask,\n });\n\n if (mask) {\n process.stdin.on('data', (char) => {\n const c = char.toString();\n if (c === '\\n' || c === '\\r') {return;}\n process.stdout.write('*');\n });\n }\n\n rl.once('line', (line) => {\n rl.close();\n const value = line.trim() || defaultValue;\n\n if (validate) {\n const error = validate(value);\n if (error) {\n process.stdout.write(`${safeColors.error('✗')} ${safeColors.error(error)}\\n`);\n resolve(text(options));\n return;\n }\n }\n\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve(value);\n });\n\n rl.once('close', () => {\n resolve(defaultValue);\n });\n });\n}\n","/**\n * Interactive arrow-key single-select prompt.\n *\n * @example\n * const env = await select({\n * message: 'Select environment',\n * choices: [{ label: 'development', value: 'dev' }, { label: 'production', value: 'prod' }]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n isInteractive, enableRawMode, disableRawMode,\n hideCursor, showCursor, clearLines,\n onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey,\n} from './terminal.js';\n\nexport interface SelectChoice<T> {\n label: string;\n value: T;\n hint?: string;\n}\n\nexport interface SelectOptions<T> {\n message: string;\n choices: SelectChoice<T>[];\n initialIndex?: number;\n}\n\nfunction renderSelect<T>(message: string, choices: SelectChoice<T>[], activeIndex: number, isFirst: boolean): number {\n const lines: string[] = [];\n\n if (isFirst) {\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(message)}`);\n lines.push(safeColors.muted('│'));\n }\n\n for (let i = 0; i < choices.length; i++) {\n const choice = choices[i];\n if (!choice) {continue;}\n const isActive = i === activeIndex;\n const pointer = isActive ? safeColors.primary('❯') : ' ';\n const label = isActive ? safeColors.bold(choice.label) : safeColors.muted(choice.label);\n const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n lines.push(`${safeColors.muted('│')} ${pointer} ${label}${hint}`);\n }\n\n lines.push(safeColors.muted('│'));\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function select<T>(options: SelectOptions<T>): Promise<T> {\n const { message, choices, initialIndex = 0 } = options;\n\n if (!isInteractive() || choices.length === 0) {\n return (choices[Math.min(initialIndex, choices.length - 1)] as SelectChoice<T>).value;\n }\n\n let activeIndex = Math.min(initialIndex, choices.length - 1);\n let lineCount = 0;\n\n hideCursor();\n enableRawMode();\n lineCount = renderSelect(message, choices, activeIndex, true);\n\n return new Promise((resolve) => {\n const unsubscribe = onKeypress((key) => {\n if (isUpKey(key)) {\n activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n clearLines(lineCount);\n lineCount = renderSelect(message, choices, activeIndex, false);\n return;\n }\n\n if (isDownKey(key)) {\n activeIndex = (activeIndex + 1) % choices.length;\n clearLines(lineCount);\n lineCount = renderSelect(message, choices, activeIndex, false);\n return;\n }\n\n if (isEnterKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n const selected = choices[activeIndex] as SelectChoice<T>;\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(selected.label)}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve(selected.value);\n return;\n }\n\n if (isEscapeKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n process.stdout.write(`${safeColors.muted('◆')} ${safeColors.muted(message)} ${safeColors.muted('cancelled')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve((choices[initialIndex] as SelectChoice<T>).value);\n return;\n }\n });\n });\n}\n","/**\n * Interactive checkbox multi-select prompt.\n * Space to toggle, Enter to confirm, 'a' to toggle all.\n *\n * @example\n * const plugins = await multiSelect({\n * message: 'Select plugins',\n * choices: [{ label: 'workflow', value: 'workflow', checked: true }, ...]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n isInteractive, enableRawMode, disableRawMode,\n hideCursor, showCursor, clearLines,\n onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey, isSpaceKey,\n} from './terminal.js';\n\nexport interface MultiSelectChoice<T> {\n label: string;\n value: T;\n checked?: boolean;\n hint?: string;\n}\n\nexport interface MultiSelectOptions<T> {\n message: string;\n choices: MultiSelectChoice<T>[];\n min?: number;\n}\n\nfunction renderMultiSelect<T>(\n message: string,\n choices: MultiSelectChoice<T>[],\n checked: Set<number>,\n activeIndex: number,\n isFirst: boolean,\n error?: string,\n): number {\n const lines: string[] = [];\n\n if (isFirst) {\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted('Space to toggle, Enter to confirm')}`);\n lines.push(safeColors.muted('│'));\n }\n\n for (let i = 0; i < choices.length; i++) {\n const choice = choices[i];\n if (!choice) {continue;}\n const isActive = i === activeIndex;\n const isChecked = checked.has(i);\n const checkbox = isChecked ? safeColors.success('◉') : safeColors.muted('○');\n const pointer = isActive ? safeColors.primary('❯') : ' ';\n const label = isActive ? safeColors.bold(choice.label) : isChecked ? choice.label : safeColors.muted(choice.label);\n const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n lines.push(`${safeColors.muted('│')} ${pointer} ${checkbox} ${label}${hint}`);\n }\n\n if (error) {\n lines.push(`${safeColors.muted('│')}`);\n lines.push(`${safeColors.muted('│')} ${safeColors.error('✗')} ${safeColors.error(error)}`);\n }\n\n lines.push(safeColors.muted('│'));\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function multiSelect<T>(options: MultiSelectOptions<T>): Promise<T[]> {\n const { message, choices, min } = options;\n\n if (!isInteractive() || choices.length === 0) {\n return choices.filter((c) => c.checked).map((c) => c.value);\n }\n\n let activeIndex = 0;\n const checked = new Set<number>(\n choices.map((c, i) => (c.checked ? i : -1)).filter((i) => i >= 0)\n );\n let lineCount = 0;\n let error: string | undefined;\n\n hideCursor();\n enableRawMode();\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, true, error);\n\n return new Promise((resolve) => {\n const unsubscribe = onKeypress((key) => {\n if (isUpKey(key)) {\n activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isDownKey(key)) {\n activeIndex = (activeIndex + 1) % choices.length;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isSpaceKey(key)) {\n if (checked.has(activeIndex)) {\n checked.delete(activeIndex);\n } else {\n checked.add(activeIndex);\n }\n error = undefined;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (key.name === 'a' && !key.ctrl) {\n if (checked.size === choices.length) {\n checked.clear();\n } else {\n choices.forEach((_, i) => checked.add(i));\n }\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isEnterKey(key)) {\n if (min !== undefined && checked.size < min) {\n error = `Select at least ${min} option${min === 1 ? '' : 's'}`;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n unsubscribe();\n disableRawMode();\n showCursor();\n const headerLines = 2;\n clearLines(lineCount + headerLines);\n\n const selectedLabels = choices\n .filter((_, i) => checked.has(i))\n .map((c) => c.label)\n .join(', ');\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(selectedLabels || 'none')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n\n resolve(choices.filter((_, i) => checked.has(i)).map((c) => c.value));\n return;\n }\n\n if (isEscapeKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n process.stdout.write(`${safeColors.muted('◆')} ${safeColors.muted(message)} ${safeColors.muted('cancelled')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve([]);\n return;\n }\n });\n });\n}\n","import type { UIFacade, SelectChoice, MultiSelectChoice } from '@kb-labs/plugin-contracts';\nimport { safeColors, safeSymbols } from './colors.js';\nimport { sideBorderBox, sideBorderChain, metricsList } from './modern-format.js';\nimport { formatTable } from './table.js';\n\n/**\n * All interactive prompt methods of UIFacade.\n * Required (not optional) so TypeScript catches missing implementations\n * when UIFacade gains a new prompt method.\n */\nexport interface UIPrompts {\n confirm(msg: string, opts?: { defaultValue?: boolean }): Promise<boolean>;\n prompt(msg: string, opts?: { default?: string; mask?: boolean }): Promise<string>;\n select<T>(msg: string, choices: SelectChoice<T>[]): Promise<T>;\n multiSelect<T>(msg: string, choices: MultiSelectChoice<T>[]): Promise<T[]>;\n}\n\n/**\n * Safe-return prompts for non-interactive contexts (subprocess, sandbox).\n * All methods return the most sensible default without any I/O.\n */\nexport const NOOP_PROMPTS: UIPrompts = {\n confirm: async (_, opts) => opts?.defaultValue ?? false,\n prompt: async (_, opts) => opts?.default ?? '',\n select: async <T>(_: string, choices: SelectChoice<T>[]) => choices[0]?.value as T,\n multiSelect: async <T>(_: string, choices: MultiSelectChoice<T>[]) =>\n choices.filter(c => c.checked).map(c => c.value) as T[],\n};\n\n/**\n * Shared stdout UIFacade factory for subprocess/worker contexts.\n *\n * Both params are required so TypeScript catches any new UIFacade interactive\n * method at the call site rather than silently inheriting a noop default.\n *\n * Uses `satisfies UIFacade` on the object literal — TypeScript will error here\n * (not just at the return type) if any UIFacade method is missing.\n */\nexport function createBaseStdoutUI(\n prompts: UIPrompts,\n log: UIFacade['log'],\n): UIFacade {\n return {\n colors: safeColors,\n symbols: safeSymbols,\n\n write: (text) => { process.stdout.write(text + '\\n'); },\n\n info: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Info',\n sections: [{ items: [msg] }, ...extra],\n status: 'info',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n success: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Success',\n sections: [{ items: [msg] }, ...extra],\n status: 'success',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n warn: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Warning',\n sections: [{ items: [msg] }, ...extra],\n status: 'warning',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n error: (err, options) => {\n const message = err instanceof Error ? err.message : err;\n const sections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [\n { items: [message] },\n ];\n\n if (options?.sections?.length) {\n sections.push(...options.sections.map(s => ({ header: s.header, items: s.items })));\n }\n\n if (options?.cause) {\n sections.push({ header: 'Cause', items: [{ text: options.cause, dim: true }] });\n }\n\n if (options?.hint) {\n const hintItems: Array<string | { text: string; dim: boolean }> = [options.hint];\n if (options.command) { hintItems.push({ text: `$ ${options.command}`, dim: true }); }\n sections.push({ header: 'Hint', items: hintItems });\n } else if (options?.command) {\n sections.push({ header: 'Hint', items: [{ text: `$ ${options.command}`, dim: true }] });\n }\n\n console.error(sideBorderBox({\n title: options?.title ?? 'Error',\n sections,\n status: 'error',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n debug: (msg) => { if (process.env.DEBUG) { console.debug(msg); } },\n\n spinner: (msg) => {\n console.log(`${safeColors.primary('◆')} ${msg}`);\n return {\n update: (m) => console.log(`${safeColors.primary('◆')} ${m}`),\n succeed: (m) => console.log(`${safeColors.success('✓')} ${m ?? msg}`),\n fail: (m) => console.log(`${safeColors.error('✗')} ${m ?? msg}`),\n stop: () => {},\n };\n },\n\n table: (data, columns) => {\n if (data.length === 0) { return; }\n const cols = columns ?? Object.keys(data[0]!).map(k => ({ header: k, key: k }));\n const rows = data.map(row => cols.map(col => String(row[col.key] ?? '')));\n const lines = formatTable(\n cols.map(c => ({ header: c.header, width: (c as { width?: number }).width, align: (c as { align?: 'left' | 'center' | 'right' }).align })),\n rows,\n { separator: '' },\n );\n for (const line of lines) { console.log(` ${line}`); }\n },\n\n json: (data, options) => console.log(options?.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data)),\n newline: () => console.log(),\n divider: () => console.log(safeColors.muted('─'.repeat(process.stdout.columns || 80))),\n\n box: (content, title) => {\n console.log(sideBorderBox({\n title: title || '',\n sections: [{ items: content.split('\\n') }],\n status: 'info',\n }));\n },\n\n sideBox: (options) => {\n const allSections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [];\n if (options.summary && Object.keys(options.summary).length > 0) {\n allSections.push({ items: metricsList(options.summary as Record<string, string | number>) });\n }\n allSections.push(...(options.sections ?? []).map(s => ({ header: s.header, items: s.items })));\n console.log(sideBorderBox({\n title: options.title,\n sections: allSections,\n status: options.status,\n timing: options.timing,\n }));\n },\n\n chain: (items) => {\n console.log(sideBorderChain(\n items.map(item => ({\n title: item.title,\n sections: (item.sections ?? []).map(s => ({ header: s.header, items: s.items })),\n summary: item.summary,\n status: item.status,\n timing: item.timing,\n })),\n ));\n },\n\n confirm: prompts.confirm,\n prompt: prompts.prompt,\n select: prompts.select,\n multiSelect: prompts.multiSelect,\n log,\n } satisfies UIFacade;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/colors.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/loader.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/command-output.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/timing-tracker.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/command-suggestions.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/command-discovery.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/manifest-parser.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/multi-cli-suggestions.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/dynamic-command-discovery.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/artifacts-display.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/table.ts","../../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/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/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","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/command-runner.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/flags.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/env.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/context.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/path.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/retry.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/utils/errors.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/destructive.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/modern-format.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/command-result.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/log-display.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/badge.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/interactive/terminal.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/tasks.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/interactive/confirm.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/interactive/text.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/interactive/select.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/interactive/multi-select.ts","../../home/runner/work/kb-labs/kb-labs/shared/cli-ui/src/stdout-ui.ts"],"names":["text","indent","pad","timestamp","path","fsp","padding","formatTimestamp","formatDuration","section","result","formatTiming","bulletList","readline2","readline3"],"mappings":"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","file":"index.js","sourcesContent":["/**\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","/**\n * Progress indicators and loaders for CLI operations\n *\n * Periodic animation implementation (works in child processes as multi-line output).\n */\n\nimport { safeColors, safeSymbols } from './colors';\n\nexport interface LoaderOptions {\n /** Text to show while loading */\n text?: string;\n /** Whether to show spinner (true) or progress bar (false) */\n spinner?: boolean;\n /** Total items for progress bar */\n total?: number;\n /** Current item for progress bar */\n current?: number;\n /** Whether JSON mode is enabled (disables all visual feedback) */\n jsonMode?: boolean;\n}\n\nconst SPINNER_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n// Process-scoped json mode flag. Set by SDK before invoking handler; read by useLoader().\nlet _jsonMode = false;\n\nexport function setJsonMode(enabled: boolean): void {\n _jsonMode = enabled;\n}\n\nexport function isJsonMode(): boolean {\n return _jsonMode;\n}\n\nexport class Loader {\n private isActive = false;\n private options: LoaderOptions;\n private frameIndex = 0;\n private intervalId?: NodeJS.Timeout;\n private currentText: string; // ← Реактивная переменная для текста\n\n constructor(options: LoaderOptions = {}) {\n this.options = {\n text: 'Loading...',\n spinner: true,\n jsonMode: false,\n ...options,\n };\n this.currentText = this.options.text ?? 'Loading...';\n }\n\n start(): void {\n if (this.options.jsonMode || this.isActive) {\n return;\n }\n this.isActive = true;\n\n // Start periodic animation updates (every 200ms)\n if (this.options.spinner && !this.options.jsonMode) {\n this.intervalId = setInterval(() => {\n if (!this.isActive) {\n this.clearInterval();\n return;\n }\n\n const char = SPINNER_CHARS[this.frameIndex % SPINNER_CHARS.length];\n process.stdout.write(`\\r${char} ${this.currentText}`); // ← Читаем реактивный текст\n this.frameIndex++;\n }, 200);\n }\n }\n\n update(options: Partial<LoaderOptions>): void {\n this.options = { ...this.options, ...options };\n\n if (!this.isActive || this.options.jsonMode) {return;}\n\n // Update reactive text - setInterval will pick it up on next tick\n if (options.text !== undefined) {\n this.currentText = options.text;\n }\n\n // For manual updates when no interval (progress bar mode)\n if (!this.intervalId) {\n if (this.options.spinner) {\n const text = this.options.text ?? 'Loading...';\n console.log(`${safeSymbols.info} ${text}`);\n } else if (this.options.total !== undefined) {\n this.updateProgress();\n }\n }\n }\n\n stop(): void {\n this.isActive = false;\n this.clearInterval();\n }\n\n succeed(message?: string): void {\n this.stop();\n if (!this.options.jsonMode && message) {\n process.stdout.write(`\\r\\x1b[K${safeSymbols.success} ${message}\\n`);\n }\n }\n\n fail(message?: string): void {\n this.stop();\n if (!this.options.jsonMode && message) {\n process.stdout.write(`\\r\\x1b[K${safeSymbols.error} ${message}\\n`);\n }\n }\n\n private clearInterval(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = undefined;\n }\n }\n\n private updateProgress(): void {\n if (this.options.total === undefined || this.options.current === undefined) {return;}\n\n const current = this.options.current;\n const total = this.options.total;\n const percentage = Math.round((current / total) * 100);\n const barLength = 20;\n const filledLength = Math.round((current / total) * barLength);\n\n const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);\n const text = this.options.text || 'Progress';\n\n process.stdout.write(`\\r${safeColors.info('→')} ${text}... ${bar} ${percentage}% (${current}/${total})`);\n }\n}\n\n/**\n * Create a simple spinner\n */\nexport function createSpinner(text: string, jsonMode = false): Loader {\n return new Loader({ text, spinner: true, jsonMode });\n}\n\n/**\n * Create a progress bar\n */\nexport function createProgressBar(text: string, total: number, jsonMode = false): Loader {\n return new Loader({ text, spinner: false, total, current: 0, jsonMode });\n}\n\n/**\n * Simple loading message without spinner\n */\nexport function showLoading(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeColors.info('→')} ${text}...`);\n }\n}\n\n/**\n * Show completion message\n */\nexport function showSuccess(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeSymbols.success} ${text}`);\n }\n}\n\n/**\n * Show error message\n */\nexport function showError(text: string, jsonMode = false): void {\n if (!jsonMode) {\n console.log(`${safeSymbols.error} ${text}`);\n }\n}\n\n/**\n * Create a loader for progress indication\n *\n * @param text - Text to display while loading\n * @param options - Optional configuration\n * @returns Loader instance\n *\n * @example\n * ```typescript\n * import { useLoader } from '@kb-labs/sdk';\n *\n * const loader = useLoader('Processing data...');\n * loader.start();\n * // ... do work ...\n * loader.succeed('Processing complete!');\n * ```\n */\nexport function useLoader(text: string, options?: Partial<LoaderOptions>): Loader {\n return new Loader({ text, jsonMode: _jsonMode, ...options });\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","/**\n * Command output formatting utilities\n * Provides consistent formatting for CLI command results\n */\n\nimport { box, keyValue } from './format';\nimport { safeColors } from './colors';\n\nexport interface CommandResult {\n title: string;\n summary: Record<string, string | number>;\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n suggestions?: string[];\n}\n\n/**\n * Format timing in milliseconds to human-readable string\n */\nexport function formatTiming(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n } else if (ms < 60000) {\n return `${(ms / 1000).toFixed(1)}s`;\n } else {\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n }\n}\n\n/**\n * Format timing breakdown as array of strings\n */\nexport function formatTimingBreakdown(timings: Record<string, number>): string[] {\n const lines: string[] = [];\n \n // Sort timings by value (descending) for better readability\n const sortedEntries = Object.entries(timings)\n .filter(([key]) => key !== 'total')\n .sort(([, a], [, b]) => b - a);\n \n for (const [name, ms] of sortedEntries) {\n const formattedName = name.charAt(0).toUpperCase() + name.slice(1);\n lines.push(`${formattedName}: ${formatTiming(ms)}`);\n }\n \n // Always show total at the end\n if (timings.total !== undefined) {\n lines.push(`Total: ${formatTiming(timings.total)}`);\n }\n \n return lines;\n}\n\n/**\n * Format complete command output with box, summary, timing, and additional info\n */\nexport function formatCommandOutput(result: CommandResult): string {\n const sections: string[] = [];\n \n // Add summary section\n const summaryLines = keyValue(result.summary);\n sections.push(...summaryLines);\n \n // Add timing section\n if (result.timing !== undefined) {\n sections.push('');\n \n if (typeof result.timing === 'number') {\n sections.push(`Time: ${formatTiming(result.timing)}`);\n } else {\n const timingLines = formatTimingBreakdown(result.timing);\n sections.push(...timingLines);\n }\n }\n \n // Add warnings section\n if (result.warnings && result.warnings.length > 0) {\n sections.push('');\n sections.push(safeColors.warning('Warnings:'));\n result.warnings.forEach(warning => \n sections.push(` ${safeColors.dim('•')} ${warning}`)\n );\n }\n \n // Add errors section\n if (result.errors && result.errors.length > 0) {\n sections.push('');\n sections.push(safeColors.error('Errors:'));\n result.errors.forEach(error => \n sections.push(` ${safeColors.dim('•')} ${error}`)\n );\n }\n \n // Add diagnostics section\n if (result.diagnostics && result.diagnostics.length > 0) {\n sections.push('');\n sections.push(safeColors.info('Diagnostics:'));\n result.diagnostics.forEach(diagnostic => \n sections.push(` ${safeColors.dim('•')} ${diagnostic}`)\n );\n }\n \n // Add suggestions section\n if (result.suggestions && result.suggestions.length > 0) {\n sections.push('');\n sections.push(safeColors.info('Suggestions:'));\n result.suggestions.forEach(suggestion => \n sections.push(` ${safeColors.dim('•')} ${suggestion}`)\n );\n }\n \n return box(result.title, sections);\n}\n\n/**\n * Create a simple command result with just title, summary, and timing\n */\nexport function createSimpleResult(\n title: string, \n summary: Record<string, string | number>, \n timing?: number\n): CommandResult {\n return {\n title,\n summary,\n timing,\n };\n}\n\n/**\n * Create a detailed command result with all optional fields\n */\nexport function createDetailedResult(\n title: string,\n summary: Record<string, string | number>,\n options: {\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n suggestions?: string[];\n } = {}\n): CommandResult {\n return {\n title,\n summary,\n ...options,\n };\n}\n","/**\n * Timing tracker utility for CLI commands\n * Provides checkpoint-based timing measurement\n */\n\nexport class TimingTracker {\n private start: number;\n private checkpoints: Record<string, number> = {};\n \n constructor() {\n this.start = Date.now();\n }\n \n /**\n * Record a timing checkpoint\n */\n checkpoint(name: string): void {\n this.checkpoints[name] = Date.now() - this.start;\n }\n \n /**\n * Get total elapsed time in milliseconds\n */\n total(): number {\n return Date.now() - this.start;\n }\n \n /**\n * Get timing breakdown including total\n */\n breakdown(): Record<string, number> {\n return { ...this.checkpoints, total: this.total() };\n }\n \n /**\n * Get timing breakdown without total\n */\n checkpointsOnly(): Record<string, number> {\n return { ...this.checkpoints };\n }\n \n /**\n * Reset the timer\n */\n reset(): void {\n this.start = Date.now();\n this.checkpoints = {};\n }\n \n /**\n * Get elapsed time since last checkpoint or start\n */\n sinceLastCheckpoint(): number {\n const lastCheckpointTime = Math.max(...Object.values(this.checkpoints), 0);\n return Date.now() - this.start - lastCheckpointTime;\n }\n \n /**\n * Get elapsed time since a specific checkpoint\n */\n sinceCheckpoint(checkpointName: string): number | null {\n const checkpointTime = this.checkpoints[checkpointName];\n if (checkpointTime === undefined) {\n return null;\n }\n return Date.now() - this.start - checkpointTime;\n }\n}\n","/**\n * Command suggestions and validation utilities\n */\n\nexport interface CommandSuggestion {\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available?: boolean;\n}\n\nexport interface CommandRegistry {\n commands: Set<string>;\n groups: Map<string, Set<string>>;\n}\n\n/**\n * Create a command registry from available commands\n */\nexport function createCommandRegistry(commands: string[]): CommandRegistry {\n const commandSet = new Set(commands);\n const groups = new Map<string, Set<string>>();\n \n // Group commands by prefix (e.g., \"devlink:apply\" -> group \"devlink\")\n for (const cmd of commands) {\n const [group, ...rest] = cmd.split(':');\n if (group && rest.length > 0) {\n if (!groups.has(group)) {\n groups.set(group, new Set());\n }\n groups.get(group)!.add(rest.join(':'));\n }\n }\n \n return {\n commands: commandSet,\n groups\n };\n}\n\n/**\n * Check if a command is available in the registry\n */\nexport function isCommandAvailable(\n command: string, \n registry: CommandRegistry\n): boolean {\n // Handle full command strings like \"kb devlink apply\"\n if (command.startsWith('kb ')) {\n const parts = command.split(' ');\n if (parts.length >= 3 && parts[1] && parts[2]) {\n const group = parts[1];\n const subcommand = parts[2];\n const fullCommand = `${group}:${subcommand}`;\n return registry.commands.has(fullCommand);\n }\n }\n \n // Handle direct command names like \"devlink:apply\"\n return registry.commands.has(command);\n}\n\n/**\n * Validate suggestions against available commands\n */\nexport function validateSuggestions(\n suggestions: CommandSuggestion[],\n registry: CommandRegistry\n): CommandSuggestion[] {\n return suggestions.map(suggestion => ({\n ...suggestion,\n available: isCommandAvailable(suggestion.command, registry)\n })).filter(suggestion => suggestion.available);\n}\n\n/**\n * Generate common devlink suggestions\n */\nexport function generateDevlinkSuggestions(\n warningCodes: Set<string>,\n context: { undo?: { available: boolean } },\n registry: CommandRegistry\n): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n\n // LOCK_MISMATCH -> apply\n if (warningCodes.has('LOCK_MISMATCH')) {\n suggestions.push({\n id: 'SYNC_LOCK',\n command: 'kb devlink apply',\n args: ['--yes'],\n description: 'Apply changes to sync manifests',\n impact: 'safe',\n when: 'LOCK_MISMATCH'\n });\n }\n\n // BACKUP_MISSING -> freeze\n if (warningCodes.has('BACKUP_MISSING')) {\n suggestions.push({\n id: 'CREATE_BACKUP',\n command: 'kb devlink freeze',\n args: ['--replace'],\n description: 'Create a fresh backup',\n impact: 'safe',\n when: 'BACKUP_MISSING'\n });\n }\n\n // STALE_LOCK -> freeze\n if (warningCodes.has('STALE_LOCK')) {\n suggestions.push({\n id: 'REFRESH_LOCK',\n command: 'kb devlink freeze',\n args: ['--pin=caret'],\n description: 'Refresh lock file',\n impact: 'safe',\n when: 'STALE_LOCK'\n });\n }\n\n // STALE_YALC_ARTIFACTS -> clean\n if (warningCodes.has('STALE_YALC_ARTIFACTS')) {\n suggestions.push({\n id: 'CLEAN_YALC',\n command: 'kb devlink clean',\n args: [],\n description: 'Remove yalc artifacts',\n impact: 'safe',\n when: 'STALE_YALC_ARTIFACTS'\n });\n }\n\n // PROTOCOL_CONFLICTS -> clean --hard\n if (warningCodes.has('PROTOCOL_CONFLICTS')) {\n suggestions.push({\n id: 'FIX_PROTOCOLS',\n command: 'kb devlink clean',\n args: ['--hard'],\n description: 'Reset all protocols and reapply',\n impact: 'disruptive',\n when: 'PROTOCOL_CONFLICTS'\n });\n }\n\n // Undo suggestion\n if (context.undo?.available) {\n suggestions.push({\n id: 'UNDO_LAST',\n command: 'kb devlink undo',\n args: [],\n description: 'Revert last operation',\n impact: 'safe',\n when: 'BACKUP_AVAILABLE'\n });\n }\n\n // Validate and return only available suggestions\n return validateSuggestions(suggestions, registry);\n}\n\n\n/**\n * Generate quick actions for common scenarios\n */\nexport function generateQuickActions(\n hasWarnings: boolean,\n registry: CommandRegistry,\n group: string = 'devlink'\n): CommandSuggestion[] {\n if (!hasWarnings) {return [];}\n\n const quickActions: CommandSuggestion[] = [\n {\n id: 'QUICK_CLEAN',\n command: `kb ${group} clean`,\n args: [],\n description: 'Clean artifacts',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n },\n {\n id: 'QUICK_PLAN',\n command: `kb ${group} plan`,\n args: [],\n description: 'Create plan',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n },\n {\n id: 'QUICK_APPLY',\n command: `kb ${group} apply`,\n args: [],\n description: 'Apply changes',\n impact: 'safe',\n when: 'QUICK_ACTIONS'\n }\n ];\n\n return validateSuggestions(quickActions, registry);\n}\n","/**\n * Command discovery utilities for CLI systems\n */\n\nexport interface CommandInfo {\n id: string;\n group: string;\n name: string;\n description: string;\n available: boolean;\n}\n\n/**\n * Discover available commands from CLI manifest or registry\n * This is a generic interface that can be implemented by different CLI systems\n */\nexport interface CommandDiscovery {\n /**\n * Get all available commands\n */\n getAvailableCommands(): Promise<string[]>;\n \n /**\n * Get command info by ID\n */\n getCommandInfo(commandId: string): Promise<CommandInfo | null>;\n \n /**\n * Check if a command is available\n */\n isCommandAvailable(commandId: string): Promise<boolean>;\n}\n\n/**\n * Simple command discovery that works with a predefined list\n * Can be extended to work with actual CLI registries\n */\nexport class StaticCommandDiscovery implements CommandDiscovery {\n constructor(private commands: string[]) {}\n\n async getAvailableCommands(): Promise<string[]> {\n return [...this.commands];\n }\n\n async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n if (!this.commands.includes(commandId)) {\n return null;\n }\n\n const [group, name] = commandId.split(':');\n return {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: `Execute ${commandId}`,\n available: true\n };\n }\n\n async isCommandAvailable(commandId: string): Promise<boolean> {\n return this.commands.includes(commandId);\n }\n}\n\n\n\n/**\n * Create a command discovery instance from a command list\n */\nexport function createCommandDiscovery(commands: string[]): CommandDiscovery {\n return new StaticCommandDiscovery(commands);\n}\n","/**\n * CLI manifest parsing utilities\n */\n\nexport interface CommandManifest {\n manifestVersion: string;\n id: string;\n aliases?: string[];\n group: string;\n describe: string;\n longDescription?: string;\n requires?: string[];\n flags?: FlagDefinition[];\n examples?: string[];\n loader: () => Promise<{ run: unknown }>;\n}\n\nexport interface FlagDefinition {\n name: string;\n type: 'string' | 'boolean' | 'number' | 'array';\n alias?: string;\n default?: string | boolean | number | string[];\n description?: string;\n choices?: string[];\n required?: boolean;\n}\n\n/**\n * Extract command IDs from a manifest\n */\nexport function extractCommandIds(manifest: CommandManifest[]): string[] {\n return manifest.map(cmd => cmd.id);\n}\n\n/**\n * Extract command groups from a manifest\n */\nexport function extractCommandGroups(manifest: CommandManifest[]): string[] {\n const groups = new Set<string>();\n manifest.forEach(cmd => groups.add(cmd.group));\n return Array.from(groups);\n}\n\n/**\n * Find commands by group\n */\nexport function findCommandsByGroup(manifest: CommandManifest[], group: string): CommandManifest[] {\n return manifest.filter(cmd => cmd.group === group);\n}\n\n/**\n * Find command by ID\n */\nexport function findCommandById(manifest: CommandManifest[], id: string): CommandManifest | undefined {\n return manifest.find(cmd => cmd.id === id);\n}\n\n/**\n * Get command info for suggestions\n */\nexport function getCommandInfo(manifest: CommandManifest[], commandId: string): {\n id: string;\n group: string;\n name: string;\n description: string;\n available: boolean;\n} | null {\n const cmd = findCommandById(manifest, commandId);\n if (!cmd) {\n return null;\n }\n\n const [group, name] = commandId.split(':');\n return {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: cmd.describe,\n available: true\n };\n}\n\n/**\n * Generate suggestions for a specific group\n */\nexport function generateGroupSuggestions(\n manifest: CommandManifest[],\n group: string,\n _warningCodes: Set<string>,\n _context: unknown\n): Array<{\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available: boolean;\n}> {\n const groupCommands = findCommandsByGroup(manifest, group);\n const suggestions: Array<{\n id: string;\n command: string;\n args: string[];\n description: string;\n impact: 'safe' | 'disruptive';\n when: string;\n available: boolean;\n }> = [];\n\n // Generate common suggestions for each group\n for (const cmd of groupCommands) {\n // Basic command suggestion\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_${cmd.id.split(':')[1]?.toUpperCase() || 'UNKNOWN'}`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: [],\n description: cmd.describe,\n impact: 'safe',\n when: 'GENERAL',\n available: true\n });\n\n // Add specific suggestions based on command type\n if (cmd.id.includes('init')) {\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_INIT_FORCE`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: ['--force'],\n description: `${cmd.describe} (force)`,\n impact: 'disruptive',\n when: 'INIT_FAILED',\n available: true\n });\n }\n\n if (cmd.id.includes('clean') || cmd.id.includes('reset')) {\n suggestions.push({\n id: `${cmd.group.toUpperCase()}_CLEAN_HARD`,\n command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n args: ['--hard'],\n description: `${cmd.describe} (hard)`,\n impact: 'disruptive',\n when: 'CLEAN_NEEDED',\n available: true\n });\n }\n }\n\n return suggestions;\n}\n","/**\n * Multi-CLI suggestions system\n * Supports multiple CLI packages with their own manifests\n */\n\nimport { \n createCommandRegistry, \n generateDevlinkSuggestions,\n type CommandSuggestion,\n type CommandRegistry \n} from './command-suggestions';\nimport { \n extractCommandIds, \n generateGroupSuggestions,\n type CommandManifest \n} from './manifest-parser';\n\nexport interface MultiCLIContext {\n warningCodes: Set<string>;\n undo?: { available: boolean };\n [key: string]: unknown;\n}\n\nexport interface CLIPackage {\n name: string;\n group: string;\n commands: CommandManifest[];\n priority: number; // Higher priority = more important suggestions\n}\n\n/**\n * Multi-CLI suggestions manager\n */\nexport class MultiCLISuggestions {\n private packages: Map<string, CLIPackage> = new Map();\n private globalRegistry: CommandRegistry | null = null;\n\n /**\n * Register a CLI package\n */\n registerPackage(pkg: CLIPackage): void {\n this.packages.set(pkg.name, pkg);\n this.globalRegistry = null; // Invalidate cache\n }\n\n /**\n * Get or create global command registry\n */\n private getGlobalRegistry(): CommandRegistry {\n if (this.globalRegistry) {\n return this.globalRegistry;\n }\n\n const allCommands: string[] = [];\n for (const pkg of this.packages.values()) {\n allCommands.push(...extractCommandIds(pkg.commands));\n }\n\n this.globalRegistry = createCommandRegistry(allCommands);\n return this.globalRegistry;\n }\n\n /**\n * Generate suggestions for a specific group\n */\n generateGroupSuggestions(\n group: string, \n context: MultiCLIContext\n ): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n const registry = this.getGlobalRegistry();\n\n // Find packages for this group\n const groupPackages = Array.from(this.packages.values())\n .filter(pkg => pkg.group === group)\n .sort((a, b) => b.priority - a.priority);\n\n for (const pkg of groupPackages) {\n const groupSuggestions = generateGroupSuggestions(\n pkg.commands, \n group, \n context.warningCodes, \n context\n );\n\n // Convert to CommandSuggestion format and validate\n for (const suggestion of groupSuggestions) {\n if (registry.commands.has(suggestion.command.replace('kb ', '').replace(' ', ':'))) {\n suggestions.push({\n id: suggestion.id,\n command: suggestion.command,\n args: suggestion.args,\n description: suggestion.description,\n impact: suggestion.impact,\n when: suggestion.when,\n available: true\n });\n }\n }\n }\n\n return suggestions;\n }\n\n /**\n * Generate all suggestions across all packages\n */\n generateAllSuggestions(context: MultiCLIContext): CommandSuggestion[] {\n const suggestions: CommandSuggestion[] = [];\n const registry = this.getGlobalRegistry();\n\n // Special handling for devlink (highest priority)\n if (this.packages.has('devlink')) {\n const devlinkSuggestions = generateDevlinkSuggestions(\n context.warningCodes, \n { undo: context.undo }, \n registry\n );\n suggestions.push(...devlinkSuggestions);\n }\n\n // Generate suggestions for other groups\n const groups = new Set<string>();\n for (const pkg of this.packages.values()) {\n groups.add(pkg.group);\n }\n\n for (const group of groups) {\n if (group !== 'devlink') { // Skip devlink as it's handled above\n const groupSuggestions = this.generateGroupSuggestions(group, context);\n suggestions.push(...groupSuggestions);\n }\n }\n\n return suggestions;\n }\n\n /**\n * Get available commands for a group\n */\n getAvailableCommands(group: string): string[] {\n const groupPackages = Array.from(this.packages.values())\n .filter(pkg => pkg.group === group);\n \n const commands: string[] = [];\n for (const pkg of groupPackages) {\n commands.push(...extractCommandIds(pkg.commands));\n }\n \n return commands;\n }\n\n /**\n * Get all registered packages\n */\n getPackages(): CLIPackage[] {\n return Array.from(this.packages.values());\n }\n}\n\n","/**\n * Dynamic command discovery that loads commands from actual manifests\n */\n\nimport type { CommandDiscovery} from './command-discovery';\nimport { type CommandInfo } from './command-discovery';\n\nexport interface ManifestLoader {\n loadManifest(packageName: string): Promise<any[]>;\n}\n\n/**\n * Dynamic command discovery that loads commands from manifests\n */\nexport class DynamicCommandDiscovery implements CommandDiscovery {\n private manifestCache = new Map<string, any[]>();\n private commandCache = new Map<string, CommandInfo>();\n\n constructor(\n private manifestLoader: ManifestLoader,\n private packageNames: string[]\n ) {}\n\n async getAvailableCommands(): Promise<string[]> {\n const allCommands: string[] = [];\n \n for (const packageName of this.packageNames) {\n try {\n const manifest = await this.loadManifest(packageName);\n const commands = manifest.map(cmd => cmd.id);\n allCommands.push(...commands);\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n }\n }\n \n return allCommands;\n }\n\n async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n // Check cache first\n if (this.commandCache.has(commandId)) {\n return this.commandCache.get(commandId)!;\n }\n\n // Search through all packages\n for (const packageName of this.packageNames) {\n try {\n const manifest = await this.loadManifest(packageName);\n const command = manifest.find(cmd => cmd.id === commandId);\n \n if (command) {\n const [group, name] = commandId.split(':');\n const info: CommandInfo = {\n id: commandId,\n group: group || 'unknown',\n name: name || commandId,\n description: command.describe || `Execute ${commandId}`,\n available: true\n };\n \n this.commandCache.set(commandId, info);\n return info;\n }\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n }\n }\n\n return null;\n }\n\n async isCommandAvailable(commandId: string): Promise<boolean> {\n const info = await this.getCommandInfo(commandId);\n return info !== null;\n }\n\n private async loadManifest(packageName: string): Promise<any[]> {\n if (this.manifestCache.has(packageName)) {\n return this.manifestCache.get(packageName)!;\n }\n\n const manifest = await this.manifestLoader.loadManifest(packageName);\n this.manifestCache.set(packageName, manifest);\n return manifest;\n }\n}\n\n/**\n * Create a dynamic command discovery for KB Labs packages\n */\nexport function createKBLabsCommandDiscovery(): DynamicCommandDiscovery {\n const manifestLoader: ManifestLoader = {\n async loadManifest(packageName: string): Promise<any[]> {\n try {\n // Try to load from different possible locations\n const possiblePaths = [\n `@kb-labs/${packageName}/cli.manifest.js`,\n `@kb-labs/${packageName}/dist/cli.manifest.js`,\n `@kb-labs/${packageName}/src/cli.manifest.js`\n ];\n\n for (const path of possiblePaths) {\n try {\n const manifest = await import(path);\n if (manifest.commands && Array.isArray(manifest.commands)) {\n return manifest.commands;\n }\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error(`No manifest found for ${packageName}`);\n } catch (error) {\n console.warn(`Failed to load manifest for ${packageName}:`, error);\n return [];\n }\n }\n };\n\n const packageNames = [\n 'devlink-core',\n 'mind-cli', \n 'tox-cli',\n 'core-cli'\n ];\n\n return new DynamicCommandDiscovery(manifestLoader, packageNames);\n}\n","import path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { safeColors } from './colors';\nimport { formatSize, formatRelativeTime, safeKeyValue } from './format';\n\nexport interface ArtifactInfo {\n name: string;\n path: string;\n size?: number;\n modified?: Date;\n description: string;\n}\n\nexport interface ArtifactDisplayOptions {\n showSize?: boolean;\n showTime?: boolean;\n showDescription?: boolean;\n maxItems?: number;\n title?: string;\n groupBy?: 'none' | 'type' | 'time';\n}\n\n/**\n * Display artifacts information in CLI\n */\nexport function displayArtifacts(\n artifacts: ArtifactInfo[],\n options: ArtifactDisplayOptions = {},\n): string[] {\n const {\n showSize = true,\n showTime = true,\n showDescription = false,\n maxItems = 10,\n title = 'Generated Artifacts',\n groupBy = 'none'\n } = options;\n\n if (artifacts.length === 0) {\n return [];\n }\n\n // Sort and limit artifacts\n let sortedArtifacts = artifacts;\n \n if (groupBy === 'time') {\n sortedArtifacts = [...artifacts].sort(\n (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n );\n } else if (groupBy === 'type') {\n sortedArtifacts = [...artifacts].sort((a, b) => a.name.localeCompare(b.name));\n } else {\n sortedArtifacts = [...artifacts].sort(\n (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n );\n }\n\n sortedArtifacts = sortedArtifacts.slice(0, maxItems);\n\n const lines: string[] = [];\n\n if (title) {\n lines.push(safeColors.bold(title));\n }\n\n if (groupBy === 'type') {\n const grouped = sortedArtifacts.reduce((acc, artifact) => {\n const type = artifact.name.split(' ')[0] || 'Other';\n if (!acc[type]) {acc[type] = [];}\n acc[type]!.push(artifact);\n return acc;\n }, {} as Record<string, ArtifactInfo[]>);\n\n Object.entries(grouped).forEach(([type, items], index) => {\n if (index > 0 || title) {\n lines.push('');\n }\n lines.push(...safeKeyValue({ [type]: '' }, { pad: false }));\n items.forEach((artifact, artifactIndex) => {\n if (artifactIndex > 0) {\n lines.push('');\n }\n lines.push(...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription,\n indent: 2,\n }));\n });\n });\n return lines;\n }\n\n sortedArtifacts.forEach((artifact, index) => {\n if (index > 0) {\n lines.push('');\n }\n lines.push(...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription,\n indent: 0,\n }));\n });\n\n return lines;\n}\n\n/**\n * Format a single artifact line\n */\nfunction formatArtifactLines(\n artifact: ArtifactInfo,\n options: {\n showSize: boolean;\n showTime: boolean;\n showDescription: boolean;\n indent: number;\n },\n): string[] {\n const { showSize, showTime, showDescription, indent } = options;\n const relativePath = path.relative(process.cwd(), artifact.path);\n const lines: string[] = [];\n lines.push(\n ...safeKeyValue({ [artifact.name]: relativePath }, { pad: false, indent }),\n );\n if (showSize && artifact.size) {\n lines.push(\n ...safeKeyValue({ Size: formatSize(artifact.size) }, { pad: false, indent: indent + 2 }),\n );\n }\n\n if (showTime && artifact.modified) {\n lines.push(\n ...safeKeyValue({ Updated: formatRelativeTime(artifact.modified) }, { pad: false, indent: indent + 2 }),\n );\n }\n\n if (showDescription && artifact.description) {\n lines.push(\n ...safeKeyValue({ Note: artifact.description }, { pad: false, indent: indent + 2 }),\n );\n }\n\n return lines;\n}\n\n/**\n * Display a single artifact with full details\n */\nexport function displaySingleArtifact(artifact: ArtifactInfo, title?: string): string[] {\n const relativePath = path.relative(process.cwd(), artifact.path);\n const lines: string[] = [];\n \n if (title) {\n lines.push('');\n lines.push(safeColors.bold(title));\n }\n \n lines.push(` ${safeColors.bold(artifact.name)}: ${safeColors.info(relativePath)}`);\n \n if (artifact.size) {\n lines.push(` Size: ${formatSize(artifact.size)}`);\n }\n \n if (artifact.modified) {\n lines.push(` Modified: ${formatRelativeTime(artifact.modified)}`);\n }\n \n if (artifact.description) {\n lines.push(` Description: ${artifact.description}`);\n }\n \n return lines;\n}\n\n/**\n * Display artifacts in a compact format (for status-like displays)\n */\nexport function displayArtifactsCompact(\n artifacts: ArtifactInfo[],\n options: {\n maxItems?: number;\n showSize?: boolean;\n sortByTime?: boolean;\n showTime?: boolean;\n title?: string;\n } = {},\n): string[] {\n const {\n maxItems = 5,\n showSize = true,\n sortByTime = true,\n showTime = true,\n title = 'Artifacts',\n } = options;\n \n if (artifacts.length === 0) {\n return [];\n }\n\n const sortedArtifacts = (sortByTime\n ? [...artifacts].sort((a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0))\n : artifacts.slice()\n ).slice(0, maxItems);\n\n const lines: string[] = [];\n lines.push(safeColors.bold(title));\n\n sortedArtifacts.forEach((artifact, index) => {\n if (index > 0) {\n lines.push('');\n }\n lines.push(\n ...formatArtifactLines(artifact, {\n showSize,\n showTime,\n showDescription: false,\n indent: 0,\n }),\n );\n });\n\n return lines;\n}\n\n/**\n * Discover artifacts in a directory based on patterns\n * \n * @param baseDir - Base directory to search for artifacts\n * @param patterns - Array of artifact patterns to search for\n * @returns Array of discovered artifacts\n * \n * @example\n * ```typescript\n * const artifacts = await discoverArtifacts('.kb/mind', [\n * { name: 'Index', pattern: 'index.json', description: 'Main index' },\n * { name: 'API Index', pattern: 'api-index.json', description: 'API index' },\n * ]);\n * ```\n */\nexport async function discoverArtifacts(\n baseDir: string,\n patterns: Array<{ name: string; pattern: string; description?: string }>\n): Promise<ArtifactInfo[]> {\n const artifacts: ArtifactInfo[] = [];\n\n for (const artifact of patterns) {\n const artifactPath = path.join(baseDir, artifact.pattern);\n try {\n await fsp.access(artifactPath);\n const stats = await fsp.stat(artifactPath);\n artifacts.push({\n name: artifact.name,\n path: artifactPath,\n size: stats.size,\n modified: stats.mtime,\n description: artifact.description || ''\n });\n } catch {\n // Skip if file doesn't exist\n }\n }\n\n return artifacts;\n}\n","/**\n * Table formatting utilities for CLI output\n * Handles proper column alignment accounting for emoji/unicode width\n */\n\n/**\n * Calculate visual width of a string (accounting for emoji/wide chars and ANSI codes)\n * Simplified version - emoji count as 2 chars, ANSI codes are stripped\n */\nfunction visualWidth(str: string): number {\n const ansiRegex = /\\x1B\\[[0-9;]*[a-zA-Z]/g;\n const cleanStr = str.replace(ansiRegex, '');\n\n // Only count genuinely double-width characters: high-plane emoji (U+1F000+) and CJK blocks.\n // BMP symbols like ✓ ✗ ◆ ○ (dingbats, arrows, geometric shapes) are single-width in terminals.\n const doubleWidthRegex = /[\\u{1100}-\\u{115F}]|[\\u{2E80}-\\u{A4CF}]|[\\u{AC00}-\\u{D7AF}]|[\\u{F900}-\\u{FAFF}]|[\\u{FE10}-\\u{FE1F}]|[\\u{FE30}-\\u{FE4F}]|[\\u{FF01}-\\u{FF60}]|[\\u{FFE0}-\\u{FFE6}]|[\\u{1F000}-\\u{1FFFF}]/gu;\n const wideMatches = cleanStr.match(doubleWidthRegex);\n const wideCount = wideMatches ? wideMatches.length : 0;\n\n // Use codepoint count (not UTF-16 length) so surrogate-pair emoji count as 1 base + 1 extra = 2.\n return [...cleanStr].length + wideCount;\n}\n\n/**\n * Pad string to visual width (accounting for emoji)\n */\nfunction padVisual(str: string, width: number, padChar: string = ' '): string {\n const vWidth = visualWidth(str);\n const padding = Math.max(0, width - vWidth);\n return str + padChar.repeat(padding);\n}\n\nexport interface TableColumn {\n header: string;\n width?: number; // Auto-calculated if not provided\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface TableOptions {\n header?: boolean;\n separator?: string; // Character for separator line (e.g., '─')\n padding?: number; // Padding between columns\n}\n\n/**\n * Format data as a table with proper column alignment\n */\nexport function formatTable(\n columns: TableColumn[],\n rows: string[][],\n options: TableOptions = {}\n): string[] {\n const { header = true, separator = '─', padding = 1 } = options;\n \n // Calculate column widths\n const widths: number[] = columns.map((col, idx) => {\n if (col.width !== undefined) {\n return col.width;\n }\n \n // Calculate max width from header and all rows\n let maxWidth = visualWidth(col.header);\n for (const row of rows) {\n if (row[idx]) {\n maxWidth = Math.max(maxWidth, visualWidth(String(row[idx])));\n }\n }\n return maxWidth;\n });\n \n const lines: string[] = [];\n \n // Header\n if (header) {\n const headerCells = columns.map((col, idx) => {\n const cell = col.header;\n const width = widths[idx]!;\n return padVisual(cell, width);\n });\n lines.push(headerCells.join(' '.repeat(padding)));\n \n // Separator\n if (separator) {\n const separatorLine = widths.map(w => separator.repeat(w)).join(' '.repeat(padding));\n lines.push(separatorLine);\n }\n }\n \n // Rows\n for (const row of rows) {\n const cells = columns.map((col, idx) => {\n const cell = row[idx] !== undefined ? String(row[idx]) : '';\n const align = col.align || 'left';\n const width = widths[idx]!;\n \n if (align === 'right') {\n const vWidth = visualWidth(cell);\n const padding = Math.max(0, width - vWidth);\n return ' '.repeat(padding) + cell;\n } else if (align === 'center') {\n const vWidth = visualWidth(cell);\n const padding = Math.max(0, width - vWidth);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return ' '.repeat(leftPad) + cell + ' '.repeat(rightPad);\n } else {\n return padVisual(cell, width);\n }\n });\n lines.push(cells.join(' '.repeat(padding)));\n }\n \n return lines;\n}\n\n/**\n * Format simple key-value pairs as a table\n */\nexport function formatKeyValueTable(\n data: Record<string, string | number>,\n options: { keyWidth?: number; valueWidth?: number } = {}\n): string[] {\n const keys = Object.keys(data);\n if (keys.length === 0) {return [];}\n \n const keyWidth = options.keyWidth || Math.max(...keys.map(k => visualWidth(k)), 0);\n const valueWidth = options.valueWidth || Math.max(...Object.values(data).map(v => visualWidth(String(v))), 0);\n \n return keys.map(key => {\n const value = String(data[key]);\n return `${padVisual(key, keyWidth)} ${padVisual(value, valueWidth)}`;\n });\n}\n","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","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","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","import { box, keyValue, safeKeyValue, hasAnsi } from './format';\nimport { formatTiming } from './command-output';\nimport { safeColors, safeSymbols } from './colors';\nimport {\n displayArtifacts,\n type ArtifactInfo,\n type ArtifactDisplayOptions,\n} from './artifacts-display';\nimport { TimingTracker } from './timing-tracker';\n\n// Optional analytics types - using interface to avoid type resolution errors\n// when @kb-labs/analytics-sdk-node is not installed\ninterface AnalyticsRunScope {\n (options: { runId?: string; actor?: unknown; ctx?: Record<string, unknown> }, fn: (emit: AnalyticsEmit) => Promise<unknown>): Promise<unknown>;\n}\n\ninterface AnalyticsEmit {\n (event: Partial<{ type: string; payload: Record<string, unknown> }>): Promise<unknown>;\n}\n\nexport interface CommandPresenter {\n info(message: string): void;\n warn?(message: string): void;\n error(message: string): void;\n write(payload: string): void;\n json(payload: unknown): void;\n}\n\nexport interface CommandContext {\n cwd: string;\n presenter: CommandPresenter;\n}\n\nexport interface CommandExecutionResult {\n summary: Record<string, string | number>;\n artifacts?: ArtifactInfo[];\n artifactsOptions?: ArtifactDisplayOptions;\n timing?: number | Record<string, number>;\n diagnostics?: string[];\n warnings?: string[];\n errors?: string[];\n data?: Record<string, unknown>;\n}\n\nexport interface AnalyticsConfig {\n actor: string;\n started: string;\n finished: string;\n getPayload?: (flags: Record<string, unknown>, result?: CommandExecutionResult) => Record<string, unknown>;\n}\n\nexport interface CommandRunnerOptions {\n title: string;\n analytics?: AnalyticsConfig;\n execute: (ctx: CommandContext, flags: Record<string, unknown>, tracker: TimingTracker) => Promise<CommandExecutionResult>;\n}\n\nexport function createCommandRunner(options: CommandRunnerOptions) {\n return async (ctx: CommandContext, argv: string[], flags: Record<string, unknown>): Promise<number> => {\n const tracker = new TimingTracker();\n const jsonMode = flags.json === true;\n const quietMode = flags.quiet === true;\n let runScope: AnalyticsRunScope | null = null;\n if (options.analytics !== undefined) {\n try {\n // Dynamic import with type assertion to avoid TypeScript errors\n // @kb-labs/analytics-sdk-node is an optional dependency\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - optional dependency, types may not be available\n const analyticsModule = await import('@kb-labs/analytics-sdk-node') as {\n runScope?: AnalyticsRunScope;\n };\n if (analyticsModule.runScope) {\n runScope = analyticsModule.runScope;\n }\n } catch {\n // Analytics SDK not available, continue without it\n runScope = null;\n }\n }\n\n const execute = async (): Promise<number> => {\n tracker.checkpoint('start');\n try {\n const result = await options.execute(ctx, flags, tracker);\n tracker.checkpoint('complete');\n formatSuccessOutput(ctx, options.title, result, tracker.total(), {\n jsonMode,\n quietMode,\n });\n return 0;\n } catch (error) {\n tracker.checkpoint('error');\n const message = error instanceof Error ? error.message : String(error);\n formatErrorOutput(ctx, message, tracker.total(), {\n jsonMode,\n quietMode,\n });\n return 1;\n }\n };\n\n if (!runScope || !options.analytics) {\n return execute();\n }\n\n const totalStart = Date.now();\n const result = await runScope(\n {\n actor: options.analytics.actor as never,\n ctx: { workspace: ctx.cwd },\n },\n async (emit: AnalyticsEmit) => {\n await emit({\n type: options.analytics!.started,\n payload: options.analytics!.getPayload?.(flags) ?? {},\n });\n\n let exitCode = 0;\n try {\n exitCode = await execute();\n await emit({\n type: options.analytics!.finished,\n payload: {\n ...(options.analytics!.getPayload?.(flags) ?? {}),\n durationMs: Date.now() - totalStart,\n result: exitCode === 0 ? 'success' : 'error',\n },\n });\n } catch (error) {\n await emit({\n type: options.analytics!.finished,\n payload: {\n ...(options.analytics!.getPayload?.(flags) ?? {}),\n durationMs: Date.now() - totalStart,\n result: 'error',\n error: error instanceof Error ? error.message : String(error),\n },\n });\n throw error;\n }\n\n return exitCode;\n },\n );\n\n return result as number;\n };\n}\n\ninterface OutputFlags {\n jsonMode: boolean;\n quietMode: boolean;\n}\n\nfunction formatSuccessOutput(\n ctx: CommandContext,\n title: string,\n result: CommandExecutionResult,\n durationMs: number,\n flags: OutputFlags,\n): void {\n if (flags.jsonMode) {\n const payload: Record<string, unknown> = {\n ok: true,\n summary: result.summary,\n timing: result.timing ?? durationMs,\n diagnostics: result.diagnostics,\n warnings: result.warnings,\n errors: result.errors,\n };\n if (result.artifacts) {\n payload.artifacts = result.artifacts;\n }\n if (result.data) {\n Object.assign(payload, result.data);\n }\n ctx.presenter.json(payload);\n return;\n }\n\n if (flags.quietMode) {\n return;\n }\n\n const statusEntry = extractStatusEntry(result.summary);\n const summaryForDisplay: Record<string, string | number> = statusEntry\n ? { ...result.summary }\n : result.summary;\n\n if (statusEntry) {\n delete summaryForDisplay[statusEntry.key];\n }\n\n const lines: string[] = [];\n const summaryLines = keyValue(summaryForDisplay);\n if (summaryLines.length > 0) {\n lines.push(...summaryLines);\n }\n\n if (result.artifacts && result.artifacts.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(...displayArtifacts(result.artifacts, result.artifactsOptions));\n }\n\n const timing = result.timing ?? durationMs;\n if (typeof timing !== 'number') {\n const entries = Object.entries(timing);\n if (entries.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Timing'));\n for (const [label, value] of entries) {\n lines.push(...safeKeyValue({ [label]: formatTiming(value) }, { indent: 2, pad: false }));\n }\n }\n }\n\n if (result.diagnostics && result.diagnostics.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Diagnostics'));\n result.diagnostics.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (result.warnings && result.warnings.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Warnings'));\n result.warnings.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (result.errors && result.errors.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(safeColors.bold('Errors'));\n result.errors.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n }\n\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(formatStatusLine(statusEntry?.value, durationMs));\n\n ctx.presenter.write(box(title, lines));\n}\n\nfunction formatErrorOutput(\n ctx: CommandContext,\n errorMessage: string,\n durationMs: number,\n flags: OutputFlags,\n): void {\n if (flags.jsonMode) {\n ctx.presenter.json({\n ok: false,\n error: errorMessage,\n timing: durationMs,\n });\n return;\n }\n\n if (flags.quietMode) {\n return;\n }\n\n ctx.presenter.error(errorMessage);\n}\n\ninterface StatusEntry {\n key: string;\n value: string;\n}\n\nfunction extractStatusEntry(summary: Record<string, string | number>): StatusEntry | null {\n for (const [key, value] of Object.entries(summary)) {\n if (typeof value === 'string' && key.toLowerCase().includes('status')) {\n return { key, value };\n }\n }\n return null;\n}\n\nfunction formatStatusLine(statusValue: string | undefined, durationMs: number): string {\n const rawStatus = statusValue ?? 'Done';\n const normalized = rawStatus.toLowerCase();\n\n let symbol = safeSymbols.success;\n let colorize = safeColors.success;\n\n if (normalized.includes('error') || normalized.includes('fail')) {\n symbol = safeSymbols.error;\n colorize = safeColors.error;\n } else if (normalized.includes('partial') || normalized.includes('warn')) {\n symbol = safeSymbols.warning;\n colorize = safeColors.warning;\n }\n\n const statusText = hasAnsi(rawStatus) ? rawStatus : colorize(rawStatus);\n return `${symbol} ${statusText} · ${safeColors.muted(formatTiming(durationMs))}`;\n}\n\n","/**\n * Flag system for declarative CLI flag definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myFlags = defineFlags({\n * scope: { type: 'string', description: 'Filter by scope' },\n * verbose: { type: 'boolean', default: false },\n * });\n *\n * // In command\n * export default defineCommand({\n * flags: myFlags,\n * handler: {\n * async execute(ctx, input: typeof myFlags.type) {\n * const { scope, verbose } = input;\n * }\n * }\n * });\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type FlagType = 'string' | 'boolean' | 'number';\n\nexport interface BaseFlagSpec<T extends FlagType> {\n type: T;\n description?: string;\n examples?: string[];\n deprecated?: boolean | string;\n}\n\nexport interface StringFlagSpec extends BaseFlagSpec<'string'> {\n default?: string;\n validate?: (value: string) => void | Promise<void>;\n}\n\nexport interface BooleanFlagSpec extends BaseFlagSpec<'boolean'> {\n default?: boolean;\n}\n\nexport interface NumberFlagSpec extends BaseFlagSpec<'number'> {\n default?: number;\n validate?: (value: number) => void | Promise<void>;\n}\n\nexport type FlagSpec = StringFlagSpec | BooleanFlagSpec | NumberFlagSpec;\n\nexport type FlagsSchema = Record<string, FlagSpec>;\n\n// ============================================================================\n// Type inference\n// ============================================================================\n\ntype InferFlagType<T extends FlagSpec> =\n T extends StringFlagSpec\n ? T extends { default: string } ? string : string | undefined\n : T extends BooleanFlagSpec\n ? T extends { default: boolean } ? boolean : boolean | undefined\n : T extends NumberFlagSpec\n ? T extends { default: number } ? number : number | undefined\n : never;\n\nexport type InferFlagsType<T extends FlagsSchema> = {\n [K in keyof T]: InferFlagType<T[K]>;\n};\n\n// ============================================================================\n// defineFlags - main API\n// ============================================================================\n\nexport interface FlagsDefinition<T extends FlagsSchema> {\n /** Schema for manifest */\n schema: T;\n /** Inferred TypeScript type */\n type: InferFlagsType<T>;\n /** Parse and validate flags from raw input */\n parse: (input: unknown) => InferFlagsType<T>;\n}\n\n/**\n * Define CLI flags with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitFlags = defineFlags({\n * scope: {\n * type: 'string',\n * description: 'Limit to package or path',\n * examples: ['@kb-labs/core', 'packages/**'],\n * },\n * 'dry-run': {\n * type: 'boolean',\n * description: 'Preview without applying',\n * default: false,\n * },\n * });\n *\n * // Use in command\n * type MyInput = typeof commitFlags.type;\n * // Result: { scope?: string; 'dry-run': boolean }\n * ```\n */\nexport function defineFlags<T extends FlagsSchema>(schema: T): FlagsDefinition<T> {\n return {\n schema,\n type: {} as InferFlagsType<T>,\n parse: (input: unknown) => parseFlagsFromInput(input, schema),\n };\n}\n\n// ============================================================================\n// Runtime parsing and validation\n// ============================================================================\n\n/**\n * Parse flags from raw input with type validation and defaults\n */\nexport function parseFlagsFromInput<T extends FlagsSchema>(\n input: unknown,\n schema: T\n): InferFlagsType<T> {\n const result: Record<string, string | boolean | number | undefined> = {};\n const rawInput = input as Record<string, unknown>;\n\n for (const [key, spec] of Object.entries(schema)) {\n const value = rawInput?.[key];\n\n // Apply default if value is undefined\n if (value === undefined) {\n if ('default' in spec) {\n result[key] = spec.default;\n }\n continue;\n }\n\n // Type validation and coercion\n switch (spec.type) {\n case 'boolean':\n result[key] = parseBoolean(value, key);\n break;\n case 'string':\n result[key] = parseString(value, key);\n // Custom validation for string\n if (spec.validate && result[key] !== undefined) {\n spec.validate(result[key]);\n }\n break;\n case 'number':\n result[key] = parseNumber(value, key);\n // Custom validation for number\n if (spec.validate && result[key] !== undefined) {\n spec.validate(result[key]);\n }\n break;\n }\n }\n\n return result as unknown as InferFlagsType<T>;\n}\n\n// ============================================================================\n// Type parsers (exported for reuse in env.ts)\n// ============================================================================\n\nexport function parseBoolean(value: unknown, flagName: string): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === '1' || lower === 'yes') {return true;}\n if (lower === 'false' || lower === '0' || lower === 'no') {return false;}\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be boolean, got ${typeof value}. ` +\n `Use true/false or 1/0 or yes/no.`\n );\n}\n\nexport function parseString(value: unknown, flagName: string): string {\n if (typeof value === 'string') {\n return value;\n }\n\n // Coerce number to string\n if (typeof value === 'number') {\n return String(value);\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be string, got ${typeof value}.`\n );\n}\n\nexport function parseNumber(value: unknown, flagName: string): number {\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Flag \"${flagName}\" must be finite number, got ${value}.`);\n }\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n throw new Error(\n `Flag \"${flagName}\" must be number, got invalid string \"${value}\".`\n );\n }\n return parsed;\n }\n\n throw new Error(\n `Flag \"${flagName}\" must be number, got ${typeof value}.`\n );\n}\n\n// ============================================================================\n// Legacy helper (keep for backward compatibility)\n// ============================================================================\n\nexport function parseNumberFlag(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n\n const parsed = Number(trimmed);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n return undefined;\n}\n\n// ============================================================================\n// Utility: Merge input.flags into input (for V3 compatibility)\n// ============================================================================\n\n/**\n * Merge input.flags into input root (V3 compatibility helper)\n *\n * @example\n * ```typescript\n * const raw = { scope: 'old', flags: { scope: 'new', json: true } };\n * const merged = mergeFlags(raw);\n * // Result: { scope: 'new', json: true, flags: {...} }\n * ```\n */\nexport function mergeFlags<T extends Record<string, unknown>>(input: T): T {\n if (!input.flags || typeof input.flags !== 'object') {\n return input;\n }\n\n // Merge: root values first, then flags override\n return { ...input, ...input.flags };\n}\n","/**\n * Environment variable system for declarative env definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myEnv = defineEnv({\n * MY_API_KEY: { type: 'string', description: 'API key for service' },\n * MY_ENABLED: { type: 'boolean', default: true },\n * MY_TIMEOUT: { type: 'number', default: 5000 },\n * });\n *\n * // In command\n * export default defineCommand({\n * handler: {\n * async execute(ctx, input) {\n * const env = myEnv.parse(ctx.runtime);\n * console.log(env.MY_API_KEY); // string | undefined\n * console.log(env.MY_ENABLED); // boolean\n * }\n * }\n * });\n * ```\n */\n\nimport {\n type FlagSpec,\n type FlagsSchema,\n type InferFlagsType,\n parseBoolean,\n parseString,\n parseNumber,\n} from './flags.js';\n\n/**\n * Runtime API interface (minimal for env parsing)\n * Avoids dependency on @kb-labs/plugin-contracts\n */\nexport interface RuntimeLike {\n env(key: string): string | undefined;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Environment variable schema (reuses FlagSpec types)\n */\nexport type EnvSchema = FlagsSchema;\n\n/**\n * Environment variable definition with parse method\n */\nexport interface EnvDefinition<T extends EnvSchema> {\n /** Schema for documentation and validation */\n schema: T;\n /** Inferred TypeScript type */\n type: InferFlagsType<T>;\n /** Parse environment variables from RuntimeLike */\n parse: (runtime: RuntimeLike) => InferFlagsType<T>;\n}\n\n// ============================================================================\n// defineEnv - main API\n// ============================================================================\n\n/**\n * Define environment variables with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitEnv = defineEnv({\n * KB_COMMIT_LLM_ENABLED: {\n * type: 'boolean',\n * default: true,\n * description: 'Enable LLM analysis',\n * },\n * KB_COMMIT_LLM_TEMPERATURE: {\n * type: 'number',\n * default: 0.3,\n * description: 'LLM temperature (0-1)',\n * validate: (v) => {\n * if (v < 0 || v > 1) throw new Error('Must be 0-1');\n * },\n * },\n * });\n *\n * // Use in command\n * const env = commitEnv.parse(ctx.runtime);\n * // Type: { KB_COMMIT_LLM_ENABLED: boolean; KB_COMMIT_LLM_TEMPERATURE: number }\n * ```\n */\nexport function defineEnv<T extends EnvSchema>(schema: T): EnvDefinition<T> {\n return {\n schema,\n type: {} as InferFlagsType<T>,\n parse: (runtime: RuntimeLike) => parseEnvFromRuntime(runtime, schema),\n };\n}\n\n// ============================================================================\n// Runtime parsing\n// ============================================================================\n\n/**\n * Parse environment variables from RuntimeLike with validation and defaults\n */\nexport function parseEnvFromRuntime<T extends EnvSchema>(\n runtime: RuntimeLike,\n schema: T\n): InferFlagsType<T> {\n const result: Record<string, unknown> = {};\n\n for (const [key, spec] of Object.entries(schema)) {\n const rawValue = runtime.env(key);\n\n // Apply default if undefined\n if (rawValue === undefined) {\n if ('default' in spec) {\n result[key] = spec.default;\n }\n continue;\n }\n\n // Parse based on type (reuse parsers from flags)\n result[key] = parseEnvValue(rawValue, key, spec);\n }\n\n return result as unknown as InferFlagsType<T>;\n}\n\n/**\n * Parse single env value with type validation\n */\nfunction parseEnvValue(value: string | undefined, key: string, spec: FlagSpec): string | boolean | number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n switch (spec.type) {\n case 'boolean':\n return parseBoolean(value, key);\n\n case 'string':\n const strValue = parseString(value, key);\n // Custom validation for string\n if (spec.validate) {\n spec.validate(strValue);\n }\n return strValue;\n\n case 'number':\n const numValue = parseNumber(value, key);\n // Custom validation for number\n if (spec.validate) {\n spec.validate(numValue);\n }\n return numValue;\n\n default:\n return value;\n }\n}\n","/**\n * Resolve the current working directory from a CLI context-like object.\n * Falls back to the process cwd when the context does not provide one.\n */\nexport function getContextCwd(input: { cwd?: string } | undefined): string {\n if (input && typeof input.cwd === \"string\" && input.cwd.length > 0) {\n return input.cwd;\n }\n return process.cwd();\n}\n\n\n","/**\n * Normalize filesystem paths to POSIX (forward-slash) form.\n */\nexport function toPosixPath(input: string): string {\n return input.replace(/\\\\/g, \"/\");\n}\n\n\n","export interface RetryOptions {\n attempts?: number;\n delay?: number;\n backoff?: 'fixed' | 'exponential';\n onRetry?: (error: unknown, attempt: number) => void;\n}\n\nasync function sleepForRetry(\n attempt: number,\n delay: number,\n backoff: 'fixed' | 'exponential',\n): Promise<void> {\n if (delay <= 0) { return; }\n const wait = backoff === 'exponential' ? delay * 2 ** (attempt - 1) : delay;\n await new Promise<void>((resolve) => { setTimeout(resolve, wait); });\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n if (typeof fn !== 'function') {\n throw new TypeError('fn must be a function');\n }\n\n const { attempts = 3, delay = 0, backoff = 'fixed', onRetry } = options;\n\n if (attempts < 1) {\n throw new RangeError(`attempts must be >= 1, got ${attempts}`);\n }\n if (delay < 0) {\n throw new RangeError(`delay must be >= 0, got ${delay}`);\n }\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n if (attempt < attempts) {\n onRetry?.(err, attempt);\n await sleepForRetry(attempt, delay, backoff);\n }\n }\n }\n\n throw lastError;\n}\n","interface ErrorContext {\n ui?: {\n json?: (data: unknown) => void;\n error?: (message: string, opts?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * Structured validation error — emits { ok: false, error: { code: 'INVALID_ARGS', ... } } in JSON mode.\n * Call before try/catch, right before `return { exitCode: 1 }`.\n */\nexport function validationError(\n ctx: ErrorContext,\n message: string,\n hint?: string,\n isJson?: boolean,\n): void {\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: 'INVALID_ARGS', message, ...(hint && { hint }) } });\n } else {\n ctx.ui?.error?.(message, { ...(hint && { hint }) });\n }\n}\n\n/**\n * Structured runtime/API error — emits { ok: false, error: { code: 'INTERNAL_ERROR', ... } } in JSON mode.\n * Call in catch blocks, right before `return { exitCode: 1 }`.\n */\nexport function handleError(ctx: ErrorContext, err: unknown, isJson?: boolean): void {\n const message = err instanceof Error ? err.message : String(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: 'INTERNAL_ERROR', message } });\n } else {\n ctx.ui?.error?.(message);\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * Envelope middleware reads `err.statusCode` to set HTTP status.\n * If err already has statusCode — preserves it. Otherwise → 500.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err !== null && typeof err === 'object' && 'statusCode' in err) {\n throw err;\n }\n const message = err instanceof Error ? err.message : String(err);\n throw Object.assign(new Error(message), {\n statusCode: 500,\n code: 'INTERNAL_ERROR',\n });\n}\n","import type { CommandFailure } from '@kb-labs/plugin-contracts';\n\n/**\n * Destructive-action protocol (SOFT layer).\n *\n * A single, platform-wide way for a command to declare that an operation is\n * destructive — how bad, how broad, and whether it can be undone — and to gate\n * it behind explicit confirmation in EVERY mode (human and agent).\n *\n * This layer is intentionally SOFT: it informs and asks, it does not enforce.\n * Physical enforcement (can-this-token-even-invoke-this) is the platform's\n * future token/permission layer; it reads the SAME `severity`/`destructive`\n * declaration on the command. So one declaration drives both:\n * - now: this helper renders a clear signal + requires `--yes`;\n * - later: the permission layer filters discovery + blocks invocation by right.\n *\n * Declaring it is OPTIONAL for external plugins (commands work without it) but\n * strongly recommended — agents can only reason about blast radius they're told.\n */\n\nexport type DestructiveSeverity = 'low' | 'medium' | 'high' | 'critical';\n\n/**\n * Severity rubric — worst-case blast radius weighed against recovery cost\n * (keep consistent across plugins so agents can calibrate):\n * - low narrow scope AND trivially auto-rebuilt from source (idempotent)\n * - medium a bounded set is lost; rebuildable, but with effort/recompute\n * - high a WHOLE collection is destroyed (entire index/corpus), OR recovery\n * is slow / manual — even if rebuildable, the loss is large and\n * easy to mis-target\n * - critical irreversible, NO recovery (prod data, tenant wipe)\n */\nexport interface DestructiveAction {\n /** Command identity, e.g. \"mind drop\". */\n action: string;\n /** What is affected, e.g. 'index \"code\"'. */\n resource: string;\n /** Plain-language effect, e.g. \"deletes all vectors + the manifest\". */\n effect: string;\n /** Blast-radius tier. */\n severity: DestructiveSeverity;\n /** Whether the data can be recovered afterwards. */\n reversible: boolean;\n /** How to recover, if reversible (e.g. \"re-run `kb mind index --full`\"). */\n recovery?: string;\n /** Quantified scope — how much, of what, how broad. */\n blastRadius?: { count?: number; unit?: string; scope?: string };\n /** Flag that confirms the action (default `--yes`). */\n confirmFlag?: string;\n}\n\n/** The machine-readable signal an agent receives when confirmation is missing. */\nexport interface ConfirmationRequired {\n ok: false;\n confirmationRequired: true;\n destructive: true;\n irreversible: boolean;\n severity: DestructiveSeverity;\n action: string;\n resource: string;\n effect: string;\n reversible: boolean;\n blastRadius?: { count?: number; unit?: string; scope?: string };\n recovery?: string;\n confirmWith: string;\n message: string;\n}\n\ninterface ConfirmContext {\n ui?: {\n json?: (data: unknown) => void;\n warn?: (message: string, opts?: Record<string, unknown>) => void;\n error?: (message: string, opts?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * Build the machine-readable signal an agent receives when confirmation is\n * missing in json mode. Exported so a non-CLI surface (REST 409, MCP) can reuse\n * the exact shape instead of re-deriving it.\n */\nexport function buildConfirmationSignal(a: DestructiveAction): ConfirmationRequired {\n return {\n ok: false,\n confirmationRequired: true,\n destructive: true,\n irreversible: !a.reversible,\n severity: a.severity,\n action: a.action,\n resource: a.resource,\n effect: a.effect,\n reversible: a.reversible,\n ...(a.blastRadius && { blastRadius: a.blastRadius }),\n ...(a.recovery && { recovery: a.recovery }),\n confirmWith: a.confirmFlag ?? '--yes',\n message: renderDestructiveMessage(a),\n };\n}\n\n/** Render the one-line warning — leads with the scary part (irreversibility + severity). */\nexport function renderDestructiveMessage(a: DestructiveAction): string {\n const flag = a.confirmFlag ?? '--yes';\n const br = a.blastRadius;\n const blast = br\n ? ` (${[br.count != null ? `${br.count} ${br.unit ?? 'item(s)'}` : '', br.scope].filter(Boolean).join(' · ')})`\n : '';\n const lead = a.reversible ? `[${a.severity}]` : `⚠ IRREVERSIBLE [${a.severity}]`;\n const rec = a.recovery\n ? ` Recovery: ${a.recovery}.`\n : a.reversible\n ? ''\n : ' No recovery — data is permanently lost.';\n return `${lead} ${a.action} — ${a.effect} on ${a.resource}${blast}.${rec} Confirm with ${flag}.`;\n}\n\n/**\n * Gate a destructive command. Returns the command result to return immediately\n * when NOT confirmed (in every mode — agents get the structured signal, not a\n * silent execution), or `null` when confirmed so the caller proceeds.\n *\n * const blocked = confirmDestructive(ctx, { confirmed: flags.yes, isJson, action });\n * if (blocked) return blocked;\n */\nexport function confirmDestructive(\n ctx: ConfirmContext,\n opts: { confirmed: boolean; isJson?: boolean; action: DestructiveAction },\n): CommandFailure | null {\n if (opts.confirmed) {\n return null;\n }\n const a = opts.action;\n const signal = buildConfirmationSignal(a);\n if (opts.isJson) {\n // Machine-readable signal — `ctx.ui.json` emits one parseable line by\n // default (the agent extracts it with `grep \"^{\"`).\n ctx.ui?.json?.(signal);\n } else {\n (ctx.ui?.warn ?? ctx.ui?.error)?.(renderDestructiveMessage(a));\n }\n return {\n ok: false,\n error: {\n code: 'CONFIRMATION_REQUIRED',\n kind: 'validation',\n message: signal.message,\n details: { ...signal },\n },\n result: signal,\n };\n}\n","/**\n * Modern CLI formatting utilities with side border design\n * Provides minimalist, modern UI components for CLI output\n */\n\nimport { safeColors, safeSymbols } from './colors';\nimport { stripAnsi, bulletList as baseBulletList } from './format';\nimport { formatTiming as baseFormatTiming } from './command-output';\n\n/**\n * Side border box - Clack-style design\n *\n * @example\n * ```\n * ◆ Command Name\n * │\n * │ Section Header\n * │ Key: value\n * │\n * └ ✓ Success 84ms\n * ```\n */\nexport interface SideBorderBoxOptions {\n title: string;\n sections: SectionContent[];\n footer?: string;\n status?: 'success' | 'error' | 'warning' | 'info';\n timing?: number;\n summary?: Record<string, string | number | boolean>;\n}\n\nexport interface RichSectionItem {\n text: string;\n /** Render text in muted/dim color */\n dim?: boolean;\n /** Hard-truncate to N visible chars instead of wrapping */\n truncate?: number;\n}\n\n/** A section item — either a plain string or a rich descriptor */\nexport type SectionItem = string | RichSectionItem;\n\nexport interface SectionContent {\n header?: string;\n items: SectionItem[];\n}\n\n/**\n * Create a side-bordered box with modern design\n */\nexport function sideBorderBox(options: SideBorderBoxOptions): string {\n const { title, sections, footer, status, timing, summary } = options;\n const lines: string[] = [];\n\n const terminalWidth =\n typeof process !== 'undefined' && process.stdout?.columns\n ? process.stdout.columns\n : 80;\n // Available width for item content: terminalWidth minus \"│ \" prefix (3) and 1 right margin\n const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n // Title line: ◆ Title\n const titleLine = `${safeColors.primary('◆')} ${safeColors.bold(title)}`;\n lines.push(titleLine);\n lines.push(safeColors.muted('│'));\n\n // Summary key-value pairs rendered before sections\n if (summary && Object.keys(summary).length > 0) {\n const entries = Object.entries(summary).map(([k, v]) => [k, String(v)] as [string, string]);\n const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n const metricsLines = metricsList(metricsRecord);\n for (const line of metricsLines) {\n lines.push(`${safeColors.muted('│')} ${line}`);\n }\n if (sections.length > 0) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Sections\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {continue;}\n\n // Section header (optional)\n if (section.header) {\n lines.push(`${safeColors.muted('│')} ${safeColors.bold(section.header)}`);\n }\n\n // Section items — word-wrapped and multiline-safe\n for (const rawItem of section.items) {\n const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n let displayLines: string[];\n\n if (item.truncate !== undefined) {\n const vis = stripAnsi(item.text);\n const truncated = vis.length > item.truncate\n ? ansiSlice(item.text, item.truncate - 1) + '…'\n : item.text;\n displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n } else {\n const wrapped = wrapText(item.text, itemMaxWidth);\n displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n }\n\n for (const dl of displayLines) {\n lines.push(`${safeColors.muted('│')} ${dl}`);\n }\n }\n\n // Add spacing between sections (but not after the last one)\n if (i < sections.length - 1) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Bottom line: └ ✓ Success 84ms\n if (footer || status || timing !== undefined) {\n if (lines[lines.length - 1] !== safeColors.muted('│')) {\n lines.push(safeColors.muted('│'));\n }\n const footerParts: string[] = [];\n\n if (footer) {\n footerParts.push(footer);\n } else if (status) {\n const statusSymbol = getStatusSymbol(status);\n const statusColor = getStatusColor(status);\n footerParts.push(statusColor(`${statusSymbol}`));\n }\n\n if (timing !== undefined) {\n footerParts.push(safeColors.muted(formatTiming(timing)));\n }\n\n const footerLine = `${safeColors.muted('└')} ${footerParts.join(' ')}`;\n lines.push(footerLine);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format a section header\n */\nexport function sectionHeader(text: string): string {\n return safeColors.bold(text);\n}\n\n/**\n * Format metrics list (key: value pairs with aligned values)\n */\nexport function metricsList(metrics: Record<string, string | number>): string[] {\n const entries = Object.entries(metrics);\n if (entries.length === 0) {return [];}\n\n // Find max key length for alignment\n const maxKeyLength = Math.max(\n ...entries.map(([key]) => stripAnsi(key).length)\n );\n\n return entries.map(([key, value]) => {\n const keyLength = stripAnsi(key).length;\n const padding = ' '.repeat(maxKeyLength - keyLength + 2);\n const formattedKey = safeColors.bold(key);\n const formattedValue = safeColors.muted(String(value));\n return `${formattedKey}:${padding}${formattedValue}`;\n });\n}\n\n/**\n * Format a bullet list (re-exported from base utilities)\n */\nexport const bulletList = baseBulletList;\n\n/**\n * Format timing (re-exported from command-output)\n */\nexport const formatTiming = baseFormatTiming;\n\n/**\n * Format status line for footer\n */\nexport function statusLine(\n status: 'success' | 'error' | 'warning' | 'info',\n timing?: number\n): string {\n const symbol = getStatusSymbol(status);\n const color = getStatusColor(status);\n\n const parts = [color(symbol)];\n\n if (timing !== undefined) {\n parts.push(safeColors.muted(formatTiming(timing)));\n }\n\n return parts.join(' ');\n}\n\n// Helper functions\n\n/**\n * Slice a string to maxVisible visible characters, preserving ANSI escape codes.\n */\nfunction ansiSlice(str: string, maxVisible: number): string {\n let visible = 0;\n let i = 0;\n let result = '';\n while (i < str.length) {\n if (str[i] === '\\x1b' && str[i + 1] === '[') {\n let j = i + 2;\n while (j < str.length && !/[A-Za-z]/.test(str[j]!)) { j++; }\n result += str.slice(i, j + 1);\n i = j + 1;\n } else {\n if (visible >= maxVisible) { break; }\n result += str[i];\n visible++;\n i++;\n }\n }\n return result;\n}\n\nfunction getStatusSymbol(status: 'success' | 'error' | 'warning' | 'info'): string {\n switch (status) {\n case 'success':\n return safeSymbols.success;\n case 'error':\n return safeSymbols.error;\n case 'warning':\n return safeSymbols.warning;\n case 'info':\n return safeSymbols.info;\n }\n}\n\nfunction getStatusColor(status: 'success' | 'error' | 'warning' | 'info'): (text: string) => string {\n switch (status) {\n case 'success':\n return safeColors.success;\n case 'error':\n return safeColors.error;\n case 'warning':\n return safeColors.warning;\n case 'info':\n return safeColors.info;\n }\n}\n\n/**\n * Word-wrap plain text to maxWidth visible characters.\n * Handles existing newlines and long words (hard-truncated with ellipsis).\n */\nfunction wrapText(text: string, maxWidth: number): string[] {\n const result: string[] = [];\n const rawLines = text.split('\\n');\n for (const rawLine of rawLines) {\n const line = rawLine.trimEnd();\n if (stripAnsi(line).length <= maxWidth) {\n result.push(line);\n continue;\n }\n const words = line.split(/(\\s+)/);\n let current = '';\n for (const word of words) {\n const test = current + word;\n if (stripAnsi(test).length <= maxWidth) {\n current = test;\n } else {\n if (current.trimEnd()) {result.push(current.trimEnd());}\n const wordLen = stripAnsi(word).length;\n if (wordLen > maxWidth) {\n // Hard-truncate a single oversized word\n result.push(stripAnsi(word).slice(0, maxWidth - 1) + '…');\n current = '';\n } else {\n current = word;\n }\n }\n }\n if (current.trimEnd()) {result.push(current.trimEnd());}\n }\n return result.length > 0 ? result : [''];\n}\n\n/**\n * A single block in a chained output — a title + sections with optional footer on the last block.\n */\nexport interface SideBorderChainItem {\n title: string;\n sections: SectionContent[];\n summary?: Record<string, string | number | boolean>;\n status?: 'success' | 'error' | 'warning' | 'info';\n timing?: number;\n}\n\n/**\n * Render multiple side-border blocks as a continuous visual chain.\n *\n * Every block opens with `◆ Title` on the shared rail.\n * Only the last block gets `└ status timing`.\n *\n * @example\n * ```\n * ◆ workflow metrics\n * │\n * │ Failed to fetch metrics\n * │\n * ◆ Warning\n * │\n * │ Make sure daemon is running\n * │\n * └ ✗ 12ms\n * ```\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function sideBorderChain(items: SideBorderChainItem[]): string {\n if (items.length === 0) { return ''; }\n if (items.length === 1) {\n const item = items[0]!;\n return sideBorderBox({ title: item.title, sections: item.sections, status: item.status, timing: item.timing });\n }\n\n const lines: string[] = [];\n const terminalWidth =\n typeof process !== 'undefined' && process.stdout?.columns\n ? process.stdout.columns\n : 80;\n const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n for (let blockIdx = 0; blockIdx < items.length; blockIdx++) {\n const block = items[blockIdx]!;\n const isLast = blockIdx === items.length - 1;\n\n // Block header: ◆ Title\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(block.title)}`);\n lines.push(safeColors.muted('│'));\n\n // Summary key-value pairs\n if (block.summary && Object.keys(block.summary).length > 0) {\n const entries = Object.entries(block.summary).map(([k, v]) => [k, String(v)] as [string, string]);\n const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n const metricsLines = metricsList(metricsRecord);\n for (const line of metricsLines) {\n lines.push(`${safeColors.muted('│')} ${line}`);\n }\n if (block.sections.length > 0) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n // Sections\n for (let i = 0; i < block.sections.length; i++) {\n const section = block.sections[i];\n if (!section) { continue; }\n\n if (section.header) {\n lines.push(`${safeColors.muted('│')} ${safeColors.bold(section.header)}`);\n }\n\n for (const rawItem of section.items) {\n const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n let displayLines: string[];\n\n if (item.truncate !== undefined) {\n const vis = stripAnsi(item.text);\n const truncated = vis.length > item.truncate\n ? ansiSlice(item.text, item.truncate - 1) + '…'\n : item.text;\n displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n } else {\n const wrapped = wrapText(item.text, itemMaxWidth);\n displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n }\n\n for (const dl of displayLines) {\n lines.push(`${safeColors.muted('│')} ${dl}`);\n }\n }\n\n if (i < block.sections.length - 1) {\n lines.push(safeColors.muted('│'));\n }\n }\n\n if (isLast) {\n if (block.status || block.timing !== undefined) {\n lines.push(safeColors.muted('│'));\n const footerParts: string[] = [];\n if (block.status) {\n footerParts.push(getStatusColor(block.status)(getStatusSymbol(block.status)));\n }\n if (block.timing !== undefined) {\n footerParts.push(safeColors.muted(formatTiming(block.timing)));\n }\n lines.push(`${safeColors.muted('└')} ${footerParts.join(' ')}`);\n }\n } else {\n // Blank rail line before next ◆ — only if not already there\n if (lines[lines.length - 1] !== safeColors.muted('│')) {\n lines.push(safeColors.muted('│'));\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert an Error or raw string into clean display lines for sideBorderBox items.\n * Splits on newlines, removes blank lines, and caps at maxLines with a \"… N more\" hint.\n *\n * @example\n * items: formatError(err, { maxLines: 6 })\n */\nexport function formatError(err: Error | string, opts?: { maxLines?: number }): string[] {\n const raw = err instanceof Error ? err.message : String(err);\n const allLines = raw.split('\\n').map(l => l.trimEnd()).filter(l => l.length > 0);\n const max = opts?.maxLines ?? 8;\n if (allLines.length <= max) {return allLines;}\n const shown = allLines.slice(0, max - 1);\n shown.push(safeColors.muted(`… ${allLines.length - max + 1} more lines`));\n return shown;\n}\n\n/**\n * Format command help in modern side-border style\n *\n * @example\n * ```typescript\n * const help = formatCommandHelp({\n * title: 'kb version',\n * description: 'Show CLI version',\n * longDescription: 'Displays the current version...',\n * examples: ['kb version', 'kb version --json'],\n * flags: [{name: 'json', description: 'Output in JSON'}]\n * });\n * ```\n */\nexport function formatCommandHelp(options: {\n title: string;\n description?: string;\n longDescription?: string;\n examples?: string[];\n flags?: Array<{ name: string; alias?: string; description?: string; required?: boolean }>;\n aliases?: string[];\n}): string {\n const { title, description, longDescription, examples, flags, aliases } = options;\n const sections: SectionContent[] = [];\n\n // Description section\n if (description) {\n sections.push({\n header: 'Description',\n items: [description],\n });\n }\n\n // Long description\n if (longDescription) {\n sections.push({\n header: 'Details',\n items: [longDescription],\n });\n }\n\n // Aliases\n if (aliases && aliases.length > 0) {\n sections.push({\n header: 'Aliases',\n items: aliases.map(a => safeColors.muted(a)),\n });\n }\n\n // Flags\n if (flags && flags.length > 0) {\n const flagItems = flags.map(flag => {\n const label = flag.alias\n ? `--${flag.name}, -${flag.alias}`\n : `--${flag.name}`;\n const required = flag.required ? safeColors.warning(' (required)') : '';\n const desc = flag.description ? safeColors.muted(` — ${flag.description}`) : '';\n return `${safeColors.bold(label)}${required}${desc}`;\n });\n sections.push({\n header: 'Flags',\n items: flagItems,\n });\n }\n\n // Examples\n if (examples && examples.length > 0) {\n sections.push({\n header: 'Examples',\n items: examples.map(ex => safeColors.muted(` ${ex}`)),\n });\n }\n\n return sideBorderBox({\n title,\n sections,\n status: 'info',\n });\n}\n","/**\n * Command result formatting utilities\n * Provides high and low-level APIs for formatting command output\n */\n\nimport {\n sideBorderBox,\n metricsList,\n bulletList,\n type SectionContent,\n} from './modern-format';\n\n/**\n * Command output with human and machine-readable formats\n * Extends CommandResult contract from command-kit\n */\nexport interface CommandOutput {\n /** Whether command executed successfully - required by CommandResult contract */\n ok: boolean;\n /** Execution status */\n status?: 'success' | 'error' | 'warning' | 'info' | 'failed' | 'cancelled' | 'skipped';\n /** Human-readable output (side border format) */\n human: string;\n /** Machine-readable output (JSON) */\n json: object;\n /** Agent-specific output (optional, for --agent flag) */\n agent?: object;\n}\n\n/**\n * Parameters for formatting command results\n */\nexport interface CommandResultParams {\n title: string;\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n warnings?: string[];\n errors?: string[];\n timing?: number;\n status: 'success' | 'error' | 'warning' | 'info';\n /** Custom JSON data (optional) */\n jsonData?: object;\n}\n\n/**\n * Low-level: Format command result with full control\n *\n * @example\n * ```typescript\n * const output = formatCommandResult({\n * title: 'System Diagnostics',\n * summary: { 'Total Checks': 4, 'OK': 3 },\n * details: [\n * { section: 'Environment', items: ['Node 20.11.0'] }\n * ],\n * warnings: ['Cache is old'],\n * timing: 150,\n * status: 'success',\n * });\n *\n * console.log(output.human); // Pretty CLI output\n * console.log(output.json); // JSON for --json flag\n * ```\n */\nexport function formatCommandResult(params: CommandResultParams): CommandOutput {\n const {\n title,\n summary,\n details = [],\n warnings = [],\n errors = [],\n timing,\n status,\n jsonData,\n } = params;\n\n // Build sections for human output\n const sections: SectionContent[] = [];\n\n // Summary section\n if (summary && Object.keys(summary).length > 0) {\n sections.push({\n header: 'Summary',\n items: metricsList(summary),\n });\n }\n\n // Details sections\n for (const detail of details) {\n sections.push({\n header: detail.section,\n items: detail.items,\n });\n }\n\n // Warnings section\n if (warnings.length > 0) {\n sections.push({\n header: '⚠ Warnings',\n items: bulletList(warnings),\n });\n }\n\n // Errors section\n if (errors.length > 0) {\n sections.push({\n header: '✗ Errors',\n items: bulletList(errors),\n });\n }\n\n // Generate human-readable output\n const human = sideBorderBox({\n title,\n sections,\n status,\n timing,\n });\n\n // Generate JSON output\n const json: Record<string, unknown> = {\n ok: status === 'success',\n status,\n ...(summary && { summary }),\n ...(details.length > 0 && {\n details: details.reduce((acc, d) => {\n acc[d.section] = d.items;\n return acc;\n }, {} as Record<string, string[]>),\n }),\n ...(warnings.length > 0 && { warnings }),\n ...(errors.length > 0 && { errors }),\n ...(timing !== undefined && { timingMs: timing }),\n ...(jsonData && { data: jsonData }),\n };\n\n return {\n ok: status === 'success',\n status,\n human,\n json\n };\n}\n\n/**\n * High-level: Quick success result\n *\n * @example\n * ```typescript\n * return successResult('Version Info', {\n * summary: { 'CLI Version': '0.1.0' },\n * timing: 5,\n * });\n * ```\n */\nexport function successResult(\n title: string,\n data?: {\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n timing?: number;\n json?: object;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n summary: data?.summary,\n details: data?.details,\n timing: data?.timing,\n status: 'success',\n jsonData: data?.json,\n });\n}\n\n/**\n * High-level: Quick error result\n *\n * @example\n * ```typescript\n * return errorResult('Command Failed', new Error('Something went wrong'), {\n * timing: 100,\n * suggestions: ['Try running with --debug flag'],\n * });\n * ```\n */\nexport function errorResult(\n title: string,\n error: Error | string,\n options?: {\n timing?: number;\n suggestions?: string[];\n }\n): CommandOutput {\n const errorMessage = error instanceof Error ? error.message : error;\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n return formatCommandResult({\n title,\n errors: [errorMessage],\n details: options?.suggestions\n ? [{ section: 'Suggestions', items: bulletList(options.suggestions) }]\n : [],\n timing: options?.timing,\n status: 'error',\n jsonData: {\n error: errorMessage,\n ...(errorStack && { stack: errorStack }),\n },\n });\n}\n\n/**\n * High-level: Quick warning result\n *\n * @example\n * ```typescript\n * return warningResult('Configuration Updated', ['Deprecated option used'], {\n * summary: { 'Files Updated': 3 },\n * timing: 50,\n * });\n * ```\n */\nexport function warningResult(\n title: string,\n warnings: string[],\n options?: {\n summary?: Record<string, string | number>;\n timing?: number;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n warnings,\n summary: options?.summary,\n timing: options?.timing,\n status: 'warning',\n });\n}\n\n/**\n * High-level: Info result\n *\n * @example\n * ```typescript\n * return infoResult('Help Information', {\n * details: [\n * { section: 'Usage', items: ['kb command --flag'] }\n * ],\n * });\n * ```\n */\nexport function infoResult(\n title: string,\n data?: {\n summary?: Record<string, string | number>;\n details?: Array<{ section: string; items: string[] }>;\n timing?: number;\n }\n): CommandOutput {\n return formatCommandResult({\n title,\n summary: data?.summary,\n details: data?.details,\n timing: data?.timing,\n status: 'info',\n });\n}\n","/**\n * Structured log display for CLI output (watch/run/stream commands).\n * Not a spinner — for rendering log lines with level, timestamp, and message.\n */\n\nimport { safeColors } from './colors.js';\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'verbose';\n\nconst LEVEL_CONFIG: Record<LogLevel, { symbol: string; label: string; color: (s: string) => string }> = {\n info: { symbol: '◆', label: 'INFO ', color: safeColors.info },\n warn: { symbol: '⚠', label: 'WARN ', color: safeColors.warning },\n error: { symbol: '✗', label: 'ERROR', color: safeColors.error },\n debug: { symbol: '○', label: 'DEBUG', color: safeColors.muted },\n verbose: { symbol: '·', label: 'VERB ', color: safeColors.muted },\n};\n\nfunction timestamp(): string {\n const now = new Date();\n const h = String(now.getHours()).padStart(2, '0');\n const m = String(now.getMinutes()).padStart(2, '0');\n const s = String(now.getSeconds()).padStart(2, '0');\n return `${h}:${m}:${s}`;\n}\n\nexport function logLine(level: LogLevel, message: string): string {\n const cfg = LEVEL_CONFIG[level];\n const sym = cfg.color(cfg.symbol);\n const lbl = safeColors.muted(cfg.label);\n const ts = safeColors.muted(timestamp());\n return ` ${sym} ${lbl} ${ts} ${message}`;\n}\n\nexport function logGroup(title: string, lines: string[]): string {\n const header = ` ${safeColors.bold(title)}`;\n const body = lines.map((l) => ` ${l}`).join('\\n');\n return body ? `${header}\\n${body}` : header;\n}\n\nexport function printLog(level: LogLevel, message: string): void {\n process.stdout.write(logLine(level, message) + '\\n');\n}\n","/**\n * Inline status badges for CLI output.\n *\n * @example\n * badge('ONLINE', 'success') → green [ONLINE]\n * badge('FAILED', 'error') → red [FAILED]\n * badge('PENDING', 'neutral') → muted [PENDING]\n */\n\nimport { safeColors } from './colors.js';\n\nexport type BadgeVariant = 'success' | 'error' | 'warning' | 'info' | 'neutral';\n\nconst BADGE_COLORS: Record<BadgeVariant, (s: string) => string> = {\n success: safeColors.success,\n error: safeColors.error,\n warning: safeColors.warning,\n info: safeColors.info,\n neutral: safeColors.muted,\n};\n\nexport function badge(label: string, variant: BadgeVariant = 'neutral'): string {\n const colorFn = BADGE_COLORS[variant];\n return colorFn(`[${label.toUpperCase()}]`);\n}\n\nexport function statusBadge(status: string): string {\n const s = status.toLowerCase();\n if (s === 'online' || s === 'running' || s === 'success' || s === 'active' || s === 'done') {\n return badge(status, 'success');\n }\n if (s === 'offline' || s === 'failed' || s === 'error' || s === 'stopped') {\n return badge(status, 'error');\n }\n if (s === 'degraded' || s === 'warning' || s === 'reconnecting' || s === 'pending') {\n return badge(status, 'warning');\n }\n if (s === 'starting' || s === 'initializing') {\n return badge(status, 'info');\n }\n return badge(status, 'neutral');\n}\n","/**\n * Low-level terminal utilities for interactive CLI prompts.\n * All functions check isInteractive() before using raw mode.\n */\n\nimport * as readline from 'node:readline';\n\nexport interface Key {\n name: string;\n ctrl: boolean;\n shift: boolean;\n meta: boolean;\n sequence: string;\n}\n\nexport function isInteractive(): boolean {\n return Boolean(\n process.stdin.isTTY &&\n process.stdout.isTTY &&\n !process.env.CI &&\n !process.env.NO_INTERACTIVE\n );\n}\n\nexport function enableRawMode(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n}\n\nexport function disableRawMode(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n}\n\nexport function clearLine(): void {\n process.stdout.write('\\r\\x1b[K');\n}\n\nexport function clearLines(n: number): void {\n for (let i = 0; i < n; i++) {\n if (i > 0) {process.stdout.write('\\x1b[1A');}\n clearLine();\n }\n}\n\nexport function hideCursor(): void {\n process.stdout.write('\\x1b[?25l');\n}\n\nexport function showCursor(): void {\n process.stdout.write('\\x1b[?25h');\n}\n\nexport function moveCursorUp(n: number): void {\n process.stdout.write(`\\x1b[${n}A`);\n}\n\n/**\n * Listen for keypresses. Returns an unsubscribe function.\n * Caller is responsible for enabling raw mode before calling.\n */\nexport function onKeypress(handler: (key: Key) => void): () => void {\n readline.emitKeypressEvents(process.stdin);\n\n const listener = (_: unknown, key: Key) => {\n if (key) {handler(key);}\n };\n\n process.stdin.on('keypress', listener);\n process.stdin.resume();\n\n return () => {\n process.stdin.off('keypress', listener);\n if (process.stdin.listenerCount('keypress') === 0) {\n process.stdin.pause();\n }\n };\n}\n\nexport function isUpKey(key: Key): boolean {\n return key.name === 'up' || (key.name === 'k' && !key.ctrl);\n}\n\nexport function isDownKey(key: Key): boolean {\n return key.name === 'down' || (key.name === 'j' && !key.ctrl);\n}\n\nexport function isEnterKey(key: Key): boolean {\n return key.name === 'return' || key.name === 'enter';\n}\n\nexport function isEscapeKey(key: Key): boolean {\n return key.name === 'escape' || (key.name === 'c' && key.ctrl) || (key.name === 'q' && !key.ctrl);\n}\n\nexport function isSpaceKey(key: Key): boolean {\n return key.name === 'space';\n}\n","/**\n * Multi-step task runner with visual progress.\n * Each task shows as ○ pending → spinner running → ● done / ✗ failed.\n *\n * @example\n * await runTasks([\n * { title: 'Install dependencies', run: async () => { ... } },\n * { title: 'Build', run: async () => { ... } },\n * ])\n */\n\nimport { safeColors } from './colors.js';\nimport { clearLines } from './interactive/terminal.js';\n\nexport interface Task {\n title: string;\n run: (updateTitle: (t: string) => void) => Promise<void>;\n}\n\ntype TaskState = 'pending' | 'running' | 'done' | 'failed';\n\ninterface TaskStatus {\n title: string;\n state: TaskState;\n error?: string;\n}\n\nconst SPINNER_FRAMES = ['◐', '◓', '◑', '◒'];\n\nfunction renderTasks(statuses: TaskStatus[], spinnerFrame: number): number {\n const lines: string[] = [];\n for (const s of statuses) {\n let prefix: string;\n switch (s.state) {\n case 'pending':\n prefix = safeColors.muted('○');\n break;\n case 'running':\n prefix = safeColors.primary(SPINNER_FRAMES[spinnerFrame % SPINNER_FRAMES.length] ?? '◆');\n break;\n case 'done':\n prefix = safeColors.success('●');\n break;\n case 'failed':\n prefix = safeColors.error('✗');\n break;\n }\n lines.push(` ${prefix} ${s.state === 'done' ? safeColors.muted(s.title) : s.state === 'failed' ? safeColors.error(s.title) : s.title}`);\n if (s.error) {\n lines.push(` ${safeColors.muted(s.error)}`);\n }\n }\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function runTasks(tasks: Task[]): Promise<void> {\n const statuses: TaskStatus[] = tasks.map((t) => ({ title: t.title, state: 'pending' as TaskState }));\n let lineCount = 0;\n let spinnerFrame = 0;\n\n // Initial render\n lineCount = renderTasks(statuses, spinnerFrame);\n\n let spinnerInterval: ReturnType<typeof setInterval> | undefined;\n\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n const status = statuses[i];\n if (!task || !status) {continue;}\n\n status.state = 'running';\n clearLines(lineCount);\n lineCount = renderTasks(statuses, spinnerFrame);\n\n spinnerInterval = setInterval(() => {\n spinnerFrame++;\n clearLines(lineCount);\n lineCount = renderTasks(statuses, spinnerFrame);\n }, 80);\n\n try {\n await task.run((newTitle) => {\n status.title = newTitle;\n });\n status.state = 'done';\n } catch (err) {\n status.state = 'failed';\n status.error = err instanceof Error ? err.message : String(err);\n } finally {\n clearInterval(spinnerInterval);\n spinnerInterval = undefined;\n }\n }\n\n // Final render without spinner\n clearLines(lineCount);\n renderTasks(statuses, 0);\n process.stdout.write('\\n');\n\n const failed = statuses.filter((s) => s.state === 'failed');\n if (failed.length > 0) {\n throw new Error(`${failed.length} task${failed.length === 1 ? '' : 's'} failed`);\n }\n}\n","/**\n * Interactive y/n confirmation prompt.\n *\n * @example\n * const ok = await confirm({ message: 'Deploy to production?', defaultValue: false })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface ConfirmOptions {\n message: string;\n defaultValue?: boolean;\n}\n\nexport async function confirm(options: ConfirmOptions): Promise<boolean> {\n const { message, defaultValue = false } = options;\n\n if (!isInteractive()) {\n return defaultValue;\n }\n\n const hint = defaultValue ? '(Y/n)' : '(y/N)';\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(hint)} `);\n\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: process.stdin, output: undefined });\n\n rl.once('line', (line) => {\n rl.close();\n const trimmed = line.trim().toLowerCase();\n process.stdout.write('\\n');\n if (trimmed === '') {\n resolve(defaultValue);\n } else {\n resolve(trimmed === 'y' || trimmed === 'yes');\n }\n });\n\n rl.once('close', () => {\n resolve(defaultValue);\n });\n });\n}\n","/**\n * Interactive text input prompt.\n *\n * @example\n * const name = await text({ message: 'Plugin name', placeholder: 'my-plugin', validate: v => v ? undefined : 'Required' })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface TextOptions {\n message: string;\n placeholder?: string;\n defaultValue?: string;\n validate?: (value: string) => string | undefined;\n mask?: boolean;\n}\n\nexport async function text(options: TextOptions): Promise<string> {\n const { message, placeholder, defaultValue = '', validate, mask = false } = options;\n\n if (!isInteractive()) {\n return defaultValue;\n }\n\n const hint = placeholder ? safeColors.muted(` (${placeholder})`) : '';\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)}${hint}\\n`);\n process.stdout.write(`${safeColors.muted('│')} `);\n\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: mask ? undefined : process.stdout,\n terminal: !mask,\n });\n\n if (mask) {\n process.stdin.on('data', (char) => {\n const c = char.toString();\n if (c === '\\n' || c === '\\r') {return;}\n process.stdout.write('*');\n });\n }\n\n rl.once('line', (line) => {\n rl.close();\n const value = line.trim() || defaultValue;\n\n if (validate) {\n const error = validate(value);\n if (error) {\n process.stdout.write(`${safeColors.error('✗')} ${safeColors.error(error)}\\n`);\n resolve(text(options));\n return;\n }\n }\n\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve(value);\n });\n\n rl.once('close', () => {\n resolve(defaultValue);\n });\n });\n}\n","/**\n * Interactive arrow-key single-select prompt.\n *\n * @example\n * const env = await select({\n * message: 'Select environment',\n * choices: [{ label: 'development', value: 'dev' }, { label: 'production', value: 'prod' }]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n isInteractive, enableRawMode, disableRawMode,\n hideCursor, showCursor, clearLines,\n onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey,\n} from './terminal.js';\n\nexport interface SelectChoice<T> {\n label: string;\n value: T;\n hint?: string;\n}\n\nexport interface SelectOptions<T> {\n message: string;\n choices: SelectChoice<T>[];\n initialIndex?: number;\n}\n\nfunction renderSelect<T>(message: string, choices: SelectChoice<T>[], activeIndex: number, isFirst: boolean): number {\n const lines: string[] = [];\n\n if (isFirst) {\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(message)}`);\n lines.push(safeColors.muted('│'));\n }\n\n for (let i = 0; i < choices.length; i++) {\n const choice = choices[i];\n if (!choice) {continue;}\n const isActive = i === activeIndex;\n const pointer = isActive ? safeColors.primary('❯') : ' ';\n const label = isActive ? safeColors.bold(choice.label) : safeColors.muted(choice.label);\n const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n lines.push(`${safeColors.muted('│')} ${pointer} ${label}${hint}`);\n }\n\n lines.push(safeColors.muted('│'));\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function select<T>(options: SelectOptions<T>): Promise<T> {\n const { message, choices, initialIndex = 0 } = options;\n\n if (!isInteractive() || choices.length === 0) {\n return (choices[Math.min(initialIndex, choices.length - 1)] as SelectChoice<T>).value;\n }\n\n let activeIndex = Math.min(initialIndex, choices.length - 1);\n let lineCount = 0;\n\n hideCursor();\n enableRawMode();\n lineCount = renderSelect(message, choices, activeIndex, true);\n\n return new Promise((resolve) => {\n const unsubscribe = onKeypress((key) => {\n if (isUpKey(key)) {\n activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n clearLines(lineCount);\n lineCount = renderSelect(message, choices, activeIndex, false);\n return;\n }\n\n if (isDownKey(key)) {\n activeIndex = (activeIndex + 1) % choices.length;\n clearLines(lineCount);\n lineCount = renderSelect(message, choices, activeIndex, false);\n return;\n }\n\n if (isEnterKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n const selected = choices[activeIndex] as SelectChoice<T>;\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(selected.label)}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve(selected.value);\n return;\n }\n\n if (isEscapeKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n process.stdout.write(`${safeColors.muted('◆')} ${safeColors.muted(message)} ${safeColors.muted('cancelled')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve((choices[initialIndex] as SelectChoice<T>).value);\n return;\n }\n });\n });\n}\n","/**\n * Interactive checkbox multi-select prompt.\n * Space to toggle, Enter to confirm, 'a' to toggle all.\n *\n * @example\n * const plugins = await multiSelect({\n * message: 'Select plugins',\n * choices: [{ label: 'workflow', value: 'workflow', checked: true }, ...]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n isInteractive, enableRawMode, disableRawMode,\n hideCursor, showCursor, clearLines,\n onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey, isSpaceKey,\n} from './terminal.js';\n\nexport interface MultiSelectChoice<T> {\n label: string;\n value: T;\n checked?: boolean;\n hint?: string;\n}\n\nexport interface MultiSelectOptions<T> {\n message: string;\n choices: MultiSelectChoice<T>[];\n min?: number;\n}\n\nfunction renderMultiSelect<T>(\n message: string,\n choices: MultiSelectChoice<T>[],\n checked: Set<number>,\n activeIndex: number,\n isFirst: boolean,\n error?: string,\n): number {\n const lines: string[] = [];\n\n if (isFirst) {\n lines.push(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted('Space to toggle, Enter to confirm')}`);\n lines.push(safeColors.muted('│'));\n }\n\n for (let i = 0; i < choices.length; i++) {\n const choice = choices[i];\n if (!choice) {continue;}\n const isActive = i === activeIndex;\n const isChecked = checked.has(i);\n const checkbox = isChecked ? safeColors.success('◉') : safeColors.muted('○');\n const pointer = isActive ? safeColors.primary('❯') : ' ';\n const label = isActive ? safeColors.bold(choice.label) : isChecked ? choice.label : safeColors.muted(choice.label);\n const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n lines.push(`${safeColors.muted('│')} ${pointer} ${checkbox} ${label}${hint}`);\n }\n\n if (error) {\n lines.push(`${safeColors.muted('│')}`);\n lines.push(`${safeColors.muted('│')} ${safeColors.error('✗')} ${safeColors.error(error)}`);\n }\n\n lines.push(safeColors.muted('│'));\n process.stdout.write(lines.join('\\n') + '\\n');\n return lines.length;\n}\n\nexport async function multiSelect<T>(options: MultiSelectOptions<T>): Promise<T[]> {\n const { message, choices, min } = options;\n\n if (!isInteractive() || choices.length === 0) {\n return choices.filter((c) => c.checked).map((c) => c.value);\n }\n\n let activeIndex = 0;\n const checked = new Set<number>(\n choices.map((c, i) => (c.checked ? i : -1)).filter((i) => i >= 0)\n );\n let lineCount = 0;\n let error: string | undefined;\n\n hideCursor();\n enableRawMode();\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, true, error);\n\n return new Promise((resolve) => {\n const unsubscribe = onKeypress((key) => {\n if (isUpKey(key)) {\n activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isDownKey(key)) {\n activeIndex = (activeIndex + 1) % choices.length;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isSpaceKey(key)) {\n if (checked.has(activeIndex)) {\n checked.delete(activeIndex);\n } else {\n checked.add(activeIndex);\n }\n error = undefined;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (key.name === 'a' && !key.ctrl) {\n if (checked.size === choices.length) {\n checked.clear();\n } else {\n choices.forEach((_, i) => checked.add(i));\n }\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n if (isEnterKey(key)) {\n if (min !== undefined && checked.size < min) {\n error = `Select at least ${min} option${min === 1 ? '' : 's'}`;\n clearLines(lineCount);\n lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n return;\n }\n\n unsubscribe();\n disableRawMode();\n showCursor();\n const headerLines = 2;\n clearLines(lineCount + headerLines);\n\n const selectedLabels = choices\n .filter((_, i) => checked.has(i))\n .map((c) => c.label)\n .join(', ');\n process.stdout.write(`${safeColors.primary('◆')} ${safeColors.bold(message)} ${safeColors.muted(selectedLabels || 'none')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n\n resolve(choices.filter((_, i) => checked.has(i)).map((c) => c.value));\n return;\n }\n\n if (isEscapeKey(key)) {\n unsubscribe();\n disableRawMode();\n showCursor();\n clearLines(lineCount + 2);\n process.stdout.write(`${safeColors.muted('◆')} ${safeColors.muted(message)} ${safeColors.muted('cancelled')}\\n`);\n process.stdout.write(`${safeColors.muted('└')}\\n`);\n resolve([]);\n return;\n }\n });\n });\n}\n","import type { UIFacade, SelectChoice, MultiSelectChoice } from '@kb-labs/plugin-contracts';\nimport { safeColors, safeSymbols } from './colors.js';\nimport { sideBorderBox, sideBorderChain, metricsList } from './modern-format.js';\nimport { formatTable } from './table.js';\n\n/**\n * All interactive prompt methods of UIFacade.\n * Required (not optional) so TypeScript catches missing implementations\n * when UIFacade gains a new prompt method.\n */\nexport interface UIPrompts {\n confirm(msg: string, opts?: { defaultValue?: boolean }): Promise<boolean>;\n prompt(msg: string, opts?: { default?: string; mask?: boolean }): Promise<string>;\n select<T>(msg: string, choices: SelectChoice<T>[]): Promise<T>;\n multiSelect<T>(msg: string, choices: MultiSelectChoice<T>[]): Promise<T[]>;\n}\n\n/**\n * Safe-return prompts for non-interactive contexts (subprocess, sandbox).\n * All methods return the most sensible default without any I/O.\n */\nexport const NOOP_PROMPTS: UIPrompts = {\n confirm: async (_, opts) => opts?.defaultValue ?? false,\n prompt: async (_, opts) => opts?.default ?? '',\n select: async <T>(_: string, choices: SelectChoice<T>[]) => choices[0]?.value as T,\n multiSelect: async <T>(_: string, choices: MultiSelectChoice<T>[]) =>\n choices.filter(c => c.checked).map(c => c.value) as T[],\n};\n\n/**\n * Shared stdout UIFacade factory for subprocess/worker contexts.\n *\n * Both params are required so TypeScript catches any new UIFacade interactive\n * method at the call site rather than silently inheriting a noop default.\n *\n * Uses `satisfies UIFacade` on the object literal — TypeScript will error here\n * (not just at the return type) if any UIFacade method is missing.\n */\nexport function createBaseStdoutUI(\n prompts: UIPrompts,\n log: UIFacade['log'],\n): UIFacade {\n return {\n colors: safeColors,\n symbols: safeSymbols,\n\n write: (text) => { process.stdout.write(text + '\\n'); },\n\n info: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Info',\n sections: [{ items: [msg] }, ...extra],\n status: 'info',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n success: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Success',\n sections: [{ items: [msg] }, ...extra],\n status: 'success',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n warn: (msg, options) => {\n const extra = options?.sections ?? [];\n console.log(sideBorderBox({\n title: options?.title ?? 'Warning',\n sections: [{ items: [msg] }, ...extra],\n status: 'warning',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n error: (err, options) => {\n const message = err instanceof Error ? err.message : err;\n const sections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [\n { items: [message] },\n ];\n\n if (options?.sections?.length) {\n sections.push(...options.sections.map(s => ({ header: s.header, items: s.items })));\n }\n\n if (options?.cause) {\n sections.push({ header: 'Cause', items: [{ text: options.cause, dim: true }] });\n }\n\n if (options?.hint) {\n const hintItems: Array<string | { text: string; dim: boolean }> = [options.hint];\n if (options.command) { hintItems.push({ text: `$ ${options.command}`, dim: true }); }\n sections.push({ header: 'Hint', items: hintItems });\n } else if (options?.command) {\n sections.push({ header: 'Hint', items: [{ text: `$ ${options.command}`, dim: true }] });\n }\n\n console.error(sideBorderBox({\n title: options?.title ?? 'Error',\n sections,\n status: 'error',\n timing: options?.timing,\n summary: options?.summary,\n }));\n },\n\n debug: (msg) => { if (process.env.DEBUG) { console.debug(msg); } },\n\n spinner: (msg) => {\n console.log(`${safeColors.primary('◆')} ${msg}`);\n return {\n update: (m) => console.log(`${safeColors.primary('◆')} ${m}`),\n succeed: (m) => console.log(`${safeColors.success('✓')} ${m ?? msg}`),\n fail: (m) => console.log(`${safeColors.error('✗')} ${m ?? msg}`),\n stop: () => {},\n };\n },\n\n table: (data, columns) => {\n if (data.length === 0) { return; }\n const cols = columns ?? Object.keys(data[0]!).map(k => ({ header: k, key: k }));\n const rows = data.map(row => cols.map(col => String(row[col.key] ?? '')));\n const lines = formatTable(\n cols.map(c => ({ header: c.header, width: (c as { width?: number }).width, align: (c as { align?: 'left' | 'center' | 'right' }).align })),\n rows,\n { separator: '' },\n );\n for (const line of lines) { console.log(` ${line}`); }\n },\n\n json: (data, options) => console.log(options?.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data)),\n newline: () => console.log(),\n divider: () => console.log(safeColors.muted('─'.repeat(process.stdout.columns || 80))),\n\n box: (content, title) => {\n console.log(sideBorderBox({\n title: title || '',\n sections: [{ items: content.split('\\n') }],\n status: 'info',\n }));\n },\n\n sideBox: (options) => {\n const allSections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [];\n if (options.summary && Object.keys(options.summary).length > 0) {\n allSections.push({ items: metricsList(options.summary as Record<string, string | number>) });\n }\n allSections.push(...(options.sections ?? []).map(s => ({ header: s.header, items: s.items })));\n console.log(sideBorderBox({\n title: options.title,\n sections: allSections,\n status: options.status,\n timing: options.timing,\n }));\n },\n\n chain: (items) => {\n console.log(sideBorderChain(\n items.map(item => ({\n title: item.title,\n sections: (item.sections ?? []).map(s => ({ header: s.header, items: s.items })),\n summary: item.summary,\n status: item.status,\n timing: item.timing,\n })),\n ));\n },\n\n confirm: prompts.confirm,\n prompt: prompts.prompt,\n select: prompts.select,\n multiSelect: prompts.multiSelect,\n log,\n } satisfies UIFacade;\n}\n"]}
|