opencode-sdlc-plugin 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/constants.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/prerequisites.ts","../../src/shared/schemas.ts","../../src/cli/utils/validators.ts","../../src/cli/commands/doctor.ts","../../src/cli/commands/info.ts","../../src/plugin/utils/model-params.ts","../../src/cli/generators/omo-config.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/questions/features.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/generators/config-generator.ts","../../src/shared/github-client.ts","../../src/cli/utils/git-remote.ts","../../src/cli/questions/github-smart.ts","../../src/cli/utils/config-loader.ts","../../src/cli/utils/config-merger.ts","../../src/cli/utils/migrations/migrations.ts","../../src/cli/utils/migrations/runner.ts","../../src/cli/utils/preset-loader.ts","../../src/cli/commands/install.ts","../../src/cli/utils/auth-detector.ts","../../src/cli/commands/providers.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/upgrade.ts","../../src/cli/index.ts"],"names":["dirname","fileURLToPath","join","existsSync","readFileSync","chalk","execAsync","promisify","exec","info","ora","execSync","result","mkdirSync","copyFileSync","confirm","select","homedir","providers","semver"],"mappings":"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","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Get version from package.json at runtime.\n * Handles both bundled (dist/) and development (src/) scenarios.\n */\nfunction getPackageVersion(): string {\n try {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n\n const possiblePaths = [\n join(currentDir, \"..\", \"..\", \"package.json\"),\n join(currentDir, \"..\", \"..\", \"..\", \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n if (!existsSync(pkgPath)) continue;\n\n const content = readFileSync(pkgPath, \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.version) return pkg.version;\n }\n\n return \"0.0.0\";\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.error(\"[opencode-sdlc] Warning: package.json contains invalid JSON\");\n }\n return \"0.0.0\";\n }\n}\n\n/**\n * Current version of OpenCode SDLC Plugin\n * Dynamically read from package.json\n */\nexport const VERSION = getPackageVersion();\n\n/**\n * Package name for CLI display\n */\nexport const PACKAGE_NAME = \"opencode-sdlc-plugin\";\n\n/**\n * CLI display name\n */\nexport const DISPLAY_NAME = \"OpenCode SDLC\";\n\n/**\n * Tagline for CLI header\n */\nexport const TAGLINE = \"Strict TDD with domain modeling and event sourcing\";\n\n/**\n * Configuration paths\n */\nexport const CONFIG_PATHS = {\n /** Global OpenCode config directory */\n globalConfigDir: join(homedir(), \".config\", \"opencode\"),\n\n /** Global SDLC config file */\n globalSdlcConfig: join(homedir(), \".config\", \"opencode\", \"sdlc.json\"),\n\n /** Global OpenCode config file */\n globalOpencodeConfig: join(homedir(), \".config\", \"opencode\", \"opencode.json\"),\n\n /** Global oh-my-opencode config file */\n globalOmoConfig: join(homedir(), \".config\", \"opencode\", \"oh-my-opencode.json\"),\n\n /** Commands directory */\n commandsDir: join(homedir(), \".config\", \"opencode\", \"command\"),\n\n /** Plugin directory */\n pluginDir: join(homedir(), \".config\", \"opencode\", \"plugin\"),\n\n /** SDLC internal files directory (state, backups) */\n sdlcDir: join(homedir(), \".config\", \"opencode\", \"sdlc\"),\n\n /** SDLC backups directory */\n backupsDir: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"backups\"),\n\n /** SDLC state file (for issue tracking) */\n stateFile: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"sdlc-state.json\"),\n\n /** Legacy state file path (for migration) */\n legacyStateFile: join(homedir(), \".config\", \"opencode\", \"sdlc-state.json\"),\n} as const;\n\n/**\n * Project-specific paths (relative to project root)\n */\nexport const PROJECT_PATHS = {\n /** Local SDLC config */\n localConfig: \".opencode/sdlc.json\",\n} as const;\n\n/**\n * Default configuration values (v1.0.0+)\n */\nexport const DEFAULTS = {\n // ============================================================================\n // New v1.0.0 defaults\n // ============================================================================\n\n /** Default modes configuration (v1.0.0+) */\n modes: {\n default: \"build\" as const,\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"] as const,\n },\n\n /** Default memory configuration (v1.0.0+) */\n memory: {\n backend: \"stateless\" as const,\n checkpointTtl: 86400,\n },\n\n /** Default subagent model configuration (v1.0.0+)\n * All subagents default to \"inherit\" which uses the marvin model.\n * Only specify overrides for subagents that need different models.\n */\n subagents: {\n // TDD agents - use same model as marvin by default\n red: \"inherit\" as const,\n green: \"inherit\" as const,\n domain: \"inherit\" as const,\n refactor: \"inherit\" as const,\n // Event modeling agents\n discovery: \"inherit\" as const,\n workflow: \"inherit\" as const,\n gwt: \"inherit\" as const,\n \"model-checker\": \"inherit\" as const,\n // Architecture agents\n architect: \"inherit\" as const,\n adr: \"inherit\" as const,\n \"design-facilitator\": \"inherit\" as const,\n // Planning agents\n story: \"inherit\" as const,\n pm: \"inherit\" as const,\n analyst: \"inherit\" as const,\n // Review agents (read-only, can use faster models)\n reviewer: \"inherit\" as const,\n ux: \"inherit\" as const,\n mutation: \"inherit\" as const,\n },\n\n // ============================================================================\n // Existing v0.3.0+ defaults (with v1.0 extensions)\n // ============================================================================\n\n /** Default TDD configuration */\n tdd: {\n enabled: true,\n verbosity: \"brief\" as const,\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n // v1.0.0 additions\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n },\n\n /** Default Event Modeling configuration */\n eventModeling: {\n enabled: false,\n outputPath: \"docs/event-model\",\n },\n\n /** Default Git configuration */\n git: {\n workflow: \"standard\" as const,\n requireClean: true,\n worktrees: false,\n },\n\n /** Default features enabled (v0.3.0+) */\n features: {\n orchestratorOnly: false,\n todoSync: true,\n partyReview: true,\n debuggingProtocol: true,\n memento: false,\n notifications: true,\n lspTools: true,\n },\n\n /** Default MCPs enabled (v0.3.0+) */\n mcps: {\n context7: true,\n exa: true,\n grepApp: true,\n memento: false,\n },\n\n /** Default routing configuration (v1.0.0+) */\n routing: {\n classifierModel: \"anthropic/claude-haiku\",\n },\n} as const;\n\n/**\n * Minimum compatible versions\n */\nexport const MIN_VERSIONS = {\n node: \"20.0.0\",\n opencode: \"1.0.132\",\n} as const;\n","/**\n * File Manager\n *\n * Handles file read/write operations for the CLI installer.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { copyFile, mkdir, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Get the package root directory (where prompts/ and config/ live)\n * Handles both bundled and unbundled scenarios.\n */\nfunction getPackageRoot(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n if (existsSync(join(bundledRoot, \"prompts\"))) {\n return bundledRoot;\n }\n\n // Unbundled development: src/cli/utils/file-manager.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n if (existsSync(join(devRoot, \"prompts\"))) {\n return devRoot;\n }\n\n // Fallback to bundled root even if prompts dir doesn't exist\n return bundledRoot;\n}\n\nexport class FileManager {\n private configDir: string;\n\n constructor(configDir?: string) {\n this.configDir = configDir || CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Ensure a directory exists\n */\n async ensureDir(dir: string): Promise<void> {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n }\n\n /**\n * Write multiple files atomically\n */\n async writeFiles(files: GeneratedFile[]): Promise<void> {\n for (const file of files) {\n const dir = dirname(file.path);\n await this.ensureDir(dir);\n await writeFile(file.path, file.content, \"utf-8\");\n }\n }\n\n /**\n * Read a JSON configuration file\n */\n readJsonFile<T = Record<string, unknown>>(path: string): T | null {\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Write a JSON configuration file\n */\n async writeJsonFile(path: string, data: unknown): Promise<void> {\n const dir = dirname(path);\n await this.ensureDir(dir);\n await writeFile(path, JSON.stringify(data, null, 2), \"utf-8\");\n }\n\n /**\n * Check if a file exists\n */\n exists(path: string): boolean {\n return existsSync(path);\n }\n\n /**\n * Install npm dependencies in the config directory\n */\n async installDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n // Ensure config directory exists\n await this.ensureDir(this.configDir);\n\n // Check if package.json exists, create if not\n const packageJsonPath = join(this.configDir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(\n {\n name: \"opencode-config\",\n private: true,\n type: \"module\",\n },\n null,\n 2\n )\n );\n }\n\n // Install packages\n const packageList = packages.join(\" \");\n await execAsync(`npm install ${packageList}`, {\n cwd: this.configDir,\n timeout: 120000,\n });\n }\n\n /**\n * Uninstall npm dependencies from the config directory\n */\n async uninstallDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n const packageList = packages.join(\" \");\n try {\n await execAsync(`npm uninstall ${packageList}`, {\n cwd: this.configDir,\n timeout: 60000,\n });\n } catch {\n // Ignore errors if packages aren't installed\n }\n }\n\n /**\n * Copy bridge commands from package to config directory\n *\n * @deprecated Bridge commands have been removed in v1.0.\n * This method now returns an empty array for backwards compatibility.\n * Use mode-based workflow instead.\n */\n async copyCommands(): Promise<string[]> {\n // Bridge commands removed in v1.0 - modes replace commands entirely\n return [];\n }\n\n /**\n * Copy Marvin mode agent files to project .opencode/agent directory\n *\n * @param projectDir - The project directory to copy to\n * @param enabledModes - Array of enabled modes to copy\n * @returns Array of copied file names\n */\n async copyAgentModes(projectDir: string, enabledModes: string[]): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n await this.ensureDir(agentDir);\n\n const packageRoot = getPackageRoot();\n const sourceModesDir = join(packageRoot, \"prompts\", \"modes\");\n\n const copiedFiles: string[] = [];\n\n // Map of mode names to their file names\n const modeFileMap: Record<string, string> = {\n build: \"build.md\",\n discover: \"plan.md\", // Discover mode overrides Plan agent\n model: \"model.md\",\n prd: \"prd.md\",\n architect: \"architect.md\",\n pm: \"pm.md\",\n };\n\n if (existsSync(sourceModesDir)) {\n for (const mode of enabledModes) {\n const sourceFile = modeFileMap[mode];\n if (!sourceFile) continue;\n\n const sourcePath = join(sourceModesDir, sourceFile);\n if (existsSync(sourcePath)) {\n const destPath = join(agentDir, sourceFile);\n await copyFile(sourcePath, destPath);\n copiedFiles.push(sourceFile);\n }\n }\n }\n\n return copiedFiles;\n }\n\n /**\n * Remove agent mode files from project .opencode/agent directory\n *\n * @param projectDir - The project directory to remove from\n * @returns Array of removed file names\n */\n async removeAgentModes(projectDir: string): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n const removedFiles: string[] = [];\n\n if (!existsSync(agentDir)) {\n return removedFiles;\n }\n\n const modeFiles = [\"build.md\", \"plan.md\", \"model.md\", \"prd.md\", \"architect.md\", \"pm.md\"];\n\n const files = await readdir(agentDir);\n for (const file of files) {\n if (modeFiles.includes(file)) {\n const filePath = join(agentDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove bridge commands from config directory\n */\n async removeCommands(): Promise<string[]> {\n const commandsDir = CONFIG_PATHS.commandsDir;\n const removedFiles: string[] = [];\n\n if (!existsSync(commandsDir)) {\n return removedFiles;\n }\n\n const files = await readdir(commandsDir);\n for (const file of files) {\n if (file.startsWith(\"sdlc-\") && file.endsWith(\".md\")) {\n const filePath = join(commandsDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc configuration files\n */\n async removeConfigFiles(): Promise<string[]> {\n const removedFiles: string[] = [];\n\n const filesToRemove = [CONFIG_PATHS.globalSdlcConfig, CONFIG_PATHS.legacyStateFile];\n\n for (const file of filesToRemove) {\n if (existsSync(file)) {\n await rm(file);\n removedFiles.push(file);\n }\n }\n\n if (existsSync(CONFIG_PATHS.sdlcDir)) {\n await rm(CONFIG_PATHS.sdlcDir, { recursive: true });\n removedFiles.push(CONFIG_PATHS.sdlcDir);\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc from opencode.json plugin list\n */\n async removeFromOpencodeConfig(): Promise<boolean> {\n const opencodeConfig = this.readJsonFile<{\n plugin?: string[];\n [key: string]: unknown;\n }>(CONFIG_PATHS.globalOpencodeConfig);\n\n if (!opencodeConfig || !opencodeConfig.plugin) {\n return false;\n }\n\n const sdlcPlugins = [\n \"opencode-sdlc-plugin\",\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const originalLength = opencodeConfig.plugin.length;\n opencodeConfig.plugin = opencodeConfig.plugin.filter(\n (p) => !sdlcPlugins.some((ap) => p.includes(ap))\n );\n\n if (opencodeConfig.plugin.length !== originalLength) {\n await this.writeJsonFile(CONFIG_PATHS.globalOpencodeConfig, opencodeConfig);\n return true;\n }\n\n return false;\n }\n\n /**\n * Backup a file before modifying\n */\n async backupFile(path: string): Promise<string | null> {\n if (!existsSync(path)) {\n return null;\n }\n\n const backupPath = `${path}.backup`;\n await copyFile(path, backupPath);\n return backupPath;\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(backupPath: string): Promise<void> {\n const originalPath = backupPath.replace(/\\.backup$/, \"\");\n if (existsSync(backupPath)) {\n await copyFile(backupPath, originalPath);\n await rm(backupPath);\n }\n }\n}\n","/**\n * Logger utility for CLI output\n *\n * Provides colored, consistent logging for the CLI.\n */\n\nimport chalk from \"chalk\";\n\nexport const logger = {\n /**\n * Log an informational message\n */\n info: (message: string): void => {\n console.log(chalk.blue(\"i\"), message);\n },\n\n /**\n * Log a success message\n */\n success: (message: string): void => {\n console.log(chalk.green(\"✓\"), message);\n },\n\n /**\n * Log a warning message\n */\n warn: (message: string): void => {\n console.log(chalk.yellow(\"!\"), message);\n },\n\n /**\n * Log an error message\n */\n error: (message: string): void => {\n console.log(chalk.red(\"✖\"), message);\n },\n\n /**\n * Log a debug message (only when DEBUG env var is set)\n */\n debug: (message: string): void => {\n if (process.env.DEBUG) {\n console.log(chalk.gray(\"[debug]\"), message);\n }\n },\n\n /**\n * Log a step in a process\n */\n step: (step: number, total: number, message: string): void => {\n console.log(chalk.cyan(`[${step}/${total}]`), message);\n },\n\n /**\n * Log a blank line\n */\n blank: (): void => {\n console.log();\n },\n\n /**\n * Log a section header\n */\n section: (title: string): void => {\n console.log();\n console.log(chalk.bold(title));\n console.log();\n },\n\n /**\n * Log a key-value pair\n */\n keyValue: (key: string, value: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(`${key}:`)} ${value}`);\n },\n\n /**\n * Log a list item\n */\n listItem: (item: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(\"-\")} ${item}`);\n },\n\n /**\n * Display the Sdlc banner\n */\n banner: (): void => {\n console.log(\n chalk.cyan(`\n╔═══════════════════════════════════════════════════════════════╗\n║ OPENCODE ATHENA ║\n║ Strategic Wisdom Meets Practical Execution ║\n╠═══════════════════════════════════════════════════════════════╣\n║ Unifying oh-my-opencode + BMAD METHOD for OpenCode ║\n╚═══════════════════════════════════════════════════════════════╝\n`)\n );\n },\n\n /**\n * Display a success banner\n */\n successBanner: (message: string): void => {\n const line = \"═\".repeat(message.length + 4);\n console.log(\n chalk.green(`\n╔${line}╗\n║ ${message} ║\n╚${line}╝\n`)\n );\n },\n};\n","/**\n * Prerequisites checker\n *\n * Validates that required dependencies and versions are available.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS, MIN_VERSIONS } from \"../../shared/constants.js\";\nimport type { Prerequisites } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Parse a semantic version string into components\n */\nfunction parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return {\n major: Number.parseInt(match[1], 10),\n minor: Number.parseInt(match[2], 10),\n patch: Number.parseInt(match[3], 10),\n };\n}\n\n/**\n * Compare two semantic versions\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\nfunction compareVersions(a: string, b: string): number {\n const parsedA = parseVersion(a);\n const parsedB = parseVersion(b);\n\n if (!parsedA || !parsedB) return 0;\n\n if (parsedA.major !== parsedB.major) {\n return parsedA.major < parsedB.major ? -1 : 1;\n }\n if (parsedA.minor !== parsedB.minor) {\n return parsedA.minor < parsedB.minor ? -1 : 1;\n }\n if (parsedA.patch !== parsedB.patch) {\n return parsedA.patch < parsedB.patch ? -1 : 1;\n }\n return 0;\n}\n\n/**\n * Check Node.js version\n */\nasync function checkNode(): Promise<Prerequisites[\"node\"]> {\n try {\n const { stdout } = await execAsync(\"node --version\");\n const version = stdout.trim().replace(/^v/, \"\");\n const compatible = compareVersions(version, MIN_VERSIONS.node) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check OpenCode installation and version\n */\nasync function checkOpenCode(): Promise<Prerequisites[\"opencode\"]> {\n try {\n const { stdout } = await execAsync(\"opencode --version\");\n const version = stdout.trim();\n const compatible = compareVersions(version, MIN_VERSIONS.opencode) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check existing Sdlc installation\n */\nasync function checkSdlcInstalled(): Promise<Prerequisites[\"sdlc\"]> {\n if (!existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n return { installed: false };\n }\n\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n const config = JSON.parse(content);\n return {\n installed: true,\n version: config.version,\n };\n } catch {\n return { installed: true };\n }\n}\n\n/**\n * Check all prerequisites\n */\nexport async function checkPrerequisites(): Promise<Prerequisites> {\n const [node, opencode, sdlc] = await Promise.all([\n checkNode(),\n checkOpenCode(),\n checkSdlcInstalled(),\n ]);\n\n return { node, opencode, sdlc };\n}\n\n/**\n * Check if oh-my-opencode is installed\n */\nexport async function checkOhMyOpenCode(): Promise<{ installed: boolean; version?: string }> {\n try {\n const { stdout } = await execAsync(\"npm list oh-my-opencode --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const version = data.dependencies?.[\"oh-my-opencode\"]?.version;\n return { installed: !!version, version };\n } catch {\n return { installed: false };\n }\n}\n\n/**\n * Get installed plugin versions from OpenCode config directory\n */\nexport async function getInstalledPlugins(): Promise<Record<string, string>> {\n try {\n const { stdout } = await execAsync(\"npm list --depth=0 --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const deps = data.dependencies || {};\n const result: Record<string, string> = {};\n for (const [name, info] of Object.entries(deps)) {\n result[name] = (info as { version?: string }).version || \"unknown\";\n }\n return result;\n } catch {\n return {};\n }\n}\n\n/**\n * Check if a specific npm package is outdated\n */\nexport async function checkPackageUpdate(\n packageName: string\n): Promise<{ current?: string; latest?: string; updateAvailable: boolean }> {\n try {\n const { stdout } = await execAsync(`npm outdated ${packageName} --json`, {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const info = data[packageName];\n if (info) {\n return {\n current: info.current,\n latest: info.latest,\n updateAvailable: info.current !== info.latest,\n };\n }\n return { updateAvailable: false };\n } catch {\n // npm outdated returns exit code 1 if packages are outdated\n // Try to parse the output anyway\n return { updateAvailable: false };\n }\n}\n\n/**\n * Validate that a config file is valid JSON\n */\nexport function validateJsonFile(path: string): { valid: boolean; error?: string } {\n if (!existsSync(path)) {\n return { valid: false, error: \"File does not exist\" };\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n return { valid: true };\n } catch (err) {\n return {\n valid: false,\n error: err instanceof Error ? err.message : \"Invalid JSON\",\n };\n }\n}\n","import { z } from \"zod\";\n\n/**\n * Zod validation schemas for OpenCode SDLC\n */\n\n// ============================================================================\n// Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for provider auth method\n */\nexport const ProviderAuthMethodSchema = z.enum([\"subscription\", \"api\", \"none\"]);\n\n/**\n * Schema for subscription configuration\n */\nexport const SubscriptionSchema = z.object({\n claude: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n tier: z.enum([\"max5x\", \"max20x\", \"pro\", \"none\"]),\n }),\n openai: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n }),\n google: z.object({\n enabled: z.boolean(),\n authMethod: z.enum([\"antigravity\", \"personal\", \"api\", \"none\"]),\n }),\n githubCopilot: z.object({\n enabled: z.boolean(),\n plan: z.enum([\"free\", \"pro\", \"pro-plus\", \"business\", \"enterprise\", \"none\"]),\n enabledModels: z.array(z.string()).optional(),\n }),\n});\n\n// ============================================================================\n// Mode Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for SDLC operation modes\n */\nexport const SdlcModeSchema = z.enum([\"discover\", \"model\", \"architect\", \"pm\", \"build\"]);\n\n/**\n * Schema for modes configuration (v1.0.0+)\n */\nexport const ModesConfigSchema = z.object({\n default: SdlcModeSchema.default(\"build\").describe(\"Default mode on startup\"),\n eventModeling: z.boolean().default(true).describe(\"true=Model mode, false=PRD mode\"),\n enabled: z\n .array(SdlcModeSchema)\n .default([\"discover\", \"model\", \"architect\", \"pm\", \"build\"])\n .describe(\"Array of enabled modes\"),\n});\n\n// ============================================================================\n// Memory Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for memory backend types\n */\nexport const MemoryBackendSchema = z.enum([\"memento\", \"stateless\"]);\n\n/**\n * Schema for memory configuration (v1.0.0+)\n */\nexport const MemoryConfigSchema = z.object({\n backend: MemoryBackendSchema.default(\"stateless\").describe(\"Memory backend type\"),\n checkpointTtl: z\n .number()\n .int()\n .positive()\n .default(86400)\n .describe(\"How long to keep checkpoints in seconds\"),\n});\n\n// ============================================================================\n// GitHub Issues Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for GitHub project board statuses\n */\nexport const GitHubStatusSchema = z.enum([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"]);\n\n/**\n * Schema for GitHub Issues integration configuration\n */\nexport const GitHubConfigSchema = z.object({\n owner: z.string().describe(\"GitHub repository owner (user or org)\"),\n repo: z.string().describe(\"GitHub repository name\"),\n project: z.number().optional().describe(\"GitHub Project number for board tracking\"),\n statuses: z\n .array(GitHubStatusSchema)\n .default([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"])\n .describe(\"Project board column names\"),\n});\n\n// ============================================================================\n// TDD Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for TDD verbosity levels\n */\nexport const TddVerbositySchema = z.enum([\"silent\", \"brief\", \"explain\"]);\n\n/**\n * Schema for mutation testing configuration\n */\nexport const MutationTestingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable mutation testing\"),\n requiredScore: z\n .number()\n .min(0)\n .max(100)\n .default(80)\n .describe(\"Minimum mutation score required (0-100)\"),\n});\n\n/**\n * Schema for TDD cycle enforcement configuration\n */\nexport const TddConfigSchema = z.object({\n enabled: z.boolean().default(true).describe(\"Enable TDD cycle enforcement\"),\n verbosity: TddVerbositySchema.default(\"brief\").describe(\"TDD feedback verbosity\"),\n bypassPatterns: z\n .array(z.string())\n .default([\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"])\n .describe(\"File patterns that bypass TDD checks\"),\n mutationTesting: MutationTestingConfigSchema.default({\n enabled: false,\n requiredScore: 80,\n }),\n // New v1.0.0 fields\n domainVetoEnabled: z\n .boolean()\n .default(true)\n .describe(\"Enable domain agent veto power over type changes\"),\n debateRounds: z\n .number()\n .int()\n .min(1)\n .max(5)\n .default(2)\n .describe(\"Max debate rounds before escalation to user\"),\n requireVerification: z\n .boolean()\n .default(true)\n .describe(\"Require test output evidence before phase transitions\"),\n});\n\n// ============================================================================\n// Event Modeling Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Event Modeling integration configuration\n */\nexport const EventModelingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable Event Modeling workflow\"),\n outputPath: z.string().default(\"docs/event-model\").describe(\"Path to event model output files\"),\n});\n\n// ============================================================================\n// Git Workflow Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Git workflow types\n */\nexport const GitWorkflowSchema = z.enum([\"standard\", \"git-spice\"]);\n\n/**\n * Schema for Git integration configuration\n */\nexport const GitConfigSchema = z.object({\n workflow: GitWorkflowSchema.default(\"standard\").describe(\"Git workflow style\"),\n requireClean: z\n .boolean()\n .default(true)\n .describe(\"Require clean working directory before operations\"),\n worktrees: z.boolean().default(false).describe(\"Enable git worktrees for parallel work\"),\n});\n\n// ============================================================================\n// Feature Flags Schemas\n// ============================================================================\n\n/**\n * Schema for SDLC feature flags (v0.3.0+)\n */\nexport const FeaturesSchema = z.object({\n orchestratorOnly: z\n .boolean()\n .default(false)\n .describe(\"Main conversation delegates all file writes to agents\"),\n todoSync: z.boolean().default(true).describe(\"Auto-sync todos with GitHub issue checkboxes\"),\n partyReview: z.boolean().default(true).describe(\"Enable party review for architecture decisions\"),\n debuggingProtocol: z.boolean().default(true).describe(\"Enable debugging protocol with Oracle\"),\n memento: z.boolean().default(false).describe(\"Enable Memento MCP for persistent memory\"),\n notifications: z.boolean().default(true).describe(\"Show in-TUI notifications\"),\n lspTools: z.boolean().default(true).describe(\"Enable LSP tools for code intelligence\"),\n});\n\n/**\n * Schema for MCP configuration (v0.3.0+)\n */\nexport const McpsSchema = z.object({\n context7: z.boolean().default(true).describe(\"Context7 for library documentation\"),\n exa: z.boolean().default(true).describe(\"Exa for web search\"),\n grepApp: z.boolean().default(true).describe(\"grep.app for code search\"),\n memento: z.boolean().default(false).describe(\"Memento for persistent memory\"),\n});\n\n// ============================================================================\n// Legacy BMAD Configuration Schema (Deprecated)\n// ============================================================================\n\n/**\n * @deprecated Use GitHubConfigSchema instead. BMAD configuration is no longer supported in v0.3.0+.\n */\nexport const LegacyBmadConfigSchema = z.object({\n defaultTrack: z.enum([\"quick-flow\", \"enterprise\"]),\n autoStatusUpdate: z.boolean(),\n parallelIssueLimit: z.number().int().min(0).max(10),\n paths: z\n .object({\n prd: z.string().nullable().optional(),\n architecture: z.string().nullable().optional(),\n })\n .optional(),\n});\n\n/**\n * @deprecated Use FeaturesSchema instead. Legacy feature flags from pre-0.3.0.\n */\nexport const LegacyFeaturesSchema = z.object({\n bmadBridge: z.boolean(),\n autoStatus: z.boolean(),\n parallelExecution: z.boolean(),\n notifications: z.boolean(),\n contextMonitor: z.boolean(),\n commentChecker: z.boolean(),\n lspTools: z.boolean(),\n autoGitOperations: z.boolean().default(false),\n todoSync: z.boolean().default(true),\n});\n\n/**\n * @deprecated Use McpsSchema instead. Legacy MCP config from pre-0.3.0.\n */\nexport const LegacyMcpsSchema = z.object({\n context7: z.boolean(),\n exa: z.boolean(),\n grepApp: z.boolean(),\n});\n\n/**\n * Schema for LLM provider\n */\nexport const LLMProviderSchema = z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]);\n\n/**\n * Schema for agent routing configuration\n */\nexport const AgentRoutingSchema = z.object({\n requiresThinking: z.boolean().optional(),\n preferProvider: LLMProviderSchema.optional(),\n});\n\n/**\n * Schema for routing configuration\n */\nexport const RoutingConfigSchema = z.object({\n providerPriority: z.array(LLMProviderSchema),\n modelFamilyPriority: z.object({\n claude: z.array(LLMProviderSchema).optional(),\n gpt: z.array(LLMProviderSchema).optional(),\n gemini: z.array(LLMProviderSchema).optional(),\n }),\n agentOverrides: z.object({\n marvin: AgentRoutingSchema.optional(),\n oracle: AgentRoutingSchema.optional(),\n librarian: AgentRoutingSchema.optional(),\n frontend: AgentRoutingSchema.optional(),\n documentWriter: AgentRoutingSchema.optional(),\n multimodalLooker: AgentRoutingSchema.optional(),\n }),\n fallbackBehavior: z.object({\n autoFallback: z.boolean(),\n retryPeriodMs: z.number().min(0),\n notifyOnRateLimit: z.boolean(),\n }),\n // New v1.0.0 field\n classifierModel: z\n .string()\n .default(\"anthropic/claude-haiku\")\n .describe(\"Model for sdlc_classify_request tool (use cheapest available)\"),\n});\n\n/**\n * Schema for thinking level\n */\nexport const ThinkingLevelSchema = z.enum([\"off\", \"low\", \"medium\", \"high\"]);\n\n/**\n * Schema for agent settings (temperature and thinking level)\n */\nexport const AgentSettingsSchema = z.object({\n temperature: z.number().min(0).max(1).optional(),\n thinkingLevel: ThinkingLevelSchema.optional(),\n});\n\n/**\n * Schema for custom model definition\n */\nexport const CustomModelDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n provider: z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]),\n description: z.string().optional(),\n capabilities: z\n .object({\n thinking: z.boolean().optional(),\n contextWindow: z.number().optional(),\n supportsTemperature: z.boolean().optional(),\n })\n .optional(),\n});\n\n/**\n * Schema for subagent model value (either a model string or \"inherit\" to use marvin model)\n */\nexport const SubagentModelSchema = z.union([\n z.string().describe(\"Full model identifier (e.g., 'anthropic/claude-sonnet-4-20250514')\"),\n z.literal(\"inherit\").describe(\"Inherit model from marvin\"),\n]);\n\n/**\n * Schema for subagent type\n */\nexport const SubagentTypeSchema = z.enum([\n // TDD agents\n \"red\",\n \"green\",\n \"domain\",\n \"refactor\",\n // Event modeling agents\n \"discovery\",\n \"workflow\",\n \"gwt\",\n \"model-checker\",\n // Architecture agents\n \"architect\",\n \"adr\",\n \"design-facilitator\",\n // Planning agents\n \"story\",\n \"pm\",\n \"analyst\",\n // Review agents\n \"reviewer\",\n \"ux\",\n \"mutation\",\n]);\n\n/**\n * Schema for subagent model assignments (v1.0.0+)\n * All fields are optional - unspecified subagents inherit from marvin\n */\nexport const SubagentModelsSchema = z.object({\n // TDD agents\n red: SubagentModelSchema.optional().describe(\"Model for TDD red phase agent\"),\n green: SubagentModelSchema.optional().describe(\"Model for TDD green phase agent\"),\n domain: SubagentModelSchema.optional().describe(\"Model for domain modeling agent\"),\n refactor: SubagentModelSchema.optional().describe(\"Model for refactoring agent\"),\n\n // Event modeling agents\n discovery: SubagentModelSchema.optional().describe(\n \"Model for discovery/domain exploration agent\"\n ),\n workflow: SubagentModelSchema.optional().describe(\"Model for workflow design agent\"),\n gwt: SubagentModelSchema.optional().describe(\"Model for GWT specification agent\"),\n \"model-checker\": SubagentModelSchema.optional().describe(\n \"Model for event model validation agent\"\n ),\n\n // Architecture agents\n architect: SubagentModelSchema.optional().describe(\"Model for architect agent\"),\n adr: SubagentModelSchema.optional().describe(\"Model for ADR creation agent\"),\n \"design-facilitator\": SubagentModelSchema.optional().describe(\n \"Model for design facilitation agent\"\n ),\n\n // Planning agents\n story: SubagentModelSchema.optional().describe(\"Model for story/issue planning agent\"),\n pm: SubagentModelSchema.optional().describe(\"Model for PM agent\"),\n analyst: SubagentModelSchema.optional().describe(\"Model for business analyst agent\"),\n\n // Review agents\n reviewer: SubagentModelSchema.optional().describe(\"Model for code reviewer agent\"),\n ux: SubagentModelSchema.optional().describe(\"Model for UX review agent\"),\n mutation: SubagentModelSchema.optional().describe(\"Model for mutation testing agent\"),\n});\n\n/**\n * Schema for agent model assignments\n */\nexport const ModelsSchema = z.object({\n marvin: z.string().describe(\"Model for main orchestrator agent\"),\n oracle: z.string().describe(\"Model for debugging/reasoning agent\"),\n librarian: z.string().describe(\"Model for research/documentation agent\"),\n frontend: z.string().optional().describe(\"Model for UI/UX agent\"),\n documentWriter: z.string().optional().describe(\"Model for documentation generation agent\"),\n multimodalLooker: z.string().optional().describe(\"Model for image analysis agent\"),\n // New v1.0.0 field for subagent models\n subagents: SubagentModelsSchema.optional().describe(\"Per-subagent model overrides\"),\n settings: z\n .object({\n marvin: AgentSettingsSchema.optional(),\n oracle: AgentSettingsSchema.optional(),\n librarian: AgentSettingsSchema.optional(),\n frontend: AgentSettingsSchema.optional(),\n documentWriter: AgentSettingsSchema.optional(),\n multimodalLooker: AgentSettingsSchema.optional(),\n overrides: z.record(z.string(), AgentSettingsSchema).optional(),\n })\n .optional(),\n custom: z.array(CustomModelDefinitionSchema).optional(),\n});\n\n/**\n * Complete SDLC configuration schema (v1.0.0+)\n *\n * Supports transitional state:\n * - New fields (github, tdd, eventModeling, git, modes, memory) are optional during migration\n * - Old field (bmad) is optional and deprecated\n * - Features/MCPs support both old and new structures via union\n */\nexport const SdlcConfigSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n subscriptions: SubscriptionSchema,\n models: ModelsSchema,\n // New v1.0.0 configuration\n modes: ModesConfigSchema.optional(),\n memory: MemoryConfigSchema.optional(),\n // New v0.3.0+ configuration (optional during migration)\n github: GitHubConfigSchema.optional(),\n tdd: TddConfigSchema.optional(),\n eventModeling: EventModelingConfigSchema.optional(),\n git: GitConfigSchema.optional(),\n // Legacy BMAD configuration (deprecated, optional for backward compatibility)\n bmad: LegacyBmadConfigSchema.optional(),\n // Features and MCPs support both old and new structures\n features: z.union([FeaturesSchema, LegacyFeaturesSchema]),\n mcps: z.union([McpsSchema, LegacyMcpsSchema]),\n routing: RoutingConfigSchema,\n});\n\n/**\n * @deprecated Alias for backward compatibility. Use LegacyBmadConfigSchema directly.\n */\nexport const BmadConfigSchema = LegacyBmadConfigSchema;\n\n// ============================================================================\n// Tool Argument Schemas\n// ============================================================================\n\n/**\n * Schema for sdlc_get_issue arguments\n */\nexport const GetIssueArgsSchema = z.object({\n issueNumber: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\"Specific GitHub issue number. If omitted, loads the next issue in Ready status.\"),\n});\n\n/**\n * Schema for sdlc_update_issue_status arguments\n */\nexport const UpdateIssueStatusArgsSchema = z.object({\n issueNumber: z.number().int().positive().describe(\"GitHub issue number\"),\n status: z.string().describe(\"New status (must match a column name in GitHub project statuses)\"),\n});\n\n/**\n * Schema for sdlc_list_issues arguments\n */\nexport const ListIssuesArgsSchema = z.object({\n status: z.string().optional().describe(\"Filter by status column name\"),\n limit: z.number().int().positive().optional().default(20).describe(\"Max issues to return\"),\n});\n\n/**\n * Schema for sdlc_get_context arguments\n */\nexport const GetContextArgsSchema = z.object({});\n\n/**\n * Schema for sdlc_parallel arguments\n */\nexport const ParallelArgsSchema = z.object({\n issueNumbers: z.array(z.number()).describe(\"Array of issue numbers to implement in parallel\"),\n maxConcurrent: z.number().int().min(1).max(5).optional().default(3),\n});\n\n/**\n * Schema for sdlc_config arguments\n */\nexport const ConfigArgsSchema = z.object({\n action: z.enum([\"get\", \"set\", \"reset\"]).describe(\"Configuration action to perform\"),\n key: z\n .string()\n .optional()\n .describe(\"Configuration key (dot notation, e.g., 'bmad.autoStatusUpdate')\"),\n value: z.unknown().optional().describe(\"Value to set (for 'set' action)\"),\n});\n\n// ============================================================================\n// Type Exports (inferred from schemas)\n// ============================================================================\n\n// Core configuration types\nexport type SubscriptionConfig = z.infer<typeof SubscriptionSchema>;\nexport type ModelsConfig = z.infer<typeof ModelsSchema>;\nexport type RoutingConfigValidated = z.infer<typeof RoutingConfigSchema>;\nexport type SdlcConfigValidated = z.infer<typeof SdlcConfigSchema>;\n\n// New v0.3.0 configuration types\nexport type GitHubConfigValidated = z.infer<typeof GitHubConfigSchema>;\nexport type GitHubStatusValidated = z.infer<typeof GitHubStatusSchema>;\nexport type TddConfigValidated = z.infer<typeof TddConfigSchema>;\nexport type TddVerbosityValidated = z.infer<typeof TddVerbositySchema>;\nexport type MutationTestingConfigValidated = z.infer<typeof MutationTestingConfigSchema>;\nexport type EventModelingConfigValidated = z.infer<typeof EventModelingConfigSchema>;\nexport type GitConfigValidated = z.infer<typeof GitConfigSchema>;\nexport type GitWorkflowValidated = z.infer<typeof GitWorkflowSchema>;\nexport type FeaturesConfig = z.infer<typeof FeaturesSchema>;\nexport type McpsConfig = z.infer<typeof McpsSchema>;\n\n// New v1.0.0 configuration types\nexport type SdlcMode = z.infer<typeof SdlcModeSchema>;\nexport type ModesConfigValidated = z.infer<typeof ModesConfigSchema>;\nexport type MemoryBackend = z.infer<typeof MemoryBackendSchema>;\nexport type MemoryConfigValidated = z.infer<typeof MemoryConfigSchema>;\nexport type SubagentModel = z.infer<typeof SubagentModelSchema>;\nexport type SubagentModelsConfigValidated = z.infer<typeof SubagentModelsSchema>;\n\n// Legacy/deprecated types (for backward compatibility)\n/** @deprecated Use GitHubConfigValidated instead */\nexport type BmadConfig = z.infer<typeof LegacyBmadConfigSchema>;\n","/**\n * Input validators\n *\n * Validation functions for CLI inputs and configuration.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { SdlcConfigSchema } from \"../../shared/schemas.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\n\n/**\n * Validation result structure\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Validate an Sdlc configuration object\n */\nexport function validateSdlcConfig(config: unknown): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const parseResult = SdlcConfigSchema.safeParse(config);\n\n if (!parseResult.success) {\n result.valid = false;\n for (const issue of parseResult.error.issues) {\n result.errors.push(`${issue.path.join(\".\")}: ${issue.message}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a JSON configuration file\n */\nexport function validateJsonConfig(path: string): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n if (!existsSync(path)) {\n result.valid = false;\n result.errors.push(\"File does not exist\");\n return result;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n } catch (err) {\n result.valid = false;\n result.errors.push(err instanceof Error ? err.message : \"Invalid JSON\");\n }\n\n return result;\n}\n\n/**\n * Validate model selection based on available providers\n */\nexport function validateModelForProvider(\n model: string,\n providers: { claude: boolean; openai: boolean; google: boolean; githubCopilot?: boolean }\n): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const modelLower = model.toLowerCase();\n\n const isGitHubCopilot = modelLower.startsWith(\"github-copilot/\");\n\n if (isGitHubCopilot) {\n if (!providers.githubCopilot) {\n result.valid = false;\n result.errors.push(\n \"GitHub Copilot model selected but GitHub Copilot provider is not enabled\"\n );\n }\n return result;\n }\n\n const claudeModels = [\"claude\", \"opus\", \"sonnet\", \"haiku\"];\n const openaiModels = [\"gpt\", \"o1\", \"o3\"];\n const googleModels = [\"gemini\", \"palm\"];\n\n const isClaude = claudeModels.some((m) => modelLower.includes(m));\n const isOpenAI = openaiModels.some((m) => modelLower.includes(m));\n const isGoogle = googleModels.some((m) => modelLower.includes(m));\n\n if (isClaude && !providers.claude) {\n result.valid = false;\n result.errors.push(\"Claude model selected but Claude provider is not enabled\");\n }\n\n if (isOpenAI && !providers.openai) {\n result.valid = false;\n result.errors.push(\"OpenAI model selected but OpenAI provider is not enabled\");\n }\n\n if (isGoogle && !providers.google) {\n result.valid = false;\n result.errors.push(\"Google model selected but Google provider is not enabled\");\n }\n\n return result;\n}\n\n/**\n * Check if Sdlc config has all required agent models configured\n */\nexport function validateAgentModels(config: SdlcConfig): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const requiredAgents = [\"marvin\", \"oracle\", \"librarian\"];\n\n const models = (config as SdlcConfig & { models?: Record<string, string> }).models || {};\n\n for (const agent of requiredAgents) {\n if (!models[agent]) {\n result.warnings.push(`No model configured for agent: ${agent}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a preset name\n */\nexport function isValidPreset(preset: string): boolean {\n const validPresets = [\"minimal\", \"standard\", \"enterprise\", \"solo-quick\", \"copilot-only\"];\n return validPresets.includes(preset);\n}\n\n/**\n * Sanitize a string for use in filenames\n */\nexport function sanitizeFilename(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9_-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n .toLowerCase();\n}\n","/**\n * Doctor command\n *\n * Diagnose and fix common issues with OpenCode SDLC installation.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { DoctorOptions, SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkOhMyOpenCode, checkPrerequisites, validateJsonFile } from \"../utils/prerequisites.js\";\nimport { validateJsonConfig, validateSdlcConfig } from \"../utils/validators.js\";\n\ninterface DiagnosticResult {\n name: string;\n status: \"pass\" | \"warn\" | \"fail\";\n message: string;\n fix?: () => Promise<void>;\n}\n\ninterface CopilotAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkCopilotAuth(): CopilotAuthResult {\n try {\n const result = execSync(\"opencode auth status github-copilot 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n const isAuthenticated =\n result.toLowerCase().includes(\"authenticated\") ||\n result.toLowerCase().includes(\"logged in\") ||\n !result.toLowerCase().includes(\"not\");\n return { authenticated: isAuthenticated };\n } catch {\n return { authenticated: false, message: \"Could not check auth status\" };\n }\n}\n\ninterface GitHubCliAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkGitHubCliAuth(): GitHubCliAuthResult {\n try {\n execSync(\"gh auth status 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return { authenticated: true };\n } catch {\n return { authenticated: false, message: \"Not authenticated - run 'gh auth login'\" };\n }\n}\n\nfunction checkMementoMcp(): boolean {\n try {\n // Check if memento is available as an MCP server\n execSync(\"which memento 2>/dev/null || command -v memento 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n // Also check if it's configured as an npm package\n const opencodeConfigDir = CONFIG_PATHS.globalConfigDir;\n const nodeModulesPath = `${opencodeConfigDir}/node_modules/@anthropic/mcp-memento`;\n return existsSync(nodeModulesPath);\n }\n}\n\nfunction checkGitSpice(): boolean {\n try {\n execSync(\"which gs 2>/dev/null || command -v gs 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n return false;\n }\n}\n\ninterface ProjectBoardAccessResult {\n accessible: boolean;\n message?: string;\n}\n\nasync function checkProjectBoardAccess(\n owner: string,\n projectNumber: number\n): Promise<ProjectBoardAccessResult> {\n try {\n execSync(`gh project view ${projectNumber} --owner ${owner} 2>&1`, {\n encoding: \"utf-8\",\n timeout: 10000,\n });\n return { accessible: true };\n } catch (error) {\n const message =\n error instanceof Error && error.message.includes(\"not found\")\n ? `Project #${projectNumber} not found for ${owner}`\n : \"Cannot access project board - check permissions\";\n return { accessible: false, message };\n }\n}\n\n/**\n * Main doctor command handler\n */\nexport async function doctor(options: DoctorOptions): Promise<void> {\n logger.banner();\n logger.section(\"Running Diagnostics\");\n\n const results: DiagnosticResult[] = [];\n const fileManager = new FileManager();\n\n // Check 1: Node.js version\n const prereqs = await checkPrerequisites();\n\n results.push({\n name: \"Node.js\",\n status: prereqs.node.installed ? (prereqs.node.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.node.installed\n ? prereqs.node.compatible\n ? `Version ${prereqs.node.version} is compatible`\n : `Version ${prereqs.node.version} detected, 20+ recommended`\n : \"Not installed\",\n });\n\n // Check 2: OpenCode installation\n results.push({\n name: \"OpenCode\",\n status: prereqs.opencode.installed ? (prereqs.opencode.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? `Version ${prereqs.opencode.version} is compatible`\n : `Version ${prereqs.opencode.version} detected, 1.0.132+ recommended`\n : \"Not installed\",\n });\n\n // Check 3: Sdlc config exists and is valid\n const sdlcConfigValid = validateJsonFile(CONFIG_PATHS.globalSdlcConfig);\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig);\n const schemaValidation = validateSdlcConfig(config);\n results.push({\n name: \"Sdlc Config\",\n status: schemaValidation.valid ? \"pass\" : \"warn\",\n message: schemaValidation.valid\n ? \"Valid configuration\"\n : `Schema issues: ${schemaValidation.errors.join(\", \")}`,\n });\n } else {\n results.push({\n name: \"Sdlc Config\",\n status: \"fail\",\n message: sdlcConfigValid.error || \"Not found\",\n fix: async () => {\n logger.info(\"Run 'opencode-sdlc install' to create configuration\");\n },\n });\n }\n\n // Check 4: OpenCode config exists and is valid\n const opencodeConfigValid = validateJsonConfig(CONFIG_PATHS.globalOpencodeConfig);\n results.push({\n name: \"OpenCode Config\",\n status: opencodeConfigValid.valid ? \"pass\" : \"fail\",\n message: opencodeConfigValid.valid ? \"Valid JSON\" : opencodeConfigValid.errors[0] || \"Invalid\",\n });\n\n // Check 5: oh-my-opencode config exists and is valid\n const omoConfigValid = validateJsonConfig(CONFIG_PATHS.globalOmoConfig);\n results.push({\n name: \"oh-my-opencode Config\",\n status: omoConfigValid.valid ? \"pass\" : \"warn\",\n message: omoConfigValid.valid ? \"Valid JSON\" : omoConfigValid.errors[0] || \"Not found\",\n });\n\n // Check 6: oh-my-opencode is installed\n const omoInstalled = await checkOhMyOpenCode();\n results.push({\n name: \"oh-my-opencode Plugin\",\n status: omoInstalled.installed ? \"pass\" : \"fail\",\n message: omoInstalled.installed ? `Version ${omoInstalled.version}` : \"Not installed\",\n fix: async () => {\n const spinner = ora(\"Installing oh-my-opencode...\").start();\n try {\n await fileManager.installDependencies([\"oh-my-opencode\"]);\n spinner.succeed(\"oh-my-opencode installed\");\n } catch (err) {\n spinner.fail(\"Failed to install oh-my-opencode\");\n throw err;\n }\n },\n });\n\n // Check 7: Config version freshness\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const configVersion = config.version || \"0.0.0\";\n const isCurrentVersion = configVersion === VERSION;\n results.push({\n name: \"Config Version\",\n status: isCurrentVersion ? \"pass\" : \"warn\",\n message: isCurrentVersion\n ? `Version ${configVersion} is current`\n : `Version ${configVersion} may be outdated (current: ${VERSION})`,\n });\n }\n\n // Check 9: GitHub Copilot auth status (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.subscriptions?.githubCopilot?.enabled) {\n const copilotAuthResult = checkCopilotAuth();\n results.push({\n name: \"GitHub Copilot Auth\",\n status: copilotAuthResult.authenticated ? \"pass\" : \"warn\",\n message: copilotAuthResult.authenticated\n ? \"Authenticated\"\n : copilotAuthResult.message ||\n \"Not authenticated - run 'opencode auth login github-copilot'\",\n });\n }\n }\n\n // Check 10: GitHub CLI authentication (if GitHub integration enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.owner) {\n const ghAuthResult = checkGitHubCliAuth();\n results.push({\n name: \"GitHub CLI Auth\",\n status: ghAuthResult.authenticated ? \"pass\" : \"warn\",\n message: ghAuthResult.authenticated\n ? \"Authenticated\"\n : ghAuthResult.message || \"Not authenticated - run 'gh auth login'\",\n });\n }\n }\n\n // Check 11: Memento MCP availability (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const mcps = config.mcps as { memento?: boolean };\n if (mcps?.memento) {\n const mementoAvailable = checkMementoMcp();\n results.push({\n name: \"Memento MCP\",\n status: mementoAvailable ? \"pass\" : \"warn\",\n message: mementoAvailable\n ? \"Available\"\n : \"Memento MCP not found - persistent memory may not work\",\n });\n }\n }\n\n // Check 12: git-spice installation (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.git?.workflow === \"git-spice\") {\n const gitSpiceInstalled = checkGitSpice();\n results.push({\n name: \"git-spice\",\n status: gitSpiceInstalled ? \"pass\" : \"fail\",\n message: gitSpiceInstalled\n ? \"Installed\"\n : \"git-spice not found - install via 'go install go.abhg.dev/gs@latest' or 'brew install git-spice'\",\n });\n }\n }\n\n // Check 13: GitHub Project board accessibility (if configured)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.project && config.github?.owner) {\n const projectAccessible = await checkProjectBoardAccess(\n config.github.owner,\n config.github.project\n );\n results.push({\n name: \"Project Board Access\",\n status: projectAccessible.accessible ? \"pass\" : \"warn\",\n message: projectAccessible.accessible\n ? `Project #${config.github.project} accessible`\n : projectAccessible.message || \"Cannot access project board\",\n });\n }\n }\n\n // Display results\n logger.section(\"Diagnostic Results\");\n\n let hasFailures = false;\n let hasWarnings = false;\n const fixableIssues: DiagnosticResult[] = [];\n\n for (const result of results) {\n let icon: string;\n let color: (s: string) => string;\n\n switch (result.status) {\n case \"pass\":\n icon = \"✓\";\n color = chalk.green;\n break;\n case \"warn\":\n icon = \"!\";\n color = chalk.yellow;\n hasWarnings = true;\n break;\n case \"fail\":\n icon = \"✖\";\n color = chalk.red;\n hasFailures = true;\n if (result.fix) {\n fixableIssues.push(result);\n }\n break;\n }\n\n console.log(` ${color(icon)} ${result.name}: ${result.message}`);\n }\n\n console.log();\n\n // Summary\n if (hasFailures) {\n logger.error(\"Some checks failed.\");\n\n if (fixableIssues.length > 0 && options.fix) {\n logger.section(\"Applying Fixes\");\n\n for (const issue of fixableIssues) {\n if (issue.fix) {\n try {\n await issue.fix();\n } catch (err) {\n logger.error(\n `Failed to fix ${issue.name}: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n }\n\n logger.blank();\n logger.info(\"Run 'opencode-sdlc doctor' again to verify fixes.\");\n } else if (fixableIssues.length > 0) {\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc doctor --fix\")} to attempt automatic fixes.`);\n }\n } else if (hasWarnings) {\n logger.warn(\"Some checks have warnings, but Sdlc should work.\");\n } else {\n logger.success(\"All checks passed! OpenCode SDLC is healthy.\");\n }\n}\n","/**\n * Info command\n *\n * Display current configuration and status.\n */\n\nimport chalk from \"chalk\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkPrerequisites, getInstalledPlugins } from \"../utils/prerequisites.js\";\n\n/**\n * Main info command handler\n */\nexport async function info(): Promise<void> {\n logger.banner();\n\n const fileManager = new FileManager();\n\n // Load Sdlc config\n const sdlcConfig = fileManager.readJsonFile<SdlcConfig>(CONFIG_PATHS.globalSdlcConfig);\n\n if (!sdlcConfig) {\n logger.warn(\"OpenCode SDLC is not installed.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to get started.`);\n return;\n }\n\n // Version info\n logger.section(\"Version Information\");\n logger.keyValue(\"Sdlc Version\", sdlcConfig.version || VERSION);\n\n // Prerequisites\n logger.section(\"Prerequisites\");\n const prereqs = await checkPrerequisites();\n\n const nodeStatus = prereqs.node.installed\n ? prereqs.node.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"Node.js\", `${nodeStatus} ${prereqs.node.version || \"not found\"}`);\n\n const opencodeStatus = prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"OpenCode\", `${opencodeStatus} ${prereqs.opencode.version || \"not found\"}`);\n\n // Subscriptions\n logger.section(\"Configured Providers\");\n\n const claudeStatus = sdlcConfig.subscriptions.claude.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Claude\",\n `${claudeStatus}${sdlcConfig.subscriptions.claude.tier !== \"none\" ? ` (${sdlcConfig.subscriptions.claude.tier})` : \"\"}`\n );\n\n const openaiStatus = sdlcConfig.subscriptions.openai.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\"OpenAI\", openaiStatus);\n\n const googleStatus = sdlcConfig.subscriptions.google.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Google\",\n `${googleStatus}${sdlcConfig.subscriptions.google.authMethod !== \"none\" ? ` (${sdlcConfig.subscriptions.google.authMethod})` : \"\"}`\n );\n\n // Models\n logger.section(\"Agent Models\");\n logger.keyValue(\"Marvin\", sdlcConfig.models.marvin);\n logger.keyValue(\"Oracle\", sdlcConfig.models.oracle);\n logger.keyValue(\"Librarian\", sdlcConfig.models.librarian);\n if (sdlcConfig.models.frontend) {\n logger.keyValue(\"Frontend\", sdlcConfig.models.frontend);\n }\n if (sdlcConfig.models.documentWriter) {\n logger.keyValue(\"Doc Writer\", sdlcConfig.models.documentWriter);\n }\n if (sdlcConfig.models.multimodalLooker) {\n logger.keyValue(\"Multimodal\", sdlcConfig.models.multimodalLooker);\n }\n\n // Work Tracking Configuration\n if (sdlcConfig.github) {\n logger.section(\"GitHub Issues Integration\");\n logger.keyValue(\"Owner\", sdlcConfig.github.owner);\n logger.keyValue(\"Repository\", sdlcConfig.github.repo);\n if (sdlcConfig.github.project) {\n logger.keyValue(\"Project #\", sdlcConfig.github.project.toString());\n }\n } else if (sdlcConfig.bmad) {\n // Legacy BMAD settings\n logger.section(\"BMAD Settings (Legacy)\");\n logger.keyValue(\"Default Track\", sdlcConfig.bmad.defaultTrack);\n logger.keyValue(\"Auto Status Update\", sdlcConfig.bmad.autoStatusUpdate ? \"yes\" : \"no\");\n logger.keyValue(\"Parallel Issue Limit\", sdlcConfig.bmad.parallelIssueLimit.toString());\n }\n\n // TDD Configuration\n if (sdlcConfig.tdd) {\n logger.section(\"TDD Configuration\");\n logger.keyValue(\"Enabled\", sdlcConfig.tdd.enabled ? \"yes\" : \"no\");\n logger.keyValue(\"Verbosity\", sdlcConfig.tdd.verbosity);\n if (sdlcConfig.tdd.mutationTesting?.enabled) {\n logger.keyValue(\n \"Mutation Testing\",\n `${sdlcConfig.tdd.mutationTesting.requiredScore}% required`\n );\n }\n }\n\n // Event Modeling Configuration\n if (sdlcConfig.eventModeling) {\n logger.section(\"Event Modeling\");\n logger.keyValue(\"Enabled\", sdlcConfig.eventModeling.enabled ? \"yes\" : \"no\");\n if (sdlcConfig.eventModeling.enabled) {\n logger.keyValue(\"Output Path\", sdlcConfig.eventModeling.outputPath);\n }\n }\n\n // Git Workflow Configuration\n if (sdlcConfig.git) {\n logger.section(\"Git Workflow\");\n logger.keyValue(\"Workflow\", sdlcConfig.git.workflow);\n logger.keyValue(\"Require Clean\", sdlcConfig.git.requireClean ? \"yes\" : \"no\");\n logger.keyValue(\"Worktrees\", sdlcConfig.git.worktrees ? \"yes\" : \"no\");\n }\n\n // Features\n logger.section(\"Features\");\n const features = sdlcConfig.features;\n\n // Check if using new or legacy features structure\n const isNewFeatures = \"orchestratorOnly\" in features;\n\n const featureList = isNewFeatures\n ? [\n {\n name: \"Orchestrator Only\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).orchestratorOnly,\n },\n {\n name: \"Todo Sync\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).todoSync,\n },\n {\n name: \"Party Review\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).partyReview,\n },\n {\n name: \"Debugging Protocol\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).debuggingProtocol,\n },\n {\n name: \"Memento\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).memento,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).notifications,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).lspTools,\n },\n ]\n : [\n {\n name: \"BMAD Bridge\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).bmadBridge,\n },\n {\n name: \"Auto Status\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).autoStatus,\n },\n {\n name: \"Parallel Exec\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).parallelExecution,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).notifications,\n },\n {\n name: \"Context Monitor\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).contextMonitor,\n },\n {\n name: \"Comment Checker\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).commentChecker,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).lspTools,\n },\n ];\n\n for (const feature of featureList) {\n const status = feature.enabled ? chalk.green(\"on\") : chalk.gray(\"off\");\n logger.keyValue(feature.name, status);\n }\n\n // MCPs\n logger.section(\"MCP Servers\");\n const mcps = sdlcConfig.mcps;\n logger.keyValue(\"context7\", mcps.context7 ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"exa\", mcps.exa ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"grep_app\", mcps.grepApp ? chalk.green(\"on\") : chalk.gray(\"off\"));\n if (\"memento\" in mcps) {\n logger.keyValue(\n \"memento\",\n (mcps as import(\"../../shared/types.js\").McpConfig).memento\n ? chalk.green(\"on\")\n : chalk.gray(\"off\")\n );\n }\n\n // Installed plugins\n logger.section(\"Installed Plugins\");\n const plugins = await getInstalledPlugins();\n\n if (Object.keys(plugins).length === 0) {\n logger.info(\"No plugins installed in OpenCode config directory\");\n } else {\n for (const [name, version] of Object.entries(plugins)) {\n logger.keyValue(name, version);\n }\n }\n\n // Configuration paths\n logger.section(\"Configuration Paths\");\n logger.keyValue(\"Config Dir\", CONFIG_PATHS.globalConfigDir);\n logger.keyValue(\"Sdlc Config\", CONFIG_PATHS.globalSdlcConfig);\n\n console.log();\n}\n","import type { AgentRole, AgentSettings, SdlcConfig, ThinkingLevel } from \"../../shared/types.js\";\n\ntype ModelFamily = \"claude-thinking\" | \"claude\" | \"gpt-reasoning\" | \"gpt\" | \"gemini\" | \"copilot\";\n\nconst MODEL_FAMILY_BASE_TEMPS: Record<ModelFamily, number> = {\n \"claude-thinking\": 0.3,\n claude: 0.2,\n \"gpt-reasoning\": 0.2,\n gpt: 0.3,\n gemini: 0.3,\n copilot: 0.25,\n};\n\nconst ROLE_TEMP_ADJUSTMENTS: Record<AgentRole, number> = {\n oracle: -0.1,\n marvin: 0.0,\n librarian: 0.1,\n frontend: 0.2,\n documentWriter: 0.1,\n multimodalLooker: -0.1,\n explore: -0.1,\n};\n\nconst ROLE_DEFAULT_THINKING: Record<AgentRole, ThinkingLevel> = {\n oracle: \"high\",\n marvin: \"medium\",\n librarian: \"low\",\n frontend: \"low\",\n documentWriter: \"low\",\n multimodalLooker: \"off\",\n explore: \"off\",\n};\n\ninterface ModelCapabilities {\n supportsTemperature: boolean;\n supportsThinking: boolean;\n thinkingType?: \"anthropic\" | \"openai\" | \"google\";\n}\n\nconst MODEL_CAPABILITIES: Record<string, Partial<ModelCapabilities>> = {\n \"anthropic/claude-sonnet-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-opus-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-sonnet-4-5\": { supportsTemperature: true },\n \"anthropic/claude-opus-4-5\": { supportsTemperature: true },\n \"openai/gpt-5.1-high\": { supportsThinking: true, thinkingType: \"openai\" },\n \"openai/gpt-5.1\": { supportsTemperature: false },\n \"openai/gpt-5.2\": { supportsTemperature: false },\n \"openai/gpt-4o\": { supportsTemperature: true },\n \"google/gemini-2.5-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-2.5-flash\": { supportsTemperature: true },\n \"google/gemini-3-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-3-flash\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n};\n\nconst COPILOT_DEFAULTS: Partial<ModelCapabilities> = {\n supportsTemperature: false,\n supportsThinking: false,\n};\n\nfunction getModelFamily(modelId: string): ModelFamily {\n if (modelId.startsWith(\"github-copilot/\")) return \"copilot\";\n if (modelId.includes(\"thinking\")) return \"claude-thinking\";\n if (modelId.includes(\"claude\")) return \"claude\";\n if (modelId.includes(\"gpt-5.1-high\") || modelId.includes(\"o3\") || modelId.includes(\"o1\")) {\n return \"gpt-reasoning\";\n }\n if (modelId.includes(\"gpt\")) return \"gpt\";\n if (modelId.includes(\"gemini\")) return \"gemini\";\n return \"claude\";\n}\n\n/**\n * Get the maximum allowed temperature for a model based on its provider.\n * - Anthropic: 0.0-1.0\n * - OpenAI: 0.0-2.0\n * - Google: 0.0-2.0\n * - Copilot: temperature not supported\n */\nfunction getMaxTemperatureForModel(modelId: string): number {\n if (modelId.startsWith(\"anthropic/\") || modelId.includes(\"claude\")) {\n return 1.0;\n }\n if (modelId.startsWith(\"openai/\") || modelId.includes(\"gpt\")) {\n return 2.0;\n }\n if (modelId.startsWith(\"google/\") || modelId.includes(\"gemini\")) {\n return 2.0;\n }\n // Default to conservative 1.0 for unknown providers\n return 1.0;\n}\n\nfunction getModelCapabilities(modelId: string): ModelCapabilities {\n const known = MODEL_CAPABILITIES[modelId];\n if (known) {\n return {\n supportsTemperature: known.supportsTemperature ?? true,\n supportsThinking: known.supportsThinking ?? false,\n thinkingType: known.thinkingType,\n };\n }\n\n if (modelId.startsWith(\"github-copilot/\")) {\n return {\n supportsTemperature: COPILOT_DEFAULTS.supportsTemperature ?? false,\n supportsThinking: COPILOT_DEFAULTS.supportsThinking ?? false,\n };\n }\n\n return { supportsTemperature: true, supportsThinking: false };\n}\n\nexport function getEffectiveTemperature(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): number | undefined {\n const roleOverride = config.models.settings?.[role]?.temperature;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.temperature;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsTemperature) return undefined;\n\n const family = getModelFamily(modelId);\n const baseTemp = MODEL_FAMILY_BASE_TEMPS[family];\n const adjustment = ROLE_TEMP_ADJUSTMENTS[role];\n const maxTemp = getMaxTemperatureForModel(modelId);\n\n return Math.max(0, Math.min(maxTemp, baseTemp + adjustment));\n}\n\nexport function getEffectiveThinkingLevel(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ThinkingLevel | undefined {\n const roleOverride = config.models.settings?.[role]?.thinkingLevel;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.thinkingLevel;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsThinking) return undefined;\n\n return ROLE_DEFAULT_THINKING[role];\n}\n\nexport interface ProviderParams {\n temperature?: number;\n reasoning_effort?: \"low\" | \"medium\" | \"high\";\n thinking_budget?: number;\n thinking_level?: \"low\" | \"medium\" | \"high\";\n}\n\nexport function getProviderParams(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ProviderParams {\n const result: ProviderParams = {};\n\n const temperature = getEffectiveTemperature(modelId, role, config);\n if (temperature !== undefined) {\n result.temperature = temperature;\n }\n\n const thinkingLevel = getEffectiveThinkingLevel(modelId, role, config);\n if (thinkingLevel && thinkingLevel !== \"off\") {\n const capabilities = getModelCapabilities(modelId);\n\n switch (capabilities.thinkingType) {\n case \"openai\":\n result.reasoning_effort = thinkingLevel;\n break;\n case \"anthropic\":\n result.thinking_budget = thinkingLevelToTokenBudget(thinkingLevel);\n if (result.temperature !== undefined) {\n const { temperature: _, ...rest } = result;\n return rest as ProviderParams;\n }\n break;\n case \"google\":\n result.thinking_level = thinkingLevel;\n break;\n }\n }\n\n return result;\n}\n\nfunction thinkingLevelToTokenBudget(level: ThinkingLevel): number {\n switch (level) {\n case \"low\":\n return 4096;\n case \"medium\":\n return 16384;\n case \"high\":\n return 32768;\n default:\n return 0;\n }\n}\n\nexport function getAgentSettings(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): AgentSettings {\n return {\n temperature: getEffectiveTemperature(modelId, role, config),\n thinkingLevel: getEffectiveThinkingLevel(modelId, role, config),\n };\n}\n\nexport function modelSupportsTemperature(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsTemperature;\n}\n\nexport function modelSupportsThinking(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsThinking;\n}\n","/**\n * oh-my-opencode config generator\n *\n * Generates the oh-my-opencode.json configuration file.\n */\n\nimport { getProviderParams } from \"../../plugin/utils/model-params.js\";\nimport type { AgentRole, InstallAnswers, SdlcConfig } from \"../../shared/types.js\";\n\nfunction buildMinimalConfig(answers: InstallAnswers): SdlcConfig {\n const { subscriptions, models, methodology, features, advanced } = answers;\n\n const providerPriority: (\"anthropic\" | \"openai\" | \"google\" | \"github-copilot\")[] = [];\n if (subscriptions.hasClaude) providerPriority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) providerPriority.push(\"openai\");\n if (subscriptions.hasGoogle) providerPriority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) providerPriority.push(\"github-copilot\");\n\n if (providerPriority.length === 0) {\n providerPriority.push(\"anthropic\", \"openai\", \"google\", \"github-copilot\");\n }\n\n return {\n version: \"0.4.0\",\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth || \"none\",\n tier: subscriptions.claudeTier || \"none\",\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth || \"none\",\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth || \"none\",\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n enabledModels: subscriptions.copilotEnabledModels,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n settings: models.settings,\n custom: models.custom,\n },\n bmad: {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit || 0,\n },\n features: {\n bmadBridge: true,\n autoStatus: features.enabledFeatures.includes(\"auto-status\"),\n parallelExecution: features.enabledFeatures.includes(\"parallel\"),\n notifications: features.enabledFeatures.includes(\"notifications\"),\n contextMonitor: features.enabledFeatures.includes(\"context-monitor\"),\n commentChecker: features.enabledFeatures.includes(\"comment-checker\"),\n lspTools: features.enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: false,\n todoSync: true,\n },\n mcps: {\n context7: features.mcps.includes(\"context7\"),\n exa: features.mcps.includes(\"exa\"),\n grepApp: features.mcps.includes(\"grep_app\"),\n },\n routing: {\n providerPriority,\n modelFamilyPriority: {\n claude: providerPriority.filter((p) => p === \"anthropic\" || p === \"github-copilot\"),\n gpt: providerPriority.filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: providerPriority.filter((p) => p === \"google\" || p === \"github-copilot\"),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n },\n };\n}\n\n/**\n * Generate oh-my-opencode.json configuration\n */\nexport function generateOmoConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, features, advanced } = answers;\n const config: SdlcConfig = buildMinimalConfig(answers);\n\n const omoConfig: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json\",\n };\n\n // Google auth toggle - if using antigravity, disable built-in auth\n if (subscriptions.hasGoogle && subscriptions.googleAuth === \"antigravity\") {\n omoConfig.google_auth = false;\n }\n\n const agentConfigs: Array<{ role: AgentRole; omoName: string; modelId: string }> = [\n { role: \"marvin\", omoName: \"Marvin\", modelId: models.marvin },\n { role: \"oracle\", omoName: \"oracle\", modelId: models.oracle },\n { role: \"librarian\", omoName: \"librarian\", modelId: models.librarian },\n {\n role: \"frontend\",\n omoName: \"frontend-ui-ux-engineer\",\n modelId: models.frontend || models.marvin,\n },\n {\n role: \"documentWriter\",\n omoName: \"document-writer\",\n modelId: models.documentWriter || models.librarian,\n },\n {\n role: \"multimodalLooker\",\n omoName: \"multimodal-looker\",\n modelId: models.multimodalLooker || models.librarian,\n },\n { role: \"explore\", omoName: \"explore\", modelId: models.explore || models.librarian },\n ];\n\n omoConfig.agents = {};\n for (const { role, omoName, modelId } of agentConfigs) {\n const providerParams = getProviderParams(modelId, role, config);\n (omoConfig.agents as Record<string, unknown>)[omoName] = {\n model: modelId,\n ...providerParams,\n };\n }\n\n (omoConfig.agents as Record<string, unknown>).general = {\n model: models.oracle,\n ...getProviderParams(models.oracle, \"oracle\", config),\n };\n\n // Disabled hooks based on features\n const disabledHooks: string[] = [];\n\n if (!features.enabledFeatures.includes(\"context-monitor\")) {\n disabledHooks.push(\"context-window-monitor\");\n }\n if (!features.enabledFeatures.includes(\"comment-checker\")) {\n disabledHooks.push(\"comment-checker\");\n }\n if (!features.enabledFeatures.includes(\"notifications\")) {\n disabledHooks.push(\"session-notification\", \"background-notification\");\n }\n\n if (disabledHooks.length > 0) {\n omoConfig.disabled_hooks = disabledHooks;\n }\n\n // Disabled MCPs\n const allMcps = [\"context7\", \"websearch_exa\", \"grep_app\", \"memento\"];\n const enabledMcpIds = features.mcps.map((mcp) => {\n // Map feature names to MCP names\n if (mcp === \"exa\") return \"websearch_exa\";\n return mcp;\n });\n const disabledMcps = allMcps.filter((mcp) => !enabledMcpIds.includes(mcp));\n\n if (disabledMcps.length > 0) {\n omoConfig.disabled_mcps = disabledMcps;\n }\n\n // Experimental features\n if (advanced.experimental && advanced.experimental.length > 0) {\n omoConfig.experimental = {};\n\n if (advanced.experimental.includes(\"aggressive-truncation\")) {\n (omoConfig.experimental as Record<string, unknown>).aggressive_truncation = true;\n }\n if (advanced.experimental.includes(\"auto-resume\")) {\n (omoConfig.experimental as Record<string, unknown>).auto_resume = true;\n }\n }\n\n return omoConfig;\n}\n","/**\n * OpenCode config generator\n *\n * Generates and updates the opencode.json configuration file.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\n\n/**\n * Generate opencode.json configuration\n */\nexport async function generateOpencodeConfig(\n answers: InstallAnswers,\n configDir: string\n): Promise<Record<string, unknown>> {\n // Load existing config if present\n const configPath = join(configDir, \"opencode.json\");\n let existingConfig: Record<string, unknown> = {};\n\n if (existsSync(configPath)) {\n try {\n const content = readFileSync(configPath, \"utf-8\");\n existingConfig = JSON.parse(content);\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n // Build plugin array\n const plugins: string[] = [\"opencode-sdlc-plugin/plugin\", \"oh-my-opencode\"];\n\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n plugins.push(\"opencode-antigravity-auth\");\n }\n\n if (answers.subscriptions.hasOpenAI) {\n plugins.push(\"opencode-openai-codex-auth\");\n }\n\n // Merge with existing config\n const existingPlugins = (existingConfig.plugin as string[]) || [];\n const mergedPlugins = [...new Set([...existingPlugins, ...plugins])];\n\n const config: Record<string, unknown> = {\n ...existingConfig,\n $schema: existingConfig.$schema || \"https://opencode.ai/config.json\",\n plugin: mergedPlugins,\n };\n\n // Add provider configs if Claude subscription\n if (answers.subscriptions.hasClaude) {\n const existingProvider = (existingConfig.provider as Record<string, unknown>) || {};\n const existingAnthropic = (existingProvider.anthropic as Record<string, unknown>) || {};\n const existingAnthropicModels = (existingAnthropic.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n anthropic: {\n ...existingAnthropic,\n models: {\n ...existingAnthropicModels,\n // Add thinking model variants\n \"claude-opus-4-5-thinking\": {\n id: \"claude-opus-4-5\",\n options: {\n thinking: {\n type: \"enabled\",\n budgetTokens: 32000,\n },\n },\n },\n \"claude-sonnet-4-5-thinking\": {\n id: \"claude-sonnet-4-5\",\n options: {\n thinking: {\n type: \"enabled\",\n budgetTokens: 10000,\n },\n },\n },\n },\n },\n };\n }\n\n // Add OpenAI provider config if present\n if (answers.subscriptions.hasOpenAI) {\n const existingProvider = (config.provider as Record<string, unknown>) || {};\n const existingOpenAI = (existingProvider.openai as Record<string, unknown>) || {};\n const existingOpenAIModels = (existingOpenAI.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n openai: {\n ...existingOpenAI,\n models: {\n ...existingOpenAIModels,\n // Add reasoning effort configurations\n \"gpt-5.1-high\": {\n id: \"gpt-5.1\",\n options: {\n reasoningEffort: \"high\",\n reasoningSummary: \"auto\",\n },\n },\n },\n },\n };\n }\n\n // Add Google Antigravity provider config if present\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n const existingProvider = (config.provider as Record<string, unknown>) || {};\n const existingGoogle = (existingProvider.google as Record<string, unknown>) || {};\n const existingGoogleModels = (existingGoogle.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n google: {\n ...existingGoogle,\n models: {\n ...existingGoogleModels,\n // Gemini models\n \"gemini-3-pro-high\": {\n name: \"Gemini 3 Pro High (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65535,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"gemini-3-pro-low\": {\n name: \"Gemini 3 Pro Low (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65535,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"gemini-3-flash\": {\n name: \"Gemini 3 Flash (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65536,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n // Claude models via Antigravity\n \"claude-sonnet-4-5\": {\n name: \"Claude Sonnet 4.5 (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"claude-sonnet-4-5-thinking\": {\n name: \"Claude Sonnet 4.5 Thinking (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"claude-opus-4-5-thinking\": {\n name: \"Claude Opus 4.5 Thinking (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n // GPT models via Antigravity\n \"gpt-oss-120b-medium\": {\n name: \"GPT-OSS 120B Medium (Antigravity)\",\n limit: {\n context: 131072,\n output: 32768,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n },\n },\n };\n }\n\n return config;\n}\n\n/**\n * Get the list of plugins to install based on answers\n */\nexport function getRequiredPlugins(answers: InstallAnswers): string[] {\n const plugins: string[] = [\"opencode-sdlc-plugin\", \"oh-my-opencode\"];\n\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n plugins.push(\"opencode-antigravity-auth\");\n }\n\n if (answers.subscriptions.hasOpenAI) {\n plugins.push(\"opencode-openai-codex-auth\");\n }\n\n return plugins;\n}\n","/**\n * Feature questions\n *\n * Gather feature toggle preferences.\n */\n\nimport { checkbox } from \"@inquirer/prompts\";\nimport type { FeatureAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for feature questions\n */\nexport interface FeatureDefaults {\n enabledFeatures?: string[];\n mcps?: string[];\n}\n\n/**\n * Available features with descriptions\n */\nconst AVAILABLE_FEATURES = [\n {\n name: \"BMAD Bridge Commands (/sdlc-dev, /sdlc-review, etc.)\",\n value: \"bmad-bridge\",\n },\n {\n name: \"Auto Sprint Status Updates - Update sprint-status.yaml automatically\",\n value: \"auto-status\",\n },\n {\n name: \"Parallel Story Execution - Work on multiple stories simultaneously\",\n value: \"parallel\",\n },\n {\n name: \"Session Notifications - Desktop notifications for completions\",\n value: \"notifications\",\n },\n {\n name: \"Context Window Monitoring - Track context usage\",\n value: \"context-monitor\",\n },\n {\n name: \"Comment Checker - Ensure code is not over-commented\",\n value: \"comment-checker\",\n },\n {\n name: \"LSP Refactoring Tools - Enable lsp_rename, lsp_find_references, etc.\",\n value: \"lsp-tools\",\n },\n {\n name: \"Auto Git Operations - Allow agents to commit/push/branch automatically (unchecked = requires explicit permission)\",\n value: \"auto-git-operations\",\n },\n];\n\n/**\n * All feature values for reference\n */\nconst ALL_FEATURE_VALUES = AVAILABLE_FEATURES.map((f) => f.value);\n\nconst FEATURES_ENABLED_BY_DEFAULT = ALL_FEATURE_VALUES.filter((f) => f !== \"auto-git-operations\");\n\n/**\n * New v0.3.0+ features with descriptions\n */\nconst AVAILABLE_NEW_FEATURES = [\n {\n name: \"Orchestrator-Only - Main conversation delegates file writes to agents\",\n value: \"orchestratorOnly\",\n },\n {\n name: \"Todo Sync - Auto-sync todos with GitHub issue checkboxes\",\n value: \"todoSync\",\n },\n {\n name: \"Party Review - Multi-stakeholder architecture reviews\",\n value: \"partyReview\",\n },\n {\n name: \"Debugging Protocol - Oracle-assisted debugging workflow\",\n value: \"debuggingProtocol\",\n },\n {\n name: \"Memento Integration - Persistent memory across sessions\",\n value: \"memento\",\n },\n {\n name: \"Notifications - In-TUI notifications\",\n value: \"notifications\",\n },\n {\n name: \"LSP Tools - Code intelligence tools\",\n value: \"lspTools\",\n },\n];\n\nconst NEW_FEATURES_ENABLED_BY_DEFAULT = [\n \"todoSync\",\n \"partyReview\",\n \"debuggingProtocol\",\n \"notifications\",\n \"lspTools\",\n];\n\n/**\n * Available MCP servers with descriptions\n */\nconst AVAILABLE_MCPS = [\n {\n name: \"context7 - Documentation lookup and context retrieval\",\n value: \"context7\",\n },\n {\n name: \"websearch_exa - Web search capabilities\",\n value: \"exa\",\n },\n {\n name: \"grep_app - GitHub code search\",\n value: \"grep_app\",\n },\n {\n name: \"memento - Persistent memory storage\",\n value: \"memento\",\n },\n];\n\n/**\n * All MCP values for reference\n */\nconst ALL_MCP_VALUES = AVAILABLE_MCPS.map((m) => m.value);\n\n/**\n * Create choices with checked state based on defaults\n */\nfunction createFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n\n/**\n * Create MCP choices with checked state based on defaults\n */\nfunction createMcpChoices(defaults?: string[]) {\n // If no defaults provided, check all by default\n const enabledSet = new Set(defaults ?? ALL_MCP_VALUES);\n\n return AVAILABLE_MCPS.map((mcp) => ({\n ...mcp,\n checked: enabledSet.has(mcp.value),\n }));\n}\n\n/**\n * Gather feature selections from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherFeatures(defaults?: FeatureDefaults): Promise<FeatureAnswers> {\n const enabledFeatures = await checkbox({\n message: \"Select features to enable:\",\n choices: createFeatureChoices(defaults?.enabledFeatures),\n });\n\n const mcps = await checkbox({\n message: \"Select MCP servers to enable:\",\n choices: createMcpChoices(defaults?.mcps),\n });\n\n return {\n enabledFeatures,\n mcps,\n };\n}\n\n/**\n * Get feature flags from enabled features array\n */\nexport function featuresToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n bmadBridge: enabledFeatures.includes(\"bmad-bridge\"),\n autoStatus: enabledFeatures.includes(\"auto-status\"),\n parallelExecution: enabledFeatures.includes(\"parallel\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n contextMonitor: enabledFeatures.includes(\"context-monitor\"),\n commentChecker: enabledFeatures.includes(\"comment-checker\"),\n lspTools: enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: enabledFeatures.includes(\"auto-git-operations\"),\n todoSync: true,\n };\n}\n\n/**\n * Get MCP flags from enabled MCPs array\n */\nexport function mcpsToFlags(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grep_app\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Get new-style feature flags from enabled features array\n */\nexport function newFeaturesToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Create new-style feature choices with checked state based on defaults\n */\nexport function createNewFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? NEW_FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_NEW_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n","/**\n * SDLC config generator\n *\n * Generates the sdlc.json configuration file.\n *\n * v0.3.0+ supports both:\n * - New structure: github, tdd, eventModeling, git sections\n * - Legacy structure: bmad section (deprecated, for backward compatibility)\n */\n\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, LLMProvider } from \"../../shared/types.js\";\nimport { featuresToFlags, mcpsToFlags } from \"../questions/features.js\";\n\nfunction inferProviderPriority(answers: InstallAnswers): LLMProvider[] {\n const { subscriptions } = answers;\n const priority: LLMProvider[] = [];\n\n if (subscriptions.hasClaude) priority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) priority.push(\"openai\");\n if (subscriptions.hasGoogle) priority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) priority.push(\"github-copilot\");\n\n if (priority.length === 0) {\n return [\"anthropic\", \"openai\", \"google\", \"github-copilot\"];\n }\n\n return priority;\n}\n\n/**\n * Generate new v0.3.0+ features configuration\n */\nfunction generateNewFeatures(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Generate new v0.3.0+ MCPs configuration\n */\nfunction generateNewMcps(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grepApp\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Check if using new-style feature selection\n */\nfunction isNewStyleFeatures(enabledFeatures: string[]): boolean {\n const newFeatureKeys = [\"orchestratorOnly\", \"partyReview\", \"debuggingProtocol\", \"memento\"];\n return enabledFeatures.some((f) => newFeatureKeys.includes(f));\n}\n\n/**\n * Generate sdlc.json configuration\n *\n * Supports both v0.3.0+ new structure and legacy BMAD structure\n * based on install answers.\n */\nexport function generateSdlcConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, methodology, features, advanced } = answers;\n const useNewFeatures = isNewStyleFeatures(features.enabledFeatures);\n\n const config: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/jwilger/opencode-sdlc-plugin/main/config/schemas/sdlc.schema.json\",\n version: VERSION,\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth,\n tier: subscriptions.claudeTier,\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth,\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth,\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n // v1.0.0: subagent model configuration\n subagents: {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n },\n },\n // Features and MCPs - use new format if new features selected, otherwise legacy\n features: useNewFeatures\n ? generateNewFeatures(features.enabledFeatures)\n : featuresToFlags(features.enabledFeatures),\n mcps: useNewFeatures ? generateNewMcps(features.mcps) : mcpsToFlags(features.mcps),\n routing: {\n providerPriority: inferProviderPriority(answers),\n modelFamilyPriority: {\n claude: inferProviderPriority(answers).filter(\n (p) => p === \"anthropic\" || p === \"github-copilot\"\n ),\n gpt: inferProviderPriority(answers).filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: inferProviderPriority(answers).filter(\n (p) => p === \"google\" || p === \"github-copilot\"\n ),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: advanced.autoFallback ?? false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n // v1.0.0: classifier model for mode detection\n classifierModel: \"anthropic/claude-haiku\",\n },\n };\n\n // Add legacy BMAD config for backward compatibility (if using legacy features)\n if (!useNewFeatures) {\n config.bmad = {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit ?? 0,\n paths: {\n prd: null,\n architecture: null,\n },\n };\n }\n\n // Add GitHub config if provided\n if (answers.github?.enabled) {\n config.github = {\n owner: answers.github.owner,\n repo: answers.github.repo,\n project: answers.github.project,\n statuses: answers.github.statuses,\n };\n }\n\n // Add v1.0.0+ modes config\n config.modes = answers.modes\n ? {\n default: answers.modes.default,\n eventModeling: answers.modes.eventModeling,\n enabled: answers.modes.enabled,\n }\n : {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n\n // Add v1.0.0+ memory config\n config.memory = answers.memory\n ? {\n backend: answers.memory.backend,\n checkpointTtl: answers.memory.checkpointTtl,\n }\n : {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n\n // Add TDD config with v1.0 fields\n config.tdd = answers.tdd\n ? {\n enabled: answers.tdd.enabled,\n verbosity: answers.tdd.verbosity,\n bypassPatterns: answers.tdd.bypassPatterns,\n mutationTesting: {\n enabled: answers.tdd.mutationTesting.enabled,\n requiredScore: answers.tdd.mutationTesting.requiredScore,\n },\n // v1.0.0 fields\n domainVetoEnabled: answers.tdd.domainVetoEnabled ?? true,\n debateRounds: answers.tdd.debateRounds ?? 2,\n requireVerification: answers.tdd.requireVerification ?? true,\n }\n : {\n enabled: true,\n verbosity: \"brief\",\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n };\n\n // Add new v0.3.0+ Event Modeling config from answers or defaults\n config.eventModeling = answers.eventModeling\n ? {\n enabled: answers.eventModeling.enabled,\n outputPath: answers.eventModeling.outputPath,\n }\n : {\n enabled: false,\n outputPath: \"docs/event-model\",\n };\n\n // Add new v0.3.0+ Git config from answers or defaults\n config.git = answers.gitWorkflow\n ? {\n workflow: answers.gitWorkflow.workflow,\n requireClean: answers.gitWorkflow.requireClean,\n worktrees: answers.gitWorkflow.worktrees,\n }\n : {\n workflow: \"standard\",\n requireClean: true,\n worktrees: false,\n };\n\n return config;\n}\n","/**\n * Config Generator\n *\n * Orchestrates generation of all configuration files.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile, InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"./omo-config.js\";\nimport { generateOpencodeConfig, getRequiredPlugins } from \"./opencode-config.js\";\nimport { generateSdlcConfig } from \"./sdlc-config.js\";\n\nexport class ConfigGenerator {\n private answers: InstallAnswers;\n private configDir: string;\n\n constructor(answers: InstallAnswers) {\n this.answers = answers;\n this.configDir =\n answers.installLocation === \"local\"\n ? join(process.cwd(), \".opencode\")\n : CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Generate all configuration files\n */\n async generate(): Promise<GeneratedFile[]> {\n const files: GeneratedFile[] = [];\n\n // Generate opencode.json\n const opencodeConfig = await generateOpencodeConfig(this.answers, this.configDir);\n files.push({\n path: join(this.configDir, \"opencode.json\"),\n content: JSON.stringify(opencodeConfig, null, 2),\n exists: existsSync(join(this.configDir, \"opencode.json\")),\n });\n\n // Generate oh-my-opencode.json\n const omoConfig = generateOmoConfig(this.answers);\n files.push({\n path: join(this.configDir, \"oh-my-opencode.json\"),\n content: JSON.stringify(omoConfig, null, 2),\n exists: existsSync(join(this.configDir, \"oh-my-opencode.json\")),\n });\n\n // Generate sdlc.json\n const sdlcConfig = generateSdlcConfig(this.answers);\n files.push({\n path: join(this.configDir, \"sdlc.json\"),\n content: JSON.stringify(sdlcConfig, null, 2),\n exists: existsSync(join(this.configDir, \"sdlc.json\")),\n });\n\n return files;\n }\n\n /**\n * Get the list of npm packages to install\n */\n getRequiredPackages(): string[] {\n return getRequiredPlugins(this.answers);\n }\n}\n","/**\n * Shared GitHub API Client using Octokit\n *\n * Provides typed methods for GitHub operations used by both CLI and plugin.\n * Authentication is resolved in order:\n * 1. Explicitly provided token\n * 2. GITHUB_TOKEN environment variable\n * 3. `gh auth token` command output (if gh CLI is available)\n */\n\nimport { execSync } from \"node:child_process\";\nimport { Octokit } from \"@octokit/rest\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface GitHubClientOptions {\n /** GitHub token (optional - will try env/gh CLI if not provided) */\n token?: string;\n /** Repository owner */\n owner?: string;\n /** Repository name */\n repo?: string;\n}\n\nexport interface GitHubIssue {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: string;\n labels: Array<{ name: string }>;\n}\n\nexport interface GitHubIssueListItem {\n number: number;\n title: string;\n url: string;\n state: string;\n}\n\nexport interface GitHubPullRequest {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n mergeableState: string;\n draft: boolean;\n}\n\nexport interface GitHubPrCheck {\n name: string;\n status: \"pass\" | \"fail\" | \"pending\" | \"skipped\";\n conclusion: string | null;\n}\n\nexport interface GitHubPrReview {\n reviewer: string;\n state: \"APPROVED\" | \"CHANGES_REQUESTED\" | \"COMMENTED\" | \"PENDING\" | \"DISMISSED\";\n}\n\nexport interface GitHubPrStatus {\n number: number;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n checks: GitHubPrCheck[];\n reviews: GitHubPrReview[];\n}\n\nexport interface CreatePrOptions {\n title: string;\n body?: string;\n head: string;\n base?: string;\n draft?: boolean;\n}\n\nexport interface CreatePrResult {\n number: number;\n url: string;\n}\n\nexport interface MergePrOptions {\n prNumber: number;\n mergeMethod?: \"merge\" | \"squash\" | \"rebase\";\n commitTitle?: string;\n commitMessage?: string;\n}\n\nexport interface MergePrResult {\n sha: string;\n merged: boolean;\n}\n\nexport interface GitHubOrganization {\n id: string;\n nodeId: string;\n login: string;\n name: string | null;\n}\n\nexport interface GitHubProject {\n id: string;\n number: number;\n title: string;\n url: string;\n}\n\nexport interface CreateRepoOptions {\n name: string;\n description?: string;\n private?: boolean;\n autoInit?: boolean;\n /** Organization login to create the repo under (omit for personal repo) */\n org?: string;\n}\n\nexport interface CreateProjectOptions {\n title: string;\n /** Owner login (user or org) - required */\n ownerLogin: string;\n /** If true, owner is an organization */\n isOrg?: boolean;\n}\n\nexport interface CopyProjectOptions {\n /** Source project number */\n sourceProjectNumber: number;\n /** Source owner login */\n sourceOwnerLogin: string;\n /** If true, source owner is an organization */\n sourceIsOrg?: boolean;\n /** Target owner login */\n targetOwnerLogin: string;\n /** If true, target owner is an organization */\n targetIsOrg?: boolean;\n /** Title for the new project */\n title: string;\n /** Include draft issues when copying */\n includeDraftIssues?: boolean;\n}\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n fullName: string;\n url: string;\n private: boolean;\n defaultBranch: string;\n}\n\n// ============================================================================\n// Authentication\n// ============================================================================\n\n/**\n * Resolve GitHub token from various sources\n */\nexport function resolveGitHubToken(explicitToken?: string): string | null {\n // 1. Explicit token\n if (explicitToken) {\n return explicitToken;\n }\n\n // 2. Environment variable\n const envToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;\n if (envToken) {\n return envToken;\n }\n\n // 3. gh CLI token\n try {\n const ghToken = execSync(\"gh auth token\", {\n encoding: \"utf-8\",\n timeout: 5000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n if (ghToken) {\n return ghToken;\n }\n } catch {\n // gh CLI not available or not authenticated\n }\n\n return null;\n}\n\n/**\n * Check if GitHub authentication is available\n */\nexport function isGitHubAuthenticated(token?: string): boolean {\n return resolveGitHubToken(token) !== null;\n}\n\n// ============================================================================\n// Client Class\n// ============================================================================\n\nexport class GitHubClient {\n private octokit: Octokit;\n private owner?: string;\n private repo?: string;\n\n constructor(options: GitHubClientOptions = {}) {\n const token = resolveGitHubToken(options.token);\n\n if (!token) {\n throw new Error(\n \"GitHub authentication not found. Set GITHUB_TOKEN environment variable or run 'gh auth login'.\"\n );\n }\n\n this.octokit = new Octokit({ auth: token });\n this.owner = options.owner;\n this.repo = options.repo;\n }\n\n /**\n * Set the default owner/repo for operations\n */\n setRepo(owner: string, repo: string): void {\n this.owner = owner;\n this.repo = repo;\n }\n\n private getRepoParams(owner?: string, repo?: string): { owner: string; repo: string } {\n const o = owner || this.owner;\n const r = repo || this.repo;\n if (!o || !r) {\n throw new Error(\"Repository owner and name are required\");\n }\n return { owner: o, repo: r };\n }\n\n // ==========================================================================\n // Issues\n // ==========================================================================\n\n /**\n * Get a single issue by number\n */\n async getIssue(issueNumber: number, owner?: string, repo?: string): Promise<GitHubIssue> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.get({\n ...params,\n issue_number: issueNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body ?? null,\n url: data.html_url,\n state: data.state,\n labels: (data.labels || []).map((label) =>\n typeof label === \"string\" ? { name: label } : { name: label.name || \"\" }\n ),\n };\n }\n\n /**\n * List issues in a repository\n */\n async listIssues(\n options: {\n state?: \"open\" | \"closed\" | \"all\";\n labels?: string[];\n limit?: number;\n } = {},\n owner?: string,\n repo?: string\n ): Promise<GitHubIssueListItem[]> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.listForRepo({\n ...params,\n state: options.state || \"open\",\n labels: options.labels?.join(\",\"),\n per_page: options.limit || 30,\n });\n\n // Filter out pull requests (GitHub API returns PRs as issues)\n return data\n .filter((issue) => !issue.pull_request)\n .map((issue) => ({\n number: issue.number,\n title: issue.title,\n url: issue.html_url,\n state: issue.state,\n }));\n }\n\n /**\n * Update an issue's body\n */\n async updateIssueBody(\n issueNumber: number,\n body: string,\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.update({\n ...params,\n issue_number: issueNumber,\n body,\n });\n }\n\n /**\n * Add labels to an issue\n */\n async addLabels(\n issueNumber: number,\n labels: string[],\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.addLabels({\n ...params,\n issue_number: issueNumber,\n labels,\n });\n }\n\n // ==========================================================================\n // Pull Requests\n // ==========================================================================\n\n /**\n * Create a pull request\n */\n async createPullRequest(\n options: CreatePrOptions,\n owner?: string,\n repo?: string\n ): Promise<CreatePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.create({\n ...params,\n title: options.title,\n body: options.body,\n head: options.head,\n base: options.base || \"main\",\n draft: options.draft,\n });\n\n return {\n number: data.number,\n url: data.html_url,\n };\n }\n\n /**\n * Get pull request details\n */\n async getPullRequest(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPullRequest> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body,\n url: data.html_url,\n state: data.merged ? \"merged\" : (data.state as \"open\" | \"closed\"),\n mergeable: data.mergeable,\n mergeableState: data.mergeable_state,\n draft: data.draft || false,\n };\n }\n\n /**\n * Get pull request status including checks and reviews\n */\n async getPullRequestStatus(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPrStatus> {\n const params = this.getRepoParams(owner, repo);\n\n // Get PR details\n const pr = await this.getPullRequest(prNumber, owner, repo);\n\n // Get check runs for the PR's head commit\n const { data: prData } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n let checks: GitHubPrCheck[] = [];\n try {\n const { data: checksData } = await this.octokit.checks.listForRef({\n ...params,\n ref: prData.head.sha,\n });\n\n checks = checksData.check_runs.map((check) => ({\n name: check.name,\n status:\n check.status === \"completed\"\n ? check.conclusion === \"success\"\n ? \"pass\"\n : check.conclusion === \"skipped\"\n ? \"skipped\"\n : \"fail\"\n : \"pending\",\n conclusion: check.conclusion,\n }));\n } catch {\n // Checks API might not be available\n }\n\n // Get reviews\n const { data: reviewsData } = await this.octokit.pulls.listReviews({\n ...params,\n pull_number: prNumber,\n });\n\n const reviews: GitHubPrReview[] = reviewsData.map((review) => ({\n reviewer: review.user?.login || \"unknown\",\n state: review.state as GitHubPrReview[\"state\"],\n }));\n\n return {\n number: pr.number,\n url: pr.url,\n state: pr.state,\n mergeable: pr.mergeable,\n checks,\n reviews,\n };\n }\n\n /**\n * Get pull request diff\n */\n async getPullRequestDiff(prNumber: number, owner?: string, repo?: string): Promise<string> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n mediaType: { format: \"diff\" },\n });\n\n // The response is a string when using diff format\n return data as unknown as string;\n }\n\n /**\n * Merge a pull request\n */\n async mergePullRequest(\n options: MergePrOptions,\n owner?: string,\n repo?: string\n ): Promise<MergePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.merge({\n ...params,\n pull_number: options.prNumber,\n merge_method: options.mergeMethod || \"squash\",\n commit_title: options.commitTitle,\n commit_message: options.commitMessage,\n });\n\n return {\n sha: data.sha,\n merged: data.merged,\n };\n }\n\n // ==========================================================================\n // Repositories\n // ==========================================================================\n\n /**\n * Create a new repository (personal or in an organization)\n */\n async createRepository(options: CreateRepoOptions): Promise<GitHubRepo> {\n let data: {\n id: number;\n name: string;\n full_name: string;\n html_url: string;\n private: boolean;\n default_branch?: string | null;\n };\n\n if (options.org) {\n // Create in organization\n const response = await this.octokit.repos.createInOrg({\n org: options.org,\n name: options.name,\n description: options.description,\n private: options.private ?? false,\n auto_init: options.autoInit ?? false,\n });\n data = response.data;\n } else {\n // Create for authenticated user\n const response = await this.octokit.repos.createForAuthenticatedUser({\n name: options.name,\n description: options.description,\n private: options.private ?? false,\n auto_init: options.autoInit ?? false,\n });\n data = response.data;\n }\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * List organizations the authenticated user belongs to\n */\n async listOrganizations(): Promise<GitHubOrganization[]> {\n const query = `\n query {\n viewer {\n organizations(first: 100) {\n nodes {\n id\n databaseId\n login\n name\n }\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n viewer: {\n organizations: {\n nodes: Array<{\n id: string;\n databaseId: number;\n login: string;\n name: string | null;\n }>;\n };\n };\n }>(query);\n\n return result.viewer.organizations.nodes.map((org) => ({\n id: String(org.databaseId),\n nodeId: org.id,\n login: org.login,\n name: org.name,\n }));\n }\n\n /**\n * Get repository details\n */\n async getRepository(owner?: string, repo?: string): Promise<GitHubRepo> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.repos.get(params);\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * List repositories for the authenticated user\n */\n async listUserRepos(\n options: { type?: \"all\" | \"owner\" | \"member\"; limit?: number } = {}\n ): Promise<GitHubRepo[]> {\n const { data } = await this.octokit.repos.listForAuthenticatedUser({\n type: options.type || \"owner\",\n per_page: options.limit || 30,\n sort: \"updated\",\n });\n\n return data.map((repo) => ({\n id: repo.id,\n name: repo.name,\n fullName: repo.full_name,\n url: repo.html_url,\n private: repo.private,\n defaultBranch: repo.default_branch || \"main\",\n }));\n }\n\n // ==========================================================================\n // Projects (GraphQL required for Projects V2)\n // ==========================================================================\n\n /**\n * List projects for the authenticated user\n * Note: Projects V2 requires GraphQL API\n */\n async listUserProjects(limit = 20): Promise<GitHubProject[]> {\n const query = `\n query($first: Int!) {\n viewer {\n projectsV2(first: $first) {\n nodes {\n id\n number\n title\n url\n }\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n viewer: {\n projectsV2: {\n nodes: Array<{\n id: string;\n number: number;\n title: string;\n url: string;\n }>;\n };\n };\n }>(query, { first: limit });\n\n return result.viewer.projectsV2.nodes;\n }\n\n /**\n * Get project by number for a user\n */\n async getUserProject(userLogin: string, projectNumber: number): Promise<GitHubProject | null> {\n const query = `\n query($login: String!, $number: Int!) {\n user(login: $login) {\n projectV2(number: $number) {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n user: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n } | null;\n };\n }>(query, { login: userLogin, number: projectNumber });\n\n return result.user.projectV2;\n } catch {\n return null;\n }\n }\n\n /**\n * Get project by number for an organization\n */\n async getOrgProject(orgLogin: string, projectNumber: number): Promise<GitHubProject | null> {\n const query = `\n query($login: String!, $number: Int!) {\n organization(login: $login) {\n projectV2(number: $number) {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n organization: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n } | null;\n };\n }>(query, { login: orgLogin, number: projectNumber });\n\n return result.organization.projectV2;\n } catch {\n return null;\n }\n }\n\n /**\n * List projects for an organization\n */\n async listOrgProjects(orgLogin: string, limit = 20): Promise<GitHubProject[]> {\n const query = `\n query($login: String!, $first: Int!) {\n organization(login: $login) {\n projectsV2(first: $first) {\n nodes {\n id\n number\n title\n url\n }\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n organization: {\n projectsV2: {\n nodes: Array<{\n id: string;\n number: number;\n title: string;\n url: string;\n }>;\n };\n };\n }>(query, { login: orgLogin, first: limit });\n\n return result.organization.projectsV2.nodes;\n } catch {\n return [];\n }\n }\n\n /**\n * Create a new project\n */\n async createProject(options: CreateProjectOptions): Promise<GitHubProject> {\n // First get the owner's node ID\n let ownerId: string;\n\n if (options.isOrg) {\n const query = `\n query($login: String!) {\n organization(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n organization: { id: string };\n }>(query, { login: options.ownerLogin });\n ownerId = result.organization.id;\n } else {\n const query = `\n query($login: String!) {\n user(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n user: { id: string };\n }>(query, { login: options.ownerLogin });\n ownerId = result.user.id;\n }\n\n // Create the project\n const mutation = `\n mutation($ownerId: ID!, $title: String!) {\n createProjectV2(input: { ownerId: $ownerId, title: $title }) {\n projectV2 {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n createProjectV2: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n };\n };\n }>(mutation, { ownerId, title: options.title });\n\n return result.createProjectV2.projectV2;\n }\n\n /**\n * Copy an existing project\n */\n async copyProject(options: CopyProjectOptions): Promise<GitHubProject> {\n // Get source project's node ID\n let sourceProject: GitHubProject | null;\n if (options.sourceIsOrg) {\n sourceProject = await this.getOrgProject(\n options.sourceOwnerLogin,\n options.sourceProjectNumber\n );\n } else {\n sourceProject = await this.getUserProject(\n options.sourceOwnerLogin,\n options.sourceProjectNumber\n );\n }\n\n if (!sourceProject) {\n throw new Error(\n `Source project #${options.sourceProjectNumber} not found for ${options.sourceOwnerLogin}`\n );\n }\n\n // Get target owner's node ID\n let targetOwnerId: string;\n if (options.targetIsOrg) {\n const query = `\n query($login: String!) {\n organization(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n organization: { id: string };\n }>(query, { login: options.targetOwnerLogin });\n targetOwnerId = result.organization.id;\n } else {\n const query = `\n query($login: String!) {\n user(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n user: { id: string };\n }>(query, { login: options.targetOwnerLogin });\n targetOwnerId = result.user.id;\n }\n\n // Copy the project\n const mutation = `\n mutation($projectId: ID!, $ownerId: ID!, $title: String!, $includeDraftIssues: Boolean) {\n copyProjectV2(input: { \n projectId: $projectId, \n ownerId: $ownerId, \n title: $title,\n includeDraftIssues: $includeDraftIssues\n }) {\n projectV2 {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n copyProjectV2: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n };\n };\n }>(mutation, {\n projectId: sourceProject.id,\n ownerId: targetOwnerId,\n title: options.title,\n includeDraftIssues: options.includeDraftIssues ?? false,\n });\n\n return result.copyProjectV2.projectV2;\n }\n\n /**\n * Link a repository to a project\n * Note: This creates a linked repository in the project\n */\n async linkRepoToProject(projectId: string, repoOwner: string, repoName: string): Promise<void> {\n // First get the repository's node ID\n const { data: repoData } = await this.octokit.repos.get({\n owner: repoOwner,\n repo: repoName,\n });\n\n const mutation = `\n mutation($projectId: ID!, $repositoryId: ID!) {\n linkProjectV2ToRepository(input: { projectId: $projectId, repositoryId: $repositoryId }) {\n repository {\n id\n }\n }\n }\n `;\n\n await this.octokit.graphql(mutation, {\n projectId,\n repositoryId: repoData.node_id,\n });\n }\n\n /**\n * Add an issue to a project\n */\n async addIssueToProject(projectId: string, issueNodeId: string): Promise<string> {\n const mutation = `\n mutation($projectId: ID!, $contentId: ID!) {\n addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {\n item {\n id\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n addProjectV2ItemById: {\n item: {\n id: string;\n };\n };\n }>(mutation, {\n projectId,\n contentId: issueNodeId,\n });\n\n return result.addProjectV2ItemById.item.id;\n }\n\n // ==========================================================================\n // Branch Protection / Rulesets\n // ==========================================================================\n\n /**\n * Create a branch ruleset with common protection rules\n */\n async createBranchRuleset(\n options: {\n name: string;\n enforcement: \"active\" | \"disabled\" | \"evaluate\";\n targetBranches: string[];\n requirePullRequest?: boolean;\n requiredApprovals?: number;\n requireCodeOwnerReview?: boolean;\n dismissStaleReviews?: boolean;\n requireSignedCommits?: boolean;\n requireLinearHistory?: boolean;\n preventDeletion?: boolean;\n preventForcePush?: boolean;\n },\n owner?: string,\n repo?: string\n ): Promise<{ id: number }> {\n const params = this.getRepoParams(owner, repo);\n\n // Build rules array based on options\n const rules: Array<\n | { type: \"deletion\" }\n | { type: \"non_fast_forward\" }\n | { type: \"required_linear_history\" }\n | { type: \"required_signatures\" }\n | {\n type: \"pull_request\";\n parameters: {\n dismiss_stale_reviews_on_push: boolean;\n require_code_owner_review: boolean;\n require_last_push_approval: boolean;\n required_approving_review_count: number;\n required_review_thread_resolution: boolean;\n };\n }\n > = [];\n\n if (options.requirePullRequest) {\n rules.push({\n type: \"pull_request\",\n parameters: {\n dismiss_stale_reviews_on_push: options.dismissStaleReviews ?? false,\n require_code_owner_review: options.requireCodeOwnerReview ?? false,\n require_last_push_approval: false,\n required_approving_review_count: options.requiredApprovals ?? 1,\n required_review_thread_resolution: false,\n },\n });\n }\n\n if (options.requireSignedCommits) {\n rules.push({ type: \"required_signatures\" });\n }\n\n if (options.requireLinearHistory) {\n rules.push({ type: \"required_linear_history\" });\n }\n\n if (options.preventDeletion) {\n rules.push({ type: \"deletion\" });\n }\n\n if (options.preventForcePush) {\n rules.push({ type: \"non_fast_forward\" });\n }\n\n const { data } = await this.octokit.repos.createRepoRuleset({\n ...params,\n name: options.name,\n enforcement: options.enforcement,\n conditions: {\n ref_name: {\n include: options.targetBranches,\n exclude: [],\n },\n },\n rules,\n });\n\n return { id: data.id };\n }\n\n // ==========================================================================\n // Utility Methods\n // ==========================================================================\n\n /**\n * Get the authenticated user's login\n */\n async getAuthenticatedUser(): Promise<{ login: string; id: number }> {\n const { data } = await this.octokit.users.getAuthenticated();\n return { login: data.login, id: data.id };\n }\n\n /**\n * Check if a repository exists\n */\n async repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n await this.octokit.repos.get({ owner, repo });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a GitHub client with optional configuration\n */\nexport function createGitHubClient(options: GitHubClientOptions = {}): GitHubClient {\n return new GitHubClient(options);\n}\n\n/**\n * Create a GitHub client if authentication is available, otherwise return null\n */\nexport function createGitHubClientIfAuthenticated(\n options: GitHubClientOptions = {}\n): GitHubClient | null {\n if (!isGitHubAuthenticated(options.token)) {\n return null;\n }\n try {\n return new GitHubClient(options);\n } catch {\n return null;\n }\n}\n","/**\n * Git Remote Detection Utilities\n *\n * Detect existing git remotes to auto-populate GitHub configuration.\n */\n\nimport { execSync } from \"node:child_process\";\n\nexport interface GitRemoteInfo {\n owner: string;\n repo: string;\n url: string;\n}\n\n/**\n * Parse a GitHub URL (HTTPS or SSH) into owner and repo\n */\nexport function parseGitHubUrl(url: string): GitRemoteInfo | null {\n // HTTPS: https://github.com/owner/repo.git\n const httpsMatch = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (httpsMatch) {\n return {\n owner: httpsMatch[1],\n repo: httpsMatch[2],\n url,\n };\n }\n\n // SSH: git@github.com:owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (sshMatch) {\n return {\n owner: sshMatch[1],\n repo: sshMatch[2],\n url,\n };\n }\n\n return null;\n}\n\n/**\n * Get the origin remote URL from the current git repository\n */\nexport function getOriginRemoteUrl(cwd?: string): string | null {\n try {\n const url = execSync(\"git remote get-url origin\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return url || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Detect GitHub repo info from the current git repository's origin remote\n */\nexport function detectGitHubRepo(cwd?: string): GitRemoteInfo | null {\n const url = getOriginRemoteUrl(cwd);\n if (!url) return null;\n return parseGitHubUrl(url);\n}\n\n/**\n * Check if we're in a git repository\n */\nexport function isGitRepository(cwd?: string): boolean {\n try {\n execSync(\"git rev-parse --git-dir\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialize a git repository\n */\nexport function initGitRepo(cwd?: string): boolean {\n try {\n execSync(\"git init\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Add a remote to the git repository\n */\nexport function addGitRemote(name: string, url: string, cwd?: string): boolean {\n try {\n execSync(`git remote add ${name} ${url}`, {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the current branch name\n */\nexport function getCurrentBranch(cwd?: string): string | null {\n try {\n const branch = execSync(\"git branch --show-current\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return branch || null;\n } catch {\n return null;\n }\n}\n","/**\n * Smart GitHub Integration\n *\n * Intelligent GitHub setup that:\n * - Detects existing git remotes\n * - Offers to create new repos (personal or org)\n * - Creates/copies project boards via API\n * - Configures branch rulesets\n */\n\nimport { confirm, input, number, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport {\n type GitHubClient,\n type GitHubOrganization,\n createGitHubClientIfAuthenticated,\n isGitHubAuthenticated,\n} from \"../../shared/github-client.js\";\nimport type { GitHubConfig, GitHubStatus } from \"../../shared/types.js\";\nimport {\n addGitRemote,\n detectGitHubRepo,\n initGitRepo,\n isGitRepository,\n} from \"../utils/git-remote.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SmartGitHubResult {\n enabled: boolean;\n config?: GitHubConfig;\n repoCreated?: boolean;\n projectCreated?: boolean;\n rulesetsCreated?: boolean;\n}\n\ninterface RepoChoice {\n action: \"existing\" | \"create-public\" | \"create-private\" | \"skip\";\n owner?: string;\n repo?: string;\n}\n\ninterface ProjectChoice {\n action: \"existing\" | \"create-blank\" | \"copy\" | \"skip\";\n projectNumber?: number;\n projectTitle?: string;\n}\n\ninterface OwnerChoice {\n login: string;\n isOrg: boolean;\n name: string;\n}\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nconst DEFAULT_STATUSES: GitHubStatus[] = [\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"];\n\n// ============================================================================\n// Main Function\n// ============================================================================\n\n/**\n * Smart GitHub integration setup\n *\n * Detects existing setup and offers to create missing pieces.\n */\nexport async function setupSmartGitHub(cwd: string): Promise<SmartGitHubResult> {\n // Check if user wants GitHub integration\n const wantGitHub = await confirm({\n message: \"Enable GitHub integration for issue tracking?\",\n default: true,\n });\n\n if (!wantGitHub) {\n return { enabled: false };\n }\n\n // Check authentication\n if (!isGitHubAuthenticated()) {\n console.log(chalk.yellow(\"\\n⚠ GitHub authentication not found.\"));\n console.log(\" Run 'gh auth login' or set GITHUB_TOKEN environment variable.\\n\");\n\n const continueWithoutAuth = await confirm({\n message: \"Continue with manual configuration (no auto-detection)?\",\n default: true,\n });\n\n if (!continueWithoutAuth) {\n return { enabled: false };\n }\n\n // Fall back to manual config\n return manualGitHubConfig();\n }\n\n // Create client for API operations\n const client = createGitHubClientIfAuthenticated();\n if (!client) {\n console.log(chalk.yellow(\"\\n⚠ Could not create GitHub client.\\n\"));\n return manualGitHubConfig();\n }\n\n // Get authenticated user info and organizations\n let userLogin: string;\n let orgs: GitHubOrganization[] = [];\n try {\n const user = await client.getAuthenticatedUser();\n userLogin = user.login;\n console.log(chalk.green(`\\n✓ Authenticated as ${userLogin}`));\n\n // Get organizations\n orgs = await client.listOrganizations();\n if (orgs.length > 0) {\n console.log(chalk.dim(` Organizations: ${orgs.map((o) => o.login).join(\", \")}`));\n }\n console.log();\n } catch (error) {\n console.log(chalk.yellow(\"\\n⚠ Could not verify GitHub authentication.\\n\"));\n return manualGitHubConfig();\n }\n\n // Detect or setup repository\n const repoResult = await setupRepository(client, userLogin, orgs, cwd);\n if (repoResult.action === \"skip\") {\n return { enabled: false };\n }\n\n const { owner, repo } = repoResult;\n if (!owner || !repo) {\n return { enabled: false };\n }\n\n // Set repo on client for subsequent operations\n client.setRepo(owner, repo);\n\n // Determine if owner is an org\n const ownerIsOrg = orgs.some((o) => o.login === owner);\n\n // Setup project board\n const projectResult = await setupProjectBoard(client, userLogin, owner, ownerIsOrg, orgs);\n\n // Setup branch rulesets (optional)\n let rulesetsCreated = false;\n const wantRulesets = await confirm({\n message: \"Configure branch protection rules for main branch?\",\n default: false,\n });\n\n if (wantRulesets) {\n rulesetsCreated = await setupBranchRulesets(client, owner, repo);\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project: projectResult.projectNumber,\n statuses: DEFAULT_STATUSES,\n },\n repoCreated: repoResult.action === \"create-public\" || repoResult.action === \"create-private\",\n projectCreated: projectResult.action === \"create-blank\" || projectResult.action === \"copy\",\n rulesetsCreated,\n };\n}\n\n// ============================================================================\n// Owner Selection\n// ============================================================================\n\nasync function selectOwner(\n userLogin: string,\n orgs: GitHubOrganization[],\n prompt: string\n): Promise<OwnerChoice> {\n const choices: Array<{ value: OwnerChoice; name: string; description?: string }> = [\n {\n value: { login: userLogin, isOrg: false, name: userLogin },\n name: `${userLogin} (personal)`,\n description: \"Your personal account\",\n },\n ...orgs.map((org) => ({\n value: { login: org.login, isOrg: true, name: org.name || org.login },\n name: org.login,\n description: org.name || \"Organization\",\n })),\n ];\n\n if (choices.length === 1) {\n // Only personal account available\n return choices[0].value;\n }\n\n return await select({\n message: prompt,\n choices,\n });\n}\n\n// ============================================================================\n// Repository Setup\n// ============================================================================\n\nasync function setupRepository(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[],\n cwd: string\n): Promise<RepoChoice> {\n // Check for existing git repo and remote\n const isGitRepo = isGitRepository(cwd);\n const existingRemote = isGitRepo ? detectGitHubRepo(cwd) : null;\n\n if (existingRemote) {\n console.log(chalk.dim(` Detected remote: ${existingRemote.owner}/${existingRemote.repo}`));\n\n const useExisting = await confirm({\n message: `Use existing repository ${existingRemote.owner}/${existingRemote.repo}?`,\n default: true,\n });\n\n if (useExisting) {\n return {\n action: \"existing\",\n owner: existingRemote.owner,\n repo: existingRemote.repo,\n };\n }\n }\n\n // No existing remote or user wants different repo\n const repoAction = await select({\n message: \"Repository setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Connect to existing GitHub repository\",\n description: \"Enter owner/repo for an existing repository\",\n },\n {\n value: \"create-private\" as const,\n name: \"Create new private repository\",\n description: \"Create a new private repo on GitHub\",\n },\n {\n value: \"create-public\" as const,\n name: \"Create new public repository\",\n description: \"Create a new public repo on GitHub\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip GitHub integration\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (repoAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (repoAction === \"existing\") {\n return await connectExistingRepo(client);\n }\n\n // Create new repository\n return await createNewRepo(\n client,\n userLogin,\n orgs,\n repoAction === \"create-private\",\n cwd,\n isGitRepo\n );\n}\n\nasync function connectExistingRepo(client: GitHubClient): Promise<RepoChoice> {\n const ownerRepo = await input({\n message: \"Repository (owner/repo or just repo for personal):\",\n validate: (v) => (v.trim() ? true : \"Repository is required\"),\n });\n\n // Parse owner/repo\n let owner: string;\n let repo: string;\n\n if (ownerRepo.includes(\"/\")) {\n [owner, repo] = ownerRepo.split(\"/\", 2);\n } else {\n // Get current user as default owner\n try {\n const user = await client.getAuthenticatedUser();\n owner = user.login;\n repo = ownerRepo;\n } catch {\n console.log(chalk.yellow(\"\\n⚠ Could not determine owner. Please use owner/repo format.\\n\"));\n return { action: \"skip\" };\n }\n }\n\n // Verify repo exists\n try {\n const exists = await client.repoExists(owner, repo);\n if (!exists) {\n console.log(chalk.yellow(`\\n⚠ Repository ${owner}/${repo} not found.\\n`));\n return { action: \"skip\" };\n }\n console.log(chalk.green(`✓ Found repository ${owner}/${repo}`));\n } catch {\n console.log(chalk.yellow(\"\\n⚠ Could not verify repository.\\n\"));\n }\n\n return { action: \"existing\", owner, repo };\n}\n\nasync function createNewRepo(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[],\n isPrivate: boolean,\n cwd: string,\n isGitRepo: boolean\n): Promise<RepoChoice> {\n // Select owner (personal or org)\n const ownerChoice = await selectOwner(userLogin, orgs, \"Create repository under:\");\n\n const repoName = await input({\n message: \"New repository name:\",\n validate: (v) => {\n if (!v.trim()) return \"Repository name is required\";\n if (!/^[a-zA-Z0-9._-]+$/.test(v)) return \"Invalid repository name\";\n return true;\n },\n });\n\n const description = await input({\n message: \"Repository description (optional):\",\n default: \"\",\n });\n\n try {\n console.log(\n chalk.dim(\n `\\n Creating ${isPrivate ? \"private\" : \"public\"} repository in ${ownerChoice.login}...`\n )\n );\n\n const newRepo = await client.createRepository({\n name: repoName,\n description: description || undefined,\n private: isPrivate,\n autoInit: !isGitRepo, // Only auto-init if no local git repo\n org: ownerChoice.isOrg ? ownerChoice.login : undefined,\n });\n\n console.log(chalk.green(`✓ Created repository: ${newRepo.url}\\n`));\n\n // Add remote if local git repo exists\n const remoteUrl = `git@github.com:${ownerChoice.login}/${repoName}.git`;\n\n if (isGitRepo) {\n const added = addGitRemote(\"origin\", remoteUrl, cwd);\n if (added) {\n console.log(chalk.green(\"✓ Added git remote 'origin'\"));\n }\n } else {\n // Initialize git repo and add remote\n const initialized = initGitRepo(cwd);\n if (initialized) {\n console.log(chalk.green(\"✓ Initialized git repository\"));\n addGitRemote(\"origin\", remoteUrl, cwd);\n console.log(chalk.green(\"✓ Added git remote 'origin'\"));\n }\n }\n\n return {\n action: isPrivate ? \"create-private\" : \"create-public\",\n owner: ownerChoice.login,\n repo: repoName,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to create repository: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\n// ============================================================================\n// Project Board Setup\n// ============================================================================\n\nasync function setupProjectBoard(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n const wantProject = await confirm({\n message: \"Use a GitHub Project board for issue status tracking?\",\n default: true,\n });\n\n if (!wantProject) {\n return { action: \"skip\" };\n }\n\n const projectAction = await select({\n message: \"Project board setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Link existing project\",\n description: \"Select from your projects or enter project number\",\n },\n {\n value: \"create-blank\" as const,\n name: \"Create new blank project\",\n description: \"Create a new empty project\",\n },\n {\n value: \"copy\" as const,\n name: \"Copy from existing project\",\n description: \"Copy structure from another project (yours or a template)\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip project board\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (projectAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (projectAction === \"existing\") {\n return await linkExistingProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n }\n\n if (projectAction === \"copy\") {\n return await copyExistingProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n }\n\n // Create new blank project\n return await createNewProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n}\n\nasync function linkExistingProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Show available projects\n await showAvailableProjects(client, userLogin, orgs);\n\n // Ask for owner and project number\n const projectOwner = await input({\n message: \"Project owner (user or org, leave empty for repo owner):\",\n default: repoOwner,\n });\n\n const projectNum = await number({\n message: \"Project number (from project URL):\",\n min: 1,\n validate: (v) => (v && v >= 1 ? true : \"Project number required\"),\n });\n\n if (!projectNum) {\n return { action: \"skip\" };\n }\n\n // Determine if owner is an org\n const ownerIsOrg =\n projectOwner === repoOwner ? repoOwnerIsOrg : orgs.some((o) => o.login === projectOwner);\n\n // Verify project exists\n try {\n const project = ownerIsOrg\n ? await client.getOrgProject(projectOwner, projectNum)\n : await client.getUserProject(projectOwner, projectNum);\n\n if (project) {\n console.log(chalk.green(`✓ Found project: ${project.title}`));\n return { action: \"existing\", projectNumber: projectNum };\n }\n console.log(chalk.yellow(`\\n⚠ Project #${projectNum} not found for ${projectOwner}\\n`));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.yellow(`\\n⚠ Could not verify project: ${message}\\n`));\n }\n\n return { action: \"existing\", projectNumber: projectNum };\n}\n\nasync function createNewProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Select owner for the new project\n const ownerChoice = await selectOwner(userLogin, orgs, \"Create project under:\");\n\n const projectTitle = await input({\n message: \"Project title:\",\n default: \"Project Board\",\n validate: (v) => (v.trim() ? true : \"Title is required\"),\n });\n\n try {\n console.log(chalk.dim(`\\n Creating project \"${projectTitle}\" in ${ownerChoice.login}...`));\n\n const project = await client.createProject({\n title: projectTitle,\n ownerLogin: ownerChoice.login,\n isOrg: ownerChoice.isOrg,\n });\n\n console.log(chalk.green(`✓ Created project: ${project.title} (#${project.number})`));\n console.log(chalk.dim(` URL: ${project.url}\\n`));\n\n return {\n action: \"create-blank\",\n projectNumber: project.number,\n projectTitle: project.title,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to create project: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\nasync function copyExistingProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Show available projects to copy from\n console.log(chalk.dim(\"\\n Available projects to copy from:\\n\"));\n await showAvailableProjects(client, userLogin, orgs);\n\n // Get source project info\n const sourceOwner = await input({\n message: \"Source project owner (user or org):\",\n default: userLogin,\n });\n\n const sourceProjectNum = await number({\n message: \"Source project number to copy:\",\n min: 1,\n validate: (v) => (v && v >= 1 ? true : \"Project number required\"),\n });\n\n if (!sourceProjectNum) {\n return { action: \"skip\" };\n }\n\n // Select target owner\n const targetOwnerChoice = await selectOwner(userLogin, orgs, \"Create copied project under:\");\n\n const projectTitle = await input({\n message: \"Title for new project:\",\n default: \"Project Board (copy)\",\n validate: (v) => (v.trim() ? true : \"Title is required\"),\n });\n\n const includeDrafts = await confirm({\n message: \"Include draft issues from source project?\",\n default: false,\n });\n\n // Determine if source owner is an org\n const sourceIsOrg = sourceOwner !== userLogin && orgs.some((o) => o.login === sourceOwner);\n\n try {\n console.log(\n chalk.dim(\n `\\n Copying project #${sourceProjectNum} from ${sourceOwner} to ${targetOwnerChoice.login}...`\n )\n );\n\n const project = await client.copyProject({\n sourceProjectNumber: sourceProjectNum,\n sourceOwnerLogin: sourceOwner,\n sourceIsOrg,\n targetOwnerLogin: targetOwnerChoice.login,\n targetIsOrg: targetOwnerChoice.isOrg,\n title: projectTitle,\n includeDraftIssues: includeDrafts,\n });\n\n console.log(chalk.green(`✓ Copied project: ${project.title} (#${project.number})`));\n console.log(chalk.dim(` URL: ${project.url}\\n`));\n\n return {\n action: \"copy\",\n projectNumber: project.number,\n projectTitle: project.title,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to copy project: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\nasync function showAvailableProjects(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[]\n): Promise<void> {\n // Show user's projects\n try {\n const userProjects = await client.listUserProjects(10);\n if (userProjects.length > 0) {\n console.log(chalk.dim(` ${userLogin} (personal):`));\n for (const p of userProjects) {\n console.log(chalk.dim(` #${p.number}: ${p.title}`));\n }\n }\n } catch {\n // Ignore\n }\n\n // Show org projects\n for (const org of orgs.slice(0, 3)) {\n // Limit to first 3 orgs\n try {\n const orgProjects = await client.listOrgProjects(org.login, 5);\n if (orgProjects.length > 0) {\n console.log(chalk.dim(` ${org.login}:`));\n for (const p of orgProjects) {\n console.log(chalk.dim(` #${p.number}: ${p.title}`));\n }\n }\n } catch {\n // Ignore - might not have permission\n }\n }\n console.log();\n}\n\n// ============================================================================\n// Branch Rulesets\n// ============================================================================\n\nasync function setupBranchRulesets(\n client: GitHubClient,\n owner: string,\n repo: string\n): Promise<boolean> {\n console.log(chalk.dim(\"\\n Configuring branch protection for 'main'...\\n\"));\n\n const requirePR = await confirm({\n message: \"Require pull requests for changes?\",\n default: true,\n });\n\n let requiredApprovals = 0;\n if (requirePR) {\n requiredApprovals =\n (await number({\n message: \"Required approvals (0 for none):\",\n default: 0,\n min: 0,\n max: 10,\n })) ?? 0;\n }\n\n const requireSignedCommits = await confirm({\n message: \"Require signed commits?\",\n default: false,\n });\n\n const preventForcePush = await confirm({\n message: \"Prevent force pushes?\",\n default: true,\n });\n\n try {\n await client.createBranchRuleset(\n {\n name: \"main-protection\",\n enforcement: \"active\",\n targetBranches: [\"refs/heads/main\", \"refs/heads/master\"],\n requirePullRequest: requirePR,\n requiredApprovals,\n requireSignedCommits,\n preventForcePush,\n preventDeletion: true,\n },\n owner,\n repo\n );\n\n console.log(chalk.green(\"\\n✓ Created branch ruleset 'main-protection'\\n\"));\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.yellow(`\\n⚠ Could not create ruleset: ${message}`));\n console.log(\" You may need admin permissions or GitHub Pro/Team.\\n\");\n return false;\n }\n}\n\n// ============================================================================\n// Fallback Manual Config\n// ============================================================================\n\nasync function manualGitHubConfig(): Promise<SmartGitHubResult> {\n const ownerRepo = await input({\n message: \"GitHub repository (owner/repo):\",\n validate: (v) => {\n if (!v.trim()) return \"Repository is required\";\n if (!v.includes(\"/\")) return \"Please use owner/repo format\";\n return true;\n },\n });\n\n const [owner, repo] = ownerRepo.split(\"/\", 2);\n\n const useProject = await confirm({\n message: \"Use a GitHub Project board?\",\n default: false,\n });\n\n let project: number | undefined;\n if (useProject) {\n project =\n (await number({\n message: \"Project number:\",\n min: 1,\n })) ?? undefined;\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project,\n statuses: DEFAULT_STATUSES,\n },\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\n\nexport interface LoadedConfigs {\n sdlc: Record<string, unknown> | null;\n sdlcValid: boolean;\n sdlcVersion: string | null;\n omo: Record<string, unknown> | null;\n omoValid: boolean;\n opencode: Record<string, unknown> | null;\n opencodeValid: boolean;\n}\n\nexport function loadExistingConfigs(): LoadedConfigs {\n const result: LoadedConfigs = {\n sdlc: null,\n sdlcValid: false,\n sdlcVersion: null,\n omo: null,\n omoValid: false,\n opencode: null,\n opencodeValid: false,\n };\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n result.sdlc = JSON.parse(content);\n result.sdlcVersion = (result.sdlc?.version as string) || \"0.0.1\";\n result.sdlcValid = result.sdlc !== null && typeof result.sdlc.version === \"string\";\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOmoConfig, \"utf-8\");\n result.omo = JSON.parse(content);\n result.omoValid = result.omo !== null;\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOpencodeConfig, \"utf-8\");\n result.opencode = JSON.parse(content);\n result.opencodeValid = result.opencode !== null;\n } catch {}\n }\n\n return result;\n}\n\nexport function extractSubscriptions(sdlc: Record<string, unknown>): SubscriptionAnswers | null {\n try {\n const subs = sdlc.subscriptions as Record<string, unknown> | undefined;\n if (!subs) return null;\n\n const claude = subs.claude as Record<string, unknown> | undefined;\n const openai = subs.openai as Record<string, unknown> | undefined;\n const google = subs.google as Record<string, unknown> | undefined;\n const copilot = subs.githubCopilot as Record<string, unknown> | undefined;\n\n // Infer auth method from tier for backward compatibility\n const claudeTier = (claude?.tier as SubscriptionAnswers[\"claudeTier\"]) || \"none\";\n const claudeAuth =\n (claude?.authMethod as SubscriptionAnswers[\"claudeAuth\"]) ||\n (claudeTier !== \"none\" ? \"subscription\" : \"none\");\n\n const openaiAuth =\n (openai?.authMethod as SubscriptionAnswers[\"openaiAuth\"]) ||\n (openai?.enabled === true ? \"subscription\" : \"none\");\n\n return {\n hasClaude: claude?.enabled === true,\n claudeAuth,\n claudeTier,\n hasOpenAI: openai?.enabled === true,\n openaiAuth,\n hasGoogle: google?.enabled === true,\n googleAuth: (google?.authMethod as SubscriptionAnswers[\"googleAuth\"]) || \"none\",\n hasGitHubCopilot: copilot?.enabled === true,\n copilotPlan: (copilot?.plan as SubscriptionAnswers[\"copilotPlan\"]) || \"none\",\n copilotEnabledModels: (copilot?.enabledModels as string[]) || [],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractModels(sdlc: Record<string, unknown>): ModelAnswers | null {\n try {\n const models = sdlc.models as Record<string, unknown> | undefined;\n if (!models) return null;\n\n return {\n marvin: (models.marvin as string) || \"\",\n oracle: (models.oracle as string) || \"\",\n librarian: (models.librarian as string) || \"\",\n frontend: models.frontend as string | undefined,\n documentWriter: models.documentWriter as string | undefined,\n multimodalLooker: models.multimodalLooker as string | undefined,\n explore: models.explore as string | undefined,\n settings: models.settings as ModelAnswers[\"settings\"],\n custom: models.custom as ModelAnswers[\"custom\"],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractMethodology(sdlc: Record<string, unknown>): MethodologyAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n if (!bmad) return null;\n\n return {\n defaultTrack: (bmad.defaultTrack as MethodologyAnswers[\"defaultTrack\"]) || \"bmad-method\",\n autoStatusUpdate: bmad.autoStatusUpdate !== false,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractFeatures(sdlc: Record<string, unknown>): FeatureAnswers | null {\n try {\n const features = sdlc.features as Record<string, boolean> | undefined;\n const mcps = sdlc.mcps as Record<string, boolean> | undefined;\n\n if (!features) return null;\n\n const enabledFeatures: string[] = [];\n if (features.autoStatus) enabledFeatures.push(\"auto-status\");\n if (features.parallelExecution) enabledFeatures.push(\"parallel\");\n if (features.notifications) enabledFeatures.push(\"notifications\");\n if (features.contextMonitor) enabledFeatures.push(\"context-monitor\");\n if (features.commentChecker) enabledFeatures.push(\"comment-checker\");\n if (features.lspTools) enabledFeatures.push(\"lsp-tools\");\n\n const mcpList: string[] = [];\n if (mcps?.context7) mcpList.push(\"context7\");\n if (mcps?.exa) mcpList.push(\"exa\");\n if (mcps?.grepApp) mcpList.push(\"grep_app\");\n\n return {\n enabledFeatures,\n mcps: mcpList,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractAdvanced(sdlc: Record<string, unknown>): AdvancedAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n\n return {\n parallelIssueLimit: (bmad?.parallelIssueLimit as number) || 0,\n experimental: [],\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Detect features that were added after the user's current version.\n *\n * MAINTENANCE NOTE: When adding new features that require user opt-in during upgrade,\n * add a check here for the feature field being undefined. This function is called\n * during the upgrade flow to prompt users about new features.\n *\n * Example: If adding a new feature \"enableAwesomeFeature\" in version 0.7.0:\n * if (features?.enableAwesomeFeature === undefined) {\n * newFeatures.push(\"enableAwesomeFeature\");\n * }\n */\nexport function detectNewFeatures(existingSdlc: Record<string, unknown>): string[] {\n const newFeatures: string[] = [];\n\n const features = existingSdlc.features as Record<string, unknown> | undefined;\n\n if (features?.autoGitOperations === undefined) {\n newFeatures.push(\"autoGitOperations\");\n }\n\n return newFeatures;\n}\n","import { copyFileSync, existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"../generators/omo-config.js\";\nimport { generateSdlcConfig } from \"../generators/sdlc-config.js\";\n\nexport interface MergeOptions {\n existingSdlc: Record<string, unknown>;\n existingOmo: Record<string, unknown>;\n fullAnswers: InstallAnswers;\n}\n\nexport interface MergedConfigs {\n sdlc: Record<string, unknown>;\n omo: Record<string, unknown>;\n opencode?: Record<string, unknown>;\n}\n\nexport interface BackupResult {\n sdlcBackup: string | null;\n omoBackup: string | null;\n opencodeBackup: string | null;\n}\n\nexport function deepMerge(\n baseObj: Record<string, unknown>,\n newObj: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...baseObj };\n\n for (const [key, value] of Object.entries(newObj)) {\n if (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof result[key] === \"object\" &&\n result[key] !== null &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMerge(\n result[key] as Record<string, unknown>,\n value as Record<string, unknown>\n );\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nexport function mergeConfigs(\n options: MergeOptions,\n existingOpencode?: Record<string, unknown>\n): MergedConfigs {\n const { existingSdlc, fullAnswers } = options;\n\n const freshSdlc = generateSdlcConfig(fullAnswers);\n const freshOmo = generateOmoConfig(fullAnswers);\n\n const mergedSdlc = deepMerge(existingSdlc, freshSdlc);\n mergedSdlc.version = VERSION;\n\n const result: MergedConfigs = {\n sdlc: mergedSdlc,\n omo: freshOmo,\n };\n\n if (existingOpencode) {\n result.opencode = existingOpencode;\n }\n\n return result;\n}\n\nexport function createBackups(): BackupResult {\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.TZ]/g, \"-\")\n .replace(/--+/g, \"-\")\n .replace(/-$/, \"\");\n const result: BackupResult = {\n sdlcBackup: null,\n omoBackup: null,\n opencodeBackup: null,\n };\n\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n result.sdlcBackup = join(CONFIG_PATHS.backupsDir, `sdlc.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalSdlcConfig, result.sdlcBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n result.omoBackup = join(CONFIG_PATHS.backupsDir, `oh-my-opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOmoConfig, result.omoBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n result.opencodeBackup = join(CONFIG_PATHS.backupsDir, `opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOpencodeConfig, result.opencodeBackup);\n }\n\n return result;\n}\n\nexport function writeMergedConfigs(configs: MergedConfigs): void {\n const sdlcDir = dirname(CONFIG_PATHS.globalSdlcConfig);\n if (!existsSync(sdlcDir)) {\n mkdirSync(sdlcDir, { recursive: true });\n }\n\n writeFileSync(CONFIG_PATHS.globalSdlcConfig, JSON.stringify(configs.sdlc, null, 2), \"utf-8\");\n writeFileSync(CONFIG_PATHS.globalOmoConfig, JSON.stringify(configs.omo, null, 2), \"utf-8\");\n\n if (configs.opencode) {\n writeFileSync(\n CONFIG_PATHS.globalOpencodeConfig,\n JSON.stringify(configs.opencode, null, 2),\n \"utf-8\"\n );\n }\n}\n","import { copyFileSync, existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../../shared/constants.js\";\nimport type { Migration } from \"./types.js\";\n\n/**\n * SDLC Plugin Migrations\n *\n * This is a clean start at v0.3.0. No migrations from previous athena versions.\n * Future migrations for sdlc versions will be added here.\n */\nexport const MIGRATIONS: Migration[] = [\n {\n fromVersion: \"0.0.1\",\n toVersion: \"0.3.0\",\n description: \"Initial SDLC plugin version with Marvin agent and API key auth options\",\n migrateSdlc: (config) => config,\n },\n {\n fromVersion: \"0.3.0\",\n toVersion: \"1.0.0\",\n description: \"Add v1.0 config: modes, memory, TDD updates, classifier model, subagent models\",\n migrateSdlc: (config) => {\n const migrated = { ...config };\n\n // Add modes configuration with defaults\n if (!migrated.modes) {\n migrated.modes = {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n }\n\n // Add memory configuration with defaults\n if (!migrated.memory) {\n migrated.memory = {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n }\n\n // Update TDD configuration with new v1.0 fields\n if (migrated.tdd) {\n const tdd = migrated.tdd as Record<string, unknown>;\n if (tdd.domainVetoEnabled === undefined) {\n tdd.domainVetoEnabled = true;\n }\n if (tdd.debateRounds === undefined) {\n tdd.debateRounds = 2;\n }\n if (tdd.requireVerification === undefined) {\n tdd.requireVerification = true;\n }\n }\n\n // Add classifierModel to routing\n if (migrated.routing) {\n const routing = migrated.routing as Record<string, unknown>;\n if (routing.classifierModel === undefined) {\n routing.classifierModel = \"anthropic/claude-haiku\";\n }\n }\n\n // Add subagents to models with defaults\n if (migrated.models) {\n const models = migrated.models as Record<string, unknown>;\n if (!models.subagents) {\n models.subagents = {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n };\n }\n }\n\n return migrated;\n },\n },\n];\n\nexport interface FileMigrationResult {\n stateFileMoved: boolean;\n backupsMoved: number;\n}\n\nexport function migrateLegacyFiles(): FileMigrationResult {\n const result: FileMigrationResult = {\n stateFileMoved: false,\n backupsMoved: 0,\n };\n\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.legacyStateFile) && !existsSync(CONFIG_PATHS.stateFile)) {\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n copyFileSync(CONFIG_PATHS.legacyStateFile, CONFIG_PATHS.stateFile);\n unlinkSync(CONFIG_PATHS.legacyStateFile);\n result.stateFileMoved = true;\n }\n\n const backupPattern = /\\.(backup-\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{3})$/;\n const configDir = CONFIG_PATHS.globalConfigDir;\n\n if (existsSync(configDir)) {\n const files = readdirSync(configDir);\n const legacyBackups = files.filter((f) => backupPattern.test(f));\n\n if (legacyBackups.length > 0) {\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n for (const backupFile of legacyBackups) {\n const sourcePath = join(configDir, backupFile);\n const destPath = join(CONFIG_PATHS.backupsDir, backupFile);\n\n if (!existsSync(destPath)) {\n renameSync(sourcePath, destPath);\n result.backupsMoved++;\n }\n }\n }\n }\n\n return result;\n}\n","import * as semver from \"semver\";\nimport { VERSION } from \"../../../shared/constants.js\";\nimport { MIGRATIONS } from \"./migrations.js\";\nimport type { Migration, MigrationResult } from \"./types.js\";\n\nexport function migrateConfigs(\n sdlcConfig: Record<string, unknown>,\n omoConfig: Record<string, unknown>,\n fromVersion: string,\n opencodeConfig: Record<string, unknown> = {}\n): MigrationResult {\n const targetVersion = VERSION;\n const migrationsApplied: string[] = [];\n const breakingChangeWarnings: string[] = [];\n let hasBreakingChanges = false;\n\n let currentSdlc = { ...sdlcConfig };\n let currentOmo = { ...omoConfig };\n let currentOpencode = { ...opencodeConfig };\n\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(targetVersion)) || VERSION;\n\n const sortedMigrations = [...MIGRATIONS].sort((a, b) => {\n const aVersion = semver.valid(semver.coerce(a.fromVersion)) || \"0.0.0\";\n const bVersion = semver.valid(semver.coerce(b.fromVersion)) || \"0.0.0\";\n return semver.compare(aVersion, bVersion);\n });\n\n for (const migration of sortedMigrations) {\n const migrationTo = semver.valid(semver.coerce(migration.toVersion)) || \"0.0.0\";\n\n if (semver.lte(migrationTo, normalizedFrom)) continue;\n if (semver.gt(migrationTo, normalizedTarget)) continue;\n\n if (migration.migrateSdlc) {\n currentSdlc = migration.migrateSdlc(currentSdlc);\n }\n if (migration.migrateOmo) {\n currentOmo = migration.migrateOmo(currentOmo);\n }\n if (migration.migrateOpencode) {\n currentOpencode = migration.migrateOpencode(currentOpencode);\n }\n\n migrationsApplied.push(\n `${migration.fromVersion} → ${migration.toVersion}: ${migration.description}`\n );\n\n if (isBreakingMigration(migration)) {\n hasBreakingChanges = true;\n breakingChangeWarnings.push(\n `Migration ${migration.fromVersion} → ${migration.toVersion} contains breaking changes: ${migration.description}`\n );\n }\n }\n\n currentSdlc.version = targetVersion;\n\n return {\n fromVersion,\n toVersion: targetVersion,\n migrationsApplied,\n sdlcConfig: currentSdlc,\n omoConfig: currentOmo,\n opencodeConfig: currentOpencode,\n hasBreakingChanges,\n breakingChangeWarnings,\n };\n}\n\nfunction isBreakingMigration(migration: Migration): boolean {\n const fromMajor = semver.major(semver.coerce(migration.fromVersion) || \"0.0.0\");\n const toMajor = semver.major(semver.coerce(migration.toVersion) || \"0.0.0\");\n return toMajor > fromMajor;\n}\n\nexport function needsMigration(fromVersion: string): boolean {\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(VERSION)) || VERSION;\n\n if (semver.gte(normalizedFrom, normalizedTarget)) {\n return false;\n }\n\n return MIGRATIONS.some((m: Migration) => {\n const migrationTo = semver.valid(semver.coerce(m.toVersion)) || \"0.0.0\";\n\n return semver.gt(migrationTo, normalizedFrom);\n });\n}\n","/**\n * Preset Loader Utility\n *\n * Loads and processes preset configuration files for the CLI installer.\n * Presets provide default values for features, models, and settings.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n} from \"../../shared/types.js\";\n\n/**\n * Preset configuration structure (matches preset JSON files)\n * v1.0.0+ structure with profiles.\n */\nexport interface PresetConfig {\n $schema?: string;\n version: string;\n /** Internal profile identifier */\n name?: string;\n /** User-friendly display name */\n displayName?: string;\n description: string;\n /** Recommended subscriptions - for documentation only, not used as defaults */\n subscriptions: {\n claude: { enabled: boolean; tier: string };\n openai: { enabled: boolean };\n google: { enabled: boolean; authMethod: string };\n githubCopilot?: { enabled: boolean; plan: string };\n };\n models: {\n marvin?: string;\n oracle: string;\n librarian: string;\n frontend?: string;\n documentWriter?: string;\n multimodalLooker?: string;\n explore?: string;\n settings?: Record<string, unknown>;\n };\n // Legacy BMAD configuration (optional in v0.3.0+)\n bmad?: {\n defaultTrack: \"quick-flow\" | \"enterprise\";\n autoStatusUpdate: boolean;\n parallelIssueLimit: number;\n };\n // New v0.3.0+ configurations (optional for backward compatibility)\n tdd?: {\n enabled: boolean;\n verbosity: \"silent\" | \"brief\" | \"explain\";\n bypassPatterns: string[];\n mutationTesting: {\n enabled: boolean;\n requiredScore: number;\n };\n };\n eventModeling?: {\n enabled: boolean;\n outputPath: string;\n };\n git?: {\n workflow: \"standard\" | \"git-spice\";\n requireClean: boolean;\n worktrees: boolean;\n };\n modes?: {\n default: string;\n eventModeling: boolean;\n enabled: string[];\n };\n memory?: {\n backend: \"stateless\" | \"memento\";\n checkpointTtl: number;\n };\n // Features and MCPs support both old and new structures\n features: Record<string, boolean>;\n mcps: Record<string, boolean>;\n routing?: Record<string, unknown>;\n}\n\n/**\n * Preset summary for display purposes\n */\nexport interface PresetSummary {\n name: string;\n description: string;\n path: string;\n}\n\n/**\n * Defaults derived from a preset\n */\nexport interface PresetDefaults {\n models: ModelAnswers;\n methodology: MethodologyAnswers;\n features: FeatureAnswers;\n advanced: AdvancedAnswers;\n}\n\n/**\n * Profile definitions with display information\n * These are the 3 opinionated profiles available to users\n */\nexport interface ProfileDefinition {\n /** Internal identifier (matches preset file name) */\n id: string;\n /** File name in config/presets/ (without .json) */\n fileName: string;\n /** User-friendly display name */\n displayName: string;\n /** Short description */\n description: string;\n /** Recommendation text */\n recommendation: string;\n}\n\n/**\n * The 3 available profiles\n */\nexport const PROFILES: ProfileDefinition[] = [\n {\n id: \"event-modeling\",\n fileName: \"event-modeling\",\n displayName: \"Event Modeling\",\n description:\n \"Full TDD + Event Modeling + all Marvin modes. For line-of-business applications with complex state management.\",\n recommendation: \"Recommended for LOB apps\",\n },\n {\n id: \"prd\",\n fileName: \"standard\",\n displayName: \"PRD-Driven\",\n description:\n \"TDD + PRD-style specifications. For libraries, CLI tools, and APIs without long-term state tracking.\",\n recommendation: \"Recommended for libraries/tools\",\n },\n {\n id: \"tdd-only\",\n fileName: \"minimal\",\n displayName: \"TDD-Only\",\n description: \"Just TDD cycle enforcement with no planning methodology. Minimal setup.\",\n recommendation: \"For users who only want TDD\",\n },\n];\n\n/**\n * Valid preset file names (for backwards compatibility)\n */\nexport const PRESET_NAMES = [\"minimal\", \"standard\", \"event-modeling\"] as const;\nexport type PresetName = (typeof PRESET_NAMES)[number];\n\n/**\n * Get the path to the presets directory.\n * Handles both development and bundled scenarios.\n */\nfunction getPresetsDir(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n const bundledPresetsDir = join(bundledRoot, \"config\", \"presets\");\n if (existsSync(bundledPresetsDir)) {\n return bundledPresetsDir;\n }\n\n // Unbundled development: src/cli/utils/preset-loader.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n const devPresetsDir = join(devRoot, \"config\", \"presets\");\n if (existsSync(devPresetsDir)) {\n return devPresetsDir;\n }\n\n // Fallback: check if we're in node_modules\n const nodeModulesPath = currentFileDir.split(\"node_modules\")[0];\n if (nodeModulesPath !== currentFileDir) {\n const packagePresetsDir = join(\n nodeModulesPath,\n \"node_modules\",\n \"opencode-sdlc\",\n \"config\",\n \"presets\"\n );\n if (existsSync(packagePresetsDir)) {\n return packagePresetsDir;\n }\n }\n\n throw new Error(\n `Could not find presets directory. Searched:\\n - ${bundledPresetsDir}\\n - ${devPresetsDir}`\n );\n}\n\n/**\n * Check if a preset name is valid\n */\nexport function isValidPresetName(name: string): name is PresetName {\n return PRESET_NAMES.includes(name as PresetName);\n}\n\n/**\n * Get a profile definition by ID\n */\nexport function getProfileById(id: string): ProfileDefinition | undefined {\n return PROFILES.find((p) => p.id === id);\n}\n\n/**\n * Load a profile configuration by profile ID\n *\n * @param profileId - The profile ID (event-modeling, prd, tdd-only)\n * @returns The parsed preset configuration\n * @throws Error if profile is not found or invalid\n */\nexport function loadProfile(profileId: string): PresetConfig {\n const profile = getProfileById(profileId);\n if (!profile) {\n const validIds = PROFILES.map((p) => p.id).join(\", \");\n throw new Error(`Invalid profile: \"${profileId}\". Valid profiles are: ${validIds}`);\n }\n\n return loadPreset(profile.fileName as PresetName);\n}\n\n/**\n * Load a preset configuration by name\n *\n * @param name - The preset name (minimal, standard, enterprise, solo-quick)\n * @returns The parsed preset configuration\n * @throws Error if preset is not found or invalid\n */\nexport function loadPreset(name: string): PresetConfig {\n if (!isValidPresetName(name)) {\n const validNames = PRESET_NAMES.join(\", \");\n throw new Error(`Invalid preset name: \"${name}\". Valid presets are: ${validNames}`);\n }\n\n const presetsDir = getPresetsDir();\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (!existsSync(presetPath)) {\n throw new Error(\n `Preset file not found: ${presetPath}\\nThis may indicate a corrupted installation. Try reinstalling opencode-sdlc.`\n );\n }\n\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n\n // Validate required fields\n // v0.3.0+: bmad is optional (legacy), tdd is optional (new)\n // At least one of bmad or tdd should be present, or neither for minimal presets\n if (!preset.version || !preset.models || !preset.features) {\n throw new Error(`Preset \"${name}\" is missing required fields`);\n }\n\n return preset;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid JSON in preset file: ${presetPath}\\nError: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * List all available profiles with their descriptions\n *\n * @returns Array of profile summaries\n */\nexport function listProfiles(): PresetSummary[] {\n return PROFILES.map((profile) => ({\n name: profile.displayName,\n description: profile.description,\n path: profile.id,\n }));\n}\n\n/**\n * List all available presets with their descriptions\n * @deprecated Use listProfiles() instead\n *\n * @returns Array of preset summaries\n */\nexport function listPresets(): PresetSummary[] {\n const presetsDir = getPresetsDir();\n const summaries: PresetSummary[] = [];\n\n for (const name of PRESET_NAMES) {\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (existsSync(presetPath)) {\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n summaries.push({\n name,\n description: preset.description || `${name} preset`,\n path: presetPath,\n });\n } catch {\n // Skip invalid presets\n summaries.push({\n name,\n description: `${name} preset (unable to read)`,\n path: presetPath,\n });\n }\n }\n }\n\n return summaries;\n}\n\n/**\n * Convert a preset configuration to default values for the install wizard.\n *\n * Note: Subscriptions are NOT included - they are always gathered from the user.\n * Supports both v0.3.0+ (new) and legacy (bmad) presets.\n *\n * @param preset - The preset configuration\n * @returns Default values for models, methodology, features, and advanced settings\n */\nexport function presetToDefaults(preset: PresetConfig): PresetDefaults {\n // Check if using legacy (bmad) or new (tdd) structure\n const isLegacy = \"bmad\" in preset && preset.bmad !== undefined;\n\n return {\n models: {\n marvin: preset.models.marvin || \"\",\n oracle: preset.models.oracle,\n librarian: preset.models.librarian,\n frontend: preset.models.frontend,\n documentWriter: preset.models.documentWriter,\n multimodalLooker: preset.models.multimodalLooker,\n },\n methodology: isLegacy\n ? {\n defaultTrack: preset.bmad?.defaultTrack ?? \"quick-flow\",\n autoStatusUpdate: preset.bmad?.autoStatusUpdate ?? true,\n }\n : {\n // New structure uses default values - these fields are less relevant in v0.3.0+\n defaultTrack: \"quick-flow\" as const,\n autoStatusUpdate: true,\n },\n features: {\n enabledFeatures: flagsToFeatures(preset.features),\n mcps: flagsToMcps(preset.mcps),\n },\n advanced: {\n parallelIssueLimit: isLegacy ? (preset.bmad?.parallelIssueLimit ?? 0) : 0,\n experimental: [],\n },\n };\n}\n\n/**\n * Convert feature flags object to enabled features array.\n * Reverse of featuresToFlags() in features.ts\n * Supports both legacy and v0.3.0+ feature structures.\n */\nfunction flagsToFeatures(flags: PresetConfig[\"features\"]): string[] {\n const features: string[] = [];\n\n // Check if using new (v0.3.0+) or legacy feature structure\n const isNewFeatures = \"orchestratorOnly\" in flags;\n\n if (isNewFeatures) {\n // New v0.3.0+ features\n const newFlags = flags as {\n orchestratorOnly?: boolean;\n todoSync?: boolean;\n partyReview?: boolean;\n debuggingProtocol?: boolean;\n memento?: boolean;\n notifications?: boolean;\n lspTools?: boolean;\n };\n if (newFlags.orchestratorOnly) features.push(\"orchestratorOnly\");\n if (newFlags.todoSync) features.push(\"todoSync\");\n if (newFlags.partyReview) features.push(\"partyReview\");\n if (newFlags.debuggingProtocol) features.push(\"debuggingProtocol\");\n if (newFlags.memento) features.push(\"memento\");\n if (newFlags.notifications) features.push(\"notifications\");\n if (newFlags.lspTools) features.push(\"lspTools\");\n } else {\n // Legacy features\n const legacyFlags = flags as {\n bmadBridge?: boolean;\n autoStatus?: boolean;\n parallelExecution?: boolean;\n notifications?: boolean;\n contextMonitor?: boolean;\n commentChecker?: boolean;\n lspTools?: boolean;\n };\n if (legacyFlags.bmadBridge) features.push(\"bmad-bridge\");\n if (legacyFlags.autoStatus) features.push(\"auto-status\");\n if (legacyFlags.parallelExecution) features.push(\"parallel\");\n if (legacyFlags.notifications) features.push(\"notifications\");\n if (legacyFlags.contextMonitor) features.push(\"context-monitor\");\n if (legacyFlags.commentChecker) features.push(\"comment-checker\");\n if (legacyFlags.lspTools) features.push(\"lsp-tools\");\n }\n\n return features;\n}\n\n/**\n * Convert MCP flags object to enabled MCPs array.\n * Reverse of mcpsToFlags() in features.ts\n * Supports both legacy and v0.3.0+ MCP structures.\n */\nfunction flagsToMcps(mcps: PresetConfig[\"mcps\"]): string[] {\n const result: string[] = [];\n\n if (mcps.context7) result.push(\"context7\");\n if (mcps.exa) result.push(\"exa\");\n if (mcps.grepApp) result.push(\"grep_app\");\n // New v0.3.0+ MCP\n if (\"memento\" in mcps && (mcps as { memento?: boolean }).memento) {\n result.push(\"memento\");\n }\n\n return result;\n}\n\n/**\n * Get a formatted summary of a preset for display\n *\n * @param preset - The preset configuration\n * @param name - The preset name\n * @returns Formatted string describing the preset\n */\nexport function formatPresetSummary(preset: PresetConfig, name: string): string {\n const lines: string[] = [];\n\n lines.push(`Preset: ${name}`);\n lines.push(`Description: ${preset.description}`);\n lines.push(\"\");\n lines.push(\"Models:\");\n lines.push(` Marvin: ${preset.models.marvin}`);\n lines.push(` Oracle: ${preset.models.oracle}`);\n lines.push(` Librarian: ${preset.models.librarian}`);\n\n // Show configuration based on whether it's legacy (bmad) or new (tdd) preset\n if (preset.bmad) {\n lines.push(\"\");\n lines.push(\"BMAD Settings (Legacy):\");\n lines.push(` Default Track: ${preset.bmad.defaultTrack}`);\n lines.push(` Auto Status Update: ${preset.bmad.autoStatusUpdate ? \"Yes\" : \"No\"}`);\n lines.push(` Parallel Issue Limit: ${preset.bmad.parallelIssueLimit}`);\n }\n\n if (preset.tdd) {\n lines.push(\"\");\n lines.push(\"TDD Settings:\");\n lines.push(` Enabled: ${preset.tdd.enabled ? \"Yes\" : \"No\"}`);\n lines.push(` Verbosity: ${preset.tdd.verbosity}`);\n if (preset.tdd.mutationTesting?.enabled) {\n lines.push(` Mutation Testing: ${preset.tdd.mutationTesting.requiredScore}% required`);\n }\n }\n\n if (preset.eventModeling?.enabled) {\n lines.push(\"\");\n lines.push(\"Event Modeling: Enabled\");\n lines.push(` Output Path: ${preset.eventModeling.outputPath}`);\n }\n\n lines.push(\"\");\n lines.push(\"Features:\");\n const enabledFeatures = flagsToFeatures(preset.features);\n if (enabledFeatures.length > 0) {\n lines.push(` Enabled: ${enabledFeatures.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n lines.push(\"\");\n lines.push(\"MCP Servers:\");\n const enabledMcps = flagsToMcps(preset.mcps);\n if (enabledMcps.length > 0) {\n lines.push(` Enabled: ${enabledMcps.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n return lines.join(\"\\n\");\n}\n","/**\n * Install command\n *\n * Interactive installer for OpenCode SDLC.\n * Supports presets for quick configuration.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type {\n InstallAnswers,\n InstallOptions,\n SdlcMode,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport { setupSmartGitHub } from \"../questions/github-smart.js\";\nimport {\n type LoadedConfigs,\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { checkPrerequisites } from \"../utils/prerequisites.js\";\nimport {\n PROFILES,\n type PresetConfig,\n type PresetDefaults,\n type ProfileDefinition,\n formatPresetSummary,\n loadProfile,\n presetToDefaults,\n} from \"../utils/preset-loader.js\";\n\ntype InstallMode = \"fresh\" | \"upgrade\" | \"reconfigure\";\n\ninterface ModeDetectionResult {\n mode: InstallMode;\n existingVersion?: string;\n configs?: LoadedConfigs;\n}\n\nfunction detectInstallMode(options: InstallOptions, configs: LoadedConfigs): ModeDetectionResult {\n if (options.reconfigure) {\n return { mode: \"reconfigure\" };\n }\n\n if (!configs.sdlc) {\n return { mode: \"fresh\" };\n }\n\n return {\n mode: \"upgrade\",\n existingVersion: configs.sdlcVersion || \"0.0.1\",\n configs,\n };\n}\n\nasync function runUpgradeFlow(\n configs: LoadedConfigs,\n existingVersion: string,\n options: InstallOptions\n): Promise<void> {\n const { sdlc, omo, opencode } = configs;\n\n logger.section(\"Upgrading Configuration\");\n\n console.log(chalk.cyan(`\\nCurrent version: ${existingVersion}`));\n console.log(chalk.cyan(`New version: ${VERSION}\\n`));\n\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Upgrade existing installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Upgrade cancelled.\");\n process.exit(0);\n }\n }\n\n const spinner = ora(\"Creating backup...\").start();\n const backups = createBackups();\n const backupCount = [backups.sdlcBackup, backups.omoBackup, backups.opencodeBackup].filter(\n Boolean\n ).length;\n spinner.succeed(`Created ${backupCount} backup file(s)`);\n\n const fileMigrationResult = migrateLegacyFiles();\n if (fileMigrationResult.stateFileMoved || fileMigrationResult.backupsMoved > 0) {\n const moved: string[] = [];\n if (fileMigrationResult.stateFileMoved) moved.push(\"state file\");\n if (fileMigrationResult.backupsMoved > 0)\n moved.push(`${fileMigrationResult.backupsMoved} backup(s)`);\n console.log(chalk.gray(` Migrated ${moved.join(\", \")} to new sdlc/ directory`));\n }\n\n const migrationSpinner = ora(\"Applying migrations...\").start();\n const migrationResult = migrateConfigs(sdlc || {}, omo || {}, existingVersion, opencode || {});\n\n if (migrationResult.migrationsApplied.length > 0) {\n migrationSpinner.succeed(`Applied ${migrationResult.migrationsApplied.length} migration(s)`);\n for (const migration of migrationResult.migrationsApplied) {\n console.log(chalk.gray(` • ${migration}`));\n }\n } else {\n migrationSpinner.succeed(\"No migrations needed\");\n }\n\n if (migrationResult.hasBreakingChanges && !options.yes) {\n console.log(chalk.yellow(\"\\nBreaking changes detected:\"));\n for (const warning of migrationResult.breakingChangeWarnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n\n const continueUpgrade = await confirm({\n message: \"Continue with upgrade despite breaking changes?\",\n default: false,\n });\n\n if (!continueUpgrade) {\n logger.info(\"Upgrade cancelled. Your backup files are preserved.\");\n process.exit(0);\n }\n }\n\n const existingSubscriptions = extractSubscriptions(migrationResult.sdlcConfig);\n const existingModels = extractModels(migrationResult.sdlcConfig);\n const existingMethodology = extractMethodology(migrationResult.sdlcConfig);\n const existingFeatures = extractFeatures(migrationResult.sdlcConfig);\n const existingAdvanced = extractAdvanced(migrationResult.sdlcConfig);\n\n logger.section(\"Preserved Configuration\");\n\n if (existingSubscriptions) {\n console.log(chalk.bold(\"Subscriptions:\"));\n if (existingSubscriptions.hasClaude) {\n const claudeInfo =\n existingSubscriptions.claudeAuth === \"api\" ? \"API Key\" : existingSubscriptions.claudeTier;\n console.log(chalk.green(` ✓ Claude (${claudeInfo})`));\n }\n if (existingSubscriptions.hasOpenAI) {\n const openaiInfo = existingSubscriptions.openaiAuth === \"api\" ? \"API Key\" : \"Subscription\";\n console.log(chalk.green(` ✓ OpenAI (${openaiInfo})`));\n }\n if (existingSubscriptions.hasGoogle)\n console.log(chalk.green(` ✓ Google (${existingSubscriptions.googleAuth})`));\n if (existingSubscriptions.hasGitHubCopilot)\n console.log(chalk.green(` ✓ GitHub Copilot (${existingSubscriptions.copilotPlan})`));\n }\n\n if (existingModels) {\n console.log(chalk.bold(\"\\nModel Assignments:\"));\n console.log(chalk.green(` ✓ Marvin: ${existingModels.marvin}`));\n console.log(chalk.green(` ✓ Oracle: ${existingModels.oracle}`));\n console.log(chalk.green(` ✓ Librarian: ${existingModels.librarian}`));\n }\n console.log();\n\n const newFeatures = detectNewFeatures(migrationResult.sdlcConfig);\n const updatedFeatures = existingFeatures;\n\n if (newFeatures.length > 0 && !options.yes) {\n logger.section(\"New Features Available\");\n\n for (const feature of newFeatures) {\n if (feature === \"autoGitOperations\") {\n const enable = await confirm({\n message: \"Enable automatic git operations? (commits, pushes by agents)\",\n default: false,\n });\n if (enable) {\n const migratedFeatures = migrationResult.sdlcConfig.features as Record<string, unknown>;\n migratedFeatures.autoGitOperations = true;\n }\n }\n }\n }\n\n // Use existing subscriptions or default to universal (runtime handles availability)\n const finalSubscriptions: SubscriptionAnswers = existingSubscriptions || {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n const fullAnswers: InstallAnswers = {\n subscriptions: finalSubscriptions,\n models: existingModels || {\n marvin: \"\",\n oracle: \"\",\n librarian: \"\",\n },\n methodology: existingMethodology || {\n defaultTrack: \"quick-flow\",\n autoStatusUpdate: true,\n },\n features: updatedFeatures || {\n enabledFeatures: [],\n mcps: [],\n },\n advanced: existingAdvanced || {\n parallelIssueLimit: 0,\n experimental: [],\n },\n installLocation: options.local ? \"local\" : \"global\",\n };\n\n const merged = mergeConfigs(\n {\n existingSdlc: migrationResult.sdlcConfig,\n existingOmo: migrationResult.omoConfig,\n fullAnswers,\n },\n migrationResult.opencodeConfig\n );\n\n const writeSpinner = ora(\"Writing configuration...\").start();\n writeMergedConfigs(merged);\n writeSpinner.succeed(\"Configuration files updated\");\n\n const fileManager = new FileManager();\n\n const generator = new ConfigGenerator(fullAnswers);\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n const installSpinner = ora(`Installing packages: ${packages.join(\", \")}...`).start();\n await fileManager.installDependencies(packages);\n installSpinner.succeed(`Installed ${packages.length} package(s)`);\n }\n\n // Bridge commands removed in v1.0 - modes replace commands entirely\n\n logger.successBanner(`UPGRADED TO OPENCODE ATHENA ${VERSION}!`);\n\n if (backups.sdlcBackup || backups.omoBackup || backups.opencodeBackup) {\n console.log(chalk.gray(\"\\nBackups saved:\"));\n if (backups.sdlcBackup) console.log(chalk.gray(` • ${backups.sdlcBackup}`));\n if (backups.omoBackup) console.log(chalk.gray(` • ${backups.omoBackup}`));\n if (backups.opencodeBackup) console.log(chalk.gray(` • ${backups.opencodeBackup}`));\n }\n\n console.log(chalk.gray(\"\\nRestart OpenCode to use the upgraded configuration.\"));\n console.log();\n}\n\nexport async function install(options: InstallOptions): Promise<void> {\n logger.banner();\n\n const spinner = ora(\"Checking prerequisites...\").start();\n\n const prereqs = await checkPrerequisites();\n\n if (!prereqs.node.installed) {\n spinner.fail(\"Node.js not found\");\n logger.error(\"Please install Node.js 20+ first: https://nodejs.org/\");\n process.exit(1);\n }\n\n if (!prereqs.node.compatible) {\n spinner.warn(`Node.js ${prereqs.node.version} detected. Recommended: 20+`);\n }\n\n if (!prereqs.opencode.installed) {\n spinner.fail(\"OpenCode not found\");\n logger.error(\"Please install OpenCode first: https://opencode.ai/docs\");\n process.exit(1);\n }\n\n if (!prereqs.opencode.compatible) {\n spinner.warn(`OpenCode ${prereqs.opencode.version} detected. Recommended: 1.0.132+`);\n } else {\n spinner.succeed(`OpenCode ${prereqs.opencode.version || \"\"} detected`);\n }\n\n const existingConfigs = loadExistingConfigs();\n const modeResult = detectInstallMode(options, existingConfigs);\n\n if (modeResult.mode === \"upgrade\" && modeResult.configs && modeResult.existingVersion) {\n await runUpgradeFlow(modeResult.configs, modeResult.existingVersion, options);\n return;\n }\n\n if (modeResult.mode === \"reconfigure\") {\n logger.info(\"Reconfiguring from scratch (--reconfigure flag)\");\n }\n\n // Step 2: Profile selection (FIRST - always required)\n logger.section(\"Development Profile\");\n\n let preset: PresetConfig;\n let presetDefaults: PresetDefaults;\n let profileName: string;\n\n if (options.yes) {\n // Use event-modeling as default for --yes flag\n preset = loadProfile(\"event-modeling\");\n presetDefaults = presetToDefaults(preset);\n profileName = \"Event Modeling\";\n logger.info(\"Using default profile: Event Modeling (--yes flag)\");\n } else {\n // Always ask for profile selection\n const { preset: selectedPreset, profile } = await askForProfile();\n preset = selectedPreset;\n presetDefaults = presetToDefaults(preset);\n profileName = profile.displayName;\n logger.success(`Selected profile: ${profileName}`);\n }\n\n // Show profile summary\n console.log(chalk.bold(\"\\nProfile Configuration:\\n\"));\n console.log(chalk.gray(formatPresetSummary(preset, profileName)));\n console.log();\n\n // Profiles are opinionated - no customization during install\n // Users can edit config files later for advanced customization\n\n // Step 4: Use universal subscriptions - the routing system handles availability at runtime\n // We enable all providers by default; OpenCode's auth state determines actual availability\n const subscriptions: SubscriptionAnswers = {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n // Step 5: Use profile defaults for all configuration\n // Models are handled at runtime by the routing system\n logger.section(\"Applying Profile Configuration\");\n\n // Use profile defaults for models directly\n // The routing system will handle model availability at runtime\n const models: InstallAnswers[\"models\"] = {\n marvin: presetDefaults.models.marvin,\n oracle: presetDefaults.models.oracle,\n librarian: presetDefaults.models.librarian,\n frontend: presetDefaults.models.frontend,\n documentWriter: presetDefaults.models.documentWriter,\n multimodalLooker: presetDefaults.models.multimodalLooker,\n };\n\n const methodology: InstallAnswers[\"methodology\"] = presetDefaults.methodology;\n const features: InstallAnswers[\"features\"] = presetDefaults.features;\n const advanced: InstallAnswers[\"advanced\"] = presetDefaults.advanced;\n\n // Use profile defaults for TDD, Event Modeling, Git, Modes, Memory\n const tdd: InstallAnswers[\"tdd\"] = preset.tdd\n ? {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n }\n : undefined;\n\n const eventModeling: InstallAnswers[\"eventModeling\"] = preset.eventModeling\n ? {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n }\n : undefined;\n\n const gitWorkflow: InstallAnswers[\"gitWorkflow\"] = preset.git\n ? {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n }\n : undefined;\n\n const modes: InstallAnswers[\"modes\"] = preset.modes\n ? {\n default: preset.modes.default as SdlcMode,\n eventModeling: preset.modes.eventModeling,\n enabled: preset.modes.enabled as SdlcMode[],\n }\n : undefined;\n\n const memory: InstallAnswers[\"memory\"] = preset.memory\n ? {\n backend: preset.memory.backend,\n checkpointTtl: preset.memory.checkpointTtl,\n }\n : undefined;\n\n // GitHub Integration - smart setup with auto-detection\n logger.section(\"GitHub Integration\");\n const githubResult = await setupSmartGitHub(process.cwd());\n\n // Convert smart GitHub result to InstallAnswers format\n const github =\n githubResult.enabled && githubResult.config\n ? {\n enabled: true,\n owner: githubResult.config.owner,\n repo: githubResult.config.repo,\n project: githubResult.config.project,\n statuses: githubResult.config.statuses || [],\n }\n : { enabled: false, owner: \"\", repo: \"\", statuses: [] };\n\n if (githubResult.repoCreated) {\n logger.success(\"Created new GitHub repository\");\n }\n if (githubResult.projectCreated) {\n logger.success(\"Linked project board\");\n }\n if (githubResult.rulesetsCreated) {\n logger.success(\"Created branch protection rules\");\n }\n logger.success(\"Profile configuration applied\");\n\n // Step 6: Generate configuration\n logger.section(\"Generating Configuration\");\n\n const answers: InstallAnswers = {\n subscriptions,\n models,\n methodology,\n features,\n advanced,\n installLocation: options.local ? \"local\" : \"global\",\n github,\n tdd,\n eventModeling,\n gitWorkflow,\n // v1.0.0 additions\n modes,\n memory,\n };\n\n const generator = new ConfigGenerator(answers);\n const files = await generator.generate();\n\n // Step 7: Preview files\n console.log(chalk.bold(\"Files to be created/modified:\\n\"));\n for (const file of files) {\n const action = file.exists ? chalk.yellow(\"update\") : chalk.green(\"create\");\n console.log(chalk.gray(` [${action}] ${file.path}`));\n }\n console.log();\n\n // Step 8: Confirm installation\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Proceed with installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Installation cancelled.\");\n process.exit(0);\n }\n }\n\n // Step 9: Install\n const installSpinner = ora(\"Installing OpenCode SDLC...\").start();\n\n try {\n const fileManager = new FileManager(generator.getConfigDir());\n\n // Write configuration files\n await fileManager.writeFiles(files);\n installSpinner.text = \"Configuration files written...\";\n\n // Install npm dependencies\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n installSpinner.text = `Installing dependencies: ${packages.join(\", \")}...`;\n await fileManager.installDependencies(packages);\n }\n\n // v1.0.0: Copy agent mode files to project directory if modes are enabled\n // Note: Bridge commands removed in v1.0 - modes replace commands entirely\n if (modes?.enabled && modes.enabled.length > 0) {\n installSpinner.text = \"Installing Marvin mode agents...\";\n const projectDir = process.cwd();\n const copiedAgents = await fileManager.copyAgentModes(projectDir, modes.enabled);\n if (copiedAgents.length > 0) {\n logger.info(`Installed ${copiedAgents.length} Marvin mode agents to .opencode/agent/`);\n }\n }\n\n installSpinner.succeed(\"Installation complete!\");\n } catch (error) {\n installSpinner.fail(\"Installation failed\");\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n // Step 10: Print next steps\n printNextSteps();\n}\n\n/**\n * Ask user to select a development profile\n * This is always the first question in the install flow\n */\nasync function askForProfile(): Promise<{ preset: PresetConfig; profile: ProfileDefinition }> {\n console.log(\n chalk.gray(\"\\nChoose a profile based on your project type. Each profile is opinionated\\n\") +\n chalk.gray(\"and includes sensible defaults - you can customize later if needed.\\n\")\n );\n\n const choices = PROFILES.map((p) => ({\n name: `${p.displayName} (${p.recommendation})`,\n value: p.id,\n description: p.description,\n }));\n\n const selected = await select({\n message: \"Select a development profile:\",\n choices,\n default: \"event-modeling\",\n });\n\n const profile = PROFILES.find((p) => p.id === selected);\n if (!profile) {\n throw new Error(`Profile not found: ${selected}`);\n }\n\n const preset = loadProfile(selected);\n return { preset, profile };\n}\n\n/**\n * Print next steps after installation\n */\nfunction printNextSteps(): void {\n logger.successBanner(\"OPENCODE SDLC INSTALLED SUCCESSFULLY!\");\n\n console.log(chalk.bold(\"Next Steps:\\n\"));\n console.log(\" 1. Authenticate with your LLM providers:\");\n console.log(` ${chalk.cyan(\"opencode auth login\")}`);\n console.log(\n \" (Select providers you have access to: Anthropic, OpenAI, Google, GitHub Copilot)\"\n );\n console.log();\n console.log(\" 2. Start OpenCode in your project directory:\");\n console.log(` ${chalk.cyan(\"opencode\")}`);\n\n console.log(chalk.bold(\"\\nThe SDLC plugin will automatically:\\n\"));\n console.log(chalk.gray(\" • Enforce TDD cycles (RED → DOMAIN → GREEN → DOMAIN)\"));\n console.log(chalk.gray(\" • Track work via GitHub Issues\"));\n console.log(chalk.gray(\" • Apply file ownership rules\"));\n console.log(chalk.gray(\" • Route to available models at runtime\"));\n console.log(chalk.gray(\"\\nUse Tab to switch between Marvin modes (Build, Discover, etc.)\"));\n\n console.log(chalk.gray(\"\\nAdvanced: Edit ~/.config/opencode/sdlc.json to customize models.\"));\n console.log(chalk.gray(\"Documentation: https://github.com/jwilger/opencode-sdlc-plugin\"));\n console.log();\n}\n","/**\n * Detect OpenCode authentication status\n *\n * Reads ~/.opencode.json to check which providers are authenticated.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface AuthStatus {\n anthropic: boolean;\n openai: boolean;\n google: boolean;\n githubCopilot: boolean;\n}\n\ninterface OpencodeConfig {\n providers?: Record<string, { apiKey?: string; disabled?: boolean }>;\n}\n\nexport async function detectAuthStatus(): Promise<AuthStatus> {\n const opencodeConfigPath = join(homedir(), \".opencode.json\");\n\n if (!existsSync(opencodeConfigPath)) {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n\n try {\n const content = readFileSync(opencodeConfigPath, \"utf-8\");\n const config = JSON.parse(content) as OpencodeConfig;\n\n const providers = config.providers || {};\n\n return {\n anthropic: isProviderAuthenticated(providers, \"anthropic\"),\n openai: isProviderAuthenticated(providers, \"openai\"),\n google: isProviderAuthenticated(providers, \"google\"),\n githubCopilot: isProviderAuthenticated(providers, \"github-copilot\"),\n };\n } catch {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n}\n\nfunction isProviderAuthenticated(\n providers: Record<string, { apiKey?: string; disabled?: boolean }>,\n providerName: string\n): boolean {\n const provider = providers[providerName];\n if (!provider) return false;\n\n return provider.apiKey !== undefined && provider.apiKey !== \"\" && !provider.disabled;\n}\n","/**\n * Provider management command\n *\n * Subcommands:\n * - (no subcommand): Show status\n * - add: Add a provider\n * - remove: Remove a provider\n * - refresh: Re-evaluate model defaults\n * - sync: Sync with OpenCode auth state\n */\n\nimport { select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { detectAuthStatus } from \"../utils/auth-detector.js\";\nimport { extractSubscriptions, loadExistingConfigs } from \"../utils/config-loader.js\";\nimport { logger } from \"../utils/logger.js\";\n\ntype ProviderAction = \"status\" | \"add\" | \"remove\" | \"refresh\" | \"sync\";\n\nexport interface ProvidersOptions {\n action?: ProviderAction;\n}\n\nexport async function providers(options: ProvidersOptions): Promise<void> {\n const action = options.action || \"status\";\n\n switch (action) {\n case \"status\":\n await showStatus();\n break;\n case \"add\":\n await addProvider();\n break;\n case \"remove\":\n await removeProvider();\n break;\n case \"refresh\":\n await refreshDefaults();\n break;\n case \"sync\":\n await syncWithAuth();\n break;\n }\n}\n\nasync function showStatus(): Promise<void> {\n logger.banner();\n logger.section(\"Provider Status\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const subscriptions = extractSubscriptions(configs.sdlc);\n if (!subscriptions) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const spinner = ora(\"Checking authentication status...\").start();\n const authStatus = await detectAuthStatus();\n spinner.stop();\n\n console.log(chalk.bold(\"\\nConfigured Providers:\\n\"));\n\n displayProvider(\n \"Claude\",\n subscriptions.hasClaude,\n subscriptions.claudeTier,\n authStatus.anthropic\n );\n displayProvider(\"OpenAI\", subscriptions.hasOpenAI, undefined, authStatus.openai);\n displayProvider(\"Google\", subscriptions.hasGoogle, subscriptions.googleAuth, authStatus.google);\n displayProvider(\n \"GitHub Copilot\",\n subscriptions.hasGitHubCopilot,\n subscriptions.copilotPlan,\n authStatus.githubCopilot\n );\n\n const models = configs.sdlc.models as Record<string, string>;\n if (models) {\n console.log(chalk.bold(\"\\nCurrent Model Assignments:\\n\"));\n console.log(` ${chalk.cyan(\"Marvin:\")} ${models.marvin || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Oracle:\")} ${models.oracle || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Librarian:\")} ${models.librarian || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Frontend:\")} ${models.frontend || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Doc Writer:\")} ${models.documentWriter || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Multimodal:\")} ${models.multimodalLooker || \"not set\"}`);\n }\n\n if (!authStatus.anthropic && subscriptions.hasClaude) {\n console.log(chalk.yellow(\"\\n⚠ Tip: Run 'opencode auth login' to authenticate Claude\"));\n }\n if (!authStatus.openai && subscriptions.hasOpenAI) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate OpenAI\"));\n }\n if (!authStatus.google && subscriptions.hasGoogle) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate Google\"));\n }\n if (!authStatus.githubCopilot && subscriptions.hasGitHubCopilot) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate GitHub Copilot\"));\n }\n\n console.log();\n}\n\nfunction displayProvider(\n name: string,\n enabled: boolean,\n tier: string | undefined,\n authenticated: boolean\n): void {\n const status = enabled ? chalk.green(\"✓ Enabled\") : chalk.gray(\"✗ Disabled\");\n const auth = enabled\n ? authenticated\n ? chalk.green(\"✓ Authenticated\")\n : chalk.yellow(\"⚠ Not authenticated\")\n : chalk.gray(\"(disabled)\");\n const tierText = tier && tier !== \"none\" ? chalk.gray(` (${tier})`) : \"\";\n\n console.log(` ${status.padEnd(30)} ${name}${tierText}`);\n console.log(` ${\" \".repeat(30)} Auth: ${auth}`);\n}\n\nasync function addProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Add Provider\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const currentSubs = extractSubscriptions(configs.sdlc);\n if (!currentSubs) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const choices = [];\n if (!currentSubs.hasClaude) choices.push({ name: \"Claude Pro/Max\", value: \"claude\" });\n if (!currentSubs.hasOpenAI) choices.push({ name: \"OpenAI ChatGPT Plus/Pro\", value: \"openai\" });\n if (!currentSubs.hasGoogle) choices.push({ name: \"Google/Gemini\", value: \"google\" });\n if (!currentSubs.hasGitHubCopilot) choices.push({ name: \"GitHub Copilot\", value: \"copilot\" });\n\n if (choices.length === 0) {\n logger.info(\"All providers are already enabled.\");\n return;\n }\n\n const provider = await select({\n message: \"Which provider do you want to add?\",\n choices,\n });\n\n const newSubs = { ...currentSubs };\n\n if (provider === \"claude\") {\n newSubs.hasClaude = true;\n newSubs.claudeTier = await select({\n message: \"Which Claude tier?\",\n choices: [\n { name: \"Max 5x\", value: \"max5x\" as const },\n { name: \"Max 20x\", value: \"max20x\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n ],\n });\n } else if (provider === \"openai\") {\n newSubs.hasOpenAI = true;\n } else if (provider === \"google\") {\n newSubs.hasGoogle = true;\n newSubs.googleAuth = await select({\n message: \"Google authentication method?\",\n choices: [\n { name: \"Google Workspace (Antigravity OAuth)\", value: \"antigravity\" as const },\n { name: \"Personal Google Account\", value: \"personal\" as const },\n { name: \"API Key\", value: \"api\" as const },\n ],\n });\n } else if (provider === \"copilot\") {\n newSubs.hasGitHubCopilot = true;\n newSubs.copilotPlan = await select({\n message: \"Which GitHub Copilot plan?\",\n choices: [\n { name: \"Enterprise\", value: \"enterprise\" as const },\n { name: \"Pro+\", value: \"pro-plus\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n { name: \"Business\", value: \"business\" as const },\n { name: \"Free\", value: \"free\" as const },\n ],\n });\n }\n\n logger.success(`Provider added: ${provider}`);\n console.log(chalk.gray(\"\\nRun 'opencode-sdlc providers refresh' to update model defaults.\"));\n}\n\nasync function removeProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Remove Provider\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function refreshDefaults(): Promise<void> {\n logger.banner();\n logger.section(\"Refresh Model Defaults\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function syncWithAuth(): Promise<void> {\n logger.banner();\n logger.section(\"Sync with OpenCode Auth\");\n\n logger.info(\"Not yet implemented.\");\n}\n","/**\n * Uninstall command\n *\n * Remove OpenCode SDLC configuration and dependencies.\n */\n\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport type { UninstallOptions } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\n\n/**\n * Main uninstall command handler\n */\nexport async function uninstall(options: UninstallOptions): Promise<void> {\n logger.banner();\n\n logger.warn(\"This will remove OpenCode SDLC from your system.\");\n console.log();\n\n // Confirm uninstall\n const proceed = await confirm({\n message: \"Are you sure you want to uninstall OpenCode SDLC?\",\n default: false,\n });\n\n if (!proceed) {\n logger.info(\"Uninstall cancelled.\");\n return;\n }\n\n logger.section(\"Uninstalling OpenCode SDLC\");\n\n const fileManager = new FileManager();\n\n // Step 1: Remove any legacy bridge commands (deprecated in v1.0)\n const commandsSpinner = ora(\"Cleaning up legacy bridge commands...\").start();\n try {\n const removedCommands = await fileManager.removeCommands();\n if (removedCommands.length > 0) {\n commandsSpinner.succeed(`Removed ${removedCommands.length} legacy command(s)`);\n } else {\n commandsSpinner.info(\"No legacy bridge commands found\");\n }\n } catch (err) {\n commandsSpinner.fail(\"Failed to remove legacy commands\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 2: Remove config files (unless --keep-config)\n if (!options.keepConfig) {\n const configSpinner = ora(\"Removing configuration files...\").start();\n try {\n const removedFiles = await fileManager.removeConfigFiles();\n if (removedFiles.length > 0) {\n configSpinner.succeed(`Removed ${removedFiles.length} configuration file(s)`);\n } else {\n configSpinner.info(\"No Sdlc configuration files found\");\n }\n } catch (err) {\n configSpinner.fail(\"Failed to remove configuration files\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n logger.info(\"Keeping configuration files (--keep-config)\");\n }\n\n // Step 3: Remove from opencode.json\n const opencodeSpinner = ora(\"Updating opencode.json...\").start();\n try {\n const updated = await fileManager.removeFromOpencodeConfig();\n if (updated) {\n opencodeSpinner.succeed(\"Removed Sdlc plugins from opencode.json\");\n } else {\n opencodeSpinner.info(\"No Sdlc plugins found in opencode.json\");\n }\n } catch (err) {\n opencodeSpinner.fail(\"Failed to update opencode.json\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 4: Remove npm dependencies (unless --keep-deps)\n if (!options.keepDeps) {\n const depsSpinner = ora(\"Removing npm dependencies...\").start();\n try {\n const packagesToRemove = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n await fileManager.uninstallDependencies(packagesToRemove);\n depsSpinner.succeed(\"Removed npm dependencies\");\n } catch (_err) {\n depsSpinner.warn(\"Some dependencies could not be removed\");\n }\n } else {\n logger.info(\"Keeping npm dependencies (--keep-deps)\");\n }\n\n console.log();\n logger.success(\"OpenCode SDLC has been uninstalled.\");\n\n if (options.keepConfig) {\n logger.info(\"Configuration files were preserved.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to reinstall with existing config.`);\n }\n\n console.log();\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport semver from \"semver\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, SubscriptionAnswers, UpgradeOptions } from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport {\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { getInstalledPlugins } from \"../utils/prerequisites.js\";\n\nconst execAsync = promisify(exec);\n\ninterface PackageUpdate {\n name: string;\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\ntype ReleaseChannel = \"latest\" | \"beta\" | \"alpha\";\n\nfunction detectReleaseChannel(version: string): ReleaseChannel {\n if (version.includes(\"-beta\")) return \"beta\";\n if (version.includes(\"-alpha\")) return \"alpha\";\n return \"latest\";\n}\n\nasync function getLatestVersion(\n packageName: string,\n tag: ReleaseChannel = \"latest\"\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(`npm view ${packageName}@${tag} version`);\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\nasync function checkPackageUpdate(name: string, currentVersion: string): Promise<PackageUpdate> {\n const latest = await getLatestVersion(name);\n const hasUpdate =\n latest !== null && semver.valid(latest) && semver.valid(currentVersion)\n ? semver.gt(latest, currentVersion)\n : latest !== null && latest !== currentVersion;\n return {\n name,\n current: currentVersion,\n latest: latest || currentVersion,\n updateAvailable: hasUpdate,\n };\n}\n\nexport async function upgrade(options: UpgradeOptions): Promise<void> {\n logger.banner();\n\n const configs = loadExistingConfigs();\n\n if (!configs.sdlc) {\n logger.error(\"No existing Sdlc installation found.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to install for the first time.`);\n process.exit(1);\n }\n\n const existingVersion = configs.sdlcVersion || \"0.0.1\";\n\n logger.section(\"Checking for Updates\");\n\n const spinner = ora(\"Checking package versions...\").start();\n\n const installedPlugins = await getInstalledPlugins();\n\n const packagesToCheck = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const updates: PackageUpdate[] = [];\n\n const sdlcChannel = detectReleaseChannel(VERSION);\n const sdlcLatest = await getLatestVersion(\"opencode-sdlc-plugin\", sdlcChannel);\n if (sdlcLatest) {\n const sdlcHasUpdate =\n semver.valid(sdlcLatest) && semver.valid(VERSION)\n ? semver.gt(sdlcLatest, VERSION)\n : sdlcLatest !== VERSION;\n updates.push({\n name: \"opencode-sdlc-plugin\",\n current: VERSION,\n latest: sdlcLatest,\n updateAvailable: sdlcHasUpdate,\n });\n }\n\n for (const pkgName of packagesToCheck) {\n const currentVersion = installedPlugins[pkgName];\n if (currentVersion) {\n const updateInfo = await checkPackageUpdate(pkgName, currentVersion);\n updates.push(updateInfo);\n }\n }\n\n spinner.stop();\n\n logger.section(\"Package Versions\");\n\n const updatesAvailable = updates.filter((u) => u.updateAvailable);\n\n for (const pkg of updates) {\n const status = pkg.updateAvailable\n ? chalk.yellow(`${pkg.current} -> ${pkg.latest}`)\n : chalk.green(pkg.current);\n logger.keyValue(pkg.name, status);\n }\n\n console.log();\n\n if (updatesAvailable.length === 0 && existingVersion === VERSION) {\n logger.success(\"All packages are up to date!\");\n return;\n }\n\n if (updatesAvailable.length > 0) {\n logger.info(`${updatesAvailable.length} package update(s) available`);\n }\n\n const coercedExisting = semver.coerce(existingVersion);\n const coercedTarget = semver.coerce(VERSION);\n\n if (coercedExisting && coercedTarget && semver.lt(coercedExisting, coercedTarget)) {\n logger.info(`Configuration upgrade needed: ${existingVersion} -> ${VERSION}`);\n }\n\n if (options.check) {\n console.log();\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc upgrade\")} (without --check) to apply upgrades.`);\n return;\n }\n\n const actionCount = updatesAvailable.length + (existingVersion !== VERSION ? 1 : 0);\n if (actionCount === 0) {\n logger.success(\"Everything is up to date!\");\n return;\n }\n\n if (!options.yes) {\n const proceed = await confirm({\n message: `Upgrade ${actionCount > 1 ? `${actionCount} item(s)` : \"configuration\"}?`,\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Upgrade cancelled.\");\n process.exit(0);\n }\n }\n\n logger.section(\"Upgrading Configuration\");\n\n console.log(chalk.cyan(`\\nCurrent version: ${existingVersion}`));\n console.log(chalk.cyan(`New version: ${VERSION}\\n`));\n\n const backupSpinner = ora(\"Creating backup...\").start();\n const backups = createBackups();\n const backupCount = [backups.sdlcBackup, backups.omoBackup, backups.opencodeBackup].filter(\n Boolean\n ).length;\n backupSpinner.succeed(`Created ${backupCount} backup file(s)`);\n\n const fileMigrationResult = migrateLegacyFiles();\n if (fileMigrationResult.stateFileMoved || fileMigrationResult.backupsMoved > 0) {\n const moved: string[] = [];\n if (fileMigrationResult.stateFileMoved) moved.push(\"state file\");\n if (fileMigrationResult.backupsMoved > 0)\n moved.push(`${fileMigrationResult.backupsMoved} backup(s)`);\n console.log(chalk.gray(` Migrated ${moved.join(\", \")} to new sdlc/ directory`));\n }\n\n const migrationSpinner = ora(\"Applying migrations...\").start();\n const migrationResult = migrateConfigs(\n configs.sdlc || {},\n configs.omo || {},\n existingVersion,\n configs.opencode || {}\n );\n\n if (migrationResult.migrationsApplied.length > 0) {\n migrationSpinner.succeed(`Applied ${migrationResult.migrationsApplied.length} migration(s)`);\n for (const migration of migrationResult.migrationsApplied) {\n console.log(chalk.gray(` • ${migration}`));\n }\n } else {\n migrationSpinner.succeed(\"No migrations needed\");\n }\n\n if (migrationResult.hasBreakingChanges && !options.yes) {\n console.log(chalk.yellow(\"\\nBreaking changes detected:\"));\n for (const warning of migrationResult.breakingChangeWarnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n\n const continueUpgrade = await confirm({\n message: \"Continue with upgrade despite breaking changes?\",\n default: false,\n });\n\n if (!continueUpgrade) {\n logger.info(\"Upgrade cancelled. Your backup files are preserved.\");\n process.exit(0);\n }\n }\n\n const existingSubscriptions = extractSubscriptions(migrationResult.sdlcConfig);\n const existingModels = extractModels(migrationResult.sdlcConfig);\n const existingMethodology = extractMethodology(migrationResult.sdlcConfig);\n const existingFeatures = extractFeatures(migrationResult.sdlcConfig);\n const existingAdvanced = extractAdvanced(migrationResult.sdlcConfig);\n\n logger.section(\"Preserved Configuration\");\n\n if (existingSubscriptions) {\n console.log(chalk.bold(\"Subscriptions:\"));\n if (existingSubscriptions.hasClaude)\n console.log(chalk.green(` ✓ Claude (${existingSubscriptions.claudeTier})`));\n if (existingSubscriptions.hasOpenAI) console.log(chalk.green(\" ✓ OpenAI\"));\n if (existingSubscriptions.hasGoogle)\n console.log(chalk.green(` ✓ Google (${existingSubscriptions.googleAuth})`));\n if (existingSubscriptions.hasGitHubCopilot)\n console.log(chalk.green(` ✓ GitHub Copilot (${existingSubscriptions.copilotPlan})`));\n }\n\n if (existingModels) {\n console.log(chalk.bold(\"\\nModel Assignments:\"));\n console.log(chalk.green(` ✓ Marvin: ${existingModels.marvin}`));\n console.log(chalk.green(` ✓ Oracle: ${existingModels.oracle}`));\n console.log(chalk.green(` ✓ Librarian: ${existingModels.librarian}`));\n }\n console.log();\n\n const newFeatures = detectNewFeatures(migrationResult.sdlcConfig);\n\n if (newFeatures.length > 0 && !options.yes) {\n logger.section(\"New Features Available\");\n\n for (const feature of newFeatures) {\n if (feature === \"autoGitOperations\") {\n const enable = await confirm({\n message: \"Enable automatic git operations? (commits, pushes by agents)\",\n default: false,\n });\n if (enable) {\n const migratedFeatures = migrationResult.sdlcConfig.features as Record<string, unknown>;\n migratedFeatures.autoGitOperations = true;\n }\n }\n }\n }\n\n if (!existingSubscriptions) {\n logger.error(\"Could not extract subscription information from existing config.\");\n logger.info(\"Please run with --reconfigure to set up from scratch.\");\n process.exit(1);\n }\n\n const fullAnswers: InstallAnswers = {\n subscriptions: existingSubscriptions as SubscriptionAnswers,\n models: existingModels || {\n marvin: \"\",\n oracle: \"\",\n librarian: \"\",\n },\n methodology: existingMethodology || {\n defaultTrack: \"quick-flow\",\n autoStatusUpdate: true,\n },\n features: existingFeatures || {\n enabledFeatures: [],\n mcps: [],\n },\n advanced: existingAdvanced || {\n parallelIssueLimit: 0,\n experimental: [],\n },\n installLocation: \"global\",\n };\n\n const merged = mergeConfigs(\n {\n existingSdlc: migrationResult.sdlcConfig,\n existingOmo: migrationResult.omoConfig,\n fullAnswers,\n },\n migrationResult.opencodeConfig\n );\n\n const writeSpinner = ora(\"Writing configuration...\").start();\n writeMergedConfigs(merged);\n writeSpinner.succeed(\"Configuration files updated\");\n\n logger.section(\"Updating Packages\");\n\n const fileManager = new FileManager();\n\n const sdlcUpdate = updatesAvailable.find((u) => u.name === \"opencode-sdlc-plugin\");\n if (sdlcUpdate) {\n const sdlcSpinner = ora(\"Updating opencode-sdlc-plugin...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc-plugin@${channel}`]);\n sdlcSpinner.succeed(`opencode-sdlc-plugin updated to ${sdlcUpdate.latest}`);\n } catch (err) {\n sdlcSpinner.fail(\"Failed to update opencode-sdlc-plugin\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n const generator = new ConfigGenerator(fullAnswers);\n const packages = generator.getRequiredPackages();\n\n const sdlcPackage = packages.find((p) => p.startsWith(\"opencode-sdlc-plugin\"));\n if (sdlcPackage) {\n const sdlcSpinner = ora(\"Installing opencode-sdlc-plugin...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc-plugin@${channel}`]);\n sdlcSpinner.succeed(\"opencode-sdlc-plugin installed\");\n } catch (err) {\n sdlcSpinner.fail(\"Failed to install opencode-sdlc-plugin\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n const pluginUpdates = updatesAvailable.filter((u) => u.name !== \"opencode-sdlc-plugin\");\n if (pluginUpdates.length > 0) {\n const pluginSpinner = ora(\"Updating plugins...\").start();\n try {\n const packages = pluginUpdates.map((u) => `${u.name}@latest`);\n await fileManager.installDependencies(packages);\n pluginSpinner.succeed(`Updated ${pluginUpdates.length} plugin(s)`);\n } catch (err) {\n pluginSpinner.fail(\"Failed to update plugins\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n const generator = new ConfigGenerator(fullAnswers);\n const allPackages = generator.getRequiredPackages();\n const pluginPackages = allPackages.filter((p) => !p.startsWith(\"opencode-sdlc-plugin\"));\n\n if (pluginPackages.length > 0) {\n const pluginSpinner = ora(`Installing plugins: ${pluginPackages.join(\", \")}...`).start();\n try {\n await fileManager.installDependencies(pluginPackages);\n pluginSpinner.succeed(`Installed ${pluginPackages.length} plugin(s)`);\n } catch (err) {\n pluginSpinner.fail(\"Failed to install plugins\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n // Bridge commands removed in v1.0 - modes replace commands entirely\n // Clean up any existing bridge commands from previous installations\n try {\n await fileManager.removeCommands();\n } catch {\n // Ignore errors during cleanup\n }\n\n // v1.0.0: Copy agent mode files if modes are configured\n const modesConfig = migrationResult.sdlcConfig.modes as { enabled?: string[] } | undefined;\n if (modesConfig?.enabled && modesConfig.enabled.length > 0) {\n const agentSpinner = ora(\"Updating Marvin mode agents...\").start();\n try {\n const projectDir = process.cwd();\n const copiedAgents = await fileManager.copyAgentModes(projectDir, modesConfig.enabled);\n if (copiedAgents.length > 0) {\n agentSpinner.succeed(`Updated ${copiedAgents.length} Marvin mode agents`);\n } else {\n agentSpinner.succeed(\"Marvin mode agents up to date\");\n }\n } catch (_err) {\n agentSpinner.warn(\"Could not update Marvin mode agents\");\n }\n }\n\n logger.successBanner(`UPGRADED TO OPENCODE ATHENA ${VERSION}!`);\n\n if (backups.sdlcBackup || backups.omoBackup || backups.opencodeBackup) {\n console.log(chalk.gray(\"\\nBackups saved:\"));\n if (backups.sdlcBackup) console.log(chalk.gray(` • ${backups.sdlcBackup}`));\n if (backups.omoBackup) console.log(chalk.gray(` • ${backups.omoBackup}`));\n if (backups.opencodeBackup) console.log(chalk.gray(` • ${backups.opencodeBackup}`));\n }\n\n console.log(chalk.gray(\"\\nRestart OpenCode to use the upgraded configuration.\"));\n console.log();\n}\n","/**\n * OpenCode SDLC CLI\n *\n * Interactive installer and management tool for OpenCode SDLC.\n */\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { DISPLAY_NAME, TAGLINE, VERSION } from \"../shared/constants.js\";\nimport { doctor } from \"./commands/doctor.js\";\nimport { info } from \"./commands/info.js\";\nimport { install } from \"./commands/install.js\";\nimport { providers } from \"./commands/providers.js\";\nimport { uninstall } from \"./commands/uninstall.js\";\nimport { upgrade } from \"./commands/upgrade.js\";\nimport { listProfiles } from \"./utils/preset-loader.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"opencode-sdlc\")\n .description(\n `${chalk.cyan(DISPLAY_NAME)} - ${TAGLINE}\\nTDD-driven development toolkit with GitHub Issues integration for OpenCode`\n )\n .version(VERSION);\n\nprogram\n .command(\"install\")\n .description(\"Install and configure OpenCode SDLC\")\n .option(\"-y, --yes\", \"Skip confirmation prompts (uses Event Modeling profile)\", false)\n .option(\"--advanced\", \"Show advanced configuration options\", false)\n .option(\"--global\", \"Install globally (default)\", true)\n .option(\"--local\", \"Install to current project only\", false)\n .option(\"--list-profiles\", \"List available profiles and exit\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration (ignore existing config)\", false)\n .action(async (options) => {\n if (options.listProfiles) {\n displayProfiles();\n return;\n }\n await install(options);\n });\n\nprogram\n .command(\"upgrade\")\n .description(\"Upgrade OpenCode SDLC to latest version\")\n .option(\"--check\", \"Check for updates without installing\", false)\n .option(\"-y, --yes\", \"Skip confirmation prompts\", false)\n .action(upgrade);\n\nprogram\n .command(\"doctor\")\n .description(\"Diagnose and fix common issues\")\n .option(\"--fix\", \"Automatically fix issues\", false)\n .action(doctor);\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove OpenCode SDLC\")\n .option(\"--keep-config\", \"Keep configuration files\", false)\n .option(\"--keep-deps\", \"Keep npm dependencies\", false)\n .action(uninstall);\n\nprogram.command(\"info\").description(\"Show current configuration and status\").action(info);\n\nprogram\n .command(\"providers [action]\")\n .description(\"Manage LLM provider subscriptions (status/add/remove/refresh/sync)\")\n .option(\"-v, --verbose\", \"Show detailed provider information\", false)\n .action(async (action) => {\n await providers({ action });\n });\n\n/**\n * Display available profiles in a formatted way\n */\nfunction displayProfiles(): void {\n console.log(chalk.bold.cyan(\"\\nAvailable Development Profiles:\\n\"));\n\n const profiles = listProfiles();\n\n for (const profile of profiles) {\n console.log(chalk.bold(` ${profile.name}`));\n console.log(chalk.gray(` ${profile.description}`));\n console.log();\n }\n\n console.log(chalk.gray(\"Usage: opencode-sdlc install\"));\n console.log(chalk.gray(\" opencode-sdlc install --yes (uses Event Modeling profile)\\n\"));\n}\n\nprogram.parse();\n"]}
1
+ {"version":3,"sources":["../../src/shared/constants.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/prerequisites.ts","../../src/shared/schemas.ts","../../src/cli/utils/validators.ts","../../src/cli/commands/doctor.ts","../../src/cli/commands/info.ts","../../src/plugin/utils/model-params.ts","../../src/cli/generators/omo-config.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/questions/features.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/generators/config-generator.ts","../../src/shared/github-client.ts","../../src/cli/utils/git-remote.ts","../../src/cli/questions/github-smart.ts","../../src/cli/utils/config-loader.ts","../../src/cli/utils/config-merger.ts","../../src/cli/utils/migrations/migrations.ts","../../src/cli/utils/migrations/runner.ts","../../src/cli/utils/preset-loader.ts","../../src/cli/commands/install.ts","../../src/cli/utils/auth-detector.ts","../../src/cli/commands/providers.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/upgrade.ts","../../src/cli/index.ts"],"names":["dirname","fileURLToPath","join","existsSync","readFileSync","chalk","execAsync","promisify","exec","info","ora","execSync","result","mkdirSync","copyFileSync","confirm","select","homedir","providers","semver"],"mappings":"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","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Get version from package.json at runtime.\n * Handles both bundled (dist/) and development (src/) scenarios.\n */\nfunction getPackageVersion(): string {\n try {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n\n const possiblePaths = [\n join(currentDir, \"..\", \"..\", \"package.json\"),\n join(currentDir, \"..\", \"..\", \"..\", \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n if (!existsSync(pkgPath)) continue;\n\n const content = readFileSync(pkgPath, \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.version) return pkg.version;\n }\n\n return \"0.0.0\";\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.error(\"[opencode-sdlc] Warning: package.json contains invalid JSON\");\n }\n return \"0.0.0\";\n }\n}\n\n/**\n * Current version of OpenCode SDLC Plugin\n * Dynamically read from package.json\n */\nexport const VERSION = getPackageVersion();\n\n/**\n * Package name for CLI display\n */\nexport const PACKAGE_NAME = \"opencode-sdlc-plugin\";\n\n/**\n * CLI display name\n */\nexport const DISPLAY_NAME = \"OpenCode SDLC\";\n\n/**\n * Tagline for CLI header\n */\nexport const TAGLINE = \"Strict TDD with domain modeling and event sourcing\";\n\n/**\n * Configuration paths\n */\nexport const CONFIG_PATHS = {\n /** Global OpenCode config directory */\n globalConfigDir: join(homedir(), \".config\", \"opencode\"),\n\n /** Global SDLC config file */\n globalSdlcConfig: join(homedir(), \".config\", \"opencode\", \"sdlc.json\"),\n\n /** Global OpenCode config file */\n globalOpencodeConfig: join(homedir(), \".config\", \"opencode\", \"opencode.json\"),\n\n /** Global oh-my-opencode config file */\n globalOmoConfig: join(homedir(), \".config\", \"opencode\", \"oh-my-opencode.json\"),\n\n /** Commands directory */\n commandsDir: join(homedir(), \".config\", \"opencode\", \"command\"),\n\n /** Plugin directory */\n pluginDir: join(homedir(), \".config\", \"opencode\", \"plugin\"),\n\n /** SDLC internal files directory (state, backups) */\n sdlcDir: join(homedir(), \".config\", \"opencode\", \"sdlc\"),\n\n /** SDLC backups directory */\n backupsDir: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"backups\"),\n\n /** SDLC state file (for issue tracking) */\n stateFile: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"sdlc-state.json\"),\n\n /** Legacy state file path (for migration) */\n legacyStateFile: join(homedir(), \".config\", \"opencode\", \"sdlc-state.json\"),\n} as const;\n\n/**\n * Project-specific paths (relative to project root)\n */\nexport const PROJECT_PATHS = {\n /** Local SDLC config */\n localConfig: \".opencode/sdlc.json\",\n} as const;\n\n/**\n * Default configuration values (v1.0.0+)\n */\nexport const DEFAULTS = {\n // ============================================================================\n // New v1.0.0 defaults\n // ============================================================================\n\n /** Default modes configuration (v1.0.0+) */\n modes: {\n default: \"build\" as const,\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"] as const,\n },\n\n /** Default memory configuration (v1.0.0+) */\n memory: {\n backend: \"stateless\" as const,\n checkpointTtl: 86400,\n },\n\n /** Default subagent model configuration (v1.0.0+)\n * All subagents default to \"inherit\" which uses the marvin model.\n * Only specify overrides for subagents that need different models.\n */\n subagents: {\n // TDD agents - use same model as marvin by default\n red: \"inherit\" as const,\n green: \"inherit\" as const,\n domain: \"inherit\" as const,\n refactor: \"inherit\" as const,\n // Event modeling agents\n discovery: \"inherit\" as const,\n workflow: \"inherit\" as const,\n gwt: \"inherit\" as const,\n \"model-checker\": \"inherit\" as const,\n // Architecture agents\n architect: \"inherit\" as const,\n adr: \"inherit\" as const,\n \"design-facilitator\": \"inherit\" as const,\n // Planning agents\n story: \"inherit\" as const,\n pm: \"inherit\" as const,\n analyst: \"inherit\" as const,\n // Review agents (read-only, can use faster models)\n reviewer: \"inherit\" as const,\n ux: \"inherit\" as const,\n mutation: \"inherit\" as const,\n },\n\n // ============================================================================\n // Existing v0.3.0+ defaults (with v1.0 extensions)\n // ============================================================================\n\n /** Default TDD configuration */\n tdd: {\n enabled: true,\n verbosity: \"brief\" as const,\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n // v1.0.0 additions\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n },\n\n /** Default Event Modeling configuration */\n eventModeling: {\n enabled: false,\n outputPath: \"docs/event-model\",\n },\n\n /** Default Git configuration */\n git: {\n workflow: \"standard\" as const,\n requireClean: true,\n worktrees: false,\n },\n\n /** Default features enabled (v0.3.0+) */\n features: {\n orchestratorOnly: false,\n todoSync: true,\n partyReview: true,\n debuggingProtocol: true,\n memento: false,\n notifications: true,\n lspTools: true,\n },\n\n /** Default MCPs enabled (v0.3.0+) */\n mcps: {\n context7: true,\n exa: true,\n grepApp: true,\n memento: false,\n },\n\n /** Default routing configuration (v1.0.0+) */\n routing: {\n classifierModel: \"anthropic/claude-haiku\",\n },\n} as const;\n\n/**\n * Minimum compatible versions\n */\nexport const MIN_VERSIONS = {\n node: \"20.0.0\",\n opencode: \"1.0.132\",\n} as const;\n","/**\n * File Manager\n *\n * Handles file read/write operations for the CLI installer.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { copyFile, mkdir, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Get the package root directory (where prompts/ and config/ live)\n * Handles both bundled and unbundled scenarios.\n */\nfunction getPackageRoot(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n if (existsSync(join(bundledRoot, \"prompts\"))) {\n return bundledRoot;\n }\n\n // Unbundled development: src/cli/utils/file-manager.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n if (existsSync(join(devRoot, \"prompts\"))) {\n return devRoot;\n }\n\n // Fallback to bundled root even if prompts dir doesn't exist\n return bundledRoot;\n}\n\nexport class FileManager {\n private configDir: string;\n\n constructor(configDir?: string) {\n this.configDir = configDir || CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Ensure a directory exists\n */\n async ensureDir(dir: string): Promise<void> {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n }\n\n /**\n * Write multiple files atomically\n */\n async writeFiles(files: GeneratedFile[]): Promise<void> {\n for (const file of files) {\n const dir = dirname(file.path);\n await this.ensureDir(dir);\n await writeFile(file.path, file.content, \"utf-8\");\n }\n }\n\n /**\n * Read a JSON configuration file\n */\n readJsonFile<T = Record<string, unknown>>(path: string): T | null {\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Write a JSON configuration file\n */\n async writeJsonFile(path: string, data: unknown): Promise<void> {\n const dir = dirname(path);\n await this.ensureDir(dir);\n await writeFile(path, JSON.stringify(data, null, 2), \"utf-8\");\n }\n\n /**\n * Check if a file exists\n */\n exists(path: string): boolean {\n return existsSync(path);\n }\n\n /**\n * Install npm dependencies in the config directory\n */\n async installDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n // Ensure config directory exists\n await this.ensureDir(this.configDir);\n\n // Check if package.json exists, create if not\n const packageJsonPath = join(this.configDir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(\n {\n name: \"opencode-config\",\n private: true,\n type: \"module\",\n },\n null,\n 2\n )\n );\n }\n\n // Install packages\n const packageList = packages.join(\" \");\n await execAsync(`npm install ${packageList}`, {\n cwd: this.configDir,\n timeout: 120000,\n });\n }\n\n /**\n * Uninstall npm dependencies from the config directory\n */\n async uninstallDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n const packageList = packages.join(\" \");\n try {\n await execAsync(`npm uninstall ${packageList}`, {\n cwd: this.configDir,\n timeout: 60000,\n });\n } catch {\n // Ignore errors if packages aren't installed\n }\n }\n\n /**\n * Copy bridge commands from package to config directory\n *\n * @deprecated Bridge commands have been removed in v1.0.\n * This method now returns an empty array for backwards compatibility.\n * Use mode-based workflow instead.\n */\n async copyCommands(): Promise<string[]> {\n // Bridge commands removed in v1.0 - modes replace commands entirely\n return [];\n }\n\n /**\n * Copy Marvin mode agent files to project .opencode/agent directory\n *\n * @param projectDir - The project directory to copy to\n * @param enabledModes - Array of enabled modes to copy\n * @returns Array of copied file names\n */\n async copyAgentModes(projectDir: string, enabledModes: string[]): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n await this.ensureDir(agentDir);\n\n const packageRoot = getPackageRoot();\n const sourceModesDir = join(packageRoot, \"prompts\", \"modes\");\n\n const copiedFiles: string[] = [];\n\n // Map of mode names to their file names\n const modeFileMap: Record<string, string> = {\n build: \"build.md\",\n discover: \"discover.md\",\n model: \"model.md\",\n prd: \"prd.md\",\n architect: \"architect.md\",\n pm: \"pm.md\",\n };\n\n if (existsSync(sourceModesDir)) {\n for (const mode of enabledModes) {\n const sourceFile = modeFileMap[mode];\n if (!sourceFile) continue;\n\n const sourcePath = join(sourceModesDir, sourceFile);\n if (existsSync(sourcePath)) {\n const destPath = join(agentDir, sourceFile);\n await copyFile(sourcePath, destPath);\n copiedFiles.push(sourceFile);\n }\n }\n }\n\n return copiedFiles;\n }\n\n /**\n * Remove agent mode files from project .opencode/agent directory\n *\n * @param projectDir - The project directory to remove from\n * @returns Array of removed file names\n */\n async removeAgentModes(projectDir: string): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n const removedFiles: string[] = [];\n\n if (!existsSync(agentDir)) {\n return removedFiles;\n }\n\n const modeFiles = [\"build.md\", \"plan.md\", \"model.md\", \"prd.md\", \"architect.md\", \"pm.md\"];\n\n const files = await readdir(agentDir);\n for (const file of files) {\n if (modeFiles.includes(file)) {\n const filePath = join(agentDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove bridge commands from config directory\n */\n async removeCommands(): Promise<string[]> {\n const commandsDir = CONFIG_PATHS.commandsDir;\n const removedFiles: string[] = [];\n\n if (!existsSync(commandsDir)) {\n return removedFiles;\n }\n\n const files = await readdir(commandsDir);\n for (const file of files) {\n if (file.startsWith(\"sdlc-\") && file.endsWith(\".md\")) {\n const filePath = join(commandsDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc configuration files\n */\n async removeConfigFiles(): Promise<string[]> {\n const removedFiles: string[] = [];\n\n const filesToRemove = [CONFIG_PATHS.globalSdlcConfig, CONFIG_PATHS.legacyStateFile];\n\n for (const file of filesToRemove) {\n if (existsSync(file)) {\n await rm(file);\n removedFiles.push(file);\n }\n }\n\n if (existsSync(CONFIG_PATHS.sdlcDir)) {\n await rm(CONFIG_PATHS.sdlcDir, { recursive: true });\n removedFiles.push(CONFIG_PATHS.sdlcDir);\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc from opencode.json plugin list\n */\n async removeFromOpencodeConfig(): Promise<boolean> {\n const opencodeConfig = this.readJsonFile<{\n plugin?: string[];\n [key: string]: unknown;\n }>(CONFIG_PATHS.globalOpencodeConfig);\n\n if (!opencodeConfig || !opencodeConfig.plugin) {\n return false;\n }\n\n const sdlcPlugins = [\n \"opencode-sdlc-plugin\",\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const originalLength = opencodeConfig.plugin.length;\n opencodeConfig.plugin = opencodeConfig.plugin.filter(\n (p) => !sdlcPlugins.some((ap) => p.includes(ap))\n );\n\n if (opencodeConfig.plugin.length !== originalLength) {\n await this.writeJsonFile(CONFIG_PATHS.globalOpencodeConfig, opencodeConfig);\n return true;\n }\n\n return false;\n }\n\n /**\n * Backup a file before modifying\n */\n async backupFile(path: string): Promise<string | null> {\n if (!existsSync(path)) {\n return null;\n }\n\n const backupPath = `${path}.backup`;\n await copyFile(path, backupPath);\n return backupPath;\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(backupPath: string): Promise<void> {\n const originalPath = backupPath.replace(/\\.backup$/, \"\");\n if (existsSync(backupPath)) {\n await copyFile(backupPath, originalPath);\n await rm(backupPath);\n }\n }\n}\n","/**\n * Logger utility for CLI output\n *\n * Provides colored, consistent logging for the CLI.\n */\n\nimport chalk from \"chalk\";\n\nexport const logger = {\n /**\n * Log an informational message\n */\n info: (message: string): void => {\n console.log(chalk.blue(\"i\"), message);\n },\n\n /**\n * Log a success message\n */\n success: (message: string): void => {\n console.log(chalk.green(\"✓\"), message);\n },\n\n /**\n * Log a warning message\n */\n warn: (message: string): void => {\n console.log(chalk.yellow(\"!\"), message);\n },\n\n /**\n * Log an error message\n */\n error: (message: string): void => {\n console.log(chalk.red(\"✖\"), message);\n },\n\n /**\n * Log a debug message (only when DEBUG env var is set)\n */\n debug: (message: string): void => {\n if (process.env.DEBUG) {\n console.log(chalk.gray(\"[debug]\"), message);\n }\n },\n\n /**\n * Log a step in a process\n */\n step: (step: number, total: number, message: string): void => {\n console.log(chalk.cyan(`[${step}/${total}]`), message);\n },\n\n /**\n * Log a blank line\n */\n blank: (): void => {\n console.log();\n },\n\n /**\n * Log a section header\n */\n section: (title: string): void => {\n console.log();\n console.log(chalk.bold(title));\n console.log();\n },\n\n /**\n * Log a key-value pair\n */\n keyValue: (key: string, value: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(`${key}:`)} ${value}`);\n },\n\n /**\n * Log a list item\n */\n listItem: (item: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(\"-\")} ${item}`);\n },\n\n /**\n * Display the Sdlc banner\n */\n banner: (): void => {\n console.log(\n chalk.cyan(`\n╔═══════════════════════════════════════════════════════════════╗\n║ OPENCODE ATHENA ║\n║ Strategic Wisdom Meets Practical Execution ║\n╠═══════════════════════════════════════════════════════════════╣\n║ Unifying oh-my-opencode + BMAD METHOD for OpenCode ║\n╚═══════════════════════════════════════════════════════════════╝\n`)\n );\n },\n\n /**\n * Display a success banner\n */\n successBanner: (message: string): void => {\n const line = \"═\".repeat(message.length + 4);\n console.log(\n chalk.green(`\n╔${line}╗\n║ ${message} ║\n╚${line}╝\n`)\n );\n },\n};\n","/**\n * Prerequisites checker\n *\n * Validates that required dependencies and versions are available.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS, MIN_VERSIONS } from \"../../shared/constants.js\";\nimport type { Prerequisites } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Parse a semantic version string into components\n */\nfunction parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return {\n major: Number.parseInt(match[1], 10),\n minor: Number.parseInt(match[2], 10),\n patch: Number.parseInt(match[3], 10),\n };\n}\n\n/**\n * Compare two semantic versions\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\nfunction compareVersions(a: string, b: string): number {\n const parsedA = parseVersion(a);\n const parsedB = parseVersion(b);\n\n if (!parsedA || !parsedB) return 0;\n\n if (parsedA.major !== parsedB.major) {\n return parsedA.major < parsedB.major ? -1 : 1;\n }\n if (parsedA.minor !== parsedB.minor) {\n return parsedA.minor < parsedB.minor ? -1 : 1;\n }\n if (parsedA.patch !== parsedB.patch) {\n return parsedA.patch < parsedB.patch ? -1 : 1;\n }\n return 0;\n}\n\n/**\n * Check Node.js version\n */\nasync function checkNode(): Promise<Prerequisites[\"node\"]> {\n try {\n const { stdout } = await execAsync(\"node --version\");\n const version = stdout.trim().replace(/^v/, \"\");\n const compatible = compareVersions(version, MIN_VERSIONS.node) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check OpenCode installation and version\n */\nasync function checkOpenCode(): Promise<Prerequisites[\"opencode\"]> {\n try {\n const { stdout } = await execAsync(\"opencode --version\");\n const version = stdout.trim();\n const compatible = compareVersions(version, MIN_VERSIONS.opencode) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check existing Sdlc installation\n */\nasync function checkSdlcInstalled(): Promise<Prerequisites[\"sdlc\"]> {\n if (!existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n return { installed: false };\n }\n\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n const config = JSON.parse(content);\n return {\n installed: true,\n version: config.version,\n };\n } catch {\n return { installed: true };\n }\n}\n\n/**\n * Check all prerequisites\n */\nexport async function checkPrerequisites(): Promise<Prerequisites> {\n const [node, opencode, sdlc] = await Promise.all([\n checkNode(),\n checkOpenCode(),\n checkSdlcInstalled(),\n ]);\n\n return { node, opencode, sdlc };\n}\n\n/**\n * Check if oh-my-opencode is installed\n */\nexport async function checkOhMyOpenCode(): Promise<{ installed: boolean; version?: string }> {\n try {\n const { stdout } = await execAsync(\"npm list oh-my-opencode --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const version = data.dependencies?.[\"oh-my-opencode\"]?.version;\n return { installed: !!version, version };\n } catch {\n return { installed: false };\n }\n}\n\n/**\n * Get installed plugin versions from OpenCode config directory\n */\nexport async function getInstalledPlugins(): Promise<Record<string, string>> {\n try {\n const { stdout } = await execAsync(\"npm list --depth=0 --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const deps = data.dependencies || {};\n const result: Record<string, string> = {};\n for (const [name, info] of Object.entries(deps)) {\n result[name] = (info as { version?: string }).version || \"unknown\";\n }\n return result;\n } catch {\n return {};\n }\n}\n\n/**\n * Check if a specific npm package is outdated\n */\nexport async function checkPackageUpdate(\n packageName: string\n): Promise<{ current?: string; latest?: string; updateAvailable: boolean }> {\n try {\n const { stdout } = await execAsync(`npm outdated ${packageName} --json`, {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const info = data[packageName];\n if (info) {\n return {\n current: info.current,\n latest: info.latest,\n updateAvailable: info.current !== info.latest,\n };\n }\n return { updateAvailable: false };\n } catch {\n // npm outdated returns exit code 1 if packages are outdated\n // Try to parse the output anyway\n return { updateAvailable: false };\n }\n}\n\n/**\n * Validate that a config file is valid JSON\n */\nexport function validateJsonFile(path: string): { valid: boolean; error?: string } {\n if (!existsSync(path)) {\n return { valid: false, error: \"File does not exist\" };\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n return { valid: true };\n } catch (err) {\n return {\n valid: false,\n error: err instanceof Error ? err.message : \"Invalid JSON\",\n };\n }\n}\n","import { z } from \"zod\";\n\n/**\n * Zod validation schemas for OpenCode SDLC\n */\n\n// ============================================================================\n// Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for provider auth method\n */\nexport const ProviderAuthMethodSchema = z.enum([\"subscription\", \"api\", \"none\"]);\n\n/**\n * Schema for subscription configuration\n */\nexport const SubscriptionSchema = z.object({\n claude: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n tier: z.enum([\"max5x\", \"max20x\", \"pro\", \"none\"]),\n }),\n openai: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n }),\n google: z.object({\n enabled: z.boolean(),\n authMethod: z.enum([\"antigravity\", \"personal\", \"api\", \"none\"]),\n }),\n githubCopilot: z.object({\n enabled: z.boolean(),\n plan: z.enum([\"free\", \"pro\", \"pro-plus\", \"business\", \"enterprise\", \"none\"]),\n enabledModels: z.array(z.string()).optional(),\n }),\n});\n\n// ============================================================================\n// Mode Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for SDLC operation modes\n */\nexport const SdlcModeSchema = z.enum([\"discover\", \"model\", \"architect\", \"pm\", \"build\"]);\n\n/**\n * Schema for modes configuration (v1.0.0+)\n */\nexport const ModesConfigSchema = z.object({\n default: SdlcModeSchema.default(\"build\").describe(\"Default mode on startup\"),\n eventModeling: z.boolean().default(true).describe(\"true=Model mode, false=PRD mode\"),\n enabled: z\n .array(SdlcModeSchema)\n .default([\"discover\", \"model\", \"architect\", \"pm\", \"build\"])\n .describe(\"Array of enabled modes\"),\n});\n\n// ============================================================================\n// Memory Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for memory backend types\n */\nexport const MemoryBackendSchema = z.enum([\"memento\", \"stateless\"]);\n\n/**\n * Schema for memory configuration (v1.0.0+)\n */\nexport const MemoryConfigSchema = z.object({\n backend: MemoryBackendSchema.default(\"stateless\").describe(\"Memory backend type\"),\n checkpointTtl: z\n .number()\n .int()\n .positive()\n .default(86400)\n .describe(\"How long to keep checkpoints in seconds\"),\n});\n\n// ============================================================================\n// GitHub Issues Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for GitHub project board statuses\n */\nexport const GitHubStatusSchema = z.enum([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"]);\n\n/**\n * Schema for GitHub Issues integration configuration\n */\nexport const GitHubConfigSchema = z.object({\n owner: z.string().describe(\"GitHub repository owner (user or org)\"),\n repo: z.string().describe(\"GitHub repository name\"),\n project: z.number().optional().describe(\"GitHub Project number for board tracking\"),\n statuses: z\n .array(GitHubStatusSchema)\n .default([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"])\n .describe(\"Project board column names\"),\n});\n\n// ============================================================================\n// TDD Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for TDD verbosity levels\n */\nexport const TddVerbositySchema = z.enum([\"silent\", \"brief\", \"explain\"]);\n\n/**\n * Schema for mutation testing configuration\n */\nexport const MutationTestingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable mutation testing\"),\n requiredScore: z\n .number()\n .min(0)\n .max(100)\n .default(80)\n .describe(\"Minimum mutation score required (0-100)\"),\n});\n\n/**\n * Schema for TDD cycle enforcement configuration\n */\nexport const TddConfigSchema = z.object({\n enabled: z.boolean().default(true).describe(\"Enable TDD cycle enforcement\"),\n verbosity: TddVerbositySchema.default(\"brief\").describe(\"TDD feedback verbosity\"),\n bypassPatterns: z\n .array(z.string())\n .default([\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"])\n .describe(\"File patterns that bypass TDD checks\"),\n mutationTesting: MutationTestingConfigSchema.default({\n enabled: false,\n requiredScore: 80,\n }),\n // New v1.0.0 fields\n domainVetoEnabled: z\n .boolean()\n .default(true)\n .describe(\"Enable domain agent veto power over type changes\"),\n debateRounds: z\n .number()\n .int()\n .min(1)\n .max(5)\n .default(2)\n .describe(\"Max debate rounds before escalation to user\"),\n requireVerification: z\n .boolean()\n .default(true)\n .describe(\"Require test output evidence before phase transitions\"),\n});\n\n// ============================================================================\n// Event Modeling Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Event Modeling integration configuration\n */\nexport const EventModelingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable Event Modeling workflow\"),\n outputPath: z.string().default(\"docs/event-model\").describe(\"Path to event model output files\"),\n});\n\n// ============================================================================\n// Git Workflow Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Git workflow types\n */\nexport const GitWorkflowSchema = z.enum([\"standard\", \"git-spice\"]);\n\n/**\n * Schema for Git integration configuration\n */\nexport const GitConfigSchema = z.object({\n workflow: GitWorkflowSchema.default(\"standard\").describe(\"Git workflow style\"),\n requireClean: z\n .boolean()\n .default(true)\n .describe(\"Require clean working directory before operations\"),\n worktrees: z.boolean().default(false).describe(\"Enable git worktrees for parallel work\"),\n});\n\n// ============================================================================\n// Feature Flags Schemas\n// ============================================================================\n\n/**\n * Schema for SDLC feature flags (v0.3.0+)\n */\nexport const FeaturesSchema = z.object({\n orchestratorOnly: z\n .boolean()\n .default(false)\n .describe(\"Main conversation delegates all file writes to agents\"),\n todoSync: z.boolean().default(true).describe(\"Auto-sync todos with GitHub issue checkboxes\"),\n partyReview: z.boolean().default(true).describe(\"Enable party review for architecture decisions\"),\n debuggingProtocol: z.boolean().default(true).describe(\"Enable debugging protocol with Oracle\"),\n memento: z.boolean().default(false).describe(\"Enable Memento MCP for persistent memory\"),\n notifications: z.boolean().default(true).describe(\"Show in-TUI notifications\"),\n lspTools: z.boolean().default(true).describe(\"Enable LSP tools for code intelligence\"),\n});\n\n/**\n * Schema for MCP configuration (v0.3.0+)\n */\nexport const McpsSchema = z.object({\n context7: z.boolean().default(true).describe(\"Context7 for library documentation\"),\n exa: z.boolean().default(true).describe(\"Exa for web search\"),\n grepApp: z.boolean().default(true).describe(\"grep.app for code search\"),\n memento: z.boolean().default(false).describe(\"Memento for persistent memory\"),\n});\n\n// ============================================================================\n// Legacy BMAD Configuration Schema (Deprecated)\n// ============================================================================\n\n/**\n * @deprecated Use GitHubConfigSchema instead. BMAD configuration is no longer supported in v0.3.0+.\n */\nexport const LegacyBmadConfigSchema = z.object({\n defaultTrack: z.enum([\"quick-flow\", \"enterprise\"]),\n autoStatusUpdate: z.boolean(),\n parallelIssueLimit: z.number().int().min(0).max(10),\n paths: z\n .object({\n prd: z.string().nullable().optional(),\n architecture: z.string().nullable().optional(),\n })\n .optional(),\n});\n\n/**\n * @deprecated Use FeaturesSchema instead. Legacy feature flags from pre-0.3.0.\n */\nexport const LegacyFeaturesSchema = z.object({\n bmadBridge: z.boolean(),\n autoStatus: z.boolean(),\n parallelExecution: z.boolean(),\n notifications: z.boolean(),\n contextMonitor: z.boolean(),\n commentChecker: z.boolean(),\n lspTools: z.boolean(),\n autoGitOperations: z.boolean().default(false),\n todoSync: z.boolean().default(true),\n});\n\n/**\n * @deprecated Use McpsSchema instead. Legacy MCP config from pre-0.3.0.\n */\nexport const LegacyMcpsSchema = z.object({\n context7: z.boolean(),\n exa: z.boolean(),\n grepApp: z.boolean(),\n});\n\n/**\n * Schema for LLM provider\n */\nexport const LLMProviderSchema = z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]);\n\n/**\n * Schema for agent routing configuration\n */\nexport const AgentRoutingSchema = z.object({\n requiresThinking: z.boolean().optional(),\n preferProvider: LLMProviderSchema.optional(),\n});\n\n/**\n * Schema for routing configuration\n */\nexport const RoutingConfigSchema = z.object({\n providerPriority: z.array(LLMProviderSchema),\n modelFamilyPriority: z.object({\n claude: z.array(LLMProviderSchema).optional(),\n gpt: z.array(LLMProviderSchema).optional(),\n gemini: z.array(LLMProviderSchema).optional(),\n }),\n agentOverrides: z.object({\n marvin: AgentRoutingSchema.optional(),\n oracle: AgentRoutingSchema.optional(),\n librarian: AgentRoutingSchema.optional(),\n frontend: AgentRoutingSchema.optional(),\n documentWriter: AgentRoutingSchema.optional(),\n multimodalLooker: AgentRoutingSchema.optional(),\n }),\n fallbackBehavior: z.object({\n autoFallback: z.boolean(),\n retryPeriodMs: z.number().min(0),\n notifyOnRateLimit: z.boolean(),\n }),\n // New v1.0.0 field\n classifierModel: z\n .string()\n .default(\"anthropic/claude-haiku\")\n .describe(\"Model for sdlc_classify_request tool (use cheapest available)\"),\n});\n\n/**\n * Schema for thinking level\n */\nexport const ThinkingLevelSchema = z.enum([\"off\", \"low\", \"medium\", \"high\"]);\n\n/**\n * Schema for agent settings (temperature and thinking level)\n */\nexport const AgentSettingsSchema = z.object({\n temperature: z.number().min(0).max(1).optional(),\n thinkingLevel: ThinkingLevelSchema.optional(),\n});\n\n/**\n * Schema for custom model definition\n */\nexport const CustomModelDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n provider: z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]),\n description: z.string().optional(),\n capabilities: z\n .object({\n thinking: z.boolean().optional(),\n contextWindow: z.number().optional(),\n supportsTemperature: z.boolean().optional(),\n })\n .optional(),\n});\n\n/**\n * Schema for subagent model value (either a model string or \"inherit\" to use marvin model)\n */\nexport const SubagentModelSchema = z.union([\n z.string().describe(\"Full model identifier (e.g., 'anthropic/claude-sonnet-4-20250514')\"),\n z.literal(\"inherit\").describe(\"Inherit model from marvin\"),\n]);\n\n/**\n * Schema for subagent type\n */\nexport const SubagentTypeSchema = z.enum([\n // TDD agents\n \"red\",\n \"green\",\n \"domain\",\n \"refactor\",\n // Event modeling agents\n \"discovery\",\n \"workflow\",\n \"gwt\",\n \"model-checker\",\n // Architecture agents\n \"architect\",\n \"adr\",\n \"design-facilitator\",\n // Planning agents\n \"story\",\n \"pm\",\n \"analyst\",\n // Review agents\n \"reviewer\",\n \"ux\",\n \"mutation\",\n]);\n\n/**\n * Schema for subagent model assignments (v1.0.0+)\n * All fields are optional - unspecified subagents inherit from marvin\n */\nexport const SubagentModelsSchema = z.object({\n // TDD agents\n red: SubagentModelSchema.optional().describe(\"Model for TDD red phase agent\"),\n green: SubagentModelSchema.optional().describe(\"Model for TDD green phase agent\"),\n domain: SubagentModelSchema.optional().describe(\"Model for domain modeling agent\"),\n refactor: SubagentModelSchema.optional().describe(\"Model for refactoring agent\"),\n\n // Event modeling agents\n discovery: SubagentModelSchema.optional().describe(\n \"Model for discovery/domain exploration agent\"\n ),\n workflow: SubagentModelSchema.optional().describe(\"Model for workflow design agent\"),\n gwt: SubagentModelSchema.optional().describe(\"Model for GWT specification agent\"),\n \"model-checker\": SubagentModelSchema.optional().describe(\n \"Model for event model validation agent\"\n ),\n\n // Architecture agents\n architect: SubagentModelSchema.optional().describe(\"Model for architect agent\"),\n adr: SubagentModelSchema.optional().describe(\"Model for ADR creation agent\"),\n \"design-facilitator\": SubagentModelSchema.optional().describe(\n \"Model for design facilitation agent\"\n ),\n\n // Planning agents\n story: SubagentModelSchema.optional().describe(\"Model for story/issue planning agent\"),\n pm: SubagentModelSchema.optional().describe(\"Model for PM agent\"),\n analyst: SubagentModelSchema.optional().describe(\"Model for business analyst agent\"),\n\n // Review agents\n reviewer: SubagentModelSchema.optional().describe(\"Model for code reviewer agent\"),\n ux: SubagentModelSchema.optional().describe(\"Model for UX review agent\"),\n mutation: SubagentModelSchema.optional().describe(\"Model for mutation testing agent\"),\n});\n\n/**\n * Schema for agent model assignments\n */\nexport const ModelsSchema = z.object({\n marvin: z.string().describe(\"Model for main orchestrator agent\"),\n oracle: z.string().describe(\"Model for debugging/reasoning agent\"),\n librarian: z.string().describe(\"Model for research/documentation agent\"),\n frontend: z.string().optional().describe(\"Model for UI/UX agent\"),\n documentWriter: z.string().optional().describe(\"Model for documentation generation agent\"),\n multimodalLooker: z.string().optional().describe(\"Model for image analysis agent\"),\n // New v1.0.0 field for subagent models\n subagents: SubagentModelsSchema.optional().describe(\"Per-subagent model overrides\"),\n settings: z\n .object({\n marvin: AgentSettingsSchema.optional(),\n oracle: AgentSettingsSchema.optional(),\n librarian: AgentSettingsSchema.optional(),\n frontend: AgentSettingsSchema.optional(),\n documentWriter: AgentSettingsSchema.optional(),\n multimodalLooker: AgentSettingsSchema.optional(),\n overrides: z.record(z.string(), AgentSettingsSchema).optional(),\n })\n .optional(),\n custom: z.array(CustomModelDefinitionSchema).optional(),\n});\n\n/**\n * Complete SDLC configuration schema (v1.0.0+)\n *\n * Supports transitional state:\n * - New fields (github, tdd, eventModeling, git, modes, memory) are optional during migration\n * - Old field (bmad) is optional and deprecated\n * - Features/MCPs support both old and new structures via union\n */\nexport const SdlcConfigSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n subscriptions: SubscriptionSchema,\n models: ModelsSchema,\n // New v1.0.0 configuration\n modes: ModesConfigSchema.optional(),\n memory: MemoryConfigSchema.optional(),\n // New v0.3.0+ configuration (optional during migration)\n github: GitHubConfigSchema.optional(),\n tdd: TddConfigSchema.optional(),\n eventModeling: EventModelingConfigSchema.optional(),\n git: GitConfigSchema.optional(),\n // Legacy BMAD configuration (deprecated, optional for backward compatibility)\n bmad: LegacyBmadConfigSchema.optional(),\n // Features and MCPs support both old and new structures\n features: z.union([FeaturesSchema, LegacyFeaturesSchema]),\n mcps: z.union([McpsSchema, LegacyMcpsSchema]),\n routing: RoutingConfigSchema,\n});\n\n/**\n * @deprecated Alias for backward compatibility. Use LegacyBmadConfigSchema directly.\n */\nexport const BmadConfigSchema = LegacyBmadConfigSchema;\n\n// ============================================================================\n// Tool Argument Schemas\n// ============================================================================\n\n/**\n * Schema for sdlc_get_issue arguments\n */\nexport const GetIssueArgsSchema = z.object({\n issueNumber: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\"Specific GitHub issue number. If omitted, loads the next issue in Ready status.\"),\n});\n\n/**\n * Schema for sdlc_update_issue_status arguments\n */\nexport const UpdateIssueStatusArgsSchema = z.object({\n issueNumber: z.number().int().positive().describe(\"GitHub issue number\"),\n status: z.string().describe(\"New status (must match a column name in GitHub project statuses)\"),\n});\n\n/**\n * Schema for sdlc_list_issues arguments\n */\nexport const ListIssuesArgsSchema = z.object({\n status: z.string().optional().describe(\"Filter by status column name\"),\n limit: z.number().int().positive().optional().default(20).describe(\"Max issues to return\"),\n});\n\n/**\n * Schema for sdlc_get_context arguments\n */\nexport const GetContextArgsSchema = z.object({});\n\n/**\n * Schema for sdlc_parallel arguments\n */\nexport const ParallelArgsSchema = z.object({\n issueNumbers: z.array(z.number()).describe(\"Array of issue numbers to implement in parallel\"),\n maxConcurrent: z.number().int().min(1).max(5).optional().default(3),\n});\n\n/**\n * Schema for sdlc_config arguments\n */\nexport const ConfigArgsSchema = z.object({\n action: z.enum([\"get\", \"set\", \"reset\"]).describe(\"Configuration action to perform\"),\n key: z\n .string()\n .optional()\n .describe(\"Configuration key (dot notation, e.g., 'bmad.autoStatusUpdate')\"),\n value: z.unknown().optional().describe(\"Value to set (for 'set' action)\"),\n});\n\n// ============================================================================\n// Type Exports (inferred from schemas)\n// ============================================================================\n\n// Core configuration types\nexport type SubscriptionConfig = z.infer<typeof SubscriptionSchema>;\nexport type ModelsConfig = z.infer<typeof ModelsSchema>;\nexport type RoutingConfigValidated = z.infer<typeof RoutingConfigSchema>;\nexport type SdlcConfigValidated = z.infer<typeof SdlcConfigSchema>;\n\n// New v0.3.0 configuration types\nexport type GitHubConfigValidated = z.infer<typeof GitHubConfigSchema>;\nexport type GitHubStatusValidated = z.infer<typeof GitHubStatusSchema>;\nexport type TddConfigValidated = z.infer<typeof TddConfigSchema>;\nexport type TddVerbosityValidated = z.infer<typeof TddVerbositySchema>;\nexport type MutationTestingConfigValidated = z.infer<typeof MutationTestingConfigSchema>;\nexport type EventModelingConfigValidated = z.infer<typeof EventModelingConfigSchema>;\nexport type GitConfigValidated = z.infer<typeof GitConfigSchema>;\nexport type GitWorkflowValidated = z.infer<typeof GitWorkflowSchema>;\nexport type FeaturesConfig = z.infer<typeof FeaturesSchema>;\nexport type McpsConfig = z.infer<typeof McpsSchema>;\n\n// New v1.0.0 configuration types\nexport type SdlcMode = z.infer<typeof SdlcModeSchema>;\nexport type ModesConfigValidated = z.infer<typeof ModesConfigSchema>;\nexport type MemoryBackend = z.infer<typeof MemoryBackendSchema>;\nexport type MemoryConfigValidated = z.infer<typeof MemoryConfigSchema>;\nexport type SubagentModel = z.infer<typeof SubagentModelSchema>;\nexport type SubagentModelsConfigValidated = z.infer<typeof SubagentModelsSchema>;\n\n// Legacy/deprecated types (for backward compatibility)\n/** @deprecated Use GitHubConfigValidated instead */\nexport type BmadConfig = z.infer<typeof LegacyBmadConfigSchema>;\n","/**\n * Input validators\n *\n * Validation functions for CLI inputs and configuration.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { SdlcConfigSchema } from \"../../shared/schemas.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\n\n/**\n * Validation result structure\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Validate an Sdlc configuration object\n */\nexport function validateSdlcConfig(config: unknown): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const parseResult = SdlcConfigSchema.safeParse(config);\n\n if (!parseResult.success) {\n result.valid = false;\n for (const issue of parseResult.error.issues) {\n result.errors.push(`${issue.path.join(\".\")}: ${issue.message}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a JSON configuration file\n */\nexport function validateJsonConfig(path: string): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n if (!existsSync(path)) {\n result.valid = false;\n result.errors.push(\"File does not exist\");\n return result;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n } catch (err) {\n result.valid = false;\n result.errors.push(err instanceof Error ? err.message : \"Invalid JSON\");\n }\n\n return result;\n}\n\n/**\n * Validate model selection based on available providers\n */\nexport function validateModelForProvider(\n model: string,\n providers: { claude: boolean; openai: boolean; google: boolean; githubCopilot?: boolean }\n): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const modelLower = model.toLowerCase();\n\n const isGitHubCopilot = modelLower.startsWith(\"github-copilot/\");\n\n if (isGitHubCopilot) {\n if (!providers.githubCopilot) {\n result.valid = false;\n result.errors.push(\n \"GitHub Copilot model selected but GitHub Copilot provider is not enabled\"\n );\n }\n return result;\n }\n\n const claudeModels = [\"claude\", \"opus\", \"sonnet\", \"haiku\"];\n const openaiModels = [\"gpt\", \"o1\", \"o3\"];\n const googleModels = [\"gemini\", \"palm\"];\n\n const isClaude = claudeModels.some((m) => modelLower.includes(m));\n const isOpenAI = openaiModels.some((m) => modelLower.includes(m));\n const isGoogle = googleModels.some((m) => modelLower.includes(m));\n\n if (isClaude && !providers.claude) {\n result.valid = false;\n result.errors.push(\"Claude model selected but Claude provider is not enabled\");\n }\n\n if (isOpenAI && !providers.openai) {\n result.valid = false;\n result.errors.push(\"OpenAI model selected but OpenAI provider is not enabled\");\n }\n\n if (isGoogle && !providers.google) {\n result.valid = false;\n result.errors.push(\"Google model selected but Google provider is not enabled\");\n }\n\n return result;\n}\n\n/**\n * Check if Sdlc config has all required agent models configured\n */\nexport function validateAgentModels(config: SdlcConfig): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const requiredAgents = [\"marvin\", \"oracle\", \"librarian\"];\n\n const models = (config as SdlcConfig & { models?: Record<string, string> }).models || {};\n\n for (const agent of requiredAgents) {\n if (!models[agent]) {\n result.warnings.push(`No model configured for agent: ${agent}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a preset name\n */\nexport function isValidPreset(preset: string): boolean {\n const validPresets = [\"minimal\", \"standard\", \"enterprise\", \"solo-quick\", \"copilot-only\"];\n return validPresets.includes(preset);\n}\n\n/**\n * Sanitize a string for use in filenames\n */\nexport function sanitizeFilename(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9_-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n .toLowerCase();\n}\n","/**\n * Doctor command\n *\n * Diagnose and fix common issues with OpenCode SDLC installation.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { DoctorOptions, SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkOhMyOpenCode, checkPrerequisites, validateJsonFile } from \"../utils/prerequisites.js\";\nimport { validateJsonConfig, validateSdlcConfig } from \"../utils/validators.js\";\n\ninterface DiagnosticResult {\n name: string;\n status: \"pass\" | \"warn\" | \"fail\";\n message: string;\n fix?: () => Promise<void>;\n}\n\ninterface CopilotAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkCopilotAuth(): CopilotAuthResult {\n try {\n const result = execSync(\"opencode auth status github-copilot 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n const isAuthenticated =\n result.toLowerCase().includes(\"authenticated\") ||\n result.toLowerCase().includes(\"logged in\") ||\n !result.toLowerCase().includes(\"not\");\n return { authenticated: isAuthenticated };\n } catch {\n return { authenticated: false, message: \"Could not check auth status\" };\n }\n}\n\ninterface GitHubCliAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkGitHubCliAuth(): GitHubCliAuthResult {\n try {\n execSync(\"gh auth status 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return { authenticated: true };\n } catch {\n return { authenticated: false, message: \"Not authenticated - run 'gh auth login'\" };\n }\n}\n\nfunction checkMementoMcp(): boolean {\n try {\n // Check if memento is available as an MCP server\n execSync(\"which memento 2>/dev/null || command -v memento 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n // Also check if it's configured as an npm package\n const opencodeConfigDir = CONFIG_PATHS.globalConfigDir;\n const nodeModulesPath = `${opencodeConfigDir}/node_modules/@anthropic/mcp-memento`;\n return existsSync(nodeModulesPath);\n }\n}\n\nfunction checkGitSpice(): boolean {\n try {\n execSync(\"which gs 2>/dev/null || command -v gs 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n return false;\n }\n}\n\ninterface ProjectBoardAccessResult {\n accessible: boolean;\n message?: string;\n}\n\nasync function checkProjectBoardAccess(\n owner: string,\n projectNumber: number\n): Promise<ProjectBoardAccessResult> {\n try {\n execSync(`gh project view ${projectNumber} --owner ${owner} 2>&1`, {\n encoding: \"utf-8\",\n timeout: 10000,\n });\n return { accessible: true };\n } catch (error) {\n const message =\n error instanceof Error && error.message.includes(\"not found\")\n ? `Project #${projectNumber} not found for ${owner}`\n : \"Cannot access project board - check permissions\";\n return { accessible: false, message };\n }\n}\n\n/**\n * Main doctor command handler\n */\nexport async function doctor(options: DoctorOptions): Promise<void> {\n logger.banner();\n logger.section(\"Running Diagnostics\");\n\n const results: DiagnosticResult[] = [];\n const fileManager = new FileManager();\n\n // Check 1: Node.js version\n const prereqs = await checkPrerequisites();\n\n results.push({\n name: \"Node.js\",\n status: prereqs.node.installed ? (prereqs.node.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.node.installed\n ? prereqs.node.compatible\n ? `Version ${prereqs.node.version} is compatible`\n : `Version ${prereqs.node.version} detected, 20+ recommended`\n : \"Not installed\",\n });\n\n // Check 2: OpenCode installation\n results.push({\n name: \"OpenCode\",\n status: prereqs.opencode.installed ? (prereqs.opencode.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? `Version ${prereqs.opencode.version} is compatible`\n : `Version ${prereqs.opencode.version} detected, 1.0.132+ recommended`\n : \"Not installed\",\n });\n\n // Check 3: Sdlc config exists and is valid\n const sdlcConfigValid = validateJsonFile(CONFIG_PATHS.globalSdlcConfig);\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig);\n const schemaValidation = validateSdlcConfig(config);\n results.push({\n name: \"Sdlc Config\",\n status: schemaValidation.valid ? \"pass\" : \"warn\",\n message: schemaValidation.valid\n ? \"Valid configuration\"\n : `Schema issues: ${schemaValidation.errors.join(\", \")}`,\n });\n } else {\n results.push({\n name: \"Sdlc Config\",\n status: \"fail\",\n message: sdlcConfigValid.error || \"Not found\",\n fix: async () => {\n logger.info(\"Run 'opencode-sdlc install' to create configuration\");\n },\n });\n }\n\n // Check 4: OpenCode config exists and is valid\n const opencodeConfigValid = validateJsonConfig(CONFIG_PATHS.globalOpencodeConfig);\n results.push({\n name: \"OpenCode Config\",\n status: opencodeConfigValid.valid ? \"pass\" : \"fail\",\n message: opencodeConfigValid.valid ? \"Valid JSON\" : opencodeConfigValid.errors[0] || \"Invalid\",\n });\n\n // Check 5: oh-my-opencode config exists and is valid\n const omoConfigValid = validateJsonConfig(CONFIG_PATHS.globalOmoConfig);\n results.push({\n name: \"oh-my-opencode Config\",\n status: omoConfigValid.valid ? \"pass\" : \"warn\",\n message: omoConfigValid.valid ? \"Valid JSON\" : omoConfigValid.errors[0] || \"Not found\",\n });\n\n // Check 6: oh-my-opencode is installed\n const omoInstalled = await checkOhMyOpenCode();\n results.push({\n name: \"oh-my-opencode Plugin\",\n status: omoInstalled.installed ? \"pass\" : \"fail\",\n message: omoInstalled.installed ? `Version ${omoInstalled.version}` : \"Not installed\",\n fix: async () => {\n const spinner = ora(\"Installing oh-my-opencode...\").start();\n try {\n await fileManager.installDependencies([\"oh-my-opencode\"]);\n spinner.succeed(\"oh-my-opencode installed\");\n } catch (err) {\n spinner.fail(\"Failed to install oh-my-opencode\");\n throw err;\n }\n },\n });\n\n // Check 7: Config version freshness\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const configVersion = config.version || \"0.0.0\";\n const isCurrentVersion = configVersion === VERSION;\n results.push({\n name: \"Config Version\",\n status: isCurrentVersion ? \"pass\" : \"warn\",\n message: isCurrentVersion\n ? `Version ${configVersion} is current`\n : `Version ${configVersion} may be outdated (current: ${VERSION})`,\n });\n }\n\n // Check 9: GitHub Copilot auth status (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.subscriptions?.githubCopilot?.enabled) {\n const copilotAuthResult = checkCopilotAuth();\n results.push({\n name: \"GitHub Copilot Auth\",\n status: copilotAuthResult.authenticated ? \"pass\" : \"warn\",\n message: copilotAuthResult.authenticated\n ? \"Authenticated\"\n : copilotAuthResult.message ||\n \"Not authenticated - run 'opencode auth login github-copilot'\",\n });\n }\n }\n\n // Check 10: GitHub CLI authentication (if GitHub integration enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.owner) {\n const ghAuthResult = checkGitHubCliAuth();\n results.push({\n name: \"GitHub CLI Auth\",\n status: ghAuthResult.authenticated ? \"pass\" : \"warn\",\n message: ghAuthResult.authenticated\n ? \"Authenticated\"\n : ghAuthResult.message || \"Not authenticated - run 'gh auth login'\",\n });\n }\n }\n\n // Check 11: Memento MCP availability (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const mcps = config.mcps as { memento?: boolean };\n if (mcps?.memento) {\n const mementoAvailable = checkMementoMcp();\n results.push({\n name: \"Memento MCP\",\n status: mementoAvailable ? \"pass\" : \"warn\",\n message: mementoAvailable\n ? \"Available\"\n : \"Memento MCP not found - persistent memory may not work\",\n });\n }\n }\n\n // Check 12: git-spice installation (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.git?.workflow === \"git-spice\") {\n const gitSpiceInstalled = checkGitSpice();\n results.push({\n name: \"git-spice\",\n status: gitSpiceInstalled ? \"pass\" : \"fail\",\n message: gitSpiceInstalled\n ? \"Installed\"\n : \"git-spice not found - install via 'go install go.abhg.dev/gs@latest' or 'brew install git-spice'\",\n });\n }\n }\n\n // Check 13: GitHub Project board accessibility (if configured)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.project && config.github?.owner) {\n const projectAccessible = await checkProjectBoardAccess(\n config.github.owner,\n config.github.project\n );\n results.push({\n name: \"Project Board Access\",\n status: projectAccessible.accessible ? \"pass\" : \"warn\",\n message: projectAccessible.accessible\n ? `Project #${config.github.project} accessible`\n : projectAccessible.message || \"Cannot access project board\",\n });\n }\n }\n\n // Display results\n logger.section(\"Diagnostic Results\");\n\n let hasFailures = false;\n let hasWarnings = false;\n const fixableIssues: DiagnosticResult[] = [];\n\n for (const result of results) {\n let icon: string;\n let color: (s: string) => string;\n\n switch (result.status) {\n case \"pass\":\n icon = \"✓\";\n color = chalk.green;\n break;\n case \"warn\":\n icon = \"!\";\n color = chalk.yellow;\n hasWarnings = true;\n break;\n case \"fail\":\n icon = \"✖\";\n color = chalk.red;\n hasFailures = true;\n if (result.fix) {\n fixableIssues.push(result);\n }\n break;\n }\n\n console.log(` ${color(icon)} ${result.name}: ${result.message}`);\n }\n\n console.log();\n\n // Summary\n if (hasFailures) {\n logger.error(\"Some checks failed.\");\n\n if (fixableIssues.length > 0 && options.fix) {\n logger.section(\"Applying Fixes\");\n\n for (const issue of fixableIssues) {\n if (issue.fix) {\n try {\n await issue.fix();\n } catch (err) {\n logger.error(\n `Failed to fix ${issue.name}: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n }\n\n logger.blank();\n logger.info(\"Run 'opencode-sdlc doctor' again to verify fixes.\");\n } else if (fixableIssues.length > 0) {\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc doctor --fix\")} to attempt automatic fixes.`);\n }\n } else if (hasWarnings) {\n logger.warn(\"Some checks have warnings, but Sdlc should work.\");\n } else {\n logger.success(\"All checks passed! OpenCode SDLC is healthy.\");\n }\n}\n","/**\n * Info command\n *\n * Display current configuration and status.\n */\n\nimport chalk from \"chalk\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkPrerequisites, getInstalledPlugins } from \"../utils/prerequisites.js\";\n\n/**\n * Main info command handler\n */\nexport async function info(): Promise<void> {\n logger.banner();\n\n const fileManager = new FileManager();\n\n // Load Sdlc config\n const sdlcConfig = fileManager.readJsonFile<SdlcConfig>(CONFIG_PATHS.globalSdlcConfig);\n\n if (!sdlcConfig) {\n logger.warn(\"OpenCode SDLC is not installed.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to get started.`);\n return;\n }\n\n // Version info\n logger.section(\"Version Information\");\n logger.keyValue(\"Sdlc Version\", sdlcConfig.version || VERSION);\n\n // Prerequisites\n logger.section(\"Prerequisites\");\n const prereqs = await checkPrerequisites();\n\n const nodeStatus = prereqs.node.installed\n ? prereqs.node.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"Node.js\", `${nodeStatus} ${prereqs.node.version || \"not found\"}`);\n\n const opencodeStatus = prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"OpenCode\", `${opencodeStatus} ${prereqs.opencode.version || \"not found\"}`);\n\n // Subscriptions\n logger.section(\"Configured Providers\");\n\n const claudeStatus = sdlcConfig.subscriptions.claude.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Claude\",\n `${claudeStatus}${sdlcConfig.subscriptions.claude.tier !== \"none\" ? ` (${sdlcConfig.subscriptions.claude.tier})` : \"\"}`\n );\n\n const openaiStatus = sdlcConfig.subscriptions.openai.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\"OpenAI\", openaiStatus);\n\n const googleStatus = sdlcConfig.subscriptions.google.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Google\",\n `${googleStatus}${sdlcConfig.subscriptions.google.authMethod !== \"none\" ? ` (${sdlcConfig.subscriptions.google.authMethod})` : \"\"}`\n );\n\n // Models\n logger.section(\"Agent Models\");\n logger.keyValue(\"Marvin\", sdlcConfig.models.marvin);\n logger.keyValue(\"Oracle\", sdlcConfig.models.oracle);\n logger.keyValue(\"Librarian\", sdlcConfig.models.librarian);\n if (sdlcConfig.models.frontend) {\n logger.keyValue(\"Frontend\", sdlcConfig.models.frontend);\n }\n if (sdlcConfig.models.documentWriter) {\n logger.keyValue(\"Doc Writer\", sdlcConfig.models.documentWriter);\n }\n if (sdlcConfig.models.multimodalLooker) {\n logger.keyValue(\"Multimodal\", sdlcConfig.models.multimodalLooker);\n }\n\n // Work Tracking Configuration\n if (sdlcConfig.github) {\n logger.section(\"GitHub Issues Integration\");\n logger.keyValue(\"Owner\", sdlcConfig.github.owner);\n logger.keyValue(\"Repository\", sdlcConfig.github.repo);\n if (sdlcConfig.github.project) {\n logger.keyValue(\"Project #\", sdlcConfig.github.project.toString());\n }\n } else if (sdlcConfig.bmad) {\n // Legacy BMAD settings\n logger.section(\"BMAD Settings (Legacy)\");\n logger.keyValue(\"Default Track\", sdlcConfig.bmad.defaultTrack);\n logger.keyValue(\"Auto Status Update\", sdlcConfig.bmad.autoStatusUpdate ? \"yes\" : \"no\");\n logger.keyValue(\"Parallel Issue Limit\", sdlcConfig.bmad.parallelIssueLimit.toString());\n }\n\n // TDD Configuration\n if (sdlcConfig.tdd) {\n logger.section(\"TDD Configuration\");\n logger.keyValue(\"Enabled\", sdlcConfig.tdd.enabled ? \"yes\" : \"no\");\n logger.keyValue(\"Verbosity\", sdlcConfig.tdd.verbosity);\n if (sdlcConfig.tdd.mutationTesting?.enabled) {\n logger.keyValue(\n \"Mutation Testing\",\n `${sdlcConfig.tdd.mutationTesting.requiredScore}% required`\n );\n }\n }\n\n // Event Modeling Configuration\n if (sdlcConfig.eventModeling) {\n logger.section(\"Event Modeling\");\n logger.keyValue(\"Enabled\", sdlcConfig.eventModeling.enabled ? \"yes\" : \"no\");\n if (sdlcConfig.eventModeling.enabled) {\n logger.keyValue(\"Output Path\", sdlcConfig.eventModeling.outputPath);\n }\n }\n\n // Git Workflow Configuration\n if (sdlcConfig.git) {\n logger.section(\"Git Workflow\");\n logger.keyValue(\"Workflow\", sdlcConfig.git.workflow);\n logger.keyValue(\"Require Clean\", sdlcConfig.git.requireClean ? \"yes\" : \"no\");\n logger.keyValue(\"Worktrees\", sdlcConfig.git.worktrees ? \"yes\" : \"no\");\n }\n\n // Features\n logger.section(\"Features\");\n const features = sdlcConfig.features;\n\n // Check if using new or legacy features structure\n const isNewFeatures = \"orchestratorOnly\" in features;\n\n const featureList = isNewFeatures\n ? [\n {\n name: \"Orchestrator Only\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).orchestratorOnly,\n },\n {\n name: \"Todo Sync\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).todoSync,\n },\n {\n name: \"Party Review\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).partyReview,\n },\n {\n name: \"Debugging Protocol\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).debuggingProtocol,\n },\n {\n name: \"Memento\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).memento,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).notifications,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).lspTools,\n },\n ]\n : [\n {\n name: \"BMAD Bridge\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).bmadBridge,\n },\n {\n name: \"Auto Status\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).autoStatus,\n },\n {\n name: \"Parallel Exec\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).parallelExecution,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).notifications,\n },\n {\n name: \"Context Monitor\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).contextMonitor,\n },\n {\n name: \"Comment Checker\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).commentChecker,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).lspTools,\n },\n ];\n\n for (const feature of featureList) {\n const status = feature.enabled ? chalk.green(\"on\") : chalk.gray(\"off\");\n logger.keyValue(feature.name, status);\n }\n\n // MCPs\n logger.section(\"MCP Servers\");\n const mcps = sdlcConfig.mcps;\n logger.keyValue(\"context7\", mcps.context7 ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"exa\", mcps.exa ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"grep_app\", mcps.grepApp ? chalk.green(\"on\") : chalk.gray(\"off\"));\n if (\"memento\" in mcps) {\n logger.keyValue(\n \"memento\",\n (mcps as import(\"../../shared/types.js\").McpConfig).memento\n ? chalk.green(\"on\")\n : chalk.gray(\"off\")\n );\n }\n\n // Installed plugins\n logger.section(\"Installed Plugins\");\n const plugins = await getInstalledPlugins();\n\n if (Object.keys(plugins).length === 0) {\n logger.info(\"No plugins installed in OpenCode config directory\");\n } else {\n for (const [name, version] of Object.entries(plugins)) {\n logger.keyValue(name, version);\n }\n }\n\n // Configuration paths\n logger.section(\"Configuration Paths\");\n logger.keyValue(\"Config Dir\", CONFIG_PATHS.globalConfigDir);\n logger.keyValue(\"Sdlc Config\", CONFIG_PATHS.globalSdlcConfig);\n\n console.log();\n}\n","import type { AgentRole, AgentSettings, SdlcConfig, ThinkingLevel } from \"../../shared/types.js\";\n\ntype ModelFamily = \"claude-thinking\" | \"claude\" | \"gpt-reasoning\" | \"gpt\" | \"gemini\" | \"copilot\";\n\nconst MODEL_FAMILY_BASE_TEMPS: Record<ModelFamily, number> = {\n \"claude-thinking\": 0.3,\n claude: 0.2,\n \"gpt-reasoning\": 0.2,\n gpt: 0.3,\n gemini: 0.3,\n copilot: 0.25,\n};\n\nconst ROLE_TEMP_ADJUSTMENTS: Record<AgentRole, number> = {\n oracle: -0.1,\n marvin: 0.0,\n librarian: 0.1,\n frontend: 0.2,\n documentWriter: 0.1,\n multimodalLooker: -0.1,\n explore: -0.1,\n};\n\nconst ROLE_DEFAULT_THINKING: Record<AgentRole, ThinkingLevel> = {\n oracle: \"high\",\n marvin: \"medium\",\n librarian: \"low\",\n frontend: \"low\",\n documentWriter: \"low\",\n multimodalLooker: \"off\",\n explore: \"off\",\n};\n\ninterface ModelCapabilities {\n supportsTemperature: boolean;\n supportsThinking: boolean;\n thinkingType?: \"anthropic\" | \"openai\" | \"google\";\n}\n\nconst MODEL_CAPABILITIES: Record<string, Partial<ModelCapabilities>> = {\n \"anthropic/claude-sonnet-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-opus-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-sonnet-4-5\": { supportsTemperature: true },\n \"anthropic/claude-opus-4-5\": { supportsTemperature: true },\n \"openai/gpt-5.1-high\": { supportsThinking: true, thinkingType: \"openai\" },\n \"openai/gpt-5.1\": { supportsTemperature: false },\n \"openai/gpt-5.2\": { supportsTemperature: false },\n \"openai/gpt-4o\": { supportsTemperature: true },\n \"google/gemini-2.5-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-2.5-flash\": { supportsTemperature: true },\n \"google/gemini-3-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-3-flash\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n};\n\nconst COPILOT_DEFAULTS: Partial<ModelCapabilities> = {\n supportsTemperature: false,\n supportsThinking: false,\n};\n\nfunction getModelFamily(modelId: string): ModelFamily {\n if (modelId.startsWith(\"github-copilot/\")) return \"copilot\";\n if (modelId.includes(\"thinking\")) return \"claude-thinking\";\n if (modelId.includes(\"claude\")) return \"claude\";\n if (modelId.includes(\"gpt-5.1-high\") || modelId.includes(\"o3\") || modelId.includes(\"o1\")) {\n return \"gpt-reasoning\";\n }\n if (modelId.includes(\"gpt\")) return \"gpt\";\n if (modelId.includes(\"gemini\")) return \"gemini\";\n return \"claude\";\n}\n\n/**\n * Get the maximum allowed temperature for a model based on its provider.\n * - Anthropic: 0.0-1.0\n * - OpenAI: 0.0-2.0\n * - Google: 0.0-2.0\n * - Copilot: temperature not supported\n */\nfunction getMaxTemperatureForModel(modelId: string): number {\n if (modelId.startsWith(\"anthropic/\") || modelId.includes(\"claude\")) {\n return 1.0;\n }\n if (modelId.startsWith(\"openai/\") || modelId.includes(\"gpt\")) {\n return 2.0;\n }\n if (modelId.startsWith(\"google/\") || modelId.includes(\"gemini\")) {\n return 2.0;\n }\n // Default to conservative 1.0 for unknown providers\n return 1.0;\n}\n\nfunction getModelCapabilities(modelId: string): ModelCapabilities {\n const known = MODEL_CAPABILITIES[modelId];\n if (known) {\n return {\n supportsTemperature: known.supportsTemperature ?? true,\n supportsThinking: known.supportsThinking ?? false,\n thinkingType: known.thinkingType,\n };\n }\n\n if (modelId.startsWith(\"github-copilot/\")) {\n return {\n supportsTemperature: COPILOT_DEFAULTS.supportsTemperature ?? false,\n supportsThinking: COPILOT_DEFAULTS.supportsThinking ?? false,\n };\n }\n\n return { supportsTemperature: true, supportsThinking: false };\n}\n\nexport function getEffectiveTemperature(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): number | undefined {\n const roleOverride = config.models.settings?.[role]?.temperature;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.temperature;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsTemperature) return undefined;\n\n const family = getModelFamily(modelId);\n const baseTemp = MODEL_FAMILY_BASE_TEMPS[family];\n const adjustment = ROLE_TEMP_ADJUSTMENTS[role];\n const maxTemp = getMaxTemperatureForModel(modelId);\n\n return Math.max(0, Math.min(maxTemp, baseTemp + adjustment));\n}\n\nexport function getEffectiveThinkingLevel(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ThinkingLevel | undefined {\n const roleOverride = config.models.settings?.[role]?.thinkingLevel;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.thinkingLevel;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsThinking) return undefined;\n\n return ROLE_DEFAULT_THINKING[role];\n}\n\nexport interface ProviderParams {\n temperature?: number;\n reasoning_effort?: \"low\" | \"medium\" | \"high\";\n thinking_budget?: number;\n thinking_level?: \"low\" | \"medium\" | \"high\";\n}\n\nexport function getProviderParams(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ProviderParams {\n const result: ProviderParams = {};\n\n const temperature = getEffectiveTemperature(modelId, role, config);\n if (temperature !== undefined) {\n result.temperature = temperature;\n }\n\n const thinkingLevel = getEffectiveThinkingLevel(modelId, role, config);\n if (thinkingLevel && thinkingLevel !== \"off\") {\n const capabilities = getModelCapabilities(modelId);\n\n switch (capabilities.thinkingType) {\n case \"openai\":\n result.reasoning_effort = thinkingLevel;\n break;\n case \"anthropic\":\n result.thinking_budget = thinkingLevelToTokenBudget(thinkingLevel);\n if (result.temperature !== undefined) {\n const { temperature: _, ...rest } = result;\n return rest as ProviderParams;\n }\n break;\n case \"google\":\n result.thinking_level = thinkingLevel;\n break;\n }\n }\n\n return result;\n}\n\nfunction thinkingLevelToTokenBudget(level: ThinkingLevel): number {\n switch (level) {\n case \"low\":\n return 4096;\n case \"medium\":\n return 16384;\n case \"high\":\n return 32768;\n default:\n return 0;\n }\n}\n\nexport function getAgentSettings(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): AgentSettings {\n return {\n temperature: getEffectiveTemperature(modelId, role, config),\n thinkingLevel: getEffectiveThinkingLevel(modelId, role, config),\n };\n}\n\nexport function modelSupportsTemperature(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsTemperature;\n}\n\nexport function modelSupportsThinking(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsThinking;\n}\n","/**\n * oh-my-opencode config generator\n *\n * Generates the oh-my-opencode.json configuration file.\n */\n\nimport { getProviderParams } from \"../../plugin/utils/model-params.js\";\nimport type { AgentRole, InstallAnswers, SdlcConfig } from \"../../shared/types.js\";\n\nfunction buildMinimalConfig(answers: InstallAnswers): SdlcConfig {\n const { subscriptions, models, methodology, features, advanced } = answers;\n\n const providerPriority: (\"anthropic\" | \"openai\" | \"google\" | \"github-copilot\")[] = [];\n if (subscriptions.hasClaude) providerPriority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) providerPriority.push(\"openai\");\n if (subscriptions.hasGoogle) providerPriority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) providerPriority.push(\"github-copilot\");\n\n if (providerPriority.length === 0) {\n providerPriority.push(\"anthropic\", \"openai\", \"google\", \"github-copilot\");\n }\n\n return {\n version: \"0.4.0\",\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth || \"none\",\n tier: subscriptions.claudeTier || \"none\",\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth || \"none\",\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth || \"none\",\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n enabledModels: subscriptions.copilotEnabledModels,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n settings: models.settings,\n custom: models.custom,\n },\n bmad: {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit || 0,\n },\n features: {\n bmadBridge: true,\n autoStatus: features.enabledFeatures.includes(\"auto-status\"),\n parallelExecution: features.enabledFeatures.includes(\"parallel\"),\n notifications: features.enabledFeatures.includes(\"notifications\"),\n contextMonitor: features.enabledFeatures.includes(\"context-monitor\"),\n commentChecker: features.enabledFeatures.includes(\"comment-checker\"),\n lspTools: features.enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: false,\n todoSync: true,\n },\n mcps: {\n context7: features.mcps.includes(\"context7\"),\n exa: features.mcps.includes(\"exa\"),\n grepApp: features.mcps.includes(\"grep_app\"),\n },\n routing: {\n providerPriority,\n modelFamilyPriority: {\n claude: providerPriority.filter((p) => p === \"anthropic\" || p === \"github-copilot\"),\n gpt: providerPriority.filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: providerPriority.filter((p) => p === \"google\" || p === \"github-copilot\"),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n },\n };\n}\n\n/**\n * Generate oh-my-opencode.json configuration\n */\nexport function generateOmoConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, features, advanced } = answers;\n const config: SdlcConfig = buildMinimalConfig(answers);\n\n const omoConfig: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json\",\n };\n\n // Google auth toggle - if using antigravity, disable built-in auth\n if (subscriptions.hasGoogle && subscriptions.googleAuth === \"antigravity\") {\n omoConfig.google_auth = false;\n }\n\n const agentConfigs: Array<{ role: AgentRole; omoName: string; modelId: string }> = [\n { role: \"marvin\", omoName: \"Marvin\", modelId: models.marvin },\n { role: \"oracle\", omoName: \"oracle\", modelId: models.oracle },\n { role: \"librarian\", omoName: \"librarian\", modelId: models.librarian },\n {\n role: \"frontend\",\n omoName: \"frontend-ui-ux-engineer\",\n modelId: models.frontend || models.marvin,\n },\n {\n role: \"documentWriter\",\n omoName: \"document-writer\",\n modelId: models.documentWriter || models.librarian,\n },\n {\n role: \"multimodalLooker\",\n omoName: \"multimodal-looker\",\n modelId: models.multimodalLooker || models.librarian,\n },\n { role: \"explore\", omoName: \"explore\", modelId: models.explore || models.librarian },\n ];\n\n omoConfig.agents = {};\n for (const { role, omoName, modelId } of agentConfigs) {\n const providerParams = getProviderParams(modelId, role, config);\n (omoConfig.agents as Record<string, unknown>)[omoName] = {\n model: modelId,\n ...providerParams,\n };\n }\n\n (omoConfig.agents as Record<string, unknown>).general = {\n model: models.oracle,\n ...getProviderParams(models.oracle, \"oracle\", config),\n };\n\n // Disabled hooks based on features\n const disabledHooks: string[] = [];\n\n if (!features.enabledFeatures.includes(\"context-monitor\")) {\n disabledHooks.push(\"context-window-monitor\");\n }\n if (!features.enabledFeatures.includes(\"comment-checker\")) {\n disabledHooks.push(\"comment-checker\");\n }\n if (!features.enabledFeatures.includes(\"notifications\")) {\n disabledHooks.push(\"session-notification\", \"background-notification\");\n }\n\n if (disabledHooks.length > 0) {\n omoConfig.disabled_hooks = disabledHooks;\n }\n\n // Disabled MCPs\n const allMcps = [\"context7\", \"websearch_exa\", \"grep_app\", \"memento\"];\n const enabledMcpIds = features.mcps.map((mcp) => {\n // Map feature names to MCP names\n if (mcp === \"exa\") return \"websearch_exa\";\n return mcp;\n });\n const disabledMcps = allMcps.filter((mcp) => !enabledMcpIds.includes(mcp));\n\n if (disabledMcps.length > 0) {\n omoConfig.disabled_mcps = disabledMcps;\n }\n\n // Experimental features\n if (advanced.experimental && advanced.experimental.length > 0) {\n omoConfig.experimental = {};\n\n if (advanced.experimental.includes(\"aggressive-truncation\")) {\n (omoConfig.experimental as Record<string, unknown>).aggressive_truncation = true;\n }\n if (advanced.experimental.includes(\"auto-resume\")) {\n (omoConfig.experimental as Record<string, unknown>).auto_resume = true;\n }\n }\n\n return omoConfig;\n}\n","/**\n * OpenCode config generator\n *\n * Generates and updates the opencode.json configuration file.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\n\n/**\n * Generate opencode.json configuration\n */\nexport async function generateOpencodeConfig(\n answers: InstallAnswers,\n configDir: string\n): Promise<Record<string, unknown>> {\n // Load existing config if present\n const configPath = join(configDir, \"opencode.json\");\n let existingConfig: Record<string, unknown> = {};\n\n if (existsSync(configPath)) {\n try {\n const content = readFileSync(configPath, \"utf-8\");\n existingConfig = JSON.parse(content);\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n // Build plugin array\n const plugins: string[] = [\"opencode-sdlc-plugin/plugin\", \"oh-my-opencode\"];\n\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n plugins.push(\"opencode-antigravity-auth\");\n }\n\n if (answers.subscriptions.hasOpenAI) {\n plugins.push(\"opencode-openai-codex-auth\");\n }\n\n // Merge with existing config\n const existingPlugins = (existingConfig.plugin as string[]) || [];\n const mergedPlugins = [...new Set([...existingPlugins, ...plugins])];\n\n const config: Record<string, unknown> = {\n ...existingConfig,\n $schema: existingConfig.$schema || \"https://opencode.ai/config.json\",\n plugin: mergedPlugins,\n };\n\n // Add provider configs if Claude subscription\n if (answers.subscriptions.hasClaude) {\n const existingProvider = (existingConfig.provider as Record<string, unknown>) || {};\n const existingAnthropic = (existingProvider.anthropic as Record<string, unknown>) || {};\n const existingAnthropicModels = (existingAnthropic.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n anthropic: {\n ...existingAnthropic,\n models: {\n ...existingAnthropicModels,\n // Add thinking model variants\n \"claude-opus-4-5-thinking\": {\n id: \"claude-opus-4-5\",\n options: {\n thinking: {\n type: \"enabled\",\n budgetTokens: 32000,\n },\n },\n },\n \"claude-sonnet-4-5-thinking\": {\n id: \"claude-sonnet-4-5\",\n options: {\n thinking: {\n type: \"enabled\",\n budgetTokens: 10000,\n },\n },\n },\n },\n },\n };\n }\n\n // Add OpenAI provider config if present\n if (answers.subscriptions.hasOpenAI) {\n const existingProvider = (config.provider as Record<string, unknown>) || {};\n const existingOpenAI = (existingProvider.openai as Record<string, unknown>) || {};\n const existingOpenAIModels = (existingOpenAI.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n openai: {\n ...existingOpenAI,\n models: {\n ...existingOpenAIModels,\n // Add reasoning effort configurations\n \"gpt-5.1-high\": {\n id: \"gpt-5.1\",\n options: {\n reasoningEffort: \"high\",\n reasoningSummary: \"auto\",\n },\n },\n },\n },\n };\n }\n\n // Add Google Antigravity provider config if present\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n const existingProvider = (config.provider as Record<string, unknown>) || {};\n const existingGoogle = (existingProvider.google as Record<string, unknown>) || {};\n const existingGoogleModels = (existingGoogle.models as Record<string, unknown>) || {};\n\n config.provider = {\n ...existingProvider,\n google: {\n ...existingGoogle,\n models: {\n ...existingGoogleModels,\n // Gemini models\n \"gemini-3-pro-high\": {\n name: \"Gemini 3 Pro High (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65535,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"gemini-3-pro-low\": {\n name: \"Gemini 3 Pro Low (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65535,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"gemini-3-flash\": {\n name: \"Gemini 3 Flash (Antigravity)\",\n limit: {\n context: 1048576,\n output: 65536,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n // Claude models via Antigravity\n \"claude-sonnet-4-5\": {\n name: \"Claude Sonnet 4.5 (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"claude-sonnet-4-5-thinking\": {\n name: \"Claude Sonnet 4.5 Thinking (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n \"claude-opus-4-5-thinking\": {\n name: \"Claude Opus 4.5 Thinking (Antigravity)\",\n limit: {\n context: 200000,\n output: 64000,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n // GPT models via Antigravity\n \"gpt-oss-120b-medium\": {\n name: \"GPT-OSS 120B Medium (Antigravity)\",\n limit: {\n context: 131072,\n output: 32768,\n },\n modalities: {\n input: [\"text\", \"image\", \"pdf\"],\n output: [\"text\"],\n },\n },\n },\n },\n };\n }\n\n return config;\n}\n\n/**\n * Get the list of plugins to install based on answers\n */\nexport function getRequiredPlugins(answers: InstallAnswers): string[] {\n const plugins: string[] = [\"opencode-sdlc-plugin\", \"oh-my-opencode\"];\n\n if (answers.subscriptions.hasGoogle && answers.subscriptions.googleAuth === \"antigravity\") {\n plugins.push(\"opencode-antigravity-auth\");\n }\n\n if (answers.subscriptions.hasOpenAI) {\n plugins.push(\"opencode-openai-codex-auth\");\n }\n\n return plugins;\n}\n","/**\n * Feature questions\n *\n * Gather feature toggle preferences.\n */\n\nimport { checkbox } from \"@inquirer/prompts\";\nimport type { FeatureAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for feature questions\n */\nexport interface FeatureDefaults {\n enabledFeatures?: string[];\n mcps?: string[];\n}\n\n/**\n * Available features with descriptions\n */\nconst AVAILABLE_FEATURES = [\n {\n name: \"BMAD Bridge Commands (/sdlc-dev, /sdlc-review, etc.)\",\n value: \"bmad-bridge\",\n },\n {\n name: \"Auto Sprint Status Updates - Update sprint-status.yaml automatically\",\n value: \"auto-status\",\n },\n {\n name: \"Parallel Story Execution - Work on multiple stories simultaneously\",\n value: \"parallel\",\n },\n {\n name: \"Session Notifications - Desktop notifications for completions\",\n value: \"notifications\",\n },\n {\n name: \"Context Window Monitoring - Track context usage\",\n value: \"context-monitor\",\n },\n {\n name: \"Comment Checker - Ensure code is not over-commented\",\n value: \"comment-checker\",\n },\n {\n name: \"LSP Refactoring Tools - Enable lsp_rename, lsp_find_references, etc.\",\n value: \"lsp-tools\",\n },\n {\n name: \"Auto Git Operations - Allow agents to commit/push/branch automatically (unchecked = requires explicit permission)\",\n value: \"auto-git-operations\",\n },\n];\n\n/**\n * All feature values for reference\n */\nconst ALL_FEATURE_VALUES = AVAILABLE_FEATURES.map((f) => f.value);\n\nconst FEATURES_ENABLED_BY_DEFAULT = ALL_FEATURE_VALUES.filter((f) => f !== \"auto-git-operations\");\n\n/**\n * New v0.3.0+ features with descriptions\n */\nconst AVAILABLE_NEW_FEATURES = [\n {\n name: \"Orchestrator-Only - Main conversation delegates file writes to agents\",\n value: \"orchestratorOnly\",\n },\n {\n name: \"Todo Sync - Auto-sync todos with GitHub issue checkboxes\",\n value: \"todoSync\",\n },\n {\n name: \"Party Review - Multi-stakeholder architecture reviews\",\n value: \"partyReview\",\n },\n {\n name: \"Debugging Protocol - Oracle-assisted debugging workflow\",\n value: \"debuggingProtocol\",\n },\n {\n name: \"Memento Integration - Persistent memory across sessions\",\n value: \"memento\",\n },\n {\n name: \"Notifications - In-TUI notifications\",\n value: \"notifications\",\n },\n {\n name: \"LSP Tools - Code intelligence tools\",\n value: \"lspTools\",\n },\n];\n\nconst NEW_FEATURES_ENABLED_BY_DEFAULT = [\n \"todoSync\",\n \"partyReview\",\n \"debuggingProtocol\",\n \"notifications\",\n \"lspTools\",\n];\n\n/**\n * Available MCP servers with descriptions\n */\nconst AVAILABLE_MCPS = [\n {\n name: \"context7 - Documentation lookup and context retrieval\",\n value: \"context7\",\n },\n {\n name: \"websearch_exa - Web search capabilities\",\n value: \"exa\",\n },\n {\n name: \"grep_app - GitHub code search\",\n value: \"grep_app\",\n },\n {\n name: \"memento - Persistent memory storage\",\n value: \"memento\",\n },\n];\n\n/**\n * All MCP values for reference\n */\nconst ALL_MCP_VALUES = AVAILABLE_MCPS.map((m) => m.value);\n\n/**\n * Create choices with checked state based on defaults\n */\nfunction createFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n\n/**\n * Create MCP choices with checked state based on defaults\n */\nfunction createMcpChoices(defaults?: string[]) {\n // If no defaults provided, check all by default\n const enabledSet = new Set(defaults ?? ALL_MCP_VALUES);\n\n return AVAILABLE_MCPS.map((mcp) => ({\n ...mcp,\n checked: enabledSet.has(mcp.value),\n }));\n}\n\n/**\n * Gather feature selections from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherFeatures(defaults?: FeatureDefaults): Promise<FeatureAnswers> {\n const enabledFeatures = await checkbox({\n message: \"Select features to enable:\",\n choices: createFeatureChoices(defaults?.enabledFeatures),\n });\n\n const mcps = await checkbox({\n message: \"Select MCP servers to enable:\",\n choices: createMcpChoices(defaults?.mcps),\n });\n\n return {\n enabledFeatures,\n mcps,\n };\n}\n\n/**\n * Get feature flags from enabled features array\n */\nexport function featuresToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n bmadBridge: enabledFeatures.includes(\"bmad-bridge\"),\n autoStatus: enabledFeatures.includes(\"auto-status\"),\n parallelExecution: enabledFeatures.includes(\"parallel\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n contextMonitor: enabledFeatures.includes(\"context-monitor\"),\n commentChecker: enabledFeatures.includes(\"comment-checker\"),\n lspTools: enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: enabledFeatures.includes(\"auto-git-operations\"),\n todoSync: true,\n };\n}\n\n/**\n * Get MCP flags from enabled MCPs array\n */\nexport function mcpsToFlags(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grep_app\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Get new-style feature flags from enabled features array\n */\nexport function newFeaturesToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Create new-style feature choices with checked state based on defaults\n */\nexport function createNewFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? NEW_FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_NEW_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n","/**\n * SDLC config generator\n *\n * Generates the sdlc.json configuration file.\n *\n * v0.3.0+ supports both:\n * - New structure: github, tdd, eventModeling, git sections\n * - Legacy structure: bmad section (deprecated, for backward compatibility)\n */\n\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, LLMProvider } from \"../../shared/types.js\";\nimport { featuresToFlags, mcpsToFlags } from \"../questions/features.js\";\n\nfunction inferProviderPriority(answers: InstallAnswers): LLMProvider[] {\n const { subscriptions } = answers;\n const priority: LLMProvider[] = [];\n\n if (subscriptions.hasClaude) priority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) priority.push(\"openai\");\n if (subscriptions.hasGoogle) priority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) priority.push(\"github-copilot\");\n\n if (priority.length === 0) {\n return [\"anthropic\", \"openai\", \"google\", \"github-copilot\"];\n }\n\n return priority;\n}\n\n/**\n * Generate new v0.3.0+ features configuration\n */\nfunction generateNewFeatures(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Generate new v0.3.0+ MCPs configuration\n */\nfunction generateNewMcps(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grepApp\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Check if using new-style feature selection\n */\nfunction isNewStyleFeatures(enabledFeatures: string[]): boolean {\n const newFeatureKeys = [\"orchestratorOnly\", \"partyReview\", \"debuggingProtocol\", \"memento\"];\n return enabledFeatures.some((f) => newFeatureKeys.includes(f));\n}\n\n/**\n * Generate sdlc.json configuration\n *\n * Supports both v0.3.0+ new structure and legacy BMAD structure\n * based on install answers.\n */\nexport function generateSdlcConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, methodology, features, advanced } = answers;\n const useNewFeatures = isNewStyleFeatures(features.enabledFeatures);\n\n const config: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/jwilger/opencode-sdlc-plugin/main/config/schemas/sdlc.schema.json\",\n version: VERSION,\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth,\n tier: subscriptions.claudeTier,\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth,\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth,\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n // v1.0.0: subagent model configuration\n subagents: {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n },\n },\n // Features and MCPs - use new format if new features selected, otherwise legacy\n features: useNewFeatures\n ? generateNewFeatures(features.enabledFeatures)\n : featuresToFlags(features.enabledFeatures),\n mcps: useNewFeatures ? generateNewMcps(features.mcps) : mcpsToFlags(features.mcps),\n routing: {\n providerPriority: inferProviderPriority(answers),\n modelFamilyPriority: {\n claude: inferProviderPriority(answers).filter(\n (p) => p === \"anthropic\" || p === \"github-copilot\"\n ),\n gpt: inferProviderPriority(answers).filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: inferProviderPriority(answers).filter(\n (p) => p === \"google\" || p === \"github-copilot\"\n ),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: advanced.autoFallback ?? false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n // v1.0.0: classifier model for mode detection\n classifierModel: \"anthropic/claude-haiku\",\n },\n };\n\n // Add legacy BMAD config for backward compatibility (if using legacy features)\n if (!useNewFeatures) {\n config.bmad = {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit ?? 0,\n paths: {\n prd: null,\n architecture: null,\n },\n };\n }\n\n // Add GitHub config if provided\n if (answers.github?.enabled) {\n config.github = {\n owner: answers.github.owner,\n repo: answers.github.repo,\n project: answers.github.project,\n statuses: answers.github.statuses,\n };\n }\n\n // Add v1.0.0+ modes config\n config.modes = answers.modes\n ? {\n default: answers.modes.default,\n eventModeling: answers.modes.eventModeling,\n enabled: answers.modes.enabled,\n }\n : {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n\n // Add v1.0.0+ memory config\n config.memory = answers.memory\n ? {\n backend: answers.memory.backend,\n checkpointTtl: answers.memory.checkpointTtl,\n }\n : {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n\n // Add TDD config with v1.0 fields\n config.tdd = answers.tdd\n ? {\n enabled: answers.tdd.enabled,\n verbosity: answers.tdd.verbosity,\n bypassPatterns: answers.tdd.bypassPatterns,\n mutationTesting: {\n enabled: answers.tdd.mutationTesting.enabled,\n requiredScore: answers.tdd.mutationTesting.requiredScore,\n },\n // v1.0.0 fields\n domainVetoEnabled: answers.tdd.domainVetoEnabled ?? true,\n debateRounds: answers.tdd.debateRounds ?? 2,\n requireVerification: answers.tdd.requireVerification ?? true,\n }\n : {\n enabled: true,\n verbosity: \"brief\",\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n };\n\n // Add new v0.3.0+ Event Modeling config from answers or defaults\n config.eventModeling = answers.eventModeling\n ? {\n enabled: answers.eventModeling.enabled,\n outputPath: answers.eventModeling.outputPath,\n }\n : {\n enabled: false,\n outputPath: \"docs/event-model\",\n };\n\n // Add new v0.3.0+ Git config from answers or defaults\n config.git = answers.gitWorkflow\n ? {\n workflow: answers.gitWorkflow.workflow,\n requireClean: answers.gitWorkflow.requireClean,\n worktrees: answers.gitWorkflow.worktrees,\n }\n : {\n workflow: \"standard\",\n requireClean: true,\n worktrees: false,\n };\n\n return config;\n}\n","/**\n * Config Generator\n *\n * Orchestrates generation of all configuration files.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile, InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"./omo-config.js\";\nimport { generateOpencodeConfig, getRequiredPlugins } from \"./opencode-config.js\";\nimport { generateSdlcConfig } from \"./sdlc-config.js\";\n\nexport class ConfigGenerator {\n private answers: InstallAnswers;\n private configDir: string;\n\n constructor(answers: InstallAnswers) {\n this.answers = answers;\n this.configDir =\n answers.installLocation === \"local\"\n ? join(process.cwd(), \".opencode\")\n : CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Generate all configuration files\n */\n async generate(): Promise<GeneratedFile[]> {\n const files: GeneratedFile[] = [];\n\n // Generate opencode.json\n const opencodeConfig = await generateOpencodeConfig(this.answers, this.configDir);\n files.push({\n path: join(this.configDir, \"opencode.json\"),\n content: JSON.stringify(opencodeConfig, null, 2),\n exists: existsSync(join(this.configDir, \"opencode.json\")),\n });\n\n // Generate oh-my-opencode.json\n const omoConfig = generateOmoConfig(this.answers);\n files.push({\n path: join(this.configDir, \"oh-my-opencode.json\"),\n content: JSON.stringify(omoConfig, null, 2),\n exists: existsSync(join(this.configDir, \"oh-my-opencode.json\")),\n });\n\n // Generate sdlc.json\n const sdlcConfig = generateSdlcConfig(this.answers);\n files.push({\n path: join(this.configDir, \"sdlc.json\"),\n content: JSON.stringify(sdlcConfig, null, 2),\n exists: existsSync(join(this.configDir, \"sdlc.json\")),\n });\n\n return files;\n }\n\n /**\n * Get the list of npm packages to install\n */\n getRequiredPackages(): string[] {\n return getRequiredPlugins(this.answers);\n }\n}\n","/**\n * Shared GitHub API Client using Octokit\n *\n * Provides typed methods for GitHub operations used by both CLI and plugin.\n * Authentication is resolved in order:\n * 1. Explicitly provided token\n * 2. GITHUB_TOKEN environment variable\n * 3. `gh auth token` command output (if gh CLI is available)\n */\n\nimport { execSync } from \"node:child_process\";\nimport { Octokit } from \"@octokit/rest\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface GitHubClientOptions {\n /** GitHub token (optional - will try env/gh CLI if not provided) */\n token?: string;\n /** Repository owner */\n owner?: string;\n /** Repository name */\n repo?: string;\n}\n\nexport interface GitHubIssue {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: string;\n labels: Array<{ name: string }>;\n}\n\nexport interface GitHubIssueListItem {\n number: number;\n title: string;\n url: string;\n state: string;\n}\n\nexport interface GitHubPullRequest {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n mergeableState: string;\n draft: boolean;\n}\n\nexport interface GitHubPrCheck {\n name: string;\n status: \"pass\" | \"fail\" | \"pending\" | \"skipped\";\n conclusion: string | null;\n}\n\nexport interface GitHubPrReview {\n reviewer: string;\n state: \"APPROVED\" | \"CHANGES_REQUESTED\" | \"COMMENTED\" | \"PENDING\" | \"DISMISSED\";\n}\n\nexport interface GitHubPrStatus {\n number: number;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n checks: GitHubPrCheck[];\n reviews: GitHubPrReview[];\n}\n\nexport interface CreatePrOptions {\n title: string;\n body?: string;\n head: string;\n base?: string;\n draft?: boolean;\n}\n\nexport interface CreatePrResult {\n number: number;\n url: string;\n}\n\nexport interface MergePrOptions {\n prNumber: number;\n mergeMethod?: \"merge\" | \"squash\" | \"rebase\";\n commitTitle?: string;\n commitMessage?: string;\n}\n\nexport interface MergePrResult {\n sha: string;\n merged: boolean;\n}\n\nexport interface GitHubOrganization {\n id: string;\n nodeId: string;\n login: string;\n name: string | null;\n}\n\nexport interface GitHubProject {\n id: string;\n number: number;\n title: string;\n url: string;\n}\n\nexport interface CreateRepoOptions {\n name: string;\n description?: string;\n private?: boolean;\n autoInit?: boolean;\n /** Organization login to create the repo under (omit for personal repo) */\n org?: string;\n}\n\nexport interface CreateProjectOptions {\n title: string;\n /** Owner login (user or org) - required */\n ownerLogin: string;\n /** If true, owner is an organization */\n isOrg?: boolean;\n}\n\nexport interface CopyProjectOptions {\n /** Source project number */\n sourceProjectNumber: number;\n /** Source owner login */\n sourceOwnerLogin: string;\n /** If true, source owner is an organization */\n sourceIsOrg?: boolean;\n /** Target owner login */\n targetOwnerLogin: string;\n /** If true, target owner is an organization */\n targetIsOrg?: boolean;\n /** Title for the new project */\n title: string;\n /** Include draft issues when copying */\n includeDraftIssues?: boolean;\n}\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n fullName: string;\n url: string;\n private: boolean;\n defaultBranch: string;\n}\n\n// ============================================================================\n// Authentication\n// ============================================================================\n\n/**\n * Resolve GitHub token from various sources\n */\nexport function resolveGitHubToken(explicitToken?: string): string | null {\n // 1. Explicit token\n if (explicitToken) {\n return explicitToken;\n }\n\n // 2. Environment variable\n const envToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;\n if (envToken) {\n return envToken;\n }\n\n // 3. gh CLI token\n try {\n const ghToken = execSync(\"gh auth token\", {\n encoding: \"utf-8\",\n timeout: 5000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n if (ghToken) {\n return ghToken;\n }\n } catch {\n // gh CLI not available or not authenticated\n }\n\n return null;\n}\n\n/**\n * Check if GitHub authentication is available\n */\nexport function isGitHubAuthenticated(token?: string): boolean {\n return resolveGitHubToken(token) !== null;\n}\n\n// ============================================================================\n// Client Class\n// ============================================================================\n\nexport class GitHubClient {\n private octokit: Octokit;\n private owner?: string;\n private repo?: string;\n\n constructor(options: GitHubClientOptions = {}) {\n const token = resolveGitHubToken(options.token);\n\n if (!token) {\n throw new Error(\n \"GitHub authentication not found. Set GITHUB_TOKEN environment variable or run 'gh auth login'.\"\n );\n }\n\n this.octokit = new Octokit({ auth: token });\n this.owner = options.owner;\n this.repo = options.repo;\n }\n\n /**\n * Set the default owner/repo for operations\n */\n setRepo(owner: string, repo: string): void {\n this.owner = owner;\n this.repo = repo;\n }\n\n private getRepoParams(owner?: string, repo?: string): { owner: string; repo: string } {\n const o = owner || this.owner;\n const r = repo || this.repo;\n if (!o || !r) {\n throw new Error(\"Repository owner and name are required\");\n }\n return { owner: o, repo: r };\n }\n\n // ==========================================================================\n // Issues\n // ==========================================================================\n\n /**\n * Get a single issue by number\n */\n async getIssue(issueNumber: number, owner?: string, repo?: string): Promise<GitHubIssue> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.get({\n ...params,\n issue_number: issueNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body ?? null,\n url: data.html_url,\n state: data.state,\n labels: (data.labels || []).map((label) =>\n typeof label === \"string\" ? { name: label } : { name: label.name || \"\" }\n ),\n };\n }\n\n /**\n * List issues in a repository\n */\n async listIssues(\n options: {\n state?: \"open\" | \"closed\" | \"all\";\n labels?: string[];\n limit?: number;\n } = {},\n owner?: string,\n repo?: string\n ): Promise<GitHubIssueListItem[]> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.listForRepo({\n ...params,\n state: options.state || \"open\",\n labels: options.labels?.join(\",\"),\n per_page: options.limit || 30,\n });\n\n // Filter out pull requests (GitHub API returns PRs as issues)\n return data\n .filter((issue) => !issue.pull_request)\n .map((issue) => ({\n number: issue.number,\n title: issue.title,\n url: issue.html_url,\n state: issue.state,\n }));\n }\n\n /**\n * Update an issue's body\n */\n async updateIssueBody(\n issueNumber: number,\n body: string,\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.update({\n ...params,\n issue_number: issueNumber,\n body,\n });\n }\n\n /**\n * Add labels to an issue\n */\n async addLabels(\n issueNumber: number,\n labels: string[],\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.addLabels({\n ...params,\n issue_number: issueNumber,\n labels,\n });\n }\n\n // ==========================================================================\n // Pull Requests\n // ==========================================================================\n\n /**\n * Create a pull request\n */\n async createPullRequest(\n options: CreatePrOptions,\n owner?: string,\n repo?: string\n ): Promise<CreatePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.create({\n ...params,\n title: options.title,\n body: options.body,\n head: options.head,\n base: options.base || \"main\",\n draft: options.draft,\n });\n\n return {\n number: data.number,\n url: data.html_url,\n };\n }\n\n /**\n * Get pull request details\n */\n async getPullRequest(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPullRequest> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body,\n url: data.html_url,\n state: data.merged ? \"merged\" : (data.state as \"open\" | \"closed\"),\n mergeable: data.mergeable,\n mergeableState: data.mergeable_state,\n draft: data.draft || false,\n };\n }\n\n /**\n * Get pull request status including checks and reviews\n */\n async getPullRequestStatus(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPrStatus> {\n const params = this.getRepoParams(owner, repo);\n\n // Get PR details\n const pr = await this.getPullRequest(prNumber, owner, repo);\n\n // Get check runs for the PR's head commit\n const { data: prData } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n let checks: GitHubPrCheck[] = [];\n try {\n const { data: checksData } = await this.octokit.checks.listForRef({\n ...params,\n ref: prData.head.sha,\n });\n\n checks = checksData.check_runs.map((check) => ({\n name: check.name,\n status:\n check.status === \"completed\"\n ? check.conclusion === \"success\"\n ? \"pass\"\n : check.conclusion === \"skipped\"\n ? \"skipped\"\n : \"fail\"\n : \"pending\",\n conclusion: check.conclusion,\n }));\n } catch {\n // Checks API might not be available\n }\n\n // Get reviews\n const { data: reviewsData } = await this.octokit.pulls.listReviews({\n ...params,\n pull_number: prNumber,\n });\n\n const reviews: GitHubPrReview[] = reviewsData.map((review) => ({\n reviewer: review.user?.login || \"unknown\",\n state: review.state as GitHubPrReview[\"state\"],\n }));\n\n return {\n number: pr.number,\n url: pr.url,\n state: pr.state,\n mergeable: pr.mergeable,\n checks,\n reviews,\n };\n }\n\n /**\n * Get pull request diff\n */\n async getPullRequestDiff(prNumber: number, owner?: string, repo?: string): Promise<string> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n mediaType: { format: \"diff\" },\n });\n\n // The response is a string when using diff format\n return data as unknown as string;\n }\n\n /**\n * Merge a pull request\n */\n async mergePullRequest(\n options: MergePrOptions,\n owner?: string,\n repo?: string\n ): Promise<MergePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.merge({\n ...params,\n pull_number: options.prNumber,\n merge_method: options.mergeMethod || \"squash\",\n commit_title: options.commitTitle,\n commit_message: options.commitMessage,\n });\n\n return {\n sha: data.sha,\n merged: data.merged,\n };\n }\n\n // ==========================================================================\n // Repositories\n // ==========================================================================\n\n /**\n * Create a new repository (personal or in an organization)\n */\n async createRepository(options: CreateRepoOptions): Promise<GitHubRepo> {\n let data: {\n id: number;\n name: string;\n full_name: string;\n html_url: string;\n private: boolean;\n default_branch?: string | null;\n };\n\n if (options.org) {\n // Create in organization\n const response = await this.octokit.repos.createInOrg({\n org: options.org,\n name: options.name,\n description: options.description,\n private: options.private ?? false,\n auto_init: options.autoInit ?? false,\n });\n data = response.data;\n } else {\n // Create for authenticated user\n const response = await this.octokit.repos.createForAuthenticatedUser({\n name: options.name,\n description: options.description,\n private: options.private ?? false,\n auto_init: options.autoInit ?? false,\n });\n data = response.data;\n }\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * List organizations the authenticated user belongs to\n */\n async listOrganizations(): Promise<GitHubOrganization[]> {\n const query = `\n query {\n viewer {\n organizations(first: 100) {\n nodes {\n id\n databaseId\n login\n name\n }\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n viewer: {\n organizations: {\n nodes: Array<{\n id: string;\n databaseId: number;\n login: string;\n name: string | null;\n }>;\n };\n };\n }>(query);\n\n return result.viewer.organizations.nodes.map((org) => ({\n id: String(org.databaseId),\n nodeId: org.id,\n login: org.login,\n name: org.name,\n }));\n }\n\n /**\n * Get repository details\n */\n async getRepository(owner?: string, repo?: string): Promise<GitHubRepo> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.repos.get(params);\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * List repositories for the authenticated user\n */\n async listUserRepos(\n options: { type?: \"all\" | \"owner\" | \"member\"; limit?: number } = {}\n ): Promise<GitHubRepo[]> {\n const { data } = await this.octokit.repos.listForAuthenticatedUser({\n type: options.type || \"owner\",\n per_page: options.limit || 30,\n sort: \"updated\",\n });\n\n return data.map((repo) => ({\n id: repo.id,\n name: repo.name,\n fullName: repo.full_name,\n url: repo.html_url,\n private: repo.private,\n defaultBranch: repo.default_branch || \"main\",\n }));\n }\n\n // ==========================================================================\n // Projects (GraphQL required for Projects V2)\n // ==========================================================================\n\n /**\n * List projects for the authenticated user\n * Note: Projects V2 requires GraphQL API\n */\n async listUserProjects(limit = 20): Promise<GitHubProject[]> {\n const query = `\n query($first: Int!) {\n viewer {\n projectsV2(first: $first) {\n nodes {\n id\n number\n title\n url\n }\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n viewer: {\n projectsV2: {\n nodes: Array<{\n id: string;\n number: number;\n title: string;\n url: string;\n }>;\n };\n };\n }>(query, { first: limit });\n\n return result.viewer.projectsV2.nodes;\n }\n\n /**\n * Get project by number for a user\n */\n async getUserProject(userLogin: string, projectNumber: number): Promise<GitHubProject | null> {\n const query = `\n query($login: String!, $number: Int!) {\n user(login: $login) {\n projectV2(number: $number) {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n user: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n } | null;\n };\n }>(query, { login: userLogin, number: projectNumber });\n\n return result.user.projectV2;\n } catch {\n return null;\n }\n }\n\n /**\n * Get project by number for an organization\n */\n async getOrgProject(orgLogin: string, projectNumber: number): Promise<GitHubProject | null> {\n const query = `\n query($login: String!, $number: Int!) {\n organization(login: $login) {\n projectV2(number: $number) {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n organization: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n } | null;\n };\n }>(query, { login: orgLogin, number: projectNumber });\n\n return result.organization.projectV2;\n } catch {\n return null;\n }\n }\n\n /**\n * List projects for an organization\n */\n async listOrgProjects(orgLogin: string, limit = 20): Promise<GitHubProject[]> {\n const query = `\n query($login: String!, $first: Int!) {\n organization(login: $login) {\n projectsV2(first: $first) {\n nodes {\n id\n number\n title\n url\n }\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n organization: {\n projectsV2: {\n nodes: Array<{\n id: string;\n number: number;\n title: string;\n url: string;\n }>;\n };\n };\n }>(query, { login: orgLogin, first: limit });\n\n return result.organization.projectsV2.nodes;\n } catch {\n return [];\n }\n }\n\n /**\n * Create a new project\n */\n async createProject(options: CreateProjectOptions): Promise<GitHubProject> {\n // First get the owner's node ID\n let ownerId: string;\n\n if (options.isOrg) {\n const query = `\n query($login: String!) {\n organization(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n organization: { id: string };\n }>(query, { login: options.ownerLogin });\n ownerId = result.organization.id;\n } else {\n const query = `\n query($login: String!) {\n user(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n user: { id: string };\n }>(query, { login: options.ownerLogin });\n ownerId = result.user.id;\n }\n\n // Create the project\n const mutation = `\n mutation($ownerId: ID!, $title: String!) {\n createProjectV2(input: { ownerId: $ownerId, title: $title }) {\n projectV2 {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n createProjectV2: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n };\n };\n }>(mutation, { ownerId, title: options.title });\n\n return result.createProjectV2.projectV2;\n }\n\n /**\n * Copy an existing project\n */\n async copyProject(options: CopyProjectOptions): Promise<GitHubProject> {\n // Get source project's node ID\n let sourceProject: GitHubProject | null;\n if (options.sourceIsOrg) {\n sourceProject = await this.getOrgProject(\n options.sourceOwnerLogin,\n options.sourceProjectNumber\n );\n } else {\n sourceProject = await this.getUserProject(\n options.sourceOwnerLogin,\n options.sourceProjectNumber\n );\n }\n\n if (!sourceProject) {\n throw new Error(\n `Source project #${options.sourceProjectNumber} not found for ${options.sourceOwnerLogin}`\n );\n }\n\n // Get target owner's node ID\n let targetOwnerId: string;\n if (options.targetIsOrg) {\n const query = `\n query($login: String!) {\n organization(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n organization: { id: string };\n }>(query, { login: options.targetOwnerLogin });\n targetOwnerId = result.organization.id;\n } else {\n const query = `\n query($login: String!) {\n user(login: $login) {\n id\n }\n }\n `;\n const result = await this.octokit.graphql<{\n user: { id: string };\n }>(query, { login: options.targetOwnerLogin });\n targetOwnerId = result.user.id;\n }\n\n // Copy the project\n const mutation = `\n mutation($projectId: ID!, $ownerId: ID!, $title: String!, $includeDraftIssues: Boolean) {\n copyProjectV2(input: { \n projectId: $projectId, \n ownerId: $ownerId, \n title: $title,\n includeDraftIssues: $includeDraftIssues\n }) {\n projectV2 {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n copyProjectV2: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n };\n };\n }>(mutation, {\n projectId: sourceProject.id,\n ownerId: targetOwnerId,\n title: options.title,\n includeDraftIssues: options.includeDraftIssues ?? false,\n });\n\n return result.copyProjectV2.projectV2;\n }\n\n /**\n * Link a repository to a project\n * Note: This creates a linked repository in the project\n */\n async linkRepoToProject(projectId: string, repoOwner: string, repoName: string): Promise<void> {\n // First get the repository's node ID\n const { data: repoData } = await this.octokit.repos.get({\n owner: repoOwner,\n repo: repoName,\n });\n\n const mutation = `\n mutation($projectId: ID!, $repositoryId: ID!) {\n linkProjectV2ToRepository(input: { projectId: $projectId, repositoryId: $repositoryId }) {\n repository {\n id\n }\n }\n }\n `;\n\n await this.octokit.graphql(mutation, {\n projectId,\n repositoryId: repoData.node_id,\n });\n }\n\n /**\n * Add an issue to a project\n */\n async addIssueToProject(projectId: string, issueNodeId: string): Promise<string> {\n const mutation = `\n mutation($projectId: ID!, $contentId: ID!) {\n addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {\n item {\n id\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n addProjectV2ItemById: {\n item: {\n id: string;\n };\n };\n }>(mutation, {\n projectId,\n contentId: issueNodeId,\n });\n\n return result.addProjectV2ItemById.item.id;\n }\n\n // ==========================================================================\n // Branch Protection / Rulesets\n // ==========================================================================\n\n /**\n * Create a branch ruleset with common protection rules\n */\n async createBranchRuleset(\n options: {\n name: string;\n enforcement: \"active\" | \"disabled\" | \"evaluate\";\n targetBranches: string[];\n requirePullRequest?: boolean;\n requiredApprovals?: number;\n requireCodeOwnerReview?: boolean;\n dismissStaleReviews?: boolean;\n requireSignedCommits?: boolean;\n requireLinearHistory?: boolean;\n preventDeletion?: boolean;\n preventForcePush?: boolean;\n },\n owner?: string,\n repo?: string\n ): Promise<{ id: number }> {\n const params = this.getRepoParams(owner, repo);\n\n // Build rules array based on options\n const rules: Array<\n | { type: \"deletion\" }\n | { type: \"non_fast_forward\" }\n | { type: \"required_linear_history\" }\n | { type: \"required_signatures\" }\n | {\n type: \"pull_request\";\n parameters: {\n dismiss_stale_reviews_on_push: boolean;\n require_code_owner_review: boolean;\n require_last_push_approval: boolean;\n required_approving_review_count: number;\n required_review_thread_resolution: boolean;\n };\n }\n > = [];\n\n if (options.requirePullRequest) {\n rules.push({\n type: \"pull_request\",\n parameters: {\n dismiss_stale_reviews_on_push: options.dismissStaleReviews ?? false,\n require_code_owner_review: options.requireCodeOwnerReview ?? false,\n require_last_push_approval: false,\n required_approving_review_count: options.requiredApprovals ?? 1,\n required_review_thread_resolution: false,\n },\n });\n }\n\n if (options.requireSignedCommits) {\n rules.push({ type: \"required_signatures\" });\n }\n\n if (options.requireLinearHistory) {\n rules.push({ type: \"required_linear_history\" });\n }\n\n if (options.preventDeletion) {\n rules.push({ type: \"deletion\" });\n }\n\n if (options.preventForcePush) {\n rules.push({ type: \"non_fast_forward\" });\n }\n\n const { data } = await this.octokit.repos.createRepoRuleset({\n ...params,\n name: options.name,\n enforcement: options.enforcement,\n conditions: {\n ref_name: {\n include: options.targetBranches,\n exclude: [],\n },\n },\n rules,\n });\n\n return { id: data.id };\n }\n\n // ==========================================================================\n // Utility Methods\n // ==========================================================================\n\n /**\n * Get the authenticated user's login\n */\n async getAuthenticatedUser(): Promise<{ login: string; id: number }> {\n const { data } = await this.octokit.users.getAuthenticated();\n return { login: data.login, id: data.id };\n }\n\n /**\n * Check if a repository exists\n */\n async repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n await this.octokit.repos.get({ owner, repo });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a GitHub client with optional configuration\n */\nexport function createGitHubClient(options: GitHubClientOptions = {}): GitHubClient {\n return new GitHubClient(options);\n}\n\n/**\n * Create a GitHub client if authentication is available, otherwise return null\n */\nexport function createGitHubClientIfAuthenticated(\n options: GitHubClientOptions = {}\n): GitHubClient | null {\n if (!isGitHubAuthenticated(options.token)) {\n return null;\n }\n try {\n return new GitHubClient(options);\n } catch {\n return null;\n }\n}\n","/**\n * Git Remote Detection Utilities\n *\n * Detect existing git remotes to auto-populate GitHub configuration.\n */\n\nimport { execSync } from \"node:child_process\";\n\nexport interface GitRemoteInfo {\n owner: string;\n repo: string;\n url: string;\n}\n\n/**\n * Parse a GitHub URL (HTTPS or SSH) into owner and repo\n */\nexport function parseGitHubUrl(url: string): GitRemoteInfo | null {\n // HTTPS: https://github.com/owner/repo.git\n const httpsMatch = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (httpsMatch) {\n return {\n owner: httpsMatch[1],\n repo: httpsMatch[2],\n url,\n };\n }\n\n // SSH: git@github.com:owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (sshMatch) {\n return {\n owner: sshMatch[1],\n repo: sshMatch[2],\n url,\n };\n }\n\n return null;\n}\n\n/**\n * Get the origin remote URL from the current git repository\n */\nexport function getOriginRemoteUrl(cwd?: string): string | null {\n try {\n const url = execSync(\"git remote get-url origin\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return url || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Detect GitHub repo info from the current git repository's origin remote\n */\nexport function detectGitHubRepo(cwd?: string): GitRemoteInfo | null {\n const url = getOriginRemoteUrl(cwd);\n if (!url) return null;\n return parseGitHubUrl(url);\n}\n\n/**\n * Check if we're in a git repository\n */\nexport function isGitRepository(cwd?: string): boolean {\n try {\n execSync(\"git rev-parse --git-dir\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialize a git repository\n */\nexport function initGitRepo(cwd?: string): boolean {\n try {\n execSync(\"git init\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Add a remote to the git repository\n */\nexport function addGitRemote(name: string, url: string, cwd?: string): boolean {\n try {\n execSync(`git remote add ${name} ${url}`, {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the current branch name\n */\nexport function getCurrentBranch(cwd?: string): string | null {\n try {\n const branch = execSync(\"git branch --show-current\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return branch || null;\n } catch {\n return null;\n }\n}\n","/**\n * Smart GitHub Integration\n *\n * Intelligent GitHub setup that:\n * - Detects existing git remotes\n * - Offers to create new repos (personal or org)\n * - Creates/copies project boards via API\n * - Configures branch rulesets\n */\n\nimport { confirm, input, number, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport {\n type GitHubClient,\n type GitHubOrganization,\n createGitHubClientIfAuthenticated,\n isGitHubAuthenticated,\n} from \"../../shared/github-client.js\";\nimport type { GitHubConfig, GitHubStatus } from \"../../shared/types.js\";\nimport {\n addGitRemote,\n detectGitHubRepo,\n initGitRepo,\n isGitRepository,\n} from \"../utils/git-remote.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SmartGitHubResult {\n enabled: boolean;\n config?: GitHubConfig;\n repoCreated?: boolean;\n projectCreated?: boolean;\n rulesetsCreated?: boolean;\n}\n\ninterface RepoChoice {\n action: \"existing\" | \"create-public\" | \"create-private\" | \"skip\";\n owner?: string;\n repo?: string;\n}\n\ninterface ProjectChoice {\n action: \"existing\" | \"create-blank\" | \"copy\" | \"skip\";\n projectNumber?: number;\n projectTitle?: string;\n}\n\ninterface OwnerChoice {\n login: string;\n isOrg: boolean;\n name: string;\n}\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nconst DEFAULT_STATUSES: GitHubStatus[] = [\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"];\n\n// ============================================================================\n// Main Function\n// ============================================================================\n\n/**\n * Smart GitHub integration setup\n *\n * Detects existing setup and offers to create missing pieces.\n */\nexport async function setupSmartGitHub(cwd: string): Promise<SmartGitHubResult> {\n // Check if user wants GitHub integration\n const wantGitHub = await confirm({\n message: \"Enable GitHub integration for issue tracking?\",\n default: true,\n });\n\n if (!wantGitHub) {\n return { enabled: false };\n }\n\n // Check authentication\n if (!isGitHubAuthenticated()) {\n console.log(chalk.yellow(\"\\n⚠ GitHub authentication not found.\"));\n console.log(\" Run 'gh auth login' or set GITHUB_TOKEN environment variable.\\n\");\n\n const continueWithoutAuth = await confirm({\n message: \"Continue with manual configuration (no auto-detection)?\",\n default: true,\n });\n\n if (!continueWithoutAuth) {\n return { enabled: false };\n }\n\n // Fall back to manual config\n return manualGitHubConfig();\n }\n\n // Create client for API operations\n const client = createGitHubClientIfAuthenticated();\n if (!client) {\n console.log(chalk.yellow(\"\\n⚠ Could not create GitHub client.\\n\"));\n return manualGitHubConfig();\n }\n\n // Get authenticated user info and organizations\n let userLogin: string;\n let orgs: GitHubOrganization[] = [];\n try {\n const user = await client.getAuthenticatedUser();\n userLogin = user.login;\n console.log(chalk.green(`\\n✓ Authenticated as ${userLogin}`));\n\n // Get organizations\n orgs = await client.listOrganizations();\n if (orgs.length > 0) {\n console.log(chalk.dim(` Organizations: ${orgs.map((o) => o.login).join(\", \")}`));\n }\n console.log();\n } catch (error) {\n console.log(chalk.yellow(\"\\n⚠ Could not verify GitHub authentication.\\n\"));\n return manualGitHubConfig();\n }\n\n // Detect or setup repository\n const repoResult = await setupRepository(client, userLogin, orgs, cwd);\n if (repoResult.action === \"skip\") {\n return { enabled: false };\n }\n\n const { owner, repo } = repoResult;\n if (!owner || !repo) {\n return { enabled: false };\n }\n\n // Set repo on client for subsequent operations\n client.setRepo(owner, repo);\n\n // Determine if owner is an org\n const ownerIsOrg = orgs.some((o) => o.login === owner);\n\n // Setup project board\n const projectResult = await setupProjectBoard(client, userLogin, owner, ownerIsOrg, orgs);\n\n // Setup branch rulesets (optional)\n let rulesetsCreated = false;\n const wantRulesets = await confirm({\n message: \"Configure branch protection rules for main branch?\",\n default: false,\n });\n\n if (wantRulesets) {\n rulesetsCreated = await setupBranchRulesets(client, owner, repo);\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project: projectResult.projectNumber,\n statuses: DEFAULT_STATUSES,\n },\n repoCreated: repoResult.action === \"create-public\" || repoResult.action === \"create-private\",\n projectCreated: projectResult.action === \"create-blank\" || projectResult.action === \"copy\",\n rulesetsCreated,\n };\n}\n\n// ============================================================================\n// Owner Selection\n// ============================================================================\n\nasync function selectOwner(\n userLogin: string,\n orgs: GitHubOrganization[],\n prompt: string\n): Promise<OwnerChoice> {\n const choices: Array<{ value: OwnerChoice; name: string; description?: string }> = [\n {\n value: { login: userLogin, isOrg: false, name: userLogin },\n name: `${userLogin} (personal)`,\n description: \"Your personal account\",\n },\n ...orgs.map((org) => ({\n value: { login: org.login, isOrg: true, name: org.name || org.login },\n name: org.login,\n description: org.name || \"Organization\",\n })),\n ];\n\n if (choices.length === 1) {\n // Only personal account available\n return choices[0].value;\n }\n\n return await select({\n message: prompt,\n choices,\n });\n}\n\n// ============================================================================\n// Repository Setup\n// ============================================================================\n\nasync function setupRepository(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[],\n cwd: string\n): Promise<RepoChoice> {\n // Check for existing git repo and remote\n const isGitRepo = isGitRepository(cwd);\n const existingRemote = isGitRepo ? detectGitHubRepo(cwd) : null;\n\n if (existingRemote) {\n console.log(chalk.dim(` Detected remote: ${existingRemote.owner}/${existingRemote.repo}`));\n\n const useExisting = await confirm({\n message: `Use existing repository ${existingRemote.owner}/${existingRemote.repo}?`,\n default: true,\n });\n\n if (useExisting) {\n return {\n action: \"existing\",\n owner: existingRemote.owner,\n repo: existingRemote.repo,\n };\n }\n }\n\n // No existing remote or user wants different repo\n const repoAction = await select({\n message: \"Repository setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Connect to existing GitHub repository\",\n description: \"Enter owner/repo for an existing repository\",\n },\n {\n value: \"create-private\" as const,\n name: \"Create new private repository\",\n description: \"Create a new private repo on GitHub\",\n },\n {\n value: \"create-public\" as const,\n name: \"Create new public repository\",\n description: \"Create a new public repo on GitHub\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip GitHub integration\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (repoAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (repoAction === \"existing\") {\n return await connectExistingRepo(client);\n }\n\n // Create new repository\n return await createNewRepo(\n client,\n userLogin,\n orgs,\n repoAction === \"create-private\",\n cwd,\n isGitRepo\n );\n}\n\nasync function connectExistingRepo(client: GitHubClient): Promise<RepoChoice> {\n const ownerRepo = await input({\n message: \"Repository (owner/repo or just repo for personal):\",\n validate: (v) => (v.trim() ? true : \"Repository is required\"),\n });\n\n // Parse owner/repo\n let owner: string;\n let repo: string;\n\n if (ownerRepo.includes(\"/\")) {\n [owner, repo] = ownerRepo.split(\"/\", 2);\n } else {\n // Get current user as default owner\n try {\n const user = await client.getAuthenticatedUser();\n owner = user.login;\n repo = ownerRepo;\n } catch {\n console.log(chalk.yellow(\"\\n⚠ Could not determine owner. Please use owner/repo format.\\n\"));\n return { action: \"skip\" };\n }\n }\n\n // Verify repo exists\n try {\n const exists = await client.repoExists(owner, repo);\n if (!exists) {\n console.log(chalk.yellow(`\\n⚠ Repository ${owner}/${repo} not found.\\n`));\n return { action: \"skip\" };\n }\n console.log(chalk.green(`✓ Found repository ${owner}/${repo}`));\n } catch {\n console.log(chalk.yellow(\"\\n⚠ Could not verify repository.\\n\"));\n }\n\n return { action: \"existing\", owner, repo };\n}\n\nasync function createNewRepo(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[],\n isPrivate: boolean,\n cwd: string,\n isGitRepo: boolean\n): Promise<RepoChoice> {\n // Select owner (personal or org)\n const ownerChoice = await selectOwner(userLogin, orgs, \"Create repository under:\");\n\n const repoName = await input({\n message: \"New repository name:\",\n validate: (v) => {\n if (!v.trim()) return \"Repository name is required\";\n if (!/^[a-zA-Z0-9._-]+$/.test(v)) return \"Invalid repository name\";\n return true;\n },\n });\n\n const description = await input({\n message: \"Repository description (optional):\",\n default: \"\",\n });\n\n try {\n console.log(\n chalk.dim(\n `\\n Creating ${isPrivate ? \"private\" : \"public\"} repository in ${ownerChoice.login}...`\n )\n );\n\n const newRepo = await client.createRepository({\n name: repoName,\n description: description || undefined,\n private: isPrivate,\n autoInit: !isGitRepo, // Only auto-init if no local git repo\n org: ownerChoice.isOrg ? ownerChoice.login : undefined,\n });\n\n console.log(chalk.green(`✓ Created repository: ${newRepo.url}\\n`));\n\n // Add remote if local git repo exists\n const remoteUrl = `git@github.com:${ownerChoice.login}/${repoName}.git`;\n\n if (isGitRepo) {\n const added = addGitRemote(\"origin\", remoteUrl, cwd);\n if (added) {\n console.log(chalk.green(\"✓ Added git remote 'origin'\"));\n }\n } else {\n // Initialize git repo and add remote\n const initialized = initGitRepo(cwd);\n if (initialized) {\n console.log(chalk.green(\"✓ Initialized git repository\"));\n addGitRemote(\"origin\", remoteUrl, cwd);\n console.log(chalk.green(\"✓ Added git remote 'origin'\"));\n }\n }\n\n return {\n action: isPrivate ? \"create-private\" : \"create-public\",\n owner: ownerChoice.login,\n repo: repoName,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to create repository: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\n// ============================================================================\n// Project Board Setup\n// ============================================================================\n\nasync function setupProjectBoard(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n const wantProject = await confirm({\n message: \"Use a GitHub Project board for issue status tracking?\",\n default: true,\n });\n\n if (!wantProject) {\n return { action: \"skip\" };\n }\n\n const projectAction = await select({\n message: \"Project board setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Link existing project\",\n description: \"Select from your projects or enter project number\",\n },\n {\n value: \"create-blank\" as const,\n name: \"Create new blank project\",\n description: \"Create a new empty project\",\n },\n {\n value: \"copy\" as const,\n name: \"Copy from existing project\",\n description: \"Copy structure from another project (yours or a template)\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip project board\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (projectAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (projectAction === \"existing\") {\n return await linkExistingProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n }\n\n if (projectAction === \"copy\") {\n return await copyExistingProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n }\n\n // Create new blank project\n return await createNewProject(client, userLogin, repoOwner, repoOwnerIsOrg, orgs);\n}\n\nasync function linkExistingProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Show available projects\n await showAvailableProjects(client, userLogin, orgs);\n\n // Ask for owner and project number\n const projectOwner = await input({\n message: \"Project owner (user or org, leave empty for repo owner):\",\n default: repoOwner,\n });\n\n const projectNum = await number({\n message: \"Project number (from project URL):\",\n min: 1,\n validate: (v) => (v && v >= 1 ? true : \"Project number required\"),\n });\n\n if (!projectNum) {\n return { action: \"skip\" };\n }\n\n // Determine if owner is an org\n const ownerIsOrg =\n projectOwner === repoOwner ? repoOwnerIsOrg : orgs.some((o) => o.login === projectOwner);\n\n // Verify project exists\n try {\n const project = ownerIsOrg\n ? await client.getOrgProject(projectOwner, projectNum)\n : await client.getUserProject(projectOwner, projectNum);\n\n if (project) {\n console.log(chalk.green(`✓ Found project: ${project.title}`));\n return { action: \"existing\", projectNumber: projectNum };\n }\n console.log(chalk.yellow(`\\n⚠ Project #${projectNum} not found for ${projectOwner}\\n`));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.yellow(`\\n⚠ Could not verify project: ${message}\\n`));\n }\n\n return { action: \"existing\", projectNumber: projectNum };\n}\n\nasync function createNewProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Select owner for the new project\n const ownerChoice = await selectOwner(userLogin, orgs, \"Create project under:\");\n\n const projectTitle = await input({\n message: \"Project title:\",\n default: \"Project Board\",\n validate: (v) => (v.trim() ? true : \"Title is required\"),\n });\n\n try {\n console.log(chalk.dim(`\\n Creating project \"${projectTitle}\" in ${ownerChoice.login}...`));\n\n const project = await client.createProject({\n title: projectTitle,\n ownerLogin: ownerChoice.login,\n isOrg: ownerChoice.isOrg,\n });\n\n console.log(chalk.green(`✓ Created project: ${project.title} (#${project.number})`));\n console.log(chalk.dim(` URL: ${project.url}\\n`));\n\n return {\n action: \"create-blank\",\n projectNumber: project.number,\n projectTitle: project.title,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to create project: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\nasync function copyExistingProject(\n client: GitHubClient,\n userLogin: string,\n repoOwner: string,\n repoOwnerIsOrg: boolean,\n orgs: GitHubOrganization[]\n): Promise<ProjectChoice> {\n // Show available projects to copy from\n console.log(chalk.dim(\"\\n Available projects to copy from:\\n\"));\n await showAvailableProjects(client, userLogin, orgs);\n\n // Get source project info\n const sourceOwner = await input({\n message: \"Source project owner (user or org):\",\n default: userLogin,\n });\n\n const sourceProjectNum = await number({\n message: \"Source project number to copy:\",\n min: 1,\n validate: (v) => (v && v >= 1 ? true : \"Project number required\"),\n });\n\n if (!sourceProjectNum) {\n return { action: \"skip\" };\n }\n\n // Select target owner\n const targetOwnerChoice = await selectOwner(userLogin, orgs, \"Create copied project under:\");\n\n const projectTitle = await input({\n message: \"Title for new project:\",\n default: \"Project Board (copy)\",\n validate: (v) => (v.trim() ? true : \"Title is required\"),\n });\n\n const includeDrafts = await confirm({\n message: \"Include draft issues from source project?\",\n default: false,\n });\n\n // Determine if source owner is an org\n const sourceIsOrg = sourceOwner !== userLogin && orgs.some((o) => o.login === sourceOwner);\n\n try {\n console.log(\n chalk.dim(\n `\\n Copying project #${sourceProjectNum} from ${sourceOwner} to ${targetOwnerChoice.login}...`\n )\n );\n\n const project = await client.copyProject({\n sourceProjectNumber: sourceProjectNum,\n sourceOwnerLogin: sourceOwner,\n sourceIsOrg,\n targetOwnerLogin: targetOwnerChoice.login,\n targetIsOrg: targetOwnerChoice.isOrg,\n title: projectTitle,\n includeDraftIssues: includeDrafts,\n });\n\n console.log(chalk.green(`✓ Copied project: ${project.title} (#${project.number})`));\n console.log(chalk.dim(` URL: ${project.url}\\n`));\n\n return {\n action: \"copy\",\n projectNumber: project.number,\n projectTitle: project.title,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to copy project: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\nasync function showAvailableProjects(\n client: GitHubClient,\n userLogin: string,\n orgs: GitHubOrganization[]\n): Promise<void> {\n // Show user's projects\n try {\n const userProjects = await client.listUserProjects(10);\n if (userProjects.length > 0) {\n console.log(chalk.dim(` ${userLogin} (personal):`));\n for (const p of userProjects) {\n console.log(chalk.dim(` #${p.number}: ${p.title}`));\n }\n }\n } catch {\n // Ignore\n }\n\n // Show org projects\n for (const org of orgs.slice(0, 3)) {\n // Limit to first 3 orgs\n try {\n const orgProjects = await client.listOrgProjects(org.login, 5);\n if (orgProjects.length > 0) {\n console.log(chalk.dim(` ${org.login}:`));\n for (const p of orgProjects) {\n console.log(chalk.dim(` #${p.number}: ${p.title}`));\n }\n }\n } catch {\n // Ignore - might not have permission\n }\n }\n console.log();\n}\n\n// ============================================================================\n// Branch Rulesets\n// ============================================================================\n\nasync function setupBranchRulesets(\n client: GitHubClient,\n owner: string,\n repo: string\n): Promise<boolean> {\n console.log(chalk.dim(\"\\n Configuring branch protection for 'main'...\\n\"));\n\n const requirePR = await confirm({\n message: \"Require pull requests for changes?\",\n default: true,\n });\n\n let requiredApprovals = 0;\n if (requirePR) {\n requiredApprovals =\n (await number({\n message: \"Required approvals (0 for none):\",\n default: 0,\n min: 0,\n max: 10,\n })) ?? 0;\n }\n\n const requireSignedCommits = await confirm({\n message: \"Require signed commits?\",\n default: false,\n });\n\n const preventForcePush = await confirm({\n message: \"Prevent force pushes?\",\n default: true,\n });\n\n try {\n await client.createBranchRuleset(\n {\n name: \"main-protection\",\n enforcement: \"active\",\n targetBranches: [\"refs/heads/main\", \"refs/heads/master\"],\n requirePullRequest: requirePR,\n requiredApprovals,\n requireSignedCommits,\n preventForcePush,\n preventDeletion: true,\n },\n owner,\n repo\n );\n\n console.log(chalk.green(\"\\n✓ Created branch ruleset 'main-protection'\\n\"));\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.yellow(`\\n⚠ Could not create ruleset: ${message}`));\n console.log(\" You may need admin permissions or GitHub Pro/Team.\\n\");\n return false;\n }\n}\n\n// ============================================================================\n// Fallback Manual Config\n// ============================================================================\n\nasync function manualGitHubConfig(): Promise<SmartGitHubResult> {\n const ownerRepo = await input({\n message: \"GitHub repository (owner/repo):\",\n validate: (v) => {\n if (!v.trim()) return \"Repository is required\";\n if (!v.includes(\"/\")) return \"Please use owner/repo format\";\n return true;\n },\n });\n\n const [owner, repo] = ownerRepo.split(\"/\", 2);\n\n const useProject = await confirm({\n message: \"Use a GitHub Project board?\",\n default: false,\n });\n\n let project: number | undefined;\n if (useProject) {\n project =\n (await number({\n message: \"Project number:\",\n min: 1,\n })) ?? undefined;\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project,\n statuses: DEFAULT_STATUSES,\n },\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\n\nexport interface LoadedConfigs {\n sdlc: Record<string, unknown> | null;\n sdlcValid: boolean;\n sdlcVersion: string | null;\n omo: Record<string, unknown> | null;\n omoValid: boolean;\n opencode: Record<string, unknown> | null;\n opencodeValid: boolean;\n}\n\nexport function loadExistingConfigs(): LoadedConfigs {\n const result: LoadedConfigs = {\n sdlc: null,\n sdlcValid: false,\n sdlcVersion: null,\n omo: null,\n omoValid: false,\n opencode: null,\n opencodeValid: false,\n };\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n result.sdlc = JSON.parse(content);\n result.sdlcVersion = (result.sdlc?.version as string) || \"0.0.1\";\n result.sdlcValid = result.sdlc !== null && typeof result.sdlc.version === \"string\";\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOmoConfig, \"utf-8\");\n result.omo = JSON.parse(content);\n result.omoValid = result.omo !== null;\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOpencodeConfig, \"utf-8\");\n result.opencode = JSON.parse(content);\n result.opencodeValid = result.opencode !== null;\n } catch {}\n }\n\n return result;\n}\n\nexport function extractSubscriptions(sdlc: Record<string, unknown>): SubscriptionAnswers | null {\n try {\n const subs = sdlc.subscriptions as Record<string, unknown> | undefined;\n if (!subs) return null;\n\n const claude = subs.claude as Record<string, unknown> | undefined;\n const openai = subs.openai as Record<string, unknown> | undefined;\n const google = subs.google as Record<string, unknown> | undefined;\n const copilot = subs.githubCopilot as Record<string, unknown> | undefined;\n\n // Infer auth method from tier for backward compatibility\n const claudeTier = (claude?.tier as SubscriptionAnswers[\"claudeTier\"]) || \"none\";\n const claudeAuth =\n (claude?.authMethod as SubscriptionAnswers[\"claudeAuth\"]) ||\n (claudeTier !== \"none\" ? \"subscription\" : \"none\");\n\n const openaiAuth =\n (openai?.authMethod as SubscriptionAnswers[\"openaiAuth\"]) ||\n (openai?.enabled === true ? \"subscription\" : \"none\");\n\n return {\n hasClaude: claude?.enabled === true,\n claudeAuth,\n claudeTier,\n hasOpenAI: openai?.enabled === true,\n openaiAuth,\n hasGoogle: google?.enabled === true,\n googleAuth: (google?.authMethod as SubscriptionAnswers[\"googleAuth\"]) || \"none\",\n hasGitHubCopilot: copilot?.enabled === true,\n copilotPlan: (copilot?.plan as SubscriptionAnswers[\"copilotPlan\"]) || \"none\",\n copilotEnabledModels: (copilot?.enabledModels as string[]) || [],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractModels(sdlc: Record<string, unknown>): ModelAnswers | null {\n try {\n const models = sdlc.models as Record<string, unknown> | undefined;\n if (!models) return null;\n\n return {\n marvin: (models.marvin as string) || \"\",\n oracle: (models.oracle as string) || \"\",\n librarian: (models.librarian as string) || \"\",\n frontend: models.frontend as string | undefined,\n documentWriter: models.documentWriter as string | undefined,\n multimodalLooker: models.multimodalLooker as string | undefined,\n explore: models.explore as string | undefined,\n settings: models.settings as ModelAnswers[\"settings\"],\n custom: models.custom as ModelAnswers[\"custom\"],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractMethodology(sdlc: Record<string, unknown>): MethodologyAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n if (!bmad) return null;\n\n return {\n defaultTrack: (bmad.defaultTrack as MethodologyAnswers[\"defaultTrack\"]) || \"bmad-method\",\n autoStatusUpdate: bmad.autoStatusUpdate !== false,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractFeatures(sdlc: Record<string, unknown>): FeatureAnswers | null {\n try {\n const features = sdlc.features as Record<string, boolean> | undefined;\n const mcps = sdlc.mcps as Record<string, boolean> | undefined;\n\n if (!features) return null;\n\n const enabledFeatures: string[] = [];\n if (features.autoStatus) enabledFeatures.push(\"auto-status\");\n if (features.parallelExecution) enabledFeatures.push(\"parallel\");\n if (features.notifications) enabledFeatures.push(\"notifications\");\n if (features.contextMonitor) enabledFeatures.push(\"context-monitor\");\n if (features.commentChecker) enabledFeatures.push(\"comment-checker\");\n if (features.lspTools) enabledFeatures.push(\"lsp-tools\");\n\n const mcpList: string[] = [];\n if (mcps?.context7) mcpList.push(\"context7\");\n if (mcps?.exa) mcpList.push(\"exa\");\n if (mcps?.grepApp) mcpList.push(\"grep_app\");\n\n return {\n enabledFeatures,\n mcps: mcpList,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractAdvanced(sdlc: Record<string, unknown>): AdvancedAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n\n return {\n parallelIssueLimit: (bmad?.parallelIssueLimit as number) || 0,\n experimental: [],\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Detect features that were added after the user's current version.\n *\n * MAINTENANCE NOTE: When adding new features that require user opt-in during upgrade,\n * add a check here for the feature field being undefined. This function is called\n * during the upgrade flow to prompt users about new features.\n *\n * Example: If adding a new feature \"enableAwesomeFeature\" in version 0.7.0:\n * if (features?.enableAwesomeFeature === undefined) {\n * newFeatures.push(\"enableAwesomeFeature\");\n * }\n */\nexport function detectNewFeatures(existingSdlc: Record<string, unknown>): string[] {\n const newFeatures: string[] = [];\n\n const features = existingSdlc.features as Record<string, unknown> | undefined;\n\n if (features?.autoGitOperations === undefined) {\n newFeatures.push(\"autoGitOperations\");\n }\n\n return newFeatures;\n}\n","import { copyFileSync, existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"../generators/omo-config.js\";\nimport { generateSdlcConfig } from \"../generators/sdlc-config.js\";\n\nexport interface MergeOptions {\n existingSdlc: Record<string, unknown>;\n existingOmo: Record<string, unknown>;\n fullAnswers: InstallAnswers;\n}\n\nexport interface MergedConfigs {\n sdlc: Record<string, unknown>;\n omo: Record<string, unknown>;\n opencode?: Record<string, unknown>;\n}\n\nexport interface BackupResult {\n sdlcBackup: string | null;\n omoBackup: string | null;\n opencodeBackup: string | null;\n}\n\nexport function deepMerge(\n baseObj: Record<string, unknown>,\n newObj: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...baseObj };\n\n for (const [key, value] of Object.entries(newObj)) {\n if (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof result[key] === \"object\" &&\n result[key] !== null &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMerge(\n result[key] as Record<string, unknown>,\n value as Record<string, unknown>\n );\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nexport function mergeConfigs(\n options: MergeOptions,\n existingOpencode?: Record<string, unknown>\n): MergedConfigs {\n const { existingSdlc, fullAnswers } = options;\n\n const freshSdlc = generateSdlcConfig(fullAnswers);\n const freshOmo = generateOmoConfig(fullAnswers);\n\n const mergedSdlc = deepMerge(existingSdlc, freshSdlc);\n mergedSdlc.version = VERSION;\n\n const result: MergedConfigs = {\n sdlc: mergedSdlc,\n omo: freshOmo,\n };\n\n if (existingOpencode) {\n result.opencode = existingOpencode;\n }\n\n return result;\n}\n\nexport function createBackups(): BackupResult {\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.TZ]/g, \"-\")\n .replace(/--+/g, \"-\")\n .replace(/-$/, \"\");\n const result: BackupResult = {\n sdlcBackup: null,\n omoBackup: null,\n opencodeBackup: null,\n };\n\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n result.sdlcBackup = join(CONFIG_PATHS.backupsDir, `sdlc.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalSdlcConfig, result.sdlcBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n result.omoBackup = join(CONFIG_PATHS.backupsDir, `oh-my-opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOmoConfig, result.omoBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n result.opencodeBackup = join(CONFIG_PATHS.backupsDir, `opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOpencodeConfig, result.opencodeBackup);\n }\n\n return result;\n}\n\nexport function writeMergedConfigs(configs: MergedConfigs): void {\n const sdlcDir = dirname(CONFIG_PATHS.globalSdlcConfig);\n if (!existsSync(sdlcDir)) {\n mkdirSync(sdlcDir, { recursive: true });\n }\n\n writeFileSync(CONFIG_PATHS.globalSdlcConfig, JSON.stringify(configs.sdlc, null, 2), \"utf-8\");\n writeFileSync(CONFIG_PATHS.globalOmoConfig, JSON.stringify(configs.omo, null, 2), \"utf-8\");\n\n if (configs.opencode) {\n writeFileSync(\n CONFIG_PATHS.globalOpencodeConfig,\n JSON.stringify(configs.opencode, null, 2),\n \"utf-8\"\n );\n }\n}\n","import { copyFileSync, existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../../shared/constants.js\";\nimport type { Migration } from \"./types.js\";\n\n/**\n * SDLC Plugin Migrations\n *\n * This is a clean start at v0.3.0. No migrations from previous athena versions.\n * Future migrations for sdlc versions will be added here.\n */\nexport const MIGRATIONS: Migration[] = [\n {\n fromVersion: \"0.0.1\",\n toVersion: \"0.3.0\",\n description: \"Initial SDLC plugin version with Marvin agent and API key auth options\",\n migrateSdlc: (config) => config,\n },\n {\n fromVersion: \"0.3.0\",\n toVersion: \"1.0.0\",\n description: \"Add v1.0 config: modes, memory, TDD updates, classifier model, subagent models\",\n migrateSdlc: (config) => {\n const migrated = { ...config };\n\n // Add modes configuration with defaults\n if (!migrated.modes) {\n migrated.modes = {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n }\n\n // Add memory configuration with defaults\n if (!migrated.memory) {\n migrated.memory = {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n }\n\n // Update TDD configuration with new v1.0 fields\n if (migrated.tdd) {\n const tdd = migrated.tdd as Record<string, unknown>;\n if (tdd.domainVetoEnabled === undefined) {\n tdd.domainVetoEnabled = true;\n }\n if (tdd.debateRounds === undefined) {\n tdd.debateRounds = 2;\n }\n if (tdd.requireVerification === undefined) {\n tdd.requireVerification = true;\n }\n }\n\n // Add classifierModel to routing\n if (migrated.routing) {\n const routing = migrated.routing as Record<string, unknown>;\n if (routing.classifierModel === undefined) {\n routing.classifierModel = \"anthropic/claude-haiku\";\n }\n }\n\n // Add subagents to models with defaults\n if (migrated.models) {\n const models = migrated.models as Record<string, unknown>;\n if (!models.subagents) {\n models.subagents = {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n };\n }\n }\n\n return migrated;\n },\n },\n];\n\nexport interface FileMigrationResult {\n stateFileMoved: boolean;\n backupsMoved: number;\n}\n\nexport function migrateLegacyFiles(): FileMigrationResult {\n const result: FileMigrationResult = {\n stateFileMoved: false,\n backupsMoved: 0,\n };\n\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.legacyStateFile) && !existsSync(CONFIG_PATHS.stateFile)) {\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n copyFileSync(CONFIG_PATHS.legacyStateFile, CONFIG_PATHS.stateFile);\n unlinkSync(CONFIG_PATHS.legacyStateFile);\n result.stateFileMoved = true;\n }\n\n const backupPattern = /\\.(backup-\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{3})$/;\n const configDir = CONFIG_PATHS.globalConfigDir;\n\n if (existsSync(configDir)) {\n const files = readdirSync(configDir);\n const legacyBackups = files.filter((f) => backupPattern.test(f));\n\n if (legacyBackups.length > 0) {\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n for (const backupFile of legacyBackups) {\n const sourcePath = join(configDir, backupFile);\n const destPath = join(CONFIG_PATHS.backupsDir, backupFile);\n\n if (!existsSync(destPath)) {\n renameSync(sourcePath, destPath);\n result.backupsMoved++;\n }\n }\n }\n }\n\n return result;\n}\n","import * as semver from \"semver\";\nimport { VERSION } from \"../../../shared/constants.js\";\nimport { MIGRATIONS } from \"./migrations.js\";\nimport type { Migration, MigrationResult } from \"./types.js\";\n\nexport function migrateConfigs(\n sdlcConfig: Record<string, unknown>,\n omoConfig: Record<string, unknown>,\n fromVersion: string,\n opencodeConfig: Record<string, unknown> = {}\n): MigrationResult {\n const targetVersion = VERSION;\n const migrationsApplied: string[] = [];\n const breakingChangeWarnings: string[] = [];\n let hasBreakingChanges = false;\n\n let currentSdlc = { ...sdlcConfig };\n let currentOmo = { ...omoConfig };\n let currentOpencode = { ...opencodeConfig };\n\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(targetVersion)) || VERSION;\n\n const sortedMigrations = [...MIGRATIONS].sort((a, b) => {\n const aVersion = semver.valid(semver.coerce(a.fromVersion)) || \"0.0.0\";\n const bVersion = semver.valid(semver.coerce(b.fromVersion)) || \"0.0.0\";\n return semver.compare(aVersion, bVersion);\n });\n\n for (const migration of sortedMigrations) {\n const migrationTo = semver.valid(semver.coerce(migration.toVersion)) || \"0.0.0\";\n\n if (semver.lte(migrationTo, normalizedFrom)) continue;\n if (semver.gt(migrationTo, normalizedTarget)) continue;\n\n if (migration.migrateSdlc) {\n currentSdlc = migration.migrateSdlc(currentSdlc);\n }\n if (migration.migrateOmo) {\n currentOmo = migration.migrateOmo(currentOmo);\n }\n if (migration.migrateOpencode) {\n currentOpencode = migration.migrateOpencode(currentOpencode);\n }\n\n migrationsApplied.push(\n `${migration.fromVersion} → ${migration.toVersion}: ${migration.description}`\n );\n\n if (isBreakingMigration(migration)) {\n hasBreakingChanges = true;\n breakingChangeWarnings.push(\n `Migration ${migration.fromVersion} → ${migration.toVersion} contains breaking changes: ${migration.description}`\n );\n }\n }\n\n currentSdlc.version = targetVersion;\n\n return {\n fromVersion,\n toVersion: targetVersion,\n migrationsApplied,\n sdlcConfig: currentSdlc,\n omoConfig: currentOmo,\n opencodeConfig: currentOpencode,\n hasBreakingChanges,\n breakingChangeWarnings,\n };\n}\n\nfunction isBreakingMigration(migration: Migration): boolean {\n const fromMajor = semver.major(semver.coerce(migration.fromVersion) || \"0.0.0\");\n const toMajor = semver.major(semver.coerce(migration.toVersion) || \"0.0.0\");\n return toMajor > fromMajor;\n}\n\nexport function needsMigration(fromVersion: string): boolean {\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(VERSION)) || VERSION;\n\n if (semver.gte(normalizedFrom, normalizedTarget)) {\n return false;\n }\n\n return MIGRATIONS.some((m: Migration) => {\n const migrationTo = semver.valid(semver.coerce(m.toVersion)) || \"0.0.0\";\n\n return semver.gt(migrationTo, normalizedFrom);\n });\n}\n","/**\n * Preset Loader Utility\n *\n * Loads and processes preset configuration files for the CLI installer.\n * Presets provide default values for features, models, and settings.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n} from \"../../shared/types.js\";\n\n/**\n * Preset configuration structure (matches preset JSON files)\n * v1.0.0+ structure with profiles.\n */\nexport interface PresetConfig {\n $schema?: string;\n version: string;\n /** Internal profile identifier */\n name?: string;\n /** User-friendly display name */\n displayName?: string;\n description: string;\n /** Recommended subscriptions - for documentation only, not used as defaults */\n subscriptions: {\n claude: { enabled: boolean; tier: string };\n openai: { enabled: boolean };\n google: { enabled: boolean; authMethod: string };\n githubCopilot?: { enabled: boolean; plan: string };\n };\n models: {\n marvin?: string;\n oracle: string;\n librarian: string;\n frontend?: string;\n documentWriter?: string;\n multimodalLooker?: string;\n explore?: string;\n settings?: Record<string, unknown>;\n };\n // Legacy BMAD configuration (optional in v0.3.0+)\n bmad?: {\n defaultTrack: \"quick-flow\" | \"enterprise\";\n autoStatusUpdate: boolean;\n parallelIssueLimit: number;\n };\n // New v0.3.0+ configurations (optional for backward compatibility)\n tdd?: {\n enabled: boolean;\n verbosity: \"silent\" | \"brief\" | \"explain\";\n bypassPatterns: string[];\n mutationTesting: {\n enabled: boolean;\n requiredScore: number;\n };\n };\n eventModeling?: {\n enabled: boolean;\n outputPath: string;\n };\n git?: {\n workflow: \"standard\" | \"git-spice\";\n requireClean: boolean;\n worktrees: boolean;\n };\n modes?: {\n default: string;\n eventModeling: boolean;\n enabled: string[];\n };\n memory?: {\n backend: \"stateless\" | \"memento\";\n checkpointTtl: number;\n };\n // Features and MCPs support both old and new structures\n features: Record<string, boolean>;\n mcps: Record<string, boolean>;\n routing?: Record<string, unknown>;\n}\n\n/**\n * Preset summary for display purposes\n */\nexport interface PresetSummary {\n name: string;\n description: string;\n path: string;\n}\n\n/**\n * Defaults derived from a preset\n */\nexport interface PresetDefaults {\n models: ModelAnswers;\n methodology: MethodologyAnswers;\n features: FeatureAnswers;\n advanced: AdvancedAnswers;\n}\n\n/**\n * Profile definitions with display information\n * These are the 3 opinionated profiles available to users\n */\nexport interface ProfileDefinition {\n /** Internal identifier (matches preset file name) */\n id: string;\n /** File name in config/presets/ (without .json) */\n fileName: string;\n /** User-friendly display name */\n displayName: string;\n /** Short description */\n description: string;\n /** Recommendation text */\n recommendation: string;\n}\n\n/**\n * The 3 available profiles\n */\nexport const PROFILES: ProfileDefinition[] = [\n {\n id: \"event-modeling\",\n fileName: \"event-modeling\",\n displayName: \"Event Modeling\",\n description:\n \"Full TDD + Event Modeling + all Marvin modes. For line-of-business applications with complex state management.\",\n recommendation: \"Recommended for LOB apps\",\n },\n {\n id: \"prd\",\n fileName: \"standard\",\n displayName: \"PRD-Driven\",\n description:\n \"TDD + PRD-style specifications. For libraries, CLI tools, and APIs without long-term state tracking.\",\n recommendation: \"Recommended for libraries/tools\",\n },\n {\n id: \"tdd-only\",\n fileName: \"minimal\",\n displayName: \"TDD-Only\",\n description: \"Just TDD cycle enforcement with no planning methodology. Minimal setup.\",\n recommendation: \"For users who only want TDD\",\n },\n];\n\n/**\n * Valid preset file names (for backwards compatibility)\n */\nexport const PRESET_NAMES = [\"minimal\", \"standard\", \"event-modeling\"] as const;\nexport type PresetName = (typeof PRESET_NAMES)[number];\n\n/**\n * Get the path to the presets directory.\n * Handles both development and bundled scenarios.\n */\nfunction getPresetsDir(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n const bundledPresetsDir = join(bundledRoot, \"config\", \"presets\");\n if (existsSync(bundledPresetsDir)) {\n return bundledPresetsDir;\n }\n\n // Unbundled development: src/cli/utils/preset-loader.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n const devPresetsDir = join(devRoot, \"config\", \"presets\");\n if (existsSync(devPresetsDir)) {\n return devPresetsDir;\n }\n\n // Fallback: check if we're in node_modules\n const nodeModulesPath = currentFileDir.split(\"node_modules\")[0];\n if (nodeModulesPath !== currentFileDir) {\n const packagePresetsDir = join(\n nodeModulesPath,\n \"node_modules\",\n \"opencode-sdlc\",\n \"config\",\n \"presets\"\n );\n if (existsSync(packagePresetsDir)) {\n return packagePresetsDir;\n }\n }\n\n throw new Error(\n `Could not find presets directory. Searched:\\n - ${bundledPresetsDir}\\n - ${devPresetsDir}`\n );\n}\n\n/**\n * Check if a preset name is valid\n */\nexport function isValidPresetName(name: string): name is PresetName {\n return PRESET_NAMES.includes(name as PresetName);\n}\n\n/**\n * Get a profile definition by ID\n */\nexport function getProfileById(id: string): ProfileDefinition | undefined {\n return PROFILES.find((p) => p.id === id);\n}\n\n/**\n * Load a profile configuration by profile ID\n *\n * @param profileId - The profile ID (event-modeling, prd, tdd-only)\n * @returns The parsed preset configuration\n * @throws Error if profile is not found or invalid\n */\nexport function loadProfile(profileId: string): PresetConfig {\n const profile = getProfileById(profileId);\n if (!profile) {\n const validIds = PROFILES.map((p) => p.id).join(\", \");\n throw new Error(`Invalid profile: \"${profileId}\". Valid profiles are: ${validIds}`);\n }\n\n return loadPreset(profile.fileName as PresetName);\n}\n\n/**\n * Load a preset configuration by name\n *\n * @param name - The preset name (minimal, standard, enterprise, solo-quick)\n * @returns The parsed preset configuration\n * @throws Error if preset is not found or invalid\n */\nexport function loadPreset(name: string): PresetConfig {\n if (!isValidPresetName(name)) {\n const validNames = PRESET_NAMES.join(\", \");\n throw new Error(`Invalid preset name: \"${name}\". Valid presets are: ${validNames}`);\n }\n\n const presetsDir = getPresetsDir();\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (!existsSync(presetPath)) {\n throw new Error(\n `Preset file not found: ${presetPath}\\nThis may indicate a corrupted installation. Try reinstalling opencode-sdlc.`\n );\n }\n\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n\n // Validate required fields\n // v0.3.0+: bmad is optional (legacy), tdd is optional (new)\n // At least one of bmad or tdd should be present, or neither for minimal presets\n if (!preset.version || !preset.models || !preset.features) {\n throw new Error(`Preset \"${name}\" is missing required fields`);\n }\n\n return preset;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid JSON in preset file: ${presetPath}\\nError: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * List all available profiles with their descriptions\n *\n * @returns Array of profile summaries\n */\nexport function listProfiles(): PresetSummary[] {\n return PROFILES.map((profile) => ({\n name: profile.displayName,\n description: profile.description,\n path: profile.id,\n }));\n}\n\n/**\n * List all available presets with their descriptions\n * @deprecated Use listProfiles() instead\n *\n * @returns Array of preset summaries\n */\nexport function listPresets(): PresetSummary[] {\n const presetsDir = getPresetsDir();\n const summaries: PresetSummary[] = [];\n\n for (const name of PRESET_NAMES) {\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (existsSync(presetPath)) {\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n summaries.push({\n name,\n description: preset.description || `${name} preset`,\n path: presetPath,\n });\n } catch {\n // Skip invalid presets\n summaries.push({\n name,\n description: `${name} preset (unable to read)`,\n path: presetPath,\n });\n }\n }\n }\n\n return summaries;\n}\n\n/**\n * Convert a preset configuration to default values for the install wizard.\n *\n * Note: Subscriptions are NOT included - they are always gathered from the user.\n * Supports both v0.3.0+ (new) and legacy (bmad) presets.\n *\n * @param preset - The preset configuration\n * @returns Default values for models, methodology, features, and advanced settings\n */\nexport function presetToDefaults(preset: PresetConfig): PresetDefaults {\n // Check if using legacy (bmad) or new (tdd) structure\n const isLegacy = \"bmad\" in preset && preset.bmad !== undefined;\n\n return {\n models: {\n marvin: preset.models.marvin || \"\",\n oracle: preset.models.oracle,\n librarian: preset.models.librarian,\n frontend: preset.models.frontend,\n documentWriter: preset.models.documentWriter,\n multimodalLooker: preset.models.multimodalLooker,\n },\n methodology: isLegacy\n ? {\n defaultTrack: preset.bmad?.defaultTrack ?? \"quick-flow\",\n autoStatusUpdate: preset.bmad?.autoStatusUpdate ?? true,\n }\n : {\n // New structure uses default values - these fields are less relevant in v0.3.0+\n defaultTrack: \"quick-flow\" as const,\n autoStatusUpdate: true,\n },\n features: {\n enabledFeatures: flagsToFeatures(preset.features),\n mcps: flagsToMcps(preset.mcps),\n },\n advanced: {\n parallelIssueLimit: isLegacy ? (preset.bmad?.parallelIssueLimit ?? 0) : 0,\n experimental: [],\n },\n };\n}\n\n/**\n * Convert feature flags object to enabled features array.\n * Reverse of featuresToFlags() in features.ts\n * Supports both legacy and v0.3.0+ feature structures.\n */\nfunction flagsToFeatures(flags: PresetConfig[\"features\"]): string[] {\n const features: string[] = [];\n\n // Check if using new (v0.3.0+) or legacy feature structure\n const isNewFeatures = \"orchestratorOnly\" in flags;\n\n if (isNewFeatures) {\n // New v0.3.0+ features\n const newFlags = flags as {\n orchestratorOnly?: boolean;\n todoSync?: boolean;\n partyReview?: boolean;\n debuggingProtocol?: boolean;\n memento?: boolean;\n notifications?: boolean;\n lspTools?: boolean;\n };\n if (newFlags.orchestratorOnly) features.push(\"orchestratorOnly\");\n if (newFlags.todoSync) features.push(\"todoSync\");\n if (newFlags.partyReview) features.push(\"partyReview\");\n if (newFlags.debuggingProtocol) features.push(\"debuggingProtocol\");\n if (newFlags.memento) features.push(\"memento\");\n if (newFlags.notifications) features.push(\"notifications\");\n if (newFlags.lspTools) features.push(\"lspTools\");\n } else {\n // Legacy features\n const legacyFlags = flags as {\n bmadBridge?: boolean;\n autoStatus?: boolean;\n parallelExecution?: boolean;\n notifications?: boolean;\n contextMonitor?: boolean;\n commentChecker?: boolean;\n lspTools?: boolean;\n };\n if (legacyFlags.bmadBridge) features.push(\"bmad-bridge\");\n if (legacyFlags.autoStatus) features.push(\"auto-status\");\n if (legacyFlags.parallelExecution) features.push(\"parallel\");\n if (legacyFlags.notifications) features.push(\"notifications\");\n if (legacyFlags.contextMonitor) features.push(\"context-monitor\");\n if (legacyFlags.commentChecker) features.push(\"comment-checker\");\n if (legacyFlags.lspTools) features.push(\"lsp-tools\");\n }\n\n return features;\n}\n\n/**\n * Convert MCP flags object to enabled MCPs array.\n * Reverse of mcpsToFlags() in features.ts\n * Supports both legacy and v0.3.0+ MCP structures.\n */\nfunction flagsToMcps(mcps: PresetConfig[\"mcps\"]): string[] {\n const result: string[] = [];\n\n if (mcps.context7) result.push(\"context7\");\n if (mcps.exa) result.push(\"exa\");\n if (mcps.grepApp) result.push(\"grep_app\");\n // New v0.3.0+ MCP\n if (\"memento\" in mcps && (mcps as { memento?: boolean }).memento) {\n result.push(\"memento\");\n }\n\n return result;\n}\n\n/**\n * Get a formatted summary of a preset for display\n *\n * @param preset - The preset configuration\n * @param name - The preset name\n * @returns Formatted string describing the preset\n */\nexport function formatPresetSummary(preset: PresetConfig, name: string): string {\n const lines: string[] = [];\n\n lines.push(`Preset: ${name}`);\n lines.push(`Description: ${preset.description}`);\n lines.push(\"\");\n lines.push(\"Models:\");\n lines.push(` Marvin: ${preset.models.marvin}`);\n lines.push(` Oracle: ${preset.models.oracle}`);\n lines.push(` Librarian: ${preset.models.librarian}`);\n\n // Show configuration based on whether it's legacy (bmad) or new (tdd) preset\n if (preset.bmad) {\n lines.push(\"\");\n lines.push(\"BMAD Settings (Legacy):\");\n lines.push(` Default Track: ${preset.bmad.defaultTrack}`);\n lines.push(` Auto Status Update: ${preset.bmad.autoStatusUpdate ? \"Yes\" : \"No\"}`);\n lines.push(` Parallel Issue Limit: ${preset.bmad.parallelIssueLimit}`);\n }\n\n if (preset.tdd) {\n lines.push(\"\");\n lines.push(\"TDD Settings:\");\n lines.push(` Enabled: ${preset.tdd.enabled ? \"Yes\" : \"No\"}`);\n lines.push(` Verbosity: ${preset.tdd.verbosity}`);\n if (preset.tdd.mutationTesting?.enabled) {\n lines.push(` Mutation Testing: ${preset.tdd.mutationTesting.requiredScore}% required`);\n }\n }\n\n if (preset.eventModeling?.enabled) {\n lines.push(\"\");\n lines.push(\"Event Modeling: Enabled\");\n lines.push(` Output Path: ${preset.eventModeling.outputPath}`);\n }\n\n lines.push(\"\");\n lines.push(\"Features:\");\n const enabledFeatures = flagsToFeatures(preset.features);\n if (enabledFeatures.length > 0) {\n lines.push(` Enabled: ${enabledFeatures.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n lines.push(\"\");\n lines.push(\"MCP Servers:\");\n const enabledMcps = flagsToMcps(preset.mcps);\n if (enabledMcps.length > 0) {\n lines.push(` Enabled: ${enabledMcps.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n return lines.join(\"\\n\");\n}\n","/**\n * Install command\n *\n * Interactive installer for OpenCode SDLC.\n * Supports presets for quick configuration.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type {\n InstallAnswers,\n InstallOptions,\n SdlcMode,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport { setupSmartGitHub } from \"../questions/github-smart.js\";\nimport {\n type LoadedConfigs,\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { checkPrerequisites } from \"../utils/prerequisites.js\";\nimport {\n PROFILES,\n type PresetConfig,\n type PresetDefaults,\n type ProfileDefinition,\n formatPresetSummary,\n loadProfile,\n presetToDefaults,\n} from \"../utils/preset-loader.js\";\n\ntype InstallMode = \"fresh\" | \"upgrade\" | \"reconfigure\";\n\ninterface ModeDetectionResult {\n mode: InstallMode;\n existingVersion?: string;\n configs?: LoadedConfigs;\n}\n\nfunction detectInstallMode(options: InstallOptions, configs: LoadedConfigs): ModeDetectionResult {\n if (options.reconfigure) {\n return { mode: \"reconfigure\" };\n }\n\n if (!configs.sdlc) {\n return { mode: \"fresh\" };\n }\n\n return {\n mode: \"upgrade\",\n existingVersion: configs.sdlcVersion || \"0.0.1\",\n configs,\n };\n}\n\nasync function runUpgradeFlow(\n configs: LoadedConfigs,\n existingVersion: string,\n options: InstallOptions\n): Promise<void> {\n const { sdlc, omo, opencode } = configs;\n\n logger.section(\"Upgrading Configuration\");\n\n console.log(chalk.cyan(`\\nCurrent version: ${existingVersion}`));\n console.log(chalk.cyan(`New version: ${VERSION}\\n`));\n\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Upgrade existing installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Upgrade cancelled.\");\n process.exit(0);\n }\n }\n\n const spinner = ora(\"Creating backup...\").start();\n const backups = createBackups();\n const backupCount = [backups.sdlcBackup, backups.omoBackup, backups.opencodeBackup].filter(\n Boolean\n ).length;\n spinner.succeed(`Created ${backupCount} backup file(s)`);\n\n const fileMigrationResult = migrateLegacyFiles();\n if (fileMigrationResult.stateFileMoved || fileMigrationResult.backupsMoved > 0) {\n const moved: string[] = [];\n if (fileMigrationResult.stateFileMoved) moved.push(\"state file\");\n if (fileMigrationResult.backupsMoved > 0)\n moved.push(`${fileMigrationResult.backupsMoved} backup(s)`);\n console.log(chalk.gray(` Migrated ${moved.join(\", \")} to new sdlc/ directory`));\n }\n\n const migrationSpinner = ora(\"Applying migrations...\").start();\n const migrationResult = migrateConfigs(sdlc || {}, omo || {}, existingVersion, opencode || {});\n\n if (migrationResult.migrationsApplied.length > 0) {\n migrationSpinner.succeed(`Applied ${migrationResult.migrationsApplied.length} migration(s)`);\n for (const migration of migrationResult.migrationsApplied) {\n console.log(chalk.gray(` • ${migration}`));\n }\n } else {\n migrationSpinner.succeed(\"No migrations needed\");\n }\n\n if (migrationResult.hasBreakingChanges && !options.yes) {\n console.log(chalk.yellow(\"\\nBreaking changes detected:\"));\n for (const warning of migrationResult.breakingChangeWarnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n\n const continueUpgrade = await confirm({\n message: \"Continue with upgrade despite breaking changes?\",\n default: false,\n });\n\n if (!continueUpgrade) {\n logger.info(\"Upgrade cancelled. Your backup files are preserved.\");\n process.exit(0);\n }\n }\n\n const existingSubscriptions = extractSubscriptions(migrationResult.sdlcConfig);\n const existingModels = extractModels(migrationResult.sdlcConfig);\n const existingMethodology = extractMethodology(migrationResult.sdlcConfig);\n const existingFeatures = extractFeatures(migrationResult.sdlcConfig);\n const existingAdvanced = extractAdvanced(migrationResult.sdlcConfig);\n\n logger.section(\"Preserved Configuration\");\n\n if (existingSubscriptions) {\n console.log(chalk.bold(\"Subscriptions:\"));\n if (existingSubscriptions.hasClaude) {\n const claudeInfo =\n existingSubscriptions.claudeAuth === \"api\" ? \"API Key\" : existingSubscriptions.claudeTier;\n console.log(chalk.green(` ✓ Claude (${claudeInfo})`));\n }\n if (existingSubscriptions.hasOpenAI) {\n const openaiInfo = existingSubscriptions.openaiAuth === \"api\" ? \"API Key\" : \"Subscription\";\n console.log(chalk.green(` ✓ OpenAI (${openaiInfo})`));\n }\n if (existingSubscriptions.hasGoogle)\n console.log(chalk.green(` ✓ Google (${existingSubscriptions.googleAuth})`));\n if (existingSubscriptions.hasGitHubCopilot)\n console.log(chalk.green(` ✓ GitHub Copilot (${existingSubscriptions.copilotPlan})`));\n }\n\n if (existingModels) {\n console.log(chalk.bold(\"\\nModel Assignments:\"));\n console.log(chalk.green(` ✓ Marvin: ${existingModels.marvin}`));\n console.log(chalk.green(` ✓ Oracle: ${existingModels.oracle}`));\n console.log(chalk.green(` ✓ Librarian: ${existingModels.librarian}`));\n }\n console.log();\n\n const newFeatures = detectNewFeatures(migrationResult.sdlcConfig);\n const updatedFeatures = existingFeatures;\n\n if (newFeatures.length > 0 && !options.yes) {\n logger.section(\"New Features Available\");\n\n for (const feature of newFeatures) {\n if (feature === \"autoGitOperations\") {\n const enable = await confirm({\n message: \"Enable automatic git operations? (commits, pushes by agents)\",\n default: false,\n });\n if (enable) {\n const migratedFeatures = migrationResult.sdlcConfig.features as Record<string, unknown>;\n migratedFeatures.autoGitOperations = true;\n }\n }\n }\n }\n\n // Use existing subscriptions or default to universal (runtime handles availability)\n const finalSubscriptions: SubscriptionAnswers = existingSubscriptions || {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n const fullAnswers: InstallAnswers = {\n subscriptions: finalSubscriptions,\n models: existingModels || {\n marvin: \"\",\n oracle: \"\",\n librarian: \"\",\n },\n methodology: existingMethodology || {\n defaultTrack: \"quick-flow\",\n autoStatusUpdate: true,\n },\n features: updatedFeatures || {\n enabledFeatures: [],\n mcps: [],\n },\n advanced: existingAdvanced || {\n parallelIssueLimit: 0,\n experimental: [],\n },\n installLocation: options.local ? \"local\" : \"global\",\n };\n\n const merged = mergeConfigs(\n {\n existingSdlc: migrationResult.sdlcConfig,\n existingOmo: migrationResult.omoConfig,\n fullAnswers,\n },\n migrationResult.opencodeConfig\n );\n\n const writeSpinner = ora(\"Writing configuration...\").start();\n writeMergedConfigs(merged);\n writeSpinner.succeed(\"Configuration files updated\");\n\n const fileManager = new FileManager();\n\n const generator = new ConfigGenerator(fullAnswers);\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n const installSpinner = ora(`Installing packages: ${packages.join(\", \")}...`).start();\n await fileManager.installDependencies(packages);\n installSpinner.succeed(`Installed ${packages.length} package(s)`);\n }\n\n // Bridge commands removed in v1.0 - modes replace commands entirely\n\n logger.successBanner(`UPGRADED TO OPENCODE ATHENA ${VERSION}!`);\n\n if (backups.sdlcBackup || backups.omoBackup || backups.opencodeBackup) {\n console.log(chalk.gray(\"\\nBackups saved:\"));\n if (backups.sdlcBackup) console.log(chalk.gray(` • ${backups.sdlcBackup}`));\n if (backups.omoBackup) console.log(chalk.gray(` • ${backups.omoBackup}`));\n if (backups.opencodeBackup) console.log(chalk.gray(` • ${backups.opencodeBackup}`));\n }\n\n console.log(chalk.gray(\"\\nRestart OpenCode to use the upgraded configuration.\"));\n console.log();\n}\n\nexport async function install(options: InstallOptions): Promise<void> {\n logger.banner();\n\n const spinner = ora(\"Checking prerequisites...\").start();\n\n const prereqs = await checkPrerequisites();\n\n if (!prereqs.node.installed) {\n spinner.fail(\"Node.js not found\");\n logger.error(\"Please install Node.js 20+ first: https://nodejs.org/\");\n process.exit(1);\n }\n\n if (!prereqs.node.compatible) {\n spinner.warn(`Node.js ${prereqs.node.version} detected. Recommended: 20+`);\n }\n\n if (!prereqs.opencode.installed) {\n spinner.fail(\"OpenCode not found\");\n logger.error(\"Please install OpenCode first: https://opencode.ai/docs\");\n process.exit(1);\n }\n\n if (!prereqs.opencode.compatible) {\n spinner.warn(`OpenCode ${prereqs.opencode.version} detected. Recommended: 1.0.132+`);\n } else {\n spinner.succeed(`OpenCode ${prereqs.opencode.version || \"\"} detected`);\n }\n\n const existingConfigs = loadExistingConfigs();\n const modeResult = detectInstallMode(options, existingConfigs);\n\n if (modeResult.mode === \"upgrade\" && modeResult.configs && modeResult.existingVersion) {\n await runUpgradeFlow(modeResult.configs, modeResult.existingVersion, options);\n return;\n }\n\n if (modeResult.mode === \"reconfigure\") {\n logger.info(\"Reconfiguring from scratch (--reconfigure flag)\");\n }\n\n // Step 2: Profile selection (FIRST - always required)\n logger.section(\"Development Profile\");\n\n let preset: PresetConfig;\n let presetDefaults: PresetDefaults;\n let profileName: string;\n\n if (options.yes) {\n // Use event-modeling as default for --yes flag\n preset = loadProfile(\"event-modeling\");\n presetDefaults = presetToDefaults(preset);\n profileName = \"Event Modeling\";\n logger.info(\"Using default profile: Event Modeling (--yes flag)\");\n } else {\n // Always ask for profile selection\n const { preset: selectedPreset, profile } = await askForProfile();\n preset = selectedPreset;\n presetDefaults = presetToDefaults(preset);\n profileName = profile.displayName;\n logger.success(`Selected profile: ${profileName}`);\n }\n\n // Show profile summary\n console.log(chalk.bold(\"\\nProfile Configuration:\\n\"));\n console.log(chalk.gray(formatPresetSummary(preset, profileName)));\n console.log();\n\n // Profiles are opinionated - no customization during install\n // Users can edit config files later for advanced customization\n\n // Step 4: Use universal subscriptions - the routing system handles availability at runtime\n // We enable all providers by default; OpenCode's auth state determines actual availability\n const subscriptions: SubscriptionAnswers = {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n // Step 5: Use profile defaults for all configuration\n // Models are handled at runtime by the routing system\n logger.section(\"Applying Profile Configuration\");\n\n // Use profile defaults for models directly\n // The routing system will handle model availability at runtime\n const models: InstallAnswers[\"models\"] = {\n marvin: presetDefaults.models.marvin,\n oracle: presetDefaults.models.oracle,\n librarian: presetDefaults.models.librarian,\n frontend: presetDefaults.models.frontend,\n documentWriter: presetDefaults.models.documentWriter,\n multimodalLooker: presetDefaults.models.multimodalLooker,\n };\n\n const methodology: InstallAnswers[\"methodology\"] = presetDefaults.methodology;\n const features: InstallAnswers[\"features\"] = presetDefaults.features;\n const advanced: InstallAnswers[\"advanced\"] = presetDefaults.advanced;\n\n // Use profile defaults for TDD, Event Modeling, Git, Modes, Memory\n const tdd: InstallAnswers[\"tdd\"] = preset.tdd\n ? {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n }\n : undefined;\n\n const eventModeling: InstallAnswers[\"eventModeling\"] = preset.eventModeling\n ? {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n }\n : undefined;\n\n const gitWorkflow: InstallAnswers[\"gitWorkflow\"] = preset.git\n ? {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n }\n : undefined;\n\n const modes: InstallAnswers[\"modes\"] = preset.modes\n ? {\n default: preset.modes.default as SdlcMode,\n eventModeling: preset.modes.eventModeling,\n enabled: preset.modes.enabled as SdlcMode[],\n }\n : undefined;\n\n const memory: InstallAnswers[\"memory\"] = preset.memory\n ? {\n backend: preset.memory.backend,\n checkpointTtl: preset.memory.checkpointTtl,\n }\n : undefined;\n\n // GitHub Integration - smart setup with auto-detection\n logger.section(\"GitHub Integration\");\n const githubResult = await setupSmartGitHub(process.cwd());\n\n // Convert smart GitHub result to InstallAnswers format\n const github =\n githubResult.enabled && githubResult.config\n ? {\n enabled: true,\n owner: githubResult.config.owner,\n repo: githubResult.config.repo,\n project: githubResult.config.project,\n statuses: githubResult.config.statuses || [],\n }\n : { enabled: false, owner: \"\", repo: \"\", statuses: [] };\n\n if (githubResult.repoCreated) {\n logger.success(\"Created new GitHub repository\");\n }\n if (githubResult.projectCreated) {\n logger.success(\"Linked project board\");\n }\n if (githubResult.rulesetsCreated) {\n logger.success(\"Created branch protection rules\");\n }\n logger.success(\"Profile configuration applied\");\n\n // Step 6: Generate configuration\n logger.section(\"Generating Configuration\");\n\n const answers: InstallAnswers = {\n subscriptions,\n models,\n methodology,\n features,\n advanced,\n installLocation: options.local ? \"local\" : \"global\",\n github,\n tdd,\n eventModeling,\n gitWorkflow,\n // v1.0.0 additions\n modes,\n memory,\n };\n\n const generator = new ConfigGenerator(answers);\n const files = await generator.generate();\n\n // Step 7: Preview files\n console.log(chalk.bold(\"Files to be created/modified:\\n\"));\n for (const file of files) {\n const action = file.exists ? chalk.yellow(\"update\") : chalk.green(\"create\");\n console.log(chalk.gray(` [${action}] ${file.path}`));\n }\n console.log();\n\n // Step 8: Confirm installation\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Proceed with installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Installation cancelled.\");\n process.exit(0);\n }\n }\n\n // Step 9: Install\n const installSpinner = ora(\"Installing OpenCode SDLC...\").start();\n\n try {\n const fileManager = new FileManager(generator.getConfigDir());\n\n // Write configuration files\n await fileManager.writeFiles(files);\n installSpinner.text = \"Configuration files written...\";\n\n // Install npm dependencies\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n installSpinner.text = `Installing dependencies: ${packages.join(\", \")}...`;\n await fileManager.installDependencies(packages);\n }\n\n // v1.0.0: Copy agent mode files to project directory if modes are enabled\n // Note: Bridge commands removed in v1.0 - modes replace commands entirely\n if (modes?.enabled && modes.enabled.length > 0) {\n installSpinner.text = \"Installing Marvin mode agents...\";\n const projectDir = process.cwd();\n const copiedAgents = await fileManager.copyAgentModes(projectDir, modes.enabled);\n if (copiedAgents.length > 0) {\n logger.info(`Installed ${copiedAgents.length} Marvin mode agents to .opencode/agent/`);\n }\n }\n\n installSpinner.succeed(\"Installation complete!\");\n } catch (error) {\n installSpinner.fail(\"Installation failed\");\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n // Step 10: Print next steps\n printNextSteps();\n}\n\n/**\n * Ask user to select a development profile\n * This is always the first question in the install flow\n */\nasync function askForProfile(): Promise<{ preset: PresetConfig; profile: ProfileDefinition }> {\n console.log(\n chalk.gray(\"\\nChoose a profile based on your project type. Each profile is opinionated\\n\") +\n chalk.gray(\"and includes sensible defaults - you can customize later if needed.\\n\")\n );\n\n const choices = PROFILES.map((p) => ({\n name: `${p.displayName} (${p.recommendation})`,\n value: p.id,\n description: p.description,\n }));\n\n const selected = await select({\n message: \"Select a development profile:\",\n choices,\n default: \"event-modeling\",\n });\n\n const profile = PROFILES.find((p) => p.id === selected);\n if (!profile) {\n throw new Error(`Profile not found: ${selected}`);\n }\n\n const preset = loadProfile(selected);\n return { preset, profile };\n}\n\n/**\n * Print next steps after installation\n */\nfunction printNextSteps(): void {\n logger.successBanner(\"OPENCODE SDLC INSTALLED SUCCESSFULLY!\");\n\n console.log(chalk.bold(\"Next Steps:\\n\"));\n console.log(\" 1. Authenticate with your LLM providers:\");\n console.log(` ${chalk.cyan(\"opencode auth login\")}`);\n console.log(\n \" (Select providers you have access to: Anthropic, OpenAI, Google, GitHub Copilot)\"\n );\n console.log();\n console.log(\" 2. Start OpenCode in your project directory:\");\n console.log(` ${chalk.cyan(\"opencode\")}`);\n\n console.log(chalk.bold(\"\\nThe SDLC plugin will automatically:\\n\"));\n console.log(chalk.gray(\" • Enforce TDD cycles (RED → DOMAIN → GREEN → DOMAIN)\"));\n console.log(chalk.gray(\" • Track work via GitHub Issues\"));\n console.log(chalk.gray(\" • Apply file ownership rules\"));\n console.log(chalk.gray(\" • Route to available models at runtime\"));\n console.log(chalk.gray(\"\\nUse Tab to switch between Marvin modes (Build, Discover, etc.)\"));\n\n console.log(chalk.gray(\"\\nAdvanced: Edit ~/.config/opencode/sdlc.json to customize models.\"));\n console.log(chalk.gray(\"Documentation: https://github.com/jwilger/opencode-sdlc-plugin\"));\n console.log();\n}\n","/**\n * Detect OpenCode authentication status\n *\n * Reads ~/.opencode.json to check which providers are authenticated.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface AuthStatus {\n anthropic: boolean;\n openai: boolean;\n google: boolean;\n githubCopilot: boolean;\n}\n\ninterface OpencodeConfig {\n providers?: Record<string, { apiKey?: string; disabled?: boolean }>;\n}\n\nexport async function detectAuthStatus(): Promise<AuthStatus> {\n const opencodeConfigPath = join(homedir(), \".opencode.json\");\n\n if (!existsSync(opencodeConfigPath)) {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n\n try {\n const content = readFileSync(opencodeConfigPath, \"utf-8\");\n const config = JSON.parse(content) as OpencodeConfig;\n\n const providers = config.providers || {};\n\n return {\n anthropic: isProviderAuthenticated(providers, \"anthropic\"),\n openai: isProviderAuthenticated(providers, \"openai\"),\n google: isProviderAuthenticated(providers, \"google\"),\n githubCopilot: isProviderAuthenticated(providers, \"github-copilot\"),\n };\n } catch {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n}\n\nfunction isProviderAuthenticated(\n providers: Record<string, { apiKey?: string; disabled?: boolean }>,\n providerName: string\n): boolean {\n const provider = providers[providerName];\n if (!provider) return false;\n\n return provider.apiKey !== undefined && provider.apiKey !== \"\" && !provider.disabled;\n}\n","/**\n * Provider management command\n *\n * Subcommands:\n * - (no subcommand): Show status\n * - add: Add a provider\n * - remove: Remove a provider\n * - refresh: Re-evaluate model defaults\n * - sync: Sync with OpenCode auth state\n */\n\nimport { select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { detectAuthStatus } from \"../utils/auth-detector.js\";\nimport { extractSubscriptions, loadExistingConfigs } from \"../utils/config-loader.js\";\nimport { logger } from \"../utils/logger.js\";\n\ntype ProviderAction = \"status\" | \"add\" | \"remove\" | \"refresh\" | \"sync\";\n\nexport interface ProvidersOptions {\n action?: ProviderAction;\n}\n\nexport async function providers(options: ProvidersOptions): Promise<void> {\n const action = options.action || \"status\";\n\n switch (action) {\n case \"status\":\n await showStatus();\n break;\n case \"add\":\n await addProvider();\n break;\n case \"remove\":\n await removeProvider();\n break;\n case \"refresh\":\n await refreshDefaults();\n break;\n case \"sync\":\n await syncWithAuth();\n break;\n }\n}\n\nasync function showStatus(): Promise<void> {\n logger.banner();\n logger.section(\"Provider Status\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const subscriptions = extractSubscriptions(configs.sdlc);\n if (!subscriptions) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const spinner = ora(\"Checking authentication status...\").start();\n const authStatus = await detectAuthStatus();\n spinner.stop();\n\n console.log(chalk.bold(\"\\nConfigured Providers:\\n\"));\n\n displayProvider(\n \"Claude\",\n subscriptions.hasClaude,\n subscriptions.claudeTier,\n authStatus.anthropic\n );\n displayProvider(\"OpenAI\", subscriptions.hasOpenAI, undefined, authStatus.openai);\n displayProvider(\"Google\", subscriptions.hasGoogle, subscriptions.googleAuth, authStatus.google);\n displayProvider(\n \"GitHub Copilot\",\n subscriptions.hasGitHubCopilot,\n subscriptions.copilotPlan,\n authStatus.githubCopilot\n );\n\n const models = configs.sdlc.models as Record<string, string>;\n if (models) {\n console.log(chalk.bold(\"\\nCurrent Model Assignments:\\n\"));\n console.log(` ${chalk.cyan(\"Marvin:\")} ${models.marvin || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Oracle:\")} ${models.oracle || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Librarian:\")} ${models.librarian || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Frontend:\")} ${models.frontend || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Doc Writer:\")} ${models.documentWriter || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Multimodal:\")} ${models.multimodalLooker || \"not set\"}`);\n }\n\n if (!authStatus.anthropic && subscriptions.hasClaude) {\n console.log(chalk.yellow(\"\\n⚠ Tip: Run 'opencode auth login' to authenticate Claude\"));\n }\n if (!authStatus.openai && subscriptions.hasOpenAI) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate OpenAI\"));\n }\n if (!authStatus.google && subscriptions.hasGoogle) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate Google\"));\n }\n if (!authStatus.githubCopilot && subscriptions.hasGitHubCopilot) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate GitHub Copilot\"));\n }\n\n console.log();\n}\n\nfunction displayProvider(\n name: string,\n enabled: boolean,\n tier: string | undefined,\n authenticated: boolean\n): void {\n const status = enabled ? chalk.green(\"✓ Enabled\") : chalk.gray(\"✗ Disabled\");\n const auth = enabled\n ? authenticated\n ? chalk.green(\"✓ Authenticated\")\n : chalk.yellow(\"⚠ Not authenticated\")\n : chalk.gray(\"(disabled)\");\n const tierText = tier && tier !== \"none\" ? chalk.gray(` (${tier})`) : \"\";\n\n console.log(` ${status.padEnd(30)} ${name}${tierText}`);\n console.log(` ${\" \".repeat(30)} Auth: ${auth}`);\n}\n\nasync function addProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Add Provider\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const currentSubs = extractSubscriptions(configs.sdlc);\n if (!currentSubs) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const choices = [];\n if (!currentSubs.hasClaude) choices.push({ name: \"Claude Pro/Max\", value: \"claude\" });\n if (!currentSubs.hasOpenAI) choices.push({ name: \"OpenAI ChatGPT Plus/Pro\", value: \"openai\" });\n if (!currentSubs.hasGoogle) choices.push({ name: \"Google/Gemini\", value: \"google\" });\n if (!currentSubs.hasGitHubCopilot) choices.push({ name: \"GitHub Copilot\", value: \"copilot\" });\n\n if (choices.length === 0) {\n logger.info(\"All providers are already enabled.\");\n return;\n }\n\n const provider = await select({\n message: \"Which provider do you want to add?\",\n choices,\n });\n\n const newSubs = { ...currentSubs };\n\n if (provider === \"claude\") {\n newSubs.hasClaude = true;\n newSubs.claudeTier = await select({\n message: \"Which Claude tier?\",\n choices: [\n { name: \"Max 5x\", value: \"max5x\" as const },\n { name: \"Max 20x\", value: \"max20x\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n ],\n });\n } else if (provider === \"openai\") {\n newSubs.hasOpenAI = true;\n } else if (provider === \"google\") {\n newSubs.hasGoogle = true;\n newSubs.googleAuth = await select({\n message: \"Google authentication method?\",\n choices: [\n { name: \"Google Workspace (Antigravity OAuth)\", value: \"antigravity\" as const },\n { name: \"Personal Google Account\", value: \"personal\" as const },\n { name: \"API Key\", value: \"api\" as const },\n ],\n });\n } else if (provider === \"copilot\") {\n newSubs.hasGitHubCopilot = true;\n newSubs.copilotPlan = await select({\n message: \"Which GitHub Copilot plan?\",\n choices: [\n { name: \"Enterprise\", value: \"enterprise\" as const },\n { name: \"Pro+\", value: \"pro-plus\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n { name: \"Business\", value: \"business\" as const },\n { name: \"Free\", value: \"free\" as const },\n ],\n });\n }\n\n logger.success(`Provider added: ${provider}`);\n console.log(chalk.gray(\"\\nRun 'opencode-sdlc providers refresh' to update model defaults.\"));\n}\n\nasync function removeProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Remove Provider\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function refreshDefaults(): Promise<void> {\n logger.banner();\n logger.section(\"Refresh Model Defaults\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function syncWithAuth(): Promise<void> {\n logger.banner();\n logger.section(\"Sync with OpenCode Auth\");\n\n logger.info(\"Not yet implemented.\");\n}\n","/**\n * Uninstall command\n *\n * Remove OpenCode SDLC configuration and dependencies.\n */\n\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport type { UninstallOptions } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\n\n/**\n * Main uninstall command handler\n */\nexport async function uninstall(options: UninstallOptions): Promise<void> {\n logger.banner();\n\n logger.warn(\"This will remove OpenCode SDLC from your system.\");\n console.log();\n\n // Confirm uninstall\n const proceed = await confirm({\n message: \"Are you sure you want to uninstall OpenCode SDLC?\",\n default: false,\n });\n\n if (!proceed) {\n logger.info(\"Uninstall cancelled.\");\n return;\n }\n\n logger.section(\"Uninstalling OpenCode SDLC\");\n\n const fileManager = new FileManager();\n\n // Step 1: Remove any legacy bridge commands (deprecated in v1.0)\n const commandsSpinner = ora(\"Cleaning up legacy bridge commands...\").start();\n try {\n const removedCommands = await fileManager.removeCommands();\n if (removedCommands.length > 0) {\n commandsSpinner.succeed(`Removed ${removedCommands.length} legacy command(s)`);\n } else {\n commandsSpinner.info(\"No legacy bridge commands found\");\n }\n } catch (err) {\n commandsSpinner.fail(\"Failed to remove legacy commands\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 2: Remove config files (unless --keep-config)\n if (!options.keepConfig) {\n const configSpinner = ora(\"Removing configuration files...\").start();\n try {\n const removedFiles = await fileManager.removeConfigFiles();\n if (removedFiles.length > 0) {\n configSpinner.succeed(`Removed ${removedFiles.length} configuration file(s)`);\n } else {\n configSpinner.info(\"No Sdlc configuration files found\");\n }\n } catch (err) {\n configSpinner.fail(\"Failed to remove configuration files\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n logger.info(\"Keeping configuration files (--keep-config)\");\n }\n\n // Step 3: Remove from opencode.json\n const opencodeSpinner = ora(\"Updating opencode.json...\").start();\n try {\n const updated = await fileManager.removeFromOpencodeConfig();\n if (updated) {\n opencodeSpinner.succeed(\"Removed Sdlc plugins from opencode.json\");\n } else {\n opencodeSpinner.info(\"No Sdlc plugins found in opencode.json\");\n }\n } catch (err) {\n opencodeSpinner.fail(\"Failed to update opencode.json\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 4: Remove npm dependencies (unless --keep-deps)\n if (!options.keepDeps) {\n const depsSpinner = ora(\"Removing npm dependencies...\").start();\n try {\n const packagesToRemove = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n await fileManager.uninstallDependencies(packagesToRemove);\n depsSpinner.succeed(\"Removed npm dependencies\");\n } catch (_err) {\n depsSpinner.warn(\"Some dependencies could not be removed\");\n }\n } else {\n logger.info(\"Keeping npm dependencies (--keep-deps)\");\n }\n\n console.log();\n logger.success(\"OpenCode SDLC has been uninstalled.\");\n\n if (options.keepConfig) {\n logger.info(\"Configuration files were preserved.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to reinstall with existing config.`);\n }\n\n console.log();\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport semver from \"semver\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, SubscriptionAnswers, UpgradeOptions } from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport {\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { getInstalledPlugins } from \"../utils/prerequisites.js\";\n\nconst execAsync = promisify(exec);\n\ninterface PackageUpdate {\n name: string;\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\ntype ReleaseChannel = \"latest\" | \"beta\" | \"alpha\";\n\nfunction detectReleaseChannel(version: string): ReleaseChannel {\n if (version.includes(\"-beta\")) return \"beta\";\n if (version.includes(\"-alpha\")) return \"alpha\";\n return \"latest\";\n}\n\nasync function getLatestVersion(\n packageName: string,\n tag: ReleaseChannel = \"latest\"\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(`npm view ${packageName}@${tag} version`);\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\nasync function checkPackageUpdate(name: string, currentVersion: string): Promise<PackageUpdate> {\n const latest = await getLatestVersion(name);\n const hasUpdate =\n latest !== null && semver.valid(latest) && semver.valid(currentVersion)\n ? semver.gt(latest, currentVersion)\n : latest !== null && latest !== currentVersion;\n return {\n name,\n current: currentVersion,\n latest: latest || currentVersion,\n updateAvailable: hasUpdate,\n };\n}\n\nexport async function upgrade(options: UpgradeOptions): Promise<void> {\n logger.banner();\n\n const configs = loadExistingConfigs();\n\n if (!configs.sdlc) {\n logger.error(\"No existing Sdlc installation found.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to install for the first time.`);\n process.exit(1);\n }\n\n const existingVersion = configs.sdlcVersion || \"0.0.1\";\n\n logger.section(\"Checking for Updates\");\n\n const spinner = ora(\"Checking package versions...\").start();\n\n const installedPlugins = await getInstalledPlugins();\n\n const packagesToCheck = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const updates: PackageUpdate[] = [];\n\n const sdlcChannel = detectReleaseChannel(VERSION);\n const sdlcLatest = await getLatestVersion(\"opencode-sdlc-plugin\", sdlcChannel);\n if (sdlcLatest) {\n const sdlcHasUpdate =\n semver.valid(sdlcLatest) && semver.valid(VERSION)\n ? semver.gt(sdlcLatest, VERSION)\n : sdlcLatest !== VERSION;\n updates.push({\n name: \"opencode-sdlc-plugin\",\n current: VERSION,\n latest: sdlcLatest,\n updateAvailable: sdlcHasUpdate,\n });\n }\n\n for (const pkgName of packagesToCheck) {\n const currentVersion = installedPlugins[pkgName];\n if (currentVersion) {\n const updateInfo = await checkPackageUpdate(pkgName, currentVersion);\n updates.push(updateInfo);\n }\n }\n\n spinner.stop();\n\n logger.section(\"Package Versions\");\n\n const updatesAvailable = updates.filter((u) => u.updateAvailable);\n\n for (const pkg of updates) {\n const status = pkg.updateAvailable\n ? chalk.yellow(`${pkg.current} -> ${pkg.latest}`)\n : chalk.green(pkg.current);\n logger.keyValue(pkg.name, status);\n }\n\n console.log();\n\n if (updatesAvailable.length === 0 && existingVersion === VERSION) {\n logger.success(\"All packages are up to date!\");\n return;\n }\n\n if (updatesAvailable.length > 0) {\n logger.info(`${updatesAvailable.length} package update(s) available`);\n }\n\n const coercedExisting = semver.coerce(existingVersion);\n const coercedTarget = semver.coerce(VERSION);\n\n if (coercedExisting && coercedTarget && semver.lt(coercedExisting, coercedTarget)) {\n logger.info(`Configuration upgrade needed: ${existingVersion} -> ${VERSION}`);\n }\n\n if (options.check) {\n console.log();\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc upgrade\")} (without --check) to apply upgrades.`);\n return;\n }\n\n const actionCount = updatesAvailable.length + (existingVersion !== VERSION ? 1 : 0);\n if (actionCount === 0) {\n logger.success(\"Everything is up to date!\");\n return;\n }\n\n if (!options.yes) {\n const proceed = await confirm({\n message: `Upgrade ${actionCount > 1 ? `${actionCount} item(s)` : \"configuration\"}?`,\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Upgrade cancelled.\");\n process.exit(0);\n }\n }\n\n logger.section(\"Upgrading Configuration\");\n\n console.log(chalk.cyan(`\\nCurrent version: ${existingVersion}`));\n console.log(chalk.cyan(`New version: ${VERSION}\\n`));\n\n const backupSpinner = ora(\"Creating backup...\").start();\n const backups = createBackups();\n const backupCount = [backups.sdlcBackup, backups.omoBackup, backups.opencodeBackup].filter(\n Boolean\n ).length;\n backupSpinner.succeed(`Created ${backupCount} backup file(s)`);\n\n const fileMigrationResult = migrateLegacyFiles();\n if (fileMigrationResult.stateFileMoved || fileMigrationResult.backupsMoved > 0) {\n const moved: string[] = [];\n if (fileMigrationResult.stateFileMoved) moved.push(\"state file\");\n if (fileMigrationResult.backupsMoved > 0)\n moved.push(`${fileMigrationResult.backupsMoved} backup(s)`);\n console.log(chalk.gray(` Migrated ${moved.join(\", \")} to new sdlc/ directory`));\n }\n\n const migrationSpinner = ora(\"Applying migrations...\").start();\n const migrationResult = migrateConfigs(\n configs.sdlc || {},\n configs.omo || {},\n existingVersion,\n configs.opencode || {}\n );\n\n if (migrationResult.migrationsApplied.length > 0) {\n migrationSpinner.succeed(`Applied ${migrationResult.migrationsApplied.length} migration(s)`);\n for (const migration of migrationResult.migrationsApplied) {\n console.log(chalk.gray(` • ${migration}`));\n }\n } else {\n migrationSpinner.succeed(\"No migrations needed\");\n }\n\n if (migrationResult.hasBreakingChanges && !options.yes) {\n console.log(chalk.yellow(\"\\nBreaking changes detected:\"));\n for (const warning of migrationResult.breakingChangeWarnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n\n const continueUpgrade = await confirm({\n message: \"Continue with upgrade despite breaking changes?\",\n default: false,\n });\n\n if (!continueUpgrade) {\n logger.info(\"Upgrade cancelled. Your backup files are preserved.\");\n process.exit(0);\n }\n }\n\n const existingSubscriptions = extractSubscriptions(migrationResult.sdlcConfig);\n const existingModels = extractModels(migrationResult.sdlcConfig);\n const existingMethodology = extractMethodology(migrationResult.sdlcConfig);\n const existingFeatures = extractFeatures(migrationResult.sdlcConfig);\n const existingAdvanced = extractAdvanced(migrationResult.sdlcConfig);\n\n logger.section(\"Preserved Configuration\");\n\n if (existingSubscriptions) {\n console.log(chalk.bold(\"Subscriptions:\"));\n if (existingSubscriptions.hasClaude)\n console.log(chalk.green(` ✓ Claude (${existingSubscriptions.claudeTier})`));\n if (existingSubscriptions.hasOpenAI) console.log(chalk.green(\" ✓ OpenAI\"));\n if (existingSubscriptions.hasGoogle)\n console.log(chalk.green(` ✓ Google (${existingSubscriptions.googleAuth})`));\n if (existingSubscriptions.hasGitHubCopilot)\n console.log(chalk.green(` ✓ GitHub Copilot (${existingSubscriptions.copilotPlan})`));\n }\n\n if (existingModels) {\n console.log(chalk.bold(\"\\nModel Assignments:\"));\n console.log(chalk.green(` ✓ Marvin: ${existingModels.marvin}`));\n console.log(chalk.green(` ✓ Oracle: ${existingModels.oracle}`));\n console.log(chalk.green(` ✓ Librarian: ${existingModels.librarian}`));\n }\n console.log();\n\n const newFeatures = detectNewFeatures(migrationResult.sdlcConfig);\n\n if (newFeatures.length > 0 && !options.yes) {\n logger.section(\"New Features Available\");\n\n for (const feature of newFeatures) {\n if (feature === \"autoGitOperations\") {\n const enable = await confirm({\n message: \"Enable automatic git operations? (commits, pushes by agents)\",\n default: false,\n });\n if (enable) {\n const migratedFeatures = migrationResult.sdlcConfig.features as Record<string, unknown>;\n migratedFeatures.autoGitOperations = true;\n }\n }\n }\n }\n\n if (!existingSubscriptions) {\n logger.error(\"Could not extract subscription information from existing config.\");\n logger.info(\"Please run with --reconfigure to set up from scratch.\");\n process.exit(1);\n }\n\n const fullAnswers: InstallAnswers = {\n subscriptions: existingSubscriptions as SubscriptionAnswers,\n models: existingModels || {\n marvin: \"\",\n oracle: \"\",\n librarian: \"\",\n },\n methodology: existingMethodology || {\n defaultTrack: \"quick-flow\",\n autoStatusUpdate: true,\n },\n features: existingFeatures || {\n enabledFeatures: [],\n mcps: [],\n },\n advanced: existingAdvanced || {\n parallelIssueLimit: 0,\n experimental: [],\n },\n installLocation: \"global\",\n };\n\n const merged = mergeConfigs(\n {\n existingSdlc: migrationResult.sdlcConfig,\n existingOmo: migrationResult.omoConfig,\n fullAnswers,\n },\n migrationResult.opencodeConfig\n );\n\n const writeSpinner = ora(\"Writing configuration...\").start();\n writeMergedConfigs(merged);\n writeSpinner.succeed(\"Configuration files updated\");\n\n logger.section(\"Updating Packages\");\n\n const fileManager = new FileManager();\n\n const sdlcUpdate = updatesAvailable.find((u) => u.name === \"opencode-sdlc-plugin\");\n if (sdlcUpdate) {\n const sdlcSpinner = ora(\"Updating opencode-sdlc-plugin...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc-plugin@${channel}`]);\n sdlcSpinner.succeed(`opencode-sdlc-plugin updated to ${sdlcUpdate.latest}`);\n } catch (err) {\n sdlcSpinner.fail(\"Failed to update opencode-sdlc-plugin\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n const generator = new ConfigGenerator(fullAnswers);\n const packages = generator.getRequiredPackages();\n\n const sdlcPackage = packages.find((p) => p.startsWith(\"opencode-sdlc-plugin\"));\n if (sdlcPackage) {\n const sdlcSpinner = ora(\"Installing opencode-sdlc-plugin...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc-plugin@${channel}`]);\n sdlcSpinner.succeed(\"opencode-sdlc-plugin installed\");\n } catch (err) {\n sdlcSpinner.fail(\"Failed to install opencode-sdlc-plugin\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n const pluginUpdates = updatesAvailable.filter((u) => u.name !== \"opencode-sdlc-plugin\");\n if (pluginUpdates.length > 0) {\n const pluginSpinner = ora(\"Updating plugins...\").start();\n try {\n const packages = pluginUpdates.map((u) => `${u.name}@latest`);\n await fileManager.installDependencies(packages);\n pluginSpinner.succeed(`Updated ${pluginUpdates.length} plugin(s)`);\n } catch (err) {\n pluginSpinner.fail(\"Failed to update plugins\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n const generator = new ConfigGenerator(fullAnswers);\n const allPackages = generator.getRequiredPackages();\n const pluginPackages = allPackages.filter((p) => !p.startsWith(\"opencode-sdlc-plugin\"));\n\n if (pluginPackages.length > 0) {\n const pluginSpinner = ora(`Installing plugins: ${pluginPackages.join(\", \")}...`).start();\n try {\n await fileManager.installDependencies(pluginPackages);\n pluginSpinner.succeed(`Installed ${pluginPackages.length} plugin(s)`);\n } catch (err) {\n pluginSpinner.fail(\"Failed to install plugins\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n // Bridge commands removed in v1.0 - modes replace commands entirely\n // Clean up any existing bridge commands from previous installations\n try {\n await fileManager.removeCommands();\n } catch {\n // Ignore errors during cleanup\n }\n\n // v1.0.0: Copy agent mode files if modes are configured\n const modesConfig = migrationResult.sdlcConfig.modes as { enabled?: string[] } | undefined;\n if (modesConfig?.enabled && modesConfig.enabled.length > 0) {\n const agentSpinner = ora(\"Updating Marvin mode agents...\").start();\n try {\n const projectDir = process.cwd();\n const copiedAgents = await fileManager.copyAgentModes(projectDir, modesConfig.enabled);\n if (copiedAgents.length > 0) {\n agentSpinner.succeed(`Updated ${copiedAgents.length} Marvin mode agents`);\n } else {\n agentSpinner.succeed(\"Marvin mode agents up to date\");\n }\n } catch (_err) {\n agentSpinner.warn(\"Could not update Marvin mode agents\");\n }\n }\n\n logger.successBanner(`UPGRADED TO OPENCODE ATHENA ${VERSION}!`);\n\n if (backups.sdlcBackup || backups.omoBackup || backups.opencodeBackup) {\n console.log(chalk.gray(\"\\nBackups saved:\"));\n if (backups.sdlcBackup) console.log(chalk.gray(` • ${backups.sdlcBackup}`));\n if (backups.omoBackup) console.log(chalk.gray(` • ${backups.omoBackup}`));\n if (backups.opencodeBackup) console.log(chalk.gray(` • ${backups.opencodeBackup}`));\n }\n\n console.log(chalk.gray(\"\\nRestart OpenCode to use the upgraded configuration.\"));\n console.log();\n}\n","/**\n * OpenCode SDLC CLI\n *\n * Interactive installer and management tool for OpenCode SDLC.\n */\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { DISPLAY_NAME, TAGLINE, VERSION } from \"../shared/constants.js\";\nimport { doctor } from \"./commands/doctor.js\";\nimport { info } from \"./commands/info.js\";\nimport { install } from \"./commands/install.js\";\nimport { providers } from \"./commands/providers.js\";\nimport { uninstall } from \"./commands/uninstall.js\";\nimport { upgrade } from \"./commands/upgrade.js\";\nimport { listProfiles } from \"./utils/preset-loader.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"opencode-sdlc\")\n .description(\n `${chalk.cyan(DISPLAY_NAME)} - ${TAGLINE}\\nTDD-driven development toolkit with GitHub Issues integration for OpenCode`\n )\n .version(VERSION);\n\nprogram\n .command(\"install\")\n .description(\"Install and configure OpenCode SDLC\")\n .option(\"-y, --yes\", \"Skip confirmation prompts (uses Event Modeling profile)\", false)\n .option(\"--advanced\", \"Show advanced configuration options\", false)\n .option(\"--global\", \"Install globally (default)\", true)\n .option(\"--local\", \"Install to current project only\", false)\n .option(\"--list-profiles\", \"List available profiles and exit\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration (ignore existing config)\", false)\n .action(async (options) => {\n if (options.listProfiles) {\n displayProfiles();\n return;\n }\n await install(options);\n });\n\nprogram\n .command(\"upgrade\")\n .description(\"Upgrade OpenCode SDLC to latest version\")\n .option(\"--check\", \"Check for updates without installing\", false)\n .option(\"-y, --yes\", \"Skip confirmation prompts\", false)\n .action(upgrade);\n\nprogram\n .command(\"doctor\")\n .description(\"Diagnose and fix common issues\")\n .option(\"--fix\", \"Automatically fix issues\", false)\n .action(doctor);\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove OpenCode SDLC\")\n .option(\"--keep-config\", \"Keep configuration files\", false)\n .option(\"--keep-deps\", \"Keep npm dependencies\", false)\n .action(uninstall);\n\nprogram.command(\"info\").description(\"Show current configuration and status\").action(info);\n\nprogram\n .command(\"providers [action]\")\n .description(\"Manage LLM provider subscriptions (status/add/remove/refresh/sync)\")\n .option(\"-v, --verbose\", \"Show detailed provider information\", false)\n .action(async (action) => {\n await providers({ action });\n });\n\n/**\n * Display available profiles in a formatted way\n */\nfunction displayProfiles(): void {\n console.log(chalk.bold.cyan(\"\\nAvailable Development Profiles:\\n\"));\n\n const profiles = listProfiles();\n\n for (const profile of profiles) {\n console.log(chalk.bold(` ${profile.name}`));\n console.log(chalk.gray(` ${profile.description}`));\n console.log();\n }\n\n console.log(chalk.gray(\"Usage: opencode-sdlc install\"));\n console.log(chalk.gray(\" opencode-sdlc install --yes (uses Event Modeling profile)\\n\"));\n}\n\nprogram.parse();\n"]}