@hatchway/cli 0.50.53 → 0.50.55

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/cli/utils/banner.ts","../../src/cli/utils/error-handler.ts","../../src/cli/utils/shutdown-handler.ts","../../src/cli/index.ts"],"sourcesContent":["/**\n * ASCII art banner for Hatchway CLI\n */\n\n// ANSI color codes\nconst colors = {\n reset: '\\x1b[0m',\n purple: '\\x1b[35m',\n brightPurple: '\\x1b[95m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n};\n\n/**\n * Displays the Hatchway banner\n */\nexport function displayBanner(): void {\n const banner = `\n${colors.cyan}██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗${colors.brightPurple}██╗ ██╗ █████╗ ██╗ ██╗${colors.reset}\n${colors.cyan}██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║${colors.brightPurple}██║ ██║██╔══██╗╚██╗ ██╔╝${colors.reset}\n${colors.cyan}███████║███████║ ██║ ██║ ███████║${colors.brightPurple}██║ █╗ ██║███████║ ╚████╔╝ ${colors.reset}\n${colors.cyan}██╔══██║██╔══██║ ██║ ██║ ██╔══██║${colors.brightPurple}██║███╗██║██╔══██║ ╚██╔╝ ${colors.reset}\n${colors.cyan}██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║${colors.brightPurple}╚███╔███╔╝██║ ██║ ██║ ${colors.reset}\n${colors.cyan}╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${colors.brightPurple} ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${colors.reset}\n`;\n\n console.log(banner);\n}\n\n/**\n * Displays a \"Setup Complete\" celebration banner\n */\nexport function displaySetupComplete(): void {\n const banner = `\n${colors.cyan}██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗${colors.brightPurple}██╗ ██╗ █████╗ ██╗ ██╗${colors.reset}\n${colors.cyan}██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║${colors.brightPurple}██║ ██║██╔══██╗╚██╗ ██╔╝${colors.reset}\n${colors.cyan}███████║███████║ ██║ ██║ ███████║${colors.brightPurple}██║ █╗ ██║███████║ ╚████╔╝ ${colors.reset}\n${colors.cyan}██╔══██║██╔══██║ ██║ ██║ ██╔══██║${colors.brightPurple}██║███╗██║██╔══██║ ╚██╔╝ ${colors.reset}\n${colors.cyan}██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║${colors.brightPurple}╚███╔███╔╝██║ ██║ ██║ ${colors.reset}\n${colors.cyan}╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${colors.brightPurple} ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${colors.reset}\n${colors.white} Setup is complete! 🎉${colors.reset}\n`;\n\n console.log(banner);\n}\n","/**\n * Centralized error handling and formatting for CLI\n * Displays errors with context, suggestions, and proper formatting\n */\n\nimport chalk from 'chalk';\nimport { CLIError, ErrorCode } from './cli-error.js';\n\nexport interface ErrorHandlerOptions {\n debug?: boolean;\n exitOnError?: boolean;\n}\n\nexport class CLIErrorHandler {\n private debug: boolean;\n private exitOnError: boolean;\n\n constructor(options: ErrorHandlerOptions = {}) {\n this.debug = options.debug ?? process.env.DEBUG === '1';\n this.exitOnError = options.exitOnError ?? true;\n }\n\n /**\n * Main error handling method\n * Formats and displays error, then exits if fatal\n */\n handle(error: Error | CLIError): void {\n // Convert to CLIError if needed\n const cliError = error instanceof CLIError\n ? error\n : this.convertToCLIError(error);\n\n // Display the error\n this.display(cliError);\n\n // Exit if fatal and exitOnError is enabled\n if (cliError.fatal && this.exitOnError) {\n process.exit(cliError.getExitCode());\n }\n }\n\n /**\n * Display formatted error to console\n */\n private display(error: CLIError): void {\n console.error(); // Empty line for spacing\n\n // Error header\n console.error(chalk.red('✗'), chalk.bold(error.message));\n\n // Error code (in debug mode)\n if (this.debug) {\n console.error(chalk.dim(` Code: ${error.code}`));\n }\n\n // Context information\n if (error.context && Object.keys(error.context).length > 0) {\n console.error();\n console.error(chalk.dim(' Details:'));\n Object.entries(error.context).forEach(([key, value]) => {\n console.error(chalk.dim(` ${key}: ${this.formatValue(value)}`));\n });\n }\n\n // Suggestions\n if (error.suggestions.length > 0) {\n console.error();\n console.error(chalk.yellow(' Try this:'));\n error.suggestions.forEach((suggestion, index) => {\n console.error(chalk.yellow(` ${index + 1}. ${suggestion}`));\n });\n }\n\n // Documentation link\n if (error.docs) {\n console.error();\n console.error(chalk.dim(' Documentation:'), chalk.cyan(error.docs));\n }\n\n // Stack trace (debug mode only)\n if (this.debug && error.stack) {\n console.error();\n console.error(chalk.dim(' Stack trace:'));\n console.error(chalk.dim(error.stack));\n }\n\n // Original error cause (if available)\n if (this.debug && error.cause) {\n console.error();\n console.error(chalk.dim(' Caused by:'));\n console.error(chalk.dim(error.cause.message));\n if (error.cause.stack) {\n console.error(chalk.dim(error.cause.stack));\n }\n }\n\n console.error(); // Empty line for spacing\n }\n\n /**\n * Format context values for display\n */\n private formatValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return String(value);\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return 'null';\n if (Array.isArray(value)) return value.join(', ');\n return JSON.stringify(value);\n }\n\n /**\n * Convert generic errors to CLIError\n */\n private convertToCLIError(error: Error): CLIError {\n // Try to infer error code from message\n const code = this.inferErrorCode(error);\n\n return new CLIError({\n code,\n message: error.message || 'An unexpected error occurred',\n cause: error,\n suggestions: ['Run with --debug flag for more details'],\n });\n }\n\n /**\n * Infer error code from generic error\n */\n private inferErrorCode(error: Error): ErrorCode {\n const message = error.message.toLowerCase();\n\n if (message.includes('econnrefused') || message.includes('connection refused')) {\n return 'DB_CONNECTION_FAILED';\n }\n if (message.includes('eaddrinuse') || message.includes('address already in use')) {\n return 'PORT_IN_USE';\n }\n if (message.includes('eacces') || message.includes('permission denied')) {\n return 'PERMISSION_DENIED';\n }\n if (message.includes('enoent') || message.includes('no such file')) {\n return 'CONFIG_NOT_FOUND';\n }\n\n return 'UNKNOWN_ERROR';\n }\n\n /**\n * Wrap an async function with error handling\n * Usage: await errorHandler.wrap(() => someAsyncFunction(), 'Description')\n */\n async wrap<T>(\n fn: () => Promise<T>,\n context?: string\n ): Promise<T> {\n try {\n return await fn();\n } catch (error) {\n if (context && error instanceof CLIError) {\n // Create new CLIError with added context (can't modify readonly property)\n const enhancedError = new CLIError({\n code: error.code,\n message: error.message,\n context: { ...error.context, operation: context },\n suggestions: error.suggestions,\n fatal: error.fatal,\n cause: error.cause,\n docs: error.docs,\n });\n this.handle(enhancedError);\n throw enhancedError;\n }\n this.handle(error as Error);\n throw error; // Re-throw for callers that want to handle it\n }\n }\n\n /**\n * Enable or disable debug mode\n */\n setDebug(debug: boolean): void {\n this.debug = debug;\n }\n\n /**\n * Enable or disable exit on error\n */\n setExitOnError(exitOnError: boolean): void {\n this.exitOnError = exitOnError;\n }\n}\n\n/**\n * Global error handler instance\n * Can be configured once and used throughout the CLI\n */\nexport const globalErrorHandler = new CLIErrorHandler();\n\n/**\n * Setup global error handlers for uncaught errors\n */\nexport function setupGlobalErrorHandlers(): void {\n process.on('uncaughtException', (error: Error) => {\n console.error(chalk.red('\\n✗ Uncaught exception:'));\n globalErrorHandler.handle(error);\n });\n\n process.on('unhandledRejection', (reason: unknown) => {\n console.error(chalk.red('\\n✗ Unhandled promise rejection:'));\n const error = reason instanceof Error ? reason : new Error(String(reason));\n globalErrorHandler.handle(error);\n });\n}\n","/**\n * Graceful shutdown handler for CLI\n * Ensures proper cleanup when user presses Ctrl+C or process is terminated\n */\n\nimport chalk from 'chalk';\nimport { ChildProcess } from 'node:child_process';\n\ntype CleanupFunction = () => Promise<void> | void;\n\nexport interface ShutdownHandlerOptions {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Show shutdown messages (default: true) */\n verbose?: boolean;\n}\n\nexport class ShutdownHandler {\n private cleanupFunctions: CleanupFunction[] = [];\n private childProcesses: ChildProcess[] = [];\n private isShuttingDown = false;\n private timeout: number;\n private verbose: boolean;\n\n constructor(options: ShutdownHandlerOptions = {}) {\n this.timeout = options.timeout ?? 5000;\n this.verbose = options.verbose !== false;\n }\n\n /**\n * Register a cleanup function to run on shutdown\n */\n onShutdown(fn: CleanupFunction): void {\n this.cleanupFunctions.push(fn);\n }\n\n /**\n * Register a child process to kill on shutdown\n */\n registerProcess(process: ChildProcess): void {\n this.childProcesses.push(process);\n }\n\n /**\n * Setup signal handlers for graceful shutdown\n */\n setup(): void {\n // Handle Ctrl+C (SIGINT)\n process.on('SIGINT', () => {\n if (this.verbose) {\n console.log(); // New line after ^C\n console.log(chalk.yellow('⚠'), 'Received interrupt signal (Ctrl+C)');\n }\n this.shutdown('SIGINT');\n });\n\n // Handle termination (SIGTERM)\n process.on('SIGTERM', () => {\n if (this.verbose) {\n console.log(chalk.yellow('⚠'), 'Received termination signal (SIGTERM)');\n }\n this.shutdown('SIGTERM');\n });\n\n // Handle process exit\n process.on('exit', (code) => {\n if (this.verbose && code !== 0) {\n console.log(chalk.red('✗'), `Process exiting with code ${code}`);\n }\n });\n }\n\n /**\n * Execute graceful shutdown\n */\n private async shutdown(signal: string): Promise<void> {\n // Prevent multiple shutdown attempts\n if (this.isShuttingDown) {\n if (this.verbose) {\n console.log(chalk.dim(' Already shutting down...'));\n }\n return;\n }\n\n this.isShuttingDown = true;\n\n if (this.verbose) {\n console.log(chalk.cyan('ℹ'), 'Shutting down gracefully...');\n }\n\n // Set a timeout to force exit if cleanup takes too long\n const forceExitTimeout = setTimeout(() => {\n console.error(chalk.red('✗'), 'Shutdown timeout exceeded, forcing exit');\n process.exit(1);\n }, this.timeout);\n\n try {\n // 1. Kill child processes first\n if (this.childProcesses.length > 0) {\n if (this.verbose) {\n console.log(chalk.dim(' Stopping child processes...'));\n }\n await this.killChildProcesses();\n }\n\n // 2. Run cleanup functions\n if (this.cleanupFunctions.length > 0) {\n if (this.verbose) {\n console.log(chalk.dim(' Running cleanup tasks...'));\n }\n await this.runCleanup();\n }\n\n // 3. Success\n if (this.verbose) {\n console.log(chalk.green('✓'), 'Shutdown complete');\n }\n\n clearTimeout(forceExitTimeout);\n process.exit(0);\n } catch (error) {\n console.error(chalk.red('✗'), 'Error during shutdown:', error);\n clearTimeout(forceExitTimeout);\n process.exit(1);\n }\n }\n\n /**\n * Kill all registered child processes\n */\n private async killChildProcesses(): Promise<void> {\n const killPromises = this.childProcesses.map(async (child) => {\n if (!child.killed && child.pid) {\n try {\n // Try graceful SIGTERM first\n child.kill('SIGTERM');\n\n // Wait up to 2 seconds for graceful shutdown\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n // Force kill if still alive\n if (!child.killed) {\n child.kill('SIGKILL');\n }\n resolve();\n }, 2000);\n\n child.on('exit', () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n } catch (error) {\n // Process might already be dead\n if (this.verbose) {\n console.log(chalk.dim(` Could not kill process ${child.pid}`));\n }\n }\n }\n });\n\n await Promise.all(killPromises);\n }\n\n /**\n * Run all cleanup functions\n */\n private async runCleanup(): Promise<void> {\n const cleanupPromises = this.cleanupFunctions.map(async (fn) => {\n try {\n await fn();\n } catch (error) {\n if (this.verbose) {\n console.error(chalk.yellow('⚠'), 'Cleanup function failed:', error);\n }\n }\n });\n\n await Promise.all(cleanupPromises);\n }\n\n /**\n * Manually trigger shutdown (for testing or programmatic use)\n */\n async triggerShutdown(): Promise<void> {\n await this.shutdown('MANUAL');\n }\n\n /**\n * Remove a child process from tracking (e.g., after it exits naturally)\n */\n unregisterProcess(process: ChildProcess): void {\n const index = this.childProcesses.indexOf(process);\n if (index > -1) {\n this.childProcesses.splice(index, 1);\n }\n }\n}\n\n/**\n * Global shutdown handler instance\n */\nexport const globalShutdownHandler = new ShutdownHandler();\n\n/**\n * Helper to setup shutdown handler with common options\n */\nexport function setupShutdownHandler(options?: ShutdownHandlerOptions): ShutdownHandler {\n const handler = new ShutdownHandler(options);\n handler.setup();\n return handler;\n}\n","#!/usr/bin/env node\n// EARLY TUI DETECTION: Set SILENT_MODE before any modules are imported\n// This suppresses console output in TUI mode\n// Must be done before imports because file-logger.ts captures console at load time\n{\n const args = process.argv.slice(2);\n const isRunnerTUI = args[0] === 'runner' && !args.includes('--no-tui');\n const isRunTUI = args[0] === 'run';\n const isInitTUI = args[0] === 'init' && (args.includes('-y') || args.includes('--yes') || args.includes('--non-interactive'));\n const isNoArgsTUI = args.length === 0 || (args.length === 1 && args[0] === '--debug');\n \n if (isRunnerTUI || isRunTUI || isInitTUI || isNoArgsTUI) {\n process.env.SILENT_MODE = '1';\n }\n}\n\n// IMPORTANT: Ensure vendor packages are extracted before any imports\n// pnpm postinstall doesn't always run reliably for global installs from URLs\n//\n// NOTE: @hatchway/agent-core is bundled directly into dist/ by tsup,\n// so we don't need to check for it. But vendor packages (Sentry, etc.) still\n// need to be installed from the vendor/ tarballs.\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join, dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { execFileSync } from 'node:child_process';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Find the package root by looking for package.json\n// This works regardless of where the bundled code ends up (dist/, dist/cli/, etc.)\nfunction findPackageRoot(startDir: string): string {\n let dir = startDir;\n for (let i = 0; i < 5; i++) { // Max 5 levels up\n if (existsSync(join(dir, 'package.json'))) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) break; // Reached filesystem root\n dir = parent;\n }\n return startDir; // Fallback to start dir\n}\n\nconst packageRoot = findPackageRoot(__dirname);\n\n// Check if running in development mode (linked via pnpm/npm link)\n// Skip vendor install if we're in the monorepo - dependencies are handled by pnpm\nconst isLinkedDevelopment = packageRoot.includes('/hatchway/apps/runner');\n\n// Only run vendor install for production global installs\nif (!isLinkedDevelopment) {\n // Check if Sentry packages are missing and extract from vendor if needed\n // (agent-core is bundled by tsup, but Sentry packages come from vendor tarballs)\n const nodeModulesDir = dirname(packageRoot); // Go up from package to node_modules/@hatchway\n const sentryNodePath = join(nodeModulesDir, \"..\", \"@sentry\", \"node\");\n\n if (!existsSync(sentryNodePath)) {\n // Silently initialize vendor packages in background\n try {\n const installScript = join(packageRoot, \"scripts/install-vendor.js\");\n execFileSync(\"node\", [installScript], {\n cwd: packageRoot,\n stdio: \"pipe\" // Silent mode - output only shown if VERBOSE=1\n });\n } catch (error) {\n console.error(\"Failed to initialize vendor packages:\", error);\n process.exit(1);\n }\n }\n}\n\n// Sentry instrumentation is loaded via --import flag in bin/hatchway.js wrapper\n// This ensures instrumentation happens before any ESM module resolution\n\nimport { Command } from 'commander';\nimport { displayBanner } from './utils/banner.js';\nimport { setupGlobalErrorHandlers, globalErrorHandler } from './utils/error-handler.js';\nimport { setupShutdownHandler } from './utils/shutdown-handler.js';\n\n// Get package.json for version info\nconst packageJson = JSON.parse(\n readFileSync(join(packageRoot, 'package.json'), 'utf-8')\n);\n\n// Setup global error handlers for uncaught errors\nsetupGlobalErrorHandlers();\n\n// Setup graceful shutdown handlers for Ctrl+C\nexport const shutdownHandler = setupShutdownHandler({\n timeout: 5000,\n verbose: true,\n});\n\n// Check if we're running in TUI mode or version mode - skip banner if so\nconst args = process.argv.slice(2);\nconst isInitWithYes = args[0] === 'init' && (args.includes('-y') || args.includes('--yes') || args.includes('--non-interactive'));\nconst isNoArgs = args.length === 0 || (args.length === 1 && args[0] === '--debug');\nconst isRunCommand = args[0] === 'run'; // `hatchway run` uses TUI Dashboard\nconst isRunnerCommand = args[0] === 'runner' && !args.includes('--no-tui'); // `hatchway runner` uses TUI Dashboard (unless --no-tui)\nconst isVersionCommand = args.includes('--version') || args.includes('-V'); // Skip banner for version output\nconst isSkipBanner = process.env.HATCHWAY_SKIP_BANNER === '1'; // Skip banner after auto-update restart\nconst isTUIMode = isInitWithYes || isNoArgs || isRunCommand || isRunnerCommand;\nconst isSilentMode = isTUIMode || isVersionCommand || isSkipBanner;\n\n// Set SILENT_MODE for TUI/version to suppress all console output from other modules\n// This must be set early, before modules that use console.log are imported\nif (isSilentMode) {\n process.env.SILENT_MODE = '1';\n}\n\n// Auto-update check - do this BEFORE displaying banner to avoid double banners\n// All modes (TUI and CLI): full auto-update with restart\n// For version mode: skip entirely - just show version\nlet willAutoUpdate = false;\nif (!process.env.HATCHWAY_SKIP_UPDATE_CHECK && !isVersionCommand) {\n const { checkAndAutoUpdate } = await import('./utils/auto-update.js');\n \n try {\n // Show banner first for non-TUI modes\n if (!isSilentMode) {\n displayBanner();\n }\n \n // Full auto-update for all modes\n const didUpdate = await checkAndAutoUpdate(packageJson.version);\n if (didUpdate) {\n // CLI will be relaunched by auto-update, exit this process\n willAutoUpdate = true;\n process.exit(0);\n }\n } catch {\n // Auto-update failed silently, continue with current version\n }\n} else if (!isSilentMode) {\n // Update check skipped, show banner for CLI mode (but not version mode)\n displayBanner();\n}\n\nconst program = new Command();\n\nprogram\n .name('hatchway')\n .description('Hatchway CLI - AI App Builder')\n .version(packageJson.version)\n .option('--runner', 'Start runner only (connect to remote server)')\n .option('--debug', 'Enable debug mode with verbose error output')\n .hook('preAction', (thisCommand) => {\n // Enable debug mode if --debug flag is present\n const opts = thisCommand.opts();\n if (opts.debug) {\n globalErrorHandler.setDebug(true);\n process.env.DEBUG = '1';\n }\n })\n .action(async (options) => {\n try {\n // Default action when no subcommand is provided\n if (options.runner) {\n // Start runner only (legacy flag)\n const { runCommand } = await import('./commands/run.js');\n await runCommand({});\n } else {\n // Show TUI main menu\n const { mainTUICommand } = await import('./commands/main-tui.js');\n await mainTUICommand();\n }\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n// Import commands\nprogram\n .command('init')\n .description('Initialize workspace and configuration for local development')\n .option('--workspace <path>', 'Set workspace directory')\n .option('--url <url>', 'Set server URL (default: http://localhost:3000)')\n .option('--secret <secret>', 'Set shared secret')\n .option('--branch <branch>', 'Git branch to clone (default: main)')\n .option('--database [value]', 'Database setup: connection string, or omit to auto-setup Neon in -y mode')\n .option('-y, --yes', 'Accept all defaults (non-interactive mode)')\n .option('--non-interactive', 'Use defaults without prompts (alias for -y)')\n .action(async (options) => {\n try {\n const { initCommand } = await import('./commands/init.js');\n await initCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('run')\n .description('Start the full stack locally (web app + runner)')\n .option('-p, --port <port>', 'Web app port (default: 3000)')\n .option('--dev', 'Use development mode (hot reload, slower startup)')\n .option('--rebuild', 'Rebuild services before starting')\n .option('--no-local', 'Disable local mode (require authentication)')\n .option('--no-tui', 'Disable TUI dashboard, use plain text logs')\n .option('-v, --verbose', 'Enable verbose logging (show debug info)')\n .action(async (options) => {\n try {\n const { startCommand } = await import('./commands/start.js');\n await startCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('build')\n .description('Build all services without starting (useful while app is running)')\n .option('--watch', 'Watch for changes and rebuild automatically')\n .action(async (options) => {\n try {\n const { buildCommand } = await import('./commands/build.js');\n await buildCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('runner')\n .description('Start runner only (connect to Hatchway server)')\n .option('-u, --url <url>', 'Hatchway server URL (default: https://hatchway.sh)')\n .option('-w, --workspace <path>', 'Workspace directory (default: ~/hatchway-workspace)')\n .option('-i, --runner-id <id>', 'Runner identifier (default: system username)')\n .option('-s, --secret <secret>', 'Shared secret for authentication (required)')\n .option('-b, --broker <url>', 'WebSocket URL override (advanced, inferred from --url)')\n .option('-v, --verbose', 'Enable verbose logging')\n .option('-l, --local', 'Enable local mode (bypasses authentication)')\n .option('--no-tui', 'Disable TUI dashboard, use plain text logs')\n .action(async (options) => {\n try {\n const { runCommand } = await import('./commands/run.js');\n await runCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n\nprogram\n .command('config <action> [key] [value]')\n .description('Manage configuration (actions: get, set, list, path, validate, reset)')\n .action(async (action, key, value) => {\n try {\n const { configCommand } = await import('./commands/config.js');\n await configCommand(action, key, value);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n// Alias for config validate\nprogram\n .command('verify')\n .description('Verify configuration is valid (alias for config validate)')\n .action(async () => {\n try {\n const { configCommand } = await import('./commands/config.js');\n await configCommand('validate');\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('status')\n .description('Show runner status and configuration')\n .action(async () => {\n try {\n const { statusCommand } = await import('./commands/status.js');\n await statusCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('cleanup')\n .description('Clean up projects and resources')\n .option('--project <slug>', 'Delete specific project')\n .option('--all', 'Clean all projects in workspace')\n .option('--tunnels', 'Close all active tunnels')\n .option('--processes', 'Kill all dev servers')\n .action(async (options) => {\n try {\n const { cleanupCommand } = await import('./commands/cleanup.js');\n await cleanupCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('database')\n .alias('db')\n .description('Set up a new database and initialize schema')\n .action(async () => {\n try {\n const { databaseCommand } = await import('./commands/database.js');\n await databaseCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('upgrade')\n .description('Upgrade to latest version (preserves configuration)')\n .option('--branch <branch>', 'Upgrade to specific branch (default: main)')\n .option('--force', 'Skip safety checks (uncommitted changes)')\n .action(async (options) => {\n try {\n const { upgradeCommand } = await import('./commands/upgrade.js');\n await upgradeCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('login')\n .description('Authenticate with Hatchway via OAuth (GitHub/Sentry)')\n .option('-u, --url <url>', 'Hatchway server URL (default: https://hatchway.sh)')\n .option('-f, --force', 'Force re-authentication even if already logged in')\n .action(async (options) => {\n try {\n const { loginCommand } = await import('./commands/login.js');\n await loginCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('logout')\n .description('Clear stored authentication credentials')\n .action(async () => {\n try {\n const { logoutCommand } = await import('./commands/logout.js');\n await logoutCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram.parse();"],"names":["__filename","__dirname"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/cli/utils/banner.ts","../../src/cli/utils/error-handler.ts","../../src/cli/utils/shutdown-handler.ts","../../src/cli/index.ts"],"sourcesContent":["/**\n * ASCII art banner for Hatchway CLI\n */\n\n// ANSI color codes\nconst colors = {\n reset: '\\x1b[0m',\n purple: '\\x1b[35m',\n brightPurple: '\\x1b[95m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n};\n\n/**\n * Displays the Hatchway banner\n */\nexport function displayBanner(): void {\n const banner = `\n${colors.cyan}██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗${colors.brightPurple}██╗ ██╗ █████╗ ██╗ ██╗${colors.reset}\n${colors.cyan}██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║${colors.brightPurple}██║ ██║██╔══██╗╚██╗ ██╔╝${colors.reset}\n${colors.cyan}███████║███████║ ██║ ██║ ███████║${colors.brightPurple}██║ █╗ ██║███████║ ╚████╔╝ ${colors.reset}\n${colors.cyan}██╔══██║██╔══██║ ██║ ██║ ██╔══██║${colors.brightPurple}██║███╗██║██╔══██║ ╚██╔╝ ${colors.reset}\n${colors.cyan}██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║${colors.brightPurple}╚███╔███╔╝██║ ██║ ██║ ${colors.reset}\n${colors.cyan}╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${colors.brightPurple} ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${colors.reset}\n`;\n\n console.log(banner);\n}\n\n/**\n * Displays a \"Setup Complete\" celebration banner\n */\nexport function displaySetupComplete(): void {\n const banner = `\n${colors.cyan}██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗${colors.brightPurple}██╗ ██╗ █████╗ ██╗ ██╗${colors.reset}\n${colors.cyan}██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║${colors.brightPurple}██║ ██║██╔══██╗╚██╗ ██╔╝${colors.reset}\n${colors.cyan}███████║███████║ ██║ ██║ ███████║${colors.brightPurple}██║ █╗ ██║███████║ ╚████╔╝ ${colors.reset}\n${colors.cyan}██╔══██║██╔══██║ ██║ ██║ ██╔══██║${colors.brightPurple}██║███╗██║██╔══██║ ╚██╔╝ ${colors.reset}\n${colors.cyan}██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║${colors.brightPurple}╚███╔███╔╝██║ ██║ ██║ ${colors.reset}\n${colors.cyan}╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${colors.brightPurple} ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${colors.reset}\n${colors.white} Setup is complete! 🎉${colors.reset}\n`;\n\n console.log(banner);\n}\n","/**\n * Centralized error handling and formatting for CLI\n * Displays errors with context, suggestions, and proper formatting\n */\n\nimport chalk from 'chalk';\nimport { CLIError, ErrorCode } from './cli-error.js';\n\nexport interface ErrorHandlerOptions {\n debug?: boolean;\n exitOnError?: boolean;\n}\n\nexport class CLIErrorHandler {\n private debug: boolean;\n private exitOnError: boolean;\n\n constructor(options: ErrorHandlerOptions = {}) {\n this.debug = options.debug ?? process.env.DEBUG === '1';\n this.exitOnError = options.exitOnError ?? true;\n }\n\n /**\n * Main error handling method\n * Formats and displays error, then exits if fatal\n */\n handle(error: Error | CLIError): void {\n // Convert to CLIError if needed\n const cliError = error instanceof CLIError\n ? error\n : this.convertToCLIError(error);\n\n // Display the error\n this.display(cliError);\n\n // Exit if fatal and exitOnError is enabled\n if (cliError.fatal && this.exitOnError) {\n process.exit(cliError.getExitCode());\n }\n }\n\n /**\n * Display formatted error to console\n */\n private display(error: CLIError): void {\n console.error(); // Empty line for spacing\n\n // Error header\n console.error(chalk.red('✗'), chalk.bold(error.message));\n\n // Error code (in debug mode)\n if (this.debug) {\n console.error(chalk.dim(` Code: ${error.code}`));\n }\n\n // Context information\n if (error.context && Object.keys(error.context).length > 0) {\n console.error();\n console.error(chalk.dim(' Details:'));\n Object.entries(error.context).forEach(([key, value]) => {\n console.error(chalk.dim(` ${key}: ${this.formatValue(value)}`));\n });\n }\n\n // Suggestions\n if (error.suggestions.length > 0) {\n console.error();\n console.error(chalk.yellow(' Try this:'));\n error.suggestions.forEach((suggestion, index) => {\n console.error(chalk.yellow(` ${index + 1}. ${suggestion}`));\n });\n }\n\n // Documentation link\n if (error.docs) {\n console.error();\n console.error(chalk.dim(' Documentation:'), chalk.cyan(error.docs));\n }\n\n // Stack trace (debug mode only)\n if (this.debug && error.stack) {\n console.error();\n console.error(chalk.dim(' Stack trace:'));\n console.error(chalk.dim(error.stack));\n }\n\n // Original error cause (if available)\n if (this.debug && error.cause) {\n console.error();\n console.error(chalk.dim(' Caused by:'));\n console.error(chalk.dim(error.cause.message));\n if (error.cause.stack) {\n console.error(chalk.dim(error.cause.stack));\n }\n }\n\n console.error(); // Empty line for spacing\n }\n\n /**\n * Format context values for display\n */\n private formatValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return String(value);\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return 'null';\n if (Array.isArray(value)) return value.join(', ');\n return JSON.stringify(value);\n }\n\n /**\n * Convert generic errors to CLIError\n */\n private convertToCLIError(error: Error): CLIError {\n // Try to infer error code from message\n const code = this.inferErrorCode(error);\n\n return new CLIError({\n code,\n message: error.message || 'An unexpected error occurred',\n cause: error,\n suggestions: ['Run with --debug flag for more details'],\n });\n }\n\n /**\n * Infer error code from generic error\n */\n private inferErrorCode(error: Error): ErrorCode {\n const message = error.message.toLowerCase();\n\n if (message.includes('econnrefused') || message.includes('connection refused')) {\n return 'DB_CONNECTION_FAILED';\n }\n if (message.includes('eaddrinuse') || message.includes('address already in use')) {\n return 'PORT_IN_USE';\n }\n if (message.includes('eacces') || message.includes('permission denied')) {\n return 'PERMISSION_DENIED';\n }\n if (message.includes('enoent') || message.includes('no such file')) {\n return 'CONFIG_NOT_FOUND';\n }\n\n return 'UNKNOWN_ERROR';\n }\n\n /**\n * Wrap an async function with error handling\n * Usage: await errorHandler.wrap(() => someAsyncFunction(), 'Description')\n */\n async wrap<T>(\n fn: () => Promise<T>,\n context?: string\n ): Promise<T> {\n try {\n return await fn();\n } catch (error) {\n if (context && error instanceof CLIError) {\n // Create new CLIError with added context (can't modify readonly property)\n const enhancedError = new CLIError({\n code: error.code,\n message: error.message,\n context: { ...error.context, operation: context },\n suggestions: error.suggestions,\n fatal: error.fatal,\n cause: error.cause,\n docs: error.docs,\n });\n this.handle(enhancedError);\n throw enhancedError;\n }\n this.handle(error as Error);\n throw error; // Re-throw for callers that want to handle it\n }\n }\n\n /**\n * Enable or disable debug mode\n */\n setDebug(debug: boolean): void {\n this.debug = debug;\n }\n\n /**\n * Enable or disable exit on error\n */\n setExitOnError(exitOnError: boolean): void {\n this.exitOnError = exitOnError;\n }\n}\n\n/**\n * Global error handler instance\n * Can be configured once and used throughout the CLI\n */\nexport const globalErrorHandler = new CLIErrorHandler();\n\n/**\n * Setup global error handlers for uncaught errors\n */\nexport function setupGlobalErrorHandlers(): void {\n process.on('uncaughtException', (error: Error) => {\n console.error(chalk.red('\\n✗ Uncaught exception:'));\n globalErrorHandler.handle(error);\n });\n\n process.on('unhandledRejection', (reason: unknown) => {\n console.error(chalk.red('\\n✗ Unhandled promise rejection:'));\n const error = reason instanceof Error ? reason : new Error(String(reason));\n globalErrorHandler.handle(error);\n });\n}\n","/**\n * Graceful shutdown handler for CLI\n * Ensures proper cleanup when user presses Ctrl+C or process is terminated\n */\n\nimport chalk from 'chalk';\nimport { ChildProcess } from 'node:child_process';\n\ntype CleanupFunction = () => Promise<void> | void;\n\nexport interface ShutdownHandlerOptions {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Show shutdown messages (default: true) */\n verbose?: boolean;\n}\n\nexport class ShutdownHandler {\n private cleanupFunctions: CleanupFunction[] = [];\n private childProcesses: ChildProcess[] = [];\n private isShuttingDown = false;\n private timeout: number;\n private verbose: boolean;\n\n constructor(options: ShutdownHandlerOptions = {}) {\n this.timeout = options.timeout ?? 5000;\n this.verbose = options.verbose !== false;\n }\n\n /**\n * Register a cleanup function to run on shutdown\n */\n onShutdown(fn: CleanupFunction): void {\n this.cleanupFunctions.push(fn);\n }\n\n /**\n * Register a child process to kill on shutdown\n */\n registerProcess(process: ChildProcess): void {\n this.childProcesses.push(process);\n }\n\n /**\n * Setup signal handlers for graceful shutdown\n */\n setup(): void {\n // Handle Ctrl+C (SIGINT)\n process.on('SIGINT', () => {\n if (this.verbose) {\n console.log(); // New line after ^C\n console.log(chalk.yellow('⚠'), 'Received interrupt signal (Ctrl+C)');\n }\n this.shutdown('SIGINT');\n });\n\n // Handle termination (SIGTERM)\n process.on('SIGTERM', () => {\n if (this.verbose) {\n console.log(chalk.yellow('⚠'), 'Received termination signal (SIGTERM)');\n }\n this.shutdown('SIGTERM');\n });\n\n // Handle process exit\n process.on('exit', (code) => {\n if (this.verbose && code !== 0) {\n console.log(chalk.red('✗'), `Process exiting with code ${code}`);\n }\n });\n }\n\n /**\n * Execute graceful shutdown\n */\n private async shutdown(signal: string): Promise<void> {\n // Prevent multiple shutdown attempts\n if (this.isShuttingDown) {\n if (this.verbose) {\n console.log(chalk.dim(' Already shutting down...'));\n }\n return;\n }\n\n this.isShuttingDown = true;\n\n if (this.verbose) {\n console.log(chalk.cyan('ℹ'), 'Shutting down gracefully...');\n }\n\n // Set a timeout to force exit if cleanup takes too long\n const forceExitTimeout = setTimeout(() => {\n console.error(chalk.red('✗'), 'Shutdown timeout exceeded, forcing exit');\n process.exit(1);\n }, this.timeout);\n\n try {\n // 1. Kill child processes first\n if (this.childProcesses.length > 0) {\n if (this.verbose) {\n console.log(chalk.dim(' Stopping child processes...'));\n }\n await this.killChildProcesses();\n }\n\n // 2. Run cleanup functions\n if (this.cleanupFunctions.length > 0) {\n if (this.verbose) {\n console.log(chalk.dim(' Running cleanup tasks...'));\n }\n await this.runCleanup();\n }\n\n // 3. Success\n if (this.verbose) {\n console.log(chalk.green('✓'), 'Shutdown complete');\n }\n\n clearTimeout(forceExitTimeout);\n process.exit(0);\n } catch (error) {\n console.error(chalk.red('✗'), 'Error during shutdown:', error);\n clearTimeout(forceExitTimeout);\n process.exit(1);\n }\n }\n\n /**\n * Kill all registered child processes\n */\n private async killChildProcesses(): Promise<void> {\n const killPromises = this.childProcesses.map(async (child) => {\n if (!child.killed && child.pid) {\n try {\n // Try graceful SIGTERM first\n child.kill('SIGTERM');\n\n // Wait up to 2 seconds for graceful shutdown\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n // Force kill if still alive\n if (!child.killed) {\n child.kill('SIGKILL');\n }\n resolve();\n }, 2000);\n\n child.on('exit', () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n } catch (error) {\n // Process might already be dead\n if (this.verbose) {\n console.log(chalk.dim(` Could not kill process ${child.pid}`));\n }\n }\n }\n });\n\n await Promise.all(killPromises);\n }\n\n /**\n * Run all cleanup functions\n */\n private async runCleanup(): Promise<void> {\n const cleanupPromises = this.cleanupFunctions.map(async (fn) => {\n try {\n await fn();\n } catch (error) {\n if (this.verbose) {\n console.error(chalk.yellow('⚠'), 'Cleanup function failed:', error);\n }\n }\n });\n\n await Promise.all(cleanupPromises);\n }\n\n /**\n * Manually trigger shutdown (for testing or programmatic use)\n */\n async triggerShutdown(): Promise<void> {\n await this.shutdown('MANUAL');\n }\n\n /**\n * Remove a child process from tracking (e.g., after it exits naturally)\n */\n unregisterProcess(process: ChildProcess): void {\n const index = this.childProcesses.indexOf(process);\n if (index > -1) {\n this.childProcesses.splice(index, 1);\n }\n }\n}\n\n/**\n * Global shutdown handler instance\n */\nexport const globalShutdownHandler = new ShutdownHandler();\n\n/**\n * Helper to setup shutdown handler with common options\n */\nexport function setupShutdownHandler(options?: ShutdownHandlerOptions): ShutdownHandler {\n const handler = new ShutdownHandler(options);\n handler.setup();\n return handler;\n}\n","#!/usr/bin/env node\n// NOTE: SILENT_MODE is now set AFTER TUI rendering starts, not here at the top.\n// This allows pre-TUI messages (errors, OAuth prompts, etc.) to be visible.\n// See start.ts, run.ts, and main-tui.tsx for where SILENT_MODE is set.\n\n// IMPORTANT: Ensure vendor packages are extracted before any imports\n// pnpm postinstall doesn't always run reliably for global installs from URLs\n//\n// NOTE: @hatchway/agent-core is bundled directly into dist/ by tsup,\n// so we don't need to check for it. But vendor packages (Sentry, etc.) still\n// need to be installed from the vendor/ tarballs.\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join, dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { execFileSync } from 'node:child_process';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Find the package root by looking for package.json\n// This works regardless of where the bundled code ends up (dist/, dist/cli/, etc.)\nfunction findPackageRoot(startDir: string): string {\n let dir = startDir;\n for (let i = 0; i < 5; i++) { // Max 5 levels up\n if (existsSync(join(dir, 'package.json'))) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) break; // Reached filesystem root\n dir = parent;\n }\n return startDir; // Fallback to start dir\n}\n\nconst packageRoot = findPackageRoot(__dirname);\n\n// Check if running in development mode (linked via pnpm/npm link)\n// Skip vendor install if we're in the monorepo - dependencies are handled by pnpm\nconst isLinkedDevelopment = packageRoot.includes('/hatchway/apps/runner');\n\n// Only run vendor install for production global installs\nif (!isLinkedDevelopment) {\n // Check if Sentry packages are missing and extract from vendor if needed\n // (agent-core is bundled by tsup, but Sentry packages come from vendor tarballs)\n const nodeModulesDir = dirname(packageRoot); // Go up from package to node_modules/@hatchway\n const sentryNodePath = join(nodeModulesDir, \"..\", \"@sentry\", \"node\");\n\n if (!existsSync(sentryNodePath)) {\n // Silently initialize vendor packages in background\n try {\n const installScript = join(packageRoot, \"scripts/install-vendor.js\");\n execFileSync(\"node\", [installScript], {\n cwd: packageRoot,\n stdio: \"pipe\" // Silent mode - output only shown if VERBOSE=1\n });\n } catch (error) {\n console.error(\"Failed to initialize vendor packages:\", error);\n process.exit(1);\n }\n }\n}\n\n// Sentry instrumentation is loaded via --import flag in bin/hatchway.js wrapper\n// This ensures instrumentation happens before any ESM module resolution\n\nimport { Command } from 'commander';\nimport { displayBanner } from './utils/banner.js';\nimport { setupGlobalErrorHandlers, globalErrorHandler } from './utils/error-handler.js';\nimport { setupShutdownHandler } from './utils/shutdown-handler.js';\n\n// Get package.json for version info\nconst packageJson = JSON.parse(\n readFileSync(join(packageRoot, 'package.json'), 'utf-8')\n);\n\n// Setup global error handlers for uncaught errors\nsetupGlobalErrorHandlers();\n\n// Setup graceful shutdown handlers for Ctrl+C\nexport const shutdownHandler = setupShutdownHandler({\n timeout: 5000,\n verbose: true,\n});\n\n// Check if we're running in TUI mode or version mode - skip banner if so\nconst args = process.argv.slice(2);\nconst isInitWithYes = args[0] === 'init' && (args.includes('-y') || args.includes('--yes') || args.includes('--non-interactive'));\nconst isNoArgs = args.length === 0 || (args.length === 1 && args[0] === '--debug');\nconst isRunCommand = args[0] === 'run'; // `hatchway run` uses TUI Dashboard\nconst isRunnerCommand = args[0] === 'runner' && !args.includes('--no-tui'); // `hatchway runner` uses TUI Dashboard (unless --no-tui)\nconst isVersionCommand = args.includes('--version') || args.includes('-V'); // Skip banner for version output\nconst isSkipBanner = process.env.HATCHWAY_SKIP_BANNER === '1'; // Skip banner after auto-update restart\nconst isTUIMode = isInitWithYes || isNoArgs || isRunCommand || isRunnerCommand;\nconst isSilentMode = isTUIMode || isVersionCommand || isSkipBanner;\n\n// NOTE: SILENT_MODE is NOT set here anymore.\n// It's set right before TUI rendering starts in the respective command files.\n// This allows pre-TUI messages (errors, OAuth prompts, etc.) to be visible.\n\n// Auto-update check - do this BEFORE displaying banner to avoid double banners\n// All modes (TUI and CLI): full auto-update with restart\n// For version mode: skip entirely - just show version\nlet willAutoUpdate = false;\nif (!process.env.HATCHWAY_SKIP_UPDATE_CHECK && !isVersionCommand) {\n const { checkAndAutoUpdate } = await import('./utils/auto-update.js');\n \n try {\n // Show banner first for non-TUI modes\n if (!isSilentMode) {\n displayBanner();\n }\n \n // Full auto-update for all modes\n const didUpdate = await checkAndAutoUpdate(packageJson.version);\n if (didUpdate) {\n // CLI will be relaunched by auto-update, exit this process\n willAutoUpdate = true;\n process.exit(0);\n }\n } catch {\n // Auto-update failed silently, continue with current version\n }\n} else if (!isSilentMode) {\n // Update check skipped, show banner for CLI mode (but not version mode)\n displayBanner();\n}\n\nconst program = new Command();\n\nprogram\n .name('hatchway')\n .description('Hatchway CLI - AI App Builder')\n .version(packageJson.version)\n .option('--runner', 'Start runner only (connect to remote server)')\n .option('--debug', 'Enable debug mode with verbose error output')\n .hook('preAction', (thisCommand) => {\n // Enable debug mode if --debug flag is present\n const opts = thisCommand.opts();\n if (opts.debug) {\n globalErrorHandler.setDebug(true);\n process.env.DEBUG = '1';\n }\n })\n .action(async (options) => {\n try {\n // Default action when no subcommand is provided\n if (options.runner) {\n // Start runner only (legacy flag)\n const { runCommand } = await import('./commands/run.js');\n await runCommand({});\n } else {\n // Show TUI main menu\n const { mainTUICommand } = await import('./commands/main-tui.js');\n await mainTUICommand();\n }\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n// Import commands\nprogram\n .command('init')\n .description('Initialize workspace and configuration for local development')\n .option('--workspace <path>', 'Set workspace directory')\n .option('--url <url>', 'Set server URL (default: http://localhost:3000)')\n .option('--secret <secret>', 'Set shared secret')\n .option('--branch <branch>', 'Git branch to clone (default: main)')\n .option('--database [value]', 'Database setup: connection string, or omit to auto-setup Neon in -y mode')\n .option('-y, --yes', 'Accept all defaults (non-interactive mode)')\n .option('--non-interactive', 'Use defaults without prompts (alias for -y)')\n .action(async (options) => {\n try {\n const { initCommand } = await import('./commands/init.js');\n await initCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('run')\n .description('Start the full stack locally (web app + runner)')\n .option('-p, --port <port>', 'Web app port (default: 3000)')\n .option('--dev', 'Use development mode (hot reload, slower startup)')\n .option('--rebuild', 'Rebuild services before starting')\n .option('--no-local', 'Disable local mode (require authentication)')\n .option('--no-tui', 'Disable TUI dashboard, use plain text logs')\n .option('-v, --verbose', 'Enable verbose logging (show debug info)')\n .action(async (options) => {\n try {\n const { startCommand } = await import('./commands/start.js');\n await startCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('build')\n .description('Build all services without starting (useful while app is running)')\n .option('--watch', 'Watch for changes and rebuild automatically')\n .action(async (options) => {\n try {\n const { buildCommand } = await import('./commands/build.js');\n await buildCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('runner')\n .description('Start runner only (connect to Hatchway server)')\n .option('-u, --url <url>', 'Hatchway server URL (default: https://hatchway.sh)')\n .option('-w, --workspace <path>', 'Workspace directory (default: ~/hatchway-workspace)')\n .option('-i, --runner-id <id>', 'Runner identifier (default: system username)')\n .option('-s, --secret <secret>', 'Shared secret for authentication (required)')\n .option('-b, --broker <url>', 'WebSocket URL override (advanced, inferred from --url)')\n .option('-v, --verbose', 'Enable verbose logging')\n .option('-l, --local', 'Enable local mode (bypasses authentication)')\n .option('--no-tui', 'Disable TUI dashboard, use plain text logs')\n .action(async (options) => {\n try {\n const { runCommand } = await import('./commands/run.js');\n await runCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n\nprogram\n .command('config <action> [key] [value]')\n .description('Manage configuration (actions: get, set, list, path, validate, reset)')\n .action(async (action, key, value) => {\n try {\n const { configCommand } = await import('./commands/config.js');\n await configCommand(action, key, value);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\n// Alias for config validate\nprogram\n .command('verify')\n .description('Verify configuration is valid (alias for config validate)')\n .action(async () => {\n try {\n const { configCommand } = await import('./commands/config.js');\n await configCommand('validate');\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('status')\n .description('Show runner status and configuration')\n .action(async () => {\n try {\n const { statusCommand } = await import('./commands/status.js');\n await statusCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('cleanup')\n .description('Clean up projects and resources')\n .option('--project <slug>', 'Delete specific project')\n .option('--all', 'Clean all projects in workspace')\n .option('--tunnels', 'Close all active tunnels')\n .option('--processes', 'Kill all dev servers')\n .action(async (options) => {\n try {\n const { cleanupCommand } = await import('./commands/cleanup.js');\n await cleanupCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('database')\n .alias('db')\n .description('Set up a new database and initialize schema')\n .action(async () => {\n try {\n const { databaseCommand } = await import('./commands/database.js');\n await databaseCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('upgrade')\n .description('Upgrade to latest version (preserves configuration)')\n .option('--branch <branch>', 'Upgrade to specific branch (default: main)')\n .option('--force', 'Skip safety checks (uncommitted changes)')\n .action(async (options) => {\n try {\n const { upgradeCommand } = await import('./commands/upgrade.js');\n await upgradeCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('login')\n .description('Authenticate with Hatchway via OAuth (GitHub/Sentry)')\n .option('-u, --url <url>', 'Hatchway server URL (default: https://hatchway.sh)')\n .option('-f, --force', 'Force re-authentication even if already logged in')\n .action(async (options) => {\n try {\n const { loginCommand } = await import('./commands/login.js');\n await loginCommand(options);\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram\n .command('logout')\n .description('Clear stored authentication credentials')\n .action(async () => {\n try {\n const { logoutCommand } = await import('./commands/logout.js');\n await logoutCommand();\n } catch (error) {\n globalErrorHandler.handle(error as Error);\n }\n });\n\nprogram.parse();"],"names":["__filename","__dirname"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatchway/cli",
3
- "version": "0.50.53",
3
+ "version": "0.50.55",
4
4
  "description": "Hatchway CLI - Build AI-powered apps with Claude. Just run: npx @hatchway/cli runner",
5
5
  "private": false,
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-setup-U31oEs90.js","sources":["../../src/cli/utils/database-setup.ts"],"sourcesContent":["import { spawn, execFileSync } from 'node:child_process';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { logger } from './logger.js';\nimport { spinner } from './spinner.js';\nimport { prompts } from './prompts.js';\n\n/**\n * Read DATABASE_URL from .env file in monorepo root\n */\nexport async function readDatabaseUrlFromEnv(monorepoPath: string): Promise<string | null> {\n const envPath = join(monorepoPath, '.env');\n\n if (!existsSync(envPath)) {\n return null;\n }\n\n try {\n const content = await readFile(envPath, 'utf-8');\n const match = content.match(/^DATABASE_URL\\s*=\\s*['\"]?([^'\"\\n]+)['\"]?/m);\n return match ? match[1] : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Clear DATABASE_URL from .env file (removes stale value)\n */\nexport async function clearDatabaseUrlFromEnv(monorepoPath: string): Promise<void> {\n const envPath = join(monorepoPath, '.env');\n\n if (!existsSync(envPath)) {\n return;\n }\n\n try {\n const content = await readFile(envPath, 'utf-8');\n const updated = content\n .split('\\n')\n .filter(line => !line.trim().startsWith('DATABASE_URL'))\n .join('\\n');\n await writeFile(envPath, updated, 'utf-8');\n } catch (error) {\n logger.warn('Could not clear DATABASE_URL from .env');\n }\n}\n\n/**\n * Run neondb setup to create a database and get the connection string\n * Returns the DATABASE_URL if successful\n */\nexport async function setupDatabase(monorepoPath: string, silent: boolean = false): Promise<string | null> {\n // Clear any stale DATABASE_URL first\n await clearDatabaseUrlFromEnv(monorepoPath);\n\n if (!silent) {\n spinner.start('Setting up Neon PostgreSQL database...');\n }\n\n return new Promise((resolve) => {\n const proc = spawn('npx', ['neondb', '-y'], {\n cwd: monorepoPath, // Run in monorepo root so .env is created there\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n let databaseUrl: string | null = null;\n let output = '';\n\n proc.stdout?.on('data', (data) => {\n const text = data.toString();\n output += text;\n\n // Look for DATABASE_URL in the output\n const match = text.match(/DATABASE_URL[=:]?\\s*['\"]?([^'\"\\s]+)['\"]?/);\n if (match && match[1]) {\n databaseUrl = match[1];\n }\n\n // Also check for postgres:// connection strings\n const connMatch = text.match(/(postgres(?:ql)?:\\/\\/[^\\s'\"]+)/);\n if (connMatch && connMatch[1]) {\n databaseUrl = connMatch[1];\n }\n });\n\n proc.stderr?.on('data', (data) => {\n const text = data.toString();\n // Only log actual errors (and only if not silent)\n if (!silent && (text.includes('error') || text.includes('Error'))) {\n logger.debug(text.trim());\n }\n });\n\n proc.on('exit', async (code) => {\n if (code === 0) {\n // Try to read DATABASE_URL from .env file (neondb writes it there)\n const urlFromEnv = await readDatabaseUrlFromEnv(monorepoPath);\n\n if (urlFromEnv) {\n databaseUrl = urlFromEnv;\n if (!silent) {\n spinner.succeed('Database created successfully');\n }\n resolve(databaseUrl);\n } else if (databaseUrl) {\n // Fallback to what we parsed from output\n if (!silent) {\n spinner.succeed('Database created successfully');\n }\n resolve(databaseUrl);\n } else {\n if (!silent) {\n spinner.warn('Database command completed but DATABASE_URL not found');\n logger.info('Check .env file in monorepo root for DATABASE_URL');\n }\n resolve(null);\n }\n } else {\n if (!silent) {\n spinner.fail('Failed to create database');\n }\n resolve(null);\n }\n });\n\n proc.on('error', (error) => {\n if (!silent) {\n spinner.fail('Failed to run neondb');\n logger.error(`Error: ${error.message}`);\n }\n resolve(null);\n });\n });\n}\n\n/**\n * Check if neondb is available\n */\nexport async function isNeondbAvailable(): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn('npx', ['neondb', '--version'], {\n stdio: 'ignore',\n shell: true,\n });\n\n proc.on('exit', (code) => {\n resolve(code === 0);\n });\n\n proc.on('error', () => {\n resolve(false);\n });\n });\n}\n\n/**\n * Push database schema using drizzle-kit\n */\nexport async function pushDatabaseSchema(monorepoPath: string, databaseUrl: string, silent: boolean = false): Promise<boolean> {\n const { join } = await import('path');\n const { existsSync } = await import('fs');\n\n const hatchwayAppPath = join(monorepoPath, 'apps/hatchway');\n const configPath = join(hatchwayAppPath, 'drizzle.config.ts');\n\n // Verify paths exist\n if (!existsSync(hatchwayAppPath)) {\n if (!silent) {\n logger.error(`Directory not found: ${hatchwayAppPath}`);\n }\n return false;\n }\n\n if (!existsSync(configPath)) {\n if (!silent) {\n logger.error(`Drizzle config not found: ${configPath}`);\n }\n return false;\n }\n\n if (!silent) {\n spinner.start('Ensuring hatchway dependencies are installed...');\n }\n\n try {\n execFileSync('pnpm', ['install'], {\n cwd: hatchwayAppPath,\n stdio: 'pipe',\n });\n execFileSync('pnpm', ['--filter', '@hatchway/agent-core', 'build'], {\n cwd: monorepoPath,\n stdio: 'pipe',\n });\n if (!silent) {\n spinner.succeed('Dependencies ready');\n }\n } catch (error) {\n if (!silent) {\n spinner.warn('Dependency installation failed, trying schema push anyway');\n }\n }\n\n if (!silent) {\n spinner.start('Initializing database schema (this may take a moment)...');\n }\n\n return new Promise((resolve) => {\n const proc = spawn('npx', ['drizzle-kit', 'push', '--config=drizzle.config.ts'], {\n cwd: hatchwayAppPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env: {\n ...process.env,\n DATABASE_URL: databaseUrl, // Ensure drizzle-kit has access\n },\n });\n\n let allOutput = '';\n\n // Capture all output for debugging\n proc.stdout?.on('data', (data) => {\n allOutput += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n allOutput += data.toString();\n });\n\n proc.on('exit', (code) => {\n if (code === 0) {\n if (!silent) {\n spinner.succeed('Database schema initialized successfully');\n }\n resolve(true);\n } else {\n if (!silent) {\n spinner.fail('Failed to push database schema');\n // Show all output when it fails so user can see what went wrong\n if (allOutput.trim()) {\n logger.log(''); // Blank line\n logger.log('Output from drizzle-kit push:');\n logger.log(allOutput.trim());\n logger.log(''); // Blank line\n }\n }\n resolve(false);\n }\n });\n\n proc.on('error', (error) => {\n if (!silent) {\n spinner.fail('Failed to run drizzle-kit');\n logger.error(`Error: ${error.message}`);\n }\n resolve(false);\n });\n });\n}\n\n/**\n * Connect to an existing database manually by prompting for connection string\n */\nexport async function connectManualDatabase(): Promise<string | null> {\n logger.log('');\n\n // Ask user what type of connection they want\n const connectionType = await prompts.select(\n 'How would you like to connect your database?',\n [\n 'Connect an existing Hatchway database',\n 'Provide a connection string directly',\n ]\n );\n\n logger.log('');\n\n // Prompt for the connection string\n let message: string;\n if (connectionType === 'Connect an existing Hatchway database') {\n message = 'Enter your Hatchway database connection string:';\n } else {\n message = 'Enter your PostgreSQL connection string:';\n }\n\n const connectionString = await prompts.input(message);\n\n // Basic validation\n if (!connectionString || connectionString.trim() === '') {\n logger.error('Connection string cannot be empty');\n return null;\n }\n\n // Validate it looks like a PostgreSQL connection string\n if (!connectionString.match(/^postgres(?:ql)?:\\/\\//)) {\n logger.error('Connection string must start with postgres:// or postgresql://');\n return null;\n }\n\n return connectionString.trim();\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-tui-D2VOVdeK.js","sources":["../../src/cli/tui/components/ProgressStepper.tsx","../../src/cli/tui/components/TaskStream.tsx","../../src/cli/tui/components/ConfigSummary.tsx","../../src/cli/tui/components/BuildErrorView.tsx","../../src/cli/tui/hooks/useInitFlow.ts","../../src/cli/tui/screens/InitScreen.tsx","../../src/cli/tui/screens/StartPromptScreen.tsx","../../src/cli/tui/App.tsx","../../src/cli/commands/init-tui.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport type StepStatus = 'pending' | 'active' | 'completed' | 'error';\n\nexport interface Step {\n id: string;\n label: string;\n status: StepStatus;\n}\n\n// Keep for backwards compatibility\nexport interface StepTask {\n id: string;\n label: string;\n status: 'pending' | 'running' | 'completed' | 'failed';\n detail?: string;\n error?: string;\n}\n\ninterface ProgressStepperProps {\n steps: Step[];\n}\n\n/**\n * Horizontal progress stepper - just the dots and labels\n * \n * ●───────────●───────────○───────────○\n * Setup Install Database Finalize\n */\nexport function ProgressStepper({ steps }: ProgressStepperProps) {\n const getStepColor = (status: StepStatus): string => {\n switch (status) {\n case 'completed':\n return colors.success;\n case 'active':\n return colors.cyan;\n case 'error':\n return colors.error;\n default:\n return colors.dimGray;\n }\n };\n\n const getStepSymbol = (status: StepStatus): string => {\n switch (status) {\n case 'error':\n return symbols.errorDot;\n case 'completed':\n case 'active':\n return symbols.filledDot;\n default:\n return symbols.hollowDot;\n }\n };\n\n // Cell and connector sizing\n const cellWidth = 10;\n const connectorWidth = 7;\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {/* Dots row */}\n <Box>\n {steps.map((step, index) => (\n <Fragment key={step.id}>\n <Box width={cellWidth} justifyContent=\"center\">\n <Text color={getStepColor(step.status)}>\n {getStepSymbol(step.status)}\n </Text>\n </Box>\n {index < steps.length - 1 && (\n <Text color={colors.dimGray}>\n {symbols.horizontalLine.repeat(connectorWidth)}\n </Text>\n )}\n </Fragment>\n ))}\n </Box>\n \n {/* Labels row */}\n <Box>\n {steps.map((step, index) => (\n <Fragment key={step.id}>\n <Box width={cellWidth} justifyContent=\"center\">\n <Text \n color={step.status === 'pending' ? colors.dimGray : colors.gray}\n dimColor={step.status === 'pending'}\n >\n {step.label}\n </Text>\n </Box>\n {index < steps.length - 1 && (\n <Box width={connectorWidth} />\n )}\n </Fragment>\n ))}\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols, layout } from '../theme.js';\n\nexport interface StreamTask {\n id: string;\n label: string;\n status: 'pending' | 'running' | 'completed' | 'failed';\n detail?: string;\n error?: string;\n}\n\ninterface TaskStreamProps {\n /** Current step ID - clears stream when this changes */\n stepId: string;\n /** Tasks for the current step */\n tasks: StreamTask[];\n /** Called when typewriter animation completes for a detail */\n onTypewriterComplete?: (taskId: string) => void;\n}\n\ninterface DisplayLine {\n id: string;\n text: string;\n displayedText: string;\n color: string;\n prefix: string;\n prefixColor: string;\n showCursor: boolean;\n checkmark?: boolean; // Show green checkmark after prefix\n}\n\n// Match the stepper width: cellWidth(10) * 4 + connectorWidth(7) * 3 = 61\nconst BOX_WIDTH = 61;\nconst BOX_INNER_WIDTH = BOX_WIDTH - 4; // Account for \"│ \" and \" │\"\n\n/**\n * TaskStream - Shows current step's tasks in a terminal-style box\n * \n * ┌───────────────────────────────────────────────────────────┐\n * │ ⠋ Configuring database │\n * │ └── Setting up Neon database...▌ │\n * └───────────────────────────────────────────────────────────┘\n */\nexport function TaskStream({ stepId, tasks, onTypewriterComplete }: TaskStreamProps) {\n const [spinnerIndex, setSpinnerIndex] = useState(0);\n const [cursorVisible, setCursorVisible] = useState(true);\n const [typedChars, setTypedChars] = useState<Record<string, number>>({});\n const [completedTyping, setCompletedTyping] = useState<Set<string>>(new Set());\n const prevStepRef = useRef(stepId);\n \n // Reset typed chars when step changes\n useEffect(() => {\n if (stepId !== prevStepRef.current) {\n setTypedChars({});\n setCompletedTyping(new Set());\n prevStepRef.current = stepId;\n }\n }, [stepId]);\n \n // Spinner animation - runs independently\n useEffect(() => {\n let mounted = true;\n const animate = () => {\n if (!mounted) return;\n setSpinnerIndex(prev => (prev + 1) % symbols.spinnerFrames.length);\n setTimeout(animate, layout.spinnerInterval);\n };\n const timeout = setTimeout(animate, layout.spinnerInterval);\n return () => {\n mounted = false;\n clearTimeout(timeout);\n };\n }, []);\n \n // Cursor blink - runs independently \n useEffect(() => {\n let mounted = true;\n const blink = () => {\n if (!mounted) return;\n setCursorVisible(prev => !prev);\n setTimeout(blink, 400);\n };\n const timeout = setTimeout(blink, 400);\n return () => {\n mounted = false;\n clearTimeout(timeout);\n };\n }, []);\n \n // Find tasks by status\n const runningTask = tasks.find(t => t.status === 'running');\n const failedTask = tasks.find(t => t.status === 'failed');\n const completedTasks = tasks.filter(t => t.status === 'completed');\n \n // Primary task: running > failed > last completed (to prevent visual jump)\n const primaryTask = runningTask || failedTask || completedTasks[completedTasks.length - 1];\n \n // Previous completed tasks (all except the one shown as primary)\n const previousCompleted = primaryTask?.status === 'completed' \n ? completedTasks.slice(0, -1) \n : completedTasks;\n \n // Build display lines\n const lines: DisplayLine[] = [];\n \n // Main task line (running, failed, or last completed)\n if (primaryTask) {\n const isRunning = primaryTask.status === 'running';\n const isCompleted = primaryTask.status === 'completed';\n const isFailed = primaryTask.status === 'failed';\n \n let prefix: string;\n let prefixColor: string;\n let textColor: string;\n \n if (isRunning) {\n prefix = `${symbols.spinnerFrames[spinnerIndex]} `;\n prefixColor = colors.cyan;\n textColor = colors.white;\n } else if (isCompleted) {\n prefix = `${symbols.check} `;\n prefixColor = colors.success;\n textColor = colors.white;\n } else {\n prefix = `${symbols.cross} `;\n prefixColor = colors.error;\n textColor = colors.error;\n }\n \n lines.push({\n id: `main-${primaryTask.id}`,\n text: primaryTask.label,\n displayedText: primaryTask.label,\n color: textColor,\n prefix,\n prefixColor,\n showCursor: false,\n });\n }\n \n // Previous completed tasks as subtasks - with green checkmark\n previousCompleted.forEach((task, index) => {\n const hasMore = primaryTask?.detail || primaryTask?.error || index < previousCompleted.length - 1;\n const connector = hasMore ? '├──' : '└──';\n \n lines.push({\n id: `completed-${task.id}`,\n text: task.label,\n displayedText: task.label,\n color: colors.white,\n prefix: ` ${connector} `,\n prefixColor: colors.dimGray,\n showCursor: false,\n checkmark: true,\n });\n });\n \n // Detail line (no typewriter for progress updates - show immediately)\n if (primaryTask?.detail && primaryTask.status === 'running') {\n lines.push({\n id: `detail-${primaryTask.id}`,\n text: primaryTask.detail,\n displayedText: primaryTask.detail, // Show full text immediately for progress updates\n color: colors.dimGray,\n prefix: ' └── ',\n prefixColor: colors.dimGray,\n showCursor: false, // No cursor for instant updates\n });\n }\n \n // Error line (typewriter effect)\n if (primaryTask?.error && primaryTask.status === 'failed') {\n const errorId = `error-${primaryTask.id}`;\n const currentChars = typedChars[errorId] || 0;\n const displayedText = primaryTask.error.slice(0, currentChars);\n const isTyping = currentChars < primaryTask.error.length;\n \n lines.push({\n id: errorId,\n text: primaryTask.error,\n displayedText,\n color: colors.error,\n prefix: ' └── ',\n prefixColor: colors.dimGray,\n showCursor: isTyping && cursorVisible,\n });\n }\n \n // Typewriter animation - only for errors now (details show instantly for progress)\n const errorToType = primaryTask?.error && primaryTask.status === 'failed' ? primaryTask.error : null;\n const textToType = errorToType;\n const typeId = errorToType ? `error-${primaryTask?.id}` : null;\n \n useEffect(() => {\n if (!typeId || !textToType) return;\n \n const currentChars = typedChars[typeId] || 0;\n \n // Check if we just finished typing\n if (currentChars >= textToType.length) {\n // Fire callback once when typing completes\n if (!completedTyping.has(typeId) && onTypewriterComplete && primaryTask) {\n setCompletedTyping(prev => new Set(prev).add(typeId));\n onTypewriterComplete(primaryTask.id);\n }\n return;\n }\n \n // Continue typing animation\n const timeout = setTimeout(() => {\n setTypedChars(prev => ({\n ...prev,\n [typeId]: (prev[typeId] || 0) + 1,\n }));\n }, 30);\n \n return () => clearTimeout(timeout);\n }, [typeId, textToType, typedChars[typeId || ''], completedTyping, onTypewriterComplete, primaryTask]);\n \n // Empty state - show empty box to maintain layout\n if (lines.length === 0) {\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box flexDirection=\"column\" width={BOX_WIDTH}>\n <Text color={colors.dimGray}>┌{'─'.repeat(BOX_WIDTH - 2)}┐</Text>\n <Box>\n <Text color={colors.dimGray}>│</Text>\n <Text>{' '.repeat(BOX_WIDTH - 2)}</Text>\n <Text color={colors.dimGray}>│</Text>\n </Box>\n <Text color={colors.dimGray}>└{'─'.repeat(BOX_WIDTH - 2)}┘</Text>\n </Box>\n </Box>\n );\n }\n \n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box flexDirection=\"column\" width={BOX_WIDTH}>\n {/* Top border */}\n <Text color={colors.dimGray}>┌{'─'.repeat(BOX_WIDTH - 2)}┐</Text>\n \n {/* Content lines */}\n {lines.map(line => {\n const checkmarkStr = line.checkmark ? `${symbols.check} ` : '';\n const content = `${line.prefix}${checkmarkStr}${line.displayedText}`;\n const cursor = line.showCursor ? '▌' : '';\n const paddingNeeded = Math.max(0, BOX_INNER_WIDTH - content.length - cursor.length);\n \n return (\n <Box key={line.id}>\n <Text color={colors.dimGray}>│ </Text>\n <Text color={line.prefixColor}>{line.prefix}</Text>\n {line.checkmark && <Text color={colors.success}>{symbols.check} </Text>}\n <Text color={line.color}>{line.displayedText}</Text>\n {line.showCursor && <Text color={colors.cyan}>▌</Text>}\n <Text>{' '.repeat(paddingNeeded)}</Text>\n <Text color={colors.dimGray}> │</Text>\n </Box>\n );\n })}\n \n {/* Bottom border */}\n <Text color={colors.dimGray}>└{'─'.repeat(BOX_WIDTH - 2)}┘</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport interface ConfigItem {\n label: string;\n value: string;\n}\n\ninterface ConfigSummaryProps {\n items: ConfigItem[];\n title?: string;\n}\n\n/**\n * Configuration summary display\n * ───────────────────────────────────\n * Workspace ~/hatchway-workspace\n * Server http://localhost:3000\n * Runner local\n * ───────────────────────────────────\n */\nexport function ConfigSummary({ items, title }: ConfigSummaryProps) {\n const dividerWidth = 40;\n const divider = symbols.horizontalLine.repeat(dividerWidth);\n \n // Find the longest label for alignment\n const maxLabelLength = Math.max(...items.map(item => item.label.length));\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>{divider}</Text>\n \n {title && (\n <Box marginTop={1} marginBottom={1}>\n <Text color={colors.white} bold>{title}</Text>\n </Box>\n )}\n \n <Box flexDirection=\"column\" alignItems=\"flex-start\" marginTop={title ? 0 : 1}>\n {items.map((item, index) => (\n <Box key={index}>\n <Text color={colors.gray}>\n {item.label.padEnd(maxLabelLength + 3)}\n </Text>\n <Text color={colors.cyan}>{item.value}</Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n </Box>\n );\n}\n\ninterface NextStepsProps {\n command: string;\n url: string;\n}\n\n/**\n * Next steps display for completion screen\n */\nexport function NextSteps({ command, url }: NextStepsProps) {\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box>\n <Text color={colors.gray}>Run: </Text>\n <Text color={colors.cyan} bold>{command}</Text>\n </Box>\n <Box>\n <Text color={colors.gray}>Open: </Text>\n <Text color={colors.cyan}>{url}</Text>\n </Box>\n </Box>\n );\n}\n\ninterface ErrorSummaryProps {\n message?: string;\n suggestions: string[];\n}\n\n/**\n * Error display with message and recovery suggestions\n */\nexport function ErrorSummary({ message, suggestions }: ErrorSummaryProps) {\n const dividerWidth = 44;\n const divider = symbols.horizontalLine.repeat(dividerWidth);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>{divider}</Text>\n \n {/* Error message header */}\n {message && (\n <Box marginTop={1} marginBottom={1}>\n <Text color={colors.error} bold>{symbols.cross} {message}</Text>\n </Box>\n )}\n \n {/* Suggestions/details */}\n <Box flexDirection=\"column\" alignItems=\"flex-start\" marginTop={message ? 0 : 1}>\n {suggestions.map((suggestion, index) => (\n <Box key={index}>\n <Text color={suggestion.startsWith(' ') ? colors.cyan : colors.gray}>\n {suggestion}\n </Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n </Box>\n );\n}\n","/**\n * BuildErrorView - Compact scrollable view for build errors\n * Designed to fit in the center of the init screen, not full-screen\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface BuildErrorViewProps {\n /** Error title/message */\n title: string;\n /** Array of error lines to display */\n errorLines: string[];\n /** Suggestions for fixing the error */\n suggestions?: string[];\n /** Callback when user exits */\n onExit?: () => void;\n}\n\n/**\n * Compact build error viewer with scrolling and copy support\n * Displays in the center area, half-width, with scrollable content\n */\nexport function BuildErrorView({ \n title, \n errorLines, \n suggestions = [],\n onExit \n}: BuildErrorViewProps) {\n const { exit } = useApp();\n const { stdout } = useStdout();\n const terminalWidth = stdout?.columns || 80;\n\n const [scrollOffset, setScrollOffset] = useState(0);\n const [showCopiedMessage, setShowCopiedMessage] = useState(false);\n\n // Fixed dimensions for compact view\n const boxWidth = Math.min(70, Math.floor(terminalWidth * 0.6));\n const maxVisibleLines = 12; // Show 12 lines of errors max\n \n // Calculate max scroll\n const maxScroll = Math.max(0, errorLines.length - maxVisibleLines);\n\n // Get visible lines\n const visibleLines = errorLines.slice(scrollOffset, scrollOffset + maxVisibleLines);\n\n // Copy all error content to clipboard\n const copyToClipboard = useCallback(async () => {\n const content = [\n `Build Error: ${title}`,\n '─'.repeat(60),\n ...errorLines,\n '─'.repeat(60),\n '',\n ...suggestions,\n ].join('\\n');\n\n try {\n const { exec } = await import('child_process');\n\n // Detect platform and use appropriate clipboard command\n const platform = process.platform;\n let clipboardCmd: string;\n\n if (platform === 'darwin') {\n clipboardCmd = 'pbcopy';\n } else if (platform === 'win32') {\n clipboardCmd = 'clip';\n } else {\n clipboardCmd = 'xclip -selection clipboard';\n }\n\n // Write to clipboard\n const child = exec(clipboardCmd);\n child.stdin?.write(content);\n child.stdin?.end();\n\n setShowCopiedMessage(true);\n\n // Show success message then exit after delay\n setTimeout(() => {\n if (onExit) {\n onExit();\n } else {\n exit();\n }\n }, 1500);\n } catch (error) {\n // Clipboard failed - still show message\n setShowCopiedMessage(true);\n setTimeout(() => setShowCopiedMessage(false), 2000);\n }\n }, [title, errorLines, suggestions, onExit, exit]);\n\n // Handle keyboard input\n useInput((input, key) => {\n if (input === 'c' || input === 'C') {\n copyToClipboard();\n } else if (key.upArrow) {\n setScrollOffset(prev => Math.max(0, prev - 1));\n } else if (key.downArrow) {\n setScrollOffset(prev => Math.min(maxScroll, prev + 1));\n } else if (key.pageUp) {\n setScrollOffset(prev => Math.max(0, prev - maxVisibleLines));\n } else if (key.pageDown) {\n setScrollOffset(prev => Math.min(maxScroll, prev + maxVisibleLines));\n } else if (input === 'q' || key.escape) {\n if (onExit) {\n onExit();\n } else {\n exit();\n }\n }\n });\n\n // Color error lines based on content\n const getLineColor = (line: string): string => {\n if (/error|Error|ERR!/i.test(line)) return colors.error;\n if (/warning|warn/i.test(line)) return colors.warning;\n if (/:\\d+:\\d+/.test(line)) return colors.cyan;\n if (line.startsWith('─') || line.startsWith('hatchway:')) return colors.dimGray;\n return colors.gray;\n };\n\n const divider = symbols.horizontalLine.repeat(boxWidth - 2);\n const hasScroll = errorLines.length > maxVisibleLines;\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" width=\"100%\">\n {/* Top divider */}\n <Text color={colors.dimGray}>{divider}</Text>\n \n {/* Error header */}\n <Box marginTop={1} marginBottom={1} width={boxWidth} justifyContent=\"center\">\n <Text color={colors.error} bold>{symbols.cross} {title}</Text>\n </Box>\n\n {/* Scrollable error content */}\n <Box \n flexDirection=\"column\" \n width={boxWidth}\n borderStyle=\"round\"\n borderColor={colors.error}\n paddingX={1}\n paddingY={0}\n >\n {/* Scroll indicator header */}\n {hasScroll && (\n <Box justifyContent=\"flex-end\" marginBottom={0}>\n <Text color={colors.dimGray} dimColor>\n [{scrollOffset + 1}-{Math.min(scrollOffset + maxVisibleLines, errorLines.length)}/{errorLines.length}] ↑↓\n </Text>\n </Box>\n )}\n \n {/* Error lines */}\n {visibleLines.length > 0 ? (\n visibleLines.map((line, index) => {\n const truncatedLine = line.length > boxWidth - 4 \n ? line.substring(0, boxWidth - 7) + '...' \n : line;\n return (\n <Text key={index} color={getLineColor(line)} wrap=\"truncate\">\n {truncatedLine}\n </Text>\n );\n })\n ) : (\n <Text color={colors.dimGray}>No error details captured</Text>\n )}\n </Box>\n\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1} width={boxWidth}>\n {suggestions.map((suggestion, index) => (\n <Text key={index} color={suggestion.startsWith(' ') ? colors.cyan : colors.gray}>\n {suggestion}\n </Text>\n ))}\n </Box>\n )}\n\n {/* Bottom divider */}\n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n\n {/* Keyboard shortcuts */}\n <Box marginTop={1} justifyContent=\"center\">\n {showCopiedMessage ? (\n <Text color={colors.success} bold>\n {symbols.check} Copied to clipboard! Exiting...\n </Text>\n ) : (\n <Box>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.success} bold>c</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.success}>copy & exit</Text>\n <Text> </Text>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.cyan}>q</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.gray}>quit</Text>\n {hasScroll && (\n <>\n <Text> </Text>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.cyan}>↑↓</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.gray}>scroll</Text>\n </>\n )}\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback } from 'react';\nimport type { StepStatus } from '../components/ProgressStepper.js';\nimport type { TaskStatus } from '../components/TaskList.js';\nimport type { ConfigItem } from '../components/ConfigSummary.js';\n\nexport type InitPhase = 'repo' | 'build' | 'database' | 'ready';\n\nexport interface Task {\n id: string;\n label: string;\n status: TaskStatus;\n detail?: string;\n error?: string;\n stepId: string; // Which step this task belongs to\n}\n\nexport interface Step {\n id: string;\n label: string;\n status: StepStatus;\n}\n\nexport interface BuildErrorDetails {\n /** Raw error output lines for scrollable view */\n errorLines: string[];\n /** Suggestions for fixing */\n suggestions: string[];\n}\n\nexport interface InitState {\n phase: InitPhase;\n steps: Step[];\n tasks: Task[];\n config: ConfigItem[];\n error: {\n message: string;\n suggestions: string[];\n /** Detailed build error for full-screen view */\n buildError?: BuildErrorDetails;\n } | null;\n isComplete: boolean;\n}\n\nconst INITIAL_STEPS: Step[] = [\n { id: 'repo', label: 'Clone', status: 'pending' },\n { id: 'build', label: 'Build', status: 'pending' },\n { id: 'database', label: 'Configure', status: 'pending' },\n { id: 'ready', label: 'Finish', status: 'pending' },\n];\n\n// Tasks now have a stepId to associate them with a step\nconst INITIAL_TASKS: Task[] = [\n { id: 'clone', label: 'Cloning repository', status: 'pending', stepId: 'repo' },\n { id: 'deps', label: 'Installing dependencies', status: 'pending', stepId: 'build' },\n { id: 'build', label: 'Building packages', status: 'pending', stepId: 'build' },\n { id: 'database', label: 'Configuring database', status: 'pending', stepId: 'database' },\n { id: 'config', label: 'Saving configuration', status: 'pending', stepId: 'ready' },\n { id: 'services', label: 'Building services', status: 'pending', stepId: 'ready' },\n];\n\nexport interface UseInitFlowReturn {\n state: InitState;\n // Step management\n setStepStatus: (stepId: string, status: StepStatus) => void;\n activateStep: (stepId: string) => void;\n completeStep: (stepId: string) => void;\n failStep: (stepId: string) => void;\n // Task management\n setTaskStatus: (taskId: string, status: TaskStatus, detail?: string) => void;\n startTask: (taskId: string, detail?: string) => void;\n completeTask: (taskId: string) => void;\n failTask: (taskId: string, error: string) => void;\n // Helper to get tasks for a specific step\n getTasksForStep: (stepId: string) => Task[];\n // Helper to get currently active tasks (running or just completed in current phase)\n getActiveStepTasks: () => Task[];\n // Config management\n setConfig: (items: ConfigItem[]) => void;\n // Error management\n setError: (message: string, suggestions: string[]) => void;\n setBuildError: (message: string, errorLines: string[], suggestions: string[]) => void;\n clearError: () => void;\n // Completion\n markComplete: () => void;\n // Reset\n reset: () => void;\n}\n\nexport function useInitFlow(): UseInitFlowReturn {\n const [state, setState] = useState<InitState>({\n phase: 'repo',\n steps: INITIAL_STEPS,\n tasks: INITIAL_TASKS,\n config: [],\n error: null,\n isComplete: false,\n });\n\n // Step management\n const setStepStatus = useCallback((stepId: string, status: StepStatus) => {\n setState(prev => ({\n ...prev,\n steps: prev.steps.map(step =>\n step.id === stepId ? { ...step, status } : step\n ),\n }));\n }, []);\n\n const activateStep = useCallback((stepId: string) => {\n setState(prev => ({\n ...prev,\n phase: stepId as InitPhase,\n steps: prev.steps.map(step =>\n step.id === stepId ? { ...step, status: 'active' } : step\n ),\n }));\n }, []);\n\n const completeStep = useCallback((stepId: string) => {\n setStepStatus(stepId, 'completed');\n }, [setStepStatus]);\n\n const failStep = useCallback((stepId: string) => {\n setStepStatus(stepId, 'error');\n }, [setStepStatus]);\n\n // Task management\n const setTaskStatus = useCallback((taskId: string, status: TaskStatus, detail?: string) => {\n setState(prev => ({\n ...prev,\n tasks: prev.tasks.map(task =>\n task.id === taskId ? { ...task, status, detail: detail ?? task.detail } : task\n ),\n }));\n }, []);\n\n const startTask = useCallback((taskId: string, detail?: string) => {\n setTaskStatus(taskId, 'running', detail);\n }, [setTaskStatus]);\n\n const completeTask = useCallback((taskId: string) => {\n setTaskStatus(taskId, 'completed');\n }, [setTaskStatus]);\n\n const failTask = useCallback((taskId: string, error: string) => {\n setState(prev => ({\n ...prev,\n tasks: prev.tasks.map(task =>\n task.id === taskId ? { ...task, status: 'failed', error } : task\n ),\n }));\n }, []);\n\n // Get tasks for a specific step\n const getTasksForStep = useCallback((stepId: string): Task[] => {\n return state.tasks.filter(task => task.stepId === stepId);\n }, [state.tasks]);\n\n // Get tasks for the currently active step\n const getActiveStepTasks = useCallback((): Task[] => {\n return state.tasks.filter(task => task.stepId === state.phase);\n }, [state.tasks, state.phase]);\n\n // Config management\n const setConfig = useCallback((items: ConfigItem[]) => {\n setState(prev => ({\n ...prev,\n config: items,\n }));\n }, []);\n\n // Error management\n const setError = useCallback((message: string, suggestions: string[]) => {\n setState(prev => ({\n ...prev,\n error: { message, suggestions },\n }));\n }, []);\n\n const setBuildError = useCallback((message: string, errorLines: string[], suggestions: string[]) => {\n setState(prev => ({\n ...prev,\n error: { \n message, \n suggestions,\n buildError: {\n errorLines,\n suggestions,\n }\n },\n }));\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({\n ...prev,\n error: null,\n }));\n }, []);\n\n // Completion\n const markComplete = useCallback(() => {\n setState(prev => ({\n ...prev,\n isComplete: true,\n phase: 'ready',\n steps: prev.steps.map(step => ({ ...step, status: 'completed' })),\n }));\n }, []);\n\n // Reset\n const reset = useCallback(() => {\n setState({\n phase: 'repo',\n steps: INITIAL_STEPS,\n tasks: INITIAL_TASKS,\n config: [],\n error: null,\n isComplete: false,\n });\n }, []);\n\n return {\n state,\n setStepStatus,\n activateStep,\n completeStep,\n failStep,\n setTaskStatus,\n startTask,\n completeTask,\n failTask,\n getTasksForStep,\n getActiveStepTasks,\n setConfig,\n setError,\n setBuildError,\n clearError,\n markComplete,\n reset,\n };\n}\n","import { useEffect, useState } from 'react';\nimport { Box, Text, useApp, useStdout } from 'ink';\nimport { Banner, ProgressStepper, TaskStream, ConfigSummary, NextSteps, ErrorSummary, BuildErrorView } from '../components/index.js';\nimport { useInitFlow } from '../hooks/index.js';\nimport type { ConfigItem } from '../components/ConfigSummary.js';\nimport type { StreamTask } from '../components/TaskStream.js';\nimport { colors, symbols } from '../theme.js';\nimport { getVersionInfo } from '../../utils/version-info.js';\n\nexport interface InitConfig {\n workspace: string;\n monorepoPath?: string;\n databaseUrl?: string;\n apiUrl: string;\n runnerId: string;\n}\n\nexport interface InitScreenProps {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n onComplete?: (config: InitConfig) => void;\n onError?: (error: Error) => void;\n}\n\nexport interface InitCallbacks {\n // Step management\n activateStep: (stepId: string) => void;\n completeStep: (stepId: string) => void;\n failStep: (stepId: string) => void;\n // Task management\n startTask: (taskId: string, detail?: string) => void;\n completeTask: (taskId: string) => void;\n failTask: (taskId: string, error: string) => void;\n // Skip task (remove from display)\n skipTask: (taskId: string) => void;\n // Update task label\n updateTaskLabel: (taskId: string, label: string) => void;\n // Error handling\n setError: (message: string, suggestions: string[]) => void;\n // Build error with full output for scrollable view\n setBuildError: (message: string, errorLines: string[], suggestions: string[]) => void;\n}\n\n/**\n * Main init screen - fullscreen centered TUI\n * Shows progress stepper with tasks appearing under the active step\n */\nexport function InitScreen({ onInit, onComplete, onError }: InitScreenProps) {\n const { exit } = useApp();\n const { stdout } = useStdout();\n const flow = useInitFlow();\n const [finalConfig, setFinalConfig] = useState<InitConfig | null>(null);\n \n // Get version info\n const versionInfo = getVersionInfo();\n \n // Calculate vertical centering\n const terminalHeight = stdout?.rows || 24;\n const contentHeight = 20;\n const topPadding = Math.max(0, Math.floor((terminalHeight - contentHeight) / 3));\n\n // Run init flow\n useEffect(() => {\n const callbacks: InitCallbacks = {\n activateStep: flow.activateStep,\n completeStep: flow.completeStep,\n failStep: flow.failStep,\n startTask: flow.startTask,\n completeTask: flow.completeTask,\n failTask: flow.failTask,\n skipTask: (taskId: string) => {\n flow.setTaskStatus(taskId, 'completed');\n },\n updateTaskLabel: (taskId: string, label: string) => {\n flow.setTaskStatus(taskId, flow.state.tasks.find(t => t.id === taskId)?.status || 'pending');\n },\n setError: flow.setError,\n setBuildError: flow.setBuildError,\n };\n\n onInit(callbacks)\n .then((config) => {\n setFinalConfig(config);\n \n // Set config summary items\n const configItems: ConfigItem[] = [\n { label: 'Workspace', value: config.workspace },\n { label: 'Server', value: config.apiUrl },\n { label: 'Runner', value: config.runnerId },\n ];\n \n if (config.monorepoPath) {\n configItems.push({ label: 'Repository', value: config.monorepoPath });\n }\n \n flow.setConfig(configItems);\n flow.markComplete();\n \n if (onComplete) {\n onComplete(config);\n }\n })\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n });\n }, []);\n\n const { state } = flow;\n \n // Get tasks for current step only, mapped to StreamTask format\n const currentStepTasks: StreamTask[] = flow.getActiveStepTasks().map(task => ({\n id: task.id,\n label: task.label,\n status: task.status,\n detail: task.detail,\n error: task.error,\n }));\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" paddingTop={topPadding}>\n {/* Banner */}\n <Banner />\n \n {/* Version - right under banner */}\n <Box marginTop={1}>\n <Text color={colors.gray} dimColor>\n {versionInfo.display}\n </Text>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={1} />\n \n {/* Progress Stepper (just dots and labels) */}\n <ProgressStepper steps={state.steps} />\n \n {/* Task Stream - shows current step's tasks with typewriter effect */}\n {!state.isComplete && !state.error && (\n <TaskStream \n stepId={state.phase}\n tasks={currentStepTasks}\n />\n )}\n \n {/* Error Display - show full BuildErrorView for build errors, simple ErrorSummary for others */}\n {state.error && state.error.buildError && (\n <BuildErrorView\n title={state.error.message}\n errorLines={state.error.buildError.errorLines}\n suggestions={state.error.buildError.suggestions}\n onExit={() => exit()}\n />\n )}\n {state.error && !state.error.buildError && (\n <Box marginTop={2}>\n <ErrorSummary \n message={state.error.message} \n suggestions={state.error.suggestions} \n />\n </Box>\n )}\n \n {/* Completion Display - show summary of all completed tasks */}\n {state.isComplete && !state.error && (\n <Box marginTop={2} flexDirection=\"column\" alignItems=\"center\">\n {/* Success message */}\n <Text color={colors.success} bold>\n {symbols.check} Setup complete!\n </Text>\n \n {/* Completed tasks summary */}\n <Box marginTop={1} flexDirection=\"column\">\n {state.tasks.filter(t => t.status === 'completed').map(task => (\n <Box key={task.id}>\n <Text color={colors.success}>{symbols.check}</Text>\n <Text color={colors.gray}> {task.label}</Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1} />\n <ConfigSummary items={state.config} />\n <NextSteps command=\"hatchway run\" url=\"http://localhost:3000\" />\n </Box>\n )}\n </Box>\n );\n}\n","import { Box, Text, useInput, useStdout } from 'ink';\nimport { Banner } from '../components/index.js';\nimport { colors, symbols } from '../theme.js';\n\nexport interface StartPromptScreenProps {\n onSelect: (shouldStart: boolean) => void;\n}\n\n/**\n * Post-init prompt asking if user wants to start Hatchway now\n */\nexport function StartPromptScreen({ onSelect }: StartPromptScreenProps) {\n const { stdout } = useStdout();\n \n // Calculate vertical centering\n const terminalHeight = stdout?.rows || 24;\n const contentHeight = 14;\n const topPadding = Math.max(0, Math.floor((terminalHeight - contentHeight) / 3));\n\n useInput((input, key) => {\n const char = input.toLowerCase();\n \n // Enter = start\n if (key.return) {\n onSelect(true);\n return;\n }\n \n // Y = start\n if (char === 'y') {\n onSelect(true);\n return;\n }\n \n // N = don't start\n if (char === 'n') {\n onSelect(false);\n return;\n }\n \n // Escape = don't start\n if (key.escape) {\n onSelect(false);\n return;\n }\n });\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" paddingTop={topPadding}>\n {/* Banner */}\n <Banner />\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Success message */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.success} bold>\n {symbols.check} Hatchway is ready!\n </Text>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Prompt */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.white}>\n Start Hatchway now?\n </Text>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>\n Press <Text color={colors.cyan} bold>Y</Text> or <Text color={colors.cyan} bold>Enter</Text> to start, <Text color={colors.cyan} bold>N</Text> or <Text color={colors.cyan} bold>Esc</Text> to exit\n </Text>\n </Box>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Info about manual start */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>\n To start later, run: <Text color={colors.cyan}>hatchway run</Text>\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { render } from 'ink';\nimport { InitScreen, StartPromptScreen, type InitCallbacks, type InitConfig } from './screens/index.js';\n\nexport interface RunInitTUIOptions {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n}\n\ntype InitAppScreen = 'init' | 'prompt';\n\ninterface InitAppProps {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n onComplete: (config: InitConfig, shouldStart: boolean) => void;\n onError: (error: Error) => void;\n}\n\n/**\n * Init App component that manages the init flow screens\n */\nfunction InitApp({ onInit, onComplete, onError }: InitAppProps) {\n const [screen, setScreen] = useState<InitAppScreen>('init');\n const [config, setConfig] = useState<InitConfig | null>(null);\n\n const handleInitComplete = (initConfig: InitConfig) => {\n setConfig(initConfig);\n // Show the start prompt screen\n setScreen('prompt');\n };\n\n const handleStartChoice = (shouldStart: boolean) => {\n if (config) {\n onComplete(config, shouldStart);\n }\n };\n\n if (screen === 'prompt' && config) {\n return <StartPromptScreen onSelect={handleStartChoice} />;\n }\n\n return (\n <InitScreen\n onInit={onInit}\n onComplete={handleInitComplete}\n onError={onError}\n />\n );\n}\n\n/**\n * Render the TUI init screen\n * Returns a promise that resolves with config and whether to start\n */\nexport async function runInitTUI(options: RunInitTUIOptions): Promise<{ config: InitConfig; shouldStart: boolean }> {\n return new Promise((resolve, reject) => {\n let result: { config: InitConfig; shouldStart: boolean } | null = null;\n let error: Error | null = null;\n\n const { unmount, waitUntilExit } = render(\n <InitApp\n onInit={options.onInit}\n onComplete={(config, shouldStart) => {\n result = { config, shouldStart };\n // Give time for final render before unmounting\n setTimeout(() => {\n unmount();\n }, 100);\n }}\n onError={(err) => {\n error = err;\n // Keep error displayed, don't auto-unmount\n }}\n />,\n {\n exitOnCtrlC: true,\n }\n );\n\n waitUntilExit().then(() => {\n if (error) {\n reject(error);\n } else if (result) {\n resolve(result);\n } else {\n reject(new Error('Init cancelled'));\n }\n });\n });\n}\n","/**\n * TUI-based init command with beautiful centered interface\n * Uses Ink for React-based terminal rendering\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { existsSync, realpathSync, rmSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\nimport { runInitTUI } from '../tui/App.js';\nimport type { InitCallbacks, InitConfig } from '../tui/screens/index.js';\nimport { configManager } from '../utils/config-manager.js';\nimport { isInsideMonorepo } from '../utils/repo-detector.js';\nimport {\n cloneRepository,\n installDependencies,\n isPnpmInstalled,\n buildAgentCore\n} from '../utils/repo-cloner.js';\nimport {\n setupDatabase,\n pushDatabaseSchema,\n} from '../utils/database-setup.js';\nimport { CLIError } from '../utils/cli-error.js';\nimport { layout } from '../tui/theme.js';\n\n/**\n * Generate a secure random secret\n */\nfunction generateSecret(): string {\n return randomBytes(32).toString('hex');\n}\n\n/**\n * Check if a path is or contains the current working directory\n */\nfunction isCurrentWorkingDirectory(targetPath: string): boolean {\n try {\n const cwd = realpathSync(process.cwd());\n const target = realpathSync(resolve(targetPath));\n return cwd === target || cwd.startsWith(target + '/');\n } catch {\n const cwd = process.cwd();\n const target = resolve(targetPath);\n return cwd === target || cwd.startsWith(target + '/');\n }\n}\n\n/**\n * Normalize URL by adding protocol if missing\n */\nfunction normalizeUrl(url: string): string {\n if (!url) return url;\n if (url.match(/^https?:\\/\\//i)) return url;\n if (url.match(/^(localhost|127\\.0\\.0\\.1)(:|\\/|$)/i)) {\n return `http://${url}`;\n }\n return `https://${url}`;\n}\n\n/**\n * Get default workspace path\n */\nfunction getDefaultWorkspace(): string {\n return join(process.cwd(), 'hatchway-workspace');\n}\n\n/**\n * Get default monorepo clone path\n */\nfunction getDefaultMonorepoPath(): string {\n return join(process.cwd(), 'hatchway');\n}\n\n/**\n * Sleep utility for deliberate pacing\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\ninterface InitOptions {\n workspace?: string;\n url?: string;\n secret?: string;\n branch?: string;\n database?: string | boolean;\n yes?: boolean;\n nonInteractive?: boolean;\n}\n\n/**\n * Run the TUI-based init command\n */\nexport async function initTUICommand(options: InitOptions): Promise<void> {\n // Clear screen for fullscreen experience\n console.clear();\n\n try {\n const { shouldStart } = await runInitTUI({\n onInit: async (callbacks: InitCallbacks) => {\n return executeInitFlow(options, callbacks);\n },\n });\n\n if (shouldStart) {\n console.clear();\n console.log('\\n Starting Hatchway...\\n');\n // Import and run the start command (full TUI with web app + runner)\n const { startCommand } = await import('./start.js');\n await startCommand({});\n } else {\n console.clear();\n console.log('\\n ✨ Hatchway is ready!\\n');\n console.log(' To start later, run:\\n');\n console.log(' hatchway run\\n');\n console.log(' Then open: http://localhost:3000\\n');\n }\n \n } catch (error) {\n // Error was already displayed in TUI\n console.log('\\n');\n process.exit(1);\n }\n}\n\n\n\n/**\n * Execute the init flow, calling callbacks to update UI\n */\nasync function executeInitFlow(\n options: InitOptions,\n callbacks: InitCallbacks\n): Promise<InitConfig> {\n const { activateStep, completeStep, failStep, startTask, completeTask, failTask, setError, setBuildError } = callbacks;\n\n let monorepoPath: string | undefined;\n let databaseUrl: string | undefined;\n const workspace = options.workspace || getDefaultWorkspace();\n const generatedSecret = options.secret || generateSecret();\n const apiUrl = normalizeUrl(options.url || 'http://localhost:3000');\n\n // ============================================\n // PHASE 1: Repository\n // ============================================\n activateStep('repo');\n await sleep(layout.stepTransitionDelay);\n\n // Reset config if exists\n if (configManager.isInitialized()) {\n configManager.reset();\n }\n\n // Check for existing monorepo\n startTask('clone', 'Checking for repository...');\n await sleep(300);\n\n const repoCheck = await isInsideMonorepo();\n\n if (repoCheck.inside && repoCheck.root) {\n monorepoPath = repoCheck.root;\n completeTask('clone');\n await sleep(layout.taskCompletionDelay);\n } else {\n // Need to clone\n const hasPnpm = await isPnpmInstalled();\n if (!hasPnpm) {\n failTask('clone', 'pnpm not found');\n failStep('repo');\n setError('pnpm is required', [\n 'Install pnpm: npm install -g pnpm',\n 'Then retry: hatchway init -y',\n ]);\n throw new CLIError({\n code: 'DEPENDENCIES_INSTALL_FAILED',\n message: 'pnpm is not installed',\n });\n }\n\n const clonePath = getDefaultMonorepoPath();\n\n // Clean up existing installation\n if (existsSync(clonePath)) {\n if (isCurrentWorkingDirectory(clonePath)) {\n failTask('clone', 'Cannot remove current directory');\n failStep('repo');\n setError('Cannot remove current directory', [\n 'Run from a different directory',\n 'Or manually remove: rm -rf ' + clonePath,\n ]);\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Cannot remove current working directory',\n });\n }\n rmSync(clonePath, { recursive: true, force: true });\n }\n\n try {\n // Clone repository\n startTask('clone', 'Cloning from GitHub...');\n monorepoPath = await cloneRepository({\n targetPath: clonePath,\n branch: options.branch || 'main',\n silent: true, // Suppress console output in TUI mode\n });\n completeTask('clone');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('clone', 'Clone failed');\n failStep('repo');\n setError('Failed to clone repository', [\n 'Check your internet connection',\n 'Verify git is installed: git --version',\n 'Try: git clone https://github.com/codyde/hatchway.git',\n ]);\n throw error;\n }\n }\n\n completeStep('repo');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 2: Build\n // ============================================\n activateStep('build');\n await sleep(layout.stepTransitionDelay);\n\n // Install dependencies\n startTask('deps', 'Running pnpm install...');\n try {\n await installDependencies(monorepoPath!, true); // silent mode\n completeTask('deps');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('deps', 'Install failed');\n failStep('build');\n setError('Failed to install dependencies', [\n 'Check pnpm is installed: pnpm --version',\n 'Try manually: cd ' + monorepoPath + ' && pnpm install',\n ]);\n throw error;\n }\n\n // Build packages\n startTask('build', '@hatchway/agent-core');\n try {\n await buildAgentCore(monorepoPath!, true); // silent mode\n completeTask('build');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('build', 'Build failed');\n failStep('build');\n setError('Failed to build packages', [\n 'Try manually: cd ' + monorepoPath + ' && pnpm build',\n ]);\n throw error;\n }\n\n completeStep('build');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 3: Database\n // ============================================\n activateStep('database');\n await sleep(layout.stepTransitionDelay);\n\n startTask('database', 'Setting up Neon database...');\n\n // Handle database options\n const dbOption = options.database;\n const isConnectionString = typeof dbOption === 'string' &&\n (dbOption.startsWith('postgres://') || dbOption.startsWith('postgresql://'));\n\n try {\n if (isConnectionString) {\n databaseUrl = dbOption as string;\n await pushDatabaseSchema(monorepoPath!, databaseUrl, true); // silent mode\n } else {\n // Default: setup Neon database\n databaseUrl = await setupDatabase(monorepoPath!, true) || undefined; // silent mode\n if (databaseUrl) {\n await pushDatabaseSchema(monorepoPath!, databaseUrl, true); // silent mode\n }\n }\n completeTask('database');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n // Database setup is optional, don't fail hard\n completeTask('database');\n await sleep(layout.taskCompletionDelay);\n }\n\n completeStep('database');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 4: Configuration & Ready\n // ============================================\n activateStep('ready');\n await sleep(layout.stepTransitionDelay);\n\n // Create workspace directory\n if (!existsSync(workspace)) {\n await mkdir(workspace, { recursive: true });\n }\n\n // Save configuration\n startTask('config', 'Writing configuration...');\n try {\n configManager.set('workspace', workspace);\n if (monorepoPath) {\n configManager.set('monorepoPath', monorepoPath);\n }\n if (databaseUrl) {\n configManager.set('databaseUrl', databaseUrl);\n }\n configManager.set('apiUrl', apiUrl);\n \n const wsProtocol = apiUrl.startsWith('https://') ? 'wss://' : 'ws://';\n const hostPath = apiUrl.replace(/^https?:\\/\\//, '').replace(/\\/$/, '');\n const wsUrl = `${wsProtocol}${hostPath}/ws/runner`;\n \n configManager.set('server', {\n wsUrl: wsUrl,\n secret: generatedSecret,\n });\n configManager.set('runner', {\n id: 'local',\n reconnectAttempts: 5,\n heartbeatInterval: 15000,\n });\n configManager.set('tunnel', {\n provider: 'cloudflare',\n autoCreate: true,\n });\n\n // Create .env.local\n if (monorepoPath) {\n const envLocalPath = join(monorepoPath, 'apps', 'hatchway', '.env.local');\n const envContent = [\n '# Auto-generated by hatchway CLI',\n `# Generated at: ${new Date().toISOString()}`,\n '',\n 'HATCHWAY_LOCAL_MODE=true',\n `RUNNER_SHARED_SECRET=${generatedSecret}`,\n `WORKSPACE_ROOT=${workspace}`,\n 'RUNNER_ID=local',\n 'RUNNER_DEFAULT_ID=local',\n `DATABASE_URL=${databaseUrl || ''}`,\n '',\n ].join('\\n');\n \n await writeFile(envLocalPath, envContent);\n }\n\n completeTask('config');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('config', 'Config save failed');\n failStep('ready');\n setError('Failed to save configuration', [\n 'Check file permissions',\n 'Try running from a different directory',\n ]);\n throw error;\n }\n\n // Build all services for production\n if (monorepoPath) {\n startTask('services', 'Building services (this may take a minute)...');\n \n // Track build output for error reporting (capture both stdout and stderr)\n let buildOutput = '';\n let buildError = '';\n \n try {\n const { spawn } = await import('child_process');\n \n await new Promise<void>((resolve, reject) => {\n const buildProcess = spawn('pnpm', ['build:all'], {\n cwd: monorepoPath,\n stdio: 'pipe',\n shell: true,\n });\n \n // Capture stdout - many build tools output errors here\n buildProcess.stdout?.on('data', (data: Buffer) => {\n buildOutput += data.toString();\n });\n \n // Capture stderr\n buildProcess.stderr?.on('data', (data: Buffer) => {\n buildError += data.toString();\n });\n \n buildProcess.on('close', (code) => {\n if (code === 0) resolve();\n else reject(new Error(`Build failed with code ${code}`));\n });\n buildProcess.on('error', reject);\n });\n completeTask('services');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n // Build failed - surface the error to the user\n failTask('services', 'Build failed');\n failStep('ready');\n \n // Combine all output for analysis\n const allOutput = (buildOutput + '\\n' + buildError).trim();\n const allLines = allOutput.split('\\n');\n \n // Find the most relevant error lines with better patterns\n const errorPatterns = [\n /error TS\\d+:/i, // TypeScript errors\n /error:/i, // General errors\n /Error:/, // Error messages\n /ERR!/, // npm/pnpm errors\n /failed/i, // Failed messages\n /Cannot find/i, // Module not found\n /Module not found/i, // Webpack/Next.js errors\n /SyntaxError/i, // Syntax errors\n /TypeError/i, // Type errors\n /ReferenceError/i, // Reference errors\n /ENOENT/i, // File not found\n /✖|✗|×/, // Error symbols\n ];\n \n // Find lines that match error patterns\n const relevantLines: string[] = [];\n let inErrorBlock = false;\n \n for (let i = 0; i < allLines.length; i++) {\n const line = allLines[i];\n const isErrorLine = errorPatterns.some(pattern => pattern.test(line));\n \n if (isErrorLine) {\n inErrorBlock = true;\n // Include 1 line before for context if available\n if (i > 0 && relevantLines.length === 0) {\n const prevLine = allLines[i - 1].trim();\n if (prevLine && !prevLine.startsWith('>')) {\n relevantLines.push(prevLine);\n }\n }\n }\n \n if (inErrorBlock) {\n relevantLines.push(line.trim());\n // Collect more lines for scrollable view (max 50 lines)\n if (relevantLines.length >= 50) break;\n }\n \n // End error block on empty line or success indicators\n if (inErrorBlock && (line.trim() === '' || /successfully|completed/i.test(line))) {\n // Keep going in case there are more errors\n inErrorBlock = false;\n }\n }\n \n // If no specific errors found, show last 30 lines of output\n const displayLines = relevantLines.length > 0 \n ? relevantLines\n : allLines.slice(-30);\n \n const suggestions = [\n 'To debug further, run manually:',\n ` cd ${monorepoPath} && pnpm build:all`,\n '',\n 'Common fixes:',\n ' - Run: pnpm install (missing dependencies)',\n ' - Check for TypeScript errors in the files mentioned above',\n ' - Ensure all environment variables are set',\n ];\n \n // Use setBuildError to show full-screen scrollable error view\n setBuildError('Production build failed', displayLines, suggestions);\n \n throw new CLIError({\n code: 'BUILD_FAILED',\n message: 'Failed to build services for production',\n suggestions: [\n `Run manually: cd ${monorepoPath} && pnpm build:all`,\n 'Check for TypeScript errors in the output above',\n 'Ensure all dependencies are installed: pnpm install',\n ],\n });\n }\n }\n\n // Validate configuration\n const validation = configManager.validate();\n if (!validation.valid) {\n failStep('ready');\n setError('Configuration invalid', validation.errors);\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Configuration validation failed',\n });\n }\n\n completeStep('ready');\n\n return {\n workspace,\n monorepoPath,\n databaseUrl,\n apiUrl,\n runnerId: 'local',\n };\n}\n"],"names":["_jsxs","_jsx","Fragment","useState","useRef","useEffect","useCallback","_Fragment"],"mappings":"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"}