opencode-sdlc-plugin 0.3.2 → 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -17
- package/config/presets/copilot-only.json +12 -5
- package/config/presets/enterprise.json +7 -7
- package/config/presets/event-modeling.json +6 -6
- package/config/presets/minimal.json +2 -2
- package/config/presets/solo-quick.json +2 -2
- package/config/presets/standard.json +6 -6
- package/config/presets/strict-tdd.json +7 -7
- package/config/schemas/athena.schema.json +4 -4
- package/config/schemas/sdlc.schema.json +101 -5
- package/dist/cli/index.js +781 -279
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +427 -65
- package/dist/index.js +5239 -1924
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.js +5206 -1930
- package/dist/plugin/index.js.map +1 -1
- package/package.json +1 -1
- package/prompts/agents/adr.md +234 -0
- package/prompts/agents/architect.md +204 -0
- package/prompts/agents/design-facilitator.md +237 -0
- package/prompts/agents/discovery.md +260 -0
- package/prompts/agents/domain.md +148 -34
- package/prompts/agents/file-updater.md +132 -0
- package/prompts/agents/green.md +119 -40
- package/prompts/agents/gwt.md +352 -0
- package/prompts/agents/model-checker.md +332 -0
- package/prompts/agents/red.md +112 -21
- package/prompts/agents/story.md +196 -0
- package/prompts/agents/ux.md +239 -0
- package/prompts/agents/workflow-designer.md +386 -0
- package/prompts/modes/architect.md +219 -0
- package/prompts/modes/build.md +150 -0
- package/prompts/modes/model.md +211 -0
- package/prompts/modes/plan.md +186 -0
- package/prompts/modes/pm.md +269 -0
- package/prompts/modes/prd.md +238 -0
- package/commands/sdlc-adr.md +0 -265
- package/commands/sdlc-debug.md +0 -376
- package/commands/sdlc-design.md +0 -246
- package/commands/sdlc-dev.md +0 -544
- package/commands/sdlc-info.md +0 -325
- package/commands/sdlc-parallel.md +0 -283
- package/commands/sdlc-recall.md +0 -213
- package/commands/sdlc-remember.md +0 -136
- package/commands/sdlc-research.md +0 -343
- package/commands/sdlc-review.md +0 -265
- package/commands/sdlc-status.md +0 -297
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../src/cli/utils/debug-logger.ts","../../src/cli/questions/models.ts","../../src/cli/index.ts","../../src/shared/constants.ts","../../src/cli/commands/doctor.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/prerequisites.ts","../../src/cli/utils/validators.ts","../../src/shared/schemas.ts","../../src/cli/commands/info.ts","../../src/cli/commands/install.ts","../../src/cli/generators/config-generator.ts","../../src/cli/generators/omo-config.ts","../../src/plugin/utils/model-params.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/questions/features.ts","../../src/cli/questions/index.ts","../../src/cli/questions/subscriptions.ts","../../src/cli/questions/methodology.ts","../../src/cli/questions/advanced.ts","../../src/cli/questions/github.ts","../../src/cli/questions/tdd.ts","../../src/cli/questions/event-modeling.ts","../../src/cli/questions/git-workflow.ts","../../src/cli/utils/config-loader.ts","../../src/cli/utils/config-merger.ts","../../src/cli/utils/migrations/index.ts","../../src/cli/utils/migrations/types.ts","../../src/cli/utils/migrations/migrations.ts","../../src/cli/utils/migrations/runner.ts","../../src/cli/utils/preset-loader.ts","../../src/cli/commands/providers.ts","../../src/cli/utils/auth-detector.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/upgrade.ts"],"names":["select","fileURLToPath","dirname","join","existsSync","path","readFileSync","chalk","execAsync","promisify","exec","info","ora","confirm","checkbox","input","mkdirSync","copyFileSync","homedir","providers","semver"],"mappings":"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","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * Debug logger for CLI installer\n *\n * Enabled when ATHENA_DEBUG environment variable is set.\n * Outputs to stderr to avoid interfering with CLI output.\n */\n\nconst isDebugEnabled = (): boolean => {\n return process.env.ATHENA_DEBUG === \"1\" || process.env.ATHENA_DEBUG === \"true\";\n};\n\nexport function debugLog(context: string, data: unknown): void {\n if (!isDebugEnabled()) return;\n\n const timestamp = new Date().toISOString();\n console.error(`[ATHENA_DEBUG ${timestamp}] ${context}:`, JSON.stringify(data, null, 2));\n}\n\nexport function debugSection(title: string): void {\n if (!isDebugEnabled()) return;\n\n console.error(`\\n${\"=\".repeat(60)}`);\n console.error(` ${title}`);\n console.error(`${\"=\".repeat(60)}\\n`);\n}\n","/**\n * Model selection questions\n *\n * Allow users to select specific models for each agent role.\n */\n\nimport { select } from \"@inquirer/prompts\";\nimport type {\n CustomModelDefinition,\n ModelAnswers,\n ModelChoice,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\nimport { debugLog } from \"../utils/debug-logger.js\";\n\n/**\n * Default values for model questions\n */\nexport interface ModelDefaults {\n sisyphus?: string;\n oracle?: string;\n librarian?: string;\n frontend?: string;\n documentWriter?: string;\n multimodalLooker?: string;\n}\n\n/**\n * Available models by provider\n */\nconst AVAILABLE_MODELS: ModelChoice[] = [\n // Anthropic models\n {\n id: \"anthropic/claude-sonnet-4-5\",\n name: \"Claude Sonnet 4.5\",\n provider: \"anthropic\",\n description: \"Latest Sonnet - balanced performance and speed\",\n },\n {\n id: \"anthropic/claude-opus-4-5\",\n name: \"Claude Opus 4.5\",\n provider: \"anthropic\",\n description: \"Most capable Claude model\",\n },\n {\n id: \"anthropic/claude-sonnet-4-5-thinking\",\n name: \"Claude Sonnet 4.5 (Thinking)\",\n provider: \"anthropic\",\n description: \"Sonnet with extended thinking enabled\",\n },\n {\n id: \"anthropic/claude-opus-4-5-thinking\",\n name: \"Claude Opus 4.5 (Thinking)\",\n provider: \"anthropic\",\n description: \"Opus with extended thinking enabled\",\n },\n\n // OpenAI models\n {\n id: \"openai/gpt-4o\",\n name: \"GPT-4o\",\n provider: \"openai\",\n description: \"Fast multimodal model\",\n },\n {\n id: \"openai/gpt-5.1\",\n name: \"GPT-5.1\",\n provider: \"openai\",\n description: \"Latest GPT model\",\n },\n {\n id: \"openai/gpt-5.1-high\",\n name: \"GPT-5.1 High\",\n provider: \"openai\",\n description: \"GPT-5.1 with high reasoning effort\",\n },\n\n // Google models\n {\n id: \"google/gemini-2.5-pro\",\n name: \"Gemini 2.5 Pro\",\n provider: \"google\",\n description: \"Latest Gemini Pro model\",\n },\n {\n id: \"google/gemini-2.5-flash\",\n name: \"Gemini 2.5 Flash\",\n provider: \"google\",\n description: \"Fast Gemini model\",\n },\n {\n id: \"google/gemini-2.0-flash\",\n name: \"Gemini 2.0 Flash\",\n provider: \"google\",\n description: \"Previous generation fast model\",\n },\n\n // GitHub Copilot models (routed through Copilot - smaller context, no thinking)\n // Free tier models\n {\n id: \"github-copilot/gpt-4.1\",\n name: \"GPT-4.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-4.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5-mini\",\n name: \"GPT-5 mini (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast GPT-5 variant through GitHub Copilot\",\n },\n {\n id: \"github-copilot/claude-haiku-4.5\",\n name: \"Claude Haiku 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast Claude model through GitHub Copilot\",\n },\n // Pro/Business/Enterprise models\n {\n id: \"github-copilot/claude-sonnet-4\",\n name: \"Claude Sonnet 4 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Claude Sonnet 4 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/claude-sonnet-4.5\",\n name: \"Claude Sonnet 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Latest Sonnet through GitHub Copilot - no thinking mode\",\n },\n {\n id: \"github-copilot/gpt-5\",\n name: \"GPT-5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-5 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.1\",\n name: \"GPT-5.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-5.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.1-codex\",\n name: \"GPT-5.1-Codex (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Code-optimized GPT-5.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.2\",\n name: \"GPT-5.2 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Latest GPT through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-2.5-pro\",\n name: \"Gemini 2.5 Pro (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Gemini 2.5 Pro through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-3-flash\",\n name: \"Gemini 3 Flash (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast Gemini 3 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-3-pro\",\n name: \"Gemini 3 Pro (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Gemini 3 Pro through GitHub Copilot\",\n },\n // Pro+/Enterprise only (Opus models)\n {\n id: \"github-copilot/claude-opus-4.1\",\n name: \"Claude Opus 4.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Claude Opus 4.1 through GitHub Copilot - Pro+/Enterprise only\",\n },\n {\n id: \"github-copilot/claude-opus-4.5\",\n name: \"Claude Opus 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Most capable Claude through GitHub Copilot - Pro+/Enterprise only\",\n },\n];\n\ntype CopilotPlan = SubscriptionAnswers[\"copilotPlan\"];\n\n/**\n * Convert a CustomModelDefinition to a ModelChoice\n */\nfunction customModelToChoice(custom: CustomModelDefinition): ModelChoice {\n return {\n id: custom.id,\n name: custom.name,\n provider: custom.provider,\n description: custom.description,\n };\n}\n\n/**\n * Merge custom models with built-in models\n * Custom models with the same ID override built-in models\n */\nexport function mergeCustomModels(\n builtInModels: ModelChoice[],\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n if (!customModels || customModels.length === 0) {\n return builtInModels;\n }\n\n const modelMap = new Map<string, ModelChoice>();\n for (const model of builtInModels) {\n modelMap.set(model.id, model);\n }\n\n for (const custom of customModels) {\n modelMap.set(custom.id, customModelToChoice(custom));\n }\n\n return Array.from(modelMap.values());\n}\n\nconst COPILOT_FREE_MODELS = [\n \"github-copilot/gpt-4.1\",\n \"github-copilot/gpt-5-mini\",\n \"github-copilot/claude-haiku-4.5\",\n];\n\nconst COPILOT_OPUS_MODELS = [\"github-copilot/claude-opus-4.1\", \"github-copilot/claude-opus-4.5\"];\n\nfunction isModelAvailableForCopilotPlan(modelId: string, plan: CopilotPlan): boolean {\n if (plan === \"none\") return false;\n\n if (COPILOT_OPUS_MODELS.includes(modelId)) {\n return plan === \"pro-plus\" || plan === \"enterprise\";\n }\n\n if (plan === \"free\") {\n return COPILOT_FREE_MODELS.includes(modelId);\n }\n\n return true;\n}\n\n/**\n * Filter models based on enabled providers\n */\nexport function getAvailableModels(\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n const allModels = mergeCustomModels(AVAILABLE_MODELS, customModels);\n debugLog(\"models.allModels.count\", allModels.length);\n debugLog(\"models.subscriptions\", subscriptions);\n\n const filtered = allModels.filter((model) => {\n if (model.provider === \"anthropic\" && !subscriptions.hasClaude) return false;\n if (model.provider === \"openai\" && !subscriptions.hasOpenAI) return false;\n if (model.provider === \"google\" && !subscriptions.hasGoogle) return false;\n if (model.provider === \"github-copilot\") {\n if (!subscriptions.hasGitHubCopilot) return false;\n if (!isModelAvailableForCopilotPlan(model.id, subscriptions.copilotPlan)) return false;\n if (\n subscriptions.copilotEnabledModels &&\n !subscriptions.copilotEnabledModels.includes(model.id)\n ) {\n return false;\n }\n }\n return true;\n });\n\n debugLog(\"models.filtered.count\", filtered.length);\n debugLog(\"models.filtered.providers\", [...new Set(filtered.map((m) => m.provider))]);\n\n return filtered;\n}\n\n/**\n * Check if a model is available given the subscriptions\n */\nfunction isModelAvailable(modelId: string, availableModels: ModelChoice[]): boolean {\n return availableModels.some((m) => m.id === modelId);\n}\n\n/**\n * Get a fallback model when preset model is not available\n *\n * @param presetModel - The model from the preset\n * @param role - The agent role\n * @param subscriptions - The user's subscriptions\n * @param availableModels - List of available models\n * @returns A valid model ID, either the preset one or a fallback\n */\nfunction getValidModelOrFallback(\n presetModel: string | undefined,\n role: string,\n subscriptions: SubscriptionAnswers,\n availableModels: ModelChoice[]\n): string | undefined {\n // If preset model is available, use it\n if (presetModel && isModelAvailable(presetModel, availableModels)) {\n return presetModel;\n }\n\n // Otherwise use the role-based suggestion\n return getSuggestedModel(role, subscriptions, availableModels);\n}\n\n/**\n * Create choices for a select prompt\n */\nfunction createModelChoices(models: ModelChoice[]) {\n return models.map((model) => ({\n name: `${model.name} - ${model.description}`,\n value: model.id,\n }));\n}\n\n/**\n * Get a suggested default model for a role based on subscriptions\n * Prioritizes direct providers, with Copilot models as fallback\n */\nfunction getSuggestedModel(\n role: string,\n _subscriptions: SubscriptionAnswers,\n availableModels: ModelChoice[]\n): string | undefined {\n const suggestions: Record<string, string[]> = {\n sisyphus: [\n \"anthropic/claude-sonnet-4-5-thinking\",\n \"anthropic/claude-opus-4-5-thinking\",\n \"openai/gpt-5.1-high\",\n \"google/gemini-2.5-pro\",\n \"github-copilot/claude-sonnet-4.5\",\n \"github-copilot/gpt-5.1\",\n \"github-copilot/gemini-2.5-pro\",\n ],\n oracle: [\n \"openai/gpt-5.1-high\",\n \"anthropic/claude-opus-4-5-thinking\",\n \"anthropic/claude-sonnet-4-5-thinking\",\n \"google/gemini-2.5-pro\",\n \"github-copilot/gpt-5.1\",\n \"github-copilot/claude-opus-4.5\",\n \"github-copilot/claude-sonnet-4.5\",\n ],\n librarian: [\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"google/gemini-2.5-flash\",\n \"github-copilot/claude-haiku-4.5\",\n \"github-copilot/gpt-5-mini\",\n ],\n frontend: [\n \"anthropic/claude-sonnet-4-5\",\n \"google/gemini-2.5-pro\",\n \"openai/gpt-4o\",\n \"github-copilot/claude-sonnet-4.5\",\n \"github-copilot/gemini-2.5-pro\",\n ],\n documentWriter: [\n \"google/gemini-2.5-pro\",\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"github-copilot/gemini-2.5-pro\",\n \"github-copilot/claude-sonnet-4.5\",\n ],\n multimodalLooker: [\n \"google/gemini-2.5-flash\",\n \"openai/gpt-4o\",\n \"anthropic/claude-sonnet-4-5\",\n \"github-copilot/gemini-3-flash\",\n \"github-copilot/gpt-5-mini\",\n ],\n explore: [\n \"google/gemini-2.5-flash\",\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"github-copilot/claude-haiku-4.5\",\n \"github-copilot/gpt-5-mini\",\n \"github-copilot/gemini-3-flash\",\n ],\n };\n\n const roleDefaults = suggestions[role] || [];\n const availableIds = availableModels.map((m) => m.id);\n\n for (const modelId of roleDefaults) {\n if (availableIds.includes(modelId)) {\n return modelId;\n }\n }\n\n return availableModels[0]?.id;\n}\n\n/**\n * Gather model selections from user\n *\n * @param subscriptions - The user's provider subscriptions\n * @param defaults - Optional default values from a preset\n * @param customModels - Optional custom model definitions to include\n */\nexport async function gatherModels(\n subscriptions: SubscriptionAnswers,\n defaults?: ModelDefaults,\n customModels?: CustomModelDefinition[]\n): Promise<ModelAnswers> {\n const availableModels = getAvailableModels(subscriptions, customModels);\n\n if (availableModels.length === 0) {\n throw new Error(\n \"No models available. Please enable at least one provider (Claude, OpenAI, Google, or GitHub Copilot).\"\n );\n }\n\n const choices = createModelChoices(availableModels);\n\n // Get valid defaults (either from preset if available, or fallback)\n const sisyphusDefault = getValidModelOrFallback(\n defaults?.sisyphus,\n \"sisyphus\",\n subscriptions,\n availableModels\n );\n const oracleDefault = getValidModelOrFallback(\n defaults?.oracle,\n \"oracle\",\n subscriptions,\n availableModels\n );\n const librarianDefault = getValidModelOrFallback(\n defaults?.librarian,\n \"librarian\",\n subscriptions,\n availableModels\n );\n\n // Required agents\n const sisyphus = await select({\n message: \"Model for Sisyphus (main orchestrator - implements stories)?\",\n choices,\n default: sisyphusDefault,\n });\n\n const oracle = await select({\n message: \"Model for Oracle (debugging and complex reasoning)?\",\n choices,\n default: oracleDefault,\n });\n\n const librarian = await select({\n message: \"Model for Librarian (research and documentation lookup)?\",\n choices,\n default: librarianDefault,\n });\n\n // Optional agents - use defaults with fallback\n const frontend = getValidModelOrFallback(\n defaults?.frontend,\n \"frontend\",\n subscriptions,\n availableModels\n );\n const documentWriter = getValidModelOrFallback(\n defaults?.documentWriter,\n \"documentWriter\",\n subscriptions,\n availableModels\n );\n const multimodalLooker = getValidModelOrFallback(\n defaults?.multimodalLooker,\n \"multimodalLooker\",\n subscriptions,\n availableModels\n );\n\n return {\n sisyphus,\n oracle,\n librarian,\n frontend,\n documentWriter,\n multimodalLooker,\n };\n}\n\n/**\n * Get the list of available models (for display purposes)\n */\nexport function getModelList(\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n return getAvailableModels(subscriptions, customModels);\n}\n\n/**\n * Validate that preset models are compatible with given subscriptions.\n * Returns warnings for any models that won't be available.\n */\nexport function validatePresetModels(\n presetModels: ModelDefaults,\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): string[] {\n const warnings: string[] = [];\n const availableModels = getAvailableModels(subscriptions, customModels);\n\n const checkModel = (model: string | undefined, role: string) => {\n if (model && !isModelAvailable(model, availableModels)) {\n warnings.push(\n `Preset model for ${role} (${model}) is not available with your subscriptions. A fallback will be used.`\n );\n }\n };\n\n checkModel(presetModels.sisyphus, \"Sisyphus\");\n checkModel(presetModels.oracle, \"Oracle\");\n checkModel(presetModels.librarian, \"Librarian\");\n checkModel(presetModels.frontend, \"Frontend\");\n checkModel(presetModels.documentWriter, \"Document Writer\");\n checkModel(presetModels.multimodalLooker, \"Multimodal Looker\");\n\n return warnings;\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 { listPresets } 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(\n \"-p, --preset <preset>\",\n \"Use a preset configuration (minimal, standard, strict-tdd, event-modeling, enterprise, solo-quick, copilot-only)\",\n \"standard\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\", 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-presets\", \"List available presets and exit\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration (ignore existing config)\", false)\n .action(async (options) => {\n if (options.listPresets) {\n displayPresets();\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 presets in a formatted way\n */\nfunction displayPresets(): void {\n console.log(chalk.bold.cyan(\"\\nAvailable Presets:\\n\"));\n\n const presets = listPresets();\n\n for (const preset of presets) {\n console.log(chalk.bold(` ${preset.name}`));\n console.log(chalk.gray(` ${preset.description}`));\n console.log();\n }\n\n console.log(chalk.gray(\"Usage: opencode-sdlc install --preset <name>\"));\n console.log(chalk.gray(\" opencode-sdlc install --preset standard --yes\\n\"));\n}\n\nprogram.parse();\n","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 (v0.3.0+)\n */\nexport const DEFAULTS = {\n // ============================================================================\n // New v0.3.0+ defaults\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 },\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} 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 * 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: Commands directory exists\n const commandsDirExists = fileManager.exists(CONFIG_PATHS.commandsDir);\n results.push({\n name: \"Commands Directory\",\n status: commandsDirExists ? \"pass\" : \"warn\",\n message: commandsDirExists ? \"Exists\" : \"Not found\",\n fix: async () => {\n const spinner = ora(\"Creating commands directory...\").start();\n try {\n await fileManager.ensureDir(CONFIG_PATHS.commandsDir);\n await fileManager.copyCommands();\n spinner.succeed(\"Commands directory created and populated\");\n } catch (err) {\n spinner.fail(\"Failed to create commands directory\");\n throw err;\n }\n },\n });\n\n // Check 8: 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 * 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 commands/ 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, \"commands\"))) {\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, \"commands\"))) {\n return devRoot;\n }\n\n // Fallback to bundled root even if commands 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 async copyCommands(): Promise<string[]> {\n const commandsDir = CONFIG_PATHS.commandsDir;\n await this.ensureDir(commandsDir);\n\n const packageRoot = getPackageRoot();\n const sourceCommandsDir = join(packageRoot, \"commands\");\n\n const copiedFiles: string[] = [];\n\n if (existsSync(sourceCommandsDir)) {\n const files = await readdir(sourceCommandsDir);\n for (const file of files) {\n if (file.endsWith(\".md\")) {\n const sourcePath = join(sourceCommandsDir, file);\n const destPath = join(commandsDir, file);\n await copyFile(sourcePath, destPath);\n copiedFiles.push(file);\n }\n }\n }\n\n return copiedFiles;\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\",\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","/**\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 = [\"sisyphus\", \"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","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 subscription configuration\n */\nexport const SubscriptionSchema = z.object({\n claude: z.object({\n enabled: z.boolean(),\n tier: z.enum([\"max5x\", \"max20x\", \"pro\", \"none\"]),\n }),\n openai: z.object({\n enabled: z.boolean(),\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// 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});\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 sisyphus: 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});\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 agent model assignments\n */\nexport const ModelsSchema = z.object({\n sisyphus: 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 settings: z\n .object({\n sisyphus: 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 (v0.3.0+)\n *\n * Supports transitional state:\n * - New fields (github, tdd, eventModeling, git) 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 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// Legacy/deprecated types (for backward compatibility)\n/** @deprecated Use GitHubConfigValidated instead */\nexport type BmadConfig = z.infer<typeof LegacyBmadConfigSchema>;\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(\"Sisyphus\", sdlcConfig.models.sisyphus);\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 logger.keyValue(\"Commands Dir\", CONFIG_PATHS.commandsDir);\n\n console.log();\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 { InstallAnswers, InstallOptions, SubscriptionAnswers } from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport {\n gatherAdvanced,\n gatherEventModeling,\n gatherFeatures,\n gatherGitHub,\n gatherGitWorkflow,\n gatherMethodology,\n gatherModels,\n gatherSubscriptions,\n gatherTdd,\n validatePresetModels,\n} from \"../questions/index.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 PRESET_NAMES,\n type PresetConfig,\n type PresetDefaults,\n formatPresetSummary,\n isValidPresetName,\n listPresets,\n loadPreset,\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 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(` ✓ Sisyphus: ${existingModels.sisyphus}`));\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 let finalSubscriptions = existingSubscriptions;\n\n if (!options.yes) {\n const changeSubscriptions = await confirm({\n message: \"Do you want to modify your LLM subscriptions?\",\n default: false,\n });\n\n if (changeSubscriptions) {\n logger.section(\"LLM Subscriptions\");\n finalSubscriptions = await gatherSubscriptions();\n }\n }\n\n if (!finalSubscriptions) {\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: finalSubscriptions,\n models: existingModels || {\n sisyphus: \"\",\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 const commandsSpinner = ora(\"Updating bridge commands...\").start();\n const copiedCommands = await fileManager.copyCommands();\n commandsSpinner.succeed(`Updated ${copiedCommands.length} bridge commands`);\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: Handle preset loading\n let preset: PresetConfig | null = null;\n let presetDefaults: PresetDefaults | null = null;\n let presetName: string | null = null;\n\n // Validate and load preset from --preset flag\n if (options.preset && options.preset !== \"none\") {\n if (!isValidPresetName(options.preset)) {\n logger.error(`Invalid preset: \"${options.preset}\"`);\n logger.info(`Valid presets: ${PRESET_NAMES.join(\", \")}`);\n process.exit(1);\n }\n\n try {\n preset = loadPreset(options.preset);\n presetDefaults = presetToDefaults(preset);\n presetName = options.preset;\n logger.success(`Loaded preset: ${options.preset}`);\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }\n\n // If no preset specified via flag, ask interactively (unless --yes)\n if (!preset && !options.yes) {\n const selectedPreset = await askForPreset();\n if (selectedPreset) {\n preset = selectedPreset.preset;\n presetDefaults = presetToDefaults(preset);\n presetName = selectedPreset.name;\n }\n }\n\n // Step 3: Always gather subscription information (regardless of preset)\n logger.section(\"LLM Subscriptions\");\n\n const subscriptions = await gatherSubscriptions();\n\n if (!options.yes) {\n logger.section(\"Confirm Provider Selection\");\n\n console.log(chalk.bold(\"You selected:\\n\"));\n console.log(\n ` Claude: ${subscriptions.hasClaude ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasClaude) {\n console.log(` Tier: ${subscriptions.claudeTier}`);\n }\n console.log(\n ` OpenAI: ${subscriptions.hasOpenAI ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n console.log(\n ` Google: ${subscriptions.hasGoogle ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasGoogle) {\n console.log(` Auth Method: ${subscriptions.googleAuth}`);\n }\n console.log(\n ` GitHub Copilot: ${subscriptions.hasGitHubCopilot ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasGitHubCopilot) {\n console.log(` Plan: ${subscriptions.copilotPlan}`);\n }\n console.log();\n\n const confirmed = await confirm({\n message: \"Is this correct?\",\n default: true,\n });\n\n if (!confirmed) {\n logger.info(\"Please restart installation with correct provider selections.\");\n process.exit(0);\n }\n }\n\n // Step 4: If preset loaded, show summary and ask if they want to customize\n let shouldCustomize = true;\n\n if (preset && presetDefaults && presetName) {\n // Check if preset models are compatible with subscriptions\n const modelWarnings = validatePresetModels(presetDefaults.models, subscriptions);\n if (modelWarnings.length > 0) {\n console.log(chalk.yellow(\"\\nPreset model compatibility warnings:\"));\n for (const warning of modelWarnings) {\n console.log(chalk.yellow(` - ${warning}`));\n }\n console.log();\n }\n\n // Show preset summary\n console.log(chalk.bold(\"\\nPreset Configuration:\\n\"));\n console.log(chalk.gray(formatPresetSummary(preset, presetName)));\n console.log();\n\n // Ask if they want to customize (unless --yes flag)\n if (options.yes) {\n shouldCustomize = false;\n logger.info(\"Using preset defaults (--yes flag)\");\n } else {\n shouldCustomize = await confirm({\n message: \"Would you like to customize these settings?\",\n default: false,\n });\n }\n }\n\n // Step 5: Gather configuration (with preset defaults if available)\n let models: InstallAnswers[\"models\"];\n let methodology: InstallAnswers[\"methodology\"];\n let features: InstallAnswers[\"features\"];\n let advanced: InstallAnswers[\"advanced\"];\n let github: InstallAnswers[\"github\"];\n let tdd: InstallAnswers[\"tdd\"];\n let eventModeling: InstallAnswers[\"eventModeling\"];\n let gitWorkflow: InstallAnswers[\"gitWorkflow\"];\n\n if (!shouldCustomize && presetDefaults) {\n // Use preset defaults directly (validated against subscriptions)\n logger.section(\"Applying Preset Configuration\");\n\n // For models, we still need to validate and potentially substitute\n const availableModels = await import(\"../questions/models.js\").then((m) =>\n m.getAvailableModels(subscriptions)\n );\n\n // Fail early if no models are available\n if (availableModels.length === 0) {\n logger.error(\n \"No models available. Please enable at least one provider (Claude, OpenAI, or Google).\"\n );\n process.exit(1);\n }\n\n models = {\n sisyphus: getValidModelOrFirst(presetDefaults.models.sisyphus, availableModels),\n oracle: getValidModelOrFirst(presetDefaults.models.oracle, availableModels),\n librarian: getValidModelOrFirst(presetDefaults.models.librarian, availableModels),\n frontend: getValidModelOrFirst(presetDefaults.models.frontend, availableModels),\n documentWriter: getValidModelOrFirst(presetDefaults.models.documentWriter, availableModels),\n multimodalLooker: getValidModelOrFirst(\n presetDefaults.models.multimodalLooker,\n availableModels\n ),\n };\n\n methodology = presetDefaults.methodology;\n features = presetDefaults.features;\n advanced = presetDefaults.advanced;\n\n // For presets, still ask for GitHub Integration (project-specific)\n logger.section(\"GitHub Integration\");\n github = await gatherGitHub();\n\n // Use defaults from preset for TDD, Event Modeling, Git\n if (preset?.tdd) {\n tdd = {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n };\n }\n if (preset?.eventModeling) {\n eventModeling = {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n };\n }\n if (preset?.git) {\n gitWorkflow = {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n };\n }\n\n logger.success(\"Preset configuration applied\");\n } else {\n // Interactive configuration (with preset defaults if available)\n\n // Model selection\n logger.section(\"Model Selection\");\n models = await gatherModels(subscriptions, presetDefaults?.models);\n\n // Methodology preferences (legacy, but kept for backward compatibility)\n logger.section(\"Methodology Preferences\");\n methodology = await gatherMethodology(presetDefaults?.methodology);\n\n // GitHub Integration\n logger.section(\"GitHub Integration\");\n github = await gatherGitHub();\n\n // TDD Configuration\n logger.section(\"TDD Configuration\");\n tdd = await gatherTdd(\n preset?.tdd\n ? {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n }\n : undefined\n );\n\n // Event Modeling Configuration\n logger.section(\"Event Modeling\");\n eventModeling = await gatherEventModeling(\n preset?.eventModeling\n ? {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n }\n : undefined\n );\n\n // Git Workflow Configuration\n logger.section(\"Git Workflow\");\n gitWorkflow = await gatherGitWorkflow(\n preset?.git\n ? {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n }\n : undefined\n );\n\n // Feature selection\n logger.section(\"Feature Selection\");\n features = await gatherFeatures(presetDefaults?.features);\n\n // Advanced options (optional, unless --advanced flag)\n if (options.advanced) {\n logger.section(\"Advanced Configuration\");\n advanced = await gatherAdvanced(presetDefaults?.advanced);\n } else {\n advanced = presetDefaults?.advanced ?? {\n parallelIssueLimit: 0,\n experimental: [],\n };\n }\n }\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 };\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 // Copy command files\n installSpinner.text = \"Installing commands...\";\n const copiedCommands = await fileManager.copyCommands();\n\n installSpinner.succeed(\"Installation complete!\");\n\n if (copiedCommands.length > 0) {\n logger.info(`Installed ${copiedCommands.length} bridge commands`);\n }\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(subscriptions);\n}\n\n/**\n * Ask user if they want to start from a preset\n */\nasync function askForPreset(): Promise<{ preset: PresetConfig; name: string } | null> {\n const presets = listPresets();\n\n const choices = [\n { name: \"No preset - Configure everything manually\", value: \"none\" },\n ...presets.map((p) => ({\n name: `${p.name} - ${p.description}`,\n value: p.name,\n })),\n ];\n\n const selected = await select({\n message: \"Start from a preset?\",\n choices,\n default: \"standard\",\n });\n\n if (selected === \"none\") {\n return null;\n }\n\n try {\n const preset = loadPreset(selected);\n return { preset, name: selected };\n } catch (error) {\n logger.warn(`Failed to load preset: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Get a valid model ID or fall back to the first available model\n */\nfunction getValidModelOrFirst(\n modelId: string | undefined,\n availableModels: Array<{ id: string }>\n): string {\n if (modelId && availableModels.some((m) => m.id === modelId)) {\n return modelId;\n }\n return availableModels[0]?.id ?? \"\";\n}\n\n/**\n * Print next steps after installation\n */\nfunction printNextSteps(subscriptions: SubscriptionAnswers): void {\n const steps: string[] = [];\n\n if (subscriptions.hasClaude) {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select Anthropic -> Claude Pro/Max`);\n }\n\n if (subscriptions.hasOpenAI) {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select OpenAI -> ChatGPT Plus/Pro`);\n }\n\n if (subscriptions.hasGoogle) {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select Google -> OAuth with Google`);\n }\n\n if (subscriptions.hasGitHubCopilot) {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select GitHub Copilot`);\n }\n\n logger.successBanner(\"OPENCODE ATHENA INSTALLED SUCCESSFULLY!\");\n\n console.log(chalk.bold(\"Next Steps:\\n\"));\n steps.forEach((step, i) => {\n console.log(` ${i + 1}. ${step}`);\n });\n\n console.log(chalk.bold(\"\\nThen start OpenCode and try:\\n\"));\n console.log(` ${chalk.cyan(\"/sdlc-dev\")} Implement the next issue with Sisyphus`);\n console.log(` ${chalk.cyan(\"/sdlc-status\")} Check issue status`);\n console.log(` ${chalk.cyan(\"/sdlc-info\")} View toolkit configuration`);\n\n console.log(\n chalk.gray(\"\\nDocumentation: https://github.com/ZebulonRouseFrantzich/opencode-sdlc\")\n );\n console.log();\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 * 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 tier: subscriptions.claudeTier || \"none\",\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\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 sisyphus: models.sisyphus,\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: \"sisyphus\", omoName: \"Sisyphus\", modelId: models.sisyphus },\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.sisyphus,\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","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 sisyphus: 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 sisyphus: \"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 * 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\", \"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\", \"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 * 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 tier: subscriptions.claudeTier,\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\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 sisyphus: models.sisyphus,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\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 },\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 new v0.3.0+ TDD config from answers or defaults\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 }\n : {\n enabled: true,\n verbosity: \"brief\",\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\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 * 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 * Questions index\n *\n * Re-exports all question gathering functions and types.\n */\n\nexport { gatherSubscriptions } from \"./subscriptions.js\";\nexport {\n gatherModels,\n getModelList,\n getAvailableModels,\n validatePresetModels,\n type ModelDefaults,\n} from \"./models.js\";\nexport { gatherMethodology, type MethodologyDefaults } from \"./methodology.js\";\nexport {\n gatherFeatures,\n featuresToFlags,\n mcpsToFlags,\n type FeatureDefaults,\n} from \"./features.js\";\nexport { gatherAdvanced, type AdvancedDefaults } from \"./advanced.js\";\nexport {\n gatherGitHub,\n githubAnswersToConfig,\n type GitHubDefaults,\n type GitHubAnswers,\n} from \"./github.js\";\nexport {\n gatherTdd,\n tddAnswersToConfig,\n type TddDefaults,\n type TddAnswers,\n} from \"./tdd.js\";\nexport {\n gatherEventModeling,\n eventModelingAnswersToConfig,\n type EventModelingDefaults,\n type EventModelingAnswers,\n} from \"./event-modeling.js\";\nexport {\n gatherGitWorkflow,\n gitWorkflowAnswersToConfig,\n type GitWorkflowDefaults,\n type GitWorkflowAnswers,\n} from \"./git-workflow.js\";\n","/**\n * Subscription questions\n *\n * Gather information about which LLM providers the user has access to.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { SubscriptionAnswers } from \"../../shared/types.js\";\nimport { debugLog } from \"../utils/debug-logger.js\";\n\n/**\n * Gather subscription information from user\n */\nexport async function gatherSubscriptions(): Promise<SubscriptionAnswers> {\n const hasClaude = await confirm({\n message: \"Do you have a Claude Pro/Max subscription?\",\n default: false,\n });\n debugLog(\"subscription.hasClaude\", hasClaude);\n\n let claudeTier: SubscriptionAnswers[\"claudeTier\"] = \"none\";\n if (hasClaude) {\n claudeTier = await select({\n message: \"Which Claude tier?\",\n choices: [\n { name: \"Max 5x - 5x more usage than Pro\", value: \"max5x\" as const },\n { name: \"Max 20x - 20x more usage than Pro\", value: \"max20x\" as const },\n { name: \"Pro - Standard Pro subscription\", value: \"pro\" as const },\n ],\n });\n debugLog(\"subscription.claudeTier\", claudeTier);\n }\n\n const hasOpenAI = await confirm({\n message: \"Do you have a ChatGPT Plus/Pro subscription?\",\n default: false,\n });\n debugLog(\"subscription.hasOpenAI\", hasOpenAI);\n\n const hasGoogle = await confirm({\n message: \"Will you use Google/Gemini models?\",\n default: false,\n });\n debugLog(\"subscription.hasGoogle\", hasGoogle);\n\n let googleAuth: SubscriptionAnswers[\"googleAuth\"] = \"none\";\n if (hasGoogle) {\n googleAuth = await select({\n message: \"Google authentication method?\",\n choices: [\n {\n name: \"Google Workspace (Antigravity OAuth) - Recommended for Workspace users\",\n value: \"antigravity\" as const,\n },\n {\n name: \"Personal Google Account\",\n value: \"personal\" as const,\n },\n {\n name: \"API Key - Direct API access\",\n value: \"api\" as const,\n },\n ],\n });\n debugLog(\"subscription.googleAuth\", googleAuth);\n }\n\n const hasGitHubCopilot = await confirm({\n message: \"Do you have GitHub Copilot access?\",\n default: false,\n });\n debugLog(\"subscription.hasGitHubCopilot\", hasGitHubCopilot);\n\n let copilotPlan: SubscriptionAnswers[\"copilotPlan\"] = \"none\";\n if (hasGitHubCopilot) {\n copilotPlan = await select({\n message: \"Which GitHub Copilot plan?\",\n choices: [\n { name: \"Enterprise - Full model access including Opus\", value: \"enterprise\" as const },\n { name: \"Pro+ - Includes Claude Opus models\", value: \"pro-plus\" as const },\n { name: \"Pro - Standard paid plan\", value: \"pro\" as const },\n { name: \"Business - Organization plan\", value: \"business\" as const },\n { name: \"Free - Limited model access\", value: \"free\" as const },\n ],\n });\n debugLog(\"subscription.copilotPlan\", copilotPlan);\n }\n\n const result = {\n hasClaude,\n claudeTier,\n hasOpenAI,\n hasGoogle,\n googleAuth,\n hasGitHubCopilot,\n copilotPlan,\n };\n\n debugLog(\"subscriptions.final\", result);\n return result;\n}\n","/**\n * Methodology questions\n *\n * Gather BMAD methodology preferences.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { MethodologyAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for methodology questions\n */\nexport interface MethodologyDefaults {\n defaultTrack?: \"quick-flow\" | \"enterprise\";\n autoStatusUpdate?: boolean;\n}\n\n/**\n * Gather methodology preferences from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherMethodology(\n defaults?: MethodologyDefaults\n): Promise<MethodologyAnswers> {\n const defaultTrack = await select({\n message: \"Default SDLC track for new projects?\",\n choices: [\n {\n name: \"Quick Flow - Fast implementation for small features and bug fixes\",\n value: \"quick-flow\" as const,\n },\n {\n name: \"Enterprise - Extended planning with compliance and scale considerations\",\n value: \"enterprise\" as const,\n },\n ],\n default: defaults?.defaultTrack ?? \"quick-flow\",\n });\n\n const autoStatusUpdate = await confirm({\n message: \"Automatically update GitHub issue status when issues complete?\",\n default: defaults?.autoStatusUpdate ?? true,\n });\n\n return {\n defaultTrack,\n autoStatusUpdate,\n };\n}\n","/**\n * Advanced questions\n *\n * Gather advanced configuration options.\n */\n\nimport { checkbox, confirm, select } from \"@inquirer/prompts\";\nimport type { AdvancedAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for advanced questions\n */\nexport interface AdvancedDefaults {\n parallelIssueLimit?: number;\n experimental?: string[];\n autoFallback?: boolean;\n}\n\n/**\n * Gather advanced options from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherAdvanced(defaults?: AdvancedDefaults): Promise<AdvancedAnswers> {\n const parallelIssueLimit = await select({\n message: \"Maximum parallel issues?\",\n choices: [\n { name: \"1 (sequential - one issue at a time)\", value: 1 },\n { name: \"2\", value: 2 },\n { name: \"3 (recommended)\", value: 3 },\n { name: \"5\", value: 5 },\n { name: \"Unlimited (0)\", value: 0 },\n ],\n default: defaults?.parallelIssueLimit ?? 0,\n });\n\n // Determine which experimental features are checked by default\n const experimentalDefaults = new Set(defaults?.experimental ?? []);\n\n const experimental = await checkbox({\n message: \"Enable experimental features?\",\n choices: [\n {\n name: \"Aggressive Truncation - More aggressive context management\",\n value: \"aggressive-truncation\",\n checked: experimentalDefaults.has(\"aggressive-truncation\"),\n },\n {\n name: \"Auto Resume - Automatically resume interrupted sessions\",\n value: \"auto-resume\",\n checked: experimentalDefaults.has(\"auto-resume\"),\n },\n ],\n });\n\n const autoFallback = await confirm({\n message: \"Enable automatic provider fallback on rate limits?\",\n default: defaults?.autoFallback ?? false,\n });\n\n return {\n parallelIssueLimit,\n experimental,\n autoFallback,\n };\n}\n","/**\n * GitHub Integration questions\n *\n * Gather GitHub repository and project board configuration.\n */\n\nimport { confirm, input, number } from \"@inquirer/prompts\";\nimport type { GitHubConfig, GitHubStatus } from \"../../shared/types.js\";\n\n/**\n * Default values for GitHub questions\n */\nexport interface GitHubDefaults {\n owner?: string;\n repo?: string;\n project?: number;\n statuses?: GitHubStatus[];\n}\n\n/**\n * GitHub answers from the installer\n */\nexport interface GitHubAnswers {\n enabled: boolean;\n owner: string;\n repo: string;\n project?: number;\n statuses: GitHubStatus[];\n}\n\n/**\n * Default GitHub project board statuses\n */\nconst DEFAULT_STATUSES: GitHubStatus[] = [\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"];\n\n/**\n * Gather GitHub integration configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherGitHub(defaults?: GitHubDefaults): Promise<GitHubAnswers> {\n const enabled = await confirm({\n message: \"Enable GitHub Issues integration for work tracking?\",\n default: true,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n owner: \"\",\n repo: \"\",\n statuses: DEFAULT_STATUSES,\n };\n }\n\n const owner = await input({\n message: \"GitHub repository owner (user or organization):\",\n default: defaults?.owner,\n validate: (value) => {\n if (!value.trim()) {\n return \"Owner is required for GitHub integration\";\n }\n if (!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(value)) {\n return \"Invalid GitHub username/organization format\";\n }\n return true;\n },\n });\n\n const repo = await input({\n message: \"GitHub repository name:\",\n default: defaults?.repo,\n validate: (value) => {\n if (!value.trim()) {\n return \"Repository name is required\";\n }\n if (!/^[a-zA-Z0-9._-]+$/.test(value)) {\n return \"Invalid repository name format\";\n }\n return true;\n },\n });\n\n const useProjectBoard = await confirm({\n message: \"Use a GitHub Project board for issue status tracking?\",\n default: defaults?.project !== undefined,\n });\n\n let project: number | undefined;\n if (useProjectBoard) {\n project = await number({\n message: \"GitHub Project number (from project URL):\",\n default: defaults?.project,\n min: 1,\n validate: (value) => {\n if (value === undefined || value < 1) {\n return \"Project number must be a positive integer\";\n }\n return true;\n },\n });\n }\n\n return {\n enabled: true,\n owner,\n repo,\n project,\n statuses: defaults?.statuses ?? DEFAULT_STATUSES,\n };\n}\n\n/**\n * Convert GitHub answers to config format\n */\nexport function githubAnswersToConfig(answers: GitHubAnswers): GitHubConfig | undefined {\n if (!answers.enabled) {\n return undefined;\n }\n\n return {\n owner: answers.owner,\n repo: answers.repo,\n project: answers.project,\n statuses: answers.statuses,\n };\n}\n","/**\n * TDD Configuration questions\n *\n * Gather TDD cycle enforcement preferences.\n */\n\nimport { confirm, input, select } from \"@inquirer/prompts\";\nimport type { TddConfig, TddVerbosity } from \"../../shared/types.js\";\n\n/**\n * Default values for TDD questions\n */\nexport interface TddDefaults {\n enabled?: boolean;\n verbosity?: TddVerbosity;\n bypassPatterns?: string[];\n mutationTesting?: {\n enabled?: boolean;\n requiredScore?: number;\n };\n}\n\n/**\n * TDD answers from the installer\n */\nexport interface TddAnswers {\n enabled: boolean;\n verbosity: TddVerbosity;\n bypassPatterns: string[];\n mutationTesting: {\n enabled: boolean;\n requiredScore: number;\n };\n}\n\n/**\n * Default bypass patterns for files that don't need TDD\n */\nconst DEFAULT_BYPASS_PATTERNS = [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"];\n\n/**\n * Gather TDD configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherTdd(defaults?: TddDefaults): Promise<TddAnswers> {\n const enabled = await confirm({\n message: \"Enable TDD cycle enforcement (RED → DOMAIN → GREEN → DOMAIN)?\",\n default: defaults?.enabled ?? true,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n verbosity: \"silent\",\n bypassPatterns: DEFAULT_BYPASS_PATTERNS,\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n };\n }\n\n const verbosity = await select<TddVerbosity>({\n message: \"TDD feedback verbosity level:\",\n choices: [\n {\n name: \"Silent - Only show errors\",\n value: \"silent\",\n },\n {\n name: \"Brief - Short status messages (recommended)\",\n value: \"brief\",\n },\n {\n name: \"Explain - Detailed explanations of TDD phases\",\n value: \"explain\",\n },\n ],\n default: defaults?.verbosity ?? \"brief\",\n });\n\n const customBypass = await confirm({\n message: \"Customize file patterns that bypass TDD checks?\",\n default: false,\n });\n\n let bypassPatterns = defaults?.bypassPatterns ?? DEFAULT_BYPASS_PATTERNS;\n if (customBypass) {\n const patternsInput = await input({\n message: \"Enter bypass patterns (comma-separated, e.g., *.config.*, *.json):\",\n default: bypassPatterns.join(\", \"),\n });\n bypassPatterns = patternsInput\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n }\n\n const mutationEnabled = await confirm({\n message: \"Enable mutation testing for coverage verification?\",\n default: defaults?.mutationTesting?.enabled ?? false,\n });\n\n let requiredScore = defaults?.mutationTesting?.requiredScore ?? 80;\n if (mutationEnabled) {\n const scoreChoice = await select({\n message: \"Minimum mutation score required:\",\n choices: [\n { name: \"60% - Minimal coverage\", value: 60 },\n { name: \"70% - Standard coverage\", value: 70 },\n { name: \"80% - Good coverage (recommended)\", value: 80 },\n { name: \"90% - High coverage\", value: 90 },\n ],\n default: requiredScore,\n });\n requiredScore = scoreChoice;\n }\n\n return {\n enabled,\n verbosity,\n bypassPatterns,\n mutationTesting: {\n enabled: mutationEnabled,\n requiredScore,\n },\n };\n}\n\n/**\n * Convert TDD answers to config format\n */\nexport function tddAnswersToConfig(answers: TddAnswers): TddConfig {\n return {\n enabled: answers.enabled,\n verbosity: answers.verbosity,\n bypassPatterns: answers.bypassPatterns,\n mutationTesting: {\n enabled: answers.mutationTesting.enabled,\n requiredScore: answers.mutationTesting.requiredScore,\n },\n };\n}\n","/**\n * Event Modeling questions\n *\n * Gather Event Modeling workflow preferences.\n */\n\nimport { confirm, input } from \"@inquirer/prompts\";\nimport type { EventModelingConfig } from \"../../shared/types.js\";\n\n/**\n * Default values for Event Modeling questions\n */\nexport interface EventModelingDefaults {\n enabled?: boolean;\n outputPath?: string;\n}\n\n/**\n * Event Modeling answers from the installer\n */\nexport interface EventModelingAnswers {\n enabled: boolean;\n outputPath: string;\n}\n\n/**\n * Default output path for event model files\n */\nconst DEFAULT_OUTPUT_PATH = \"docs/event-model\";\n\n/**\n * Gather Event Modeling configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherEventModeling(\n defaults?: EventModelingDefaults\n): Promise<EventModelingAnswers> {\n const enabled = await confirm({\n message: \"Enable Event Modeling workflow for event-sourced systems?\",\n default: defaults?.enabled ?? false,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n outputPath: defaults?.outputPath ?? DEFAULT_OUTPUT_PATH,\n };\n }\n\n const outputPath = await input({\n message: \"Output path for event model files:\",\n default: defaults?.outputPath ?? DEFAULT_OUTPUT_PATH,\n validate: (value) => {\n if (!value.trim()) {\n return \"Output path is required\";\n }\n // Basic path validation - no absolute paths or special characters\n if (value.startsWith(\"/\") || value.startsWith(\"~\")) {\n return \"Use a relative path from the project root\";\n }\n return true;\n },\n });\n\n return {\n enabled,\n outputPath,\n };\n}\n\n/**\n * Convert Event Modeling answers to config format\n */\nexport function eventModelingAnswersToConfig(answers: EventModelingAnswers): EventModelingConfig {\n return {\n enabled: answers.enabled,\n outputPath: answers.outputPath,\n };\n}\n","/**\n * Git Workflow questions\n *\n * Gather Git workflow preferences.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { GitConfig, GitWorkflow } from \"../../shared/types.js\";\n\n/**\n * Default values for Git Workflow questions\n */\nexport interface GitWorkflowDefaults {\n workflow?: GitWorkflow;\n requireClean?: boolean;\n worktrees?: boolean;\n}\n\n/**\n * Git Workflow answers from the installer\n */\nexport interface GitWorkflowAnswers {\n workflow: GitWorkflow;\n requireClean: boolean;\n worktrees: boolean;\n}\n\n/**\n * Gather Git workflow configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherGitWorkflow(\n defaults?: GitWorkflowDefaults\n): Promise<GitWorkflowAnswers> {\n const workflow = await select<GitWorkflow>({\n message: \"Git workflow style:\",\n choices: [\n {\n name: \"Standard - Traditional branch-based workflow\",\n value: \"standard\",\n },\n {\n name: \"git-spice - Stacked PRs with git-spice CLI\",\n value: \"git-spice\",\n },\n ],\n default: defaults?.workflow ?? \"standard\",\n });\n\n const requireClean = await confirm({\n message: \"Require clean working directory before git operations?\",\n default: defaults?.requireClean ?? true,\n });\n\n const worktrees = await confirm({\n message: \"Enable git worktrees for parallel work on multiple issues?\",\n default: defaults?.worktrees ?? false,\n });\n\n return {\n workflow,\n requireClean,\n worktrees,\n };\n}\n\n/**\n * Convert Git Workflow answers to config format\n */\nexport function gitWorkflowAnswersToConfig(answers: GitWorkflowAnswers): GitConfig {\n return {\n workflow: answers.workflow,\n requireClean: answers.requireClean,\n worktrees: answers.worktrees,\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 return {\n hasClaude: claude?.enabled === true,\n claudeTier: (claude?.tier as SubscriptionAnswers[\"claudeTier\"]) || \"none\",\n hasOpenAI: openai?.enabled === true,\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 sisyphus: (models.sisyphus 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","export * from \"./types.js\";\nexport * from \"./migrations.js\";\nexport * from \"./runner.js\";\n","export interface Migration {\n fromVersion: string;\n toVersion: string;\n description: string;\n migrateSdlc?: (config: Record<string, unknown>) => Record<string, unknown>;\n migrateOmo?: (config: Record<string, unknown>) => Record<string, unknown>;\n migrateOpencode?: (config: Record<string, unknown>) => Record<string, unknown>;\n}\n\nexport interface MigrationResult {\n fromVersion: string;\n toVersion: string;\n migrationsApplied: string[];\n sdlcConfig: Record<string, unknown>;\n omoConfig: Record<string, unknown>;\n opencodeConfig: Record<string, unknown>;\n hasBreakingChanges: boolean;\n breakingChangeWarnings: string[];\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\",\n migrateSdlc: (config) => config,\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 * Supports both v0.3.0+ (new) and legacy (bmad) structures.\n */\nexport interface PresetConfig {\n $schema?: string;\n version: 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 sisyphus: 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 // 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 * Valid preset names\n */\nexport const PRESET_NAMES = [\n \"minimal\",\n \"standard\",\n \"strict-tdd\",\n \"event-modeling\",\n \"enterprise\",\n \"solo-quick\",\n \"copilot-only\",\n] 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 * 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 presets with their descriptions\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 sisyphus: preset.models.sisyphus,\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(` Sisyphus: ${preset.models.sisyphus}`);\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 * 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(\"Sisyphus:\")} ${models.sisyphus || \"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 * 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 * 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 bridge commands\n const commandsSpinner = ora(\"Removing bridge commands...\").start();\n try {\n const removedCommands = await fileManager.removeCommands();\n if (removedCommands.length > 0) {\n commandsSpinner.succeed(`Removed ${removedCommands.length} bridge command(s)`);\n } else {\n commandsSpinner.info(\"No bridge commands found\");\n }\n } catch (err) {\n commandsSpinner.fail(\"Failed to remove bridge 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\", 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\",\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(` ✓ Sisyphus: ${existingModels.sisyphus}`));\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 sisyphus: \"\",\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\");\n if (sdlcUpdate) {\n const sdlcSpinner = ora(\"Updating opencode-sdlc...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc@${channel}`]);\n sdlcSpinner.succeed(`opencode-sdlc updated to ${sdlcUpdate.latest}`);\n } catch (err) {\n sdlcSpinner.fail(\"Failed to update opencode-sdlc\");\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\"));\n if (sdlcPackage) {\n const sdlcSpinner = ora(\"Installing opencode-sdlc...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc@${channel}`]);\n sdlcSpinner.succeed(\"opencode-sdlc installed\");\n } catch (err) {\n sdlcSpinner.fail(\"Failed to install opencode-sdlc\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n const pluginUpdates = updatesAvailable.filter((u) => u.name !== \"opencode-sdlc\");\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\"));\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 const commandsSpinner = ora(\"Updating bridge commands...\").start();\n try {\n const copiedCommands = await fileManager.copyCommands();\n commandsSpinner.succeed(`Updated ${copiedCommands.length} bridge commands`);\n } catch (_err) {\n commandsSpinner.warn(\"Could not update bridge commands\");\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"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../src/cli/utils/debug-logger.ts","../../src/cli/questions/models.ts","../../src/cli/index.ts","../../src/shared/constants.ts","../../src/cli/commands/doctor.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/prerequisites.ts","../../src/cli/utils/validators.ts","../../src/shared/schemas.ts","../../src/cli/commands/info.ts","../../src/cli/commands/install.ts","../../src/cli/generators/config-generator.ts","../../src/cli/generators/omo-config.ts","../../src/plugin/utils/model-params.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/questions/features.ts","../../src/cli/questions/index.ts","../../src/cli/questions/subscriptions.ts","../../src/cli/questions/methodology.ts","../../src/cli/questions/advanced.ts","../../src/cli/questions/github.ts","../../src/cli/questions/tdd.ts","../../src/cli/questions/event-modeling.ts","../../src/cli/questions/git-workflow.ts","../../src/cli/questions/modes.ts","../../src/cli/questions/memory.ts","../../src/cli/utils/config-loader.ts","../../src/cli/utils/config-merger.ts","../../src/cli/utils/migrations/index.ts","../../src/cli/utils/migrations/types.ts","../../src/cli/utils/migrations/migrations.ts","../../src/cli/utils/migrations/runner.ts","../../src/cli/utils/preset-loader.ts","../../src/cli/commands/providers.ts","../../src/cli/utils/auth-detector.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/upgrade.ts"],"names":["select","fileURLToPath","dirname","join","existsSync","path","readFileSync","chalk","execAsync","promisify","exec","info","ora","confirm","checkbox","input","mkdirSync","copyFileSync","homedir","providers","semver"],"mappings":"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","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * Debug logger for CLI installer\n *\n * Enabled when ATHENA_DEBUG environment variable is set.\n * Outputs to stderr to avoid interfering with CLI output.\n */\n\nconst isDebugEnabled = (): boolean => {\n return process.env.ATHENA_DEBUG === \"1\" || process.env.ATHENA_DEBUG === \"true\";\n};\n\nexport function debugLog(context: string, data: unknown): void {\n if (!isDebugEnabled()) return;\n\n const timestamp = new Date().toISOString();\n console.error(`[ATHENA_DEBUG ${timestamp}] ${context}:`, JSON.stringify(data, null, 2));\n}\n\nexport function debugSection(title: string): void {\n if (!isDebugEnabled()) return;\n\n console.error(`\\n${\"=\".repeat(60)}`);\n console.error(` ${title}`);\n console.error(`${\"=\".repeat(60)}\\n`);\n}\n","/**\n * Model selection questions\n *\n * Allow users to select specific models for each agent role.\n */\n\nimport { select } from \"@inquirer/prompts\";\nimport type {\n CustomModelDefinition,\n ModelAnswers,\n ModelChoice,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\nimport { debugLog } from \"../utils/debug-logger.js\";\n\n/**\n * Default values for model questions\n */\nexport interface ModelDefaults {\n marvin?: string;\n oracle?: string;\n librarian?: string;\n frontend?: string;\n documentWriter?: string;\n multimodalLooker?: string;\n}\n\n/**\n * Available models by provider\n */\nconst AVAILABLE_MODELS: ModelChoice[] = [\n // Anthropic models\n {\n id: \"anthropic/claude-sonnet-4-5\",\n name: \"Claude Sonnet 4.5\",\n provider: \"anthropic\",\n description: \"Latest Sonnet - balanced performance and speed\",\n },\n {\n id: \"anthropic/claude-opus-4-5\",\n name: \"Claude Opus 4.5\",\n provider: \"anthropic\",\n description: \"Most capable Claude model\",\n },\n {\n id: \"anthropic/claude-sonnet-4-5-thinking\",\n name: \"Claude Sonnet 4.5 (Thinking)\",\n provider: \"anthropic\",\n description: \"Sonnet with extended thinking enabled\",\n },\n {\n id: \"anthropic/claude-opus-4-5-thinking\",\n name: \"Claude Opus 4.5 (Thinking)\",\n provider: \"anthropic\",\n description: \"Opus with extended thinking enabled\",\n },\n\n // OpenAI models\n {\n id: \"openai/gpt-4o\",\n name: \"GPT-4o\",\n provider: \"openai\",\n description: \"Fast multimodal model\",\n },\n {\n id: \"openai/gpt-5.1\",\n name: \"GPT-5.1\",\n provider: \"openai\",\n description: \"GPT-5.1 base model\",\n },\n {\n id: \"openai/gpt-5.1-high\",\n name: \"GPT-5.1 High\",\n provider: \"openai\",\n description: \"GPT-5.1 with high reasoning effort\",\n },\n {\n id: \"openai/gpt-5.2\",\n name: \"GPT-5.2\",\n provider: \"openai\",\n description: \"Latest GPT model\",\n },\n {\n id: \"openai/gpt-5.2-codex\",\n name: \"GPT-5.2 Codex\",\n provider: \"openai\",\n description: \"Code-optimized GPT-5.2\",\n },\n\n // Google models\n {\n id: \"google/gemini-2.5-pro\",\n name: \"Gemini 2.5 Pro\",\n provider: \"google\",\n description: \"Gemini 2.5 Pro model\",\n },\n {\n id: \"google/gemini-2.5-flash\",\n name: \"Gemini 2.5 Flash\",\n provider: \"google\",\n description: \"Fast Gemini model\",\n },\n {\n id: \"google/gemini-3-flash-preview\",\n name: \"Gemini 3 Flash (Preview)\",\n provider: \"google\",\n description: \"Gemini 3 Flash preview - fast and efficient\",\n },\n {\n id: \"google/gemini-3-pro-preview\",\n name: \"Gemini 3 Pro (Preview)\",\n provider: \"google\",\n description: \"Latest Gemini 3 Pro preview\",\n },\n\n // GitHub Copilot models (routed through Copilot - smaller context, no thinking)\n // Free tier models\n {\n id: \"github-copilot/gpt-4.1\",\n name: \"GPT-4.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-4.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5-mini\",\n name: \"GPT-5 mini (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast GPT-5 variant through GitHub Copilot\",\n },\n {\n id: \"github-copilot/claude-haiku-4.5\",\n name: \"Claude Haiku 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast Claude model through GitHub Copilot\",\n },\n // Pro/Business/Enterprise models\n {\n id: \"github-copilot/claude-sonnet-4\",\n name: \"Claude Sonnet 4 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Claude Sonnet 4 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/claude-sonnet-4.5\",\n name: \"Claude Sonnet 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Latest Sonnet through GitHub Copilot - no thinking mode\",\n },\n {\n id: \"github-copilot/gpt-5\",\n name: \"GPT-5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-5 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.1\",\n name: \"GPT-5.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"GPT-5.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.1-codex\",\n name: \"GPT-5.1-Codex (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Code-optimized GPT-5.1 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.2\",\n name: \"GPT-5.2 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Latest GPT through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gpt-5.2-codex\",\n name: \"GPT-5.2 Codex (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Code-optimized GPT-5.2 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-2.5-pro\",\n name: \"Gemini 2.5 Pro (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Gemini 2.5 Pro through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-3-flash\",\n name: \"Gemini 3 Flash (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Fast Gemini 3 through GitHub Copilot\",\n },\n {\n id: \"github-copilot/gemini-3-pro\",\n name: \"Gemini 3 Pro (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Gemini 3 Pro through GitHub Copilot\",\n },\n // Pro+/Enterprise only (Opus models)\n {\n id: \"github-copilot/claude-opus-4.1\",\n name: \"Claude Opus 4.1 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Claude Opus 4.1 through GitHub Copilot - Pro+/Enterprise only\",\n },\n {\n id: \"github-copilot/claude-opus-4.5\",\n name: \"Claude Opus 4.5 (via Copilot)\",\n provider: \"github-copilot\",\n description: \"Most capable Claude through GitHub Copilot - Pro+/Enterprise only\",\n },\n];\n\ntype CopilotPlan = SubscriptionAnswers[\"copilotPlan\"];\n\n/**\n * Convert a CustomModelDefinition to a ModelChoice\n */\nfunction customModelToChoice(custom: CustomModelDefinition): ModelChoice {\n return {\n id: custom.id,\n name: custom.name,\n provider: custom.provider,\n description: custom.description,\n };\n}\n\n/**\n * Merge custom models with built-in models\n * Custom models with the same ID override built-in models\n */\nexport function mergeCustomModels(\n builtInModels: ModelChoice[],\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n if (!customModels || customModels.length === 0) {\n return builtInModels;\n }\n\n const modelMap = new Map<string, ModelChoice>();\n for (const model of builtInModels) {\n modelMap.set(model.id, model);\n }\n\n for (const custom of customModels) {\n modelMap.set(custom.id, customModelToChoice(custom));\n }\n\n return Array.from(modelMap.values());\n}\n\nconst COPILOT_FREE_MODELS = [\n \"github-copilot/gpt-4.1\",\n \"github-copilot/gpt-5-mini\",\n \"github-copilot/claude-haiku-4.5\",\n];\n\nconst COPILOT_OPUS_MODELS = [\"github-copilot/claude-opus-4.1\", \"github-copilot/claude-opus-4.5\"];\n\nfunction isModelAvailableForCopilotPlan(modelId: string, plan: CopilotPlan): boolean {\n if (plan === \"none\") return false;\n\n if (COPILOT_OPUS_MODELS.includes(modelId)) {\n return plan === \"pro-plus\" || plan === \"enterprise\";\n }\n\n if (plan === \"free\") {\n return COPILOT_FREE_MODELS.includes(modelId);\n }\n\n return true;\n}\n\n/**\n * Filter models based on enabled providers\n */\nexport function getAvailableModels(\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n const allModels = mergeCustomModels(AVAILABLE_MODELS, customModels);\n debugLog(\"models.allModels.count\", allModels.length);\n debugLog(\"models.subscriptions\", subscriptions);\n\n const filtered = allModels.filter((model) => {\n if (model.provider === \"anthropic\" && !subscriptions.hasClaude) return false;\n if (model.provider === \"openai\" && !subscriptions.hasOpenAI) return false;\n if (model.provider === \"google\" && !subscriptions.hasGoogle) return false;\n if (model.provider === \"github-copilot\") {\n if (!subscriptions.hasGitHubCopilot) return false;\n if (!isModelAvailableForCopilotPlan(model.id, subscriptions.copilotPlan)) return false;\n if (\n subscriptions.copilotEnabledModels &&\n !subscriptions.copilotEnabledModels.includes(model.id)\n ) {\n return false;\n }\n }\n return true;\n });\n\n debugLog(\"models.filtered.count\", filtered.length);\n debugLog(\"models.filtered.providers\", [...new Set(filtered.map((m) => m.provider))]);\n\n return filtered;\n}\n\n/**\n * Check if a model is available given the subscriptions\n */\nfunction isModelAvailable(modelId: string, availableModels: ModelChoice[]): boolean {\n return availableModels.some((m) => m.id === modelId);\n}\n\n/**\n * Get a fallback model when preset model is not available\n *\n * @param presetModel - The model from the preset\n * @param role - The agent role\n * @param subscriptions - The user's subscriptions\n * @param availableModels - List of available models\n * @returns A valid model ID, either the preset one or a fallback\n */\nfunction getValidModelOrFallback(\n presetModel: string | undefined,\n role: string,\n subscriptions: SubscriptionAnswers,\n availableModels: ModelChoice[]\n): string | undefined {\n // If preset model is available, use it\n if (presetModel && isModelAvailable(presetModel, availableModels)) {\n return presetModel;\n }\n\n // Otherwise use the role-based suggestion\n return getSuggestedModel(role, subscriptions, availableModels);\n}\n\n/**\n * Create choices for a select prompt\n */\nfunction createModelChoices(models: ModelChoice[]) {\n return models.map((model) => ({\n name: `${model.name} - ${model.description}`,\n value: model.id,\n }));\n}\n\n/**\n * Get a suggested default model for a role based on subscriptions\n * Prioritizes direct providers, with Copilot models as fallback\n */\nfunction getSuggestedModel(\n role: string,\n _subscriptions: SubscriptionAnswers,\n availableModels: ModelChoice[]\n): string | undefined {\n const suggestions: Record<string, string[]> = {\n marvin: [\n \"openai/gpt-5.2-codex\",\n \"anthropic/claude-sonnet-4-5-thinking\",\n \"anthropic/claude-opus-4-5-thinking\",\n \"openai/gpt-5.1-high\",\n \"google/gemini-3-pro-preview\",\n \"github-copilot/gpt-5.2-codex\",\n \"github-copilot/claude-sonnet-4.5\",\n \"github-copilot/gpt-5.1\",\n ],\n oracle: [\n \"openai/gpt-5.2\",\n \"openai/gpt-5.1-high\",\n \"anthropic/claude-opus-4-5-thinking\",\n \"anthropic/claude-sonnet-4-5-thinking\",\n \"google/gemini-3-pro-preview\",\n \"github-copilot/gpt-5.2\",\n \"github-copilot/gpt-5.1\",\n \"github-copilot/claude-opus-4.5\",\n ],\n librarian: [\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-3-flash-preview\",\n \"github-copilot/claude-haiku-4.5\",\n \"github-copilot/gpt-5-mini\",\n ],\n frontend: [\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-5.2-codex\",\n \"google/gemini-3-pro-preview\",\n \"openai/gpt-4o\",\n \"github-copilot/claude-sonnet-4.5\",\n \"github-copilot/gpt-5.2-codex\",\n ],\n documentWriter: [\n \"google/gemini-3-pro-preview\",\n \"google/gemini-2.5-pro\",\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"github-copilot/gemini-3-pro\",\n \"github-copilot/claude-sonnet-4.5\",\n ],\n multimodalLooker: [\n \"google/gemini-3-flash-preview\",\n \"google/gemini-2.5-flash\",\n \"openai/gpt-4o\",\n \"anthropic/claude-sonnet-4-5\",\n \"github-copilot/gemini-3-flash-preview\",\n \"github-copilot/gpt-5-mini\",\n ],\n explore: [\n \"google/gemini-3-flash-preview\",\n \"google/gemini-2.5-flash\",\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-4o\",\n \"github-copilot/gemini-3-flash-preview\",\n \"github-copilot/claude-haiku-4.5\",\n ],\n };\n\n const roleDefaults = suggestions[role] || [];\n const availableIds = availableModels.map((m) => m.id);\n\n for (const modelId of roleDefaults) {\n if (availableIds.includes(modelId)) {\n return modelId;\n }\n }\n\n return availableModels[0]?.id;\n}\n\n/**\n * Gather model selections from user\n *\n * @param subscriptions - The user's provider subscriptions\n * @param defaults - Optional default values from a preset\n * @param customModels - Optional custom model definitions to include\n */\nexport async function gatherModels(\n subscriptions: SubscriptionAnswers,\n defaults?: ModelDefaults,\n customModels?: CustomModelDefinition[]\n): Promise<ModelAnswers> {\n const availableModels = getAvailableModels(subscriptions, customModels);\n\n if (availableModels.length === 0) {\n throw new Error(\n \"No models available. Please enable at least one provider (Claude, OpenAI, Google, or GitHub Copilot).\"\n );\n }\n\n const choices = createModelChoices(availableModels);\n\n // Get valid defaults (either from preset if available, or fallback)\n const marvinDefault = getValidModelOrFallback(\n defaults?.marvin,\n \"marvin\",\n subscriptions,\n availableModels\n );\n const oracleDefault = getValidModelOrFallback(\n defaults?.oracle,\n \"oracle\",\n subscriptions,\n availableModels\n );\n const librarianDefault = getValidModelOrFallback(\n defaults?.librarian,\n \"librarian\",\n subscriptions,\n availableModels\n );\n\n // Required agents\n const marvin = await select({\n message: \"Model for Marvin (main orchestrator - implements stories)?\",\n choices,\n default: marvinDefault,\n });\n\n const oracle = await select({\n message: \"Model for Oracle (debugging and complex reasoning)?\",\n choices,\n default: oracleDefault,\n });\n\n const librarian = await select({\n message: \"Model for Librarian (research and documentation lookup)?\",\n choices,\n default: librarianDefault,\n });\n\n // Optional agents - use defaults with fallback\n const frontend = getValidModelOrFallback(\n defaults?.frontend,\n \"frontend\",\n subscriptions,\n availableModels\n );\n const documentWriter = getValidModelOrFallback(\n defaults?.documentWriter,\n \"documentWriter\",\n subscriptions,\n availableModels\n );\n const multimodalLooker = getValidModelOrFallback(\n defaults?.multimodalLooker,\n \"multimodalLooker\",\n subscriptions,\n availableModels\n );\n\n return {\n marvin,\n oracle,\n librarian,\n frontend,\n documentWriter,\n multimodalLooker,\n };\n}\n\n/**\n * Get the list of available models (for display purposes)\n */\nexport function getModelList(\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): ModelChoice[] {\n return getAvailableModels(subscriptions, customModels);\n}\n\n/**\n * Validate that preset models are compatible with given subscriptions.\n * Returns warnings for any models that won't be available.\n */\nexport function validatePresetModels(\n presetModels: ModelDefaults,\n subscriptions: SubscriptionAnswers,\n customModels?: CustomModelDefinition[]\n): string[] {\n const warnings: string[] = [];\n const availableModels = getAvailableModels(subscriptions, customModels);\n\n const checkModel = (model: string | undefined, role: string) => {\n if (model && !isModelAvailable(model, availableModels)) {\n warnings.push(\n `Preset model for ${role} (${model}) is not available with your subscriptions. A fallback will be used.`\n );\n }\n };\n\n checkModel(presetModels.marvin, \"Marvin\");\n checkModel(presetModels.oracle, \"Oracle\");\n checkModel(presetModels.librarian, \"Librarian\");\n checkModel(presetModels.frontend, \"Frontend\");\n checkModel(presetModels.documentWriter, \"Document Writer\");\n checkModel(presetModels.multimodalLooker, \"Multimodal Looker\");\n\n return warnings;\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 { listPresets } 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(\n \"-p, --preset <preset>\",\n \"Use a preset configuration (minimal, standard, strict-tdd, event-modeling, enterprise, solo-quick, copilot-only)\",\n \"standard\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\", 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-presets\", \"List available presets and exit\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration (ignore existing config)\", false)\n .action(async (options) => {\n if (options.listPresets) {\n displayPresets();\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 presets in a formatted way\n */\nfunction displayPresets(): void {\n console.log(chalk.bold.cyan(\"\\nAvailable Presets:\\n\"));\n\n const presets = listPresets();\n\n for (const preset of presets) {\n console.log(chalk.bold(` ${preset.name}`));\n console.log(chalk.gray(` ${preset.description}`));\n console.log();\n }\n\n console.log(chalk.gray(\"Usage: opencode-sdlc install --preset <name>\"));\n console.log(chalk.gray(\" opencode-sdlc install --preset standard --yes\\n\"));\n}\n\nprogram.parse();\n","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 * 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 * 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\",\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","/**\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","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 * 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","/**\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 { InstallAnswers, InstallOptions, SubscriptionAnswers } from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport {\n gatherAdvanced,\n gatherEventModeling,\n gatherFeatures,\n gatherGitHub,\n gatherGitWorkflow,\n gatherMemory,\n gatherMethodology,\n gatherModels,\n gatherModes,\n gatherSubscriptions,\n gatherTdd,\n validatePresetModels,\n} from \"../questions/index.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 PRESET_NAMES,\n type PresetConfig,\n type PresetDefaults,\n formatPresetSummary,\n isValidPresetName,\n listPresets,\n loadPreset,\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 let finalSubscriptions = existingSubscriptions;\n\n if (!options.yes) {\n const changeSubscriptions = await confirm({\n message: \"Do you want to modify your LLM subscriptions?\",\n default: false,\n });\n\n if (changeSubscriptions) {\n logger.section(\"LLM Subscriptions\");\n finalSubscriptions = await gatherSubscriptions();\n }\n }\n\n if (!finalSubscriptions) {\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: 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/Preset selection (FIRST)\n let preset: PresetConfig | null = null;\n let presetDefaults: PresetDefaults | null = null;\n let presetName: string | null = null;\n\n // Validate and load preset from --preset flag\n if (options.preset && options.preset !== \"none\") {\n if (!isValidPresetName(options.preset)) {\n logger.error(`Invalid preset: \"${options.preset}\"`);\n logger.info(`Valid presets: ${PRESET_NAMES.join(\", \")}`);\n process.exit(1);\n }\n\n try {\n preset = loadPreset(options.preset);\n presetDefaults = presetToDefaults(preset);\n presetName = options.preset;\n logger.success(`Loaded preset: ${options.preset}`);\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }\n\n // If no preset specified via flag, ask interactively (unless --yes)\n if (!preset && !options.yes) {\n logger.section(\"Configuration Profile\");\n const selectedPreset = await askForPreset();\n if (selectedPreset) {\n preset = selectedPreset.preset;\n presetDefaults = presetToDefaults(preset);\n presetName = selectedPreset.name;\n }\n }\n\n // Step 3: If preset loaded, show summary and ask if they want to customize BEFORE subscriptions\n let shouldCustomize = true;\n\n if (preset && presetDefaults && presetName && !options.yes) {\n // Show preset summary\n console.log(chalk.bold(\"\\nProfile Configuration:\\n\"));\n console.log(chalk.gray(formatPresetSummary(preset, presetName)));\n console.log();\n\n // Ask if they want to customize FIRST\n shouldCustomize = await confirm({\n message: \"Would you like to customize these settings?\",\n default: false,\n });\n } else if (options.yes && preset) {\n shouldCustomize = false;\n logger.info(\"Using preset defaults (--yes flag)\");\n }\n\n // Step 4: Only gather subscription information if customizing or no preset\n let subscriptions: SubscriptionAnswers;\n\n if (shouldCustomize || !preset) {\n logger.section(\"LLM Subscriptions\");\n subscriptions = await gatherSubscriptions();\n\n if (!options.yes) {\n logger.section(\"Confirm Provider Selection\");\n\n console.log(chalk.bold(\"You selected:\\n\"));\n console.log(\n ` Claude: ${subscriptions.hasClaude ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasClaude) {\n console.log(\n ` Auth Method: ${subscriptions.claudeAuth === \"api\" ? \"API Key\" : \"Subscription\"}`\n );\n if (subscriptions.claudeAuth === \"subscription\") {\n console.log(` Tier: ${subscriptions.claudeTier}`);\n }\n }\n console.log(\n ` OpenAI: ${subscriptions.hasOpenAI ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasOpenAI) {\n console.log(\n ` Auth Method: ${subscriptions.openaiAuth === \"api\" ? \"API Key\" : \"Subscription\"}`\n );\n }\n console.log(\n ` Google: ${subscriptions.hasGoogle ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasGoogle) {\n console.log(` Auth Method: ${subscriptions.googleAuth}`);\n }\n console.log(\n ` GitHub Copilot: ${subscriptions.hasGitHubCopilot ? chalk.green(\"✓ Yes\") : chalk.gray(\"✗ No\")}`\n );\n if (subscriptions.hasGitHubCopilot) {\n console.log(` Plan: ${subscriptions.copilotPlan}`);\n }\n console.log();\n\n const confirmed = await confirm({\n message: \"Is this correct?\",\n default: true,\n });\n\n if (!confirmed) {\n logger.info(\"Please restart installation with correct provider selections.\");\n process.exit(0);\n }\n }\n\n // Check if preset models are compatible with subscriptions (only if customizing)\n if (preset && presetDefaults) {\n const modelWarnings = validatePresetModels(presetDefaults.models, subscriptions);\n if (modelWarnings.length > 0) {\n console.log(chalk.yellow(\"\\nPreset model compatibility warnings:\"));\n for (const warning of modelWarnings) {\n console.log(chalk.yellow(` - ${warning}`));\n }\n console.log();\n }\n }\n } else {\n // Use preset subscription defaults for model validation\n subscriptions = {\n hasClaude: preset.subscriptions.claude.enabled,\n claudeAuth: \"subscription\",\n claudeTier: preset.subscriptions.claude.tier as SubscriptionAnswers[\"claudeTier\"],\n hasOpenAI: preset.subscriptions.openai.enabled,\n openaiAuth: \"subscription\",\n hasGoogle: preset.subscriptions.google.enabled,\n googleAuth: preset.subscriptions.google.authMethod as SubscriptionAnswers[\"googleAuth\"],\n hasGitHubCopilot: preset.subscriptions.githubCopilot?.enabled ?? false,\n copilotPlan:\n (preset.subscriptions.githubCopilot?.plan as SubscriptionAnswers[\"copilotPlan\"]) ?? \"none\",\n };\n }\n\n // Step 5: Gather configuration (with preset defaults if available)\n let models: InstallAnswers[\"models\"];\n let methodology: InstallAnswers[\"methodology\"];\n let features: InstallAnswers[\"features\"];\n let advanced: InstallAnswers[\"advanced\"];\n let github: InstallAnswers[\"github\"];\n let tdd: InstallAnswers[\"tdd\"];\n let eventModeling: InstallAnswers[\"eventModeling\"];\n let gitWorkflow: InstallAnswers[\"gitWorkflow\"];\n // v1.0.0 additions\n let modes: InstallAnswers[\"modes\"];\n let memory: InstallAnswers[\"memory\"];\n\n if (!shouldCustomize && presetDefaults) {\n // Use preset defaults directly (validated against subscriptions)\n logger.section(\"Applying Preset Configuration\");\n\n // For models, we still need to validate and potentially substitute\n const availableModels = await import(\"../questions/models.js\").then((m) =>\n m.getAvailableModels(subscriptions)\n );\n\n // Fail early if no models are available\n if (availableModels.length === 0) {\n logger.error(\n \"No models available. Please enable at least one provider (Claude, OpenAI, or Google).\"\n );\n process.exit(1);\n }\n\n models = {\n marvin: getValidModelOrFirst(presetDefaults.models.marvin, availableModels),\n oracle: getValidModelOrFirst(presetDefaults.models.oracle, availableModels),\n librarian: getValidModelOrFirst(presetDefaults.models.librarian, availableModels),\n frontend: getValidModelOrFirst(presetDefaults.models.frontend, availableModels),\n documentWriter: getValidModelOrFirst(presetDefaults.models.documentWriter, availableModels),\n multimodalLooker: getValidModelOrFirst(\n presetDefaults.models.multimodalLooker,\n availableModels\n ),\n };\n\n methodology = presetDefaults.methodology;\n features = presetDefaults.features;\n advanced = presetDefaults.advanced;\n\n // For presets, still ask for GitHub Integration (project-specific)\n logger.section(\"GitHub Integration\");\n github = await gatherGitHub();\n\n // v1.0.0: Ask about modes (even for presets, as it's important)\n logger.section(\"Marvin Modes\");\n modes = await gatherModes();\n\n // v1.0.0: Ask about memory backend\n logger.section(\"Memory Configuration\");\n memory = await gatherMemory();\n\n // Use defaults from preset for TDD, Event Modeling, Git\n if (preset?.tdd) {\n tdd = {\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 }\n if (preset?.eventModeling) {\n eventModeling = {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n };\n }\n if (preset?.git) {\n gitWorkflow = {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n };\n }\n\n logger.success(\"Preset configuration applied\");\n } else {\n // Interactive configuration (with preset defaults if available)\n\n // v1.0.0: Marvin Modes selection (first, as it affects other options)\n logger.section(\"Marvin Modes\");\n modes = await gatherModes();\n\n // v1.0.0: Memory backend selection\n logger.section(\"Memory Configuration\");\n memory = await gatherMemory();\n\n // Model selection\n logger.section(\"Model Selection\");\n models = await gatherModels(subscriptions, presetDefaults?.models);\n\n // Methodology preferences (legacy, but kept for backward compatibility)\n logger.section(\"Methodology Preferences\");\n methodology = await gatherMethodology(presetDefaults?.methodology);\n\n // GitHub Integration\n logger.section(\"GitHub Integration\");\n github = await gatherGitHub();\n\n // TDD Configuration\n logger.section(\"TDD Configuration\");\n tdd = await gatherTdd(\n preset?.tdd\n ? {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n }\n : undefined\n );\n\n // Event Modeling Configuration\n logger.section(\"Event Modeling\");\n eventModeling = await gatherEventModeling(\n preset?.eventModeling\n ? {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n }\n : undefined\n );\n\n // Git Workflow Configuration\n logger.section(\"Git Workflow\");\n gitWorkflow = await gatherGitWorkflow(\n preset?.git\n ? {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n }\n : undefined\n );\n\n // Feature selection\n logger.section(\"Feature Selection\");\n features = await gatherFeatures(presetDefaults?.features);\n\n // Advanced options (optional, unless --advanced flag)\n if (options.advanced) {\n logger.section(\"Advanced Configuration\");\n advanced = await gatherAdvanced(presetDefaults?.advanced);\n } else {\n advanced = presetDefaults?.advanced ?? {\n parallelIssueLimit: 0,\n experimental: [],\n };\n }\n }\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(subscriptions);\n}\n\n/**\n * Ask user if they want to start from a preset\n */\nasync function askForPreset(): Promise<{ preset: PresetConfig; name: string } | null> {\n const presets = listPresets();\n\n const choices = [\n ...presets.map((p) => ({\n name: `${p.name} - ${p.description}`,\n value: p.name,\n })),\n { name: \"No preset - Configure everything manually\", value: \"none\" },\n ];\n\n const selected = await select({\n message: \"Choose a configuration profile:\",\n choices,\n default: \"event-modeling\",\n });\n\n if (selected === \"none\") {\n return null;\n }\n\n try {\n const preset = loadPreset(selected);\n return { preset, name: selected };\n } catch (error) {\n logger.warn(`Failed to load preset: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Get a valid model ID or fall back to the first available model\n */\nfunction getValidModelOrFirst(\n modelId: string | undefined,\n availableModels: Array<{ id: string }>\n): string {\n if (modelId && availableModels.some((m) => m.id === modelId)) {\n return modelId;\n }\n return availableModels[0]?.id ?? \"\";\n}\n\n/**\n * Print next steps after installation\n */\nfunction printNextSteps(subscriptions: SubscriptionAnswers): void {\n const steps: string[] = [];\n\n if (subscriptions.hasClaude) {\n if (subscriptions.claudeAuth === \"api\") {\n steps.push(`Set ${chalk.cyan(\"ANTHROPIC_API_KEY\")} environment variable with your API key`);\n } else {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select Anthropic -> Claude Pro/Max`);\n }\n }\n\n if (subscriptions.hasOpenAI) {\n if (subscriptions.openaiAuth === \"api\") {\n steps.push(`Set ${chalk.cyan(\"OPENAI_API_KEY\")} environment variable with your API key`);\n } else {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select OpenAI -> ChatGPT Plus/Pro`);\n }\n }\n\n if (subscriptions.hasGoogle) {\n if (subscriptions.googleAuth === \"api\") {\n steps.push(`Set ${chalk.cyan(\"GOOGLE_API_KEY\")} environment variable with your API key`);\n } else {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select Google -> OAuth with Google`);\n }\n }\n\n if (subscriptions.hasGitHubCopilot) {\n steps.push(`Run: ${chalk.cyan(\"opencode auth login\")} -> Select GitHub Copilot`);\n }\n\n logger.successBanner(\"OPENCODE ATHENA INSTALLED SUCCESSFULLY!\");\n\n console.log(chalk.bold(\"Next Steps:\\n\"));\n steps.forEach((step, i) => {\n console.log(` ${i + 1}. ${step}`);\n });\n\n console.log(chalk.bold(\"\\nThen start OpenCode in your project directory.\\n\"));\n console.log(chalk.gray(\"The SDLC plugin will automatically:\"));\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(\"\\nUse Tab to switch between Marvin modes (Build, Discover, etc.)\"));\n\n console.log(chalk.gray(\"\\nDocumentation: https://github.com/jwilger/opencode-sdlc-plugin\"));\n console.log();\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 * 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","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 * 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\", \"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\", \"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 * 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 * 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 * Questions index\n *\n * Re-exports all question gathering functions and types.\n */\n\nexport { gatherSubscriptions } from \"./subscriptions.js\";\nexport {\n gatherModels,\n getModelList,\n getAvailableModels,\n validatePresetModels,\n type ModelDefaults,\n} from \"./models.js\";\nexport { gatherMethodology, type MethodologyDefaults } from \"./methodology.js\";\nexport {\n gatherFeatures,\n featuresToFlags,\n mcpsToFlags,\n type FeatureDefaults,\n} from \"./features.js\";\nexport { gatherAdvanced, type AdvancedDefaults } from \"./advanced.js\";\nexport {\n gatherGitHub,\n githubAnswersToConfig,\n type GitHubDefaults,\n type GitHubAnswers,\n} from \"./github.js\";\nexport {\n gatherTdd,\n tddAnswersToConfig,\n type TddDefaults,\n type TddAnswers,\n} from \"./tdd.js\";\nexport {\n gatherEventModeling,\n eventModelingAnswersToConfig,\n type EventModelingDefaults,\n type EventModelingAnswers,\n} from \"./event-modeling.js\";\nexport {\n gatherGitWorkflow,\n gitWorkflowAnswersToConfig,\n type GitWorkflowDefaults,\n type GitWorkflowAnswers,\n} from \"./git-workflow.js\";\n// v1.0.0 additions\nexport {\n gatherModes,\n modesAnswersToConfig,\n type ModesDefaults,\n type ModesAnswers,\n} from \"./modes.js\";\nexport {\n gatherMemory,\n memoryAnswersToConfig,\n type MemoryDefaults,\n type MemoryAnswers,\n} from \"./memory.js\";\n","/**\n * Subscription questions\n *\n * Gather information about which LLM providers the user has access to.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { SubscriptionAnswers } from \"../../shared/types.js\";\nimport { debugLog } from \"../utils/debug-logger.js\";\n\n/**\n * Gather subscription information from user\n */\nexport async function gatherSubscriptions(): Promise<SubscriptionAnswers> {\n const hasClaude = await confirm({\n message: \"Will you use Anthropic/Claude models?\",\n default: false,\n });\n debugLog(\"subscription.hasClaude\", hasClaude);\n\n let claudeAuth: SubscriptionAnswers[\"claudeAuth\"] = \"none\";\n let claudeTier: SubscriptionAnswers[\"claudeTier\"] = \"none\";\n if (hasClaude) {\n claudeAuth = await select({\n message: \"How will you authenticate with Anthropic?\",\n choices: [\n {\n name: \"API Key - Direct API access (pay per use)\",\n value: \"api\" as const,\n },\n {\n name: \"Claude Pro/Max Subscription - OAuth login\",\n value: \"subscription\" as const,\n },\n ],\n });\n debugLog(\"subscription.claudeAuth\", claudeAuth);\n\n if (claudeAuth === \"subscription\") {\n claudeTier = await select({\n message: \"Which Claude subscription tier?\",\n choices: [\n { name: \"Max 5x - 5x more usage than Pro\", value: \"max5x\" as const },\n { name: \"Max 20x - 20x more usage than Pro\", value: \"max20x\" as const },\n { name: \"Pro - Standard Pro subscription\", value: \"pro\" as const },\n ],\n });\n debugLog(\"subscription.claudeTier\", claudeTier);\n }\n }\n\n const hasOpenAI = await confirm({\n message: \"Will you use OpenAI models?\",\n default: false,\n });\n debugLog(\"subscription.hasOpenAI\", hasOpenAI);\n\n let openaiAuth: SubscriptionAnswers[\"openaiAuth\"] = \"none\";\n if (hasOpenAI) {\n openaiAuth = await select({\n message: \"How will you authenticate with OpenAI?\",\n choices: [\n {\n name: \"API Key - Direct API access (pay per use)\",\n value: \"api\" as const,\n },\n {\n name: \"ChatGPT Plus/Pro Subscription - OAuth login\",\n value: \"subscription\" as const,\n },\n ],\n });\n debugLog(\"subscription.openaiAuth\", openaiAuth);\n }\n\n const hasGoogle = await confirm({\n message: \"Will you use Google/Gemini models?\",\n default: false,\n });\n debugLog(\"subscription.hasGoogle\", hasGoogle);\n\n let googleAuth: SubscriptionAnswers[\"googleAuth\"] = \"none\";\n if (hasGoogle) {\n googleAuth = await select({\n message: \"Google authentication method?\",\n choices: [\n {\n name: \"Google Workspace (Antigravity OAuth) - Recommended for Workspace users\",\n value: \"antigravity\" as const,\n },\n {\n name: \"Personal Google Account\",\n value: \"personal\" as const,\n },\n {\n name: \"API Key - Direct API access\",\n value: \"api\" as const,\n },\n ],\n });\n debugLog(\"subscription.googleAuth\", googleAuth);\n }\n\n const hasGitHubCopilot = await confirm({\n message: \"Do you have GitHub Copilot access?\",\n default: false,\n });\n debugLog(\"subscription.hasGitHubCopilot\", hasGitHubCopilot);\n\n let copilotPlan: SubscriptionAnswers[\"copilotPlan\"] = \"none\";\n if (hasGitHubCopilot) {\n copilotPlan = await select({\n message: \"Which GitHub Copilot plan?\",\n choices: [\n { name: \"Enterprise - Full model access including Opus\", value: \"enterprise\" as const },\n { name: \"Pro+ - Includes Claude Opus models\", value: \"pro-plus\" as const },\n { name: \"Pro - Standard paid plan\", value: \"pro\" as const },\n { name: \"Business - Organization plan\", value: \"business\" as const },\n { name: \"Free - Limited model access\", value: \"free\" as const },\n ],\n });\n debugLog(\"subscription.copilotPlan\", copilotPlan);\n }\n\n const result = {\n hasClaude,\n claudeAuth,\n claudeTier,\n hasOpenAI,\n openaiAuth,\n hasGoogle,\n googleAuth,\n hasGitHubCopilot,\n copilotPlan,\n };\n\n debugLog(\"subscriptions.final\", result);\n return result;\n}\n","/**\n * Methodology questions\n *\n * Gather BMAD methodology preferences.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { MethodologyAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for methodology questions\n */\nexport interface MethodologyDefaults {\n defaultTrack?: \"quick-flow\" | \"enterprise\";\n autoStatusUpdate?: boolean;\n}\n\n/**\n * Gather methodology preferences from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherMethodology(\n defaults?: MethodologyDefaults\n): Promise<MethodologyAnswers> {\n const defaultTrack = await select({\n message: \"Default SDLC track for new projects?\",\n choices: [\n {\n name: \"Quick Flow - Fast implementation for small features and bug fixes\",\n value: \"quick-flow\" as const,\n },\n {\n name: \"Enterprise - Extended planning with compliance and scale considerations\",\n value: \"enterprise\" as const,\n },\n ],\n default: defaults?.defaultTrack ?? \"quick-flow\",\n });\n\n const autoStatusUpdate = await confirm({\n message: \"Automatically update GitHub issue status when issues complete?\",\n default: defaults?.autoStatusUpdate ?? true,\n });\n\n return {\n defaultTrack,\n autoStatusUpdate,\n };\n}\n","/**\n * Advanced questions\n *\n * Gather advanced configuration options.\n */\n\nimport { checkbox, confirm, select } from \"@inquirer/prompts\";\nimport type { AdvancedAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for advanced questions\n */\nexport interface AdvancedDefaults {\n parallelIssueLimit?: number;\n experimental?: string[];\n autoFallback?: boolean;\n}\n\n/**\n * Gather advanced options from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherAdvanced(defaults?: AdvancedDefaults): Promise<AdvancedAnswers> {\n const parallelIssueLimit = await select({\n message: \"Maximum parallel issues?\",\n choices: [\n { name: \"1 (sequential - one issue at a time)\", value: 1 },\n { name: \"2\", value: 2 },\n { name: \"3 (recommended)\", value: 3 },\n { name: \"5\", value: 5 },\n { name: \"Unlimited (0)\", value: 0 },\n ],\n default: defaults?.parallelIssueLimit ?? 0,\n });\n\n // Determine which experimental features are checked by default\n const experimentalDefaults = new Set(defaults?.experimental ?? []);\n\n const experimental = await checkbox({\n message: \"Enable experimental features?\",\n choices: [\n {\n name: \"Aggressive Truncation - More aggressive context management\",\n value: \"aggressive-truncation\",\n checked: experimentalDefaults.has(\"aggressive-truncation\"),\n },\n {\n name: \"Auto Resume - Automatically resume interrupted sessions\",\n value: \"auto-resume\",\n checked: experimentalDefaults.has(\"auto-resume\"),\n },\n ],\n });\n\n const autoFallback = await confirm({\n message: \"Enable automatic provider fallback on rate limits?\",\n default: defaults?.autoFallback ?? false,\n });\n\n return {\n parallelIssueLimit,\n experimental,\n autoFallback,\n };\n}\n","/**\n * GitHub Integration questions\n *\n * Gather GitHub repository and project board configuration.\n */\n\nimport { confirm, input, number } from \"@inquirer/prompts\";\nimport type { GitHubConfig, GitHubStatus } from \"../../shared/types.js\";\n\n/**\n * Default values for GitHub questions\n */\nexport interface GitHubDefaults {\n owner?: string;\n repo?: string;\n project?: number;\n statuses?: GitHubStatus[];\n}\n\n/**\n * GitHub answers from the installer\n */\nexport interface GitHubAnswers {\n enabled: boolean;\n owner: string;\n repo: string;\n project?: number;\n statuses: GitHubStatus[];\n}\n\n/**\n * Default GitHub project board statuses\n */\nconst DEFAULT_STATUSES: GitHubStatus[] = [\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"];\n\n/**\n * Gather GitHub integration configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherGitHub(defaults?: GitHubDefaults): Promise<GitHubAnswers> {\n const enabled = await confirm({\n message: \"Enable GitHub Issues integration for work tracking?\",\n default: true,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n owner: \"\",\n repo: \"\",\n statuses: DEFAULT_STATUSES,\n };\n }\n\n const owner = await input({\n message: \"GitHub repository owner (user or organization):\",\n default: defaults?.owner,\n validate: (value) => {\n if (!value.trim()) {\n return \"Owner is required for GitHub integration\";\n }\n if (!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(value)) {\n return \"Invalid GitHub username/organization format\";\n }\n return true;\n },\n });\n\n const repo = await input({\n message: \"GitHub repository name:\",\n default: defaults?.repo,\n validate: (value) => {\n if (!value.trim()) {\n return \"Repository name is required\";\n }\n if (!/^[a-zA-Z0-9._-]+$/.test(value)) {\n return \"Invalid repository name format\";\n }\n return true;\n },\n });\n\n const useProjectBoard = await confirm({\n message: \"Use a GitHub Project board for issue status tracking?\",\n default: defaults?.project !== undefined,\n });\n\n let project: number | undefined;\n if (useProjectBoard) {\n project = await number({\n message: \"GitHub Project number (from project URL):\",\n default: defaults?.project,\n min: 1,\n validate: (value) => {\n if (value === undefined || value < 1) {\n return \"Project number must be a positive integer\";\n }\n return true;\n },\n });\n }\n\n return {\n enabled: true,\n owner,\n repo,\n project,\n statuses: defaults?.statuses ?? DEFAULT_STATUSES,\n };\n}\n\n/**\n * Convert GitHub answers to config format\n */\nexport function githubAnswersToConfig(answers: GitHubAnswers): GitHubConfig | undefined {\n if (!answers.enabled) {\n return undefined;\n }\n\n return {\n owner: answers.owner,\n repo: answers.repo,\n project: answers.project,\n statuses: answers.statuses,\n };\n}\n","/**\n * TDD Configuration questions\n *\n * Gather TDD cycle enforcement preferences.\n */\n\nimport { confirm, input, select } from \"@inquirer/prompts\";\nimport type { TddConfig, TddVerbosity } from \"../../shared/types.js\";\n\n/**\n * Default values for TDD questions\n */\nexport interface TddDefaults {\n enabled?: boolean;\n verbosity?: TddVerbosity;\n bypassPatterns?: string[];\n mutationTesting?: {\n enabled?: boolean;\n requiredScore?: number;\n };\n // v1.0.0 fields\n domainVetoEnabled?: boolean;\n debateRounds?: number;\n requireVerification?: boolean;\n}\n\n/**\n * TDD answers from the installer\n */\nexport interface TddAnswers {\n enabled: boolean;\n verbosity: TddVerbosity;\n bypassPatterns: string[];\n mutationTesting: {\n enabled: boolean;\n requiredScore: number;\n };\n // v1.0.0 fields\n domainVetoEnabled: boolean;\n debateRounds: number;\n requireVerification: boolean;\n}\n\n/**\n * Default bypass patterns for files that don't need TDD\n */\nconst DEFAULT_BYPASS_PATTERNS = [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"];\n\n/**\n * Gather TDD configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherTdd(defaults?: TddDefaults): Promise<TddAnswers> {\n const enabled = await confirm({\n message: \"Enable TDD cycle enforcement (RED → DOMAIN → GREEN → DOMAIN)?\",\n default: defaults?.enabled ?? true,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n verbosity: \"silent\",\n bypassPatterns: DEFAULT_BYPASS_PATTERNS,\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n };\n }\n\n const verbosity = await select<TddVerbosity>({\n message: \"TDD feedback verbosity level:\",\n choices: [\n {\n name: \"Silent - Only show errors\",\n value: \"silent\",\n },\n {\n name: \"Brief - Short status messages (recommended)\",\n value: \"brief\",\n },\n {\n name: \"Explain - Detailed explanations of TDD phases\",\n value: \"explain\",\n },\n ],\n default: defaults?.verbosity ?? \"brief\",\n });\n\n const customBypass = await confirm({\n message: \"Customize file patterns that bypass TDD checks?\",\n default: false,\n });\n\n let bypassPatterns = defaults?.bypassPatterns ?? DEFAULT_BYPASS_PATTERNS;\n if (customBypass) {\n const patternsInput = await input({\n message: \"Enter bypass patterns (comma-separated, e.g., *.config.*, *.json):\",\n default: bypassPatterns.join(\", \"),\n });\n bypassPatterns = patternsInput\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n }\n\n const mutationEnabled = await confirm({\n message: \"Enable mutation testing for coverage verification?\",\n default: defaults?.mutationTesting?.enabled ?? false,\n });\n\n let requiredScore = defaults?.mutationTesting?.requiredScore ?? 80;\n if (mutationEnabled) {\n const scoreChoice = await select({\n message: \"Minimum mutation score required:\",\n choices: [\n { name: \"60% - Minimal coverage\", value: 60 },\n { name: \"70% - Standard coverage\", value: 70 },\n { name: \"80% - Good coverage (recommended)\", value: 80 },\n { name: \"90% - High coverage\", value: 90 },\n ],\n default: requiredScore,\n });\n requiredScore = scoreChoice;\n }\n\n // v1.0.0 Domain modeling questions\n const domainVetoEnabled = await confirm({\n message: \"Enable domain agent veto power? (Can block cycle for type violations)\",\n default: defaults?.domainVetoEnabled ?? true,\n });\n\n const debateRounds = await select({\n message: \"Max debate rounds before escalation to user:\",\n choices: [\n { name: \"1 round - Quick decisions\", value: 1 },\n { name: \"2 rounds - Balanced (recommended)\", value: 2 },\n { name: \"3 rounds - Thorough discussion\", value: 3 },\n { name: \"5 rounds - Extended debate\", value: 5 },\n ],\n default: defaults?.debateRounds ?? 2,\n });\n\n const requireVerification = await confirm({\n message: \"Require test output evidence before phase transitions?\",\n default: defaults?.requireVerification ?? true,\n });\n\n return {\n enabled,\n verbosity,\n bypassPatterns,\n mutationTesting: {\n enabled: mutationEnabled,\n requiredScore,\n },\n domainVetoEnabled,\n debateRounds,\n requireVerification,\n };\n}\n\n/**\n * Convert TDD answers to config format\n */\nexport function tddAnswersToConfig(answers: TddAnswers): TddConfig {\n return {\n enabled: answers.enabled,\n verbosity: answers.verbosity,\n bypassPatterns: answers.bypassPatterns,\n mutationTesting: {\n enabled: answers.mutationTesting.enabled,\n requiredScore: answers.mutationTesting.requiredScore,\n },\n domainVetoEnabled: answers.domainVetoEnabled,\n debateRounds: answers.debateRounds,\n requireVerification: answers.requireVerification,\n };\n}\n","/**\n * Event Modeling questions\n *\n * Gather Event Modeling workflow preferences.\n */\n\nimport { confirm, input } from \"@inquirer/prompts\";\nimport type { EventModelingConfig } from \"../../shared/types.js\";\n\n/**\n * Default values for Event Modeling questions\n */\nexport interface EventModelingDefaults {\n enabled?: boolean;\n outputPath?: string;\n}\n\n/**\n * Event Modeling answers from the installer\n */\nexport interface EventModelingAnswers {\n enabled: boolean;\n outputPath: string;\n}\n\n/**\n * Default output path for event model files\n */\nconst DEFAULT_OUTPUT_PATH = \"docs/event-model\";\n\n/**\n * Gather Event Modeling configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherEventModeling(\n defaults?: EventModelingDefaults\n): Promise<EventModelingAnswers> {\n const enabled = await confirm({\n message: \"Enable Event Modeling workflow for event-sourced systems?\",\n default: defaults?.enabled ?? false,\n });\n\n if (!enabled) {\n return {\n enabled: false,\n outputPath: defaults?.outputPath ?? DEFAULT_OUTPUT_PATH,\n };\n }\n\n const outputPath = await input({\n message: \"Output path for event model files:\",\n default: defaults?.outputPath ?? DEFAULT_OUTPUT_PATH,\n validate: (value) => {\n if (!value.trim()) {\n return \"Output path is required\";\n }\n // Basic path validation - no absolute paths or special characters\n if (value.startsWith(\"/\") || value.startsWith(\"~\")) {\n return \"Use a relative path from the project root\";\n }\n return true;\n },\n });\n\n return {\n enabled,\n outputPath,\n };\n}\n\n/**\n * Convert Event Modeling answers to config format\n */\nexport function eventModelingAnswersToConfig(answers: EventModelingAnswers): EventModelingConfig {\n return {\n enabled: answers.enabled,\n outputPath: answers.outputPath,\n };\n}\n","/**\n * Git Workflow questions\n *\n * Gather Git workflow preferences.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport type { GitConfig, GitWorkflow } from \"../../shared/types.js\";\n\n/**\n * Default values for Git Workflow questions\n */\nexport interface GitWorkflowDefaults {\n workflow?: GitWorkflow;\n requireClean?: boolean;\n worktrees?: boolean;\n}\n\n/**\n * Git Workflow answers from the installer\n */\nexport interface GitWorkflowAnswers {\n workflow: GitWorkflow;\n requireClean: boolean;\n worktrees: boolean;\n}\n\n/**\n * Gather Git workflow configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherGitWorkflow(\n defaults?: GitWorkflowDefaults\n): Promise<GitWorkflowAnswers> {\n const workflow = await select<GitWorkflow>({\n message: \"Git workflow style:\",\n choices: [\n {\n name: \"Standard - Traditional branch-based workflow\",\n value: \"standard\",\n },\n {\n name: \"git-spice - Stacked PRs with git-spice CLI\",\n value: \"git-spice\",\n },\n ],\n default: defaults?.workflow ?? \"standard\",\n });\n\n const requireClean = await confirm({\n message: \"Require clean working directory before git operations?\",\n default: defaults?.requireClean ?? true,\n });\n\n const worktrees = await confirm({\n message: \"Enable git worktrees for parallel work on multiple issues?\",\n default: defaults?.worktrees ?? false,\n });\n\n return {\n workflow,\n requireClean,\n worktrees,\n };\n}\n\n/**\n * Convert Git Workflow answers to config format\n */\nexport function gitWorkflowAnswersToConfig(answers: GitWorkflowAnswers): GitConfig {\n return {\n workflow: answers.workflow,\n requireClean: answers.requireClean,\n worktrees: answers.worktrees,\n };\n}\n","/**\n * Mode Configuration questions (v1.0.0+)\n *\n * Gather Marvin mode preferences for the SDLC workflow.\n */\n\nimport { checkbox, confirm, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport type { ModesConfig, SdlcMode } from \"../../shared/types.js\";\n\n/**\n * Default values for modes questions\n */\nexport interface ModesDefaults {\n default?: SdlcMode;\n eventModeling?: boolean;\n enabled?: SdlcMode[];\n}\n\n/**\n * Modes answers from the installer\n */\nexport interface ModesAnswers {\n default: SdlcMode;\n eventModeling: boolean;\n enabled: SdlcMode[];\n}\n\n/**\n * All available Marvin modes with descriptions\n */\nconst MODE_OPTIONS: Array<{ value: SdlcMode; name: string; description: string }> = [\n {\n value: \"build\",\n name: \"Build\",\n description: \"TDD implementation (RED → DOMAIN → GREEN → DOMAIN)\",\n },\n {\n value: \"discover\",\n name: \"Discover\",\n description: \"Problem space exploration, stakeholder mapping\",\n },\n {\n value: \"model\",\n name: \"Model\",\n description: \"Event Modeling (commands, events, views)\",\n },\n {\n value: \"architect\",\n name: \"Architect\",\n description: \"System design, ADRs, technology decisions\",\n },\n {\n value: \"pm\",\n name: \"PM\",\n description: \"Project management, git workflow, PRs\",\n },\n];\n\n/**\n * Gather modes configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherModes(defaults?: ModesDefaults): Promise<ModesAnswers> {\n console.log(chalk.gray(\"\\nMarvin operates in different modes depending on your work focus.\"));\n console.log(chalk.gray(\"Build mode (TDD) is always enabled.\\n\"));\n\n // Ask which modes to enable (Build is mandatory)\n const enabledChoices = MODE_OPTIONS.filter((m) => m.value !== \"build\").map((m) => ({\n name: `${m.name} - ${m.description}`,\n value: m.value,\n checked: defaults?.enabled?.includes(m.value) ?? true,\n }));\n\n const selectedModes = await checkbox({\n message: \"Which additional modes do you want to enable?\",\n choices: enabledChoices,\n });\n\n // Build is always enabled\n const enabled: SdlcMode[] = [\"build\", ...selectedModes];\n\n // Ask about Event Modeling vs PRD preference\n const useEventModeling = await confirm({\n message: \"Use Event Modeling for system design? (No = use PRD-style specifications)\",\n default: defaults?.eventModeling ?? true,\n });\n\n // If Event Modeling is disabled, swap model for prd in enabled modes\n let finalEnabled = enabled;\n if (!useEventModeling) {\n // Replace 'model' with implicit PRD mode (handled by the system)\n finalEnabled = enabled.filter((m) => m !== \"model\");\n }\n\n // Ask for default mode\n const defaultModeChoices = finalEnabled.map((mode) => {\n const option = MODE_OPTIONS.find((m) => m.value === mode);\n return {\n name: `${option?.name || mode} - ${option?.description || \"\"}`,\n value: mode,\n };\n });\n\n const defaultMode = await select<SdlcMode>({\n message: \"Which mode should be active when you start OpenCode?\",\n choices: defaultModeChoices,\n default: defaults?.default ?? \"build\",\n });\n\n return {\n default: defaultMode,\n eventModeling: useEventModeling,\n enabled: finalEnabled,\n };\n}\n\n/**\n * Convert modes answers to config format\n */\nexport function modesAnswersToConfig(answers: ModesAnswers): ModesConfig {\n return {\n default: answers.default,\n eventModeling: answers.eventModeling,\n enabled: answers.enabled,\n };\n}\n","/**\n * Memory Configuration questions (v1.0.0+)\n *\n * Gather memory backend preferences.\n */\n\nimport { input, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport type { MemoryBackend, MemoryConfig } from \"../../shared/types.js\";\n\n/**\n * Default values for memory questions\n */\nexport interface MemoryDefaults {\n backend?: MemoryBackend;\n checkpointTtl?: number;\n}\n\n/**\n * Memory answers from the installer\n */\nexport interface MemoryAnswers {\n backend: MemoryBackend;\n checkpointTtl: number;\n}\n\n/**\n * Gather memory configuration from user\n *\n * @param defaults - Optional default values from a preset or existing config\n */\nexport async function gatherMemory(defaults?: MemoryDefaults): Promise<MemoryAnswers> {\n console.log(\n chalk.gray(\"\\nMemory backend determines how Marvin remembers context across sessions.\\n\")\n );\n\n const backend = await select<MemoryBackend>({\n message: \"Choose memory backend:\",\n choices: [\n {\n name: \"Stateless - No persistent memory (simpler, no setup required)\",\n value: \"stateless\",\n },\n {\n name: \"Memento - Persistent memory via Memento MCP (requires setup)\",\n value: \"memento\",\n },\n ],\n default: defaults?.backend ?? \"stateless\",\n });\n\n let checkpointTtl = defaults?.checkpointTtl ?? 86400; // 24 hours default\n\n if (backend === \"memento\") {\n console.log(chalk.gray(\"\\nMemento stores checkpoints of conversation state.\"));\n console.log(chalk.gray(\"Set how long to keep checkpoints before they expire.\\n\"));\n\n const ttlChoice = await select({\n message: \"Checkpoint retention period:\",\n choices: [\n { name: \"1 hour (3600 seconds)\", value: 3600 },\n { name: \"6 hours (21600 seconds)\", value: 21600 },\n { name: \"24 hours (86400 seconds) - Recommended\", value: 86400 },\n { name: \"7 days (604800 seconds)\", value: 604800 },\n { name: \"Custom\", value: -1 },\n ],\n default: 86400,\n });\n\n if (ttlChoice === -1) {\n const customTtl = await input({\n message: \"Enter checkpoint TTL in seconds:\",\n default: String(checkpointTtl),\n validate: (value) => {\n const num = Number.parseInt(value, 10);\n if (Number.isNaN(num) || num < 60) {\n return \"Please enter a number >= 60 seconds\";\n }\n return true;\n },\n });\n checkpointTtl = Number.parseInt(customTtl, 10);\n } else {\n checkpointTtl = ttlChoice;\n }\n\n console.log(chalk.yellow(\"\\nNote: You'll need to configure Memento MCP separately.\"));\n console.log(chalk.gray(\"See: https://github.com/gannonh/memento\\n\"));\n }\n\n return {\n backend,\n checkpointTtl,\n };\n}\n\n/**\n * Convert memory answers to config format\n */\nexport function memoryAnswersToConfig(answers: MemoryAnswers): MemoryConfig {\n return {\n backend: answers.backend,\n checkpointTtl: answers.checkpointTtl,\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","export * from \"./types.js\";\nexport * from \"./migrations.js\";\nexport * from \"./runner.js\";\n","export interface Migration {\n fromVersion: string;\n toVersion: string;\n description: string;\n migrateSdlc?: (config: Record<string, unknown>) => Record<string, unknown>;\n migrateOmo?: (config: Record<string, unknown>) => Record<string, unknown>;\n migrateOpencode?: (config: Record<string, unknown>) => Record<string, unknown>;\n}\n\nexport interface MigrationResult {\n fromVersion: string;\n toVersion: string;\n migrationsApplied: string[];\n sdlcConfig: Record<string, unknown>;\n omoConfig: Record<string, unknown>;\n opencodeConfig: Record<string, unknown>;\n hasBreakingChanges: boolean;\n breakingChangeWarnings: string[];\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 * Supports both v0.3.0+ (new) and legacy (bmad) structures.\n */\nexport interface PresetConfig {\n $schema?: string;\n version: 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 // 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 * Valid preset names\n */\nexport const PRESET_NAMES = [\n \"minimal\",\n \"standard\",\n \"strict-tdd\",\n \"event-modeling\",\n \"enterprise\",\n \"solo-quick\",\n \"copilot-only\",\n] 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 * 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 presets with their descriptions\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 * 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 * 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 * 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\", 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\",\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\");\n if (sdlcUpdate) {\n const sdlcSpinner = ora(\"Updating opencode-sdlc...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc@${channel}`]);\n sdlcSpinner.succeed(`opencode-sdlc updated to ${sdlcUpdate.latest}`);\n } catch (err) {\n sdlcSpinner.fail(\"Failed to update opencode-sdlc\");\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\"));\n if (sdlcPackage) {\n const sdlcSpinner = ora(\"Installing opencode-sdlc...\").start();\n try {\n const channel = detectReleaseChannel(VERSION);\n await fileManager.installDependencies([`opencode-sdlc@${channel}`]);\n sdlcSpinner.succeed(\"opencode-sdlc installed\");\n } catch (err) {\n sdlcSpinner.fail(\"Failed to install opencode-sdlc\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n const pluginUpdates = updatesAvailable.filter((u) => u.name !== \"opencode-sdlc\");\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\"));\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"]}
|