@openbuilder/cli 0.50.33 → 0.50.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{Banner-BlktOjfl.js → Banner-C-FTiOIR.js} +2 -2
- package/dist/chunks/auto-update-Dq2PFvjt.js +0 -1
- package/dist/chunks/build-D0qYqIq0.js +0 -1
- package/dist/chunks/cleanup-qVTsA3tk.js +0 -1
- package/dist/chunks/cli-auth-ChCnxlFl.js +0 -1
- package/dist/chunks/cli-error-BjQwvWtK.js +0 -1
- package/dist/chunks/config-BGP1jZJ4.js +0 -1
- package/dist/chunks/config-manager-BkbjtN-H.js +0 -1
- package/dist/chunks/database-BvAbD4sP.js +0 -1
- package/dist/chunks/database-setup-BYjIRAmT.js +0 -1
- package/dist/chunks/{init-BsQ3dhwf.js → init-DNyPS_SR.js} +9 -9
- package/dist/chunks/{init-tui-Dvk6Ndvl.js → init-tui-EFMXj-MG.js} +8 -8
- package/dist/chunks/logger-ZpJi7chw.js +0 -1
- package/dist/chunks/login-BhtodVsj.js +0 -1
- package/dist/chunks/logout-CDDASeuQ.js +0 -1
- package/dist/chunks/{main-tui-Cklcr3FX.js → main-tui-D-SG-Ba5.js} +10 -10
- package/dist/chunks/manager-CvGX9qqe.js +0 -1
- package/dist/chunks/{port-allocator-Ct3ioni4.js → port-allocator-B0q7xkLs.js} +34 -2
- package/dist/chunks/process-killer-CaUL7Kpl.js +0 -1
- package/dist/chunks/prompts-1QbE_bRr.js +0 -1
- package/dist/chunks/repo-cloner-CpOQjFSo.js +0 -1
- package/dist/chunks/repo-detector-B_oj696o.js +0 -1
- package/dist/chunks/{run-wycadErJ.js → run-Cor14S0I.js} +28 -15
- package/dist/chunks/runner-logger-instance-nDWv2h2T.js +0 -1
- package/dist/chunks/spinner-BJL9zWAJ.js +0 -1
- package/dist/chunks/{start-CQKEEma-.js → start-k9iGDVWo.js} +7 -8
- package/dist/chunks/start-traditional-uoLZXdxm.js +0 -1
- package/dist/chunks/status-cS8YwtUx.js +0 -1
- package/dist/chunks/theme-DhorI2Hb.js +43 -0
- package/dist/chunks/upgrade-CKjl4HlB.js +0 -1
- package/dist/chunks/{useBuildState-pcDGDakI.js → useBuildState-DscLOZLl.js} +2 -2
- package/dist/chunks/vendor-ai-sdk-CSJ0bw9X.js +1970 -0
- package/dist/chunks/{theme-CktnrDZj.js → vendor-react-CXgiD1Dl.js} +227 -47
- package/dist/chunks/vendor-sentry-CqA9P3UG.js +71910 -0
- package/dist/cli/index.js +5 -6
- package/dist/index.js +106 -2044
- package/dist/instrument.js +37 -64119
- package/package.json +1 -1
- package/dist/chunks/Banner-BlktOjfl.js.map +0 -1
- package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js +0 -34
- package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js.map +0 -1
- package/dist/chunks/auto-update-Dq2PFvjt.js.map +0 -1
- package/dist/chunks/build-D0qYqIq0.js.map +0 -1
- package/dist/chunks/cleanup-qVTsA3tk.js.map +0 -1
- package/dist/chunks/cli-auth-ChCnxlFl.js.map +0 -1
- package/dist/chunks/cli-error-BjQwvWtK.js.map +0 -1
- package/dist/chunks/config-BGP1jZJ4.js.map +0 -1
- package/dist/chunks/config-manager-BkbjtN-H.js.map +0 -1
- package/dist/chunks/database-BvAbD4sP.js.map +0 -1
- package/dist/chunks/database-setup-BYjIRAmT.js.map +0 -1
- package/dist/chunks/devtools-7A3EXJhY.js +0 -75
- package/dist/chunks/devtools-7A3EXJhY.js.map +0 -1
- package/dist/chunks/exports-ij9sv4UM.js +0 -7793
- package/dist/chunks/exports-ij9sv4UM.js.map +0 -1
- package/dist/chunks/index-oFqGtEeF.js +0 -119
- package/dist/chunks/index-oFqGtEeF.js.map +0 -1
- package/dist/chunks/init-BsQ3dhwf.js.map +0 -1
- package/dist/chunks/init-tui-Dvk6Ndvl.js.map +0 -1
- package/dist/chunks/logger-ZpJi7chw.js.map +0 -1
- package/dist/chunks/login-BhtodVsj.js.map +0 -1
- package/dist/chunks/logout-CDDASeuQ.js.map +0 -1
- package/dist/chunks/main-tui-Cklcr3FX.js.map +0 -1
- package/dist/chunks/manager-CvGX9qqe.js.map +0 -1
- package/dist/chunks/port-allocator-Ct3ioni4.js.map +0 -1
- package/dist/chunks/process-killer-CaUL7Kpl.js.map +0 -1
- package/dist/chunks/prompts-1QbE_bRr.js.map +0 -1
- package/dist/chunks/repo-cloner-CpOQjFSo.js.map +0 -1
- package/dist/chunks/repo-detector-B_oj696o.js.map +0 -1
- package/dist/chunks/run-wycadErJ.js.map +0 -1
- package/dist/chunks/runner-logger-instance-nDWv2h2T.js.map +0 -1
- package/dist/chunks/spinner-BJL9zWAJ.js.map +0 -1
- package/dist/chunks/start-CQKEEma-.js.map +0 -1
- package/dist/chunks/start-traditional-uoLZXdxm.js.map +0 -1
- package/dist/chunks/status-cS8YwtUx.js.map +0 -1
- package/dist/chunks/theme-CktnrDZj.js.map +0 -1
- package/dist/chunks/upgrade-CKjl4HlB.js.map +0 -1
- package/dist/chunks/use-app-Cj2bzWaw.js +0 -10
- package/dist/chunks/use-app-Cj2bzWaw.js.map +0 -1
- package/dist/chunks/useBuildState-pcDGDakI.js.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/instrument.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade-CKjl4HlB.js","sources":["../../src/cli/commands/upgrade.ts"],"sourcesContent":["/**\n * Upgrade command - In-place upgrade to latest version\n * \n * This command upgrades both:\n * 1. The CLI itself (globally installed npm package)\n * 2. The app/monorepo (local installation that runs the web app)\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, renameSync, copyFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport { CLIError, errors } from '../utils/cli-error.js';\nimport { isInsideMonorepo } from '../utils/repo-detector.js';\nimport { configManager } from '../utils/config-manager.js';\n\n// GitHub API endpoint for releases\nconst GITHUB_RELEASES_URL = 'https://api.github.com/repos/codyde/openbuilder/releases/latest';\n\n// Install command for CLI\nconst INSTALL_COMMAND = 'curl -fsSL https://openbuilder.sh/install | bash';\n\ninterface UpgradeOptions {\n branch?: string;\n force?: boolean;\n}\n\ninterface EnvBackup {\n runner: { env?: string; envLocal?: string };\n openbuilder: { env?: string; envLocal?: string };\n}\n\n/**\n * Fetch the latest release version from GitHub\n */\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(GITHUB_RELEASES_URL, {\n headers: {\n 'Accept': 'application/vnd.github.v3+json',\n 'User-Agent': 'OpenBuilder-CLI-Upgrade',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) {\n return null;\n }\n\n const data = await response.json() as { tag_name: string };\n return data.tag_name.replace(/^v/, '');\n } catch {\n return null;\n }\n}\n\n/**\n * Compare two semver versions\n * Returns true if version1 < version2 (i.e., version2 is newer)\n */\nfunction isNewerVersion(current: string, latest: string): boolean {\n const parseVersion = (v: string) => {\n const parts = v.replace(/^v/, '').split('.').map(n => parseInt(n, 10) || 0);\n return { major: parts[0] || 0, minor: parts[1] || 0, patch: parts[2] || 0 };\n };\n\n const c = parseVersion(current);\n const l = parseVersion(latest);\n\n if (l.major > c.major) return true;\n if (l.major < c.major) return false;\n if (l.minor > c.minor) return true;\n if (l.minor < c.minor) return false;\n return l.patch > c.patch;\n}\n\n/**\n * Perform the CLI update by running the install script\n */\nfunction performCLIUpdate(): boolean {\n try {\n execSync(INSTALL_COMMAND, {\n stdio: 'inherit',\n shell: '/bin/bash',\n env: {\n ...process.env,\n OPENBUILDER_QUIET_INSTALL: '1',\n },\n });\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function upgradeCommand(options: UpgradeOptions) {\n const s = p.spinner();\n \n // Get current CLI version\n let currentVersion = '0.0.0';\n try {\n // Try to find package.json by traversing up\n let searchDir = dirname(new URL(import.meta.url).pathname);\n for (let i = 0; i < 5; i++) {\n const pkgPath = join(searchDir, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n currentVersion = pkg.version || '0.0.0';\n break;\n }\n searchDir = dirname(searchDir);\n }\n } catch {\n // Ignore errors reading package.json\n }\n \n // ========================================\n // STEP 1: Always update CLI automatically\n // ========================================\n s.start('Checking for CLI updates');\n \n const latestVersion = await fetchLatestVersion();\n \n if (latestVersion && isNewerVersion(currentVersion, latestVersion)) {\n s.stop(pc.cyan('⬆') + ` CLI update available: ${pc.dim(currentVersion)} → ${pc.green(latestVersion)}`);\n \n console.log();\n console.log(` ${pc.dim('Updating CLI...')}`);\n \n const cliSuccess = performCLIUpdate();\n \n if (cliSuccess) {\n console.log(` ${pc.green('✓')} CLI updated to ${pc.green(latestVersion)}`);\n console.log();\n } else {\n console.log(` ${pc.yellow('⚠')} CLI update failed`);\n console.log(` ${pc.dim('Run manually:')} ${pc.cyan(INSTALL_COMMAND)}`);\n console.log();\n }\n } else if (latestVersion) {\n s.stop(pc.green('✓') + ` CLI is up to date (${currentVersion})`);\n } else {\n s.stop(pc.yellow('⚠') + ' Could not check for CLI updates');\n }\n\n // ========================================\n // STEP 2: Find app installation and prompt\n // ========================================\n s.start('Locating OpenBuilder app installation');\n\n let monorepoRoot: string | undefined;\n const config = configManager.get();\n\n // Try config first\n if (config.monorepoPath && existsSync(config.monorepoPath)) {\n monorepoRoot = config.monorepoPath;\n }\n\n // Try detection if not in config\n if (!monorepoRoot) {\n const repoCheck = await isInsideMonorepo();\n if (repoCheck.inside && repoCheck.root) {\n monorepoRoot = repoCheck.root;\n }\n }\n\n if (!monorepoRoot) {\n s.stop(pc.dim('ℹ') + ' No OpenBuilder app installation found');\n console.log();\n console.log(pc.dim(' The CLI has been updated. No local app installation to upgrade.'));\n console.log(pc.dim(' Run ') + pc.cyan('openbuilder init') + pc.dim(' to set up a local installation.'));\n console.log();\n return;\n }\n\n s.stop(pc.green('✓') + ` Found app installation`);\n \n // Prompt user about upgrading the app\n console.log();\n console.log(` ${pc.bold('App installation found:')}`);\n console.log(` ${pc.cyan(monorepoRoot)}`);\n console.log();\n \n // Skip prompt if --force is used\n if (!options.force) {\n const shouldUpgradeApp = await p.confirm({\n message: 'Would you like to upgrade the app installation as well?',\n initialValue: true,\n });\n \n if (p.isCancel(shouldUpgradeApp) || !shouldUpgradeApp) {\n console.log();\n console.log(pc.dim(' Skipping app upgrade. CLI has been updated.'));\n console.log();\n return;\n }\n }\n \n console.log();\n\n // Check git status before upgrading\n if (!options.force) {\n s.start('Checking for uncommitted changes');\n\n try {\n const gitStatus = execSync('git status --porcelain', {\n cwd: monorepoRoot,\n encoding: 'utf-8',\n }).trim();\n\n if (gitStatus.length > 0) {\n s.stop(pc.yellow('⚠') + ' Uncommitted changes detected');\n\n const changes = gitStatus.split('\\n').slice(0, 5);\n console.log(pc.dim(' Modified files:'));\n changes.forEach(line => console.log(pc.dim(` ${line}`)));\n\n if (!options.force) {\n const confirm = await p.confirm({\n message: 'Continue upgrade? This will discard local changes.',\n initialValue: false,\n });\n\n if (!confirm || p.isCancel(confirm)) {\n console.log(pc.dim('\\nUpgrade cancelled'));\n process.exit(0);\n }\n }\n } else {\n s.stop(pc.green('✓') + ' No uncommitted changes');\n }\n } catch (error) {\n s.stop(pc.yellow('⚠') + ' Not a git repository');\n // Continue anyway - user might have extracted from tarball\n }\n }\n\n // Backup configuration files\n s.start('Backing up configuration files');\n\n const envBackup: EnvBackup = {\n runner: {},\n openbuilder: {},\n };\n\n // Define paths to check\n const envPaths = [\n { app: 'runner', path: join(monorepoRoot, 'apps/runner/.env') },\n { app: 'runner', pathLocal: join(monorepoRoot, 'apps/runner/.env.local') },\n { app: 'openbuilder', path: join(monorepoRoot, 'apps/openbuilder/.env') },\n { app: 'openbuilder', pathLocal: join(monorepoRoot, 'apps/openbuilder/.env.local') },\n ];\n\n let backedUpCount = 0;\n\n for (const item of envPaths) {\n const app = item.app as keyof EnvBackup;\n const filePath = item.path || item.pathLocal!;\n const isLocal = !!item.pathLocal;\n\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, 'utf-8');\n if (isLocal) {\n envBackup[app].envLocal = content;\n } else {\n envBackup[app].env = content;\n }\n backedUpCount++;\n }\n }\n\n s.stop(pc.green('✓') + ` Backed up ${backedUpCount} configuration file(s)`);\n\n // Determine branch and clone\n const branch = options.branch || 'main';\n\n s.start(`Cloning fresh copy from ${pc.cyan(branch)}`);\n\n const parentDir = dirname(monorepoRoot);\n const repoName = monorepoRoot.split('/').pop();\n const tempDir = join(parentDir, `${repoName}-upgrade-temp`);\n\n // Remove temp directory if it exists from failed previous upgrade\n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n\n try {\n execSync(\n `git clone --branch ${branch} --depth 1 https://github.com/codyde/openbuilder.git \"${tempDir}\"`,\n {\n cwd: parentDir,\n stdio: 'pipe', // Silent\n }\n );\n\n s.stop(pc.green('✓') + ' Cloned successfully');\n } catch (error) {\n s.stop(pc.red('✗') + ' Clone failed');\n\n // Cleanup temp dir\n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n\n throw new CLIError({\n code: 'UPGRADE_CLONE_FAILED',\n message: `Failed to clone branch \"${branch}\"`,\n suggestions: [\n 'Check your internet connection',\n 'Verify the branch exists: https://github.com/codyde/openbuilder/tree/' + branch,\n 'Try upgrading to main: openbuilder upgrade',\n ],\n });\n }\n\n // Restore configuration files\n s.start('Restoring configuration files');\n\n let restoredCount = 0;\n\n const restorePaths = [\n { app: 'runner' as const, file: '.env', dir: join(tempDir, 'apps/runner') },\n { app: 'runner' as const, file: '.env.local', dir: join(tempDir, 'apps/runner') },\n { app: 'openbuilder' as const, file: '.env', dir: join(tempDir, 'apps/openbuilder') },\n { app: 'openbuilder' as const, file: '.env.local', dir: join(tempDir, 'apps/openbuilder') },\n ];\n\n for (const item of restorePaths) {\n const isLocal = item.file === '.env.local';\n const backupContent = isLocal ? envBackup[item.app].envLocal : envBackup[item.app].env;\n\n if (backupContent) {\n const targetPath = join(item.dir, item.file);\n writeFileSync(targetPath, backupContent, 'utf-8');\n restoredCount++;\n }\n }\n\n s.stop(pc.green('✓') + ` Restored ${restoredCount} configuration file(s)`);\n\n // Install dependencies\n s.start('Installing dependencies');\n\n try {\n execSync('pnpm install', {\n cwd: tempDir,\n stdio: 'pipe',\n env: { ...process.env, TURBO_TELEMETRY_DISABLED: '1' },\n });\n\n s.stop(pc.green('✓') + ' Dependencies installed');\n } catch (error) {\n s.stop(pc.red('✗') + ' Dependency installation failed');\n\n // Cleanup\n rmSync(tempDir, { recursive: true, force: true });\n\n throw new CLIError({\n code: 'UPGRADE_INSTALL_FAILED',\n message: 'Failed to install dependencies in new version',\n suggestions: [\n 'Check if the branch is stable',\n 'Try upgrading to main instead',\n 'Check disk space',\n ],\n });\n }\n\n // Build services\n s.start('Building services (this may take a moment)');\n\n try {\n execSync('pnpm turbo build', {\n cwd: tempDir,\n stdio: 'pipe',\n env: { ...process.env, TURBO_TELEMETRY_DISABLED: '1' },\n });\n\n s.stop(pc.green('✓') + ' Build successful');\n } catch (error) {\n s.stop(pc.red('✗') + ' Build failed');\n\n // Try to extract error message from execSync error\n let errorOutput = '';\n if (error && typeof error === 'object' && 'stderr' in error) {\n errorOutput = String((error as { stderr?: unknown }).stderr || '');\n }\n if (!errorOutput && error && typeof error === 'object' && 'stdout' in error) {\n errorOutput = String((error as { stdout?: unknown }).stdout || '');\n }\n\n // Show error details if available\n if (errorOutput) {\n console.log(pc.red('\\nBuild errors:'));\n console.log(pc.gray('─'.repeat(60)));\n const lines = errorOutput.split('\\n').slice(-20);\n lines.forEach(line => console.log(pc.red(` ${line}`)));\n console.log(pc.gray('─'.repeat(60)));\n console.log('');\n }\n\n // Cleanup\n rmSync(tempDir, { recursive: true, force: true });\n\n throw new CLIError({\n code: 'UPGRADE_BUILD_FAILED',\n message: 'Failed to build new version',\n suggestions: [\n 'The branch may have build errors',\n 'Try upgrading to a stable release tag',\n 'Check build logs for errors',\n ],\n });\n }\n\n // Apply database migrations (if DATABASE_URL exists)\n const databaseUrl =\n envBackup.openbuilder.env?.match(/DATABASE_URL=[\"']?([^\"'\\n]+)[\"']?/)?.[1] ||\n envBackup.openbuilder.envLocal?.match(/DATABASE_URL=[\"']?([^\"'\\n]+)[\"']?/)?.[1] ||\n process.env.DATABASE_URL;\n\n if (databaseUrl) {\n s.start('Applying database migrations');\n\n try {\n execSync('npx drizzle-kit push --config=drizzle.config.ts', {\n cwd: join(tempDir, 'apps/openbuilder'),\n stdio: 'pipe',\n env: {\n ...process.env,\n DATABASE_URL: databaseUrl,\n },\n });\n\n s.stop(pc.green('✓') + ' Database schema updated');\n } catch (error) {\n s.stop(pc.yellow('⚠') + ' Migration failed');\n console.log(pc.dim(' You may need to run: openbuilder database'));\n console.log(pc.dim(' This won\\'t prevent the upgrade from completing'));\n }\n } else {\n s.start('Skipping database migrations (no DATABASE_URL found)');\n s.stop(pc.yellow('⚠') + ' No database configured');\n }\n\n // Swap directories (atomic operation)\n s.start('Finalizing upgrade');\n\n const backupDir = join(parentDir, `${repoName}-backup-${Date.now()}`);\n\n try {\n // Rename current installation to backup\n renameSync(monorepoRoot, backupDir);\n\n // Rename new installation to production\n renameSync(tempDir, monorepoRoot);\n\n s.stop(pc.green('✓') + ' Upgrade finalized');\n } catch (error) {\n s.stop(pc.red('✗') + ' Failed to swap directories');\n\n // Attempt recovery\n try {\n if (existsSync(backupDir)) {\n renameSync(backupDir, monorepoRoot);\n console.log(pc.yellow('⚠') + ' Restored original installation');\n }\n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n } catch (recoveryError) {\n console.error(pc.red('❌') + ' Failed to recover. Manual intervention required.');\n console.error(pc.dim(` Backup location: ${backupDir}`));\n }\n\n throw error;\n }\n\n // Cleanup backup\n s.start('Cleaning up');\n\n try {\n rmSync(backupDir, { recursive: true, force: true });\n s.stop(pc.green('✓') + ' Cleanup complete');\n } catch (error) {\n s.stop(pc.yellow('⚠') + ' Could not remove backup');\n console.log(pc.dim(` You can manually delete: ${backupDir}`));\n }\n\n // Success!\n console.log();\n console.log(pc.green('✓') + pc.bold(' Upgrade complete!'));\n console.log();\n\n // Check if user is currently inside the monorepo directory\n const currentDir = process.cwd();\n const isCurrentlyInMonorepo = currentDir.startsWith(monorepoRoot);\n\n if (isCurrentlyInMonorepo) {\n console.log(pc.yellow('⚠') + pc.bold(' IMPORTANT: Your shell directory is stale'));\n console.log();\n console.log(pc.dim(' The upgrade renamed directories while you were inside them.'));\n console.log(pc.dim(' You need to refresh your shell location:'));\n console.log();\n console.log(pc.cyan(' cd .. && cd ' + monorepoRoot.split('/').pop()));\n console.log();\n console.log(pc.dim(' Or simply close and reopen your terminal.'));\n console.log();\n }\n\n console.log(pc.dim(' Note: Restart your terminal to use the updated CLI'));\n console.log(pc.dim(' Or run: hash -r'));\n console.log();\n\n if (branch !== 'main') {\n console.log(pc.yellow('⚠') + ` You upgraded to branch: ${pc.cyan(branch)}`);\n console.log(pc.dim(' To return to main: openbuilder upgrade'));\n console.log();\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;AAMG;AAWH;AACA,MAAM,mBAAmB,GAAG,iEAAiE;AAE7F;AACA,MAAM,eAAe,GAAG,kDAAkD;AAY1E;;AAEG;AACH,eAAe,kBAAkB,GAAA;AAC/B,IAAA,IAAI;AACF,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;AAE1D,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE;AAChD,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE,gCAAgC;AAC1C,gBAAA,YAAY,EAAE,yBAAyB;AACxC,aAAA;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;AAC1B,SAAA,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC;AAErB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;;AAGG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,MAAc,EAAA;AACrD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAS,KAAI;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC7E,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;AAC/B,IAAA,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAE9B,IAAA,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAClC,IAAA,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;AACnC,IAAA,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAClC,IAAA,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;AACnC,IAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B;AAEA;;AAEG;AACH,SAAS,gBAAgB,GAAA;AACvB,IAAA,IAAI;QACF,QAAQ,CAAC,eAAe,EAAE;AACxB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;AACd,gBAAA,yBAAyB,EAAE,GAAG;AAC/B,aAAA;AACF,SAAA,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;AAEO,eAAe,cAAc,CAAC,OAAuB,EAAA;AAC1D,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;;IAGrB,IAAI,cAAc,GAAG,OAAO;AAC5B,IAAA,IAAI;;AAEF,QAAA,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;AAC/C,YAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACvB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtD,gBAAA,cAAc,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO;gBACvC;YACF;AACA,YAAA,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAChC;IACF;AAAE,IAAA,MAAM;;IAER;;;;AAKA,IAAA,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;AAEnC,IAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE;IAEhD,IAAI,aAAa,IAAI,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE;QAClE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,uBAAA,EAA0B,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA,GAAA,EAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA,CAAE,CAAC;QAEtG,OAAO,CAAC,GAAG,EAAE;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA,CAAE,CAAC;AAE7C,QAAA,MAAM,UAAU,GAAG,gBAAgB,EAAE;QAErC,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,gBAAA,EAAmB,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA,CAAE,CAAC;YAC3E,OAAO,CAAC,GAAG,EAAE;QACf;aAAO;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,kBAAA,CAAoB,CAAC;AACpD,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA,CAAE,CAAC;YACvE,OAAO,CAAC,GAAG,EAAE;QACf;IACF;SAAO,IAAI,aAAa,EAAE;AACxB,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAA,oBAAA,EAAuB,cAAc,CAAA,CAAA,CAAG,CAAC;IAClE;SAAO;AACL,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC;IAC7D;;;;AAKA,IAAA,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC;AAEhD,IAAA,IAAI,YAAgC;AACpC,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE;;IAGlC,IAAI,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AAC1D,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY;IACpC;;IAGA,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE;QAC1C,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE;AACtC,YAAA,YAAY,GAAG,SAAS,CAAC,IAAI;QAC/B;IACF;IAEA,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,wCAAwC,CAAC;QAC9D,OAAO,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACxG,OAAO,CAAC,GAAG,EAAE;QACb;IACF;AAEA,IAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAA,uBAAA,CAAyB,CAAC;;IAGjD,OAAO,CAAC,GAAG,EAAE;AACb,IAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA,CAAE,CAAC;AACtD,IAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAE,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE;;AAGb,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;AACvC,YAAA,OAAO,EAAE,yDAAyD;AAClE,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;QAEF,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACrD,OAAO,CAAC,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,EAAE;YACb;QACF;IACF;IAEA,OAAO,CAAC,GAAG,EAAE;;AAGb,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,QAAA,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC;AAE3C,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,wBAAwB,EAAE;AACnD,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE;AAET,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,+BAA+B,CAAC;AAExD,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACxC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAC,CAAC,CAAC;AAE3D,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;AAC9B,wBAAA,OAAO,EAAE,oDAAoD;AAC7D,wBAAA,YAAY,EAAE,KAAK;AACpB,qBAAA,CAAC;oBAEF,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC1C,wBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjB;gBACF;YACF;iBAAO;AACL,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC;YACnD;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC;;QAElD;IACF;;AAGA,IAAA,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAEzC,IAAA,MAAM,SAAS,GAAc;AAC3B,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,WAAW,EAAE,EAAE;KAChB;;AAGD,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE;AAC/D,QAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAAE;AAC1E,QAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,EAAE;AACzE,QAAA,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,6BAA6B,CAAC,EAAE;KACrF;IAED,IAAI,aAAa,GAAG,CAAC;AAErB,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAsB;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAU;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;AAEhC,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;YACxB,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC/C,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,OAAO;YACnC;iBAAO;AACL,gBAAA,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO;YAC9B;AACA,YAAA,aAAa,EAAE;QACjB;IACF;AAEA,IAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAA,WAAA,EAAc,aAAa,CAAA,sBAAA,CAAwB,CAAC;;AAG3E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM;AAEvC,IAAA,CAAC,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC;AAErD,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,EAAG,QAAQ,CAAA,aAAA,CAAe,CAAC;;AAG3D,IAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACvB,QAAA,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACnD;AAEA,IAAA,IAAI;AACF,QAAA,QAAQ,CACN,CAAA,mBAAA,EAAsB,MAAM,CAAA,sDAAA,EAAyD,OAAO,GAAG,EAC/F;AACE,YAAA,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,MAAM;AACd,SAAA,CACF;AAED,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC;IAChD;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;;AAGrC,QAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACvB,YAAA,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACnD;QAEA,MAAM,IAAI,QAAQ,CAAC;AACjB,YAAA,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,CAAG;AAC7C,YAAA,WAAW,EAAE;gBACX,gCAAgC;AAChC,gBAAA,uEAAuE,GAAG,MAAM;gBAChF,4CAA4C;AAC7C,aAAA;AACF,SAAA,CAAC;IACJ;;AAGA,IAAA,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC;IAExC,IAAI,aAAa,GAAG,CAAC;AAErB,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,EAAE,GAAG,EAAE,QAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE;AAC3E,QAAA,EAAE,GAAG,EAAE,QAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE;AACjF,QAAA,EAAE,GAAG,EAAE,aAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE;AACrF,QAAA,EAAE,GAAG,EAAE,aAAsB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE;KAC5F;AAED,IAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY;QAC1C,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;QAEtF,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;AAC5C,YAAA,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC;AACjD,YAAA,aAAa,EAAE;QACjB;IACF;AAEA,IAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAA,UAAA,EAAa,aAAa,CAAA,sBAAA,CAAwB,CAAC;;AAG1E,IAAA,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;AAElC,IAAA,IAAI;QACF,QAAQ,CAAC,cAAc,EAAE;AACvB,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE;AACvD,SAAA,CAAC;AAEF,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC;IACnD;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,iCAAiC,CAAC;;AAGvD,QAAA,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEjD,MAAM,IAAI,QAAQ,CAAC;AACjB,YAAA,IAAI,EAAE,wBAAwB;AAC9B,YAAA,OAAO,EAAE,+CAA+C;AACxD,YAAA,WAAW,EAAE;gBACX,+BAA+B;gBAC/B,+BAA+B;gBAC/B,kBAAkB;AACnB,aAAA;AACF,SAAA,CAAC;IACJ;;AAGA,IAAA,CAAC,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAErD,IAAA,IAAI;QACF,QAAQ,CAAC,kBAAkB,EAAE;AAC3B,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE;AACvD,SAAA,CAAC;AAEF,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;IAC7C;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;;QAGrC,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC3D,WAAW,GAAG,MAAM,CAAE,KAA8B,CAAC,MAAM,IAAI,EAAE,CAAC;QACpE;AACA,QAAA,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC3E,WAAW,GAAG,MAAM,CAAE,KAA8B,CAAC,MAAM,IAAI,EAAE,CAAC;QACpE;;QAGA,IAAI,WAAW,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACtC,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAChD,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAC,CAAC;AACvD,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB;;AAGA,QAAA,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEjD,MAAM,IAAI,QAAQ,CAAC;AACjB,YAAA,IAAI,EAAE,sBAAsB;AAC5B,YAAA,OAAO,EAAE,6BAA6B;AACtC,YAAA,WAAW,EAAE;gBACX,kCAAkC;gBAClC,uCAAuC;gBACvC,6BAA6B;AAC9B,aAAA;AACF,SAAA,CAAC;IACJ;;AAGA,IAAA,MAAM,WAAW,GACf,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,mCAAmC,CAAC,GAAG,CAAC,CAAC;AAC1E,QAAA,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,mCAAmC,CAAC,GAAG,CAAC,CAAC;AAC/E,QAAA,OAAO,CAAC,GAAG,CAAC,YAAY;IAE1B,IAAI,WAAW,EAAE;AACf,QAAA,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC;AAEvC,QAAA,IAAI;YACF,QAAQ,CAAC,iDAAiD,EAAE;AAC1D,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AACtC,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;AACd,oBAAA,YAAY,EAAE,WAAW;AAC1B,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC;QACpD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAC1E;IACF;SAAO;AACL,QAAA,CAAC,CAAC,KAAK,CAAC,sDAAsD,CAAC;AAC/D,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC;IACpD;;AAGA,IAAA,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAE7B,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,EAAG,QAAQ,CAAA,QAAA,EAAW,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC;AAErE,IAAA,IAAI;;AAEF,QAAA,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC;;AAGnC,QAAA,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;AAEjC,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;IAC9C;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,6BAA6B,CAAC;;AAGnD,QAAA,IAAI;AACF,YAAA,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;AACzB,gBAAA,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC;AACnC,gBAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,iCAAiC,CAAC;YACjE;AACA,YAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACvB,gBAAA,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACnD;QACF;QAAE,OAAO,aAAa,EAAE;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,mDAAmD,CAAC;AAChF,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,SAAS,CAAA,CAAE,CAAC,CAAC;QAC3D;AAEA,QAAA,MAAM,KAAK;IACb;;AAGA,IAAA,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;AAEtB,IAAA,IAAI;AACF,QAAA,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;IAC7C;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,SAAS,CAAA,CAAE,CAAC,CAAC;IACjE;;IAGA,OAAO,CAAC,GAAG,EAAE;AACb,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,EAAE;;AAGb,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;IAChC,MAAM,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC;IAEjE,IAAI,qBAAqB,EAAE;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,EAAE;IACf;IAEA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE;AAEb,IAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,yBAAA,EAA4B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,EAAE;IACf;AACF;;;;"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// OpenBuilder CLI - Built with Rollup
|
|
2
|
-
import { r as reactExports, A as AppContext } from './theme-CktnrDZj.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
`useApp` is a React hook that exposes a method to manually exit the app (unmount).
|
|
6
|
-
*/
|
|
7
|
-
const useApp = () => reactExports.useContext(AppContext);
|
|
8
|
-
|
|
9
|
-
export { useApp as u };
|
|
10
|
-
//# sourceMappingURL=use-app-Cj2bzWaw.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-app-Cj2bzWaw.js","sources":["../../../../node_modules/.pnpm/ink@6.5.1_@types+react@19.2.7_react@19.1.0/node_modules/ink/build/hooks/use-app.js"],"sourcesContent":["import { useContext } from 'react';\nimport AppContext from '../components/AppContext.js';\n/**\n`useApp` is a React hook that exposes a method to manually exit the app (unmount).\n*/\nconst useApp = () => useContext(AppContext);\nexport default useApp;\n//# sourceMappingURL=use-app.js.map"],"names":["useContext"],"mappings":";;;AAEA;AACA;AACA;AACK,MAAC,MAAM,GAAG,MAAMA,uBAAU,CAAC,UAAU;;;;","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBuildState-pcDGDakI.js","sources":["../../src/cli/tui/components/BuildPanel.tsx","../../src/cli/tui/hooks/useBuildState.ts"],"sourcesContent":["/**\n * BuildPanel - Left panel showing current build info and todo list\n * Takes up 20% of width, shows:\n * - Project name\n * - Template name\n * - Agent/model\n * - Elapsed time\n * - Todo list with status indicators\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { BuildInfo, TodoItem } from '../../../lib/logging/types.js';\n\ninterface BuildPanelProps {\n build: BuildInfo | null;\n width: number;\n height?: number;\n}\n\nexport function BuildPanel({ build, width, height }: BuildPanelProps) {\n const [elapsedTime, setElapsedTime] = useState(0);\n\n // Update elapsed time every second\n useEffect(() => {\n if (!build || build.status !== 'running') {\n setElapsedTime(0);\n return;\n }\n\n const startTime = build.startTime;\n const updateElapsed = () => {\n const now = Date.now();\n setElapsedTime(Math.floor((now - startTime) / 1000));\n };\n\n updateElapsed();\n const interval = setInterval(updateElapsed, 1000);\n return () => clearInterval(interval);\n }, [build?.id, build?.status, build?.startTime]);\n\n // Don't render if no build\n if (!build) {\n return null;\n }\n\n const truncate = (str: string, maxLen: number) => {\n if (str.length <= maxLen) return str;\n return str.substring(0, maxLen - 3) + '...';\n };\n\n const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${mins}m ${secs}s`;\n };\n\n // Determine elapsed time to show\n const displayElapsed = build.status === 'running' \n ? elapsedTime \n : build.endTime \n ? Math.floor((build.endTime - build.startTime) / 1000)\n : 0;\n\n return (\n <Box\n flexDirection=\"column\"\n width={width}\n height={height}\n borderStyle=\"single\"\n borderColor={colors.darkGray}\n paddingX={1}\n >\n {/* Header */}\n <Box marginBottom={1}>\n <Text color={colors.cyan} bold>BUILD</Text>\n </Box>\n\n {/* Project name */}\n <Box>\n <Text color={colors.white}>{truncate(build.projectSlug, width - 4)}</Text>\n </Box>\n\n {/* Template */}\n {build.template && (\n <Box>\n <Text color={colors.gray}>{truncate(build.template, width - 4)}</Text>\n </Box>\n )}\n\n {/* Agent/model */}\n <Box>\n <Text color={colors.gray}>\n {build.agent === 'claude-code' ? build.model : build.agent}\n </Text>\n </Box>\n\n {/* Elapsed time with status */}\n <Box marginTop={1}>\n {build.status === 'running' && (\n <Text color={colors.cyan}>\n {symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'completed' && (\n <Text color={colors.success}>\n {symbols.check} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'failed' && (\n <Text color={colors.error}>\n {symbols.cross} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'pending' && (\n <Text color={colors.gray}>Pending...</Text>\n )}\n </Box>\n\n {/* Todo list */}\n {build.todos.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={colors.dimGray} bold>TASKS</Text>\n <TodoList todos={build.todos} maxWidth={width - 6} maxVisible={10} />\n </Box>\n )}\n\n {/* Error message if failed */}\n {build.status === 'failed' && build.error && (\n <Box marginTop={1}>\n <Text color={colors.error} wrap=\"truncate\">\n {truncate(build.error, width - 4)}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * TodoList - Smart display of todo items\n * - Shows up to maxVisible items (default 10)\n * - Prioritizes in_progress and pending tasks\n * - Hides completed tasks when space is needed\n * - Shows count of hidden completed tasks\n */\nfunction TodoList({ todos, maxWidth, maxVisible = 10 }: { \n todos: TodoItem[]; \n maxWidth: number;\n maxVisible?: number;\n}) {\n // Separate todos by status\n const inProgress = todos.filter(t => t.status === 'in_progress');\n const pending = todos.filter(t => t.status === 'pending');\n const completed = todos.filter(t => t.status === 'completed');\n const cancelled = todos.filter(t => t.status === 'cancelled');\n \n // Calculate how many slots we have for each category\n // Priority: in_progress > pending > completed > cancelled\n const activeCount = inProgress.length + pending.length;\n \n let visibleTodos: TodoItem[] = [];\n let hiddenCompletedCount = 0;\n \n if (todos.length <= maxVisible) {\n // All todos fit - show them in order\n visibleTodos = todos;\n } else {\n // Need to prioritize - always show in_progress and pending first\n visibleTodos = [...inProgress, ...pending];\n \n // Calculate remaining slots for completed tasks\n const remainingSlots = maxVisible - visibleTodos.length;\n \n if (remainingSlots > 0) {\n // Show as many completed as we can fit\n visibleTodos = [...visibleTodos, ...completed.slice(0, remainingSlots)];\n hiddenCompletedCount = Math.max(0, completed.length - remainingSlots);\n } else {\n hiddenCompletedCount = completed.length;\n }\n \n // Add cancelled if there's still room\n const slotsAfterCompleted = maxVisible - visibleTodos.length;\n if (slotsAfterCompleted > 0) {\n visibleTodos = [...visibleTodos, ...cancelled.slice(0, slotsAfterCompleted)];\n }\n }\n \n // Sort visible todos to maintain logical order (by original index)\n visibleTodos.sort((a, b) => {\n const aIndex = todos.findIndex(t => t.id === a.id);\n const bIndex = todos.findIndex(t => t.id === b.id);\n return aIndex - bIndex;\n });\n \n return (\n <>\n {visibleTodos.map((todo) => (\n <TodoRow key={todo.id} todo={todo} maxWidth={maxWidth} />\n ))}\n {hiddenCompletedCount > 0 && (\n <Text color={colors.dimGray}>✓ {hiddenCompletedCount} completed</Text>\n )}\n </>\n );\n}\n\n// Todo row component\nfunction TodoRow({ todo, maxWidth }: { todo: TodoItem; maxWidth: number }) {\n const statusIcon = {\n pending: <Text color={colors.dimGray}>{symbols.hollowDot}</Text>,\n in_progress: <Text color={colors.cyan}>{symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]}</Text>,\n completed: <Text color={colors.success}>{symbols.check}</Text>,\n cancelled: <Text color={colors.dimGray}>⊘</Text>,\n }[todo.status];\n\n const textColor = {\n pending: colors.dimGray,\n in_progress: colors.white,\n completed: colors.gray,\n cancelled: colors.dimGray,\n }[todo.status];\n\n const truncatedContent = todo.content.length > maxWidth - 3\n ? todo.content.substring(0, maxWidth - 6) + '...'\n : todo.content;\n\n return (\n <Box>\n {statusIcon}\n <Text color={textColor}> {truncatedContent}</Text>\n </Box>\n );\n}\n","/**\n * useBuildState - Hook to track build state and todos\n * \n * Manages:\n * - Active builds list\n * - Current build selection (for multi-build navigation)\n * - Todo list updates\n * - Build lifecycle events\n * \n * Subscribes to RunnerLogger events to automatically update state.\n * \n * IMPORTANT: Uses refs for event handlers to prevent race conditions\n * where events could be missed during re-subscriptions caused by\n * callback dependency changes.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { BuildInfo, TodoItem, LogEntry } from '../../../lib/logging/types.js';\nimport { getLogBuffer } from '../../../lib/logging/log-buffer.js';\nimport { getLogger } from '../../../lib/logging/index.js';\n\nexport interface BuildState {\n builds: BuildInfo[];\n currentBuildIndex: number;\n currentBuild: BuildInfo | null;\n isConnected: boolean;\n isVerbose: boolean;\n}\n\nexport interface BuildStateActions {\n nextBuild: () => void;\n prevBuild: () => void;\n setVerbose: (verbose: boolean) => void;\n toggleVerbose: () => void;\n addBuild: (build: BuildInfo) => void;\n updateBuild: (buildId: string, updates: Partial<BuildInfo>) => void;\n updateTodos: (buildId: string, todos: TodoItem[]) => void;\n setConnected: (connected: boolean) => void;\n}\n\nexport function useBuildState(): [BuildState, BuildStateActions] {\n const [builds, setBuilds] = useState<BuildInfo[]>([]);\n const [currentBuildIndex, setCurrentBuildIndex] = useState(0);\n const [isConnected, setIsConnected] = useState(false);\n const [isVerbose, setIsVerbose] = useState(false);\n\n // Derive current build from index\n const currentBuild = builds.length > 0 ? builds[currentBuildIndex] ?? null : null;\n\n // Navigation between builds\n const nextBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return (prev + 1) % builds.length;\n });\n }, [builds.length]);\n\n const prevBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return prev === 0 ? builds.length - 1 : prev - 1;\n });\n }, [builds.length]);\n\n // Verbose toggle - updates both UI state and logger\n const toggleVerbose = useCallback(() => {\n setIsVerbose(prev => {\n const newValue = !prev;\n // Also update the logger's verbose flag\n try {\n const logger = getLogger();\n logger.setVerbose(newValue);\n } catch {\n // Logger not initialized yet\n }\n return newValue;\n });\n }, []);\n\n // Track when a new build is added to auto-select it\n const [pendingNewBuildId, setPendingNewBuildId] = useState<string | null>(null);\n\n // Add a new build\n const addBuild = useCallback((build: BuildInfo) => {\n setBuilds(prev => {\n // Check if build already exists\n const exists = prev.some(b => b.id === build.id);\n if (exists) {\n // Update existing build\n return prev.map(b => b.id === build.id ? { ...b, ...build } : b);\n }\n // Mark this as a new build to auto-select\n setPendingNewBuildId(build.id);\n // Add new build\n return [...prev, build];\n });\n }, []);\n\n // Auto-select newly added builds\n useEffect(() => {\n if (pendingNewBuildId) {\n const index = builds.findIndex(b => b.id === pendingNewBuildId);\n if (index !== -1) {\n setCurrentBuildIndex(index);\n }\n setPendingNewBuildId(null);\n }\n }, [builds, pendingNewBuildId]);\n\n // Update an existing build\n const updateBuild = useCallback((buildId: string, updates: Partial<BuildInfo>) => {\n setBuilds(prev => prev.map(build => \n build.id === buildId ? { ...build, ...updates } : build\n ));\n }, []);\n\n // Update todos for a build\n const updateTodos = useCallback((buildId: string, todos: TodoItem[]) => {\n setBuilds(prev => prev.map(build =>\n build.id === buildId ? { ...build, todos } : build\n ));\n }, []);\n\n // Connection status\n const setConnected = useCallback((connected: boolean) => {\n setIsConnected(connected);\n }, []);\n\n // Use refs to store the latest callbacks so event handlers always call current versions\n // This prevents race conditions where events could be missed during re-subscriptions\n const addBuildRef = useRef(addBuild);\n const updateBuildRef = useRef(updateBuild);\n const updateTodosRef = useRef(updateTodos);\n \n // Keep refs up to date\n useEffect(() => {\n addBuildRef.current = addBuild;\n }, [addBuild]);\n \n useEffect(() => {\n updateBuildRef.current = updateBuild;\n }, [updateBuild]);\n \n useEffect(() => {\n updateTodosRef.current = updateTodos;\n }, [updateTodos]);\n\n // Subscribe to RunnerLogger events - only runs ONCE on mount\n // Uses refs for callbacks to avoid re-subscription race conditions\n useEffect(() => {\n const logger = getLogger();\n \n // Sync initial state from logger (in case events already fired)\n setIsConnected(logger.isConnected());\n setIsVerbose(logger.isVerbose());\n \n // Load any existing builds\n const existingBuilds = logger.getAllBuilds();\n if (existingBuilds.length > 0) {\n for (const build of existingBuilds) {\n addBuildRef.current(build);\n }\n }\n \n // Handle build start events - use ref to get latest callback\n const handleBuildStart = (build: BuildInfo) => {\n addBuildRef.current(build);\n };\n \n // Handle build update events\n const handleBuildUpdate = (build: BuildInfo) => {\n updateBuildRef.current(build.id, build);\n };\n \n // Handle build complete events\n const handleBuildComplete = (build: BuildInfo) => {\n updateBuildRef.current(build.id, { ...build, status: build.status });\n };\n \n // Handle todo updates\n const handleTodoUpdate = (buildId: string, todos: TodoItem[]) => {\n updateTodosRef.current(buildId, todos);\n };\n \n // Handle connection events\n const handleConnected = () => {\n setIsConnected(true);\n };\n \n const handleDisconnected = () => {\n setIsConnected(false);\n };\n \n // Handle verbose change\n const handleVerboseChange = (verbose: boolean) => {\n setIsVerbose(verbose);\n };\n \n // Subscribe to events\n logger.on('buildStart', handleBuildStart);\n logger.on('buildUpdate', handleBuildUpdate);\n logger.on('buildComplete', handleBuildComplete);\n logger.on('todoUpdate', handleTodoUpdate);\n logger.on('connected', handleConnected);\n logger.on('disconnected', handleDisconnected);\n logger.on('verboseChange', handleVerboseChange);\n \n // Cleanup - only runs on unmount\n return () => {\n logger.off('buildStart', handleBuildStart);\n logger.off('buildUpdate', handleBuildUpdate);\n logger.off('buildComplete', handleBuildComplete);\n logger.off('todoUpdate', handleTodoUpdate);\n logger.off('connected', handleConnected);\n logger.off('disconnected', handleDisconnected);\n logger.off('verboseChange', handleVerboseChange);\n };\n }, []); // Empty deps - only subscribe once on mount\n\n const state: BuildState = {\n builds,\n currentBuildIndex,\n currentBuild,\n isConnected,\n isVerbose,\n };\n\n const actions: BuildStateActions = {\n nextBuild,\n prevBuild,\n setVerbose: setIsVerbose,\n toggleVerbose,\n addBuild,\n updateBuild,\n updateTodos,\n setConnected,\n };\n\n return [state, actions];\n}\n\n/**\n * Hook to subscribe to log entries from the buffer\n */\nexport function useLogEntries(maxEntries: number = 100): LogEntry[] {\n const [entries, setEntries] = useState<LogEntry[]>([]);\n\n useEffect(() => {\n const buffer = getLogBuffer();\n \n // Initialize with current entries\n setEntries(buffer.getRecent(maxEntries));\n\n // Subscribe to new entries\n const unsubscribe = buffer.onLog((entry) => {\n setEntries(prev => {\n const newEntries = [...prev, entry];\n // Keep only the most recent entries\n if (newEntries.length > maxEntries) {\n return newEntries.slice(-maxEntries);\n }\n return newEntries;\n });\n });\n\n return unsubscribe;\n }, [maxEntries]);\n\n return entries;\n}\n"],"names":["useState","useEffect","_jsxs","_jsx","useCallback","useRef"],"mappings":"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"}
|
package/dist/cli/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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 OpenBuilder 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 OpenBuilder 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: @openbuilder/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('/openbuilder/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/@openbuilder\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/openbuilder.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'; // `openbuilder run` uses TUI Dashboard\nconst isRunnerCommand = args[0] === 'runner' && !args.includes('--no-tui'); // `openbuilder runner` uses TUI Dashboard (unless --no-tui)\nconst isVersionCommand = args.includes('--version') || args.includes('-V'); // Skip banner for version output\nconst isSkipBanner = process.env.OPENBUILDER_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.OPENBUILDER_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('openbuilder')\n .description('OpenBuilder 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 OpenBuilder server)')\n .option('-u, --url <url>', 'OpenBuilder server URL (default: https://openbuilder.sh)')\n .option('-w, --workspace <path>', 'Workspace directory (default: ~/openbuilder-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 OpenBuilder via OAuth (GitHub/Sentry)')\n .option('-u, --url <url>', 'OpenBuilder server URL (default: https://openbuilder.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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"}
|