@a3t/rapid 0.1.9 → 0.1.10
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/init.ts","../src/commands/dev.ts","../src/utils/worktree.ts","../src/isolation/lima.ts","../src/commands/status.ts","../src/commands/agent.ts","../src/commands/start.ts","../src/commands/stop.ts","../src/commands/secrets.ts","../src/commands/auth.ts","../src/commands/mcp.ts","../src/commands/update.ts","../src/utils/update-checker.ts","../src/commands/worktree.ts","../src/commands/lima.ts"],"sourcesContent":["/**\n * RAPID CLI\n */\n\nimport { Command } from 'commander';\nimport { setLogLevel, logger } from '@a3t/rapid-core';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\n\nimport { initCommand } from './commands/init.js';\nimport { devCommand } from './commands/dev.js';\nimport { statusCommand } from './commands/status.js';\nimport { agentCommand } from './commands/agent.js';\nimport { startCommand } from './commands/start.js';\nimport { stopCommand } from './commands/stop.js';\nimport { secretsCommand } from './commands/secrets.js';\nimport { authCommand } from './commands/auth.js';\nimport { mcpCommand } from './commands/mcp.js';\nimport { updateCommand } from './commands/update.js';\nimport { worktreeCommand } from './commands/worktree.js';\nimport { limaCommand } from './commands/lima.js';\nimport { updateChecker } from './utils/update-checker.js';\n\n// Read version from package.json\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst VERSION = packageJson.version;\n\nexport const program = new Command();\n\nprogram\n .name('rapid')\n .description('AI-assisted development with dev containers')\n .version(VERSION, '-v, --version', 'Show version')\n .option('--verbose', 'Verbose output')\n .option('-q, --quiet', 'Minimal output')\n .option('--config <path>', 'Path to rapid.json')\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n if (opts.verbose) {\n setLogLevel('debug');\n } else if (opts.quiet) {\n setLogLevel('error');\n }\n\n // Skip update check for the update command itself and version command\n if (thisCommand.name() === 'update' || thisCommand.name() === 'version') {\n return;\n }\n\n // Check for updates in the background\n try {\n await updateChecker.checkAndUpdate();\n } catch (error) {\n // Silently fail update checks to not interrupt normal CLI usage\n logger.debug('Update check failed:', error);\n }\n });\n\n// Register commands\nprogram.addCommand(initCommand);\nprogram.addCommand(startCommand);\nprogram.addCommand(devCommand);\nprogram.addCommand(stopCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(agentCommand);\nprogram.addCommand(secretsCommand);\nprogram.addCommand(authCommand);\nprogram.addCommand(mcpCommand);\nprogram.addCommand(updateCommand);\nprogram.addCommand(worktreeCommand);\nprogram.addCommand(limaCommand);\n\n// Default action - show help\nprogram.action(() => {\n console.log();\n console.log(` ${logger.brand('RAPID')} ${logger.dim(`v${VERSION}`)}`);\n console.log(` ${logger.dim('AI-assisted development with dev containers')}`);\n console.log();\n program.help();\n});\n","/**\n * rapid init - Initialize RAPID in a project\n */\n\nimport { Command } from 'commander';\nimport { writeFile, access, readFile, readdir, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport {\n getDefaultConfig,\n logger,\n MCP_SERVER_TEMPLATES,\n addMcpServerFromTemplate,\n getSecretReferences,\n writeMcpConfig,\n writeOpenCodeConfig,\n RAPID_METHODOLOGY,\n MCP_USAGE_GUIDELINES,\n GIT_GUIDELINES,\n type RapidConfig,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\n/**\n * Detected project type with language and optional framework\n */\ninterface DetectedProject {\n language: 'typescript' | 'javascript' | 'python' | 'rust' | 'go' | 'ruby' | 'java' | 'unknown';\n framework?: string;\n packageManager?: string;\n confidence: 'high' | 'medium' | 'low';\n}\n\n/**\n * Detect project type from files in directory\n */\nasync function detectProjectType(dir: string): Promise<DetectedProject> {\n const files = await readdir(dir).catch(() => []);\n const fileSet = new Set(files);\n\n // Check for Rust\n if (fileSet.has('Cargo.toml')) {\n return { language: 'rust', confidence: 'high' };\n }\n\n // Check for Go\n if (fileSet.has('go.mod')) {\n return { language: 'go', confidence: 'high' };\n }\n\n // Check for Python\n if (fileSet.has('pyproject.toml')) {\n const content = await readFile(join(dir, 'pyproject.toml'), 'utf-8').catch(() => '');\n const framework = content.includes('fastapi')\n ? 'fastapi'\n : content.includes('django')\n ? 'django'\n : content.includes('flask')\n ? 'flask'\n : undefined;\n if (framework) {\n return { language: 'python', framework, confidence: 'high' };\n }\n return { language: 'python', confidence: 'high' };\n }\n if (fileSet.has('requirements.txt') || fileSet.has('setup.py') || fileSet.has('Pipfile')) {\n return { language: 'python', confidence: 'medium' };\n }\n\n // Check for Ruby\n if (fileSet.has('Gemfile')) {\n return { language: 'ruby', confidence: 'high' };\n }\n\n // Check for Java\n if (fileSet.has('pom.xml') || fileSet.has('build.gradle') || fileSet.has('build.gradle.kts')) {\n return { language: 'java', confidence: 'high' };\n }\n\n // Check for TypeScript/JavaScript (most common, check last)\n if (fileSet.has('tsconfig.json')) {\n const pkgManager = fileSet.has('pnpm-lock.yaml')\n ? 'pnpm'\n : fileSet.has('yarn.lock')\n ? 'yarn'\n : fileSet.has('bun.lockb') || fileSet.has('bun.lock')\n ? 'bun'\n : 'npm';\n\n // Try to detect framework from package.json\n let framework: string | undefined;\n if (fileSet.has('package.json')) {\n const pkg = await readFile(join(dir, 'package.json'), 'utf-8').catch(() => '{}');\n try {\n const parsed = JSON.parse(pkg);\n const deps = { ...parsed.dependencies, ...parsed.devDependencies };\n if (deps.next) framework = 'nextjs';\n else if (deps.nuxt) framework = 'nuxt';\n else if (deps.react) framework = 'react';\n else if (deps.vue) framework = 'vue';\n else if (deps.svelte) framework = 'svelte';\n else if (deps.express) framework = 'express';\n else if (deps.fastify) framework = 'fastify';\n else if (deps.hono) framework = 'hono';\n } catch {\n // Ignore parse errors\n }\n }\n\n const result: DetectedProject = {\n language: 'typescript',\n packageManager: pkgManager,\n confidence: 'high',\n };\n if (framework) {\n result.framework = framework;\n }\n return result;\n }\n\n if (fileSet.has('package.json')) {\n const pkgManager = fileSet.has('pnpm-lock.yaml')\n ? 'pnpm'\n : fileSet.has('yarn.lock')\n ? 'yarn'\n : 'npm';\n return { language: 'javascript', packageManager: pkgManager, confidence: 'medium' };\n }\n\n return { language: 'unknown', confidence: 'low' };\n}\n\n/**\n * Get suggested template based on detected project\n */\nfunction getSuggestedTemplate(detected: DetectedProject): string {\n switch (detected.language) {\n case 'typescript':\n return 'typescript';\n case 'javascript':\n return 'typescript'; // Use TS template for JS too\n case 'python':\n return 'python';\n case 'rust':\n return 'rust';\n case 'go':\n return 'go';\n default:\n return 'universal';\n }\n}\n\ninterface TemplateSource {\n type: 'builtin' | 'github' | 'gitlab' | 'npm' | 'url';\n source: string;\n subdir?: string;\n ref?: string;\n}\n\n/**\n * Parse template source - supports:\n * - Built-in templates: typescript, python, rust, go, universal\n * - GitHub: github:user/repo, gh:user/repo, user/repo\n * - GitLab: gitlab:user/repo\n * - npm packages: npm:@scope/package, npm:package\n * - Direct URLs: https://...\n */\nfunction parseTemplateSource(input: string): TemplateSource {\n // Built-in templates\n const builtinTemplates = [\n 'typescript',\n 'python',\n 'rust',\n 'go',\n 'universal',\n 'default',\n 'infrastructure',\n ];\n if (builtinTemplates.includes(input)) {\n return { type: 'builtin', source: input };\n }\n\n // GitHub explicit: github:user/repo or gh:user/repo\n if (input.startsWith('github:') || input.startsWith('gh:')) {\n const source = input.replace(/^(github|gh):/, '');\n const parsed = parseRepoPath(source);\n const result: TemplateSource = { type: 'github', source: parsed.repo };\n if (parsed.subdir) result.subdir = parsed.subdir;\n if (parsed.ref) result.ref = parsed.ref;\n return result;\n }\n\n // GitLab: gitlab:user/repo\n if (input.startsWith('gitlab:')) {\n const source = input.replace(/^gitlab:/, '');\n const parsed = parseRepoPath(source);\n const result: TemplateSource = { type: 'gitlab', source: parsed.repo };\n if (parsed.subdir) result.subdir = parsed.subdir;\n if (parsed.ref) result.ref = parsed.ref;\n return result;\n }\n\n // npm: npm:@scope/package or npm:package\n if (input.startsWith('npm:')) {\n return { type: 'npm', source: input.replace(/^npm:/, '') };\n }\n\n // Direct URL\n if (input.startsWith('https://') || input.startsWith('http://')) {\n return { type: 'url', source: input };\n }\n\n // Assume GitHub shorthand: user/repo\n if (/^[\\w.-]+\\/[\\w.-]+/.test(input)) {\n const parsed = parseRepoPath(input);\n const result: TemplateSource = { type: 'github', source: parsed.repo };\n if (parsed.subdir) result.subdir = parsed.subdir;\n if (parsed.ref) result.ref = parsed.ref;\n return result;\n }\n\n // Fallback to builtin\n return { type: 'builtin', source: 'universal' };\n}\n\ninterface RepoPath {\n repo: string;\n subdir?: string;\n ref?: string;\n}\n\n/**\n * Parse repo path with optional subdir and ref\n * Format: user/repo/subdir#ref\n */\nfunction parseRepoPath(input: string): RepoPath {\n let ref: string | undefined;\n let path = input;\n\n // Extract ref after #\n if (path.includes('#')) {\n const parts = path.split('#');\n path = parts[0]!;\n ref = parts[1];\n }\n\n // Split into repo and subdir\n const segments = path.split('/');\n if (segments.length >= 2) {\n const repo = `${segments[0]}/${segments[1]}`;\n const subdir = segments.length > 2 ? segments.slice(2).join('/') : undefined;\n const result: RepoPath = { repo };\n if (subdir) result.subdir = subdir;\n if (ref) result.ref = ref;\n return result;\n }\n\n const result: RepoPath = { repo: path };\n if (ref) result.ref = ref;\n return result;\n}\n\n/**\n * Download template from remote source using giget\n */\nasync function downloadRemoteTemplate(\n parsed: ReturnType<typeof parseTemplateSource>,\n destDir: string,\n spinner: ReturnType<typeof ora>\n): Promise<boolean> {\n try {\n // Dynamic import of giget\n const { downloadTemplate } = await import('giget');\n\n let source: string;\n switch (parsed.type) {\n case 'github':\n source = `github:${parsed.source}${parsed.subdir ? '/' + parsed.subdir : ''}${parsed.ref ? '#' + parsed.ref : ''}`;\n break;\n case 'gitlab':\n source = `gitlab:${parsed.source}${parsed.subdir ? '/' + parsed.subdir : ''}${parsed.ref ? '#' + parsed.ref : ''}`;\n break;\n case 'url':\n source = parsed.source;\n break;\n default:\n return false;\n }\n\n spinner.text = `Downloading template from ${source}...`;\n await downloadTemplate(source, {\n dir: destDir,\n force: true,\n });\n\n return true;\n } catch (error) {\n logger.debug(\n `Failed to download template: ${error instanceof Error ? error.message : String(error)}`\n );\n return false;\n }\n}\n\n/**\n * DevContainer configuration for a specific language/framework\n */\ninterface DevContainerConfig {\n name: string;\n image: string;\n features?: Record<string, Record<string, unknown> | object>;\n customizations: {\n vscode: {\n extensions: string[];\n settings?: Record<string, unknown>;\n };\n };\n containerEnv?: Record<string, string>;\n postCreateCommand?: string;\n postStartCommand: string;\n remoteUser: string;\n mounts?: string[];\n}\n\n/**\n * Pre-built image registry\n */\nconst PREBUILT_IMAGE_REGISTRY = 'ghcr.io/a3tai/rapid-devcontainer';\n\n/**\n * Map of language to pre-built image name\n */\nconst PREBUILT_IMAGES: Record<string, string> = {\n typescript: `${PREBUILT_IMAGE_REGISTRY}-typescript:latest`,\n javascript: `${PREBUILT_IMAGE_REGISTRY}-typescript:latest`,\n python: `${PREBUILT_IMAGE_REGISTRY}-python:latest`,\n rust: `${PREBUILT_IMAGE_REGISTRY}-rust:latest`,\n go: `${PREBUILT_IMAGE_REGISTRY}-go:latest`,\n universal: `${PREBUILT_IMAGE_REGISTRY}-universal:latest`,\n infrastructure: `${PREBUILT_IMAGE_REGISTRY}-infrastructure:latest`,\n};\n\n/**\n * VSCode customizations for each template (used with pre-built images)\n */\nconst TEMPLATE_CUSTOMIZATIONS: Record<string, DevContainerConfig['customizations']> = {\n typescript: {\n vscode: {\n extensions: [\n 'dbaeumer.vscode-eslint',\n 'esbenp.prettier-vscode',\n 'bradlc.vscode-tailwindcss',\n 'prisma.prisma',\n 'mikestead.dotenv',\n ],\n settings: {\n 'editor.formatOnSave': true,\n 'editor.defaultFormatter': 'esbenp.prettier-vscode',\n },\n },\n },\n python: {\n vscode: {\n extensions: [\n 'ms-python.python',\n 'ms-python.vscode-pylance',\n 'charliermarsh.ruff',\n 'ms-toolsai.jupyter',\n ],\n settings: {\n '[python]': {\n 'editor.formatOnSave': true,\n 'editor.defaultFormatter': 'charliermarsh.ruff',\n },\n },\n },\n },\n rust: {\n vscode: {\n extensions: ['rust-lang.rust-analyzer', 'tamasfe.even-better-toml', 'vadimcn.vscode-lldb'],\n settings: { '[rust]': { 'editor.formatOnSave': true } },\n },\n },\n go: {\n vscode: {\n extensions: ['golang.go', 'zxh404.vscode-proto3'],\n settings: { '[go]': { 'editor.formatOnSave': true } },\n },\n },\n universal: {\n vscode: {\n extensions: [\n 'dbaeumer.vscode-eslint',\n 'esbenp.prettier-vscode',\n 'ms-python.python',\n 'golang.go',\n ],\n },\n },\n infrastructure: {\n vscode: {\n extensions: [\n 'hashicorp.terraform',\n 'ms-kubernetes-tools.vscode-kubernetes-tools',\n 'redhat.vscode-yaml',\n ],\n },\n },\n};\n\n/**\n * Get configuration for pre-built image (minimal, since features are baked in)\n */\nfunction getPrebuiltConfig(\n templateName: string,\n containerEnv: Record<string, string>,\n postStartCommand: string\n): DevContainerConfig {\n const image = PREBUILT_IMAGES[templateName] ?? PREBUILT_IMAGES.universal!;\n const customizations =\n TEMPLATE_CUSTOMIZATIONS[templateName] ?? TEMPLATE_CUSTOMIZATIONS.universal!;\n const remoteUser = templateName === 'typescript' ? 'node' : 'vscode';\n\n return {\n name: `RAPID ${templateName.charAt(0).toUpperCase() + templateName.slice(1)} (Pre-built)`,\n image,\n customizations,\n containerEnv,\n postStartCommand,\n remoteUser,\n };\n}\n\n/**\n * Get devcontainer configuration based on detected project\n */\nfunction getDevContainerConfig(\n detected?: DetectedProject,\n usePrebuilt = false\n): DevContainerConfig {\n const baseFeatures = {\n 'ghcr.io/devcontainers/features/git:1': {},\n 'ghcr.io/devcontainers-contrib/features/direnv:1': {},\n 'ghcr.io/devcontainers-contrib/features/starship:1': {},\n 'ghcr.io/devcontainers-contrib/features/1password-cli:1': {},\n };\n\n const containerEnv = {\n OP_SERVICE_ACCOUNT_TOKEN: '${localEnv:OP_SERVICE_ACCOUNT_TOKEN}',\n };\n\n const postCreateBase =\n 'npm install -g @anthropic-ai/claude-code && curl -fsSL https://opencode.ai/install | bash';\n const postStartCommand = 'direnv allow 2>/dev/null || true';\n\n const language = detected?.language || 'unknown';\n const templateName =\n language === 'javascript' ? 'typescript' : language === 'unknown' ? 'universal' : language;\n\n // If using pre-built image, return minimal config (features are baked in)\n if (usePrebuilt && PREBUILT_IMAGES[templateName]) {\n return getPrebuiltConfig(templateName, containerEnv, postStartCommand);\n }\n\n switch (language) {\n case 'typescript':\n case 'javascript':\n return {\n name: 'RAPID TypeScript',\n image: 'mcr.microsoft.com/devcontainers/typescript-node:22',\n features: {\n ...baseFeatures,\n 'ghcr.io/devcontainers-contrib/features/pnpm:2': {},\n },\n customizations: {\n vscode: {\n extensions: [\n 'dbaeumer.vscode-eslint',\n 'esbenp.prettier-vscode',\n 'bradlc.vscode-tailwindcss',\n 'prisma.prisma',\n 'mikestead.dotenv',\n ],\n settings: {\n 'editor.formatOnSave': true,\n 'editor.defaultFormatter': 'esbenp.prettier-vscode',\n 'editor.codeActionsOnSave': {\n 'source.fixAll.eslint': 'explicit',\n },\n },\n },\n },\n containerEnv,\n postCreateCommand: postCreateBase,\n postStartCommand,\n remoteUser: 'node',\n };\n\n case 'python':\n return {\n name: 'RAPID Python',\n image: 'mcr.microsoft.com/devcontainers/python:3.12',\n features: {\n ...baseFeatures,\n 'ghcr.io/devcontainers/features/node:1': { version: '22' },\n 'ghcr.io/devcontainers-contrib/features/poetry:2': {},\n 'ghcr.io/devcontainers-contrib/features/uv:1': {},\n },\n customizations: {\n vscode: {\n extensions: [\n 'ms-python.python',\n 'ms-python.vscode-pylance',\n 'ms-python.debugpy',\n 'charliermarsh.ruff',\n 'ms-toolsai.jupyter',\n 'tamasfe.even-better-toml',\n ],\n settings: {\n 'python.defaultInterpreterPath': '/usr/local/bin/python',\n '[python]': {\n 'editor.formatOnSave': true,\n 'editor.defaultFormatter': 'charliermarsh.ruff',\n 'editor.codeActionsOnSave': {\n 'source.fixAll': 'explicit',\n 'source.organizeImports': 'explicit',\n },\n },\n },\n },\n },\n containerEnv,\n postCreateCommand: `${postCreateBase} && pip install aider-chat`,\n postStartCommand,\n remoteUser: 'vscode',\n };\n\n case 'rust':\n return {\n name: 'RAPID Rust',\n image: 'mcr.microsoft.com/devcontainers/rust:latest',\n features: {\n ...baseFeatures,\n 'ghcr.io/devcontainers/features/node:1': { version: '22' },\n },\n customizations: {\n vscode: {\n extensions: [\n 'rust-lang.rust-analyzer',\n 'tamasfe.even-better-toml',\n 'serayuzgur.crates',\n 'vadimcn.vscode-lldb',\n ],\n settings: {\n 'rust-analyzer.checkOnSave.command': 'clippy',\n '[rust]': {\n 'editor.formatOnSave': true,\n 'editor.defaultFormatter': 'rust-lang.rust-analyzer',\n },\n },\n },\n },\n containerEnv,\n postCreateCommand: `${postCreateBase} && rustup component add clippy rustfmt`,\n postStartCommand,\n remoteUser: 'vscode',\n };\n\n case 'go':\n return {\n name: 'RAPID Go',\n image: 'mcr.microsoft.com/devcontainers/go:1.23',\n features: {\n ...baseFeatures,\n 'ghcr.io/devcontainers/features/node:1': { version: '22' },\n },\n customizations: {\n vscode: {\n extensions: ['golang.go', 'zxh404.vscode-proto3', 'tamasfe.even-better-toml'],\n settings: {\n 'go.useLanguageServer': true,\n 'go.lintTool': 'golangci-lint',\n 'go.lintFlags': ['--fast'],\n '[go]': {\n 'editor.formatOnSave': true,\n 'editor.codeActionsOnSave': {\n 'source.organizeImports': 'explicit',\n },\n },\n },\n },\n },\n containerEnv,\n postCreateCommand: `${postCreateBase} && go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest && go install github.com/air-verse/air@latest`,\n postStartCommand,\n remoteUser: 'vscode',\n };\n\n default:\n // Universal container with multiple languages\n return {\n name: 'RAPID Universal',\n image: 'mcr.microsoft.com/devcontainers/base:ubuntu',\n features: {\n ...baseFeatures,\n 'ghcr.io/devcontainers/features/node:1': { version: '22' },\n 'ghcr.io/devcontainers/features/python:1': { version: '3.12' },\n 'ghcr.io/devcontainers/features/go:1': { version: '1.23' },\n 'ghcr.io/devcontainers/features/docker-in-docker:2': {},\n },\n customizations: {\n vscode: {\n extensions: [\n 'dbaeumer.vscode-eslint',\n 'esbenp.prettier-vscode',\n 'ms-python.python',\n 'ms-python.vscode-pylance',\n 'golang.go',\n 'tamasfe.even-better-toml',\n 'redhat.vscode-yaml',\n ],\n },\n },\n containerEnv,\n postCreateCommand: `${postCreateBase} && pip install aider-chat`,\n postStartCommand,\n remoteUser: 'vscode',\n };\n }\n}\n\n/**\n * Create devcontainer configuration files\n */\nasync function createDevContainer(\n dir: string,\n detected?: DetectedProject,\n force = false,\n usePrebuilt = false\n): Promise<boolean> {\n const devcontainerDir = join(dir, '.devcontainer');\n const devcontainerJsonPath = join(devcontainerDir, 'devcontainer.json');\n\n // Check if devcontainer already exists\n if (!force && existsSync(devcontainerJsonPath)) {\n return false; // Skip, already exists\n }\n\n // Create .devcontainer directory\n await mkdir(devcontainerDir, { recursive: true });\n\n // Get configuration based on detected project\n const config = getDevContainerConfig(detected, usePrebuilt);\n\n // Write devcontainer.json\n await writeFile(devcontainerJsonPath, JSON.stringify(config, null, 2) + '\\n');\n\n return true;\n}\n\nexport const initCommand = new Command('init')\n .description('Initialize RAPID in a project')\n .argument('[template]', 'Template: builtin name, github:user/repo, npm:package, or URL')\n .option('--force', 'Overwrite existing files', false)\n .option('--agent <name>', 'Default agent to configure', 'claude')\n .option('--no-devcontainer', 'Skip devcontainer creation')\n .option('--prebuilt', 'Use pre-built devcontainer images from ghcr.io (faster startup)', false)\n .option('--mcp <servers>', 'MCP servers to enable (comma-separated)', 'context7,tavily')\n .option('--no-mcp', 'Skip MCP server configuration')\n .option('--no-detect', 'Skip auto-detection of project type')\n .action(async (templateArg: string | undefined, options) => {\n const spinner = ora('Initializing RAPID...').start();\n\n try {\n const cwd = process.cwd();\n const configPath = join(cwd, 'rapid.json');\n\n // Check if config already exists\n if (!options.force) {\n try {\n await access(configPath);\n spinner.fail('rapid.json already exists. Use --force to overwrite.');\n process.exit(1);\n } catch {\n // File doesn't exist, continue\n }\n }\n\n // Auto-detect project type if no template specified\n let detectedProject: DetectedProject | undefined;\n let templateSource = templateArg;\n\n if (!templateArg && options.detect !== false) {\n spinner.text = 'Detecting project type...';\n detectedProject = await detectProjectType(cwd);\n\n if (detectedProject.language !== 'unknown') {\n const suggested = getSuggestedTemplate(detectedProject);\n spinner.succeed(\n `Detected ${detectedProject.language}${detectedProject.framework ? ` (${detectedProject.framework})` : ''} project`\n );\n templateSource = suggested;\n logger.info(`Using ${logger.brand(suggested)} template`);\n } else {\n spinner.info('Could not detect project type, using universal template');\n templateSource = 'universal';\n }\n spinner.start('Initializing RAPID...');\n }\n\n // Parse template source\n const parsed = parseTemplateSource(templateSource || 'universal');\n\n // Handle remote templates (GitHub, GitLab, npm, URL)\n if (parsed.type !== 'builtin') {\n spinner.text = `Fetching template from ${parsed.source}...`;\n\n // For npm packages, we'd need additional handling\n if (parsed.type === 'npm') {\n spinner.fail('npm template support coming soon. Use github:user/repo instead.');\n process.exit(1);\n }\n\n const downloaded = await downloadRemoteTemplate(parsed, cwd, spinner);\n if (!downloaded) {\n spinner.fail(`Failed to download template from ${parsed.source}`);\n logger.info('Make sure the repository exists and is accessible.');\n logger.info('For private repos, set GIGET_AUTH environment variable.');\n process.exit(1);\n }\n\n spinner.succeed(`Downloaded template from ${parsed.source}`);\n\n // Check if downloaded template has rapid.json, if so we're done\n try {\n await access(join(cwd, 'rapid.json'));\n logger.blank();\n logger.info('Template includes rapid.json configuration.');\n logger.info('Run `rapid dev` to start coding!');\n return;\n } catch {\n // No rapid.json in template, continue to create one\n spinner.start('Creating RAPID configuration...');\n }\n }\n\n // Parse MCP servers option\n const mcpServers: string[] =\n options.mcp === false ? [] : options.mcp.split(',').map((s: string) => s.trim());\n\n // Create config with MCP servers\n let config = createConfig(options, detectedProject);\n\n // Add MCP servers\n if (mcpServers.length > 0) {\n spinner.text = 'Configuring MCP servers...';\n for (const serverName of mcpServers) {\n if (MCP_SERVER_TEMPLATES[serverName]) {\n config = addMcpServerFromTemplate(config, serverName);\n } else {\n logger.warn(`Unknown MCP server template: ${serverName}`);\n }\n }\n\n // Add secret references for MCP servers\n const secretRefs = getSecretReferences(mcpServers);\n if (Object.keys(secretRefs).length > 0) {\n config.secrets = {\n ...config.secrets,\n provider: '1password',\n vault: 'Development',\n items: {\n ...config.secrets?.items,\n ...secretRefs,\n },\n };\n }\n }\n\n spinner.text = 'Writing rapid.json...';\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n');\n\n // Generate MCP config files if MCP servers are configured\n if (mcpServers.length > 0) {\n spinner.text = 'Generating MCP configuration files...';\n await writeMcpConfig(cwd, config);\n await writeOpenCodeConfig(cwd, config);\n }\n\n // Create CLAUDE.md if using claude\n if (config.agents.available.claude) {\n spinner.text = 'Creating CLAUDE.md...';\n const claudeMdPath = join(cwd, 'CLAUDE.md');\n await writeFile(claudeMdPath, getClaudeMdTemplate(cwd, detectedProject));\n }\n\n // Create AGENTS.md\n spinner.text = 'Creating AGENTS.md...';\n const agentsMdPath = join(cwd, 'AGENTS.md');\n await writeFile(agentsMdPath, getAgentsMdTemplate(cwd, detectedProject));\n\n // Create devcontainer if not skipped\n let devcontainerCreated = false;\n const usePrebuilt = options.prebuilt === true;\n if (options.devcontainer !== false) {\n spinner.text = usePrebuilt\n ? 'Creating devcontainer configuration (using pre-built image)...'\n : 'Creating devcontainer configuration...';\n devcontainerCreated = await createDevContainer(\n cwd,\n detectedProject,\n options.force,\n usePrebuilt\n );\n }\n\n spinner.succeed('RAPID initialized successfully!');\n\n // Show detected info\n if (detectedProject && detectedProject.language !== 'unknown') {\n logger.blank();\n logger.info('Project detected:');\n console.log(` ${logger.dim('Language:')} ${detectedProject.language}`);\n if (detectedProject.framework) {\n console.log(` ${logger.dim('Framework:')} ${detectedProject.framework}`);\n }\n if (detectedProject.packageManager) {\n console.log(` ${logger.dim('Package Mgr:')} ${detectedProject.packageManager}`);\n }\n }\n\n logger.blank();\n logger.info('Created files:');\n console.log(` ${logger.dim('•')} rapid.json`);\n if (mcpServers.length > 0) {\n console.log(` ${logger.dim('•')} .mcp.json`);\n console.log(` ${logger.dim('•')} opencode.json`);\n }\n if (devcontainerCreated) {\n console.log(` ${logger.dim('•')} .devcontainer/devcontainer.json`);\n }\n console.log(` ${logger.dim('•')} CLAUDE.md`);\n console.log(` ${logger.dim('•')} AGENTS.md`);\n\n // Show configured MCP servers\n if (mcpServers.length > 0) {\n logger.blank();\n logger.info('MCP servers configured:');\n for (const serverName of mcpServers) {\n const template = MCP_SERVER_TEMPLATES[serverName];\n if (template) {\n console.log(` ${logger.brand('•')} ${serverName} - ${template.description}`);\n }\n }\n }\n\n logger.blank();\n logger.info('Next steps:');\n let stepNum = 1;\n console.log(\n ` ${logger.dim(`${stepNum++}.`)} Run ${logger.brand('rapid dev')} to start coding`\n );\n console.log(\n ` ${logger.dim(`${stepNum++}.`)} Edit ${logger.dim('rapid.json')} to customize your setup`\n );\n if (mcpServers.length > 0) {\n console.log(\n ` ${logger.dim(`${stepNum++}.`)} Add API keys to ${logger.dim('secrets.items')} in rapid.json`\n );\n }\n if (devcontainerCreated) {\n console.log(\n ` ${logger.dim(`${stepNum++}.`)} Set ${logger.dim('OP_SERVICE_ACCOUNT_TOKEN')} env var for 1Password secrets`\n );\n }\n logger.blank();\n } catch (error) {\n spinner.fail('Failed to initialize RAPID');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nfunction createConfig(options: { agent: string }, detectedProject?: DetectedProject): RapidConfig {\n const defaults = getDefaultConfig();\n\n const config: RapidConfig = {\n $schema: 'https://getrapid.dev/schema/v1/rapid.json',\n version: '1.0',\n agents: {\n default: options.agent,\n available: defaults.agents.available,\n },\n secrets: {\n provider: 'env',\n },\n context: {\n files: ['README.md', 'CLAUDE.md', 'AGENTS.md'],\n generateAgentFiles: false, // We already created them\n },\n };\n\n // Add detected project info as context hints\n if (detectedProject && detectedProject.language !== 'unknown') {\n config.context = {\n ...config.context,\n // Store detected info for potential future use\n };\n }\n\n return config;\n}\n\nfunction getClaudeMdTemplate(projectPath: string, detectedProject?: DetectedProject): string {\n const projectName = projectPath.split('/').pop() || 'project';\n\n let languageSection = '';\n if (detectedProject && detectedProject.language !== 'unknown') {\n languageSection = `## Technology Stack\n\n- **Language**: ${detectedProject.language}${detectedProject.framework ? `\\n- **Framework**: ${detectedProject.framework}` : ''}${detectedProject.packageManager ? `\\n- **Package Manager**: ${detectedProject.packageManager}` : ''}\n\n`;\n }\n\n return `# Claude Instructions\n\n## Project: ${projectName}\n\nThis file contains instructions for Claude Code when working on this project.\n\n## Overview\n\n<!-- Describe your project here -->\n\n${languageSection}${RAPID_METHODOLOGY}\n${MCP_USAGE_GUIDELINES}\n${GIT_GUIDELINES}\n## Key Files\n\n- \\`rapid.json\\` - RAPID configuration\n- \\`README.md\\` - Project documentation\n\n## Commands\n\n\\`\\`\\`bash\n# Start development\nrapid dev\n\n# Check status\nrapid status\n\\`\\`\\`\n`;\n}\n\nfunction getAgentsMdTemplate(projectPath: string, detectedProject?: DetectedProject): string {\n const projectName = projectPath.split('/').pop() || 'project';\n\n let languageSection = '';\n if (detectedProject && detectedProject.language !== 'unknown') {\n languageSection = `## Technology Stack\n\n- **Language**: ${detectedProject.language}${detectedProject.framework ? `\\n- **Framework**: ${detectedProject.framework}` : ''}${detectedProject.packageManager ? `\\n- **Package Manager**: ${detectedProject.packageManager}` : ''}\n\n`;\n }\n\n return `# Agent Instructions\n\n## Project: ${projectName}\n\nThis file contains instructions for AI coding agents working on this project.\n\n## Overview\n\n<!-- Describe your project here -->\n\n${languageSection}${RAPID_METHODOLOGY}\n${MCP_USAGE_GUIDELINES}\n${GIT_GUIDELINES}\n## Project Structure\n\n\\`\\`\\`\n.\n├── rapid.json # RAPID configuration\n├── CLAUDE.md # Claude-specific instructions\n├── AGENTS.md # Generic agent instructions\n└── ...\n\\`\\`\\`\n\n## Getting Started\n\n1. Review the project structure\n2. Check \\`rapid.json\\` for configuration\n3. Follow the RAPID methodology above when making changes\n`;\n}\n","/**\n * rapid dev - Launch AI coding session inside the dev container\n *\n * Automatically uses git worktrees for feature branch isolation:\n * - On main/master: uses current directory\n * - On feature branches: creates sibling worktree (e.g., ../project-feat-my-feature/)\n */\n\nimport { Command } from 'commander';\nimport { writeFile } from 'node:fs/promises';\nimport { isAbsolute, join } from 'node:path';\nimport {\n loadConfig,\n getAgent,\n checkAgentAvailable,\n logger,\n getContainerStatus,\n startContainer,\n execInContainer,\n hasDevcontainerCli,\n loadSecrets,\n hasOpCli,\n isOpAuthenticated,\n hasVaultCli,\n isVaultAuthenticated,\n buildAgentArgs,\n agentSupportsRuntimeInjection,\n type McpConfig,\n type AgentDefinition,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\nimport { isGitRepo, getCurrentBranch, getOrCreateWorktreeForBranch } from '../utils/worktree.js';\nimport {\n hasLima,\n isMacOS,\n isRunning as isLimaRunning,\n startInstance as startLimaInstance,\n execInLima,\n RAPID_LIMA_INSTANCE,\n} from '../isolation/lima.js';\n\nexport const devCommand = new Command('dev')\n .description('Launch AI coding session in the dev container')\n .option('-a, --agent <name>', 'Agent to use')\n .option(\n '--multi [agents]',\n 'Launch multiple agents (comma-separated, or interactive if no value)'\n )\n .option('--list', 'List available agents without launching')\n .option('--local', 'Run locally instead of in container (not recommended)')\n .option('--no-start', 'Do not auto-start container if stopped')\n .option('--no-worktree', 'Skip automatic worktree creation for feature branches')\n .action(async (options) => {\n try {\n // Load config\n const spinner = ora('Loading configuration...').start();\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config } = loaded;\n let { rootDir } = loaded;\n spinner.succeed('Configuration loaded');\n\n // List mode\n if (options.list) {\n listAgents(config);\n return;\n }\n\n // Auto-worktree for feature branches (unless disabled)\n if (options.worktree !== false && (await isGitRepo(rootDir))) {\n const branch = await getCurrentBranch(rootDir);\n\n if (!branch.isDefault && !branch.detached && branch.name) {\n spinner.start(`Checking worktree for branch: ${branch.name}...`);\n\n try {\n const worktree = await getOrCreateWorktreeForBranch(rootDir);\n\n if (worktree.created) {\n spinner.succeed(`Created worktree: ${worktree.path}`);\n rootDir = worktree.path;\n } else if (!worktree.isMain) {\n spinner.succeed(`Using worktree: ${worktree.path}`);\n rootDir = worktree.path;\n } else {\n spinner.info(`Using main directory (branch: ${branch.name})`);\n }\n } catch (err) {\n spinner.warn('Could not create worktree, using main directory');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n // Multi-agent mode\n if (options.multi !== undefined) {\n await runMultiAgent(config, rootDir, options);\n return;\n }\n\n // Get the agent to use\n const agentName = options.agent || config.agents.default;\n const agent = getAgent(config, agentName);\n\n if (!agent) {\n logger.error(`Agent \"${agentName}\" not found in configuration`);\n logger.info('Available agents:');\n Object.keys(config.agents.available).forEach((name) => {\n const isDefault = name === config.agents.default;\n console.log(` ${isDefault ? '* ' : ' '}${name}${isDefault ? ' (default)' : ''}`);\n });\n process.exit(1);\n }\n\n // Check if running locally (not recommended)\n if (options.local) {\n logger.warn('Running locally instead of in container');\n logger.dim('This bypasses the isolated dev environment');\n logger.blank();\n await runLocally(agent, agentName, rootDir, config);\n return;\n }\n\n // Check for devcontainer CLI\n const hasDevCli = await hasDevcontainerCli();\n if (!hasDevCli) {\n logger.error('devcontainer CLI not found');\n logger.info('Install with: npm install -g @devcontainers/cli');\n logger.blank();\n logger.info('Or use --local to run without container (not recommended)');\n process.exit(1);\n }\n\n // Check container status\n spinner.start('Checking container status...');\n const status = await getContainerStatus(rootDir, config);\n\n if (!status.running) {\n if (options.start === false) {\n spinner.fail('Container not running. Use `rapid start` first.');\n process.exit(1);\n }\n\n // Auto-start the container\n spinner.text = 'Starting container...';\n spinner.stopAndPersist({ symbol: '🐳', text: 'Starting container...' });\n\n const result = await startContainer(rootDir, config, { quiet: false });\n if (!result.success) {\n logger.blank();\n logger.error('Failed to start container');\n logger.error(result.error || 'Unknown error');\n process.exit(1);\n }\n logger.blank();\n } else {\n spinner.succeed(`Container running (${status.containerName})`);\n }\n\n // Load secrets (1Password, Vault, or env)\n let secrets: Record<string, string> = {};\n const secretsConfig = config.secrets;\n\n if (secretsConfig?.items && Object.keys(secretsConfig.items).length > 0) {\n const provider = secretsConfig.provider || 'env';\n\n if (provider === '1password') {\n spinner.start('Loading secrets from 1Password...');\n\n const hasOp = await hasOpCli();\n if (!hasOp) {\n spinner.warn('1Password CLI not found - secrets will not be loaded');\n logger.info('Install with: brew install 1password-cli');\n } else {\n const authenticated = await isOpAuthenticated();\n if (!authenticated) {\n spinner.warn('1Password not authenticated - secrets will not be loaded');\n logger.info('Run: eval $(op signin)');\n } else {\n try {\n secrets = await loadSecrets(secretsConfig);\n const count = Object.keys(secrets).length;\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from 1Password`);\n } catch (err) {\n spinner.warn('Failed to load secrets from 1Password');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n } else if (provider === 'vault') {\n spinner.start('Loading secrets from Vault...');\n\n const hasVault = await hasVaultCli();\n if (!hasVault) {\n spinner.warn('Vault CLI not found - secrets will not be loaded');\n logger.info('Install from: https://developer.hashicorp.com/vault/docs/install');\n } else {\n const authenticated = await isVaultAuthenticated();\n if (!authenticated) {\n spinner.warn('Vault not authenticated - secrets will not be loaded');\n logger.info('Run: vault login');\n } else {\n try {\n secrets = await loadSecrets(secretsConfig);\n const count = Object.keys(secrets).length;\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from Vault`);\n } catch (err) {\n spinner.warn('Failed to load secrets from Vault');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n } else if (provider === 'env') {\n spinner.start('Loading secrets from environment...');\n try {\n secrets = await loadSecrets(secretsConfig);\n const count = Object.keys(secrets).length;\n if (count > 0) {\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from environment`);\n } else {\n spinner.warn('No secrets found in environment');\n }\n } catch (err) {\n spinner.warn('Failed to load secrets from environment');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n // Launch the agent inside the container\n logger.blank();\n logger.info(`Launching ${logger.brand(agentName)} in container...`);\n\n // Build agent args with system prompt injection if supported\n const builtArgs = buildAgentArgs(agent, { injectSystemPrompt: true });\n if (agentSupportsRuntimeInjection(agent)) {\n logger.dim('Injecting RAPID methodology via CLI args');\n }\n logger.blank();\n\n const agentArgs = [agent.cli, ...builtArgs];\n const mcpEnv = await prepareMcpEnv(rootDir, config.mcp);\n const mergedEnv = { ...secrets, ...(mcpEnv ?? {}) };\n\n // Inject secrets and MCP config as environment variables\n await execInContainer(rootDir, agentArgs, config, {\n interactive: true,\n tty: true,\n env: mergedEnv,\n });\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nasync function prepareMcpEnv(\n rootDir: string,\n mcp?: McpConfig\n): Promise<Record<string, string> | undefined> {\n if (!mcp?.servers || Object.keys(mcp.servers).length === 0) {\n return undefined;\n }\n\n const configFile = mcp.configFile ?? '.mcp.json';\n const configPath = isAbsolute(configFile) ? configFile : join(rootDir, configFile);\n\n const servers: Record<string, unknown> = {};\n for (const [name, serverConfig] of Object.entries(mcp.servers)) {\n if (!serverConfig || typeof serverConfig !== 'object') {\n continue;\n }\n\n const { enabled, ...rest } = serverConfig as Record<string, unknown>;\n if (enabled === false) {\n continue;\n }\n\n servers[name] = rest;\n }\n\n if (Object.keys(servers).length === 0) {\n return undefined;\n }\n\n await writeFile(configPath, `${JSON.stringify({ servers }, null, 2)}\\n`, 'utf-8');\n\n return {\n MCP_CONFIG_FILE: configFile,\n };\n}\n\n/**\n * Run agent locally (fallback, not recommended)\n */\nasync function runLocally(\n agent: AgentDefinition,\n agentName: string,\n rootDir: string,\n config: {\n secrets?: {\n provider?: 'env' | '1password' | 'vault';\n items?: Record<string, unknown>;\n };\n mcp?: McpConfig;\n }\n): Promise<void> {\n const { execa } = await import('execa');\n\n // Check if agent CLI is available locally\n const status = await checkAgentAvailable(agent);\n if (!status.available) {\n logger.error(`${agentName} CLI not found locally`);\n process.exit(1);\n }\n\n // Load secrets (1Password, Vault, or env) - same as container mode\n let secrets: Record<string, string> = {};\n const secretsConfig = config.secrets;\n\n if (secretsConfig?.items && Object.keys(secretsConfig.items).length > 0) {\n const provider = secretsConfig.provider || 'env';\n const spinner = ora();\n\n if (provider === '1password') {\n spinner.start('Loading secrets from 1Password...');\n\n const hasOp = await hasOpCli();\n if (!hasOp) {\n spinner.warn('1Password CLI not found - secrets will not be loaded');\n logger.info('Install with: brew install 1password-cli');\n } else {\n const authenticated = await isOpAuthenticated();\n if (!authenticated) {\n spinner.warn('1Password not authenticated - secrets will not be loaded');\n logger.info('Run: eval $(op signin)');\n } else {\n try {\n secrets = await loadSecrets(secretsConfig as Parameters<typeof loadSecrets>[0]);\n const count = Object.keys(secrets).length;\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from 1Password`);\n } catch (err) {\n spinner.warn('Failed to load secrets from 1Password');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n } else if (provider === 'vault') {\n spinner.start('Loading secrets from Vault...');\n\n const hasVault = await hasVaultCli();\n if (!hasVault) {\n spinner.warn('Vault CLI not found - secrets will not be loaded');\n logger.info('Install from: https://developer.hashicorp.com/vault/docs/install');\n } else {\n const authenticated = await isVaultAuthenticated();\n if (!authenticated) {\n spinner.warn('Vault not authenticated - secrets will not be loaded');\n logger.info('Run: vault login');\n } else {\n try {\n secrets = await loadSecrets(secretsConfig as Parameters<typeof loadSecrets>[0]);\n const count = Object.keys(secrets).length;\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from Vault`);\n } catch (err) {\n spinner.warn('Failed to load secrets from Vault');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n } else if (provider === 'env') {\n spinner.start('Loading secrets from environment...');\n try {\n secrets = await loadSecrets(secretsConfig as Parameters<typeof loadSecrets>[0]);\n const count = Object.keys(secrets).length;\n if (count > 0) {\n spinner.succeed(`Loaded ${count} secret${count !== 1 ? 's' : ''} from environment`);\n } else {\n spinner.warn('No secrets found in environment');\n }\n } catch (err) {\n spinner.warn('Failed to load secrets from environment');\n logger.debug(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n // Prepare MCP environment\n const mcpEnv = await prepareMcpEnv(rootDir, config.mcp);\n const mergedEnv = { ...secrets, ...(mcpEnv ?? {}) };\n\n // Build agent args with system prompt injection if supported\n const builtArgs = buildAgentArgs(agent, { injectSystemPrompt: true });\n\n // Check if we should use Lima VM on macOS\n if (isMacOS() && (await hasLima())) {\n await runInLimaVm(agent, agentName, rootDir, builtArgs, mergedEnv);\n return;\n }\n\n // Fall back to running directly on host\n logger.info(`Launching ${logger.brand(agentName)}...`);\n logger.dim(`Working directory: ${rootDir}`);\n\n if (agentSupportsRuntimeInjection(agent)) {\n logger.dim('Injecting RAPID methodology via CLI args');\n }\n logger.blank();\n\n await execa(agent.cli, builtArgs, {\n cwd: rootDir,\n stdio: 'inherit',\n env: {\n ...process.env,\n ...mergedEnv,\n },\n });\n}\n\n/**\n * Run agent inside Lima VM for isolated local development\n */\nasync function runInLimaVm(\n agent: AgentDefinition,\n agentName: string,\n rootDir: string,\n args: string[],\n env: Record<string, string>\n): Promise<void> {\n const spinner = ora();\n\n // Check if Lima instance is running\n if (!(await isLimaRunning())) {\n spinner.start(`Starting Lima VM (${RAPID_LIMA_INSTANCE})...`);\n\n const result = await startLimaInstance(rootDir, {\n env,\n timeout: 600, // 10 minutes for first-time setup\n });\n\n if (!result.success) {\n spinner.fail('Failed to start Lima VM');\n logger.error(result.error ?? 'Unknown error');\n logger.blank();\n logger.info('Falling back to running directly on host...');\n logger.blank();\n\n // Fall back to direct execution\n const { execa } = await import('execa');\n await execa(agent.cli, args, {\n cwd: rootDir,\n stdio: 'inherit',\n env: {\n ...process.env,\n ...env,\n },\n });\n return;\n }\n\n spinner.succeed('Lima VM started');\n } else {\n logger.info(`Lima VM (${RAPID_LIMA_INSTANCE}) is running`);\n }\n\n logger.info(`Launching ${logger.brand(agentName)} in Lima VM...`);\n logger.dim(`Working directory: ${rootDir}`);\n logger.dim('SSH agent forwarded for commit signing');\n logger.blank();\n\n // Execute the agent inside the Lima VM\n await execInLima([agent.cli, ...args], {\n cwd: rootDir,\n env,\n interactive: true,\n tty: true,\n });\n}\n\nfunction listAgents(config: {\n agents: { default: string; available: Record<string, unknown> };\n}): void {\n logger.header('Available Agents');\n\n Object.keys(config.agents.available).forEach((name) => {\n const isDefault = name === config.agents.default;\n console.log(\n ` ${isDefault ? logger.brand('*') : ' '} ${name}${isDefault ? logger.dim(' (default)') : ''}`\n );\n });\n\n logger.blank();\n logger.dim('Use --agent <name> to select a specific agent');\n}\n\n/**\n * Run multiple agents sequentially or show selection menu\n */\nasync function runMultiAgent(\n config: {\n agents: { default: string; available: Record<string, { cli: string; args?: string[] }> };\n },\n rootDir: string,\n options: { multi?: string | boolean; local?: boolean }\n): Promise<void> {\n const availableAgents = Object.keys(config.agents.available);\n\n if (availableAgents.length === 0) {\n logger.error('No agents configured');\n process.exit(1);\n }\n\n let selectedAgents: string[];\n\n if (typeof options.multi === 'string') {\n // Parse comma-separated agent list\n selectedAgents = options.multi\n .split(',')\n .map((a) => a.trim())\n .filter(Boolean);\n\n // Validate all agents exist\n for (const name of selectedAgents) {\n if (!config.agents.available[name]) {\n logger.error(`Agent \"${name}\" not found in configuration`);\n logger.info('Available agents: ' + availableAgents.join(', '));\n process.exit(1);\n }\n }\n } else {\n // Show available agents and instructions\n logger.header('Multi-Agent Mode');\n console.log();\n console.log(' Available agents:');\n for (const name of availableAgents) {\n const isDefault = name === config.agents.default;\n console.log(` ${logger.brand('•')} ${name}${isDefault ? logger.dim(' (default)') : ''}`);\n }\n console.log();\n logger.info('To run multiple agents, specify them with:');\n console.log(` ${logger.brand('rapid dev --multi claude,aider')}`);\n console.log();\n logger.info('Or run agents in separate terminals:');\n for (const name of availableAgents) {\n console.log(` ${logger.dim('$')} rapid dev --agent ${name}`);\n }\n console.log();\n logger.warn('Note: Running multiple agents simultaneously requires separate terminal windows.');\n logger.info('Each agent maintains its own session and context.');\n console.log();\n return;\n }\n\n if (selectedAgents.length === 0) {\n logger.error('No agents specified');\n process.exit(1);\n }\n\n if (selectedAgents.length === 1) {\n logger.info(\n `Only one agent specified. Use ${logger.brand('rapid dev --agent ' + selectedAgents[0])} instead.`\n );\n process.exit(0);\n }\n\n // Show what we're about to do\n logger.header('Multi-Agent Session');\n console.log();\n console.log(' Selected agents:');\n for (const name of selectedAgents) {\n console.log(` ${logger.brand('•')} ${name}`);\n }\n console.log();\n\n // Check for tmux\n const { execa } = await import('execa');\n let hasTmux = false;\n\n try {\n await execa('tmux', ['-V']);\n hasTmux = true;\n } catch {\n hasTmux = false;\n }\n\n if (hasTmux) {\n // Use tmux for multi-agent\n logger.info('Launching agents in tmux panes...');\n console.log();\n\n const sessionName = `rapid-${Date.now()}`;\n\n // Create new tmux session with first agent\n const firstAgent = selectedAgents[0];\n const firstCmd = options.local\n ? `rapid dev --agent ${firstAgent} --local`\n : `rapid dev --agent ${firstAgent}`;\n\n await execa('tmux', ['new-session', '-d', '-s', sessionName, '-n', 'rapid', firstCmd], {\n cwd: rootDir,\n });\n\n // Split panes for remaining agents\n for (let i = 1; i < selectedAgents.length; i++) {\n const agentName = selectedAgents[i];\n const cmd = options.local\n ? `rapid dev --agent ${agentName} --local`\n : `rapid dev --agent ${agentName}`;\n\n await execa('tmux', ['split-window', '-t', sessionName, '-h', cmd], {\n cwd: rootDir,\n });\n\n // Rebalance panes\n await execa('tmux', ['select-layout', '-t', sessionName, 'tiled']);\n }\n\n // Attach to the session\n logger.success(`Started ${selectedAgents.length} agents in tmux session: ${sessionName}`);\n console.log();\n logger.info('Attaching to tmux session...');\n logger.dim('Press Ctrl+B then D to detach, or Ctrl+B then arrow keys to switch panes');\n console.log();\n\n await execa('tmux', ['attach-session', '-t', sessionName], {\n stdio: 'inherit',\n });\n } else {\n // No tmux - show instructions for manual setup\n logger.warn('tmux not found. Multi-agent mode works best with tmux installed.');\n console.log();\n logger.info('To run multiple agents, open separate terminal windows and run:');\n console.log();\n for (const name of selectedAgents) {\n const cmd = options.local ? `--local` : '';\n console.log(\n ` ${logger.dim('Terminal ' + (selectedAgents.indexOf(name) + 1) + ':')} rapid dev --agent ${name} ${cmd}`.trim()\n );\n }\n console.log();\n logger.info('Install tmux for integrated multi-pane support:');\n console.log(` ${logger.dim('macOS:')} brew install tmux`);\n console.log(` ${logger.dim('Ubuntu:')} sudo apt install tmux`);\n console.log();\n }\n}\n","/**\n * Git worktree utilities for RAPID\n *\n * Manages git worktrees for isolated development on feature branches.\n * When on a feature branch, rapid dev can create a sibling worktree\n * to keep the main directory clean.\n */\n\nimport { execa, type ExecaError } from 'execa';\nimport { access } from 'node:fs/promises';\nimport { basename, dirname, join, resolve } from 'node:path';\n\n/**\n * Get error message from execa error\n */\nfunction getErrorMessage(err: ExecaError): string {\n if (typeof err.stderr === 'string' && err.stderr) {\n return err.stderr;\n }\n return err.message;\n}\n\n/**\n * Information about a git worktree\n */\nexport interface WorktreeInfo {\n /** Absolute path to the worktree directory */\n path: string;\n /** Git commit hash HEAD points to */\n head: string;\n /** Branch name (null if detached) */\n branch: string | null;\n /** Whether this is the main worktree */\n isMain: boolean;\n /** Whether the worktree is locked */\n locked: boolean;\n /** Whether the worktree directory exists */\n exists: boolean;\n /** Whether this worktree is prunable (stale) */\n prunable: boolean;\n}\n\n/**\n * Result of git branch detection\n */\nexport interface BranchInfo {\n /** Current branch name (null if detached HEAD) */\n name: string | null;\n /** Whether on main/master branch */\n isDefault: boolean;\n /** Whether HEAD is detached */\n detached: boolean;\n}\n\n/**\n * Options for creating a worktree\n */\nexport interface CreateWorktreeOptions {\n /** Force creation even if worktree exists */\n force?: boolean;\n /** Create a new branch with this name */\n newBranch?: string;\n /** Start point for new branch (default: HEAD) */\n startPoint?: string;\n}\n\n/**\n * Check if current directory is inside a git repository\n */\nexport async function isGitRepo(dir: string): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd: dir });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the root directory of the git repository\n */\nexport async function getGitRoot(dir: string): Promise<string> {\n const { stdout } = await execa('git', ['rev-parse', '--show-toplevel'], { cwd: dir });\n return stdout.trim();\n}\n\n/**\n * Get the current branch information\n */\nexport async function getCurrentBranch(dir: string): Promise<BranchInfo> {\n try {\n // Check if HEAD is detached\n const { stdout: symbolicRef } = await execa('git', ['symbolic-ref', '-q', 'HEAD'], {\n cwd: dir,\n reject: false,\n });\n\n if (!symbolicRef) {\n return { name: null, isDefault: false, detached: true };\n }\n\n const branchName = symbolicRef.trim().replace('refs/heads/', '');\n const isDefault = branchName === 'main' || branchName === 'master';\n\n return { name: branchName, isDefault, detached: false };\n } catch {\n return { name: null, isDefault: false, detached: true };\n }\n}\n\n/**\n * Get the default branch name (main or master)\n */\nexport async function getDefaultBranch(dir: string): Promise<string> {\n try {\n // Try to get from remote\n const { stdout } = await execa('git', ['symbolic-ref', 'refs/remotes/origin/HEAD', '--short'], {\n cwd: dir,\n reject: false,\n });\n\n if (stdout) {\n return stdout.trim().replace('origin/', '');\n }\n\n // Fall back to checking if main or master exists\n const { stdout: branches } = await execa('git', ['branch', '--list', 'main', 'master'], {\n cwd: dir,\n });\n\n if (branches.includes('main')) return 'main';\n if (branches.includes('master')) return 'master';\n\n return 'main'; // Default\n } catch {\n return 'main';\n }\n}\n\n/**\n * List all worktrees in the repository\n */\nexport async function listWorktrees(dir: string): Promise<WorktreeInfo[]> {\n const { stdout } = await execa('git', ['worktree', 'list', '--porcelain'], { cwd: dir });\n\n const worktrees: WorktreeInfo[] = [];\n let current: Partial<WorktreeInfo> = {};\n\n for (const line of stdout.split('\\n')) {\n if (line.startsWith('worktree ')) {\n if (current.path) {\n worktrees.push(current as WorktreeInfo);\n }\n current = {\n path: line.substring(9),\n isMain: false,\n locked: false,\n exists: true,\n prunable: false,\n };\n } else if (line.startsWith('HEAD ')) {\n current.head = line.substring(5);\n } else if (line.startsWith('branch ')) {\n current.branch = line.substring(7).replace('refs/heads/', '');\n } else if (line === 'bare') {\n current.isMain = true;\n } else if (line === 'locked') {\n current.locked = true;\n } else if (line === 'prunable') {\n current.prunable = true;\n current.exists = false;\n } else if (line === 'detached') {\n current.branch = null;\n }\n }\n\n if (current.path) {\n worktrees.push(current as WorktreeInfo);\n }\n\n // Mark the first worktree as main (it's the original clone)\n if (worktrees.length > 0 && worktrees[0]) {\n worktrees[0].isMain = true;\n }\n\n // Check existence for each worktree\n for (const wt of worktrees) {\n try {\n await access(wt.path);\n wt.exists = true;\n } catch {\n wt.exists = false;\n wt.prunable = true;\n }\n }\n\n return worktrees;\n}\n\n/**\n * Find a worktree by branch name\n */\nexport async function findWorktreeByBranch(\n dir: string,\n branch: string\n): Promise<WorktreeInfo | null> {\n const worktrees = await listWorktrees(dir);\n return worktrees.find((wt) => wt.branch === branch) ?? null;\n}\n\n/**\n * Generate a worktree path for a branch\n *\n * Creates paths like: ../project-feat-my-feature/\n * For branch: feat/my-feature in project: /path/to/project\n */\nexport function generateWorktreePath(repoRoot: string, branchName: string): string {\n const projectName = basename(repoRoot);\n const parentDir = dirname(repoRoot);\n\n // Sanitize branch name for filesystem\n const safeBranchName = branchName\n .replace(/\\//g, '-') // Replace slashes with dashes\n .replace(/[^a-zA-Z0-9-_]/g, '') // Remove special chars\n .toLowerCase();\n\n return join(parentDir, `${projectName}-${safeBranchName}`);\n}\n\n/**\n * Create a new worktree for a branch\n */\nexport async function createWorktree(\n repoRoot: string,\n worktreePath: string,\n branch: string,\n options: CreateWorktreeOptions = {}\n): Promise<{ success: boolean; path: string; error?: string }> {\n try {\n // Check if worktree already exists at this path\n const existing = await listWorktrees(repoRoot);\n const existingAtPath = existing.find((wt) => resolve(wt.path) === resolve(worktreePath));\n\n if (existingAtPath && existingAtPath.exists && !options.force) {\n return { success: true, path: worktreePath }; // Already exists\n }\n\n // If path exists but is stale, remove it first\n if (existingAtPath && !existingAtPath.exists) {\n await execa('git', ['worktree', 'remove', '--force', worktreePath], {\n cwd: repoRoot,\n reject: false,\n });\n }\n\n // Build worktree add command\n const args = ['worktree', 'add'];\n\n if (options.force) {\n args.push('--force');\n }\n\n if (options.newBranch) {\n args.push('-b', options.newBranch);\n }\n\n args.push(worktreePath);\n\n if (!options.newBranch) {\n args.push(branch);\n } else if (options.startPoint) {\n args.push(options.startPoint);\n }\n\n await execa('git', args, { cwd: repoRoot });\n\n return { success: true, path: worktreePath };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n path: worktreePath,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Remove a worktree\n */\nexport async function removeWorktree(\n repoRoot: string,\n worktreePath: string,\n options: { force?: boolean } = {}\n): Promise<{ success: boolean; error?: string }> {\n try {\n const args = ['worktree', 'remove'];\n if (options.force) {\n args.push('--force');\n }\n args.push(worktreePath);\n\n await execa('git', args, { cwd: repoRoot });\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Prune stale worktrees (those whose directories no longer exist)\n */\nexport async function pruneWorktrees(repoRoot: string): Promise<{\n success: boolean;\n pruned: string[];\n error?: string;\n}> {\n try {\n // Get list of prunable worktrees first\n const worktrees = await listWorktrees(repoRoot);\n const prunable = worktrees.filter((wt) => wt.prunable).map((wt) => wt.path);\n\n // Run git worktree prune\n await execa('git', ['worktree', 'prune'], { cwd: repoRoot });\n\n return { success: true, pruned: prunable };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n pruned: [],\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Lock a worktree to prevent accidental removal\n */\nexport async function lockWorktree(\n repoRoot: string,\n worktreePath: string,\n reason?: string\n): Promise<{ success: boolean; error?: string }> {\n try {\n const args = ['worktree', 'lock'];\n if (reason) {\n args.push('--reason', reason);\n }\n args.push(worktreePath);\n\n await execa('git', args, { cwd: repoRoot });\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return { success: false, error: getErrorMessage(error) };\n }\n}\n\n/**\n * Unlock a worktree\n */\nexport async function unlockWorktree(\n repoRoot: string,\n worktreePath: string\n): Promise<{ success: boolean; error?: string }> {\n try {\n await execa('git', ['worktree', 'unlock', worktreePath], { cwd: repoRoot });\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return { success: false, error: getErrorMessage(error) };\n }\n}\n\n/**\n * Get or create a worktree for the current branch\n *\n * - If on main/master, returns the current directory\n * - If on a feature branch, creates/returns a sibling worktree\n */\nexport async function getOrCreateWorktreeForBranch(\n dir: string\n): Promise<{ path: string; created: boolean; isMain: boolean }> {\n const gitRoot = await getGitRoot(dir);\n const branch = await getCurrentBranch(dir);\n\n // If on default branch or detached, use current directory\n if (branch.isDefault || branch.detached || !branch.name) {\n return { path: gitRoot, created: false, isMain: true };\n }\n\n // Check if a worktree already exists for this branch\n const existing = await findWorktreeByBranch(gitRoot, branch.name);\n if (existing && existing.exists) {\n return { path: existing.path, created: false, isMain: existing.isMain };\n }\n\n // Create a new worktree\n const worktreePath = generateWorktreePath(gitRoot, branch.name);\n const result = await createWorktree(gitRoot, worktreePath, branch.name);\n\n if (!result.success) {\n // Fall back to current directory if worktree creation fails\n return { path: gitRoot, created: false, isMain: true };\n }\n\n return { path: worktreePath, created: true, isMain: false };\n}\n\n/**\n * Clean up worktrees for merged branches\n */\nexport async function cleanupMergedWorktrees(\n repoRoot: string\n): Promise<{ removed: string[]; errors: string[] }> {\n const removed: string[] = [];\n const errors: string[] = [];\n\n // Get default branch\n const defaultBranch = await getDefaultBranch(repoRoot);\n\n // Get list of merged branches\n const { stdout } = await execa('git', ['branch', '--merged', defaultBranch], { cwd: repoRoot });\n const mergedBranches = stdout\n .split('\\n')\n .map((b: string) => b.trim().replace(/^\\*\\s*/, ''))\n .filter((b: string) => b && b !== defaultBranch);\n\n // Get worktrees\n const worktrees = await listWorktrees(repoRoot);\n\n // Remove worktrees for merged branches\n for (const wt of worktrees) {\n if (wt.isMain || !wt.branch) continue;\n\n if (mergedBranches.includes(wt.branch)) {\n const result = await removeWorktree(repoRoot, wt.path, { force: true });\n if (result.success) {\n removed.push(wt.path);\n } else if (result.error) {\n errors.push(`${wt.path}: ${result.error}`);\n }\n }\n }\n\n return { removed, errors };\n}\n","/**\n * Lima VM Management for RAPID\n *\n * Provides isolated Linux development environments on macOS using\n * Apple Virtualization.framework via Lima.\n *\n * Features:\n * - Near-native performance with VZ backend\n * - Rosetta for x86_64 binary compatibility\n * - SSH agent forwarding for commit signing\n * - Automatic project directory mounting\n */\n\nimport { execa, type ExecaError } from 'execa';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { homedir, platform } from 'node:os';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Get error message from execa error\n */\nfunction getErrorMessage(err: ExecaError): string {\n if (typeof err.stderr === 'string' && err.stderr) {\n return err.stderr;\n }\n return err.message;\n}\n\n/**\n * Get string value from execa output (stdout/stderr can be various types)\n */\nfunction getOutputString(output: unknown): string | undefined {\n if (typeof output === 'string') {\n return output;\n }\n return undefined;\n}\n\n/**\n * Lima VM instance status\n */\nexport type LimaStatus = 'Running' | 'Stopped' | 'Starting' | 'Stopping' | 'Unknown';\n\n/**\n * Lima VM instance information\n */\nexport interface LimaInstance {\n name: string;\n status: LimaStatus;\n arch: string;\n cpus: number;\n memory: string;\n disk: string;\n dir: string;\n sshLocalPort?: number;\n}\n\n/**\n * Options for starting a Lima VM\n */\nexport interface LimaStartOptions {\n /** Number of CPUs (default: 4) */\n cpus?: number;\n /** Memory size (default: 8GiB) */\n memory?: string;\n /** Disk size (default: 50GiB) */\n disk?: string;\n /** Project directory to mount */\n projectDir?: string;\n /** Environment variables to pass through */\n env?: Record<string, string>;\n /** Wait for VM to be ready */\n wait?: boolean;\n /** Timeout in seconds */\n timeout?: number;\n}\n\n/**\n * Result of Lima operations\n */\nexport interface LimaResult {\n success: boolean;\n error?: string;\n}\n\n/**\n * Default Lima instance name for RAPID\n */\nexport const RAPID_LIMA_INSTANCE = 'rapid';\n\n/**\n * Path to store Lima configuration\n */\nexport const RAPID_LIMA_DIR = join(homedir(), '.rapid', 'lima');\n\n/**\n * Check if Lima is available on the system\n */\nexport async function hasLima(): Promise<boolean> {\n try {\n await execa('limactl', ['--version']);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if running on macOS (Lima only works on macOS)\n */\nexport function isMacOS(): boolean {\n return platform() === 'darwin';\n}\n\n/**\n * Get the Lima template path\n */\nfunction getLimaTemplatePath(): string {\n // In development, the template is at templates/lima.yaml\n // In production (npm package), it should be bundled\n const __dirname = dirname(fileURLToPath(import.meta.url));\n\n // Try multiple locations\n const possiblePaths = [\n join(__dirname, '../../../../templates/lima.yaml'), // From dist/isolation/\n join(__dirname, '../../../templates/lima.yaml'), // From src/isolation/\n join(homedir(), '.rapid', 'lima.yaml'), // User config\n ];\n\n return possiblePaths[0]!; // Return first path, we'll check existence later\n}\n\n/**\n * List all Lima instances\n */\nexport async function listInstances(): Promise<LimaInstance[]> {\n try {\n const { stdout } = await execa('limactl', ['list', '--json']);\n const instances = JSON.parse(stdout) as Array<{\n name: string;\n status: string;\n arch: string;\n cpus: number;\n memory: number;\n disk: number;\n dir: string;\n sshLocalPort?: number;\n }>;\n\n return instances.map((inst) => {\n const result: LimaInstance = {\n name: inst.name,\n status: inst.status as LimaStatus,\n arch: inst.arch,\n cpus: inst.cpus,\n memory: `${Math.round(inst.memory / 1024 / 1024 / 1024)}GiB`,\n disk: `${Math.round(inst.disk / 1024 / 1024 / 1024)}GiB`,\n dir: inst.dir,\n };\n if (inst.sshLocalPort !== undefined) {\n result.sshLocalPort = inst.sshLocalPort;\n }\n return result;\n });\n } catch {\n return [];\n }\n}\n\n/**\n * Get a specific Lima instance\n */\nexport async function getInstance(\n name: string = RAPID_LIMA_INSTANCE\n): Promise<LimaInstance | null> {\n const instances = await listInstances();\n return instances.find((i) => i.name === name) ?? null;\n}\n\n/**\n * Check if the RAPID Lima instance exists\n */\nexport async function instanceExists(name: string = RAPID_LIMA_INSTANCE): Promise<boolean> {\n const instance = await getInstance(name);\n return instance !== null;\n}\n\n/**\n * Check if the RAPID Lima instance is running\n */\nexport async function isRunning(name: string = RAPID_LIMA_INSTANCE): Promise<boolean> {\n const instance = await getInstance(name);\n return instance?.status === 'Running';\n}\n\n/**\n * Insert a project mount into a Lima config string.\n */\nexport function insertProjectMount(config: string, projectDir: string): string {\n const projectMount = ` - location: \"${projectDir}\"\n writable: true\n`;\n const homeMountRegex = /mounts:\\s*\\n(\\s*- location: ['\"]~['\"]\\n(?:\\s{2,}[^-][^\\n]*\\n)*)/;\n return config.replace(homeMountRegex, (_match, homeMount) => {\n return `mounts:\\n${homeMount}${projectMount}`;\n });\n}\n\n/**\n * Create the Lima configuration with project-specific settings\n */\nasync function createLimaConfig(\n projectDir: string,\n options: LimaStartOptions = {}\n): Promise<string> {\n const templatePath = getLimaTemplatePath();\n const configDir = RAPID_LIMA_DIR;\n const configPath = join(configDir, 'lima.yaml');\n\n // Ensure config directory exists\n await mkdir(configDir, { recursive: true });\n\n // Read template\n let template: string;\n try {\n template = await readFile(templatePath, 'utf-8');\n } catch {\n // If template not found, use a minimal config\n template = getMinimalLimaConfig();\n }\n\n // Customize config with project settings\n let config = template;\n\n config = insertProjectMount(config, projectDir);\n\n // Override CPU/memory if specified\n if (options.cpus) {\n config = config.replace(/cpus: \\d+/, `cpus: ${options.cpus}`);\n }\n if (options.memory) {\n config = config.replace(/memory: \"[^\"]*\"/, `memory: \"${options.memory}\"`);\n }\n if (options.disk) {\n config = config.replace(/disk: \"[^\"]*\"/, `disk: \"${options.disk}\"`);\n }\n\n // Add environment variables\n if (options.env) {\n const envLines = Object.entries(options.env)\n .map(([key, value]) => ` ${key}: \"${value}\"`)\n .join('\\n');\n config = config.replace(/env:[\\s\\S]*?(?=\\n\\w|\\n#|$)/, `env:\\n${envLines}\\n`);\n }\n\n // Write customized config\n await writeFile(configPath, config);\n\n return configPath;\n}\n\n/**\n * Get a minimal Lima configuration if template is not found\n */\nfunction getMinimalLimaConfig(): string {\n return `\nvmType: \"vz\"\nvmOpts:\n vz:\n rosetta:\n enabled: true\n binfmt: true\n\ncpus: 4\nmemory: \"8GiB\"\ndisk: \"50GiB\"\nimages:\n - location: \"https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img\"\n arch: \"aarch64\"\n - location: \"https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img\"\n arch: \"x86_64\"\nmountType: \"virtiofs\"\nmounts:\n - location: \"~\"\n writable: true\nmountInotify: true\nssh:\n forwardAgent: true\n localPort: 0\nnetworks:\n - vzNAT: true\ncontainerd:\n system: true\n user: false\nportForwards:\n - guestPort: 3000\n hostPort: 3000\n - guestPort: 8080\n hostPort: 8080\nprovision:\n - mode: system\n script: |\n #!/bin/bash\n set -eux\n apt-get update\n apt-get install -y build-essential curl git jq\n curl -fsSL https://deb.nodesource.com/setup_22.x | bash -\n apt-get install -y nodejs\n npm install -g pnpm\n - mode: user\n script: |\n #!/bin/bash\n set -eux\n npm install -g @anthropic-ai/claude-code || true\n curl -fsSL https://opencode.ai/install | bash || true\n`;\n}\n\n/**\n * Start the Lima VM\n */\nexport async function startInstance(\n projectDir: string,\n options: LimaStartOptions = {}\n): Promise<LimaResult> {\n const name = RAPID_LIMA_INSTANCE;\n\n // Check if Lima is available\n if (!(await hasLima())) {\n return {\n success: false,\n error: 'Lima is not installed. Install with: brew install lima',\n };\n }\n\n // Check if not macOS\n if (!isMacOS()) {\n return {\n success: false,\n error: 'Lima is only available on macOS',\n };\n }\n\n try {\n // Check if instance already exists\n const exists = await instanceExists(name);\n\n if (exists) {\n // Check if running\n if (await isRunning(name)) {\n return { success: true }; // Already running\n }\n\n // Start existing instance\n await execa('limactl', ['start', name], {\n timeout: (options.timeout ?? 300) * 1000,\n });\n } else {\n // Create config and start new instance\n const configPath = await createLimaConfig(projectDir, options);\n\n await execa('limactl', ['start', '--name', name, configPath], {\n timeout: (options.timeout ?? 600) * 1000,\n stdio: 'inherit', // Show progress\n });\n }\n\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Stop the Lima VM\n */\nexport async function stopInstance(\n name: string = RAPID_LIMA_INSTANCE,\n options: { force?: boolean } = {}\n): Promise<LimaResult> {\n try {\n const args = ['stop'];\n if (options.force) {\n args.push('--force');\n }\n args.push(name);\n\n await execa('limactl', args);\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Delete the Lima VM\n */\nexport async function deleteInstance(\n name: string = RAPID_LIMA_INSTANCE,\n options: { force?: boolean } = {}\n): Promise<LimaResult> {\n try {\n const args = ['delete'];\n if (options.force) {\n args.push('--force');\n }\n args.push(name);\n\n await execa('limactl', args);\n return { success: true };\n } catch (err) {\n const error = err as ExecaError;\n return {\n success: false,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Execute a command inside the Lima VM\n */\nexport async function execInLima(\n command: string[],\n options: {\n name?: string;\n cwd?: string;\n env?: Record<string, string>;\n interactive?: boolean;\n tty?: boolean;\n } = {}\n): Promise<{ success: boolean; stdout?: string; stderr?: string; error?: string }> {\n const name = options.name ?? RAPID_LIMA_INSTANCE;\n\n try {\n // Build the command\n let fullCommand = command.join(' ');\n\n // If cwd is specified, cd to it first\n if (options.cwd) {\n fullCommand = `cd \"${options.cwd}\" && ${fullCommand}`;\n }\n\n // Build environment variable exports\n if (options.env) {\n const exports = Object.entries(options.env)\n .map(([key, value]) => `export ${key}=\"${value}\"`)\n .join(' && ');\n fullCommand = `${exports} && ${fullCommand}`;\n }\n\n const useInheritStdio = options.interactive || options.tty;\n\n const result = await execa(\n 'limactl',\n ['shell', name, '--', 'bash', '-c', fullCommand],\n useInheritStdio ? { stdio: 'inherit' } : {}\n );\n\n const successResult: { success: boolean; stdout?: string; stderr?: string; error?: string } = {\n success: true,\n };\n const stdout = getOutputString(result.stdout);\n const stderr = getOutputString(result.stderr);\n if (stdout) successResult.stdout = stdout;\n if (stderr) successResult.stderr = stderr;\n return successResult;\n } catch (err) {\n const error = err as ExecaError;\n const errorResult: { success: boolean; stdout?: string; stderr?: string; error?: string } = {\n success: false,\n error: error.message,\n };\n const stdout = getOutputString(error.stdout);\n const stderr = getOutputString(error.stderr);\n if (stdout) errorResult.stdout = stdout;\n if (stderr) errorResult.stderr = stderr;\n return errorResult;\n }\n}\n\n/**\n * Open an interactive shell in the Lima VM\n */\nexport async function shellInLima(\n options: {\n name?: string;\n cwd?: string;\n command?: string;\n } = {}\n): Promise<void> {\n const name = options.name ?? RAPID_LIMA_INSTANCE;\n const args = ['shell', name];\n\n if (options.cwd) {\n args.push('--workdir', options.cwd);\n }\n\n if (options.command) {\n args.push('--', options.command);\n }\n\n await execa('limactl', args, { stdio: 'inherit' });\n}\n\n/**\n * Get SSH connection info for the Lima VM\n */\nexport async function getSshInfo(name: string = RAPID_LIMA_INSTANCE): Promise<{\n host: string;\n port: number;\n user: string;\n identityFile: string;\n} | null> {\n const instance = await getInstance(name);\n if (!instance || instance.status !== 'Running') {\n return null;\n }\n\n return {\n host: '127.0.0.1',\n port: instance.sshLocalPort ?? 0,\n user: process.env.USER ?? 'lima',\n identityFile: join(homedir(), '.lima', name, 'ssh', 'id_ed25519'),\n };\n}\n\n/**\n * Copy SSH keys to Lima VM for git operations\n */\nexport async function setupGitSsh(name: string = RAPID_LIMA_INSTANCE): Promise<LimaResult> {\n try {\n // The SSH agent is forwarded via the lima.yaml config (forwardAgent: true)\n // We just need to verify it's working\n const result = await execInLima(['ssh-add', '-l'], { name });\n\n if (!result.success) {\n return {\n success: false,\n error: 'SSH agent forwarding is not working. Make sure ssh-agent is running on the host.',\n };\n }\n\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n","/**\n * rapid status - Show environment status\n */\n\nimport { Command } from 'commander';\nimport {\n loadConfig,\n checkAllAgents,\n logger,\n getContainerStatus,\n hasDevcontainerCli,\n hasDocker,\n loadDevcontainerConfig,\n verifySecrets,\n hasOpCli,\n hasVaultCli,\n isOpAuthenticated,\n isVaultAuthenticated,\n hasEnvrc,\n getProviderInfo,\n getAuthStatus,\n type DetectedCredential,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const statusCommand = new Command('status')\n .description('Show environment status')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const spinner = ora('Checking status...').start();\n\n // Load config\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n if (options.json) {\n console.log(JSON.stringify({ configured: false }, null, 2));\n }\n process.exit(1);\n }\n\n const { config, filepath, rootDir } = loaded;\n\n // Check container status\n spinner.text = 'Checking container...';\n const containerStatus = await getContainerStatus(rootDir, config);\n const devcontainerConfig = await loadDevcontainerConfig(rootDir, config);\n const hasDevCli = await hasDevcontainerCli();\n const dockerRunning = await hasDocker();\n\n // Check agents\n spinner.text = 'Checking agents...';\n const agentStatuses = await checkAllAgents(config);\n\n // Check secrets\n spinner.text = 'Checking secrets...';\n const secretsConfig = config.secrets;\n const provider = secretsConfig?.provider || 'env';\n let secretsStatus: {\n provider: string;\n cliInstalled: boolean;\n authenticated: boolean;\n envrcExists: boolean;\n secretsCount: number;\n allAvailable: boolean;\n } | null = null;\n\n if (secretsConfig) {\n let cliInstalled = true;\n let authenticated = true;\n\n if (provider === '1password') {\n cliInstalled = await hasOpCli();\n authenticated = cliInstalled && (await isOpAuthenticated());\n } else if (provider === 'vault') {\n cliInstalled = await hasVaultCli();\n authenticated = cliInstalled && (await isVaultAuthenticated());\n }\n\n const envrcExists = await hasEnvrc(rootDir, secretsConfig);\n const verified = await verifySecrets(secretsConfig);\n\n secretsStatus = {\n provider,\n cliInstalled,\n authenticated,\n envrcExists,\n secretsCount: secretsConfig.items ? Object.keys(secretsConfig.items).length : 0,\n allAvailable: verified.allAvailable,\n };\n }\n\n // Check auth\n spinner.text = 'Checking authentication...';\n const authStatus = await getAuthStatus();\n\n spinner.stop();\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n configured: true,\n configPath: filepath,\n rootDir,\n defaultAgent: config.agents.default,\n container: {\n configured: !!devcontainerConfig,\n running: containerStatus.running,\n name: containerStatus.containerName,\n devcontainerCli: hasDevCli,\n docker: dockerRunning,\n },\n agents: agentStatuses,\n secrets: secretsStatus,\n auth: {\n authenticated: authStatus.authenticated,\n sources: authStatus.sources.map((s: DetectedCredential) => ({\n source: s.source,\n provider: s.provider,\n authType: s.authType,\n hasValue: !!s.value,\n })),\n },\n },\n null,\n 2\n )\n );\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('RAPID')} Status`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n console.log(` ${logger.dim('Config:')} ${filepath}`);\n console.log(` ${logger.dim('Root:')} ${rootDir}`);\n console.log();\n\n // Container status\n console.log(` ${logger.dim('Container:')}`);\n if (!devcontainerConfig) {\n console.log(` ${logger.dim('○')} ${logger.dim('No devcontainer.json configured')}`);\n } else if (!dockerRunning) {\n console.log(` ${logger.dim('○')} ${logger.dim('Docker not running')}`);\n } else if (!hasDevCli) {\n console.log(` ${logger.dim('○')} ${logger.dim('devcontainer CLI not installed')}`);\n } else if (containerStatus.running) {\n console.log(\n ` ${logger.brand('●')} Running ${logger.dim(`(${containerStatus.containerName})`)}`\n );\n } else if (containerStatus.exists) {\n console.log(\n ` ${logger.dim('○')} Stopped ${logger.dim(`(${containerStatus.containerName})`)}`\n );\n } else {\n console.log(` ${logger.dim('○')} Not started`);\n }\n console.log();\n\n // Agent status\n console.log(\n ` ${logger.dim('Agents:')} ${logger.dim(`(default: ${config.agents.default})`)}`\n );\n agentStatuses.forEach((status) => {\n const isDefault = status.name === config.agents.default;\n const icon = status.available ? logger.brand('✓') : logger.dim('○');\n const name = isDefault ? logger.bold(status.name) : status.name;\n const version = status.version ? logger.dim(` (${status.version})`) : '';\n\n console.log(` ${icon} ${name}${version}`);\n });\n\n console.log();\n\n // Secrets status\n if (secretsStatus) {\n const providerInfo = getProviderInfo(\n secretsStatus.provider as '1password' | 'vault' | 'env'\n );\n console.log(` ${logger.dim('Secrets:')} ${logger.dim(`(${providerInfo.name})`)}`);\n\n if (providerInfo.cliRequired) {\n const cliIcon = secretsStatus.cliInstalled ? logger.brand('✓') : logger.dim('○');\n console.log(\n ` ${cliIcon} CLI ${secretsStatus.cliInstalled ? 'installed' : 'not installed'}`\n );\n\n if (secretsStatus.cliInstalled) {\n const authIcon = secretsStatus.authenticated ? logger.brand('✓') : logger.dim('○');\n console.log(\n ` ${authIcon} ${secretsStatus.authenticated ? 'Authenticated' : 'Not authenticated'}`\n );\n }\n }\n\n if (secretsStatus.secretsCount > 0) {\n const allIcon = secretsStatus.allAvailable ? logger.brand('✓') : logger.dim('○');\n console.log(\n ` ${allIcon} ${secretsStatus.secretsCount} secret${secretsStatus.secretsCount !== 1 ? 's' : ''} ${secretsStatus.allAvailable ? 'available' : 'configured'}`\n );\n }\n\n const envrcIcon = secretsStatus.envrcExists ? logger.brand('✓') : logger.dim('○');\n console.log(\n ` ${envrcIcon} .envrc ${secretsStatus.envrcExists ? 'exists' : 'not generated'}`\n );\n\n console.log();\n }\n\n // Auth status\n console.log(` ${logger.dim('Auth:')}`);\n if (!authStatus.authenticated) {\n console.log(` ${logger.dim('○')} ${logger.dim('No authentication detected')}`);\n console.log(` ${logger.dim(' Run `rapid auth` for options')}`);\n } else {\n for (const cred of authStatus.sources) {\n const icon = cred.authType === 'oauth' ? logger.brand('●') : logger.dim('○');\n const authType = cred.authType === 'oauth' ? 'OAuth' : 'API Key';\n let info = `${cred.source} (${cred.provider}, ${authType})`;\n if (cred.accountInfo?.email) {\n info += ` - ${cred.accountInfo.email}`;\n }\n console.log(` ${icon} ${info}`);\n }\n }\n\n console.log();\n // Quick actions\n if (!containerStatus.running && devcontainerConfig && dockerRunning && hasDevCli) {\n logger.info('Run `rapid start` to start the container');\n } else if (containerStatus.running) {\n logger.info('Run `rapid dev` to start coding');\n }\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid agent - Manage AI agents\n */\n\nimport { Command } from 'commander';\nimport { loadConfig, checkAllAgents, logger } from '@a3t/rapid-core';\n\nexport const agentCommand = new Command('agent').description('Manage AI agents');\n\n// rapid agent list\nagentCommand\n .command('list')\n .description('List available agents')\n .action(async () => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config } = loaded;\n const statuses = await checkAllAgents(config);\n\n logger.header('Available Agents');\n\n statuses.forEach((status) => {\n const isDefault = status.name === config.agents.default;\n const icon = status.available ? '✓' : '○';\n const defaultTag = isDefault ? ' (default)' : '';\n const versionTag = status.version ? ` - ${status.version}` : '';\n\n if (status.available) {\n console.log(\n ` ${logger.brand(icon)} ${status.name}${defaultTag}${logger.dim(versionTag)}`\n );\n } else {\n console.log(\n ` ${logger.dim(icon)} ${logger.dim(status.name)}${defaultTag} ${logger.dim('[not installed]')}`\n );\n }\n });\n\n logger.blank();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// rapid agent default\nagentCommand\n .command('default [name]')\n .description('Get or set default agent')\n .action(async (name) => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config } = loaded;\n\n if (!name) {\n // Show current default\n console.log(config.agents.default);\n return;\n }\n\n // Check if agent exists\n if (!config.agents.available[name]) {\n logger.error(`Agent \"${name}\" not found in configuration`);\n logger.info('Available agents:');\n Object.keys(config.agents.available).forEach((n) => {\n console.log(` - ${n}`);\n });\n process.exit(1);\n }\n\n // TODO: Write the updated config\n logger.warn('Setting default agent requires editing rapid.json');\n logger.info(`Set \"agents.default\" to \"${name}\" in your rapid.json`);\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid start - Start the development container\n */\n\nimport { Command } from 'commander';\nimport {\n loadConfig,\n logger,\n hasDevcontainerCli,\n hasDocker,\n loadDevcontainerConfig,\n getContainerStatus,\n startContainer,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const startCommand = new Command('start')\n .description('Start the development container')\n .option('--rebuild', 'Force rebuild the container', false)\n .option('--no-cache', 'Build without Docker cache', false)\n .action(async (options) => {\n const spinner = ora('Starting development environment...').start();\n\n try {\n // Load config\n spinner.text = 'Loading configuration...';\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config, rootDir } = loaded;\n\n // Check for devcontainer CLI\n spinner.text = 'Checking devcontainer CLI...';\n const hasDevCli = await hasDevcontainerCli();\n if (!hasDevCli) {\n spinner.fail('devcontainer CLI not found');\n logger.blank();\n logger.info('Install with:');\n console.log(' npm install -g @devcontainers/cli');\n logger.blank();\n process.exit(1);\n }\n\n // Check Docker\n spinner.text = 'Checking Docker...';\n const dockerAvailable = await hasDocker();\n if (!dockerAvailable) {\n spinner.fail('Docker is not running');\n logger.info('Please start Docker Desktop and try again.');\n process.exit(1);\n }\n\n // Check for devcontainer.json\n spinner.text = 'Checking devcontainer configuration...';\n const devcontainerConfig = await loadDevcontainerConfig(rootDir, config);\n if (!devcontainerConfig) {\n spinner.fail('No devcontainer.json found');\n logger.blank();\n logger.info('Create a .devcontainer/devcontainer.json or run:');\n console.log(' rapid init --template <template>');\n logger.blank();\n process.exit(1);\n }\n\n // Check current status\n spinner.text = 'Checking container status...';\n const status = await getContainerStatus(rootDir, config);\n\n if (status.running && !options.rebuild) {\n spinner.succeed('Container already running');\n logger.info(`Container: ${status.containerName}`);\n logger.blank();\n logger.info('Run `rapid dev` to start coding');\n return;\n }\n\n // Start the container\n spinner.text = options.rebuild ? 'Rebuilding container...' : 'Starting container...';\n spinner.stopAndPersist({ symbol: '🐳', text: spinner.text });\n\n const result = await startContainer(rootDir, config, {\n rebuild: options.rebuild,\n quiet: false,\n });\n\n if (!result.success) {\n logger.blank();\n logger.error('Failed to start container');\n logger.error(result.error || 'Unknown error');\n process.exit(1);\n }\n\n logger.blank();\n logger.success('Development environment ready!');\n logger.blank();\n logger.info('Next steps:');\n console.log(` ${logger.dim('•')} Run ${logger.brand('rapid dev')} to start coding`);\n console.log(` ${logger.dim('•')} Run ${logger.brand('rapid stop')} when done`);\n logger.blank();\n } catch (error) {\n spinner.fail('Failed to start environment');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid stop - Stop the development container\n */\n\nimport { Command } from 'commander';\nimport { loadConfig, logger, getContainerStatus, stopContainer } from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const stopCommand = new Command('stop')\n .description('Stop the development container')\n .option('--remove', 'Remove container after stopping', false)\n .action(async (options) => {\n const spinner = ora('Stopping development environment...').start();\n\n try {\n // Load config\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n const { config, rootDir } = loaded;\n\n // Check current status\n spinner.text = 'Checking container status...';\n const status = await getContainerStatus(rootDir, config);\n\n if (!status.exists) {\n spinner.succeed('No container to stop');\n return;\n }\n\n if (!status.running) {\n if (options.remove) {\n spinner.text = 'Removing container...';\n await stopContainer(rootDir, config, { remove: true });\n spinner.succeed('Container removed');\n } else {\n spinner.succeed('Container already stopped');\n }\n return;\n }\n\n // Stop the container\n spinner.text = 'Stopping container...';\n const result = await stopContainer(rootDir, config, { remove: options.remove });\n\n if (!result.success) {\n spinner.fail('Failed to stop container');\n logger.error(result.error || 'Unknown error');\n process.exit(1);\n }\n\n spinner.succeed(options.remove ? 'Container stopped and removed' : 'Container stopped');\n } catch (error) {\n spinner.fail('Failed to stop environment');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid secrets - Manage project secrets\n */\n\nimport { Command } from 'commander';\nimport {\n loadConfig,\n logger,\n verifySecrets,\n loadSecrets,\n hasOpCli,\n hasVaultCli,\n isOpAuthenticated,\n isVaultAuthenticated,\n getOpAuthStatus,\n hasOpServiceAccountToken,\n generateEnvrc,\n writeEnvrc,\n hasEnvrc,\n getProviderInfo,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const secretsCommand = new Command('secrets').description('Manage project secrets');\n\n/**\n * rapid secrets verify - Verify all secrets are accessible\n */\nsecretsCommand\n .command('verify')\n .description('Verify all secrets are accessible')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n const spinner = ora('Verifying secrets...').start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n const { config } = loaded;\n const secretsConfig = config.secrets;\n\n if (!secretsConfig) {\n spinner.info('No secrets configured');\n return;\n }\n\n const provider = secretsConfig.provider || 'env';\n\n // Check CLI availability\n spinner.text = `Checking ${provider} availability...`;\n\n if (provider === '1password') {\n const hasOp = await hasOpCli();\n if (!hasOp) {\n spinner.fail('1Password CLI (op) not found');\n console.log();\n logger.info('Install with: brew install 1password-cli');\n logger.info('More info: https://developer.1password.com/docs/cli/get-started/');\n process.exit(1);\n }\n\n const authenticated = await isOpAuthenticated();\n if (!authenticated) {\n spinner.fail('1Password CLI not authenticated');\n console.log();\n logger.info('Run: eval $(op signin)');\n process.exit(1);\n }\n } else if (provider === 'vault') {\n const hasVault = await hasVaultCli();\n if (!hasVault) {\n spinner.fail('Vault CLI not found');\n console.log();\n logger.info('Install from: https://developer.hashicorp.com/vault/docs/install');\n process.exit(1);\n }\n\n const authenticated = await isVaultAuthenticated();\n if (!authenticated) {\n spinner.fail('Vault CLI not authenticated');\n console.log();\n logger.info('Run: vault login');\n process.exit(1);\n }\n }\n\n // Verify secrets\n spinner.text = 'Verifying secrets...';\n const status = await verifySecrets(secretsConfig);\n\n spinner.stop();\n\n if (options.json) {\n console.log(JSON.stringify(status, null, 2));\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('Secrets')} Verification`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n console.log(` ${logger.dim('Provider:')} ${getProviderInfo(provider).name}`);\n console.log(\n ` ${logger.dim('Auth:')} ${status.authenticated ? logger.brand('✓') : logger.dim('○')} ${status.authenticated ? 'Authenticated' : 'Not authenticated'}`\n );\n console.log();\n\n if (status.secrets.length === 0) {\n console.log(` ${logger.dim('No secrets configured in rapid.json')}`);\n console.log();\n return;\n }\n\n console.log(` ${logger.dim('Secrets:')}`);\n for (const secret of status.secrets) {\n const icon = secret.available ? logger.brand('✓') : '✗';\n const ref = logger.dim(`(${provider})`);\n const error = secret.error ? logger.dim(` - ${secret.error}`) : '';\n\n console.log(` ${icon} ${secret.name} ${ref}${error}`);\n }\n console.log();\n\n if (status.allAvailable) {\n logger.info('All secrets verified successfully!');\n } else {\n logger.error('Some secrets are not available');\n process.exit(1);\n }\n console.log();\n } catch (error) {\n spinner.fail('Failed to verify secrets');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid secrets list - List configured secrets\n */\nsecretsCommand\n .command('list')\n .description('List configured secrets (names only, not values)')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found');\n process.exit(1);\n }\n\n const { config } = loaded;\n const secretsConfig = config.secrets;\n\n if (!secretsConfig || !secretsConfig.items || Object.keys(secretsConfig.items).length === 0) {\n if (options.json) {\n console.log(JSON.stringify({ secrets: [] }, null, 2));\n } else {\n logger.info('No secrets configured');\n }\n return;\n }\n\n const provider = secretsConfig.provider || 'env';\n\n if (options.json) {\n const secrets = Object.entries(secretsConfig.items).map(([name, reference]) => ({\n name,\n reference,\n provider,\n }));\n console.log(JSON.stringify({ provider, secrets }, null, 2));\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('Configured Secrets')}`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n console.log(` ${logger.dim('Provider:')} ${getProviderInfo(provider).name}`);\n console.log();\n\n // Calculate padding for alignment\n const maxNameLen = Math.max(...Object.keys(secretsConfig.items).map((n) => n.length));\n\n for (const [name, reference] of Object.entries(secretsConfig.items)) {\n const paddedName = name.padEnd(maxNameLen);\n console.log(` ${logger.brand('•')} ${paddedName} ${logger.dim(reference)}`);\n }\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid secrets generate - Generate .envrc from configuration\n */\nsecretsCommand\n .command('generate')\n .description('Generate .envrc file from rapid.json configuration')\n .option('--force', 'Overwrite existing .envrc', false)\n .option('--stdout', 'Print to stdout instead of writing file', false)\n .action(async (options) => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found');\n process.exit(1);\n }\n\n const { config, rootDir } = loaded;\n const secretsConfig = config.secrets;\n\n if (!secretsConfig) {\n logger.error('No secrets configuration in rapid.json');\n process.exit(1);\n }\n\n const content = generateEnvrc(secretsConfig);\n\n if (options.stdout) {\n console.log(content);\n return;\n }\n\n // Check if .envrc exists\n const envrcExists = await hasEnvrc(rootDir, secretsConfig);\n if (envrcExists && !options.force) {\n logger.error('.envrc already exists. Use --force to overwrite.');\n process.exit(1);\n }\n\n const spinner = ora('Generating .envrc...').start();\n\n const filepath = await writeEnvrc(rootDir, secretsConfig);\n\n spinner.succeed('Generated .envrc');\n console.log();\n console.log(` ${logger.dim('File:')} ${filepath}`);\n console.log();\n\n const itemCount = secretsConfig.items ? Object.keys(secretsConfig.items).length : 0;\n logger.info(`Generated .envrc with ${itemCount} secret${itemCount !== 1 ? 's' : ''}`);\n logger.info(`Run ${logger.brand('direnv allow')} to activate`);\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid secrets info - Show provider information and status\n */\nsecretsCommand\n .command('info')\n .description('Show secrets provider information and authentication status')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n const spinner = ora('Checking provider status...').start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n const { config, rootDir } = loaded;\n const secretsConfig = config.secrets || { provider: 'env' };\n const provider = secretsConfig.provider || 'env';\n\n const info = getProviderInfo(provider);\n\n let cliInstalled = true;\n let authenticated = true;\n\n let opAuthStatus: { authenticated: boolean; method: string; accountInfo?: string } | null =\n null;\n\n if (provider === '1password') {\n cliInstalled = await hasOpCli();\n if (cliInstalled) {\n opAuthStatus = await getOpAuthStatus();\n authenticated = opAuthStatus.authenticated;\n } else {\n authenticated = false;\n }\n } else if (provider === 'vault') {\n cliInstalled = await hasVaultCli();\n authenticated = cliInstalled && (await isVaultAuthenticated());\n }\n\n const envrcExists = await hasEnvrc(rootDir, secretsConfig);\n const hasServiceToken = hasOpServiceAccountToken();\n\n spinner.stop();\n\n const status = {\n provider,\n providerName: info.name,\n cliRequired: info.cliRequired,\n cliInstalled,\n authenticated,\n authMethod: opAuthStatus?.method,\n accountInfo: opAuthStatus?.accountInfo,\n hasServiceToken,\n envrcExists,\n envrcPath: secretsConfig.envrc?.path || '.envrc',\n secretsCount: secretsConfig.items ? Object.keys(secretsConfig.items).length : 0,\n };\n\n if (options.json) {\n console.log(JSON.stringify(status, null, 2));\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('Secrets')} Provider Info`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n console.log(` ${logger.dim('Provider:')} ${info.name}`);\n\n if (info.cliRequired) {\n const cliIcon = cliInstalled ? logger.brand('✓') : '✗';\n console.log(\n ` ${logger.dim('CLI:')} ${cliIcon} ${info.cliRequired} ${cliInstalled ? '' : logger.dim('(not installed)')}`\n );\n\n if (cliInstalled && provider === '1password' && opAuthStatus) {\n const authIcon = authenticated ? logger.brand('✓') : '✗';\n const methodLabel =\n opAuthStatus.method === 'service-account'\n ? 'Service Account'\n : opAuthStatus.method === 'user'\n ? 'User'\n : 'Not authenticated';\n const accountLabel = opAuthStatus.accountInfo ? ` (${opAuthStatus.accountInfo})` : '';\n console.log(` ${logger.dim('Auth:')} ${authIcon} ${methodLabel}${accountLabel}`);\n\n if (hasServiceToken) {\n console.log(\n ` ${logger.dim('Token:')} ${logger.brand('✓')} OP_SERVICE_ACCOUNT_TOKEN set`\n );\n }\n } else if (cliInstalled) {\n const authIcon = authenticated ? logger.brand('✓') : '✗';\n console.log(\n ` ${logger.dim('Auth:')} ${authIcon} ${authenticated ? 'Authenticated' : 'Not authenticated'}`\n );\n }\n\n if (info.installUrl && !cliInstalled) {\n console.log();\n console.log(` ${logger.dim('Install:')} ${info.installUrl}`);\n }\n\n if (info.authCommand && cliInstalled && !authenticated) {\n console.log();\n console.log(` ${logger.dim('Authenticate:')} ${info.authCommand}`);\n if (provider === '1password') {\n console.log(\n ` ${logger.dim('Or set:')} OP_SERVICE_ACCOUNT_TOKEN for non-interactive auth`\n );\n }\n }\n }\n\n console.log();\n\n const envrcIcon = envrcExists ? logger.brand('✓') : logger.dim('○');\n console.log(\n ` ${logger.dim('.envrc:')} ${envrcIcon} ${envrcExists ? 'Exists' : 'Not generated'}`\n );\n console.log(` ${logger.dim('Secrets:')} ${status.secretsCount} configured`);\n console.log();\n\n if (!envrcExists && status.secretsCount > 0) {\n logger.info(`Run ${logger.brand('rapid secrets generate')} to create .envrc`);\n console.log();\n }\n } catch (error) {\n spinner.fail('Failed to get provider info');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid secrets run -- <command> - Run a command with secrets injected\n */\nsecretsCommand\n .command('run')\n .description('Run a command with secrets loaded into environment')\n .argument('<command...>', 'Command to run with secrets')\n .option('--show', 'Show which secrets are being loaded (names only)', false)\n .action(async (commandArgs: string[], options) => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found');\n process.exit(1);\n }\n\n const { config } = loaded;\n const secretsConfig = config.secrets;\n\n if (!secretsConfig || !secretsConfig.items) {\n logger.error('No secrets configured in rapid.json');\n process.exit(1);\n }\n\n const provider = secretsConfig.provider || 'env';\n\n // Check CLI availability for 1Password\n if (provider === '1password') {\n const hasOp = await hasOpCli();\n if (!hasOp) {\n logger.error('1Password CLI (op) not found');\n logger.info('Install with: brew install 1password-cli');\n process.exit(1);\n }\n\n const authenticated = await isOpAuthenticated();\n if (!authenticated) {\n logger.error('1Password not authenticated');\n logger.info('Run: eval $(op signin)');\n process.exit(1);\n }\n }\n\n // Load secrets\n const secrets = await loadSecrets(secretsConfig);\n const secretCount = Object.keys(secrets).length;\n\n if (secretCount === 0) {\n logger.warn('No secrets were loaded');\n } else if (options.show) {\n logger.info(`Loaded ${secretCount} secret${secretCount !== 1 ? 's' : ''}:`);\n for (const name of Object.keys(secrets)) {\n console.log(` ${logger.brand('•')} ${name}`);\n }\n console.log();\n }\n\n // Run the command with secrets in environment\n const { execa } = await import('execa');\n const [cmd, ...args] = commandArgs;\n\n if (!cmd) {\n logger.error('No command specified');\n process.exit(1);\n }\n\n await execa(cmd, args, {\n stdio: 'inherit',\n env: {\n ...process.env,\n ...secrets,\n },\n });\n } catch (error) {\n if ((error as { exitCode?: number }).exitCode !== undefined) {\n process.exit((error as { exitCode: number }).exitCode);\n }\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid auth - Show and manage authentication status\n */\n\nimport { Command } from 'commander';\nimport {\n logger,\n getAuthStatus,\n detectAllCredentials,\n type DetectedCredential,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const authCommand = new Command('auth')\n .description('Show authentication status from external tools')\n .option('--json', 'Output as JSON')\n .option('--source <source>', 'Filter by source (claude-code, codex, gemini-cli, aider, env)')\n .option('--provider <provider>', 'Filter by provider (anthropic, openai, google)')\n .action(async (options) => {\n try {\n const spinner = ora('Checking authentication...').start();\n\n const status = await getAuthStatus();\n\n spinner.stop();\n\n if (options.json) {\n let credentials = status.sources;\n\n // Apply filters\n if (options.source) {\n credentials = credentials.filter((c: DetectedCredential) => c.source === options.source);\n }\n if (options.provider) {\n credentials = credentials.filter(\n (c: DetectedCredential) => c.provider === options.provider\n );\n }\n\n // Remove sensitive values for JSON output\n const sanitized = credentials.map((c: DetectedCredential) => ({\n source: c.source,\n provider: c.provider,\n authType: c.authType,\n envVar: c.envVar,\n expiresAt: c.expiresAt?.toISOString(),\n accountInfo: c.accountInfo,\n configPath: c.configPath,\n hasValue: !!c.value,\n }));\n\n console.log(\n JSON.stringify(\n {\n authenticated: sanitized.length > 0,\n sources: sanitized,\n warnings: status.warnings,\n },\n null,\n 2\n )\n );\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('RAPID')} Authentication`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n if (!status.authenticated) {\n console.log(` ${logger.dim('No authentication detected')}`);\n console.log();\n console.log(' To authenticate, use one of these methods:');\n console.log();\n console.log(` ${logger.brand('Claude Pro/Max:')}`);\n console.log(' Run `claude` and sign in with your Anthropic account');\n console.log();\n console.log(` ${logger.brand('OpenAI (ChatGPT Plus/Pro):')}`);\n console.log(' Run `codex` and sign in with ChatGPT');\n console.log();\n console.log(` ${logger.brand('Gemini:')}`);\n console.log(' Run `gemini` and sign in with your Google account');\n console.log();\n console.log(` ${logger.brand('API Keys:')}`);\n console.log(' Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY');\n console.log();\n return;\n }\n\n // Show detected credentials\n for (const cred of status.sources) {\n // Apply filters\n if (options.source && cred.source !== options.source) continue;\n if (options.provider && cred.provider !== options.provider) continue;\n\n const isPrimary = cred === status.preferredSource;\n const icon = isPrimary ? logger.brand('●') : logger.dim('○');\n const authIcon = cred.authType === 'oauth' ? logger.brand('OAuth') : logger.dim('API Key');\n\n console.log(` ${icon} ${logger.bold(cred.source)}`);\n console.log(` Provider: ${cred.provider}`);\n console.log(` Auth: ${authIcon}`);\n\n if (cred.accountInfo?.email) {\n console.log(` Account: ${cred.accountInfo.email}`);\n }\n if (cred.accountInfo?.organization) {\n console.log(` Org: ${cred.accountInfo.organization}`);\n }\n if (cred.accountInfo?.plan) {\n console.log(` Plan: ${logger.brand(cred.accountInfo.plan)}`);\n }\n if (cred.expiresAt) {\n const now = new Date();\n const expiresIn = Math.round((cred.expiresAt.getTime() - now.getTime()) / 1000 / 60);\n if (expiresIn > 0) {\n console.log(` Expires: in ${expiresIn} minutes`);\n } else {\n console.log(` Expires: ${logger.dim('EXPIRED')}`);\n }\n }\n if (cred.configPath) {\n console.log(` Config: ${logger.dim(cred.configPath)}`);\n }\n if (cred.envVar) {\n console.log(` Env: ${logger.dim(cred.envVar)}`);\n }\n\n if (isPrimary) {\n console.log(` ${logger.brand('→ Primary source')}`);\n }\n\n console.log();\n }\n\n // Warnings\n if (status.warnings && status.warnings.length > 0) {\n console.log(` ${logger.dim('Warnings:')}`);\n for (const warning of status.warnings) {\n console.log(` ! ${warning}`);\n }\n console.log();\n }\n\n // Helpful info\n console.log(` ${logger.dim('Tip:')} RAPID will automatically use detected`);\n console.log(` ${logger.dim(' ')} credentials when launching AI agents.`);\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Subcommand: rapid auth env\nauthCommand\n .command('env')\n .description('Show environment variables for detected credentials')\n .option('--export', 'Output as export statements')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const credentials = await detectAllCredentials();\n\n // Group by provider and prefer OAuth\n const byProvider = new Map<string, { envVar: string; masked: string }>();\n\n for (const cred of credentials) {\n if (!cred.value) continue;\n\n const existing = byProvider.get(cred.provider);\n if (!existing || (cred.authType === 'oauth' && cred.envVar)) {\n let envVar: string;\n switch (cred.provider) {\n case 'anthropic':\n envVar = cred.authType === 'oauth' ? 'ANTHROPIC_AUTH_TOKEN' : 'ANTHROPIC_API_KEY';\n break;\n case 'openai':\n envVar = cred.authType === 'oauth' ? 'OPENAI_AUTH_TOKEN' : 'OPENAI_API_KEY';\n break;\n case 'google':\n envVar =\n cred.authType === 'oauth' ? 'GOOGLE_AUTH_TOKEN' : cred.envVar || 'GEMINI_API_KEY';\n break;\n default:\n continue;\n }\n\n // Mask the value\n const masked = cred.value.slice(0, 8) + '...' + cred.value.slice(-4);\n\n byProvider.set(cred.provider, { envVar, masked });\n }\n }\n\n if (options.json) {\n const result: Record<string, string> = {};\n for (const [, { envVar, masked }] of byProvider) {\n result[envVar] = masked;\n }\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (options.export) {\n for (const [, { envVar }] of byProvider) {\n // Note: We don't actually export the real value for security\n // This is for documentation purposes\n console.log(`# ${envVar} detected from external auth`);\n console.log(`# export ${envVar}=\"<your-token>\"`);\n }\n return;\n }\n\n // Pretty output\n console.log();\n console.log(` ${logger.brand('RAPID')} Auth Environment`);\n console.log(` ${logger.dim('─'.repeat(24))}`);\n console.log();\n\n if (byProvider.size === 0) {\n console.log(` ${logger.dim('No credentials detected')}`);\n console.log();\n return;\n }\n\n for (const [provider, { envVar, masked }] of byProvider) {\n console.log(` ${logger.brand(provider)}`);\n console.log(` ${envVar}=${masked}`);\n console.log();\n }\n\n console.log(` ${logger.dim('These will be automatically injected when running agents.')}`);\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","/**\n * rapid mcp - Manage MCP (Model Context Protocol) servers\n */\n\nimport { Command } from 'commander';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport {\n loadConfig,\n logger,\n getMcpServers,\n getMcpServerStatus,\n addMcpServerFromTemplate,\n addMcpServer,\n removeMcpServer,\n enableMcpServer,\n disableMcpServer,\n writeMcpConfig,\n writeOpenCodeConfig,\n MCP_SERVER_TEMPLATES,\n getMcpTemplate,\n type RapidConfig,\n type McpServerDefinition,\n} from '@a3t/rapid-core';\nimport ora from 'ora';\n\nexport const mcpCommand = new Command('mcp').description(\n 'Manage MCP (Model Context Protocol) servers'\n);\n\n/**\n * Save updated config to rapid.json\n */\nasync function saveConfig(rootDir: string, config: RapidConfig): Promise<void> {\n const configPath = join(rootDir, 'rapid.json');\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\n/**\n * rapid mcp list - List configured MCP servers\n */\nmcpCommand\n .command('list')\n .description('List configured MCP servers')\n .option('--json', 'Output as JSON')\n .option('--templates', 'Show available templates instead of configured servers')\n .action(async (options) => {\n try {\n if (options.templates) {\n // Show available templates\n if (options.json) {\n console.log(JSON.stringify(MCP_SERVER_TEMPLATES, null, 2));\n return;\n }\n\n console.log();\n console.log(` ${logger.brand('Available MCP Server Templates')}`);\n console.log(` ${logger.dim('─'.repeat(40))}`);\n console.log();\n\n for (const [name, template] of Object.entries(MCP_SERVER_TEMPLATES)) {\n const typeLabel =\n template.type === 'remote' ? logger.dim('(remote)') : logger.dim('(stdio)');\n const secretsLabel =\n template.requiredSecrets.length > 0\n ? logger.dim(` - requires: ${template.requiredSecrets.join(', ')}`)\n : logger.dim(' - no secrets required');\n\n console.log(` ${logger.brand('•')} ${name} ${typeLabel}`);\n console.log(` ${template.description}${secretsLabel}`);\n console.log();\n }\n\n logger.info(`Use ${logger.brand('rapid mcp add <name>')} to add a server`);\n console.log();\n return;\n }\n\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config } = loaded;\n const servers = getMcpServers(config);\n\n if (options.json) {\n console.log(JSON.stringify({ servers }, null, 2));\n return;\n }\n\n console.log();\n console.log(` ${logger.brand('MCP Servers')}`);\n console.log(` ${logger.dim('─'.repeat(40))}`);\n console.log();\n\n if (servers.length === 0) {\n console.log(` ${logger.dim('No MCP servers configured')}`);\n console.log();\n logger.info(`Use ${logger.brand('rapid mcp add <name>')} to add a server`);\n logger.info(`Use ${logger.brand('rapid mcp list --templates')} to see available templates`);\n console.log();\n return;\n }\n\n for (const server of servers) {\n const icon = server.enabled ? logger.brand('✓') : logger.dim('○');\n const typeLabel = server.type === 'remote' ? logger.dim('(remote)') : logger.dim('(stdio)');\n const statusLabel = server.enabled ? '' : logger.dim(' [disabled]');\n const location =\n server.type === 'remote'\n ? logger.dim(server.url || '')\n : logger.dim(server.command || '');\n\n console.log(` ${icon} ${server.name} ${typeLabel}${statusLabel}`);\n if (location) {\n console.log(` ${location}`);\n }\n console.log();\n }\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp add - Add an MCP server\n */\nmcpCommand\n .command('add')\n .description('Add an MCP server')\n .argument('<name>', 'Server name (or template name)')\n .option('--type <type>', 'Server type: remote or stdio')\n .option('--url <url>', 'URL for remote servers')\n .option('--command <cmd>', 'Command for stdio servers')\n .option('--args <args>', 'Arguments for stdio command (comma-separated)')\n .option('--header <header>', 'HTTP header for remote servers (name=value)', collectHeaders, {})\n .action(async (name: string, options) => {\n const spinner = ora(`Adding MCP server '${name}'...`).start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n let { config } = loaded;\n const { rootDir } = loaded;\n\n // Check if server already exists\n const existingServers = getMcpServers(config);\n if (existingServers.some((s) => s.name === name)) {\n spinner.fail(`MCP server '${name}' already exists`);\n logger.info(`Use ${logger.brand(`rapid mcp remove ${name}`)} to remove it first`);\n process.exit(1);\n }\n\n // Check if it's a template\n const template = getMcpTemplate(name);\n\n if (template && !options.type && !options.url && !options.command) {\n // Add from template\n config = addMcpServerFromTemplate(config, name);\n spinner.text = `Adding '${name}' from template...`;\n } else if (options.type || options.url || options.command) {\n // Add custom server\n const serverConfig: McpServerDefinition = {\n enabled: true,\n };\n\n if (options.type) {\n serverConfig.type = options.type as 'remote' | 'stdio';\n }\n\n if (options.url) {\n serverConfig.type = 'remote';\n serverConfig.url = options.url;\n }\n\n if (options.header && Object.keys(options.header).length > 0) {\n serverConfig.headers = options.header;\n }\n\n if (options.command) {\n serverConfig.type = 'stdio';\n serverConfig.command = options.command;\n }\n\n if (options.args) {\n serverConfig.args = options.args.split(',').map((a: string) => a.trim());\n }\n\n config = addMcpServer(config, name, serverConfig);\n } else if (template) {\n // Add from template (fallback)\n config = addMcpServerFromTemplate(config, name);\n } else {\n spinner.fail(`Unknown MCP server template: ${name}`);\n logger.info(`Use ${logger.brand('rapid mcp list --templates')} to see available templates`);\n logger.info('Or specify --type, --url, or --command for a custom server');\n process.exit(1);\n }\n\n // Save config\n await saveConfig(rootDir, config);\n\n // Regenerate MCP config files\n await writeMcpConfig(rootDir, config);\n await writeOpenCodeConfig(rootDir, config);\n\n spinner.succeed(`Added MCP server '${name}'`);\n console.log();\n\n // Show required secrets if any\n if (template?.requiredSecrets.length) {\n logger.info('Required secrets:');\n for (const secret of template.requiredSecrets) {\n const ref = template.secretReferences?.[secret];\n console.log(` ${logger.brand('•')} ${secret}${ref ? logger.dim(` (${ref})`) : ''}`);\n }\n console.log();\n logger.info(`Add these to ${logger.brand('rapid.json')} secrets.items section`);\n console.log();\n }\n } catch (error) {\n spinner.fail('Failed to add MCP server');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp remove - Remove an MCP server\n */\nmcpCommand\n .command('remove')\n .description('Remove an MCP server')\n .argument('<name>', 'Server name to remove')\n .action(async (name: string) => {\n const spinner = ora(`Removing MCP server '${name}'...`).start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n let { config } = loaded;\n const { rootDir } = loaded;\n\n // Remove the server\n config = removeMcpServer(config, name);\n\n // Save config\n await saveConfig(rootDir, config);\n\n // Regenerate MCP config files\n await writeMcpConfig(rootDir, config);\n await writeOpenCodeConfig(rootDir, config);\n\n spinner.succeed(`Removed MCP server '${name}'`);\n console.log();\n } catch (error) {\n spinner.fail('Failed to remove MCP server');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp enable - Enable a disabled MCP server\n */\nmcpCommand\n .command('enable')\n .description('Enable a disabled MCP server')\n .argument('<name>', 'Server name to enable')\n .action(async (name: string) => {\n const spinner = ora(`Enabling MCP server '${name}'...`).start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n let { config } = loaded;\n const { rootDir } = loaded;\n\n // Enable the server\n config = enableMcpServer(config, name);\n\n // Save config\n await saveConfig(rootDir, config);\n\n // Regenerate MCP config files\n await writeMcpConfig(rootDir, config);\n await writeOpenCodeConfig(rootDir, config);\n\n spinner.succeed(`Enabled MCP server '${name}'`);\n console.log();\n } catch (error) {\n spinner.fail('Failed to enable MCP server');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp disable - Disable an MCP server (without removing)\n */\nmcpCommand\n .command('disable')\n .description('Disable an MCP server (without removing)')\n .argument('<name>', 'Server name to disable')\n .action(async (name: string) => {\n const spinner = ora(`Disabling MCP server '${name}'...`).start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n let { config } = loaded;\n const { rootDir } = loaded;\n\n // Disable the server\n config = disableMcpServer(config, name);\n\n // Save config\n await saveConfig(rootDir, config);\n\n // Regenerate MCP config files\n await writeMcpConfig(rootDir, config);\n await writeOpenCodeConfig(rootDir, config);\n\n spinner.succeed(`Disabled MCP server '${name}'`);\n console.log();\n } catch (error) {\n spinner.fail('Failed to disable MCP server');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp status - Show MCP server status\n */\nmcpCommand\n .command('status')\n .description('Show MCP server status')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n logger.error('No rapid.json found. Run `rapid init` first.');\n process.exit(1);\n }\n\n const { config } = loaded;\n const servers = getMcpServerStatus(config);\n\n if (options.json) {\n console.log(JSON.stringify({ servers }, null, 2));\n return;\n }\n\n console.log();\n console.log(` ${logger.brand('MCP Server Status')}`);\n console.log(` ${logger.dim('─'.repeat(40))}`);\n console.log();\n\n if (servers.length === 0) {\n console.log(` ${logger.dim('No MCP servers configured')}`);\n console.log();\n return;\n }\n\n let enabledCount = 0;\n let disabledCount = 0;\n\n for (const server of servers) {\n if (server.enabled) {\n enabledCount++;\n } else {\n disabledCount++;\n }\n\n const icon =\n server.status === 'enabled'\n ? logger.brand('✓')\n : server.status === 'disabled'\n ? logger.dim('○')\n : '✗';\n\n const statusLabel =\n server.status === 'enabled'\n ? 'enabled'\n : server.status === 'disabled'\n ? logger.dim('disabled')\n : logger.dim(`error: ${server.error}`);\n\n const typeLabel = server.type === 'remote' ? 'remote' : 'stdio';\n\n console.log(` ${icon} ${server.name}`);\n console.log(` ${logger.dim('Type:')} ${typeLabel}`);\n console.log(` ${logger.dim('Status:')} ${statusLabel}`);\n\n if (server.url) {\n console.log(` ${logger.dim('URL:')} ${server.url}`);\n }\n if (server.command) {\n console.log(` ${logger.dim('Cmd:')} ${server.command}`);\n }\n console.log();\n }\n\n console.log(` ${logger.dim('Summary:')} ${enabledCount} enabled, ${disabledCount} disabled`);\n console.log();\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * rapid mcp sync - Regenerate .mcp.json and opencode.json from rapid.json\n */\nmcpCommand\n .command('sync')\n .description('Regenerate .mcp.json and opencode.json from rapid.json')\n .action(async () => {\n const spinner = ora('Syncing MCP configuration files...').start();\n\n try {\n const loaded = await loadConfig();\n\n if (!loaded) {\n spinner.fail('No rapid.json found');\n process.exit(1);\n }\n\n const { config, rootDir } = loaded;\n\n // Regenerate MCP config files\n await writeMcpConfig(rootDir, config);\n await writeOpenCodeConfig(rootDir, config);\n\n const servers = getMcpServers(config);\n const enabledCount = servers.filter((s) => s.enabled).length;\n\n spinner.succeed('MCP configuration synced');\n console.log();\n console.log(` ${logger.dim('Files updated:')}`);\n console.log(` ${logger.brand('•')} .mcp.json`);\n console.log(` ${logger.brand('•')} opencode.json`);\n console.log();\n console.log(` ${logger.dim('Servers:')} ${enabledCount} enabled`);\n console.log();\n } catch (error) {\n spinner.fail('Failed to sync MCP configuration');\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * Helper to collect multiple --header flags\n */\nfunction collectHeaders(value: string, previous: Record<string, string>): Record<string, string> {\n const [name, ...rest] = value.split('=');\n if (name && rest.length > 0) {\n previous[name] = rest.join('=');\n }\n return previous;\n}\n","/**\n * Update command for RAPID CLI\n */\n\nimport { Command } from 'commander';\nimport { updateChecker } from '../utils/update-checker.js';\nimport { logger } from '@a3t/rapid-core';\n\nexport const updateCommand = new Command('update')\n .description('Check for and apply updates')\n .option('--check', 'Check for updates only')\n .option('--force', 'Force update even for major versions')\n .action(async (options) => {\n try {\n if (options.check) {\n // Check for updates only\n logger.header('Checking for updates...');\n\n if (!updateChecker.hasUpdate()) {\n logger.success('You are using the latest version!');\n return;\n }\n\n const updateInfo = updateChecker.getUpdateInfo();\n if (updateInfo) {\n updateChecker.showNotification();\n\n if (updateInfo.type === 'major') {\n logger.warn('This is a major version update with breaking changes.');\n logger.info('Use \"rapid update --force\" to update.');\n } else {\n logger.info('Use \"rapid update\" to apply the update.');\n }\n }\n return;\n }\n\n // Perform update\n if (!updateChecker.hasUpdate()) {\n logger.success('You are already using the latest version!');\n return;\n }\n\n const updateInfo = updateChecker.getUpdateInfo();\n if (updateInfo && updateInfo.type === 'major' && !options.force) {\n logger.warn('This is a major version update with breaking changes.');\n logger.info('Use --force to update anyway.');\n return;\n }\n\n await updateChecker.forceUpdate();\n } catch (error) {\n logger.error('Update failed:', error);\n process.exit(1);\n }\n });\n","/**\n * Auto-update functionality for RAPID CLI\n */\n\nimport updateNotifier from 'update-notifier';\nimport semver from 'semver';\nimport { execa } from 'execa';\nimport { logger } from '@a3t/rapid-core';\nimport chalk from 'chalk';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport prompts from 'prompts';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Try multiple paths to find package.json (handles both bundled dist and source tests)\nfunction loadPackageJson() {\n const paths = [\n join(__dirname, '../package.json'), // bundled: dist/ -> package root\n join(__dirname, '../../package.json'), // source: src/utils/ -> package root\n ];\n for (const p of paths) {\n if (existsSync(p)) {\n return JSON.parse(readFileSync(p, 'utf-8'));\n }\n }\n // Fallback with default values if package.json not found\n return { name: '@a3t/rapid', version: '0.0.0' };\n}\n\nconst packageJson = loadPackageJson();\n\ninterface UpdateInfo {\n current: string;\n latest: string;\n type: 'major' | 'minor' | 'patch' | 'prerelease' | 'build';\n}\n\nexport class UpdateChecker {\n private notifier: ReturnType<typeof updateNotifier>;\n private packageName = packageJson.name;\n\n constructor() {\n this.notifier = updateNotifier({\n pkg: packageJson,\n updateCheckInterval: 1000 * 60 * 60 * 24, // Check daily\n shouldNotifyInNpmScript: true,\n });\n }\n\n /**\n * Check if an update is available\n */\n hasUpdate(): boolean {\n return !!this.notifier.update;\n }\n\n /**\n * Get update information\n */\n getUpdateInfo(): UpdateInfo | null {\n if (!this.notifier.update) return null;\n\n return {\n current: this.notifier.update.current,\n latest: this.notifier.update.latest,\n type: this.getUpdateType(this.notifier.update.current, this.notifier.update.latest),\n };\n }\n\n /**\n * Determine the type of update (major, minor, patch)\n */\n private getUpdateType(current: string, latest: string): UpdateInfo['type'] {\n const diff = semver.diff(current, latest);\n if (diff === 'premajor' || diff === 'preminor' || diff === 'prepatch') {\n return 'prerelease';\n }\n return (diff as UpdateInfo['type']) || 'patch';\n }\n\n /**\n * Show update notification\n */\n showNotification(): void {\n if (!this.notifier.update) return;\n\n const { current, latest } = this.notifier.update;\n const updateType = this.getUpdateType(current, latest);\n\n logger.info(`Update available: ${logger.dim(current)} → ${chalk.green(latest)}`);\n\n if (updateType === 'major') {\n logger.warn('This is a major version update with breaking changes.');\n }\n }\n\n /**\n * Verify package signatures using npm audit signatures\n */\n async verifySignatures(): Promise<boolean> {\n try {\n logger.info('Verifying package signatures...');\n const result = await execa('npm', ['audit', 'signatures'], {\n reject: false,\n });\n\n if (result.exitCode === 0) {\n logger.success('Package signatures verified successfully');\n return true;\n } else {\n // npm audit signatures returns non-zero if there are issues\n logger.warn('Package signature verification returned warnings');\n logger.debug(result.stdout || result.stderr);\n // Don't fail on warnings, just log them\n return true;\n }\n } catch {\n // If npm audit signatures is not available (older npm), skip verification\n logger.debug('Signature verification not available (requires npm >= 9)');\n return true;\n }\n }\n\n /**\n * Perform the update with signature verification\n */\n async performUpdate(): Promise<boolean> {\n try {\n logger.info('Updating RAPID CLI...');\n\n // Install the package\n await execa('npm', ['install', '-g', `${this.packageName}@latest`], {\n stdio: 'inherit',\n });\n\n // Verify signatures (non-blocking)\n await this.verifySignatures();\n\n logger.success('RAPID CLI updated successfully!');\n logger.info('Package published with npm provenance - cryptographically verified');\n return true;\n } catch (error) {\n logger.error('Failed to update RAPID CLI:', error);\n return false;\n }\n }\n\n /**\n * Check for updates and handle them according to version type\n */\n async checkAndUpdate(): Promise<void> {\n if (!this.hasUpdate()) return;\n\n const updateInfo = this.getUpdateInfo();\n if (!updateInfo) return;\n\n this.showNotification();\n\n if (updateInfo.type === 'major') {\n // Ask user consent for major updates\n logger.warn(\n `This is a major version update (${updateInfo.current} → ${updateInfo.latest}) that may contain breaking changes.`\n );\n\n try {\n const response = await prompts({\n type: 'confirm',\n name: 'shouldUpdate',\n message: 'Would you like to update to this major version?',\n initial: false,\n });\n\n if (response.shouldUpdate) {\n logger.info(`Updating to ${updateInfo.latest} (major version)...`);\n await this.performUpdate();\n } else {\n logger.info('Skipping major version update.');\n logger.info('You can update later with \"rapid update --force\"');\n }\n } catch {\n // If prompt fails (non-interactive), show manual instructions\n logger.info(\n 'Run \"rapid update\" to update manually, or use \"rapid update --force\" to update automatically.'\n );\n }\n return;\n }\n\n // Auto-update for minor and patch versions\n logger.info(`Auto-updating to ${updateInfo.latest} (${updateInfo.type} version)...`);\n await this.performUpdate();\n }\n\n /**\n * Force update regardless of version type\n */\n async forceUpdate(): Promise<void> {\n if (!this.hasUpdate()) {\n logger.info('No updates available.');\n return;\n }\n\n const updateInfo = this.getUpdateInfo();\n if (updateInfo) {\n this.showNotification();\n }\n\n await this.performUpdate();\n }\n}\n\nexport const updateChecker = new UpdateChecker();\n","/**\n * rapid worktree - Manage git worktrees for isolated development\n *\n * Subcommands:\n * - list: Show all worktrees\n * - prune: Clean up stale worktrees\n * - remove: Remove a specific worktree\n * - cleanup: Remove worktrees for merged branches\n */\n\nimport { Command } from 'commander';\nimport { logger } from '@a3t/rapid-core';\nimport ora from 'ora';\nimport {\n isGitRepo,\n getGitRoot,\n listWorktrees,\n pruneWorktrees,\n removeWorktree,\n cleanupMergedWorktrees,\n type WorktreeInfo,\n} from '../utils/worktree.js';\n\n/**\n * Format a worktree for display\n */\nfunction formatWorktree(wt: WorktreeInfo, currentPath: string): string {\n const isCurrent = wt.path === currentPath;\n const marker = isCurrent ? logger.brand('*') : ' ';\n const status: string[] = [];\n\n if (wt.isMain) status.push('main');\n if (wt.locked) status.push('locked');\n if (wt.prunable) status.push('prunable');\n if (!wt.exists) status.push('missing');\n\n const statusStr = status.length > 0 ? logger.dim(` (${status.join(', ')})`) : '';\n const branchStr = wt.branch ? logger.brand(wt.branch) : logger.dim('detached');\n const headShort = wt.head?.substring(0, 7) ?? '';\n\n return `${marker} ${branchStr}${statusStr}\\n ${logger.dim(wt.path)}\\n ${logger.dim(`HEAD: ${headShort}`)}`;\n}\n\n/**\n * List subcommand - show all worktrees\n */\nconst listCommand = new Command('list')\n .alias('ls')\n .description('List all git worktrees')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const cwd = process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n logger.error('Not a git repository');\n process.exit(1);\n }\n\n const gitRoot = await getGitRoot(cwd);\n const worktrees = await listWorktrees(gitRoot);\n\n if (options.json) {\n console.log(JSON.stringify(worktrees, null, 2));\n return;\n }\n\n if (worktrees.length === 0) {\n logger.info('No worktrees found');\n return;\n }\n\n logger.header('Git Worktrees');\n console.log();\n\n for (const wt of worktrees) {\n console.log(formatWorktree(wt, gitRoot));\n console.log();\n }\n\n const prunable = worktrees.filter((wt) => wt.prunable);\n if (prunable.length > 0) {\n logger.warn(`${prunable.length} worktree(s) can be pruned. Run: rapid worktree prune`);\n }\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * Prune subcommand - remove stale worktrees\n */\nconst pruneCommand = new Command('prune')\n .description('Remove stale worktree references')\n .option('--dry-run', 'Show what would be pruned without removing')\n .action(async (options) => {\n const spinner = ora('Checking worktrees...').start();\n\n try {\n const cwd = process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n spinner.fail('Not a git repository');\n process.exit(1);\n }\n\n const gitRoot = await getGitRoot(cwd);\n const worktrees = await listWorktrees(gitRoot);\n const prunable = worktrees.filter((wt) => wt.prunable);\n\n if (prunable.length === 0) {\n spinner.succeed('No stale worktrees to prune');\n return;\n }\n\n if (options.dryRun) {\n spinner.info(`Would prune ${prunable.length} worktree(s):`);\n for (const wt of prunable) {\n console.log(` ${logger.dim('•')} ${wt.path}`);\n }\n return;\n }\n\n spinner.text = `Pruning ${prunable.length} worktree(s)...`;\n const result = await pruneWorktrees(gitRoot);\n\n if (result.success) {\n spinner.succeed(`Pruned ${result.pruned.length} worktree(s)`);\n for (const path of result.pruned) {\n console.log(` ${logger.dim('•')} ${path}`);\n }\n } else {\n spinner.fail(`Failed to prune: ${result.error}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * Remove subcommand - remove a specific worktree\n */\nconst removeCommand = new Command('remove')\n .alias('rm')\n .description('Remove a worktree')\n .argument('<path-or-branch>', 'Worktree path or branch name')\n .option('-f, --force', 'Force removal even if worktree is dirty')\n .action(async (pathOrBranch: string, options) => {\n const spinner = ora('Finding worktree...').start();\n\n try {\n const cwd = process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n spinner.fail('Not a git repository');\n process.exit(1);\n }\n\n const gitRoot = await getGitRoot(cwd);\n const worktrees = await listWorktrees(gitRoot);\n\n // Find worktree by path or branch name\n const worktree = worktrees.find(\n (wt) =>\n wt.path === pathOrBranch || wt.path.endsWith(pathOrBranch) || wt.branch === pathOrBranch\n );\n\n if (!worktree) {\n spinner.fail(`Worktree not found: ${pathOrBranch}`);\n logger.info('Available worktrees:');\n for (const wt of worktrees) {\n console.log(` ${wt.branch || wt.path}`);\n }\n process.exit(1);\n }\n\n if (worktree.isMain) {\n spinner.fail('Cannot remove the main worktree');\n process.exit(1);\n }\n\n if (worktree.locked && !options.force) {\n spinner.fail('Worktree is locked. Use --force to remove anyway.');\n process.exit(1);\n }\n\n spinner.text = `Removing worktree: ${worktree.path}...`;\n const result = await removeWorktree(gitRoot, worktree.path, { force: options.force });\n\n if (result.success) {\n spinner.succeed(`Removed worktree: ${worktree.path}`);\n } else {\n spinner.fail(`Failed to remove: ${result.error}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * Cleanup subcommand - remove worktrees for merged branches\n */\nconst cleanupCommand = new Command('cleanup')\n .description('Remove worktrees for branches that have been merged')\n .option('--dry-run', 'Show what would be removed without removing')\n .action(async (options) => {\n const spinner = ora('Analyzing worktrees...').start();\n\n try {\n const cwd = process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n spinner.fail('Not a git repository');\n process.exit(1);\n }\n\n const gitRoot = await getGitRoot(cwd);\n\n if (options.dryRun) {\n // Show what would be cleaned up\n const worktrees = await listWorktrees(gitRoot);\n\n spinner.info('Dry run - would remove worktrees for merged branches');\n\n const nonMain = worktrees.filter((wt) => !wt.isMain && wt.branch);\n if (nonMain.length === 0) {\n console.log(' No feature branch worktrees found');\n } else {\n console.log(' Feature branch worktrees:');\n for (const wt of nonMain) {\n console.log(` ${logger.dim('•')} ${wt.branch} - ${wt.path}`);\n }\n console.log();\n logger.info('Run without --dry-run to remove worktrees for merged branches');\n }\n return;\n }\n\n spinner.text = 'Removing worktrees for merged branches...';\n const result = await cleanupMergedWorktrees(gitRoot);\n\n if (result.removed.length === 0) {\n spinner.succeed('No worktrees to clean up');\n return;\n }\n\n spinner.succeed(`Cleaned up ${result.removed.length} worktree(s)`);\n for (const path of result.removed) {\n console.log(` ${logger.dim('•')} ${path}`);\n }\n\n if (result.errors.length > 0) {\n console.log();\n logger.warn('Some worktrees could not be removed:');\n for (const err of result.errors) {\n console.log(` ${logger.dim('•')} ${err}`);\n }\n }\n } catch (error) {\n spinner.fail(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n/**\n * Main worktree command\n */\nexport const worktreeCommand = new Command('worktree')\n .alias('wt')\n .description('Manage git worktrees for isolated development')\n .addCommand(listCommand)\n .addCommand(pruneCommand)\n .addCommand(removeCommand)\n .addCommand(cleanupCommand);\n\n// Default action when no subcommand provided\nworktreeCommand.action(async () => {\n // Default to list\n await listCommand.parseAsync([], { from: 'user' });\n});\n","/**\n * rapid lima - Manage Lima VM for local development (macOS)\n *\n * Subcommands:\n * - status: Show Lima VM status\n * - start: Start the Lima VM\n * - stop: Stop the Lima VM\n * - shell: Open a shell in the Lima VM\n * - delete: Delete the Lima VM\n */\n\nimport { Command } from 'commander';\nimport { logger } from '@a3t/rapid-core';\nimport ora from 'ora';\nimport {\n hasLima,\n isMacOS,\n getInstance,\n listInstances,\n startInstance,\n stopInstance,\n deleteInstance,\n shellInLima,\n setupGitSsh,\n RAPID_LIMA_INSTANCE,\n} from '../isolation/lima.js';\n\n/**\n * Check Lima availability and show error if not available\n */\nasync function checkLimaAvailable(): Promise<boolean> {\n if (!isMacOS()) {\n logger.error('Lima is only available on macOS');\n return false;\n }\n\n if (!(await hasLima())) {\n logger.error('Lima is not installed');\n logger.blank();\n logger.info('Install Lima with:');\n console.log(` ${logger.dim('$')} brew install lima`);\n logger.blank();\n logger.info('For more information: https://lima-vm.io');\n return false;\n }\n\n return true;\n}\n\n/**\n * Status subcommand - show Lima VM status\n */\nconst statusCommand = new Command('status')\n .description('Show Lima VM status')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const instance = await getInstance();\n\n if (options.json) {\n console.log(JSON.stringify(instance, null, 2));\n return;\n }\n\n if (!instance) {\n logger.info(`Lima VM (${RAPID_LIMA_INSTANCE}) is not created`);\n logger.blank();\n logger.info('Start the VM with:');\n console.log(` ${logger.dim('$')} rapid lima start`);\n logger.blank();\n logger.info('Or use:');\n console.log(` ${logger.dim('$')} rapid dev --local`);\n return;\n }\n\n logger.header('Lima VM Status');\n console.log();\n console.log(` ${logger.dim('Name:')} ${instance.name}`);\n console.log(\n ` ${logger.dim('Status:')} ${instance.status === 'Running' ? logger.brand(instance.status) : instance.status}`\n );\n console.log(` ${logger.dim('Arch:')} ${instance.arch}`);\n console.log(` ${logger.dim('CPUs:')} ${instance.cpus}`);\n console.log(` ${logger.dim('Memory:')} ${instance.memory}`);\n console.log(` ${logger.dim('Disk:')} ${instance.disk}`);\n if (instance.sshLocalPort) {\n console.log(` ${logger.dim('SSH Port:')} ${instance.sshLocalPort}`);\n }\n console.log();\n\n if (instance.status === 'Running') {\n logger.info('To open a shell:');\n console.log(` ${logger.dim('$')} rapid lima shell`);\n } else {\n logger.info('To start the VM:');\n console.log(` ${logger.dim('$')} rapid lima start`);\n }\n console.log();\n });\n\n/**\n * Start subcommand - start the Lima VM\n */\nconst startCommand = new Command('start')\n .description('Start the Lima VM')\n .option('--cpus <n>', 'Number of CPUs', '4')\n .option('--memory <size>', 'Memory size', '8GiB')\n .option('--disk <size>', 'Disk size', '50GiB')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const spinner = ora('Starting Lima VM...').start();\n\n const projectDir = process.cwd();\n const result = await startInstance(projectDir, {\n cpus: parseInt(options.cpus, 10),\n memory: options.memory,\n disk: options.disk,\n timeout: 600,\n });\n\n if (!result.success) {\n spinner.fail('Failed to start Lima VM');\n logger.error(result.error ?? 'Unknown error');\n process.exit(1);\n }\n\n spinner.succeed('Lima VM started');\n\n // Check SSH agent forwarding\n logger.blank();\n const sshSpinner = ora('Checking SSH agent forwarding...').start();\n const sshResult = await setupGitSsh();\n if (sshResult.success) {\n sshSpinner.succeed('SSH agent forwarding is working');\n } else {\n sshSpinner.warn('SSH agent forwarding may not be working');\n logger.dim(sshResult.error ?? 'Make sure ssh-agent is running on the host');\n }\n\n logger.blank();\n logger.info('To open a shell:');\n console.log(` ${logger.dim('$')} rapid lima shell`);\n console.log();\n });\n\n/**\n * Stop subcommand - stop the Lima VM\n */\nconst stopCommand = new Command('stop')\n .description('Stop the Lima VM')\n .option('-f, --force', 'Force stop')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const instance = await getInstance();\n if (!instance) {\n logger.info('Lima VM is not created');\n return;\n }\n\n if (instance.status !== 'Running') {\n logger.info('Lima VM is already stopped');\n return;\n }\n\n const spinner = ora('Stopping Lima VM...').start();\n\n const result = await stopInstance(RAPID_LIMA_INSTANCE, {\n force: options.force,\n });\n\n if (!result.success) {\n spinner.fail('Failed to stop Lima VM');\n logger.error(result.error ?? 'Unknown error');\n process.exit(1);\n }\n\n spinner.succeed('Lima VM stopped');\n });\n\n/**\n * Shell subcommand - open a shell in the Lima VM\n */\nconst shellCommand = new Command('shell')\n .description('Open a shell in the Lima VM')\n .option('-c, --command <cmd>', 'Command to run instead of interactive shell')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const instance = await getInstance();\n if (!instance || instance.status !== 'Running') {\n logger.error('Lima VM is not running');\n logger.info('Start with: rapid lima start');\n process.exit(1);\n }\n\n await shellInLima({\n cwd: process.cwd(),\n command: options.command,\n });\n });\n\n/**\n * Delete subcommand - delete the Lima VM\n */\nconst deleteCommand = new Command('delete')\n .description('Delete the Lima VM')\n .option('-f, --force', 'Force delete without confirmation')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const instance = await getInstance();\n if (!instance) {\n logger.info('Lima VM does not exist');\n return;\n }\n\n if (!options.force) {\n logger.warn('This will permanently delete the Lima VM and all its data.');\n logger.info(`Use ${logger.brand('--force')} to confirm deletion.`);\n return;\n }\n\n const spinner = ora('Deleting Lima VM...').start();\n\n const result = await deleteInstance(RAPID_LIMA_INSTANCE, { force: true });\n\n if (!result.success) {\n spinner.fail('Failed to delete Lima VM');\n logger.error(result.error ?? 'Unknown error');\n process.exit(1);\n }\n\n spinner.succeed('Lima VM deleted');\n });\n\n/**\n * List subcommand - list all Lima instances\n */\nconst listCommand = new Command('list')\n .alias('ls')\n .description('List all Lima instances')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n if (!(await checkLimaAvailable())) {\n process.exit(1);\n }\n\n const instances = await listInstances();\n\n if (options.json) {\n console.log(JSON.stringify(instances, null, 2));\n return;\n }\n\n if (instances.length === 0) {\n logger.info('No Lima instances found');\n return;\n }\n\n logger.header('Lima Instances');\n console.log();\n\n for (const inst of instances) {\n const isRapid = inst.name === RAPID_LIMA_INSTANCE;\n const statusColor = inst.status === 'Running' ? logger.brand : logger.dim;\n console.log(\n ` ${isRapid ? logger.brand('*') : ' '} ${inst.name} ${statusColor(`(${inst.status})`)}`\n );\n console.log(` ${logger.dim(`${inst.cpus} CPUs, ${inst.memory}, ${inst.disk}`)}`);\n }\n console.log();\n });\n\n/**\n * Main lima command\n */\nexport const limaCommand = new Command('lima')\n .description('Manage Lima VM for local development (macOS)')\n .addCommand(statusCommand)\n .addCommand(startCommand)\n .addCommand(stopCommand)\n .addCommand(shellCommand)\n .addCommand(deleteCommand)\n .addCommand(listCommand);\n\n// Default action when no subcommand provided\nlimaCommand.action(async () => {\n // Default to status\n await statusCommand.parseAsync([], { from: 'user' });\n});\n"],"mappings":"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","names":["Command","logger","readFileSync","fileURLToPath","dirname","join","result","Command","writeFile","join","logger","ora","access","join","execa","readFile","writeFile","mkdir","join","dirname","getErrorMessage","__dirname","Command","ora","logger","join","writeFile","execa","Command","loadConfig","logger","getContainerStatus","hasDevcontainerCli","hasOpCli","hasVaultCli","isOpAuthenticated","isVaultAuthenticated","ora","Command","loadConfig","checkAllAgents","logger","Command","loadConfig","logger","hasDevcontainerCli","hasDocker","loadDevcontainerConfig","getContainerStatus","startContainer","ora","Command","loadConfig","logger","getContainerStatus","ora","Command","loadConfig","logger","verifySecrets","loadSecrets","hasOpCli","hasVaultCli","isOpAuthenticated","isVaultAuthenticated","hasEnvrc","getProviderInfo","ora","execa","Command","logger","getAuthStatus","ora","Command","writeFile","join","loadConfig","logger","addMcpServerFromTemplate","writeMcpConfig","writeOpenCodeConfig","MCP_SERVER_TEMPLATES","ora","Command","execa","logger","existsSync","fileURLToPath","dirname","join","logger","Command","updateInfo","Command","logger","ora","logger","Command","ora","Command","logger","ora","logger","statusCommand","Command","startCommand","ora","stopCommand","listCommand","__dirname","dirname","fileURLToPath","packageJson","readFileSync","join","Command","logger"]}
|