@openbuilder/cli 0.31.11

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.
Files changed (78) hide show
  1. package/README.md +1053 -0
  2. package/bin/openbuilder.js +31 -0
  3. package/dist/chunks/Banner-D4tqKfzA.js +113 -0
  4. package/dist/chunks/Banner-D4tqKfzA.js.map +1 -0
  5. package/dist/chunks/auto-update-Dj3lWPWO.js +350 -0
  6. package/dist/chunks/auto-update-Dj3lWPWO.js.map +1 -0
  7. package/dist/chunks/build-D0qYqIq0.js +116 -0
  8. package/dist/chunks/build-D0qYqIq0.js.map +1 -0
  9. package/dist/chunks/cleanup-qVTsA3tk.js +141 -0
  10. package/dist/chunks/cleanup-qVTsA3tk.js.map +1 -0
  11. package/dist/chunks/cli-error-BjQwvWtK.js +140 -0
  12. package/dist/chunks/cli-error-BjQwvWtK.js.map +1 -0
  13. package/dist/chunks/config-BGP1jZJ4.js +167 -0
  14. package/dist/chunks/config-BGP1jZJ4.js.map +1 -0
  15. package/dist/chunks/config-manager-BkbjtN-H.js +133 -0
  16. package/dist/chunks/config-manager-BkbjtN-H.js.map +1 -0
  17. package/dist/chunks/database-BvAbD4sP.js +68 -0
  18. package/dist/chunks/database-BvAbD4sP.js.map +1 -0
  19. package/dist/chunks/database-setup-BYjIRAmT.js +253 -0
  20. package/dist/chunks/database-setup-BYjIRAmT.js.map +1 -0
  21. package/dist/chunks/exports-ij9sv4UM.js +7793 -0
  22. package/dist/chunks/exports-ij9sv4UM.js.map +1 -0
  23. package/dist/chunks/init-CZoN6soU.js +468 -0
  24. package/dist/chunks/init-CZoN6soU.js.map +1 -0
  25. package/dist/chunks/init-tui-BNzk_7Yx.js +1127 -0
  26. package/dist/chunks/init-tui-BNzk_7Yx.js.map +1 -0
  27. package/dist/chunks/logger-ZpJi7chw.js +38 -0
  28. package/dist/chunks/logger-ZpJi7chw.js.map +1 -0
  29. package/dist/chunks/main-tui-Cq1hLCx-.js +644 -0
  30. package/dist/chunks/main-tui-Cq1hLCx-.js.map +1 -0
  31. package/dist/chunks/manager-CvGX9qqe.js +1161 -0
  32. package/dist/chunks/manager-CvGX9qqe.js.map +1 -0
  33. package/dist/chunks/port-allocator-BRFzgH9b.js +749 -0
  34. package/dist/chunks/port-allocator-BRFzgH9b.js.map +1 -0
  35. package/dist/chunks/process-killer-CaUL7Kpl.js +87 -0
  36. package/dist/chunks/process-killer-CaUL7Kpl.js.map +1 -0
  37. package/dist/chunks/prompts-1QbE_bRr.js +128 -0
  38. package/dist/chunks/prompts-1QbE_bRr.js.map +1 -0
  39. package/dist/chunks/repo-cloner-CpOQjFSo.js +219 -0
  40. package/dist/chunks/repo-cloner-CpOQjFSo.js.map +1 -0
  41. package/dist/chunks/repo-detector-B_oj696o.js +66 -0
  42. package/dist/chunks/repo-detector-B_oj696o.js.map +1 -0
  43. package/dist/chunks/run-D23hg4xy.js +630 -0
  44. package/dist/chunks/run-D23hg4xy.js.map +1 -0
  45. package/dist/chunks/runner-logger-instance-nDWv2h2T.js +899 -0
  46. package/dist/chunks/runner-logger-instance-nDWv2h2T.js.map +1 -0
  47. package/dist/chunks/spinner-BJL9zWAJ.js +53 -0
  48. package/dist/chunks/spinner-BJL9zWAJ.js.map +1 -0
  49. package/dist/chunks/start-BygPCbvw.js +1708 -0
  50. package/dist/chunks/start-BygPCbvw.js.map +1 -0
  51. package/dist/chunks/start-traditional-uoLZXdxm.js +255 -0
  52. package/dist/chunks/start-traditional-uoLZXdxm.js.map +1 -0
  53. package/dist/chunks/status-cS8YwtUx.js +97 -0
  54. package/dist/chunks/status-cS8YwtUx.js.map +1 -0
  55. package/dist/chunks/theme-DhorI2Hb.js +44 -0
  56. package/dist/chunks/theme-DhorI2Hb.js.map +1 -0
  57. package/dist/chunks/upgrade-CT6w0lKp.js +323 -0
  58. package/dist/chunks/upgrade-CT6w0lKp.js.map +1 -0
  59. package/dist/chunks/useBuildState-CdBSu9y_.js +331 -0
  60. package/dist/chunks/useBuildState-CdBSu9y_.js.map +1 -0
  61. package/dist/cli/index.js +694 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/index.js +14358 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/instrument.js +64226 -0
  66. package/dist/instrument.js.map +1 -0
  67. package/dist/templates.json +295 -0
  68. package/package.json +98 -0
  69. package/scripts/install-vendor-deps.js +34 -0
  70. package/scripts/install-vendor.js +167 -0
  71. package/scripts/prepare-release.js +71 -0
  72. package/templates/config.template.json +18 -0
  73. package/templates.json +295 -0
  74. package/vendor/ai-sdk-provider-claude-code-LOCAL.tgz +0 -0
  75. package/vendor/sentry-core-LOCAL.tgz +0 -0
  76. package/vendor/sentry-nextjs-LOCAL.tgz +0 -0
  77. package/vendor/sentry-node-LOCAL.tgz +0 -0
  78. package/vendor/sentry-node-core-LOCAL.tgz +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-logger-instance-nDWv2h2T.js","sources":["../../src/lib/file-logger.ts","../../src/lib/logging/log-buffer.ts","../../src/lib/logging/runner-logger.ts","../../src/lib/logging/runner-logger-instance.ts"],"sourcesContent":["/**\n * File-based logger for debugging when TUI console interception interferes\n * Writes to /logs directory for easy tail -f monitoring\n */\n\nimport { appendFileSync, mkdirSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst LOGS_DIR = join(process.cwd(), 'logs');\nconst RUNNER_LOG = join(LOGS_DIR, 'runner.log');\nconst STREAM_LOG = join(LOGS_DIR, 'stream.log');\nconst ERRORS_LOG = join(LOGS_DIR, 'errors.log');\n\n// Ensure logs directory exists\nif (!existsSync(LOGS_DIR)) {\n mkdirSync(LOGS_DIR, { recursive: true });\n}\n\nfunction timestamp(): string {\n return new Date().toISOString();\n}\n\nfunction writeLog(file: string, level: string, ...args: unknown[]): void {\n const message = args.map(arg =>\n typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg)\n ).join(' ');\n\n const logLine = `[${timestamp()}] [${level}] ${message}\\n`;\n\n try {\n appendFileSync(file, logLine);\n } catch (err) {\n // Silently fail - don't want logging to crash the app\n console.error('Failed to write log:', err);\n }\n}\n\n/**\n * General runner logs - everything goes here\n */\nexport const fileLog = {\n info: (...args: unknown[]) => writeLog(RUNNER_LOG, 'INFO', ...args),\n warn: (...args: unknown[]) => writeLog(RUNNER_LOG, 'WARN', ...args),\n error: (...args: unknown[]) => {\n writeLog(RUNNER_LOG, 'ERROR', ...args);\n writeLog(ERRORS_LOG, 'ERROR', ...args);\n },\n debug: (...args: unknown[]) => writeLog(RUNNER_LOG, 'DEBUG', ...args),\n};\n\n/**\n * Stream-specific logs - for tracking AI SDK events\n */\nexport const streamLog = {\n info: (...args: unknown[]) => writeLog(STREAM_LOG, 'INFO', ...args),\n warn: (...args: unknown[]) => writeLog(STREAM_LOG, 'WARN', ...args),\n event: (eventNumber: number, eventType: string, data: unknown) => {\n writeLog(STREAM_LOG, 'EVENT', `#${eventNumber} type=\"${eventType}\"`, data);\n },\n yield: (messageType: string, data: unknown) => {\n writeLog(STREAM_LOG, 'YIELD', `type=\"${messageType}\"`, data);\n },\n error: (...args: unknown[]) => {\n writeLog(STREAM_LOG, 'ERROR', ...args);\n writeLog(ERRORS_LOG, 'ERROR', ...args);\n },\n};\n\n// TUI mode flag - when true, don't output to terminal (only to file)\nlet tuiModeEnabled = false;\n\n/**\n * Enable TUI mode - suppresses terminal output, only writes to files\n * Also sets SILENT_MODE env var to suppress agent-core build-logger output\n */\nexport function setFileLoggerTuiMode(enabled: boolean): void {\n tuiModeEnabled = enabled;\n // Set env var so agent-core's build-logger also silences itself\n if (enabled) {\n process.env.SILENT_MODE = '1';\n } else {\n delete process.env.SILENT_MODE;\n }\n}\n\n// Intercept console methods to also write to file\nconst originalConsole = {\n log: console.log,\n error: console.error,\n warn: console.warn,\n info: console.info,\n debug: console.debug,\n};\n\n// Export original console for when we need direct output\nexport { originalConsole };\n\n// Helper to check if we should suppress terminal output\n// Check both the runtime flag AND the environment variable (set early in CLI)\nfunction shouldSuppressTerminal(): boolean {\n return tuiModeEnabled || process.env.SILENT_MODE === '1';\n}\n\n// Override console methods to write to file (and optionally terminal)\nconsole.log = (...args: unknown[]) => {\n if (!shouldSuppressTerminal()) {\n originalConsole.log(...args);\n }\n fileLog.info(...args);\n};\n\nconsole.error = (...args: unknown[]) => {\n if (!shouldSuppressTerminal()) {\n originalConsole.error(...args);\n }\n fileLog.error(...args);\n};\n\nconsole.warn = (...args: unknown[]) => {\n if (!shouldSuppressTerminal()) {\n originalConsole.warn(...args);\n }\n fileLog.warn(...args);\n};\n\nconsole.info = (...args: unknown[]) => {\n if (!shouldSuppressTerminal()) {\n originalConsole.info(...args);\n }\n fileLog.info(...args);\n};\n\nconsole.debug = (...args: unknown[]) => {\n if (!shouldSuppressTerminal()) {\n originalConsole.debug(...args);\n }\n fileLog.debug(...args);\n};\n\n// Log startup\nfileLog.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\nfileLog.info('Runner started - console interception enabled');\nfileLog.info('Log files:');\nfileLog.info(` - General: ${RUNNER_LOG}`);\nfileLog.info(` - Stream: ${STREAM_LOG}`);\nfileLog.info(` - Errors: ${ERRORS_LOG}`);\nfileLog.info('All console.log/error/warn/info/debug will be captured here');\nfileLog.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n","/**\n * LogBuffer - File-backed circular buffer for log entries\n * \n * Maintains an in-memory buffer of the most recent 100 entries\n * and persists all logs to a file for full history access.\n */\n\nimport { existsSync, mkdirSync, appendFileSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { EventEmitter } from 'node:events';\nimport type { LogEntry, LogFilter } from './types.js';\n\nconst DEFAULT_BUFFER_SIZE = 100;\nconst LOG_DIR = 'logs';\nconst LOG_FILE = 'runner-tui.log';\n\nexport class LogBuffer extends EventEmitter {\n private buffer: LogEntry[] = [];\n private maxSize: number;\n private logFilePath: string;\n private sessionStartTime: number;\n\n constructor(options?: { maxSize?: number; logDir?: string }) {\n super();\n this.maxSize = options?.maxSize ?? DEFAULT_BUFFER_SIZE;\n this.sessionStartTime = Date.now();\n \n // Set up log file path\n const logDir = options?.logDir ?? LOG_DIR;\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true });\n }\n this.logFilePath = join(logDir, LOG_FILE);\n \n // Write session start marker\n this.writeToFile(`\\n${'='.repeat(60)}\\n`);\n this.writeToFile(`SESSION START: ${new Date().toISOString()}\\n`);\n this.writeToFile(`${'='.repeat(60)}\\n\\n`);\n }\n\n /**\n * Add a log entry to the buffer and file\n */\n add(entry: LogEntry): void {\n // Add to in-memory buffer (circular)\n this.buffer.push(entry);\n if (this.buffer.length > this.maxSize) {\n this.buffer.shift();\n }\n\n // Write to file\n this.writeToFile(this.formatEntryForFile(entry));\n\n // Emit event for subscribers (TUI components)\n this.emit('log', entry);\n }\n\n /**\n * Get the most recent N entries from memory\n */\n getRecent(count?: number): LogEntry[] {\n const n = count ?? this.maxSize;\n return this.buffer.slice(-n);\n }\n\n /**\n * Get all entries currently in memory\n */\n getAll(): LogEntry[] {\n return [...this.buffer];\n }\n\n /**\n * Get filtered entries from memory\n */\n getFiltered(filter: LogFilter): LogEntry[] {\n return this.buffer.filter(entry => this.matchesFilter(entry, filter));\n }\n\n /**\n * Read entries from the log file (for full history)\n * Returns parsed log entries from the current session\n */\n readFromFile(maxLines?: number): LogEntry[] {\n if (!existsSync(this.logFilePath)) {\n return [];\n }\n\n try {\n const content = readFileSync(this.logFilePath, 'utf-8');\n const lines = content.split('\\n').filter(line => line.trim());\n \n // Find the last session marker and only read from there\n let sessionStart = 0;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (lines[i].includes('SESSION START:')) {\n sessionStart = i + 1;\n break;\n }\n }\n\n const sessionLines = lines.slice(sessionStart);\n const entries: LogEntry[] = [];\n\n for (const line of sessionLines) {\n const parsed = this.parseLogLine(line);\n if (parsed) {\n entries.push(parsed);\n }\n }\n\n if (maxLines && entries.length > maxLines) {\n return entries.slice(-maxLines);\n }\n\n return entries;\n } catch (error) {\n console.error('Failed to read log file:', error);\n return [];\n }\n }\n\n /**\n * Get the log file path for external access\n */\n getLogFilePath(): string {\n return this.logFilePath;\n }\n\n /**\n * Convert buffer contents to plain text (for copying)\n */\n toText(entries?: LogEntry[]): string {\n const items = entries ?? this.buffer;\n return items.map(entry => this.formatEntryForDisplay(entry)).join('\\n');\n }\n\n /**\n * Clear the in-memory buffer (file is preserved)\n */\n clear(): void {\n this.buffer = [];\n this.emit('clear');\n }\n\n /**\n * Subscribe to new log entries\n */\n onLog(callback: (entry: LogEntry) => void): () => void {\n this.on('log', callback);\n return () => this.off('log', callback);\n }\n\n // Private methods\n\n private writeToFile(content: string): void {\n try {\n appendFileSync(this.logFilePath, content);\n } catch (error) {\n // Silently fail - don't break logging if file write fails\n }\n }\n\n private formatEntryForFile(entry: LogEntry): string {\n const timestamp = new Date(entry.timestamp).toISOString();\n const level = entry.level.toUpperCase().padEnd(7);\n const category = entry.category.padEnd(12);\n \n let line = `[${timestamp}] [${level}] [${category}] ${entry.message}`;\n \n if (entry.toolName) {\n line += ` | tool=${entry.toolName}`;\n if (entry.toolArgs) {\n line += ` args=${entry.toolArgs}`;\n }\n }\n \n if (entry.buildId) {\n line += ` | build=${entry.buildId}`;\n }\n \n if (entry.data && Object.keys(entry.data).length > 0) {\n line += ` | data=${JSON.stringify(entry.data)}`;\n }\n \n return line + '\\n';\n }\n\n private formatEntryForDisplay(entry: LogEntry): string {\n const time = new Date(entry.timestamp).toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n \n const levelIcon = {\n debug: ' ',\n info: '●',\n success: '✓',\n warn: '⚠',\n error: '✗',\n }[entry.level];\n\n if (entry.toolName) {\n return `${time} 🔧 ${entry.toolName}${entry.toolArgs ? ` ${entry.toolArgs}` : ''}`;\n }\n\n return `${time} ${levelIcon} ${entry.message}`;\n }\n\n private parseLogLine(line: string): LogEntry | null {\n // Parse format: [ISO_TIMESTAMP] [LEVEL ] [CATEGORY ] message | key=value...\n const match = line.match(/^\\[([^\\]]+)\\] \\[([^\\]]+)\\] \\[([^\\]]+)\\] (.+)$/);\n if (!match) {\n return null;\n }\n\n const [, timestamp, levelRaw, categoryRaw, rest] = match;\n const level = levelRaw.trim().toLowerCase() as LogEntry['level'];\n const category = categoryRaw.trim() as LogEntry['category'];\n\n // Parse message and optional fields\n const parts = rest.split(' | ');\n const message = parts[0];\n\n const entry: LogEntry = {\n id: `${Date.parse(timestamp)}-${Math.random().toString(36).slice(2, 8)}`,\n timestamp: Date.parse(timestamp),\n level,\n category,\n message,\n };\n\n // Parse optional key=value pairs\n for (let i = 1; i < parts.length; i++) {\n const [key, ...valueParts] = parts[i].split('=');\n const value = valueParts.join('=');\n \n switch (key) {\n case 'tool':\n entry.toolName = value;\n break;\n case 'args':\n entry.toolArgs = value;\n break;\n case 'build':\n entry.buildId = value;\n break;\n case 'data':\n try {\n entry.data = JSON.parse(value);\n } catch {\n // Ignore parse errors\n }\n break;\n }\n }\n\n return entry;\n }\n\n private matchesFilter(entry: LogEntry, filter: LogFilter): boolean {\n if (filter.levels && !filter.levels.includes(entry.level)) {\n return false;\n }\n \n if (filter.categories && !filter.categories.includes(entry.category)) {\n return false;\n }\n \n if (filter.buildId && entry.buildId !== filter.buildId) {\n return false;\n }\n \n if (filter.verbose === false && entry.verbose) {\n return false;\n }\n \n if (filter.search) {\n const searchLower = filter.search.toLowerCase();\n const messageMatch = entry.message.toLowerCase().includes(searchLower);\n const toolMatch = entry.toolName?.toLowerCase().includes(searchLower);\n const argsMatch = entry.toolArgs?.toLowerCase().includes(searchLower);\n \n if (!messageMatch && !toolMatch && !argsMatch) {\n return false;\n }\n }\n \n return true;\n }\n}\n\n// Singleton instance\nlet instance: LogBuffer | null = null;\n\nexport function getLogBuffer(): LogBuffer {\n if (!instance) {\n instance = new LogBuffer();\n }\n return instance;\n}\n\nexport function createLogBuffer(options?: { maxSize?: number; logDir?: string }): LogBuffer {\n instance = new LogBuffer(options);\n return instance;\n}\n","/**\n * RunnerLogger - Unified logging for the OpenBuilder Runner\n * \n * Provides structured logging with:\n * - Verbose mode filtering\n * - Build lifecycle tracking\n * - Tool call logging with truncated args\n * - Event emission for TUI components\n * - File persistence via LogBuffer\n */\n\nimport { EventEmitter } from 'node:events';\nimport chalk from 'chalk';\nimport { LogBuffer, getLogBuffer, createLogBuffer } from './log-buffer.js';\nimport type {\n LogEntry,\n LogLevel,\n LogCategory,\n BuildInfo,\n TodoItem,\n BuildCompletionStats,\n LoggerEvents,\n} from './types.js';\n\nconst MAX_ARG_LENGTH = 40;\nconst MAX_MESSAGE_LENGTH = 80;\n\nexport interface RunnerLoggerOptions {\n verbose?: boolean;\n tuiMode?: boolean;\n logDir?: string;\n}\n\nexport class RunnerLogger extends EventEmitter {\n private verbose: boolean;\n private tuiMode: boolean;\n private buffer: LogBuffer;\n private builds: Map<string, BuildInfo> = new Map();\n private currentBuildId: string | null = null;\n private connected: boolean = false;\n\n constructor(options?: RunnerLoggerOptions) {\n super();\n this.verbose = options?.verbose ?? false;\n this.tuiMode = options?.tuiMode ?? true;\n this.buffer = options?.logDir \n ? createLogBuffer({ logDir: options.logDir })\n : getLogBuffer();\n }\n\n // ============================================\n // Configuration\n // ============================================\n\n setVerbose(verbose: boolean): void {\n this.verbose = verbose;\n this.emit('verboseChange', verbose);\n }\n\n isVerbose(): boolean {\n return this.verbose;\n }\n\n setTuiMode(tuiMode: boolean): void {\n this.tuiMode = tuiMode;\n }\n\n // ============================================\n // Connection Status\n // ============================================\n\n setConnected(connected: boolean): void {\n this.connected = connected;\n if (connected) {\n this.success('system', 'Connected to server');\n this.emit('connected');\n } else {\n this.warn('system', 'Disconnected from server');\n this.emit('disconnected');\n }\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n\n // ============================================\n // Startup / Header\n // ============================================\n\n /**\n * Print the startup header with runner configuration\n */\n header(config: {\n runnerId: string;\n serverUrl: string;\n workspace: string;\n apiUrl?: string;\n }): void {\n if (this.tuiMode) {\n // In TUI mode, header is rendered by the dashboard\n // Just emit the config for the TUI to use\n this.emit('config', config);\n return;\n }\n\n // Plain text mode - print formatted header\n const line = '━'.repeat(60);\n console.log(chalk.cyan(line));\n console.log(chalk.cyan.bold(' OpenBuilder Runner'));\n console.log(chalk.cyan(line));\n console.log(chalk.gray(' Runner ID '), chalk.white(config.runnerId));\n console.log(chalk.gray(' Server '), chalk.white(config.serverUrl));\n console.log(chalk.gray(' Workspace '), chalk.white(config.workspace));\n if (config.apiUrl) {\n console.log(chalk.gray(' API '), chalk.white(config.apiUrl));\n }\n console.log(chalk.cyan(line));\n console.log();\n }\n\n // ============================================\n // Generic Log Methods\n // ============================================\n\n info(category: LogCategory, message: string, data?: Record<string, unknown>): void {\n this.log('info', category, message, data);\n }\n\n success(category: LogCategory, message: string, data?: Record<string, unknown>): void {\n this.log('success', category, message, data);\n }\n\n warn(category: LogCategory, message: string, data?: Record<string, unknown>): void {\n this.log('warn', category, message, data);\n }\n\n error(category: LogCategory, message: string, data?: Record<string, unknown>): void {\n this.log('error', category, message, data);\n }\n\n debug(category: LogCategory, message: string, data?: Record<string, unknown>): void {\n this.log('debug', category, message, data, true);\n }\n\n // ============================================\n // Build Lifecycle\n // ============================================\n\n /**\n * Log when a build command is received\n */\n buildReceived(build: {\n commandId: string;\n projectId: string;\n projectSlug: string;\n projectName?: string;\n prompt: string;\n operation: string;\n agent: string;\n model: string;\n }): void {\n const buildInfo: BuildInfo = {\n id: build.commandId,\n projectId: build.projectId,\n projectSlug: build.projectSlug,\n projectName: build.projectName,\n prompt: build.prompt,\n operation: build.operation,\n agent: build.agent,\n model: build.model,\n startTime: Date.now(),\n status: 'pending',\n todos: [],\n toolCallCount: 0,\n };\n\n this.builds.set(build.commandId, buildInfo);\n this.currentBuildId = build.commandId;\n\n // Log the build received event\n this.info('build', `Build received: ${build.projectSlug}`, { buildId: build.commandId });\n \n // Log the prompt (truncated in normal mode, full in verbose)\n const truncatedPrompt = this.truncate(build.prompt, this.verbose ? 200 : 60);\n this.log('info', 'build', `Prompt: \"${truncatedPrompt}\"`, undefined, !this.verbose && build.prompt.length > 60);\n \n this.log('info', 'build', `Operation: ${build.operation}`, undefined, true);\n\n this.emit('buildStart', buildInfo);\n }\n\n /**\n * Log template selection and download\n */\n template(info: {\n name: string;\n id?: string;\n source?: string;\n fileCount?: number;\n status: 'selected' | 'downloading' | 'downloaded';\n }): void {\n switch (info.status) {\n case 'selected':\n this.info('template', `Template: ${info.name}${info.id ? ` (${info.id})` : ''}`);\n break;\n case 'downloading':\n this.log('info', 'template', `Downloading from ${info.source}...`, undefined, true);\n break;\n case 'downloaded':\n this.info('template', `Downloaded (${info.fileCount} files)`);\n break;\n }\n\n if (this.currentBuildId) {\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.template = info.name;\n build.templateId = info.id;\n this.emit('buildUpdate', build);\n }\n }\n }\n\n /**\n * Log when build execution starts\n */\n buildStart(info?: { agent?: string; model?: string; directory?: string }): void {\n this.info('build', 'Build started');\n \n if (info?.agent) {\n this.log('info', 'build', `Agent: ${info.agent}${info.model ? ` (${info.model})` : ''}`, undefined, true);\n }\n \n if (info?.directory) {\n this.log('info', 'build', `Directory: ${info.directory}`, undefined, true);\n }\n\n if (this.currentBuildId) {\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.status = 'running';\n build.directory = info?.directory;\n this.emit('buildUpdate', build);\n }\n }\n }\n\n /**\n * Log build completion\n */\n buildComplete(stats: BuildCompletionStats): void {\n const elapsed = this.formatDuration(stats.elapsedTime);\n this.success('build', `Build complete (${elapsed})`);\n this.info('build', `Tool calls: ${stats.toolCallCount} | Tokens: ${stats.totalTokens.toLocaleString()}`);\n this.log('info', 'build', `Directory: ${stats.directory}`, undefined, true);\n\n if (this.currentBuildId) {\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.status = 'completed';\n build.endTime = Date.now();\n build.totalTokens = stats.totalTokens;\n this.emit('buildComplete', build, stats);\n }\n this.currentBuildId = null;\n }\n }\n\n /**\n * Log build failure\n */\n buildFailed(error: string | Error): void {\n const message = error instanceof Error ? error.message : error;\n this.error('build', `Build failed: ${message}`);\n\n if (this.currentBuildId) {\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.status = 'failed';\n build.endTime = Date.now();\n build.error = message;\n this.emit('buildComplete', build, {\n elapsedTime: (build.endTime - build.startTime) / 1000,\n toolCallCount: build.toolCallCount,\n totalTokens: build.totalTokens ?? 0,\n directory: build.directory ?? '',\n });\n }\n this.currentBuildId = null;\n }\n }\n\n // ============================================\n // Tool Calls\n // ============================================\n\n /**\n * Log a tool call with truncated arguments\n */\n tool(toolName: string, args?: Record<string, unknown> | string): void {\n const truncatedArgs = this.formatToolArgs(toolName, args);\n \n const entry: LogEntry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level: 'info',\n category: 'tool',\n message: `${toolName}${truncatedArgs ? ` ${truncatedArgs}` : ''}`,\n toolName,\n toolArgs: truncatedArgs,\n buildId: this.currentBuildId ?? undefined,\n };\n\n this.buffer.add(entry);\n \n // Increment tool count\n if (this.currentBuildId) {\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.toolCallCount++;\n this.emit('buildUpdate', build);\n }\n }\n\n if (!this.tuiMode) {\n this.printEntry(entry);\n }\n\n this.emit('log', entry);\n }\n\n /**\n * Format tool arguments for display\n */\n private formatToolArgs(toolName: string, args?: Record<string, unknown> | string): string {\n if (!args) return '';\n \n // If already a string, just truncate it\n if (typeof args === 'string') {\n return `(${this.truncate(args, MAX_ARG_LENGTH)})`;\n }\n\n // Format based on tool type\n switch (toolName) {\n case 'Read':\n case 'read':\n case 'Write':\n case 'write':\n case 'Edit':\n case 'edit':\n // Try various path field names used by different SDKs\n const pathValue = args.filePath || args.file_path || args.path || args.target || args.file;\n if (pathValue) {\n const path = String(pathValue);\n // Show just the filename or last part of path\n const fileName = path.split('/').pop() || path;\n return fileName;\n }\n break;\n \n case 'Bash':\n if (args.command) {\n return `(${this.truncate(String(args.command), MAX_ARG_LENGTH)})`;\n }\n break;\n \n case 'Glob':\n case 'Grep':\n if (args.pattern) {\n return `(${this.truncate(String(args.pattern), MAX_ARG_LENGTH)})`;\n }\n break;\n \n case 'TodoWrite':\n if (Array.isArray(args.todos)) {\n return `(${args.todos.length} items)`;\n }\n break;\n \n default:\n // For other tools, try to show the first string value\n for (const [key, value] of Object.entries(args)) {\n if (typeof value === 'string' && value.length > 0) {\n return `(${this.truncate(value, MAX_ARG_LENGTH)})`;\n }\n }\n }\n\n return '';\n }\n\n // ============================================\n // Agent Messages\n // ============================================\n\n /**\n * Log agent thinking/message\n */\n agent(message: string): void {\n const truncated = this.truncate(message, MAX_MESSAGE_LENGTH);\n this.log('info', 'agent', truncated, undefined, message.length > MAX_MESSAGE_LENGTH);\n }\n\n // ============================================\n // Todo List Updates\n // ============================================\n\n /**\n * Update the todo list for the current build\n */\n updateTodos(todos: TodoItem[]): void {\n if (!this.currentBuildId) return;\n\n const build = this.builds.get(this.currentBuildId);\n if (build) {\n build.todos = todos;\n this.emit('todoUpdate', this.currentBuildId, todos);\n this.emit('buildUpdate', build);\n }\n }\n\n // ============================================\n // Dev Server / Tunnel\n // ============================================\n\n devServer(info: { port: number; status: 'starting' | 'started' | 'stopped' | 'error'; url?: string; error?: string }): void {\n switch (info.status) {\n case 'starting':\n this.info('server', `Starting dev server on port ${info.port}...`);\n break;\n case 'started':\n this.success('server', `Dev server running on port ${info.port}`);\n if (info.url) {\n this.info('server', `URL: ${info.url}`);\n }\n break;\n case 'stopped':\n this.info('server', 'Dev server stopped');\n break;\n case 'error':\n this.error('server', `Dev server error: ${info.error}`);\n break;\n }\n }\n\n tunnel(info: { port: number; url?: string; status: 'creating' | 'created' | 'closed' | 'error'; error?: string }): void {\n switch (info.status) {\n case 'creating':\n this.log('info', 'server', `Creating tunnel for port ${info.port}...`, undefined, true);\n break;\n case 'created':\n this.success('server', `Tunnel: ${info.url} → localhost:${info.port}`);\n break;\n case 'closed':\n this.info('server', 'Tunnel closed');\n break;\n case 'error':\n this.error('server', `Tunnel error: ${info.error}`);\n break;\n }\n }\n\n // ============================================\n // Build Access\n // ============================================\n\n getCurrentBuild(): BuildInfo | null {\n if (!this.currentBuildId) return null;\n return this.builds.get(this.currentBuildId) ?? null;\n }\n\n getAllBuilds(): BuildInfo[] {\n return Array.from(this.builds.values());\n }\n\n getBuild(buildId: string): BuildInfo | null {\n return this.builds.get(buildId) ?? null;\n }\n\n // ============================================\n // Buffer Access\n // ============================================\n\n getBuffer(): LogBuffer {\n return this.buffer;\n }\n\n // ============================================\n // Private Helpers\n // ============================================\n\n private log(\n level: LogLevel,\n category: LogCategory,\n message: string,\n data?: Record<string, unknown>,\n verbose: boolean = false,\n ): void {\n // Skip verbose logs when not in verbose mode\n if (verbose && !this.verbose) {\n return;\n }\n\n const entry: LogEntry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level,\n category,\n message,\n data,\n buildId: this.currentBuildId ?? undefined,\n verbose,\n };\n\n this.buffer.add(entry);\n\n if (!this.tuiMode) {\n this.printEntry(entry);\n }\n\n this.emit('log', entry);\n }\n\n private printEntry(entry: LogEntry): void {\n const time = new Date(entry.timestamp).toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n\n const levelStyles = {\n debug: chalk.gray,\n info: chalk.blue,\n success: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n };\n\n const levelIcons = {\n debug: ' ',\n info: '●',\n success: '✓',\n warn: '⚠',\n error: '✗',\n };\n\n const style = levelStyles[entry.level];\n const icon = levelIcons[entry.level];\n\n if (entry.toolName) {\n // Tool calls get special formatting\n console.log(\n chalk.gray(time),\n ' ',\n chalk.cyan('🔧'),\n chalk.white(entry.toolName),\n entry.toolArgs ? chalk.gray(entry.toolArgs) : '',\n );\n } else {\n // Regular log entries\n console.log(\n chalk.gray(time),\n style(icon),\n style(entry.message),\n );\n }\n }\n\n private truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength - 3) + '...';\n }\n\n private formatDuration(seconds: number): string {\n if (seconds < 60) {\n return `${Math.round(seconds)}s`;\n }\n const mins = Math.floor(seconds / 60);\n const secs = Math.round(seconds % 60);\n return `${mins}m ${secs}s`;\n }\n\n private generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n }\n}\n\n// Singleton instance\nlet instance: RunnerLogger | null = null;\n\nexport function getRunnerLogger(): RunnerLogger {\n if (!instance) {\n instance = new RunnerLogger();\n }\n return instance;\n}\n\nexport function createRunnerLogger(options?: RunnerLoggerOptions): RunnerLogger {\n instance = new RunnerLogger(options);\n return instance;\n}\n","/**\n * RunnerLogger Instance Management\n * \n * This module provides the singleton logger instance that can be:\n * - Configured at startup (via initRunnerLogger)\n * - Accessed from anywhere in the runner (via getLogger)\n * - Integrated with the TUI dashboard\n * \n * Note: Uses the same singleton as runner-logger.ts to ensure\n * all code shares the same instance.\n */\n\nimport { RunnerLogger, createRunnerLogger, getRunnerLogger, type RunnerLoggerOptions } from './runner-logger.js';\n\nlet loggerOptions: RunnerLoggerOptions = {};\nlet initialized = false;\n\n/**\n * Initialize the logger with options\n * Call this early in the runner startup\n * \n * If already initialized (e.g., by TUI before startRunner), returns the existing instance\n * to preserve event subscriptions.\n */\nexport function initRunnerLogger(options: RunnerLoggerOptions): RunnerLogger {\n if (initialized) {\n // Already initialized - return existing instance to preserve subscriptions\n // But update options if needed\n const logger = getRunnerLogger();\n if (options.verbose !== undefined) {\n logger.setVerbose(options.verbose);\n }\n return logger;\n }\n \n loggerOptions = options;\n initialized = true;\n return createRunnerLogger(options);\n}\n\n/**\n * Get the current logger instance\n * Uses the shared singleton from runner-logger.ts\n */\nexport function getLogger(): RunnerLogger {\n if (!initialized) {\n // Create with default options if not initialized\n return createRunnerLogger(loggerOptions);\n }\n return getRunnerLogger();\n}\n\n/**\n * Check if verbose mode is enabled\n */\nexport function isVerbose(): boolean {\n return getLogger().isVerbose();\n}\n\n/**\n * Set verbose mode at runtime\n */\nexport function setVerbose(verbose: boolean): void {\n getLogger().setVerbose(verbose);\n}\n\n/**\n * Check if TUI mode is enabled\n */\nexport function isTuiMode(): boolean {\n // Check options - tuiMode defaults to true\n return loggerOptions.tuiMode !== false;\n}\n\n// Re-export types for convenience\nexport type { RunnerLoggerOptions } from './runner-logger.js';\nexport type { LogEntry, BuildInfo, TodoItem, BuildCompletionStats } from './types.js';\n"],"names":["instance"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ // OpenBuilder CLI - Built with Rollup
2
+ import ora from 'ora';
3
+
4
+ /**
5
+ * Spinner utility for showing progress
6
+ */
7
+ class Spinner {
8
+ constructor() {
9
+ this.spinner = null;
10
+ }
11
+ start(text) {
12
+ this.spinner = ora(text).start();
13
+ }
14
+ succeed(text) {
15
+ if (this.spinner) {
16
+ this.spinner.succeed(text);
17
+ this.spinner = null;
18
+ }
19
+ }
20
+ fail(text) {
21
+ if (this.spinner) {
22
+ this.spinner.fail(text);
23
+ this.spinner = null;
24
+ }
25
+ }
26
+ warn(text) {
27
+ if (this.spinner) {
28
+ this.spinner.warn(text);
29
+ this.spinner = null;
30
+ }
31
+ }
32
+ info(text) {
33
+ if (this.spinner) {
34
+ this.spinner.info(text);
35
+ this.spinner = null;
36
+ }
37
+ }
38
+ text(text) {
39
+ if (this.spinner) {
40
+ this.spinner.text = text;
41
+ }
42
+ }
43
+ stop() {
44
+ if (this.spinner) {
45
+ this.spinner.stop();
46
+ this.spinner = null;
47
+ }
48
+ }
49
+ }
50
+ const spinner = new Spinner();
51
+
52
+ export { spinner as s };
53
+ //# sourceMappingURL=spinner-BJL9zWAJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-BJL9zWAJ.js","sources":["../../src/cli/utils/spinner.ts"],"sourcesContent":["import ora, { Ora } from 'ora';\n\n/**\n * Spinner utility for showing progress\n */\nexport class Spinner {\n private spinner: Ora | null = null;\n\n start(text: string): void {\n this.spinner = ora(text).start();\n }\n\n succeed(text?: string): void {\n if (this.spinner) {\n this.spinner.succeed(text);\n this.spinner = null;\n }\n }\n\n fail(text?: string): void {\n if (this.spinner) {\n this.spinner.fail(text);\n this.spinner = null;\n }\n }\n\n warn(text?: string): void {\n if (this.spinner) {\n this.spinner.warn(text);\n this.spinner = null;\n }\n }\n\n info(text?: string): void {\n if (this.spinner) {\n this.spinner.info(text);\n this.spinner = null;\n }\n }\n\n text(text: string): void {\n if (this.spinner) {\n this.spinner.text = text;\n }\n }\n\n stop(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n}\n\nexport const spinner = new Spinner();\n"],"names":[],"mappings":";;;AAEA;;AAEG;MACU,OAAO,CAAA;AAApB,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,OAAO,GAAe,IAAI;IA8CpC;AA5CE,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;IAClC;AAEA,IAAA,OAAO,CAAC,IAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AAEA,IAAA,IAAI,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AAEA,IAAA,IAAI,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AAEA,IAAA,IAAI,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AAEA,IAAA,IAAI,CAAC,IAAY,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI;QAC1B;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AACD;AAEM,MAAM,OAAO,GAAG,IAAI,OAAO;;;;"}