opencode-sdlc-plugin 0.3.2 → 1.1.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/event-modeling.json +19 -8
- package/config/presets/minimal.json +29 -16
- package/config/presets/standard.json +19 -8
- package/config/schemas/athena.schema.json +4 -4
- package/config/schemas/sdlc.schema.json +101 -5
- package/dist/cli/index.js +1431 -1336
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +428 -66
- package/dist/index.js +6262 -2440
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.js +5793 -2010
- package/dist/plugin/index.js.map +1 -1
- package/package.json +2 -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/config/presets/copilot-only.json +0 -69
- package/config/presets/enterprise.json +0 -79
- package/config/presets/solo-quick.json +0 -70
- package/config/presets/strict-tdd.json +0 -79
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":["../../src/shared/constants.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/prerequisites.ts","../../src/shared/schemas.ts","../../src/cli/utils/validators.ts","../../src/cli/commands/doctor.ts","../../src/cli/commands/info.ts","../../src/plugin/utils/model-params.ts","../../src/cli/generators/omo-config.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/questions/features.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/generators/config-generator.ts","../../src/shared/github-client.ts","../../src/cli/utils/git-remote.ts","../../src/cli/questions/github-smart.ts","../../src/cli/utils/config-loader.ts","../../src/cli/utils/config-merger.ts","../../src/cli/utils/migrations/migrations.ts","../../src/cli/utils/migrations/runner.ts","../../src/cli/utils/preset-loader.ts","../../src/cli/commands/install.ts","../../src/cli/utils/auth-detector.ts","../../src/cli/commands/providers.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/upgrade.ts","../../src/cli/index.ts"],"names":["dirname","fileURLToPath","join","existsSync","readFileSync","chalk","execAsync","promisify","exec","info","ora","execSync","mkdirSync","copyFileSync","confirm","select","homedir","providers","semver"],"mappings":"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","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Get version from package.json at runtime.\n * Handles both bundled (dist/) and development (src/) scenarios.\n */\nfunction getPackageVersion(): string {\n try {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n\n const possiblePaths = [\n join(currentDir, \"..\", \"..\", \"package.json\"),\n join(currentDir, \"..\", \"..\", \"..\", \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n if (!existsSync(pkgPath)) continue;\n\n const content = readFileSync(pkgPath, \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.version) return pkg.version;\n }\n\n return \"0.0.0\";\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.error(\"[opencode-sdlc] Warning: package.json contains invalid JSON\");\n }\n return \"0.0.0\";\n }\n}\n\n/**\n * Current version of OpenCode SDLC Plugin\n * Dynamically read from package.json\n */\nexport const VERSION = getPackageVersion();\n\n/**\n * Package name for CLI display\n */\nexport const PACKAGE_NAME = \"opencode-sdlc-plugin\";\n\n/**\n * CLI display name\n */\nexport const DISPLAY_NAME = \"OpenCode SDLC\";\n\n/**\n * Tagline for CLI header\n */\nexport const TAGLINE = \"Strict TDD with domain modeling and event sourcing\";\n\n/**\n * Configuration paths\n */\nexport const CONFIG_PATHS = {\n /** Global OpenCode config directory */\n globalConfigDir: join(homedir(), \".config\", \"opencode\"),\n\n /** Global SDLC config file */\n globalSdlcConfig: join(homedir(), \".config\", \"opencode\", \"sdlc.json\"),\n\n /** Global OpenCode config file */\n globalOpencodeConfig: join(homedir(), \".config\", \"opencode\", \"opencode.json\"),\n\n /** Global oh-my-opencode config file */\n globalOmoConfig: join(homedir(), \".config\", \"opencode\", \"oh-my-opencode.json\"),\n\n /** Commands directory */\n commandsDir: join(homedir(), \".config\", \"opencode\", \"command\"),\n\n /** Plugin directory */\n pluginDir: join(homedir(), \".config\", \"opencode\", \"plugin\"),\n\n /** SDLC internal files directory (state, backups) */\n sdlcDir: join(homedir(), \".config\", \"opencode\", \"sdlc\"),\n\n /** SDLC backups directory */\n backupsDir: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"backups\"),\n\n /** SDLC state file (for issue tracking) */\n stateFile: join(homedir(), \".config\", \"opencode\", \"sdlc\", \"sdlc-state.json\"),\n\n /** Legacy state file path (for migration) */\n legacyStateFile: join(homedir(), \".config\", \"opencode\", \"sdlc-state.json\"),\n} as const;\n\n/**\n * Project-specific paths (relative to project root)\n */\nexport const PROJECT_PATHS = {\n /** Local SDLC config */\n localConfig: \".opencode/sdlc.json\",\n} as const;\n\n/**\n * Default configuration values (v1.0.0+)\n */\nexport const DEFAULTS = {\n // ============================================================================\n // New v1.0.0 defaults\n // ============================================================================\n\n /** Default modes configuration (v1.0.0+) */\n modes: {\n default: \"build\" as const,\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"] as const,\n },\n\n /** Default memory configuration (v1.0.0+) */\n memory: {\n backend: \"stateless\" as const,\n checkpointTtl: 86400,\n },\n\n /** Default subagent model configuration (v1.0.0+)\n * All subagents default to \"inherit\" which uses the marvin model.\n * Only specify overrides for subagents that need different models.\n */\n subagents: {\n // TDD agents - use same model as marvin by default\n red: \"inherit\" as const,\n green: \"inherit\" as const,\n domain: \"inherit\" as const,\n refactor: \"inherit\" as const,\n // Event modeling agents\n discovery: \"inherit\" as const,\n workflow: \"inherit\" as const,\n gwt: \"inherit\" as const,\n \"model-checker\": \"inherit\" as const,\n // Architecture agents\n architect: \"inherit\" as const,\n adr: \"inherit\" as const,\n \"design-facilitator\": \"inherit\" as const,\n // Planning agents\n story: \"inherit\" as const,\n pm: \"inherit\" as const,\n analyst: \"inherit\" as const,\n // Review agents (read-only, can use faster models)\n reviewer: \"inherit\" as const,\n ux: \"inherit\" as const,\n mutation: \"inherit\" as const,\n },\n\n // ============================================================================\n // Existing v0.3.0+ defaults (with v1.0 extensions)\n // ============================================================================\n\n /** Default TDD configuration */\n tdd: {\n enabled: true,\n verbosity: \"brief\" as const,\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n // v1.0.0 additions\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n },\n\n /** Default Event Modeling configuration */\n eventModeling: {\n enabled: false,\n outputPath: \"docs/event-model\",\n },\n\n /** Default Git configuration */\n git: {\n workflow: \"standard\" as const,\n requireClean: true,\n worktrees: false,\n },\n\n /** Default features enabled (v0.3.0+) */\n features: {\n orchestratorOnly: false,\n todoSync: true,\n partyReview: true,\n debuggingProtocol: true,\n memento: false,\n notifications: true,\n lspTools: true,\n },\n\n /** Default MCPs enabled (v0.3.0+) */\n mcps: {\n context7: true,\n exa: true,\n grepApp: true,\n memento: false,\n },\n\n /** Default routing configuration (v1.0.0+) */\n routing: {\n classifierModel: \"anthropic/claude-haiku\",\n },\n} as const;\n\n/**\n * Minimum compatible versions\n */\nexport const MIN_VERSIONS = {\n node: \"20.0.0\",\n opencode: \"1.0.132\",\n} as const;\n","/**\n * File Manager\n *\n * Handles file read/write operations for the CLI installer.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { copyFile, mkdir, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Get the package root directory (where prompts/ and config/ live)\n * Handles both bundled and unbundled scenarios.\n */\nfunction getPackageRoot(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n if (existsSync(join(bundledRoot, \"prompts\"))) {\n return bundledRoot;\n }\n\n // Unbundled development: src/cli/utils/file-manager.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n if (existsSync(join(devRoot, \"prompts\"))) {\n return devRoot;\n }\n\n // Fallback to bundled root even if prompts dir doesn't exist\n return bundledRoot;\n}\n\nexport class FileManager {\n private configDir: string;\n\n constructor(configDir?: string) {\n this.configDir = configDir || CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Ensure a directory exists\n */\n async ensureDir(dir: string): Promise<void> {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n }\n\n /**\n * Write multiple files atomically\n */\n async writeFiles(files: GeneratedFile[]): Promise<void> {\n for (const file of files) {\n const dir = dirname(file.path);\n await this.ensureDir(dir);\n await writeFile(file.path, file.content, \"utf-8\");\n }\n }\n\n /**\n * Read a JSON configuration file\n */\n readJsonFile<T = Record<string, unknown>>(path: string): T | null {\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Write a JSON configuration file\n */\n async writeJsonFile(path: string, data: unknown): Promise<void> {\n const dir = dirname(path);\n await this.ensureDir(dir);\n await writeFile(path, JSON.stringify(data, null, 2), \"utf-8\");\n }\n\n /**\n * Check if a file exists\n */\n exists(path: string): boolean {\n return existsSync(path);\n }\n\n /**\n * Install npm dependencies in the config directory\n */\n async installDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n // Ensure config directory exists\n await this.ensureDir(this.configDir);\n\n // Check if package.json exists, create if not\n const packageJsonPath = join(this.configDir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(\n {\n name: \"opencode-config\",\n private: true,\n type: \"module\",\n },\n null,\n 2\n )\n );\n }\n\n // Install packages\n const packageList = packages.join(\" \");\n await execAsync(`npm install ${packageList}`, {\n cwd: this.configDir,\n timeout: 120000,\n });\n }\n\n /**\n * Uninstall npm dependencies from the config directory\n */\n async uninstallDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n const packageList = packages.join(\" \");\n try {\n await execAsync(`npm uninstall ${packageList}`, {\n cwd: this.configDir,\n timeout: 60000,\n });\n } catch {\n // Ignore errors if packages aren't installed\n }\n }\n\n /**\n * Copy bridge commands from package to config directory\n *\n * @deprecated Bridge commands have been removed in v1.0.\n * This method now returns an empty array for backwards compatibility.\n * Use mode-based workflow instead.\n */\n async copyCommands(): Promise<string[]> {\n // Bridge commands removed in v1.0 - modes replace commands entirely\n return [];\n }\n\n /**\n * Copy Marvin mode agent files to project .opencode/agent directory\n *\n * @param projectDir - The project directory to copy to\n * @param enabledModes - Array of enabled modes to copy\n * @returns Array of copied file names\n */\n async copyAgentModes(projectDir: string, enabledModes: string[]): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n await this.ensureDir(agentDir);\n\n const packageRoot = getPackageRoot();\n const sourceModesDir = join(packageRoot, \"prompts\", \"modes\");\n\n const copiedFiles: string[] = [];\n\n // Map of mode names to their file names\n const modeFileMap: Record<string, string> = {\n build: \"build.md\",\n discover: \"plan.md\", // Discover mode overrides Plan agent\n model: \"model.md\",\n prd: \"prd.md\",\n architect: \"architect.md\",\n pm: \"pm.md\",\n };\n\n if (existsSync(sourceModesDir)) {\n for (const mode of enabledModes) {\n const sourceFile = modeFileMap[mode];\n if (!sourceFile) continue;\n\n const sourcePath = join(sourceModesDir, sourceFile);\n if (existsSync(sourcePath)) {\n const destPath = join(agentDir, sourceFile);\n await copyFile(sourcePath, destPath);\n copiedFiles.push(sourceFile);\n }\n }\n }\n\n return copiedFiles;\n }\n\n /**\n * Remove agent mode files from project .opencode/agent directory\n *\n * @param projectDir - The project directory to remove from\n * @returns Array of removed file names\n */\n async removeAgentModes(projectDir: string): Promise<string[]> {\n const agentDir = join(projectDir, \".opencode\", \"agent\");\n const removedFiles: string[] = [];\n\n if (!existsSync(agentDir)) {\n return removedFiles;\n }\n\n const modeFiles = [\"build.md\", \"plan.md\", \"model.md\", \"prd.md\", \"architect.md\", \"pm.md\"];\n\n const files = await readdir(agentDir);\n for (const file of files) {\n if (modeFiles.includes(file)) {\n const filePath = join(agentDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove bridge commands from config directory\n */\n async removeCommands(): Promise<string[]> {\n const commandsDir = CONFIG_PATHS.commandsDir;\n const removedFiles: string[] = [];\n\n if (!existsSync(commandsDir)) {\n return removedFiles;\n }\n\n const files = await readdir(commandsDir);\n for (const file of files) {\n if (file.startsWith(\"sdlc-\") && file.endsWith(\".md\")) {\n const filePath = join(commandsDir, file);\n await rm(filePath);\n removedFiles.push(file);\n }\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc configuration files\n */\n async removeConfigFiles(): Promise<string[]> {\n const removedFiles: string[] = [];\n\n const filesToRemove = [CONFIG_PATHS.globalSdlcConfig, CONFIG_PATHS.legacyStateFile];\n\n for (const file of filesToRemove) {\n if (existsSync(file)) {\n await rm(file);\n removedFiles.push(file);\n }\n }\n\n if (existsSync(CONFIG_PATHS.sdlcDir)) {\n await rm(CONFIG_PATHS.sdlcDir, { recursive: true });\n removedFiles.push(CONFIG_PATHS.sdlcDir);\n }\n\n return removedFiles;\n }\n\n /**\n * Remove Sdlc from opencode.json plugin list\n */\n async removeFromOpencodeConfig(): Promise<boolean> {\n const opencodeConfig = this.readJsonFile<{\n plugin?: string[];\n [key: string]: unknown;\n }>(CONFIG_PATHS.globalOpencodeConfig);\n\n if (!opencodeConfig || !opencodeConfig.plugin) {\n return false;\n }\n\n const sdlcPlugins = [\n \"opencode-sdlc\",\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const originalLength = opencodeConfig.plugin.length;\n opencodeConfig.plugin = opencodeConfig.plugin.filter(\n (p) => !sdlcPlugins.some((ap) => p.includes(ap))\n );\n\n if (opencodeConfig.plugin.length !== originalLength) {\n await this.writeJsonFile(CONFIG_PATHS.globalOpencodeConfig, opencodeConfig);\n return true;\n }\n\n return false;\n }\n\n /**\n * Backup a file before modifying\n */\n async backupFile(path: string): Promise<string | null> {\n if (!existsSync(path)) {\n return null;\n }\n\n const backupPath = `${path}.backup`;\n await copyFile(path, backupPath);\n return backupPath;\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(backupPath: string): Promise<void> {\n const originalPath = backupPath.replace(/\\.backup$/, \"\");\n if (existsSync(backupPath)) {\n await copyFile(backupPath, originalPath);\n await rm(backupPath);\n }\n }\n}\n","/**\n * Logger utility for CLI output\n *\n * Provides colored, consistent logging for the CLI.\n */\n\nimport chalk from \"chalk\";\n\nexport const logger = {\n /**\n * Log an informational message\n */\n info: (message: string): void => {\n console.log(chalk.blue(\"i\"), message);\n },\n\n /**\n * Log a success message\n */\n success: (message: string): void => {\n console.log(chalk.green(\"✓\"), message);\n },\n\n /**\n * Log a warning message\n */\n warn: (message: string): void => {\n console.log(chalk.yellow(\"!\"), message);\n },\n\n /**\n * Log an error message\n */\n error: (message: string): void => {\n console.log(chalk.red(\"✖\"), message);\n },\n\n /**\n * Log a debug message (only when DEBUG env var is set)\n */\n debug: (message: string): void => {\n if (process.env.DEBUG) {\n console.log(chalk.gray(\"[debug]\"), message);\n }\n },\n\n /**\n * Log a step in a process\n */\n step: (step: number, total: number, message: string): void => {\n console.log(chalk.cyan(`[${step}/${total}]`), message);\n },\n\n /**\n * Log a blank line\n */\n blank: (): void => {\n console.log();\n },\n\n /**\n * Log a section header\n */\n section: (title: string): void => {\n console.log();\n console.log(chalk.bold(title));\n console.log();\n },\n\n /**\n * Log a key-value pair\n */\n keyValue: (key: string, value: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(`${key}:`)} ${value}`);\n },\n\n /**\n * Log a list item\n */\n listItem: (item: string, indent = 0): void => {\n const padding = \" \".repeat(indent);\n console.log(`${padding}${chalk.gray(\"-\")} ${item}`);\n },\n\n /**\n * Display the Sdlc banner\n */\n banner: (): void => {\n console.log(\n chalk.cyan(`\n╔═══════════════════════════════════════════════════════════════╗\n║ OPENCODE ATHENA ║\n║ Strategic Wisdom Meets Practical Execution ║\n╠═══════════════════════════════════════════════════════════════╣\n║ Unifying oh-my-opencode + BMAD METHOD for OpenCode ║\n╚═══════════════════════════════════════════════════════════════╝\n`)\n );\n },\n\n /**\n * Display a success banner\n */\n successBanner: (message: string): void => {\n const line = \"═\".repeat(message.length + 4);\n console.log(\n chalk.green(`\n╔${line}╗\n║ ${message} ║\n╚${line}╝\n`)\n );\n },\n};\n","/**\n * Prerequisites checker\n *\n * Validates that required dependencies and versions are available.\n */\n\nimport { exec } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { promisify } from \"node:util\";\nimport { CONFIG_PATHS, MIN_VERSIONS } from \"../../shared/constants.js\";\nimport type { Prerequisites } from \"../../shared/types.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Parse a semantic version string into components\n */\nfunction parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return {\n major: Number.parseInt(match[1], 10),\n minor: Number.parseInt(match[2], 10),\n patch: Number.parseInt(match[3], 10),\n };\n}\n\n/**\n * Compare two semantic versions\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\nfunction compareVersions(a: string, b: string): number {\n const parsedA = parseVersion(a);\n const parsedB = parseVersion(b);\n\n if (!parsedA || !parsedB) return 0;\n\n if (parsedA.major !== parsedB.major) {\n return parsedA.major < parsedB.major ? -1 : 1;\n }\n if (parsedA.minor !== parsedB.minor) {\n return parsedA.minor < parsedB.minor ? -1 : 1;\n }\n if (parsedA.patch !== parsedB.patch) {\n return parsedA.patch < parsedB.patch ? -1 : 1;\n }\n return 0;\n}\n\n/**\n * Check Node.js version\n */\nasync function checkNode(): Promise<Prerequisites[\"node\"]> {\n try {\n const { stdout } = await execAsync(\"node --version\");\n const version = stdout.trim().replace(/^v/, \"\");\n const compatible = compareVersions(version, MIN_VERSIONS.node) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check OpenCode installation and version\n */\nasync function checkOpenCode(): Promise<Prerequisites[\"opencode\"]> {\n try {\n const { stdout } = await execAsync(\"opencode --version\");\n const version = stdout.trim();\n const compatible = compareVersions(version, MIN_VERSIONS.opencode) >= 0;\n return { installed: true, version, compatible };\n } catch {\n return { installed: false, compatible: false };\n }\n}\n\n/**\n * Check existing Sdlc installation\n */\nasync function checkSdlcInstalled(): Promise<Prerequisites[\"sdlc\"]> {\n if (!existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n return { installed: false };\n }\n\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n const config = JSON.parse(content);\n return {\n installed: true,\n version: config.version,\n };\n } catch {\n return { installed: true };\n }\n}\n\n/**\n * Check all prerequisites\n */\nexport async function checkPrerequisites(): Promise<Prerequisites> {\n const [node, opencode, sdlc] = await Promise.all([\n checkNode(),\n checkOpenCode(),\n checkSdlcInstalled(),\n ]);\n\n return { node, opencode, sdlc };\n}\n\n/**\n * Check if oh-my-opencode is installed\n */\nexport async function checkOhMyOpenCode(): Promise<{ installed: boolean; version?: string }> {\n try {\n const { stdout } = await execAsync(\"npm list oh-my-opencode --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const version = data.dependencies?.[\"oh-my-opencode\"]?.version;\n return { installed: !!version, version };\n } catch {\n return { installed: false };\n }\n}\n\n/**\n * Get installed plugin versions from OpenCode config directory\n */\nexport async function getInstalledPlugins(): Promise<Record<string, string>> {\n try {\n const { stdout } = await execAsync(\"npm list --depth=0 --json\", {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const deps = data.dependencies || {};\n const result: Record<string, string> = {};\n for (const [name, info] of Object.entries(deps)) {\n result[name] = (info as { version?: string }).version || \"unknown\";\n }\n return result;\n } catch {\n return {};\n }\n}\n\n/**\n * Check if a specific npm package is outdated\n */\nexport async function checkPackageUpdate(\n packageName: string\n): Promise<{ current?: string; latest?: string; updateAvailable: boolean }> {\n try {\n const { stdout } = await execAsync(`npm outdated ${packageName} --json`, {\n cwd: CONFIG_PATHS.globalConfigDir,\n });\n const data = JSON.parse(stdout);\n const info = data[packageName];\n if (info) {\n return {\n current: info.current,\n latest: info.latest,\n updateAvailable: info.current !== info.latest,\n };\n }\n return { updateAvailable: false };\n } catch {\n // npm outdated returns exit code 1 if packages are outdated\n // Try to parse the output anyway\n return { updateAvailable: false };\n }\n}\n\n/**\n * Validate that a config file is valid JSON\n */\nexport function validateJsonFile(path: string): { valid: boolean; error?: string } {\n if (!existsSync(path)) {\n return { valid: false, error: \"File does not exist\" };\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n return { valid: true };\n } catch (err) {\n return {\n valid: false,\n error: err instanceof Error ? err.message : \"Invalid JSON\",\n };\n }\n}\n","import { z } from \"zod\";\n\n/**\n * Zod validation schemas for OpenCode SDLC\n */\n\n// ============================================================================\n// Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for provider auth method\n */\nexport const ProviderAuthMethodSchema = z.enum([\"subscription\", \"api\", \"none\"]);\n\n/**\n * Schema for subscription configuration\n */\nexport const SubscriptionSchema = z.object({\n claude: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n tier: z.enum([\"max5x\", \"max20x\", \"pro\", \"none\"]),\n }),\n openai: z.object({\n enabled: z.boolean(),\n authMethod: ProviderAuthMethodSchema.default(\"subscription\"),\n }),\n google: z.object({\n enabled: z.boolean(),\n authMethod: z.enum([\"antigravity\", \"personal\", \"api\", \"none\"]),\n }),\n githubCopilot: z.object({\n enabled: z.boolean(),\n plan: z.enum([\"free\", \"pro\", \"pro-plus\", \"business\", \"enterprise\", \"none\"]),\n enabledModels: z.array(z.string()).optional(),\n }),\n});\n\n// ============================================================================\n// Mode Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for SDLC operation modes\n */\nexport const SdlcModeSchema = z.enum([\"discover\", \"model\", \"architect\", \"pm\", \"build\"]);\n\n/**\n * Schema for modes configuration (v1.0.0+)\n */\nexport const ModesConfigSchema = z.object({\n default: SdlcModeSchema.default(\"build\").describe(\"Default mode on startup\"),\n eventModeling: z.boolean().default(true).describe(\"true=Model mode, false=PRD mode\"),\n enabled: z\n .array(SdlcModeSchema)\n .default([\"discover\", \"model\", \"architect\", \"pm\", \"build\"])\n .describe(\"Array of enabled modes\"),\n});\n\n// ============================================================================\n// Memory Configuration Schemas (v1.0.0+)\n// ============================================================================\n\n/**\n * Schema for memory backend types\n */\nexport const MemoryBackendSchema = z.enum([\"memento\", \"stateless\"]);\n\n/**\n * Schema for memory configuration (v1.0.0+)\n */\nexport const MemoryConfigSchema = z.object({\n backend: MemoryBackendSchema.default(\"stateless\").describe(\"Memory backend type\"),\n checkpointTtl: z\n .number()\n .int()\n .positive()\n .default(86400)\n .describe(\"How long to keep checkpoints in seconds\"),\n});\n\n// ============================================================================\n// GitHub Issues Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for GitHub project board statuses\n */\nexport const GitHubStatusSchema = z.enum([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"]);\n\n/**\n * Schema for GitHub Issues integration configuration\n */\nexport const GitHubConfigSchema = z.object({\n owner: z.string().describe(\"GitHub repository owner (user or org)\"),\n repo: z.string().describe(\"GitHub repository name\"),\n project: z.number().optional().describe(\"GitHub Project number for board tracking\"),\n statuses: z\n .array(GitHubStatusSchema)\n .default([\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"])\n .describe(\"Project board column names\"),\n});\n\n// ============================================================================\n// TDD Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for TDD verbosity levels\n */\nexport const TddVerbositySchema = z.enum([\"silent\", \"brief\", \"explain\"]);\n\n/**\n * Schema for mutation testing configuration\n */\nexport const MutationTestingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable mutation testing\"),\n requiredScore: z\n .number()\n .min(0)\n .max(100)\n .default(80)\n .describe(\"Minimum mutation score required (0-100)\"),\n});\n\n/**\n * Schema for TDD cycle enforcement configuration\n */\nexport const TddConfigSchema = z.object({\n enabled: z.boolean().default(true).describe(\"Enable TDD cycle enforcement\"),\n verbosity: TddVerbositySchema.default(\"brief\").describe(\"TDD feedback verbosity\"),\n bypassPatterns: z\n .array(z.string())\n .default([\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"])\n .describe(\"File patterns that bypass TDD checks\"),\n mutationTesting: MutationTestingConfigSchema.default({\n enabled: false,\n requiredScore: 80,\n }),\n // New v1.0.0 fields\n domainVetoEnabled: z\n .boolean()\n .default(true)\n .describe(\"Enable domain agent veto power over type changes\"),\n debateRounds: z\n .number()\n .int()\n .min(1)\n .max(5)\n .default(2)\n .describe(\"Max debate rounds before escalation to user\"),\n requireVerification: z\n .boolean()\n .default(true)\n .describe(\"Require test output evidence before phase transitions\"),\n});\n\n// ============================================================================\n// Event Modeling Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Event Modeling integration configuration\n */\nexport const EventModelingConfigSchema = z.object({\n enabled: z.boolean().default(false).describe(\"Enable Event Modeling workflow\"),\n outputPath: z.string().default(\"docs/event-model\").describe(\"Path to event model output files\"),\n});\n\n// ============================================================================\n// Git Workflow Configuration Schemas\n// ============================================================================\n\n/**\n * Schema for Git workflow types\n */\nexport const GitWorkflowSchema = z.enum([\"standard\", \"git-spice\"]);\n\n/**\n * Schema for Git integration configuration\n */\nexport const GitConfigSchema = z.object({\n workflow: GitWorkflowSchema.default(\"standard\").describe(\"Git workflow style\"),\n requireClean: z\n .boolean()\n .default(true)\n .describe(\"Require clean working directory before operations\"),\n worktrees: z.boolean().default(false).describe(\"Enable git worktrees for parallel work\"),\n});\n\n// ============================================================================\n// Feature Flags Schemas\n// ============================================================================\n\n/**\n * Schema for SDLC feature flags (v0.3.0+)\n */\nexport const FeaturesSchema = z.object({\n orchestratorOnly: z\n .boolean()\n .default(false)\n .describe(\"Main conversation delegates all file writes to agents\"),\n todoSync: z.boolean().default(true).describe(\"Auto-sync todos with GitHub issue checkboxes\"),\n partyReview: z.boolean().default(true).describe(\"Enable party review for architecture decisions\"),\n debuggingProtocol: z.boolean().default(true).describe(\"Enable debugging protocol with Oracle\"),\n memento: z.boolean().default(false).describe(\"Enable Memento MCP for persistent memory\"),\n notifications: z.boolean().default(true).describe(\"Show in-TUI notifications\"),\n lspTools: z.boolean().default(true).describe(\"Enable LSP tools for code intelligence\"),\n});\n\n/**\n * Schema for MCP configuration (v0.3.0+)\n */\nexport const McpsSchema = z.object({\n context7: z.boolean().default(true).describe(\"Context7 for library documentation\"),\n exa: z.boolean().default(true).describe(\"Exa for web search\"),\n grepApp: z.boolean().default(true).describe(\"grep.app for code search\"),\n memento: z.boolean().default(false).describe(\"Memento for persistent memory\"),\n});\n\n// ============================================================================\n// Legacy BMAD Configuration Schema (Deprecated)\n// ============================================================================\n\n/**\n * @deprecated Use GitHubConfigSchema instead. BMAD configuration is no longer supported in v0.3.0+.\n */\nexport const LegacyBmadConfigSchema = z.object({\n defaultTrack: z.enum([\"quick-flow\", \"enterprise\"]),\n autoStatusUpdate: z.boolean(),\n parallelIssueLimit: z.number().int().min(0).max(10),\n paths: z\n .object({\n prd: z.string().nullable().optional(),\n architecture: z.string().nullable().optional(),\n })\n .optional(),\n});\n\n/**\n * @deprecated Use FeaturesSchema instead. Legacy feature flags from pre-0.3.0.\n */\nexport const LegacyFeaturesSchema = z.object({\n bmadBridge: z.boolean(),\n autoStatus: z.boolean(),\n parallelExecution: z.boolean(),\n notifications: z.boolean(),\n contextMonitor: z.boolean(),\n commentChecker: z.boolean(),\n lspTools: z.boolean(),\n autoGitOperations: z.boolean().default(false),\n todoSync: z.boolean().default(true),\n});\n\n/**\n * @deprecated Use McpsSchema instead. Legacy MCP config from pre-0.3.0.\n */\nexport const LegacyMcpsSchema = z.object({\n context7: z.boolean(),\n exa: z.boolean(),\n grepApp: z.boolean(),\n});\n\n/**\n * Schema for LLM provider\n */\nexport const LLMProviderSchema = z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]);\n\n/**\n * Schema for agent routing configuration\n */\nexport const AgentRoutingSchema = z.object({\n requiresThinking: z.boolean().optional(),\n preferProvider: LLMProviderSchema.optional(),\n});\n\n/**\n * Schema for routing configuration\n */\nexport const RoutingConfigSchema = z.object({\n providerPriority: z.array(LLMProviderSchema),\n modelFamilyPriority: z.object({\n claude: z.array(LLMProviderSchema).optional(),\n gpt: z.array(LLMProviderSchema).optional(),\n gemini: z.array(LLMProviderSchema).optional(),\n }),\n agentOverrides: z.object({\n marvin: AgentRoutingSchema.optional(),\n oracle: AgentRoutingSchema.optional(),\n librarian: AgentRoutingSchema.optional(),\n frontend: AgentRoutingSchema.optional(),\n documentWriter: AgentRoutingSchema.optional(),\n multimodalLooker: AgentRoutingSchema.optional(),\n }),\n fallbackBehavior: z.object({\n autoFallback: z.boolean(),\n retryPeriodMs: z.number().min(0),\n notifyOnRateLimit: z.boolean(),\n }),\n // New v1.0.0 field\n classifierModel: z\n .string()\n .default(\"anthropic/claude-haiku\")\n .describe(\"Model for sdlc_classify_request tool (use cheapest available)\"),\n});\n\n/**\n * Schema for thinking level\n */\nexport const ThinkingLevelSchema = z.enum([\"off\", \"low\", \"medium\", \"high\"]);\n\n/**\n * Schema for agent settings (temperature and thinking level)\n */\nexport const AgentSettingsSchema = z.object({\n temperature: z.number().min(0).max(1).optional(),\n thinkingLevel: ThinkingLevelSchema.optional(),\n});\n\n/**\n * Schema for custom model definition\n */\nexport const CustomModelDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n provider: z.enum([\"anthropic\", \"openai\", \"google\", \"github-copilot\"]),\n description: z.string().optional(),\n capabilities: z\n .object({\n thinking: z.boolean().optional(),\n contextWindow: z.number().optional(),\n supportsTemperature: z.boolean().optional(),\n })\n .optional(),\n});\n\n/**\n * Schema for subagent model value (either a model string or \"inherit\" to use marvin model)\n */\nexport const SubagentModelSchema = z.union([\n z.string().describe(\"Full model identifier (e.g., 'anthropic/claude-sonnet-4-20250514')\"),\n z.literal(\"inherit\").describe(\"Inherit model from marvin\"),\n]);\n\n/**\n * Schema for subagent type\n */\nexport const SubagentTypeSchema = z.enum([\n // TDD agents\n \"red\",\n \"green\",\n \"domain\",\n \"refactor\",\n // Event modeling agents\n \"discovery\",\n \"workflow\",\n \"gwt\",\n \"model-checker\",\n // Architecture agents\n \"architect\",\n \"adr\",\n \"design-facilitator\",\n // Planning agents\n \"story\",\n \"pm\",\n \"analyst\",\n // Review agents\n \"reviewer\",\n \"ux\",\n \"mutation\",\n]);\n\n/**\n * Schema for subagent model assignments (v1.0.0+)\n * All fields are optional - unspecified subagents inherit from marvin\n */\nexport const SubagentModelsSchema = z.object({\n // TDD agents\n red: SubagentModelSchema.optional().describe(\"Model for TDD red phase agent\"),\n green: SubagentModelSchema.optional().describe(\"Model for TDD green phase agent\"),\n domain: SubagentModelSchema.optional().describe(\"Model for domain modeling agent\"),\n refactor: SubagentModelSchema.optional().describe(\"Model for refactoring agent\"),\n\n // Event modeling agents\n discovery: SubagentModelSchema.optional().describe(\n \"Model for discovery/domain exploration agent\"\n ),\n workflow: SubagentModelSchema.optional().describe(\"Model for workflow design agent\"),\n gwt: SubagentModelSchema.optional().describe(\"Model for GWT specification agent\"),\n \"model-checker\": SubagentModelSchema.optional().describe(\n \"Model for event model validation agent\"\n ),\n\n // Architecture agents\n architect: SubagentModelSchema.optional().describe(\"Model for architect agent\"),\n adr: SubagentModelSchema.optional().describe(\"Model for ADR creation agent\"),\n \"design-facilitator\": SubagentModelSchema.optional().describe(\n \"Model for design facilitation agent\"\n ),\n\n // Planning agents\n story: SubagentModelSchema.optional().describe(\"Model for story/issue planning agent\"),\n pm: SubagentModelSchema.optional().describe(\"Model for PM agent\"),\n analyst: SubagentModelSchema.optional().describe(\"Model for business analyst agent\"),\n\n // Review agents\n reviewer: SubagentModelSchema.optional().describe(\"Model for code reviewer agent\"),\n ux: SubagentModelSchema.optional().describe(\"Model for UX review agent\"),\n mutation: SubagentModelSchema.optional().describe(\"Model for mutation testing agent\"),\n});\n\n/**\n * Schema for agent model assignments\n */\nexport const ModelsSchema = z.object({\n marvin: z.string().describe(\"Model for main orchestrator agent\"),\n oracle: z.string().describe(\"Model for debugging/reasoning agent\"),\n librarian: z.string().describe(\"Model for research/documentation agent\"),\n frontend: z.string().optional().describe(\"Model for UI/UX agent\"),\n documentWriter: z.string().optional().describe(\"Model for documentation generation agent\"),\n multimodalLooker: z.string().optional().describe(\"Model for image analysis agent\"),\n // New v1.0.0 field for subagent models\n subagents: SubagentModelsSchema.optional().describe(\"Per-subagent model overrides\"),\n settings: z\n .object({\n marvin: AgentSettingsSchema.optional(),\n oracle: AgentSettingsSchema.optional(),\n librarian: AgentSettingsSchema.optional(),\n frontend: AgentSettingsSchema.optional(),\n documentWriter: AgentSettingsSchema.optional(),\n multimodalLooker: AgentSettingsSchema.optional(),\n overrides: z.record(z.string(), AgentSettingsSchema).optional(),\n })\n .optional(),\n custom: z.array(CustomModelDefinitionSchema).optional(),\n});\n\n/**\n * Complete SDLC configuration schema (v1.0.0+)\n *\n * Supports transitional state:\n * - New fields (github, tdd, eventModeling, git, modes, memory) are optional during migration\n * - Old field (bmad) is optional and deprecated\n * - Features/MCPs support both old and new structures via union\n */\nexport const SdlcConfigSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n subscriptions: SubscriptionSchema,\n models: ModelsSchema,\n // New v1.0.0 configuration\n modes: ModesConfigSchema.optional(),\n memory: MemoryConfigSchema.optional(),\n // New v0.3.0+ configuration (optional during migration)\n github: GitHubConfigSchema.optional(),\n tdd: TddConfigSchema.optional(),\n eventModeling: EventModelingConfigSchema.optional(),\n git: GitConfigSchema.optional(),\n // Legacy BMAD configuration (deprecated, optional for backward compatibility)\n bmad: LegacyBmadConfigSchema.optional(),\n // Features and MCPs support both old and new structures\n features: z.union([FeaturesSchema, LegacyFeaturesSchema]),\n mcps: z.union([McpsSchema, LegacyMcpsSchema]),\n routing: RoutingConfigSchema,\n});\n\n/**\n * @deprecated Alias for backward compatibility. Use LegacyBmadConfigSchema directly.\n */\nexport const BmadConfigSchema = LegacyBmadConfigSchema;\n\n// ============================================================================\n// Tool Argument Schemas\n// ============================================================================\n\n/**\n * Schema for sdlc_get_issue arguments\n */\nexport const GetIssueArgsSchema = z.object({\n issueNumber: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\"Specific GitHub issue number. If omitted, loads the next issue in Ready status.\"),\n});\n\n/**\n * Schema for sdlc_update_issue_status arguments\n */\nexport const UpdateIssueStatusArgsSchema = z.object({\n issueNumber: z.number().int().positive().describe(\"GitHub issue number\"),\n status: z.string().describe(\"New status (must match a column name in GitHub project statuses)\"),\n});\n\n/**\n * Schema for sdlc_list_issues arguments\n */\nexport const ListIssuesArgsSchema = z.object({\n status: z.string().optional().describe(\"Filter by status column name\"),\n limit: z.number().int().positive().optional().default(20).describe(\"Max issues to return\"),\n});\n\n/**\n * Schema for sdlc_get_context arguments\n */\nexport const GetContextArgsSchema = z.object({});\n\n/**\n * Schema for sdlc_parallel arguments\n */\nexport const ParallelArgsSchema = z.object({\n issueNumbers: z.array(z.number()).describe(\"Array of issue numbers to implement in parallel\"),\n maxConcurrent: z.number().int().min(1).max(5).optional().default(3),\n});\n\n/**\n * Schema for sdlc_config arguments\n */\nexport const ConfigArgsSchema = z.object({\n action: z.enum([\"get\", \"set\", \"reset\"]).describe(\"Configuration action to perform\"),\n key: z\n .string()\n .optional()\n .describe(\"Configuration key (dot notation, e.g., 'bmad.autoStatusUpdate')\"),\n value: z.unknown().optional().describe(\"Value to set (for 'set' action)\"),\n});\n\n// ============================================================================\n// Type Exports (inferred from schemas)\n// ============================================================================\n\n// Core configuration types\nexport type SubscriptionConfig = z.infer<typeof SubscriptionSchema>;\nexport type ModelsConfig = z.infer<typeof ModelsSchema>;\nexport type RoutingConfigValidated = z.infer<typeof RoutingConfigSchema>;\nexport type SdlcConfigValidated = z.infer<typeof SdlcConfigSchema>;\n\n// New v0.3.0 configuration types\nexport type GitHubConfigValidated = z.infer<typeof GitHubConfigSchema>;\nexport type GitHubStatusValidated = z.infer<typeof GitHubStatusSchema>;\nexport type TddConfigValidated = z.infer<typeof TddConfigSchema>;\nexport type TddVerbosityValidated = z.infer<typeof TddVerbositySchema>;\nexport type MutationTestingConfigValidated = z.infer<typeof MutationTestingConfigSchema>;\nexport type EventModelingConfigValidated = z.infer<typeof EventModelingConfigSchema>;\nexport type GitConfigValidated = z.infer<typeof GitConfigSchema>;\nexport type GitWorkflowValidated = z.infer<typeof GitWorkflowSchema>;\nexport type FeaturesConfig = z.infer<typeof FeaturesSchema>;\nexport type McpsConfig = z.infer<typeof McpsSchema>;\n\n// New v1.0.0 configuration types\nexport type SdlcMode = z.infer<typeof SdlcModeSchema>;\nexport type ModesConfigValidated = z.infer<typeof ModesConfigSchema>;\nexport type MemoryBackend = z.infer<typeof MemoryBackendSchema>;\nexport type MemoryConfigValidated = z.infer<typeof MemoryConfigSchema>;\nexport type SubagentModel = z.infer<typeof SubagentModelSchema>;\nexport type SubagentModelsConfigValidated = z.infer<typeof SubagentModelsSchema>;\n\n// Legacy/deprecated types (for backward compatibility)\n/** @deprecated Use GitHubConfigValidated instead */\nexport type BmadConfig = z.infer<typeof LegacyBmadConfigSchema>;\n","/**\n * Input validators\n *\n * Validation functions for CLI inputs and configuration.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { SdlcConfigSchema } from \"../../shared/schemas.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\n\n/**\n * Validation result structure\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Validate an Sdlc configuration object\n */\nexport function validateSdlcConfig(config: unknown): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const parseResult = SdlcConfigSchema.safeParse(config);\n\n if (!parseResult.success) {\n result.valid = false;\n for (const issue of parseResult.error.issues) {\n result.errors.push(`${issue.path.join(\".\")}: ${issue.message}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a JSON configuration file\n */\nexport function validateJsonConfig(path: string): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n if (!existsSync(path)) {\n result.valid = false;\n result.errors.push(\"File does not exist\");\n return result;\n }\n\n try {\n const content = readFileSync(path, \"utf-8\");\n JSON.parse(content);\n } catch (err) {\n result.valid = false;\n result.errors.push(err instanceof Error ? err.message : \"Invalid JSON\");\n }\n\n return result;\n}\n\n/**\n * Validate model selection based on available providers\n */\nexport function validateModelForProvider(\n model: string,\n providers: { claude: boolean; openai: boolean; google: boolean; githubCopilot?: boolean }\n): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const modelLower = model.toLowerCase();\n\n const isGitHubCopilot = modelLower.startsWith(\"github-copilot/\");\n\n if (isGitHubCopilot) {\n if (!providers.githubCopilot) {\n result.valid = false;\n result.errors.push(\n \"GitHub Copilot model selected but GitHub Copilot provider is not enabled\"\n );\n }\n return result;\n }\n\n const claudeModels = [\"claude\", \"opus\", \"sonnet\", \"haiku\"];\n const openaiModels = [\"gpt\", \"o1\", \"o3\"];\n const googleModels = [\"gemini\", \"palm\"];\n\n const isClaude = claudeModels.some((m) => modelLower.includes(m));\n const isOpenAI = openaiModels.some((m) => modelLower.includes(m));\n const isGoogle = googleModels.some((m) => modelLower.includes(m));\n\n if (isClaude && !providers.claude) {\n result.valid = false;\n result.errors.push(\"Claude model selected but Claude provider is not enabled\");\n }\n\n if (isOpenAI && !providers.openai) {\n result.valid = false;\n result.errors.push(\"OpenAI model selected but OpenAI provider is not enabled\");\n }\n\n if (isGoogle && !providers.google) {\n result.valid = false;\n result.errors.push(\"Google model selected but Google provider is not enabled\");\n }\n\n return result;\n}\n\n/**\n * Check if Sdlc config has all required agent models configured\n */\nexport function validateAgentModels(config: SdlcConfig): ValidationResult {\n const result: ValidationResult = { valid: true, errors: [], warnings: [] };\n\n const requiredAgents = [\"marvin\", \"oracle\", \"librarian\"];\n\n const models = (config as SdlcConfig & { models?: Record<string, string> }).models || {};\n\n for (const agent of requiredAgents) {\n if (!models[agent]) {\n result.warnings.push(`No model configured for agent: ${agent}`);\n }\n }\n\n return result;\n}\n\n/**\n * Validate a preset name\n */\nexport function isValidPreset(preset: string): boolean {\n const validPresets = [\"minimal\", \"standard\", \"enterprise\", \"solo-quick\", \"copilot-only\"];\n return validPresets.includes(preset);\n}\n\n/**\n * Sanitize a string for use in filenames\n */\nexport function sanitizeFilename(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9_-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n .toLowerCase();\n}\n","/**\n * Doctor command\n *\n * Diagnose and fix common issues with OpenCode SDLC installation.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { DoctorOptions, SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkOhMyOpenCode, checkPrerequisites, validateJsonFile } from \"../utils/prerequisites.js\";\nimport { validateJsonConfig, validateSdlcConfig } from \"../utils/validators.js\";\n\ninterface DiagnosticResult {\n name: string;\n status: \"pass\" | \"warn\" | \"fail\";\n message: string;\n fix?: () => Promise<void>;\n}\n\ninterface CopilotAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkCopilotAuth(): CopilotAuthResult {\n try {\n const result = execSync(\"opencode auth status github-copilot 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n const isAuthenticated =\n result.toLowerCase().includes(\"authenticated\") ||\n result.toLowerCase().includes(\"logged in\") ||\n !result.toLowerCase().includes(\"not\");\n return { authenticated: isAuthenticated };\n } catch {\n return { authenticated: false, message: \"Could not check auth status\" };\n }\n}\n\ninterface GitHubCliAuthResult {\n authenticated: boolean;\n message?: string;\n}\n\nfunction checkGitHubCliAuth(): GitHubCliAuthResult {\n try {\n execSync(\"gh auth status 2>&1\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return { authenticated: true };\n } catch {\n return { authenticated: false, message: \"Not authenticated - run 'gh auth login'\" };\n }\n}\n\nfunction checkMementoMcp(): boolean {\n try {\n // Check if memento is available as an MCP server\n execSync(\"which memento 2>/dev/null || command -v memento 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n // Also check if it's configured as an npm package\n const opencodeConfigDir = CONFIG_PATHS.globalConfigDir;\n const nodeModulesPath = `${opencodeConfigDir}/node_modules/@anthropic/mcp-memento`;\n return existsSync(nodeModulesPath);\n }\n}\n\nfunction checkGitSpice(): boolean {\n try {\n execSync(\"which gs 2>/dev/null || command -v gs 2>/dev/null\", {\n encoding: \"utf-8\",\n timeout: 5000,\n });\n return true;\n } catch {\n return false;\n }\n}\n\ninterface ProjectBoardAccessResult {\n accessible: boolean;\n message?: string;\n}\n\nasync function checkProjectBoardAccess(\n owner: string,\n projectNumber: number\n): Promise<ProjectBoardAccessResult> {\n try {\n execSync(`gh project view ${projectNumber} --owner ${owner} 2>&1`, {\n encoding: \"utf-8\",\n timeout: 10000,\n });\n return { accessible: true };\n } catch (error) {\n const message =\n error instanceof Error && error.message.includes(\"not found\")\n ? `Project #${projectNumber} not found for ${owner}`\n : \"Cannot access project board - check permissions\";\n return { accessible: false, message };\n }\n}\n\n/**\n * Main doctor command handler\n */\nexport async function doctor(options: DoctorOptions): Promise<void> {\n logger.banner();\n logger.section(\"Running Diagnostics\");\n\n const results: DiagnosticResult[] = [];\n const fileManager = new FileManager();\n\n // Check 1: Node.js version\n const prereqs = await checkPrerequisites();\n\n results.push({\n name: \"Node.js\",\n status: prereqs.node.installed ? (prereqs.node.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.node.installed\n ? prereqs.node.compatible\n ? `Version ${prereqs.node.version} is compatible`\n : `Version ${prereqs.node.version} detected, 20+ recommended`\n : \"Not installed\",\n });\n\n // Check 2: OpenCode installation\n results.push({\n name: \"OpenCode\",\n status: prereqs.opencode.installed ? (prereqs.opencode.compatible ? \"pass\" : \"warn\") : \"fail\",\n message: prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? `Version ${prereqs.opencode.version} is compatible`\n : `Version ${prereqs.opencode.version} detected, 1.0.132+ recommended`\n : \"Not installed\",\n });\n\n // Check 3: Sdlc config exists and is valid\n const sdlcConfigValid = validateJsonFile(CONFIG_PATHS.globalSdlcConfig);\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig);\n const schemaValidation = validateSdlcConfig(config);\n results.push({\n name: \"Sdlc Config\",\n status: schemaValidation.valid ? \"pass\" : \"warn\",\n message: schemaValidation.valid\n ? \"Valid configuration\"\n : `Schema issues: ${schemaValidation.errors.join(\", \")}`,\n });\n } else {\n results.push({\n name: \"Sdlc Config\",\n status: \"fail\",\n message: sdlcConfigValid.error || \"Not found\",\n fix: async () => {\n logger.info(\"Run 'opencode-sdlc install' to create configuration\");\n },\n });\n }\n\n // Check 4: OpenCode config exists and is valid\n const opencodeConfigValid = validateJsonConfig(CONFIG_PATHS.globalOpencodeConfig);\n results.push({\n name: \"OpenCode Config\",\n status: opencodeConfigValid.valid ? \"pass\" : \"fail\",\n message: opencodeConfigValid.valid ? \"Valid JSON\" : opencodeConfigValid.errors[0] || \"Invalid\",\n });\n\n // Check 5: oh-my-opencode config exists and is valid\n const omoConfigValid = validateJsonConfig(CONFIG_PATHS.globalOmoConfig);\n results.push({\n name: \"oh-my-opencode Config\",\n status: omoConfigValid.valid ? \"pass\" : \"warn\",\n message: omoConfigValid.valid ? \"Valid JSON\" : omoConfigValid.errors[0] || \"Not found\",\n });\n\n // Check 6: oh-my-opencode is installed\n const omoInstalled = await checkOhMyOpenCode();\n results.push({\n name: \"oh-my-opencode Plugin\",\n status: omoInstalled.installed ? \"pass\" : \"fail\",\n message: omoInstalled.installed ? `Version ${omoInstalled.version}` : \"Not installed\",\n fix: async () => {\n const spinner = ora(\"Installing oh-my-opencode...\").start();\n try {\n await fileManager.installDependencies([\"oh-my-opencode\"]);\n spinner.succeed(\"oh-my-opencode installed\");\n } catch (err) {\n spinner.fail(\"Failed to install oh-my-opencode\");\n throw err;\n }\n },\n });\n\n // Check 7: Config version freshness\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const configVersion = config.version || \"0.0.0\";\n const isCurrentVersion = configVersion === VERSION;\n results.push({\n name: \"Config Version\",\n status: isCurrentVersion ? \"pass\" : \"warn\",\n message: isCurrentVersion\n ? `Version ${configVersion} is current`\n : `Version ${configVersion} may be outdated (current: ${VERSION})`,\n });\n }\n\n // Check 9: GitHub Copilot auth status (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.subscriptions?.githubCopilot?.enabled) {\n const copilotAuthResult = checkCopilotAuth();\n results.push({\n name: \"GitHub Copilot Auth\",\n status: copilotAuthResult.authenticated ? \"pass\" : \"warn\",\n message: copilotAuthResult.authenticated\n ? \"Authenticated\"\n : copilotAuthResult.message ||\n \"Not authenticated - run 'opencode auth login github-copilot'\",\n });\n }\n }\n\n // Check 10: GitHub CLI authentication (if GitHub integration enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.owner) {\n const ghAuthResult = checkGitHubCliAuth();\n results.push({\n name: \"GitHub CLI Auth\",\n status: ghAuthResult.authenticated ? \"pass\" : \"warn\",\n message: ghAuthResult.authenticated\n ? \"Authenticated\"\n : ghAuthResult.message || \"Not authenticated - run 'gh auth login'\",\n });\n }\n }\n\n // Check 11: Memento MCP availability (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n const mcps = config.mcps as { memento?: boolean };\n if (mcps?.memento) {\n const mementoAvailable = checkMementoMcp();\n results.push({\n name: \"Memento MCP\",\n status: mementoAvailable ? \"pass\" : \"warn\",\n message: mementoAvailable\n ? \"Available\"\n : \"Memento MCP not found - persistent memory may not work\",\n });\n }\n }\n\n // Check 12: git-spice installation (if enabled)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.git?.workflow === \"git-spice\") {\n const gitSpiceInstalled = checkGitSpice();\n results.push({\n name: \"git-spice\",\n status: gitSpiceInstalled ? \"pass\" : \"fail\",\n message: gitSpiceInstalled\n ? \"Installed\"\n : \"git-spice not found - install via 'go install go.abhg.dev/gs@latest' or 'brew install git-spice'\",\n });\n }\n }\n\n // Check 13: GitHub Project board accessibility (if configured)\n if (sdlcConfigValid.valid) {\n const config = fileManager.readJsonFile(CONFIG_PATHS.globalSdlcConfig) as SdlcConfig;\n if (config.github?.project && config.github?.owner) {\n const projectAccessible = await checkProjectBoardAccess(\n config.github.owner,\n config.github.project\n );\n results.push({\n name: \"Project Board Access\",\n status: projectAccessible.accessible ? \"pass\" : \"warn\",\n message: projectAccessible.accessible\n ? `Project #${config.github.project} accessible`\n : projectAccessible.message || \"Cannot access project board\",\n });\n }\n }\n\n // Display results\n logger.section(\"Diagnostic Results\");\n\n let hasFailures = false;\n let hasWarnings = false;\n const fixableIssues: DiagnosticResult[] = [];\n\n for (const result of results) {\n let icon: string;\n let color: (s: string) => string;\n\n switch (result.status) {\n case \"pass\":\n icon = \"✓\";\n color = chalk.green;\n break;\n case \"warn\":\n icon = \"!\";\n color = chalk.yellow;\n hasWarnings = true;\n break;\n case \"fail\":\n icon = \"✖\";\n color = chalk.red;\n hasFailures = true;\n if (result.fix) {\n fixableIssues.push(result);\n }\n break;\n }\n\n console.log(` ${color(icon)} ${result.name}: ${result.message}`);\n }\n\n console.log();\n\n // Summary\n if (hasFailures) {\n logger.error(\"Some checks failed.\");\n\n if (fixableIssues.length > 0 && options.fix) {\n logger.section(\"Applying Fixes\");\n\n for (const issue of fixableIssues) {\n if (issue.fix) {\n try {\n await issue.fix();\n } catch (err) {\n logger.error(\n `Failed to fix ${issue.name}: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n }\n\n logger.blank();\n logger.info(\"Run 'opencode-sdlc doctor' again to verify fixes.\");\n } else if (fixableIssues.length > 0) {\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc doctor --fix\")} to attempt automatic fixes.`);\n }\n } else if (hasWarnings) {\n logger.warn(\"Some checks have warnings, but Sdlc should work.\");\n } else {\n logger.success(\"All checks passed! OpenCode SDLC is healthy.\");\n }\n}\n","/**\n * Info command\n *\n * Display current configuration and status.\n */\n\nimport chalk from \"chalk\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { SdlcConfig } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkPrerequisites, getInstalledPlugins } from \"../utils/prerequisites.js\";\n\n/**\n * Main info command handler\n */\nexport async function info(): Promise<void> {\n logger.banner();\n\n const fileManager = new FileManager();\n\n // Load Sdlc config\n const sdlcConfig = fileManager.readJsonFile<SdlcConfig>(CONFIG_PATHS.globalSdlcConfig);\n\n if (!sdlcConfig) {\n logger.warn(\"OpenCode SDLC is not installed.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to get started.`);\n return;\n }\n\n // Version info\n logger.section(\"Version Information\");\n logger.keyValue(\"Sdlc Version\", sdlcConfig.version || VERSION);\n\n // Prerequisites\n logger.section(\"Prerequisites\");\n const prereqs = await checkPrerequisites();\n\n const nodeStatus = prereqs.node.installed\n ? prereqs.node.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"Node.js\", `${nodeStatus} ${prereqs.node.version || \"not found\"}`);\n\n const opencodeStatus = prereqs.opencode.installed\n ? prereqs.opencode.compatible\n ? chalk.green(\"✓\")\n : chalk.yellow(\"!\")\n : chalk.red(\"✖\");\n logger.keyValue(\"OpenCode\", `${opencodeStatus} ${prereqs.opencode.version || \"not found\"}`);\n\n // Subscriptions\n logger.section(\"Configured Providers\");\n\n const claudeStatus = sdlcConfig.subscriptions.claude.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Claude\",\n `${claudeStatus}${sdlcConfig.subscriptions.claude.tier !== \"none\" ? ` (${sdlcConfig.subscriptions.claude.tier})` : \"\"}`\n );\n\n const openaiStatus = sdlcConfig.subscriptions.openai.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\"OpenAI\", openaiStatus);\n\n const googleStatus = sdlcConfig.subscriptions.google.enabled\n ? chalk.green(\"enabled\")\n : chalk.gray(\"disabled\");\n logger.keyValue(\n \"Google\",\n `${googleStatus}${sdlcConfig.subscriptions.google.authMethod !== \"none\" ? ` (${sdlcConfig.subscriptions.google.authMethod})` : \"\"}`\n );\n\n // Models\n logger.section(\"Agent Models\");\n logger.keyValue(\"Marvin\", sdlcConfig.models.marvin);\n logger.keyValue(\"Oracle\", sdlcConfig.models.oracle);\n logger.keyValue(\"Librarian\", sdlcConfig.models.librarian);\n if (sdlcConfig.models.frontend) {\n logger.keyValue(\"Frontend\", sdlcConfig.models.frontend);\n }\n if (sdlcConfig.models.documentWriter) {\n logger.keyValue(\"Doc Writer\", sdlcConfig.models.documentWriter);\n }\n if (sdlcConfig.models.multimodalLooker) {\n logger.keyValue(\"Multimodal\", sdlcConfig.models.multimodalLooker);\n }\n\n // Work Tracking Configuration\n if (sdlcConfig.github) {\n logger.section(\"GitHub Issues Integration\");\n logger.keyValue(\"Owner\", sdlcConfig.github.owner);\n logger.keyValue(\"Repository\", sdlcConfig.github.repo);\n if (sdlcConfig.github.project) {\n logger.keyValue(\"Project #\", sdlcConfig.github.project.toString());\n }\n } else if (sdlcConfig.bmad) {\n // Legacy BMAD settings\n logger.section(\"BMAD Settings (Legacy)\");\n logger.keyValue(\"Default Track\", sdlcConfig.bmad.defaultTrack);\n logger.keyValue(\"Auto Status Update\", sdlcConfig.bmad.autoStatusUpdate ? \"yes\" : \"no\");\n logger.keyValue(\"Parallel Issue Limit\", sdlcConfig.bmad.parallelIssueLimit.toString());\n }\n\n // TDD Configuration\n if (sdlcConfig.tdd) {\n logger.section(\"TDD Configuration\");\n logger.keyValue(\"Enabled\", sdlcConfig.tdd.enabled ? \"yes\" : \"no\");\n logger.keyValue(\"Verbosity\", sdlcConfig.tdd.verbosity);\n if (sdlcConfig.tdd.mutationTesting?.enabled) {\n logger.keyValue(\n \"Mutation Testing\",\n `${sdlcConfig.tdd.mutationTesting.requiredScore}% required`\n );\n }\n }\n\n // Event Modeling Configuration\n if (sdlcConfig.eventModeling) {\n logger.section(\"Event Modeling\");\n logger.keyValue(\"Enabled\", sdlcConfig.eventModeling.enabled ? \"yes\" : \"no\");\n if (sdlcConfig.eventModeling.enabled) {\n logger.keyValue(\"Output Path\", sdlcConfig.eventModeling.outputPath);\n }\n }\n\n // Git Workflow Configuration\n if (sdlcConfig.git) {\n logger.section(\"Git Workflow\");\n logger.keyValue(\"Workflow\", sdlcConfig.git.workflow);\n logger.keyValue(\"Require Clean\", sdlcConfig.git.requireClean ? \"yes\" : \"no\");\n logger.keyValue(\"Worktrees\", sdlcConfig.git.worktrees ? \"yes\" : \"no\");\n }\n\n // Features\n logger.section(\"Features\");\n const features = sdlcConfig.features;\n\n // Check if using new or legacy features structure\n const isNewFeatures = \"orchestratorOnly\" in features;\n\n const featureList = isNewFeatures\n ? [\n {\n name: \"Orchestrator Only\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).orchestratorOnly,\n },\n {\n name: \"Todo Sync\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).todoSync,\n },\n {\n name: \"Party Review\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).partyReview,\n },\n {\n name: \"Debugging Protocol\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).debuggingProtocol,\n },\n {\n name: \"Memento\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).memento,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).notifications,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").SdlcFeatures).lspTools,\n },\n ]\n : [\n {\n name: \"BMAD Bridge\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).bmadBridge,\n },\n {\n name: \"Auto Status\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).autoStatus,\n },\n {\n name: \"Parallel Exec\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).parallelExecution,\n },\n {\n name: \"Notifications\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).notifications,\n },\n {\n name: \"Context Monitor\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).contextMonitor,\n },\n {\n name: \"Comment Checker\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).commentChecker,\n },\n {\n name: \"LSP Tools\",\n enabled: (features as import(\"../../shared/types.js\").LegacyFeatures).lspTools,\n },\n ];\n\n for (const feature of featureList) {\n const status = feature.enabled ? chalk.green(\"on\") : chalk.gray(\"off\");\n logger.keyValue(feature.name, status);\n }\n\n // MCPs\n logger.section(\"MCP Servers\");\n const mcps = sdlcConfig.mcps;\n logger.keyValue(\"context7\", mcps.context7 ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"exa\", mcps.exa ? chalk.green(\"on\") : chalk.gray(\"off\"));\n logger.keyValue(\"grep_app\", mcps.grepApp ? chalk.green(\"on\") : chalk.gray(\"off\"));\n if (\"memento\" in mcps) {\n logger.keyValue(\n \"memento\",\n (mcps as import(\"../../shared/types.js\").McpConfig).memento\n ? chalk.green(\"on\")\n : chalk.gray(\"off\")\n );\n }\n\n // Installed plugins\n logger.section(\"Installed Plugins\");\n const plugins = await getInstalledPlugins();\n\n if (Object.keys(plugins).length === 0) {\n logger.info(\"No plugins installed in OpenCode config directory\");\n } else {\n for (const [name, version] of Object.entries(plugins)) {\n logger.keyValue(name, version);\n }\n }\n\n // Configuration paths\n logger.section(\"Configuration Paths\");\n logger.keyValue(\"Config Dir\", CONFIG_PATHS.globalConfigDir);\n logger.keyValue(\"Sdlc Config\", CONFIG_PATHS.globalSdlcConfig);\n\n console.log();\n}\n","import type { AgentRole, AgentSettings, SdlcConfig, ThinkingLevel } from \"../../shared/types.js\";\n\ntype ModelFamily = \"claude-thinking\" | \"claude\" | \"gpt-reasoning\" | \"gpt\" | \"gemini\" | \"copilot\";\n\nconst MODEL_FAMILY_BASE_TEMPS: Record<ModelFamily, number> = {\n \"claude-thinking\": 0.3,\n claude: 0.2,\n \"gpt-reasoning\": 0.2,\n gpt: 0.3,\n gemini: 0.3,\n copilot: 0.25,\n};\n\nconst ROLE_TEMP_ADJUSTMENTS: Record<AgentRole, number> = {\n oracle: -0.1,\n marvin: 0.0,\n librarian: 0.1,\n frontend: 0.2,\n documentWriter: 0.1,\n multimodalLooker: -0.1,\n explore: -0.1,\n};\n\nconst ROLE_DEFAULT_THINKING: Record<AgentRole, ThinkingLevel> = {\n oracle: \"high\",\n marvin: \"medium\",\n librarian: \"low\",\n frontend: \"low\",\n documentWriter: \"low\",\n multimodalLooker: \"off\",\n explore: \"off\",\n};\n\ninterface ModelCapabilities {\n supportsTemperature: boolean;\n supportsThinking: boolean;\n thinkingType?: \"anthropic\" | \"openai\" | \"google\";\n}\n\nconst MODEL_CAPABILITIES: Record<string, Partial<ModelCapabilities>> = {\n \"anthropic/claude-sonnet-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-opus-4-5-thinking\": {\n supportsThinking: true,\n thinkingType: \"anthropic\",\n supportsTemperature: false,\n },\n \"anthropic/claude-sonnet-4-5\": { supportsTemperature: true },\n \"anthropic/claude-opus-4-5\": { supportsTemperature: true },\n \"openai/gpt-5.1-high\": { supportsThinking: true, thinkingType: \"openai\" },\n \"openai/gpt-5.1\": { supportsTemperature: false },\n \"openai/gpt-5.2\": { supportsTemperature: false },\n \"openai/gpt-4o\": { supportsTemperature: true },\n \"google/gemini-2.5-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-2.5-flash\": { supportsTemperature: true },\n \"google/gemini-3-pro\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n \"google/gemini-3-flash\": {\n supportsTemperature: true,\n supportsThinking: true,\n thinkingType: \"google\",\n },\n};\n\nconst COPILOT_DEFAULTS: Partial<ModelCapabilities> = {\n supportsTemperature: false,\n supportsThinking: false,\n};\n\nfunction getModelFamily(modelId: string): ModelFamily {\n if (modelId.startsWith(\"github-copilot/\")) return \"copilot\";\n if (modelId.includes(\"thinking\")) return \"claude-thinking\";\n if (modelId.includes(\"claude\")) return \"claude\";\n if (modelId.includes(\"gpt-5.1-high\") || modelId.includes(\"o3\") || modelId.includes(\"o1\")) {\n return \"gpt-reasoning\";\n }\n if (modelId.includes(\"gpt\")) return \"gpt\";\n if (modelId.includes(\"gemini\")) return \"gemini\";\n return \"claude\";\n}\n\n/**\n * Get the maximum allowed temperature for a model based on its provider.\n * - Anthropic: 0.0-1.0\n * - OpenAI: 0.0-2.0\n * - Google: 0.0-2.0\n * - Copilot: temperature not supported\n */\nfunction getMaxTemperatureForModel(modelId: string): number {\n if (modelId.startsWith(\"anthropic/\") || modelId.includes(\"claude\")) {\n return 1.0;\n }\n if (modelId.startsWith(\"openai/\") || modelId.includes(\"gpt\")) {\n return 2.0;\n }\n if (modelId.startsWith(\"google/\") || modelId.includes(\"gemini\")) {\n return 2.0;\n }\n // Default to conservative 1.0 for unknown providers\n return 1.0;\n}\n\nfunction getModelCapabilities(modelId: string): ModelCapabilities {\n const known = MODEL_CAPABILITIES[modelId];\n if (known) {\n return {\n supportsTemperature: known.supportsTemperature ?? true,\n supportsThinking: known.supportsThinking ?? false,\n thinkingType: known.thinkingType,\n };\n }\n\n if (modelId.startsWith(\"github-copilot/\")) {\n return {\n supportsTemperature: COPILOT_DEFAULTS.supportsTemperature ?? false,\n supportsThinking: COPILOT_DEFAULTS.supportsThinking ?? false,\n };\n }\n\n return { supportsTemperature: true, supportsThinking: false };\n}\n\nexport function getEffectiveTemperature(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): number | undefined {\n const roleOverride = config.models.settings?.[role]?.temperature;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.temperature;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsTemperature) return undefined;\n\n const family = getModelFamily(modelId);\n const baseTemp = MODEL_FAMILY_BASE_TEMPS[family];\n const adjustment = ROLE_TEMP_ADJUSTMENTS[role];\n const maxTemp = getMaxTemperatureForModel(modelId);\n\n return Math.max(0, Math.min(maxTemp, baseTemp + adjustment));\n}\n\nexport function getEffectiveThinkingLevel(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ThinkingLevel | undefined {\n const roleOverride = config.models.settings?.[role]?.thinkingLevel;\n if (roleOverride !== undefined) return roleOverride;\n\n const modelOverride = config.models.settings?.overrides?.[modelId]?.thinkingLevel;\n if (modelOverride !== undefined) return modelOverride;\n\n const capabilities = getModelCapabilities(modelId);\n if (!capabilities.supportsThinking) return undefined;\n\n return ROLE_DEFAULT_THINKING[role];\n}\n\nexport interface ProviderParams {\n temperature?: number;\n reasoning_effort?: \"low\" | \"medium\" | \"high\";\n thinking_budget?: number;\n thinking_level?: \"low\" | \"medium\" | \"high\";\n}\n\nexport function getProviderParams(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): ProviderParams {\n const result: ProviderParams = {};\n\n const temperature = getEffectiveTemperature(modelId, role, config);\n if (temperature !== undefined) {\n result.temperature = temperature;\n }\n\n const thinkingLevel = getEffectiveThinkingLevel(modelId, role, config);\n if (thinkingLevel && thinkingLevel !== \"off\") {\n const capabilities = getModelCapabilities(modelId);\n\n switch (capabilities.thinkingType) {\n case \"openai\":\n result.reasoning_effort = thinkingLevel;\n break;\n case \"anthropic\":\n result.thinking_budget = thinkingLevelToTokenBudget(thinkingLevel);\n if (result.temperature !== undefined) {\n const { temperature: _, ...rest } = result;\n return rest as ProviderParams;\n }\n break;\n case \"google\":\n result.thinking_level = thinkingLevel;\n break;\n }\n }\n\n return result;\n}\n\nfunction thinkingLevelToTokenBudget(level: ThinkingLevel): number {\n switch (level) {\n case \"low\":\n return 4096;\n case \"medium\":\n return 16384;\n case \"high\":\n return 32768;\n default:\n return 0;\n }\n}\n\nexport function getAgentSettings(\n modelId: string,\n role: AgentRole,\n config: SdlcConfig\n): AgentSettings {\n return {\n temperature: getEffectiveTemperature(modelId, role, config),\n thinkingLevel: getEffectiveThinkingLevel(modelId, role, config),\n };\n}\n\nexport function modelSupportsTemperature(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsTemperature;\n}\n\nexport function modelSupportsThinking(modelId: string): boolean {\n return getModelCapabilities(modelId).supportsThinking;\n}\n","/**\n * oh-my-opencode config generator\n *\n * Generates the oh-my-opencode.json configuration file.\n */\n\nimport { getProviderParams } from \"../../plugin/utils/model-params.js\";\nimport type { AgentRole, InstallAnswers, SdlcConfig } from \"../../shared/types.js\";\n\nfunction buildMinimalConfig(answers: InstallAnswers): SdlcConfig {\n const { subscriptions, models, methodology, features, advanced } = answers;\n\n const providerPriority: (\"anthropic\" | \"openai\" | \"google\" | \"github-copilot\")[] = [];\n if (subscriptions.hasClaude) providerPriority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) providerPriority.push(\"openai\");\n if (subscriptions.hasGoogle) providerPriority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) providerPriority.push(\"github-copilot\");\n\n if (providerPriority.length === 0) {\n providerPriority.push(\"anthropic\", \"openai\", \"google\", \"github-copilot\");\n }\n\n return {\n version: \"0.4.0\",\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth || \"none\",\n tier: subscriptions.claudeTier || \"none\",\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth || \"none\",\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth || \"none\",\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n enabledModels: subscriptions.copilotEnabledModels,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n settings: models.settings,\n custom: models.custom,\n },\n bmad: {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit || 0,\n },\n features: {\n bmadBridge: true,\n autoStatus: features.enabledFeatures.includes(\"auto-status\"),\n parallelExecution: features.enabledFeatures.includes(\"parallel\"),\n notifications: features.enabledFeatures.includes(\"notifications\"),\n contextMonitor: features.enabledFeatures.includes(\"context-monitor\"),\n commentChecker: features.enabledFeatures.includes(\"comment-checker\"),\n lspTools: features.enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: false,\n todoSync: true,\n },\n mcps: {\n context7: features.mcps.includes(\"context7\"),\n exa: features.mcps.includes(\"exa\"),\n grepApp: features.mcps.includes(\"grep_app\"),\n },\n routing: {\n providerPriority,\n modelFamilyPriority: {\n claude: providerPriority.filter((p) => p === \"anthropic\" || p === \"github-copilot\"),\n gpt: providerPriority.filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: providerPriority.filter((p) => p === \"google\" || p === \"github-copilot\"),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n },\n };\n}\n\n/**\n * Generate oh-my-opencode.json configuration\n */\nexport function generateOmoConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, features, advanced } = answers;\n const config: SdlcConfig = buildMinimalConfig(answers);\n\n const omoConfig: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json\",\n };\n\n // Google auth toggle - if using antigravity, disable built-in auth\n if (subscriptions.hasGoogle && subscriptions.googleAuth === \"antigravity\") {\n omoConfig.google_auth = false;\n }\n\n const agentConfigs: Array<{ role: AgentRole; omoName: string; modelId: string }> = [\n { role: \"marvin\", omoName: \"Marvin\", modelId: models.marvin },\n { role: \"oracle\", omoName: \"oracle\", modelId: models.oracle },\n { role: \"librarian\", omoName: \"librarian\", modelId: models.librarian },\n {\n role: \"frontend\",\n omoName: \"frontend-ui-ux-engineer\",\n modelId: models.frontend || models.marvin,\n },\n {\n role: \"documentWriter\",\n omoName: \"document-writer\",\n modelId: models.documentWriter || models.librarian,\n },\n {\n role: \"multimodalLooker\",\n omoName: \"multimodal-looker\",\n modelId: models.multimodalLooker || models.librarian,\n },\n { role: \"explore\", omoName: \"explore\", modelId: models.explore || models.librarian },\n ];\n\n omoConfig.agents = {};\n for (const { role, omoName, modelId } of agentConfigs) {\n const providerParams = getProviderParams(modelId, role, config);\n (omoConfig.agents as Record<string, unknown>)[omoName] = {\n model: modelId,\n ...providerParams,\n };\n }\n\n (omoConfig.agents as Record<string, unknown>).general = {\n model: models.oracle,\n ...getProviderParams(models.oracle, \"oracle\", config),\n };\n\n // Disabled hooks based on features\n const disabledHooks: string[] = [];\n\n if (!features.enabledFeatures.includes(\"context-monitor\")) {\n disabledHooks.push(\"context-window-monitor\");\n }\n if (!features.enabledFeatures.includes(\"comment-checker\")) {\n disabledHooks.push(\"comment-checker\");\n }\n if (!features.enabledFeatures.includes(\"notifications\")) {\n disabledHooks.push(\"session-notification\", \"background-notification\");\n }\n\n if (disabledHooks.length > 0) {\n omoConfig.disabled_hooks = disabledHooks;\n }\n\n // Disabled MCPs\n const allMcps = [\"context7\", \"websearch_exa\", \"grep_app\", \"memento\"];\n const enabledMcpIds = features.mcps.map((mcp) => {\n // Map feature names to MCP names\n if (mcp === \"exa\") return \"websearch_exa\";\n return mcp;\n });\n const disabledMcps = allMcps.filter((mcp) => !enabledMcpIds.includes(mcp));\n\n if (disabledMcps.length > 0) {\n omoConfig.disabled_mcps = disabledMcps;\n }\n\n // Experimental features\n if (advanced.experimental && advanced.experimental.length > 0) {\n omoConfig.experimental = {};\n\n if (advanced.experimental.includes(\"aggressive-truncation\")) {\n (omoConfig.experimental as Record<string, unknown>).aggressive_truncation = true;\n }\n if (advanced.experimental.includes(\"auto-resume\")) {\n (omoConfig.experimental as Record<string, unknown>).auto_resume = true;\n }\n }\n\n return omoConfig;\n}\n","/**\n * OpenCode config generator\n *\n * Generates and updates the opencode.json configuration file.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\n\n/**\n * Generate opencode.json configuration\n */\nexport async function generateOpencodeConfig(\n answers: InstallAnswers,\n configDir: string\n): Promise<Record<string, unknown>> {\n // Load existing config if present\n const configPath = join(configDir, \"opencode.json\");\n let existingConfig: Record<string, unknown> = {};\n\n if (existsSync(configPath)) {\n try {\n const content = readFileSync(configPath, \"utf-8\");\n existingConfig = JSON.parse(content);\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n // Build plugin array\n const plugins: string[] = [\"opencode-sdlc/plugin\", \"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 * Feature questions\n *\n * Gather feature toggle preferences.\n */\n\nimport { checkbox } from \"@inquirer/prompts\";\nimport type { FeatureAnswers } from \"../../shared/types.js\";\n\n/**\n * Default values for feature questions\n */\nexport interface FeatureDefaults {\n enabledFeatures?: string[];\n mcps?: string[];\n}\n\n/**\n * Available features with descriptions\n */\nconst AVAILABLE_FEATURES = [\n {\n name: \"BMAD Bridge Commands (/sdlc-dev, /sdlc-review, etc.)\",\n value: \"bmad-bridge\",\n },\n {\n name: \"Auto Sprint Status Updates - Update sprint-status.yaml automatically\",\n value: \"auto-status\",\n },\n {\n name: \"Parallel Story Execution - Work on multiple stories simultaneously\",\n value: \"parallel\",\n },\n {\n name: \"Session Notifications - Desktop notifications for completions\",\n value: \"notifications\",\n },\n {\n name: \"Context Window Monitoring - Track context usage\",\n value: \"context-monitor\",\n },\n {\n name: \"Comment Checker - Ensure code is not over-commented\",\n value: \"comment-checker\",\n },\n {\n name: \"LSP Refactoring Tools - Enable lsp_rename, lsp_find_references, etc.\",\n value: \"lsp-tools\",\n },\n {\n name: \"Auto Git Operations - Allow agents to commit/push/branch automatically (unchecked = requires explicit permission)\",\n value: \"auto-git-operations\",\n },\n];\n\n/**\n * All feature values for reference\n */\nconst ALL_FEATURE_VALUES = AVAILABLE_FEATURES.map((f) => f.value);\n\nconst FEATURES_ENABLED_BY_DEFAULT = ALL_FEATURE_VALUES.filter((f) => f !== \"auto-git-operations\");\n\n/**\n * New v0.3.0+ features with descriptions\n */\nconst AVAILABLE_NEW_FEATURES = [\n {\n name: \"Orchestrator-Only - Main conversation delegates file writes to agents\",\n value: \"orchestratorOnly\",\n },\n {\n name: \"Todo Sync - Auto-sync todos with GitHub issue checkboxes\",\n value: \"todoSync\",\n },\n {\n name: \"Party Review - Multi-stakeholder architecture reviews\",\n value: \"partyReview\",\n },\n {\n name: \"Debugging Protocol - Oracle-assisted debugging workflow\",\n value: \"debuggingProtocol\",\n },\n {\n name: \"Memento Integration - Persistent memory across sessions\",\n value: \"memento\",\n },\n {\n name: \"Notifications - In-TUI notifications\",\n value: \"notifications\",\n },\n {\n name: \"LSP Tools - Code intelligence tools\",\n value: \"lspTools\",\n },\n];\n\nconst NEW_FEATURES_ENABLED_BY_DEFAULT = [\n \"todoSync\",\n \"partyReview\",\n \"debuggingProtocol\",\n \"notifications\",\n \"lspTools\",\n];\n\n/**\n * Available MCP servers with descriptions\n */\nconst AVAILABLE_MCPS = [\n {\n name: \"context7 - Documentation lookup and context retrieval\",\n value: \"context7\",\n },\n {\n name: \"websearch_exa - Web search capabilities\",\n value: \"exa\",\n },\n {\n name: \"grep_app - GitHub code search\",\n value: \"grep_app\",\n },\n {\n name: \"memento - Persistent memory storage\",\n value: \"memento\",\n },\n];\n\n/**\n * All MCP values for reference\n */\nconst ALL_MCP_VALUES = AVAILABLE_MCPS.map((m) => m.value);\n\n/**\n * Create choices with checked state based on defaults\n */\nfunction createFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n\n/**\n * Create MCP choices with checked state based on defaults\n */\nfunction createMcpChoices(defaults?: string[]) {\n // If no defaults provided, check all by default\n const enabledSet = new Set(defaults ?? ALL_MCP_VALUES);\n\n return AVAILABLE_MCPS.map((mcp) => ({\n ...mcp,\n checked: enabledSet.has(mcp.value),\n }));\n}\n\n/**\n * Gather feature selections from user\n *\n * @param defaults - Optional default values from a preset\n */\nexport async function gatherFeatures(defaults?: FeatureDefaults): Promise<FeatureAnswers> {\n const enabledFeatures = await checkbox({\n message: \"Select features to enable:\",\n choices: createFeatureChoices(defaults?.enabledFeatures),\n });\n\n const mcps = await checkbox({\n message: \"Select MCP servers to enable:\",\n choices: createMcpChoices(defaults?.mcps),\n });\n\n return {\n enabledFeatures,\n mcps,\n };\n}\n\n/**\n * Get feature flags from enabled features array\n */\nexport function featuresToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n bmadBridge: enabledFeatures.includes(\"bmad-bridge\"),\n autoStatus: enabledFeatures.includes(\"auto-status\"),\n parallelExecution: enabledFeatures.includes(\"parallel\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n contextMonitor: enabledFeatures.includes(\"context-monitor\"),\n commentChecker: enabledFeatures.includes(\"comment-checker\"),\n lspTools: enabledFeatures.includes(\"lsp-tools\"),\n autoGitOperations: enabledFeatures.includes(\"auto-git-operations\"),\n todoSync: true,\n };\n}\n\n/**\n * Get MCP flags from enabled MCPs array\n */\nexport function mcpsToFlags(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grep_app\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Get new-style feature flags from enabled features array\n */\nexport function newFeaturesToFlags(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Create new-style feature choices with checked state based on defaults\n */\nexport function createNewFeatureChoices(defaults?: string[]) {\n const enabledSet = new Set(defaults ?? NEW_FEATURES_ENABLED_BY_DEFAULT);\n\n return AVAILABLE_NEW_FEATURES.map((feature) => ({\n ...feature,\n checked: enabledSet.has(feature.value),\n }));\n}\n","/**\n * SDLC config generator\n *\n * Generates the sdlc.json configuration file.\n *\n * v0.3.0+ supports both:\n * - New structure: github, tdd, eventModeling, git sections\n * - Legacy structure: bmad section (deprecated, for backward compatibility)\n */\n\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, LLMProvider } from \"../../shared/types.js\";\nimport { featuresToFlags, mcpsToFlags } from \"../questions/features.js\";\n\nfunction inferProviderPriority(answers: InstallAnswers): LLMProvider[] {\n const { subscriptions } = answers;\n const priority: LLMProvider[] = [];\n\n if (subscriptions.hasClaude) priority.push(\"anthropic\");\n if (subscriptions.hasOpenAI) priority.push(\"openai\");\n if (subscriptions.hasGoogle) priority.push(\"google\");\n if (subscriptions.hasGitHubCopilot) priority.push(\"github-copilot\");\n\n if (priority.length === 0) {\n return [\"anthropic\", \"openai\", \"google\", \"github-copilot\"];\n }\n\n return priority;\n}\n\n/**\n * Generate new v0.3.0+ features configuration\n */\nfunction generateNewFeatures(enabledFeatures: string[]): Record<string, boolean> {\n return {\n orchestratorOnly: enabledFeatures.includes(\"orchestratorOnly\"),\n todoSync: enabledFeatures.includes(\"todoSync\"),\n partyReview: enabledFeatures.includes(\"partyReview\"),\n debuggingProtocol: enabledFeatures.includes(\"debuggingProtocol\"),\n memento: enabledFeatures.includes(\"memento\"),\n notifications: enabledFeatures.includes(\"notifications\"),\n lspTools: enabledFeatures.includes(\"lspTools\"),\n };\n}\n\n/**\n * Generate new v0.3.0+ MCPs configuration\n */\nfunction generateNewMcps(mcps: string[]): Record<string, boolean> {\n return {\n context7: mcps.includes(\"context7\"),\n exa: mcps.includes(\"exa\"),\n grepApp: mcps.includes(\"grepApp\"),\n memento: mcps.includes(\"memento\"),\n };\n}\n\n/**\n * Check if using new-style feature selection\n */\nfunction isNewStyleFeatures(enabledFeatures: string[]): boolean {\n const newFeatureKeys = [\"orchestratorOnly\", \"partyReview\", \"debuggingProtocol\", \"memento\"];\n return enabledFeatures.some((f) => newFeatureKeys.includes(f));\n}\n\n/**\n * Generate sdlc.json configuration\n *\n * Supports both v0.3.0+ new structure and legacy BMAD structure\n * based on install answers.\n */\nexport function generateSdlcConfig(answers: InstallAnswers): Record<string, unknown> {\n const { subscriptions, models, methodology, features, advanced } = answers;\n const useNewFeatures = isNewStyleFeatures(features.enabledFeatures);\n\n const config: Record<string, unknown> = {\n $schema:\n \"https://raw.githubusercontent.com/jwilger/opencode-sdlc-plugin/main/config/schemas/sdlc.schema.json\",\n version: VERSION,\n subscriptions: {\n claude: {\n enabled: subscriptions.hasClaude,\n authMethod: subscriptions.claudeAuth,\n tier: subscriptions.claudeTier,\n },\n openai: {\n enabled: subscriptions.hasOpenAI,\n authMethod: subscriptions.openaiAuth,\n },\n google: {\n enabled: subscriptions.hasGoogle,\n authMethod: subscriptions.googleAuth,\n },\n githubCopilot: {\n enabled: subscriptions.hasGitHubCopilot,\n plan: subscriptions.copilotPlan,\n },\n },\n models: {\n marvin: models.marvin,\n oracle: models.oracle,\n librarian: models.librarian,\n frontend: models.frontend,\n documentWriter: models.documentWriter,\n multimodalLooker: models.multimodalLooker,\n // v1.0.0: subagent model configuration\n subagents: {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n },\n },\n // Features and MCPs - use new format if new features selected, otherwise legacy\n features: useNewFeatures\n ? generateNewFeatures(features.enabledFeatures)\n : featuresToFlags(features.enabledFeatures),\n mcps: useNewFeatures ? generateNewMcps(features.mcps) : mcpsToFlags(features.mcps),\n routing: {\n providerPriority: inferProviderPriority(answers),\n modelFamilyPriority: {\n claude: inferProviderPriority(answers).filter(\n (p) => p === \"anthropic\" || p === \"github-copilot\"\n ),\n gpt: inferProviderPriority(answers).filter((p) => p === \"openai\" || p === \"github-copilot\"),\n gemini: inferProviderPriority(answers).filter(\n (p) => p === \"google\" || p === \"github-copilot\"\n ),\n },\n agentOverrides: {\n oracle: {\n requiresThinking: true,\n },\n },\n fallbackBehavior: {\n autoFallback: advanced.autoFallback ?? false,\n retryPeriodMs: 300000,\n notifyOnRateLimit: true,\n },\n // v1.0.0: classifier model for mode detection\n classifierModel: \"anthropic/claude-haiku\",\n },\n };\n\n // Add legacy BMAD config for backward compatibility (if using legacy features)\n if (!useNewFeatures) {\n config.bmad = {\n defaultTrack: methodology.defaultTrack,\n autoStatusUpdate: methodology.autoStatusUpdate,\n parallelIssueLimit: advanced.parallelIssueLimit ?? 0,\n paths: {\n prd: null,\n architecture: null,\n },\n };\n }\n\n // Add GitHub config if provided\n if (answers.github?.enabled) {\n config.github = {\n owner: answers.github.owner,\n repo: answers.github.repo,\n project: answers.github.project,\n statuses: answers.github.statuses,\n };\n }\n\n // Add v1.0.0+ modes config\n config.modes = answers.modes\n ? {\n default: answers.modes.default,\n eventModeling: answers.modes.eventModeling,\n enabled: answers.modes.enabled,\n }\n : {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n\n // Add v1.0.0+ memory config\n config.memory = answers.memory\n ? {\n backend: answers.memory.backend,\n checkpointTtl: answers.memory.checkpointTtl,\n }\n : {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n\n // Add TDD config with v1.0 fields\n config.tdd = answers.tdd\n ? {\n enabled: answers.tdd.enabled,\n verbosity: answers.tdd.verbosity,\n bypassPatterns: answers.tdd.bypassPatterns,\n mutationTesting: {\n enabled: answers.tdd.mutationTesting.enabled,\n requiredScore: answers.tdd.mutationTesting.requiredScore,\n },\n // v1.0.0 fields\n domainVetoEnabled: answers.tdd.domainVetoEnabled ?? true,\n debateRounds: answers.tdd.debateRounds ?? 2,\n requireVerification: answers.tdd.requireVerification ?? true,\n }\n : {\n enabled: true,\n verbosity: \"brief\",\n bypassPatterns: [\"*.config.*\", \"*.json\", \"*.md\", \"*.yaml\", \"*.yml\"],\n mutationTesting: {\n enabled: false,\n requiredScore: 80,\n },\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n };\n\n // Add new v0.3.0+ Event Modeling config from answers or defaults\n config.eventModeling = answers.eventModeling\n ? {\n enabled: answers.eventModeling.enabled,\n outputPath: answers.eventModeling.outputPath,\n }\n : {\n enabled: false,\n outputPath: \"docs/event-model\",\n };\n\n // Add new v0.3.0+ Git config from answers or defaults\n config.git = answers.gitWorkflow\n ? {\n workflow: answers.gitWorkflow.workflow,\n requireClean: answers.gitWorkflow.requireClean,\n worktrees: answers.gitWorkflow.worktrees,\n }\n : {\n workflow: \"standard\",\n requireClean: true,\n worktrees: false,\n };\n\n return config;\n}\n","/**\n * Config Generator\n *\n * Orchestrates generation of all configuration files.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type { GeneratedFile, InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"./omo-config.js\";\nimport { generateOpencodeConfig, getRequiredPlugins } from \"./opencode-config.js\";\nimport { generateSdlcConfig } from \"./sdlc-config.js\";\n\nexport class ConfigGenerator {\n private answers: InstallAnswers;\n private configDir: string;\n\n constructor(answers: InstallAnswers) {\n this.answers = answers;\n this.configDir =\n answers.installLocation === \"local\"\n ? join(process.cwd(), \".opencode\")\n : CONFIG_PATHS.globalConfigDir;\n }\n\n /**\n * Get the configuration directory path\n */\n getConfigDir(): string {\n return this.configDir;\n }\n\n /**\n * Generate all configuration files\n */\n async generate(): Promise<GeneratedFile[]> {\n const files: GeneratedFile[] = [];\n\n // Generate opencode.json\n const opencodeConfig = await generateOpencodeConfig(this.answers, this.configDir);\n files.push({\n path: join(this.configDir, \"opencode.json\"),\n content: JSON.stringify(opencodeConfig, null, 2),\n exists: existsSync(join(this.configDir, \"opencode.json\")),\n });\n\n // Generate oh-my-opencode.json\n const omoConfig = generateOmoConfig(this.answers);\n files.push({\n path: join(this.configDir, \"oh-my-opencode.json\"),\n content: JSON.stringify(omoConfig, null, 2),\n exists: existsSync(join(this.configDir, \"oh-my-opencode.json\")),\n });\n\n // Generate sdlc.json\n const sdlcConfig = generateSdlcConfig(this.answers);\n files.push({\n path: join(this.configDir, \"sdlc.json\"),\n content: JSON.stringify(sdlcConfig, null, 2),\n exists: existsSync(join(this.configDir, \"sdlc.json\")),\n });\n\n return files;\n }\n\n /**\n * Get the list of npm packages to install\n */\n getRequiredPackages(): string[] {\n return getRequiredPlugins(this.answers);\n }\n}\n","/**\n * Shared GitHub API Client using Octokit\n *\n * Provides typed methods for GitHub operations used by both CLI and plugin.\n * Authentication is resolved in order:\n * 1. Explicitly provided token\n * 2. GITHUB_TOKEN environment variable\n * 3. `gh auth token` command output (if gh CLI is available)\n */\n\nimport { execSync } from \"node:child_process\";\nimport { Octokit } from \"@octokit/rest\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface GitHubClientOptions {\n /** GitHub token (optional - will try env/gh CLI if not provided) */\n token?: string;\n /** Repository owner */\n owner?: string;\n /** Repository name */\n repo?: string;\n}\n\nexport interface GitHubIssue {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: string;\n labels: Array<{ name: string }>;\n}\n\nexport interface GitHubIssueListItem {\n number: number;\n title: string;\n url: string;\n state: string;\n}\n\nexport interface GitHubPullRequest {\n number: number;\n title: string;\n body: string | null;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n mergeableState: string;\n draft: boolean;\n}\n\nexport interface GitHubPrCheck {\n name: string;\n status: \"pass\" | \"fail\" | \"pending\" | \"skipped\";\n conclusion: string | null;\n}\n\nexport interface GitHubPrReview {\n reviewer: string;\n state: \"APPROVED\" | \"CHANGES_REQUESTED\" | \"COMMENTED\" | \"PENDING\" | \"DISMISSED\";\n}\n\nexport interface GitHubPrStatus {\n number: number;\n url: string;\n state: \"open\" | \"closed\" | \"merged\";\n mergeable: boolean | null;\n checks: GitHubPrCheck[];\n reviews: GitHubPrReview[];\n}\n\nexport interface CreatePrOptions {\n title: string;\n body?: string;\n head: string;\n base?: string;\n draft?: boolean;\n}\n\nexport interface CreatePrResult {\n number: number;\n url: string;\n}\n\nexport interface MergePrOptions {\n prNumber: number;\n mergeMethod?: \"merge\" | \"squash\" | \"rebase\";\n commitTitle?: string;\n commitMessage?: string;\n}\n\nexport interface MergePrResult {\n sha: string;\n merged: boolean;\n}\n\nexport interface GitHubProject {\n id: string;\n number: number;\n title: string;\n url: string;\n}\n\nexport interface CreateRepoOptions {\n name: string;\n description?: string;\n private?: boolean;\n autoInit?: boolean;\n}\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n fullName: string;\n url: string;\n private: boolean;\n defaultBranch: string;\n}\n\n// ============================================================================\n// Authentication\n// ============================================================================\n\n/**\n * Resolve GitHub token from various sources\n */\nexport function resolveGitHubToken(explicitToken?: string): string | null {\n // 1. Explicit token\n if (explicitToken) {\n return explicitToken;\n }\n\n // 2. Environment variable\n const envToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;\n if (envToken) {\n return envToken;\n }\n\n // 3. gh CLI token\n try {\n const ghToken = execSync(\"gh auth token\", {\n encoding: \"utf-8\",\n timeout: 5000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n if (ghToken) {\n return ghToken;\n }\n } catch {\n // gh CLI not available or not authenticated\n }\n\n return null;\n}\n\n/**\n * Check if GitHub authentication is available\n */\nexport function isGitHubAuthenticated(token?: string): boolean {\n return resolveGitHubToken(token) !== null;\n}\n\n// ============================================================================\n// Client Class\n// ============================================================================\n\nexport class GitHubClient {\n private octokit: Octokit;\n private owner?: string;\n private repo?: string;\n\n constructor(options: GitHubClientOptions = {}) {\n const token = resolveGitHubToken(options.token);\n\n if (!token) {\n throw new Error(\n \"GitHub authentication not found. Set GITHUB_TOKEN environment variable or run 'gh auth login'.\"\n );\n }\n\n this.octokit = new Octokit({ auth: token });\n this.owner = options.owner;\n this.repo = options.repo;\n }\n\n /**\n * Set the default owner/repo for operations\n */\n setRepo(owner: string, repo: string): void {\n this.owner = owner;\n this.repo = repo;\n }\n\n private getRepoParams(owner?: string, repo?: string): { owner: string; repo: string } {\n const o = owner || this.owner;\n const r = repo || this.repo;\n if (!o || !r) {\n throw new Error(\"Repository owner and name are required\");\n }\n return { owner: o, repo: r };\n }\n\n // ==========================================================================\n // Issues\n // ==========================================================================\n\n /**\n * Get a single issue by number\n */\n async getIssue(issueNumber: number, owner?: string, repo?: string): Promise<GitHubIssue> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.get({\n ...params,\n issue_number: issueNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body ?? null,\n url: data.html_url,\n state: data.state,\n labels: (data.labels || []).map((label) =>\n typeof label === \"string\" ? { name: label } : { name: label.name || \"\" }\n ),\n };\n }\n\n /**\n * List issues in a repository\n */\n async listIssues(\n options: {\n state?: \"open\" | \"closed\" | \"all\";\n labels?: string[];\n limit?: number;\n } = {},\n owner?: string,\n repo?: string\n ): Promise<GitHubIssueListItem[]> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.issues.listForRepo({\n ...params,\n state: options.state || \"open\",\n labels: options.labels?.join(\",\"),\n per_page: options.limit || 30,\n });\n\n // Filter out pull requests (GitHub API returns PRs as issues)\n return data\n .filter((issue) => !issue.pull_request)\n .map((issue) => ({\n number: issue.number,\n title: issue.title,\n url: issue.html_url,\n state: issue.state,\n }));\n }\n\n /**\n * Update an issue's body\n */\n async updateIssueBody(\n issueNumber: number,\n body: string,\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.update({\n ...params,\n issue_number: issueNumber,\n body,\n });\n }\n\n /**\n * Add labels to an issue\n */\n async addLabels(\n issueNumber: number,\n labels: string[],\n owner?: string,\n repo?: string\n ): Promise<void> {\n const params = this.getRepoParams(owner, repo);\n await this.octokit.issues.addLabels({\n ...params,\n issue_number: issueNumber,\n labels,\n });\n }\n\n // ==========================================================================\n // Pull Requests\n // ==========================================================================\n\n /**\n * Create a pull request\n */\n async createPullRequest(\n options: CreatePrOptions,\n owner?: string,\n repo?: string\n ): Promise<CreatePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.create({\n ...params,\n title: options.title,\n body: options.body,\n head: options.head,\n base: options.base || \"main\",\n draft: options.draft,\n });\n\n return {\n number: data.number,\n url: data.html_url,\n };\n }\n\n /**\n * Get pull request details\n */\n async getPullRequest(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPullRequest> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n return {\n number: data.number,\n title: data.title,\n body: data.body,\n url: data.html_url,\n state: data.merged ? \"merged\" : (data.state as \"open\" | \"closed\"),\n mergeable: data.mergeable,\n mergeableState: data.mergeable_state,\n draft: data.draft || false,\n };\n }\n\n /**\n * Get pull request status including checks and reviews\n */\n async getPullRequestStatus(\n prNumber: number,\n owner?: string,\n repo?: string\n ): Promise<GitHubPrStatus> {\n const params = this.getRepoParams(owner, repo);\n\n // Get PR details\n const pr = await this.getPullRequest(prNumber, owner, repo);\n\n // Get check runs for the PR's head commit\n const { data: prData } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n });\n\n let checks: GitHubPrCheck[] = [];\n try {\n const { data: checksData } = await this.octokit.checks.listForRef({\n ...params,\n ref: prData.head.sha,\n });\n\n checks = checksData.check_runs.map((check) => ({\n name: check.name,\n status:\n check.status === \"completed\"\n ? check.conclusion === \"success\"\n ? \"pass\"\n : check.conclusion === \"skipped\"\n ? \"skipped\"\n : \"fail\"\n : \"pending\",\n conclusion: check.conclusion,\n }));\n } catch {\n // Checks API might not be available\n }\n\n // Get reviews\n const { data: reviewsData } = await this.octokit.pulls.listReviews({\n ...params,\n pull_number: prNumber,\n });\n\n const reviews: GitHubPrReview[] = reviewsData.map((review) => ({\n reviewer: review.user?.login || \"unknown\",\n state: review.state as GitHubPrReview[\"state\"],\n }));\n\n return {\n number: pr.number,\n url: pr.url,\n state: pr.state,\n mergeable: pr.mergeable,\n checks,\n reviews,\n };\n }\n\n /**\n * Get pull request diff\n */\n async getPullRequestDiff(prNumber: number, owner?: string, repo?: string): Promise<string> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.get({\n ...params,\n pull_number: prNumber,\n mediaType: { format: \"diff\" },\n });\n\n // The response is a string when using diff format\n return data as unknown as string;\n }\n\n /**\n * Merge a pull request\n */\n async mergePullRequest(\n options: MergePrOptions,\n owner?: string,\n repo?: string\n ): Promise<MergePrResult> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.pulls.merge({\n ...params,\n pull_number: options.prNumber,\n merge_method: options.mergeMethod || \"squash\",\n commit_title: options.commitTitle,\n commit_message: options.commitMessage,\n });\n\n return {\n sha: data.sha,\n merged: data.merged,\n };\n }\n\n // ==========================================================================\n // Repositories\n // ==========================================================================\n\n /**\n * Create a new repository\n */\n async createRepository(options: CreateRepoOptions): Promise<GitHubRepo> {\n const { data } = await this.octokit.repos.createForAuthenticatedUser({\n name: options.name,\n description: options.description,\n private: options.private ?? false,\n auto_init: options.autoInit ?? false,\n });\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * Get repository details\n */\n async getRepository(owner?: string, repo?: string): Promise<GitHubRepo> {\n const params = this.getRepoParams(owner, repo);\n const { data } = await this.octokit.repos.get(params);\n\n return {\n id: data.id,\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n private: data.private,\n defaultBranch: data.default_branch || \"main\",\n };\n }\n\n /**\n * List repositories for the authenticated user\n */\n async listUserRepos(\n options: { type?: \"all\" | \"owner\" | \"member\"; limit?: number } = {}\n ): Promise<GitHubRepo[]> {\n const { data } = await this.octokit.repos.listForAuthenticatedUser({\n type: options.type || \"owner\",\n per_page: options.limit || 30,\n sort: \"updated\",\n });\n\n return data.map((repo) => ({\n id: repo.id,\n name: repo.name,\n fullName: repo.full_name,\n url: repo.html_url,\n private: repo.private,\n defaultBranch: repo.default_branch || \"main\",\n }));\n }\n\n // ==========================================================================\n // Projects (GraphQL required for Projects V2)\n // ==========================================================================\n\n /**\n * List projects for the authenticated user\n * Note: Projects V2 requires GraphQL API\n */\n async listUserProjects(limit = 20): Promise<GitHubProject[]> {\n const query = `\n query($first: Int!) {\n viewer {\n projectsV2(first: $first) {\n nodes {\n id\n number\n title\n url\n }\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n viewer: {\n projectsV2: {\n nodes: Array<{\n id: string;\n number: number;\n title: string;\n url: string;\n }>;\n };\n };\n }>(query, { first: limit });\n\n return result.viewer.projectsV2.nodes;\n }\n\n /**\n * Get project by number for a user\n */\n async getUserProject(userLogin: string, projectNumber: number): Promise<GitHubProject | null> {\n const query = `\n query($login: String!, $number: Int!) {\n user(login: $login) {\n projectV2(number: $number) {\n id\n number\n title\n url\n }\n }\n }\n `;\n\n try {\n const result = await this.octokit.graphql<{\n user: {\n projectV2: {\n id: string;\n number: number;\n title: string;\n url: string;\n } | null;\n };\n }>(query, { login: userLogin, number: projectNumber });\n\n return result.user.projectV2;\n } catch {\n return null;\n }\n }\n\n /**\n * Link a repository to a project\n * Note: This creates a linked repository in the project\n */\n async linkRepoToProject(projectId: string, repoOwner: string, repoName: string): Promise<void> {\n // First get the repository's node ID\n const { data: repoData } = await this.octokit.repos.get({\n owner: repoOwner,\n repo: repoName,\n });\n\n const mutation = `\n mutation($projectId: ID!, $repositoryId: ID!) {\n linkProjectV2ToRepository(input: { projectId: $projectId, repositoryId: $repositoryId }) {\n repository {\n id\n }\n }\n }\n `;\n\n await this.octokit.graphql(mutation, {\n projectId,\n repositoryId: repoData.node_id,\n });\n }\n\n /**\n * Add an issue to a project\n */\n async addIssueToProject(projectId: string, issueNodeId: string): Promise<string> {\n const mutation = `\n mutation($projectId: ID!, $contentId: ID!) {\n addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {\n item {\n id\n }\n }\n }\n `;\n\n const result = await this.octokit.graphql<{\n addProjectV2ItemById: {\n item: {\n id: string;\n };\n };\n }>(mutation, {\n projectId,\n contentId: issueNodeId,\n });\n\n return result.addProjectV2ItemById.item.id;\n }\n\n // ==========================================================================\n // Branch Protection / Rulesets\n // ==========================================================================\n\n /**\n * Create a branch ruleset with common protection rules\n */\n async createBranchRuleset(\n options: {\n name: string;\n enforcement: \"active\" | \"disabled\" | \"evaluate\";\n targetBranches: string[];\n requirePullRequest?: boolean;\n requiredApprovals?: number;\n requireCodeOwnerReview?: boolean;\n dismissStaleReviews?: boolean;\n requireSignedCommits?: boolean;\n requireLinearHistory?: boolean;\n preventDeletion?: boolean;\n preventForcePush?: boolean;\n },\n owner?: string,\n repo?: string\n ): Promise<{ id: number }> {\n const params = this.getRepoParams(owner, repo);\n\n // Build rules array based on options\n const rules: Array<\n | { type: \"deletion\" }\n | { type: \"non_fast_forward\" }\n | { type: \"required_linear_history\" }\n | { type: \"required_signatures\" }\n | {\n type: \"pull_request\";\n parameters: {\n dismiss_stale_reviews_on_push: boolean;\n require_code_owner_review: boolean;\n require_last_push_approval: boolean;\n required_approving_review_count: number;\n required_review_thread_resolution: boolean;\n };\n }\n > = [];\n\n if (options.requirePullRequest) {\n rules.push({\n type: \"pull_request\",\n parameters: {\n dismiss_stale_reviews_on_push: options.dismissStaleReviews ?? false,\n require_code_owner_review: options.requireCodeOwnerReview ?? false,\n require_last_push_approval: false,\n required_approving_review_count: options.requiredApprovals ?? 1,\n required_review_thread_resolution: false,\n },\n });\n }\n\n if (options.requireSignedCommits) {\n rules.push({ type: \"required_signatures\" });\n }\n\n if (options.requireLinearHistory) {\n rules.push({ type: \"required_linear_history\" });\n }\n\n if (options.preventDeletion) {\n rules.push({ type: \"deletion\" });\n }\n\n if (options.preventForcePush) {\n rules.push({ type: \"non_fast_forward\" });\n }\n\n const { data } = await this.octokit.repos.createRepoRuleset({\n ...params,\n name: options.name,\n enforcement: options.enforcement,\n conditions: {\n ref_name: {\n include: options.targetBranches,\n exclude: [],\n },\n },\n rules,\n });\n\n return { id: data.id };\n }\n\n // ==========================================================================\n // Utility Methods\n // ==========================================================================\n\n /**\n * Get the authenticated user's login\n */\n async getAuthenticatedUser(): Promise<{ login: string; id: number }> {\n const { data } = await this.octokit.users.getAuthenticated();\n return { login: data.login, id: data.id };\n }\n\n /**\n * Check if a repository exists\n */\n async repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n await this.octokit.repos.get({ owner, repo });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a GitHub client with optional configuration\n */\nexport function createGitHubClient(options: GitHubClientOptions = {}): GitHubClient {\n return new GitHubClient(options);\n}\n\n/**\n * Create a GitHub client if authentication is available, otherwise return null\n */\nexport function createGitHubClientIfAuthenticated(\n options: GitHubClientOptions = {}\n): GitHubClient | null {\n if (!isGitHubAuthenticated(options.token)) {\n return null;\n }\n try {\n return new GitHubClient(options);\n } catch {\n return null;\n }\n}\n","/**\n * Git Remote Detection Utilities\n *\n * Detect existing git remotes to auto-populate GitHub configuration.\n */\n\nimport { execSync } from \"node:child_process\";\n\nexport interface GitRemoteInfo {\n owner: string;\n repo: string;\n url: string;\n}\n\n/**\n * Parse a GitHub URL (HTTPS or SSH) into owner and repo\n */\nexport function parseGitHubUrl(url: string): GitRemoteInfo | null {\n // HTTPS: https://github.com/owner/repo.git\n const httpsMatch = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (httpsMatch) {\n return {\n owner: httpsMatch[1],\n repo: httpsMatch[2],\n url,\n };\n }\n\n // SSH: git@github.com:owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/([^/.]+)(?:\\.git)?/);\n if (sshMatch) {\n return {\n owner: sshMatch[1],\n repo: sshMatch[2],\n url,\n };\n }\n\n return null;\n}\n\n/**\n * Get the origin remote URL from the current git repository\n */\nexport function getOriginRemoteUrl(cwd?: string): string | null {\n try {\n const url = execSync(\"git remote get-url origin\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return url || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Detect GitHub repo info from the current git repository's origin remote\n */\nexport function detectGitHubRepo(cwd?: string): GitRemoteInfo | null {\n const url = getOriginRemoteUrl(cwd);\n if (!url) return null;\n return parseGitHubUrl(url);\n}\n\n/**\n * Check if we're in a git repository\n */\nexport function isGitRepository(cwd?: string): boolean {\n try {\n execSync(\"git rev-parse --git-dir\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialize a git repository\n */\nexport function initGitRepo(cwd?: string): boolean {\n try {\n execSync(\"git init\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Add a remote to the git repository\n */\nexport function addGitRemote(name: string, url: string, cwd?: string): boolean {\n try {\n execSync(`git remote add ${name} ${url}`, {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the current branch name\n */\nexport function getCurrentBranch(cwd?: string): string | null {\n try {\n const branch = execSync(\"git branch --show-current\", {\n encoding: \"utf-8\",\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n return branch || null;\n } catch {\n return null;\n }\n}\n","/**\n * Smart GitHub Integration\n *\n * Intelligent GitHub setup that:\n * - Detects existing git remotes\n * - Offers to create new repos\n * - Manages project boards\n * - Configures branch rulesets\n */\n\nimport { confirm, input, number, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport {\n type GitHubClient,\n createGitHubClientIfAuthenticated,\n isGitHubAuthenticated,\n} from \"../../shared/github-client.js\";\nimport type { GitHubConfig, GitHubStatus } from \"../../shared/types.js\";\nimport {\n addGitRemote,\n detectGitHubRepo,\n initGitRepo,\n isGitRepository,\n} from \"../utils/git-remote.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SmartGitHubResult {\n enabled: boolean;\n config?: GitHubConfig;\n repoCreated?: boolean;\n projectCreated?: boolean;\n rulesetsCreated?: boolean;\n}\n\ninterface RepoChoice {\n action: \"existing\" | \"create-public\" | \"create-private\" | \"skip\";\n owner?: string;\n repo?: string;\n}\n\ninterface ProjectChoice {\n action: \"existing\" | \"create-blank\" | \"skip\";\n projectNumber?: number;\n projectTitle?: string;\n}\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nconst DEFAULT_STATUSES: GitHubStatus[] = [\"Backlog\", \"Ready\", \"In progress\", \"In review\", \"Done\"];\n\n// ============================================================================\n// Main Function\n// ============================================================================\n\n/**\n * Smart GitHub integration setup\n *\n * Detects existing setup and offers to create missing pieces.\n */\nexport async function setupSmartGitHub(cwd: string): Promise<SmartGitHubResult> {\n // Check if user wants GitHub integration\n const wantGitHub = await confirm({\n message: \"Enable GitHub integration for issue tracking?\",\n default: true,\n });\n\n if (!wantGitHub) {\n return { enabled: false };\n }\n\n // Check authentication\n if (!isGitHubAuthenticated()) {\n console.log(chalk.yellow(\"\\n⚠ GitHub authentication not found.\"));\n console.log(\" Run 'gh auth login' or set GITHUB_TOKEN environment variable.\\n\");\n\n const continueWithoutAuth = await confirm({\n message: \"Continue with manual configuration (no auto-detection)?\",\n default: true,\n });\n\n if (!continueWithoutAuth) {\n return { enabled: false };\n }\n\n // Fall back to manual config\n return manualGitHubConfig();\n }\n\n // Create client for API operations\n const client = createGitHubClientIfAuthenticated();\n if (!client) {\n console.log(chalk.yellow(\"\\n⚠ Could not create GitHub client.\\n\"));\n return manualGitHubConfig();\n }\n\n // Get authenticated user info\n let userLogin: string;\n try {\n const user = await client.getAuthenticatedUser();\n userLogin = user.login;\n console.log(chalk.green(`\\n✓ Authenticated as ${userLogin}\\n`));\n } catch (error) {\n console.log(chalk.yellow(\"\\n⚠ Could not verify GitHub authentication.\\n\"));\n return manualGitHubConfig();\n }\n\n // Detect or setup repository\n const repoResult = await setupRepository(client, userLogin, cwd);\n if (repoResult.action === \"skip\") {\n return { enabled: false };\n }\n\n const { owner, repo } = repoResult;\n if (!owner || !repo) {\n return { enabled: false };\n }\n\n // Set repo on client for subsequent operations\n client.setRepo(owner, repo);\n\n // Setup project board\n const projectResult = await setupProjectBoard(client, userLogin);\n\n // Setup branch rulesets (optional)\n let rulesetsCreated = false;\n const wantRulesets = await confirm({\n message: \"Configure branch protection rules for main branch?\",\n default: false,\n });\n\n if (wantRulesets) {\n rulesetsCreated = await setupBranchRulesets(client, owner, repo);\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project: projectResult.projectNumber,\n statuses: DEFAULT_STATUSES,\n },\n repoCreated: repoResult.action === \"create-public\" || repoResult.action === \"create-private\",\n projectCreated: projectResult.action === \"create-blank\",\n rulesetsCreated,\n };\n}\n\n// ============================================================================\n// Repository Setup\n// ============================================================================\n\nasync function setupRepository(\n client: GitHubClient,\n userLogin: string,\n cwd: string\n): Promise<RepoChoice> {\n // Check for existing git repo and remote\n const isGitRepo = isGitRepository(cwd);\n const existingRemote = isGitRepo ? detectGitHubRepo(cwd) : null;\n\n if (existingRemote) {\n console.log(chalk.dim(` Detected remote: ${existingRemote.owner}/${existingRemote.repo}`));\n\n const useExisting = await confirm({\n message: `Use existing repository ${existingRemote.owner}/${existingRemote.repo}?`,\n default: true,\n });\n\n if (useExisting) {\n return {\n action: \"existing\",\n owner: existingRemote.owner,\n repo: existingRemote.repo,\n };\n }\n }\n\n // No existing remote or user wants different repo\n const repoAction = await select({\n message: \"Repository setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Connect to existing GitHub repository\",\n description: \"Enter owner/repo for an existing repository\",\n },\n {\n value: \"create-private\" as const,\n name: \"Create new private repository\",\n description: \"Create a new private repo on GitHub\",\n },\n {\n value: \"create-public\" as const,\n name: \"Create new public repository\",\n description: \"Create a new public repo on GitHub\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip GitHub integration\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (repoAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (repoAction === \"existing\") {\n return await connectExistingRepo(client);\n }\n\n // Create new repository\n return await createNewRepo(client, userLogin, repoAction === \"create-private\", cwd, isGitRepo);\n}\n\nasync function connectExistingRepo(client: GitHubClient): Promise<RepoChoice> {\n const owner = await input({\n message: \"Repository owner (user or org):\",\n validate: (v) => (v.trim() ? true : \"Owner is required\"),\n });\n\n const repo = await input({\n message: \"Repository name:\",\n validate: (v) => (v.trim() ? true : \"Repository name is required\"),\n });\n\n // Verify repo exists\n try {\n const exists = await client.repoExists(owner, repo);\n if (!exists) {\n console.log(chalk.yellow(`\\n⚠ Repository ${owner}/${repo} not found.\\n`));\n return { action: \"skip\" };\n }\n console.log(chalk.green(`✓ Found repository ${owner}/${repo}`));\n } catch {\n console.log(chalk.yellow(\"\\n⚠ Could not verify repository.\\n\"));\n }\n\n return { action: \"existing\", owner, repo };\n}\n\nasync function createNewRepo(\n client: GitHubClient,\n userLogin: string,\n isPrivate: boolean,\n cwd: string,\n isGitRepo: boolean\n): Promise<RepoChoice> {\n const repoName = await input({\n message: \"New repository name:\",\n validate: (v) => {\n if (!v.trim()) return \"Repository name is required\";\n if (!/^[a-zA-Z0-9._-]+$/.test(v)) return \"Invalid repository name\";\n return true;\n },\n });\n\n const description = await input({\n message: \"Repository description (optional):\",\n default: \"\",\n });\n\n try {\n console.log(chalk.dim(`\\n Creating ${isPrivate ? \"private\" : \"public\"} repository...`));\n\n const newRepo = await client.createRepository({\n name: repoName,\n description: description || undefined,\n private: isPrivate,\n autoInit: !isGitRepo, // Only auto-init if no local git repo\n });\n\n console.log(chalk.green(`✓ Created repository: ${newRepo.url}\\n`));\n\n // Add remote if local git repo exists\n if (isGitRepo) {\n const remoteUrl = `git@github.com:${userLogin}/${repoName}.git`;\n const added = addGitRemote(\"origin\", remoteUrl, cwd);\n if (added) {\n console.log(chalk.green(`✓ Added git remote 'origin'`));\n }\n } else {\n // Initialize git repo and add remote\n const initialized = initGitRepo(cwd);\n if (initialized) {\n console.log(chalk.green(\"✓ Initialized git repository\"));\n const remoteUrl = `git@github.com:${userLogin}/${repoName}.git`;\n addGitRemote(\"origin\", remoteUrl, cwd);\n console.log(chalk.green(`✓ Added git remote 'origin'`));\n }\n }\n\n return {\n action: isPrivate ? \"create-private\" : \"create-public\",\n owner: userLogin,\n repo: repoName,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.red(`\\n✗ Failed to create repository: ${message}\\n`));\n return { action: \"skip\" };\n }\n}\n\n// ============================================================================\n// Project Board Setup\n// ============================================================================\n\nasync function setupProjectBoard(client: GitHubClient, userLogin: string): Promise<ProjectChoice> {\n const wantProject = await confirm({\n message: \"Use a GitHub Project board for issue status tracking?\",\n default: true,\n });\n\n if (!wantProject) {\n return { action: \"skip\" };\n }\n\n const projectAction = await select({\n message: \"Project board setup:\",\n choices: [\n {\n value: \"existing\" as const,\n name: \"Link existing project\",\n description: \"Enter project number from URL\",\n },\n {\n value: \"create-blank\" as const,\n name: \"Create new blank project\",\n description: \"Create a new project with default columns\",\n },\n {\n value: \"skip\" as const,\n name: \"Skip project board\",\n description: \"Configure manually later\",\n },\n ],\n });\n\n if (projectAction === \"skip\") {\n return { action: \"skip\" };\n }\n\n if (projectAction === \"existing\") {\n return await linkExistingProject(client, userLogin);\n }\n\n // Create new project\n return await createNewProject(client, userLogin);\n}\n\nasync function linkExistingProject(\n client: GitHubClient,\n userLogin: string\n): Promise<ProjectChoice> {\n // Try to list user's projects\n try {\n const projects = await client.listUserProjects(10);\n if (projects.length > 0) {\n console.log(chalk.dim(\"\\n Your recent projects:\"));\n for (const p of projects) {\n console.log(chalk.dim(` #${p.number}: ${p.title}`));\n }\n console.log();\n }\n } catch {\n // Ignore - just won't show suggestions\n }\n\n const projectNum = await number({\n message: \"Project number (from project URL):\",\n min: 1,\n validate: (v) => (v && v >= 1 ? true : \"Project number required\"),\n });\n\n if (!projectNum) {\n return { action: \"skip\" };\n }\n\n // Verify project exists\n try {\n const project = await client.getUserProject(userLogin, projectNum);\n if (project) {\n console.log(chalk.green(`✓ Found project: ${project.title}`));\n return { action: \"existing\", projectNumber: projectNum };\n }\n } catch {\n // Ignore - project might still be valid\n }\n\n return { action: \"existing\", projectNumber: projectNum };\n}\n\nasync function createNewProject(client: GitHubClient, userLogin: string): Promise<ProjectChoice> {\n console.log(chalk.yellow(\"\\n⚠ Project creation requires manual setup via GitHub UI.\"));\n console.log(` Visit: https://github.com/users/${userLogin}/projects?type=new\\n`);\n\n const createdProject = await confirm({\n message: \"Did you create a project? Enter its number?\",\n default: false,\n });\n\n if (!createdProject) {\n return { action: \"skip\" };\n }\n\n const projectNum = await number({\n message: \"New project number:\",\n min: 1,\n });\n\n return {\n action: \"create-blank\",\n projectNumber: projectNum,\n };\n}\n\n// ============================================================================\n// Branch Rulesets\n// ============================================================================\n\nasync function setupBranchRulesets(\n client: GitHubClient,\n owner: string,\n repo: string\n): Promise<boolean> {\n console.log(chalk.dim(\"\\n Configuring branch protection for 'main'...\\n\"));\n\n const requirePR = await confirm({\n message: \"Require pull requests for changes?\",\n default: true,\n });\n\n let requiredApprovals = 0;\n if (requirePR) {\n requiredApprovals =\n (await number({\n message: \"Required approvals (0 for none):\",\n default: 0,\n min: 0,\n max: 10,\n })) ?? 0;\n }\n\n const requireSignedCommits = await confirm({\n message: \"Require signed commits?\",\n default: false,\n });\n\n const preventForcePush = await confirm({\n message: \"Prevent force pushes?\",\n default: true,\n });\n\n try {\n await client.createBranchRuleset(\n {\n name: \"main-protection\",\n enforcement: \"active\",\n targetBranches: [\"refs/heads/main\", \"refs/heads/master\"],\n requirePullRequest: requirePR,\n requiredApprovals,\n requireSignedCommits,\n preventForcePush,\n preventDeletion: true,\n },\n owner,\n repo\n );\n\n console.log(chalk.green(\"\\n✓ Created branch ruleset 'main-protection'\\n\"));\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n console.log(chalk.yellow(`\\n⚠ Could not create ruleset: ${message}`));\n console.log(\" You may need admin permissions or GitHub Pro/Team.\\n\");\n return false;\n }\n}\n\n// ============================================================================\n// Fallback Manual Config\n// ============================================================================\n\nasync function manualGitHubConfig(): Promise<SmartGitHubResult> {\n const owner = await input({\n message: \"GitHub repository owner:\",\n validate: (v) => (v.trim() ? true : \"Owner is required\"),\n });\n\n const repo = await input({\n message: \"GitHub repository name:\",\n validate: (v) => (v.trim() ? true : \"Repository name is required\"),\n });\n\n const useProject = await confirm({\n message: \"Use a GitHub Project board?\",\n default: false,\n });\n\n let project: number | undefined;\n if (useProject) {\n project =\n (await number({\n message: \"Project number:\",\n min: 1,\n })) ?? undefined;\n }\n\n return {\n enabled: true,\n config: {\n owner,\n repo,\n project,\n statuses: DEFAULT_STATUSES,\n },\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { CONFIG_PATHS } from \"../../shared/constants.js\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\n\nexport interface LoadedConfigs {\n sdlc: Record<string, unknown> | null;\n sdlcValid: boolean;\n sdlcVersion: string | null;\n omo: Record<string, unknown> | null;\n omoValid: boolean;\n opencode: Record<string, unknown> | null;\n opencodeValid: boolean;\n}\n\nexport function loadExistingConfigs(): LoadedConfigs {\n const result: LoadedConfigs = {\n sdlc: null,\n sdlcValid: false,\n sdlcVersion: null,\n omo: null,\n omoValid: false,\n opencode: null,\n opencodeValid: false,\n };\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalSdlcConfig, \"utf-8\");\n result.sdlc = JSON.parse(content);\n result.sdlcVersion = (result.sdlc?.version as string) || \"0.0.1\";\n result.sdlcValid = result.sdlc !== null && typeof result.sdlc.version === \"string\";\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOmoConfig, \"utf-8\");\n result.omo = JSON.parse(content);\n result.omoValid = result.omo !== null;\n } catch {}\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n try {\n const content = readFileSync(CONFIG_PATHS.globalOpencodeConfig, \"utf-8\");\n result.opencode = JSON.parse(content);\n result.opencodeValid = result.opencode !== null;\n } catch {}\n }\n\n return result;\n}\n\nexport function extractSubscriptions(sdlc: Record<string, unknown>): SubscriptionAnswers | null {\n try {\n const subs = sdlc.subscriptions as Record<string, unknown> | undefined;\n if (!subs) return null;\n\n const claude = subs.claude as Record<string, unknown> | undefined;\n const openai = subs.openai as Record<string, unknown> | undefined;\n const google = subs.google as Record<string, unknown> | undefined;\n const copilot = subs.githubCopilot as Record<string, unknown> | undefined;\n\n // Infer auth method from tier for backward compatibility\n const claudeTier = (claude?.tier as SubscriptionAnswers[\"claudeTier\"]) || \"none\";\n const claudeAuth =\n (claude?.authMethod as SubscriptionAnswers[\"claudeAuth\"]) ||\n (claudeTier !== \"none\" ? \"subscription\" : \"none\");\n\n const openaiAuth =\n (openai?.authMethod as SubscriptionAnswers[\"openaiAuth\"]) ||\n (openai?.enabled === true ? \"subscription\" : \"none\");\n\n return {\n hasClaude: claude?.enabled === true,\n claudeAuth,\n claudeTier,\n hasOpenAI: openai?.enabled === true,\n openaiAuth,\n hasGoogle: google?.enabled === true,\n googleAuth: (google?.authMethod as SubscriptionAnswers[\"googleAuth\"]) || \"none\",\n hasGitHubCopilot: copilot?.enabled === true,\n copilotPlan: (copilot?.plan as SubscriptionAnswers[\"copilotPlan\"]) || \"none\",\n copilotEnabledModels: (copilot?.enabledModels as string[]) || [],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractModels(sdlc: Record<string, unknown>): ModelAnswers | null {\n try {\n const models = sdlc.models as Record<string, unknown> | undefined;\n if (!models) return null;\n\n return {\n marvin: (models.marvin as string) || \"\",\n oracle: (models.oracle as string) || \"\",\n librarian: (models.librarian as string) || \"\",\n frontend: models.frontend as string | undefined,\n documentWriter: models.documentWriter as string | undefined,\n multimodalLooker: models.multimodalLooker as string | undefined,\n explore: models.explore as string | undefined,\n settings: models.settings as ModelAnswers[\"settings\"],\n custom: models.custom as ModelAnswers[\"custom\"],\n };\n } catch {\n return null;\n }\n}\n\nexport function extractMethodology(sdlc: Record<string, unknown>): MethodologyAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n if (!bmad) return null;\n\n return {\n defaultTrack: (bmad.defaultTrack as MethodologyAnswers[\"defaultTrack\"]) || \"bmad-method\",\n autoStatusUpdate: bmad.autoStatusUpdate !== false,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractFeatures(sdlc: Record<string, unknown>): FeatureAnswers | null {\n try {\n const features = sdlc.features as Record<string, boolean> | undefined;\n const mcps = sdlc.mcps as Record<string, boolean> | undefined;\n\n if (!features) return null;\n\n const enabledFeatures: string[] = [];\n if (features.autoStatus) enabledFeatures.push(\"auto-status\");\n if (features.parallelExecution) enabledFeatures.push(\"parallel\");\n if (features.notifications) enabledFeatures.push(\"notifications\");\n if (features.contextMonitor) enabledFeatures.push(\"context-monitor\");\n if (features.commentChecker) enabledFeatures.push(\"comment-checker\");\n if (features.lspTools) enabledFeatures.push(\"lsp-tools\");\n\n const mcpList: string[] = [];\n if (mcps?.context7) mcpList.push(\"context7\");\n if (mcps?.exa) mcpList.push(\"exa\");\n if (mcps?.grepApp) mcpList.push(\"grep_app\");\n\n return {\n enabledFeatures,\n mcps: mcpList,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractAdvanced(sdlc: Record<string, unknown>): AdvancedAnswers | null {\n try {\n const bmad = sdlc.bmad as Record<string, unknown> | undefined;\n\n return {\n parallelIssueLimit: (bmad?.parallelIssueLimit as number) || 0,\n experimental: [],\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Detect features that were added after the user's current version.\n *\n * MAINTENANCE NOTE: When adding new features that require user opt-in during upgrade,\n * add a check here for the feature field being undefined. This function is called\n * during the upgrade flow to prompt users about new features.\n *\n * Example: If adding a new feature \"enableAwesomeFeature\" in version 0.7.0:\n * if (features?.enableAwesomeFeature === undefined) {\n * newFeatures.push(\"enableAwesomeFeature\");\n * }\n */\nexport function detectNewFeatures(existingSdlc: Record<string, unknown>): string[] {\n const newFeatures: string[] = [];\n\n const features = existingSdlc.features as Record<string, unknown> | undefined;\n\n if (features?.autoGitOperations === undefined) {\n newFeatures.push(\"autoGitOperations\");\n }\n\n return newFeatures;\n}\n","import { copyFileSync, existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_PATHS, VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers } from \"../../shared/types.js\";\nimport { generateOmoConfig } from \"../generators/omo-config.js\";\nimport { generateSdlcConfig } from \"../generators/sdlc-config.js\";\n\nexport interface MergeOptions {\n existingSdlc: Record<string, unknown>;\n existingOmo: Record<string, unknown>;\n fullAnswers: InstallAnswers;\n}\n\nexport interface MergedConfigs {\n sdlc: Record<string, unknown>;\n omo: Record<string, unknown>;\n opencode?: Record<string, unknown>;\n}\n\nexport interface BackupResult {\n sdlcBackup: string | null;\n omoBackup: string | null;\n opencodeBackup: string | null;\n}\n\nexport function deepMerge(\n baseObj: Record<string, unknown>,\n newObj: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...baseObj };\n\n for (const [key, value] of Object.entries(newObj)) {\n if (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof result[key] === \"object\" &&\n result[key] !== null &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMerge(\n result[key] as Record<string, unknown>,\n value as Record<string, unknown>\n );\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nexport function mergeConfigs(\n options: MergeOptions,\n existingOpencode?: Record<string, unknown>\n): MergedConfigs {\n const { existingSdlc, fullAnswers } = options;\n\n const freshSdlc = generateSdlcConfig(fullAnswers);\n const freshOmo = generateOmoConfig(fullAnswers);\n\n const mergedSdlc = deepMerge(existingSdlc, freshSdlc);\n mergedSdlc.version = VERSION;\n\n const result: MergedConfigs = {\n sdlc: mergedSdlc,\n omo: freshOmo,\n };\n\n if (existingOpencode) {\n result.opencode = existingOpencode;\n }\n\n return result;\n}\n\nexport function createBackups(): BackupResult {\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.TZ]/g, \"-\")\n .replace(/--+/g, \"-\")\n .replace(/-$/, \"\");\n const result: BackupResult = {\n sdlcBackup: null,\n omoBackup: null,\n opencodeBackup: null,\n };\n\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.globalSdlcConfig)) {\n result.sdlcBackup = join(CONFIG_PATHS.backupsDir, `sdlc.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalSdlcConfig, result.sdlcBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOmoConfig)) {\n result.omoBackup = join(CONFIG_PATHS.backupsDir, `oh-my-opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOmoConfig, result.omoBackup);\n }\n\n if (existsSync(CONFIG_PATHS.globalOpencodeConfig)) {\n result.opencodeBackup = join(CONFIG_PATHS.backupsDir, `opencode.json.backup-${timestamp}`);\n copyFileSync(CONFIG_PATHS.globalOpencodeConfig, result.opencodeBackup);\n }\n\n return result;\n}\n\nexport function writeMergedConfigs(configs: MergedConfigs): void {\n const sdlcDir = dirname(CONFIG_PATHS.globalSdlcConfig);\n if (!existsSync(sdlcDir)) {\n mkdirSync(sdlcDir, { recursive: true });\n }\n\n writeFileSync(CONFIG_PATHS.globalSdlcConfig, JSON.stringify(configs.sdlc, null, 2), \"utf-8\");\n writeFileSync(CONFIG_PATHS.globalOmoConfig, JSON.stringify(configs.omo, null, 2), \"utf-8\");\n\n if (configs.opencode) {\n writeFileSync(\n CONFIG_PATHS.globalOpencodeConfig,\n JSON.stringify(configs.opencode, null, 2),\n \"utf-8\"\n );\n }\n}\n","import { copyFileSync, existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { CONFIG_PATHS } from \"../../../shared/constants.js\";\nimport type { Migration } from \"./types.js\";\n\n/**\n * SDLC Plugin Migrations\n *\n * This is a clean start at v0.3.0. No migrations from previous athena versions.\n * Future migrations for sdlc versions will be added here.\n */\nexport const MIGRATIONS: Migration[] = [\n {\n fromVersion: \"0.0.1\",\n toVersion: \"0.3.0\",\n description: \"Initial SDLC plugin version with Marvin agent and API key auth options\",\n migrateSdlc: (config) => config,\n },\n {\n fromVersion: \"0.3.0\",\n toVersion: \"1.0.0\",\n description: \"Add v1.0 config: modes, memory, TDD updates, classifier model, subagent models\",\n migrateSdlc: (config) => {\n const migrated = { ...config };\n\n // Add modes configuration with defaults\n if (!migrated.modes) {\n migrated.modes = {\n default: \"build\",\n eventModeling: true,\n enabled: [\"discover\", \"model\", \"architect\", \"pm\", \"build\"],\n };\n }\n\n // Add memory configuration with defaults\n if (!migrated.memory) {\n migrated.memory = {\n backend: \"stateless\",\n checkpointTtl: 86400,\n };\n }\n\n // Update TDD configuration with new v1.0 fields\n if (migrated.tdd) {\n const tdd = migrated.tdd as Record<string, unknown>;\n if (tdd.domainVetoEnabled === undefined) {\n tdd.domainVetoEnabled = true;\n }\n if (tdd.debateRounds === undefined) {\n tdd.debateRounds = 2;\n }\n if (tdd.requireVerification === undefined) {\n tdd.requireVerification = true;\n }\n }\n\n // Add classifierModel to routing\n if (migrated.routing) {\n const routing = migrated.routing as Record<string, unknown>;\n if (routing.classifierModel === undefined) {\n routing.classifierModel = \"anthropic/claude-haiku\";\n }\n }\n\n // Add subagents to models with defaults\n if (migrated.models) {\n const models = migrated.models as Record<string, unknown>;\n if (!models.subagents) {\n models.subagents = {\n red: \"inherit\",\n green: \"inherit\",\n domain: \"inherit\",\n refactor: \"inherit\",\n architect: \"inherit\",\n pm: \"inherit\",\n analyst: \"inherit\",\n reviewer: \"inherit\",\n };\n }\n }\n\n return migrated;\n },\n },\n];\n\nexport interface FileMigrationResult {\n stateFileMoved: boolean;\n backupsMoved: number;\n}\n\nexport function migrateLegacyFiles(): FileMigrationResult {\n const result: FileMigrationResult = {\n stateFileMoved: false,\n backupsMoved: 0,\n };\n\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n\n if (existsSync(CONFIG_PATHS.legacyStateFile) && !existsSync(CONFIG_PATHS.stateFile)) {\n if (!existsSync(CONFIG_PATHS.sdlcDir)) {\n mkdirSync(CONFIG_PATHS.sdlcDir, { recursive: true });\n }\n copyFileSync(CONFIG_PATHS.legacyStateFile, CONFIG_PATHS.stateFile);\n unlinkSync(CONFIG_PATHS.legacyStateFile);\n result.stateFileMoved = true;\n }\n\n const backupPattern = /\\.(backup-\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{3})$/;\n const configDir = CONFIG_PATHS.globalConfigDir;\n\n if (existsSync(configDir)) {\n const files = readdirSync(configDir);\n const legacyBackups = files.filter((f) => backupPattern.test(f));\n\n if (legacyBackups.length > 0) {\n if (!existsSync(CONFIG_PATHS.backupsDir)) {\n mkdirSync(CONFIG_PATHS.backupsDir, { recursive: true });\n }\n\n for (const backupFile of legacyBackups) {\n const sourcePath = join(configDir, backupFile);\n const destPath = join(CONFIG_PATHS.backupsDir, backupFile);\n\n if (!existsSync(destPath)) {\n renameSync(sourcePath, destPath);\n result.backupsMoved++;\n }\n }\n }\n }\n\n return result;\n}\n","import * as semver from \"semver\";\nimport { VERSION } from \"../../../shared/constants.js\";\nimport { MIGRATIONS } from \"./migrations.js\";\nimport type { Migration, MigrationResult } from \"./types.js\";\n\nexport function migrateConfigs(\n sdlcConfig: Record<string, unknown>,\n omoConfig: Record<string, unknown>,\n fromVersion: string,\n opencodeConfig: Record<string, unknown> = {}\n): MigrationResult {\n const targetVersion = VERSION;\n const migrationsApplied: string[] = [];\n const breakingChangeWarnings: string[] = [];\n let hasBreakingChanges = false;\n\n let currentSdlc = { ...sdlcConfig };\n let currentOmo = { ...omoConfig };\n let currentOpencode = { ...opencodeConfig };\n\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(targetVersion)) || VERSION;\n\n const sortedMigrations = [...MIGRATIONS].sort((a, b) => {\n const aVersion = semver.valid(semver.coerce(a.fromVersion)) || \"0.0.0\";\n const bVersion = semver.valid(semver.coerce(b.fromVersion)) || \"0.0.0\";\n return semver.compare(aVersion, bVersion);\n });\n\n for (const migration of sortedMigrations) {\n const migrationTo = semver.valid(semver.coerce(migration.toVersion)) || \"0.0.0\";\n\n if (semver.lte(migrationTo, normalizedFrom)) continue;\n if (semver.gt(migrationTo, normalizedTarget)) continue;\n\n if (migration.migrateSdlc) {\n currentSdlc = migration.migrateSdlc(currentSdlc);\n }\n if (migration.migrateOmo) {\n currentOmo = migration.migrateOmo(currentOmo);\n }\n if (migration.migrateOpencode) {\n currentOpencode = migration.migrateOpencode(currentOpencode);\n }\n\n migrationsApplied.push(\n `${migration.fromVersion} → ${migration.toVersion}: ${migration.description}`\n );\n\n if (isBreakingMigration(migration)) {\n hasBreakingChanges = true;\n breakingChangeWarnings.push(\n `Migration ${migration.fromVersion} → ${migration.toVersion} contains breaking changes: ${migration.description}`\n );\n }\n }\n\n currentSdlc.version = targetVersion;\n\n return {\n fromVersion,\n toVersion: targetVersion,\n migrationsApplied,\n sdlcConfig: currentSdlc,\n omoConfig: currentOmo,\n opencodeConfig: currentOpencode,\n hasBreakingChanges,\n breakingChangeWarnings,\n };\n}\n\nfunction isBreakingMigration(migration: Migration): boolean {\n const fromMajor = semver.major(semver.coerce(migration.fromVersion) || \"0.0.0\");\n const toMajor = semver.major(semver.coerce(migration.toVersion) || \"0.0.0\");\n return toMajor > fromMajor;\n}\n\nexport function needsMigration(fromVersion: string): boolean {\n const normalizedFrom = semver.valid(semver.coerce(fromVersion)) || \"0.0.0\";\n const normalizedTarget = semver.valid(semver.coerce(VERSION)) || VERSION;\n\n if (semver.gte(normalizedFrom, normalizedTarget)) {\n return false;\n }\n\n return MIGRATIONS.some((m: Migration) => {\n const migrationTo = semver.valid(semver.coerce(m.toVersion)) || \"0.0.0\";\n\n return semver.gt(migrationTo, normalizedFrom);\n });\n}\n","/**\n * Preset Loader Utility\n *\n * Loads and processes preset configuration files for the CLI installer.\n * Presets provide default values for features, models, and settings.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type {\n AdvancedAnswers,\n FeatureAnswers,\n MethodologyAnswers,\n ModelAnswers,\n} from \"../../shared/types.js\";\n\n/**\n * Preset configuration structure (matches preset JSON files)\n * v1.0.0+ structure with profiles.\n */\nexport interface PresetConfig {\n $schema?: string;\n version: string;\n /** Internal profile identifier */\n name?: string;\n /** User-friendly display name */\n displayName?: string;\n description: string;\n /** Recommended subscriptions - for documentation only, not used as defaults */\n subscriptions: {\n claude: { enabled: boolean; tier: string };\n openai: { enabled: boolean };\n google: { enabled: boolean; authMethod: string };\n githubCopilot?: { enabled: boolean; plan: string };\n };\n models: {\n marvin?: string;\n oracle: string;\n librarian: string;\n frontend?: string;\n documentWriter?: string;\n multimodalLooker?: string;\n explore?: string;\n settings?: Record<string, unknown>;\n };\n // Legacy BMAD configuration (optional in v0.3.0+)\n bmad?: {\n defaultTrack: \"quick-flow\" | \"enterprise\";\n autoStatusUpdate: boolean;\n parallelIssueLimit: number;\n };\n // New v0.3.0+ configurations (optional for backward compatibility)\n tdd?: {\n enabled: boolean;\n verbosity: \"silent\" | \"brief\" | \"explain\";\n bypassPatterns: string[];\n mutationTesting: {\n enabled: boolean;\n requiredScore: number;\n };\n };\n eventModeling?: {\n enabled: boolean;\n outputPath: string;\n };\n git?: {\n workflow: \"standard\" | \"git-spice\";\n requireClean: boolean;\n worktrees: boolean;\n };\n modes?: {\n default: string;\n eventModeling: boolean;\n enabled: string[];\n };\n memory?: {\n backend: \"stateless\" | \"memento\";\n checkpointTtl: number;\n };\n // Features and MCPs support both old and new structures\n features: Record<string, boolean>;\n mcps: Record<string, boolean>;\n routing?: Record<string, unknown>;\n}\n\n/**\n * Preset summary for display purposes\n */\nexport interface PresetSummary {\n name: string;\n description: string;\n path: string;\n}\n\n/**\n * Defaults derived from a preset\n */\nexport interface PresetDefaults {\n models: ModelAnswers;\n methodology: MethodologyAnswers;\n features: FeatureAnswers;\n advanced: AdvancedAnswers;\n}\n\n/**\n * Profile definitions with display information\n * These are the 3 opinionated profiles available to users\n */\nexport interface ProfileDefinition {\n /** Internal identifier (matches preset file name) */\n id: string;\n /** File name in config/presets/ (without .json) */\n fileName: string;\n /** User-friendly display name */\n displayName: string;\n /** Short description */\n description: string;\n /** Recommendation text */\n recommendation: string;\n}\n\n/**\n * The 3 available profiles\n */\nexport const PROFILES: ProfileDefinition[] = [\n {\n id: \"event-modeling\",\n fileName: \"event-modeling\",\n displayName: \"Event Modeling\",\n description:\n \"Full TDD + Event Modeling + all Marvin modes. For line-of-business applications with complex state management.\",\n recommendation: \"Recommended for LOB apps\",\n },\n {\n id: \"prd\",\n fileName: \"standard\",\n displayName: \"PRD-Driven\",\n description:\n \"TDD + PRD-style specifications. For libraries, CLI tools, and APIs without long-term state tracking.\",\n recommendation: \"Recommended for libraries/tools\",\n },\n {\n id: \"tdd-only\",\n fileName: \"minimal\",\n displayName: \"TDD-Only\",\n description: \"Just TDD cycle enforcement with no planning methodology. Minimal setup.\",\n recommendation: \"For users who only want TDD\",\n },\n];\n\n/**\n * Valid preset file names (for backwards compatibility)\n */\nexport const PRESET_NAMES = [\"minimal\", \"standard\", \"event-modeling\"] as const;\nexport type PresetName = (typeof PRESET_NAMES)[number];\n\n/**\n * Get the path to the presets directory.\n * Handles both development and bundled scenarios.\n */\nfunction getPresetsDir(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n // After tsup bundling: dist/cli/index.js -> 2 levels up to package root\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n const bundledPresetsDir = join(bundledRoot, \"config\", \"presets\");\n if (existsSync(bundledPresetsDir)) {\n return bundledPresetsDir;\n }\n\n // Unbundled development: src/cli/utils/preset-loader.ts -> 3 levels up\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n const devPresetsDir = join(devRoot, \"config\", \"presets\");\n if (existsSync(devPresetsDir)) {\n return devPresetsDir;\n }\n\n // Fallback: check if we're in node_modules\n const nodeModulesPath = currentFileDir.split(\"node_modules\")[0];\n if (nodeModulesPath !== currentFileDir) {\n const packagePresetsDir = join(\n nodeModulesPath,\n \"node_modules\",\n \"opencode-sdlc\",\n \"config\",\n \"presets\"\n );\n if (existsSync(packagePresetsDir)) {\n return packagePresetsDir;\n }\n }\n\n throw new Error(\n `Could not find presets directory. Searched:\\n - ${bundledPresetsDir}\\n - ${devPresetsDir}`\n );\n}\n\n/**\n * Check if a preset name is valid\n */\nexport function isValidPresetName(name: string): name is PresetName {\n return PRESET_NAMES.includes(name as PresetName);\n}\n\n/**\n * Get a profile definition by ID\n */\nexport function getProfileById(id: string): ProfileDefinition | undefined {\n return PROFILES.find((p) => p.id === id);\n}\n\n/**\n * Load a profile configuration by profile ID\n *\n * @param profileId - The profile ID (event-modeling, prd, tdd-only)\n * @returns The parsed preset configuration\n * @throws Error if profile is not found or invalid\n */\nexport function loadProfile(profileId: string): PresetConfig {\n const profile = getProfileById(profileId);\n if (!profile) {\n const validIds = PROFILES.map((p) => p.id).join(\", \");\n throw new Error(`Invalid profile: \"${profileId}\". Valid profiles are: ${validIds}`);\n }\n\n return loadPreset(profile.fileName as PresetName);\n}\n\n/**\n * Load a preset configuration by name\n *\n * @param name - The preset name (minimal, standard, enterprise, solo-quick)\n * @returns The parsed preset configuration\n * @throws Error if preset is not found or invalid\n */\nexport function loadPreset(name: string): PresetConfig {\n if (!isValidPresetName(name)) {\n const validNames = PRESET_NAMES.join(\", \");\n throw new Error(`Invalid preset name: \"${name}\". Valid presets are: ${validNames}`);\n }\n\n const presetsDir = getPresetsDir();\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (!existsSync(presetPath)) {\n throw new Error(\n `Preset file not found: ${presetPath}\\nThis may indicate a corrupted installation. Try reinstalling opencode-sdlc.`\n );\n }\n\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n\n // Validate required fields\n // v0.3.0+: bmad is optional (legacy), tdd is optional (new)\n // At least one of bmad or tdd should be present, or neither for minimal presets\n if (!preset.version || !preset.models || !preset.features) {\n throw new Error(`Preset \"${name}\" is missing required fields`);\n }\n\n return preset;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid JSON in preset file: ${presetPath}\\nError: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * List all available profiles with their descriptions\n *\n * @returns Array of profile summaries\n */\nexport function listProfiles(): PresetSummary[] {\n return PROFILES.map((profile) => ({\n name: profile.displayName,\n description: profile.description,\n path: profile.id,\n }));\n}\n\n/**\n * List all available presets with their descriptions\n * @deprecated Use listProfiles() instead\n *\n * @returns Array of preset summaries\n */\nexport function listPresets(): PresetSummary[] {\n const presetsDir = getPresetsDir();\n const summaries: PresetSummary[] = [];\n\n for (const name of PRESET_NAMES) {\n const presetPath = join(presetsDir, `${name}.json`);\n\n if (existsSync(presetPath)) {\n try {\n const content = readFileSync(presetPath, \"utf-8\");\n const preset = JSON.parse(content) as PresetConfig;\n summaries.push({\n name,\n description: preset.description || `${name} preset`,\n path: presetPath,\n });\n } catch {\n // Skip invalid presets\n summaries.push({\n name,\n description: `${name} preset (unable to read)`,\n path: presetPath,\n });\n }\n }\n }\n\n return summaries;\n}\n\n/**\n * Convert a preset configuration to default values for the install wizard.\n *\n * Note: Subscriptions are NOT included - they are always gathered from the user.\n * Supports both v0.3.0+ (new) and legacy (bmad) presets.\n *\n * @param preset - The preset configuration\n * @returns Default values for models, methodology, features, and advanced settings\n */\nexport function presetToDefaults(preset: PresetConfig): PresetDefaults {\n // Check if using legacy (bmad) or new (tdd) structure\n const isLegacy = \"bmad\" in preset && preset.bmad !== undefined;\n\n return {\n models: {\n marvin: preset.models.marvin || \"\",\n oracle: preset.models.oracle,\n librarian: preset.models.librarian,\n frontend: preset.models.frontend,\n documentWriter: preset.models.documentWriter,\n multimodalLooker: preset.models.multimodalLooker,\n },\n methodology: isLegacy\n ? {\n defaultTrack: preset.bmad?.defaultTrack ?? \"quick-flow\",\n autoStatusUpdate: preset.bmad?.autoStatusUpdate ?? true,\n }\n : {\n // New structure uses default values - these fields are less relevant in v0.3.0+\n defaultTrack: \"quick-flow\" as const,\n autoStatusUpdate: true,\n },\n features: {\n enabledFeatures: flagsToFeatures(preset.features),\n mcps: flagsToMcps(preset.mcps),\n },\n advanced: {\n parallelIssueLimit: isLegacy ? (preset.bmad?.parallelIssueLimit ?? 0) : 0,\n experimental: [],\n },\n };\n}\n\n/**\n * Convert feature flags object to enabled features array.\n * Reverse of featuresToFlags() in features.ts\n * Supports both legacy and v0.3.0+ feature structures.\n */\nfunction flagsToFeatures(flags: PresetConfig[\"features\"]): string[] {\n const features: string[] = [];\n\n // Check if using new (v0.3.0+) or legacy feature structure\n const isNewFeatures = \"orchestratorOnly\" in flags;\n\n if (isNewFeatures) {\n // New v0.3.0+ features\n const newFlags = flags as {\n orchestratorOnly?: boolean;\n todoSync?: boolean;\n partyReview?: boolean;\n debuggingProtocol?: boolean;\n memento?: boolean;\n notifications?: boolean;\n lspTools?: boolean;\n };\n if (newFlags.orchestratorOnly) features.push(\"orchestratorOnly\");\n if (newFlags.todoSync) features.push(\"todoSync\");\n if (newFlags.partyReview) features.push(\"partyReview\");\n if (newFlags.debuggingProtocol) features.push(\"debuggingProtocol\");\n if (newFlags.memento) features.push(\"memento\");\n if (newFlags.notifications) features.push(\"notifications\");\n if (newFlags.lspTools) features.push(\"lspTools\");\n } else {\n // Legacy features\n const legacyFlags = flags as {\n bmadBridge?: boolean;\n autoStatus?: boolean;\n parallelExecution?: boolean;\n notifications?: boolean;\n contextMonitor?: boolean;\n commentChecker?: boolean;\n lspTools?: boolean;\n };\n if (legacyFlags.bmadBridge) features.push(\"bmad-bridge\");\n if (legacyFlags.autoStatus) features.push(\"auto-status\");\n if (legacyFlags.parallelExecution) features.push(\"parallel\");\n if (legacyFlags.notifications) features.push(\"notifications\");\n if (legacyFlags.contextMonitor) features.push(\"context-monitor\");\n if (legacyFlags.commentChecker) features.push(\"comment-checker\");\n if (legacyFlags.lspTools) features.push(\"lsp-tools\");\n }\n\n return features;\n}\n\n/**\n * Convert MCP flags object to enabled MCPs array.\n * Reverse of mcpsToFlags() in features.ts\n * Supports both legacy and v0.3.0+ MCP structures.\n */\nfunction flagsToMcps(mcps: PresetConfig[\"mcps\"]): string[] {\n const result: string[] = [];\n\n if (mcps.context7) result.push(\"context7\");\n if (mcps.exa) result.push(\"exa\");\n if (mcps.grepApp) result.push(\"grep_app\");\n // New v0.3.0+ MCP\n if (\"memento\" in mcps && (mcps as { memento?: boolean }).memento) {\n result.push(\"memento\");\n }\n\n return result;\n}\n\n/**\n * Get a formatted summary of a preset for display\n *\n * @param preset - The preset configuration\n * @param name - The preset name\n * @returns Formatted string describing the preset\n */\nexport function formatPresetSummary(preset: PresetConfig, name: string): string {\n const lines: string[] = [];\n\n lines.push(`Preset: ${name}`);\n lines.push(`Description: ${preset.description}`);\n lines.push(\"\");\n lines.push(\"Models:\");\n lines.push(` Marvin: ${preset.models.marvin}`);\n lines.push(` Oracle: ${preset.models.oracle}`);\n lines.push(` Librarian: ${preset.models.librarian}`);\n\n // Show configuration based on whether it's legacy (bmad) or new (tdd) preset\n if (preset.bmad) {\n lines.push(\"\");\n lines.push(\"BMAD Settings (Legacy):\");\n lines.push(` Default Track: ${preset.bmad.defaultTrack}`);\n lines.push(` Auto Status Update: ${preset.bmad.autoStatusUpdate ? \"Yes\" : \"No\"}`);\n lines.push(` Parallel Issue Limit: ${preset.bmad.parallelIssueLimit}`);\n }\n\n if (preset.tdd) {\n lines.push(\"\");\n lines.push(\"TDD Settings:\");\n lines.push(` Enabled: ${preset.tdd.enabled ? \"Yes\" : \"No\"}`);\n lines.push(` Verbosity: ${preset.tdd.verbosity}`);\n if (preset.tdd.mutationTesting?.enabled) {\n lines.push(` Mutation Testing: ${preset.tdd.mutationTesting.requiredScore}% required`);\n }\n }\n\n if (preset.eventModeling?.enabled) {\n lines.push(\"\");\n lines.push(\"Event Modeling: Enabled\");\n lines.push(` Output Path: ${preset.eventModeling.outputPath}`);\n }\n\n lines.push(\"\");\n lines.push(\"Features:\");\n const enabledFeatures = flagsToFeatures(preset.features);\n if (enabledFeatures.length > 0) {\n lines.push(` Enabled: ${enabledFeatures.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n lines.push(\"\");\n lines.push(\"MCP Servers:\");\n const enabledMcps = flagsToMcps(preset.mcps);\n if (enabledMcps.length > 0) {\n lines.push(` Enabled: ${enabledMcps.join(\", \")}`);\n } else {\n lines.push(\" Enabled: none\");\n }\n\n return lines.join(\"\\n\");\n}\n","/**\n * Install command\n *\n * Interactive installer for OpenCode SDLC.\n * Supports presets for quick configuration.\n */\n\nimport { confirm, select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type {\n InstallAnswers,\n InstallOptions,\n SdlcMode,\n SubscriptionAnswers,\n} from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport { setupSmartGitHub } from \"../questions/github-smart.js\";\nimport {\n type LoadedConfigs,\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { checkPrerequisites } from \"../utils/prerequisites.js\";\nimport {\n PROFILES,\n type PresetConfig,\n type PresetDefaults,\n type ProfileDefinition,\n formatPresetSummary,\n loadProfile,\n presetToDefaults,\n} from \"../utils/preset-loader.js\";\n\ntype InstallMode = \"fresh\" | \"upgrade\" | \"reconfigure\";\n\ninterface ModeDetectionResult {\n mode: InstallMode;\n existingVersion?: string;\n configs?: LoadedConfigs;\n}\n\nfunction detectInstallMode(options: InstallOptions, configs: LoadedConfigs): ModeDetectionResult {\n if (options.reconfigure) {\n return { mode: \"reconfigure\" };\n }\n\n if (!configs.sdlc) {\n return { mode: \"fresh\" };\n }\n\n return {\n mode: \"upgrade\",\n existingVersion: configs.sdlcVersion || \"0.0.1\",\n configs,\n };\n}\n\nasync function runUpgradeFlow(\n configs: LoadedConfigs,\n existingVersion: string,\n options: InstallOptions\n): Promise<void> {\n const { sdlc, omo, opencode } = configs;\n\n logger.section(\"Upgrading Configuration\");\n\n console.log(chalk.cyan(`\\nCurrent version: ${existingVersion}`));\n console.log(chalk.cyan(`New version: ${VERSION}\\n`));\n\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Upgrade existing installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Upgrade cancelled.\");\n process.exit(0);\n }\n }\n\n const spinner = ora(\"Creating backup...\").start();\n const backups = createBackups();\n const backupCount = [backups.sdlcBackup, backups.omoBackup, backups.opencodeBackup].filter(\n Boolean\n ).length;\n spinner.succeed(`Created ${backupCount} backup file(s)`);\n\n const fileMigrationResult = migrateLegacyFiles();\n if (fileMigrationResult.stateFileMoved || fileMigrationResult.backupsMoved > 0) {\n const moved: string[] = [];\n if (fileMigrationResult.stateFileMoved) moved.push(\"state file\");\n if (fileMigrationResult.backupsMoved > 0)\n moved.push(`${fileMigrationResult.backupsMoved} backup(s)`);\n console.log(chalk.gray(` Migrated ${moved.join(\", \")} to new sdlc/ directory`));\n }\n\n const migrationSpinner = ora(\"Applying migrations...\").start();\n const migrationResult = migrateConfigs(sdlc || {}, omo || {}, existingVersion, opencode || {});\n\n if (migrationResult.migrationsApplied.length > 0) {\n migrationSpinner.succeed(`Applied ${migrationResult.migrationsApplied.length} migration(s)`);\n for (const migration of migrationResult.migrationsApplied) {\n console.log(chalk.gray(` • ${migration}`));\n }\n } else {\n migrationSpinner.succeed(\"No migrations needed\");\n }\n\n if (migrationResult.hasBreakingChanges && !options.yes) {\n console.log(chalk.yellow(\"\\nBreaking changes detected:\"));\n for (const warning of migrationResult.breakingChangeWarnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n\n const continueUpgrade = await confirm({\n message: \"Continue with upgrade despite breaking changes?\",\n default: false,\n });\n\n if (!continueUpgrade) {\n logger.info(\"Upgrade cancelled. Your backup files are preserved.\");\n process.exit(0);\n }\n }\n\n const existingSubscriptions = extractSubscriptions(migrationResult.sdlcConfig);\n const existingModels = extractModels(migrationResult.sdlcConfig);\n const existingMethodology = extractMethodology(migrationResult.sdlcConfig);\n const existingFeatures = extractFeatures(migrationResult.sdlcConfig);\n const existingAdvanced = extractAdvanced(migrationResult.sdlcConfig);\n\n logger.section(\"Preserved Configuration\");\n\n if (existingSubscriptions) {\n console.log(chalk.bold(\"Subscriptions:\"));\n if (existingSubscriptions.hasClaude) {\n const claudeInfo =\n existingSubscriptions.claudeAuth === \"api\" ? \"API Key\" : existingSubscriptions.claudeTier;\n console.log(chalk.green(` ✓ Claude (${claudeInfo})`));\n }\n if (existingSubscriptions.hasOpenAI) {\n const openaiInfo = existingSubscriptions.openaiAuth === \"api\" ? \"API Key\" : \"Subscription\";\n console.log(chalk.green(` ✓ OpenAI (${openaiInfo})`));\n }\n if (existingSubscriptions.hasGoogle)\n console.log(chalk.green(` ✓ Google (${existingSubscriptions.googleAuth})`));\n if (existingSubscriptions.hasGitHubCopilot)\n console.log(chalk.green(` ✓ GitHub Copilot (${existingSubscriptions.copilotPlan})`));\n }\n\n if (existingModels) {\n console.log(chalk.bold(\"\\nModel Assignments:\"));\n console.log(chalk.green(` ✓ Marvin: ${existingModels.marvin}`));\n console.log(chalk.green(` ✓ Oracle: ${existingModels.oracle}`));\n console.log(chalk.green(` ✓ Librarian: ${existingModels.librarian}`));\n }\n console.log();\n\n const newFeatures = detectNewFeatures(migrationResult.sdlcConfig);\n const updatedFeatures = existingFeatures;\n\n if (newFeatures.length > 0 && !options.yes) {\n logger.section(\"New Features Available\");\n\n for (const feature of newFeatures) {\n if (feature === \"autoGitOperations\") {\n const enable = await confirm({\n message: \"Enable automatic git operations? (commits, pushes by agents)\",\n default: false,\n });\n if (enable) {\n const migratedFeatures = migrationResult.sdlcConfig.features as Record<string, unknown>;\n migratedFeatures.autoGitOperations = true;\n }\n }\n }\n }\n\n // Use existing subscriptions or default to universal (runtime handles availability)\n const finalSubscriptions: SubscriptionAnswers = existingSubscriptions || {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n const fullAnswers: InstallAnswers = {\n subscriptions: finalSubscriptions,\n models: existingModels || {\n marvin: \"\",\n oracle: \"\",\n librarian: \"\",\n },\n methodology: existingMethodology || {\n defaultTrack: \"quick-flow\",\n autoStatusUpdate: true,\n },\n features: updatedFeatures || {\n enabledFeatures: [],\n mcps: [],\n },\n advanced: existingAdvanced || {\n parallelIssueLimit: 0,\n experimental: [],\n },\n installLocation: options.local ? \"local\" : \"global\",\n };\n\n const merged = mergeConfigs(\n {\n existingSdlc: migrationResult.sdlcConfig,\n existingOmo: migrationResult.omoConfig,\n fullAnswers,\n },\n migrationResult.opencodeConfig\n );\n\n const writeSpinner = ora(\"Writing configuration...\").start();\n writeMergedConfigs(merged);\n writeSpinner.succeed(\"Configuration files updated\");\n\n const fileManager = new FileManager();\n\n const generator = new ConfigGenerator(fullAnswers);\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n const installSpinner = ora(`Installing packages: ${packages.join(\", \")}...`).start();\n await fileManager.installDependencies(packages);\n installSpinner.succeed(`Installed ${packages.length} package(s)`);\n }\n\n // Bridge commands removed in v1.0 - modes replace commands entirely\n\n logger.successBanner(`UPGRADED TO OPENCODE ATHENA ${VERSION}!`);\n\n if (backups.sdlcBackup || backups.omoBackup || backups.opencodeBackup) {\n console.log(chalk.gray(\"\\nBackups saved:\"));\n if (backups.sdlcBackup) console.log(chalk.gray(` • ${backups.sdlcBackup}`));\n if (backups.omoBackup) console.log(chalk.gray(` • ${backups.omoBackup}`));\n if (backups.opencodeBackup) console.log(chalk.gray(` • ${backups.opencodeBackup}`));\n }\n\n console.log(chalk.gray(\"\\nRestart OpenCode to use the upgraded configuration.\"));\n console.log();\n}\n\nexport async function install(options: InstallOptions): Promise<void> {\n logger.banner();\n\n const spinner = ora(\"Checking prerequisites...\").start();\n\n const prereqs = await checkPrerequisites();\n\n if (!prereqs.node.installed) {\n spinner.fail(\"Node.js not found\");\n logger.error(\"Please install Node.js 20+ first: https://nodejs.org/\");\n process.exit(1);\n }\n\n if (!prereqs.node.compatible) {\n spinner.warn(`Node.js ${prereqs.node.version} detected. Recommended: 20+`);\n }\n\n if (!prereqs.opencode.installed) {\n spinner.fail(\"OpenCode not found\");\n logger.error(\"Please install OpenCode first: https://opencode.ai/docs\");\n process.exit(1);\n }\n\n if (!prereqs.opencode.compatible) {\n spinner.warn(`OpenCode ${prereqs.opencode.version} detected. Recommended: 1.0.132+`);\n } else {\n spinner.succeed(`OpenCode ${prereqs.opencode.version || \"\"} detected`);\n }\n\n const existingConfigs = loadExistingConfigs();\n const modeResult = detectInstallMode(options, existingConfigs);\n\n if (modeResult.mode === \"upgrade\" && modeResult.configs && modeResult.existingVersion) {\n await runUpgradeFlow(modeResult.configs, modeResult.existingVersion, options);\n return;\n }\n\n if (modeResult.mode === \"reconfigure\") {\n logger.info(\"Reconfiguring from scratch (--reconfigure flag)\");\n }\n\n // Step 2: Profile selection (FIRST - always required)\n logger.section(\"Development Profile\");\n\n let preset: PresetConfig;\n let presetDefaults: PresetDefaults;\n let profileName: string;\n\n if (options.yes) {\n // Use event-modeling as default for --yes flag\n preset = loadProfile(\"event-modeling\");\n presetDefaults = presetToDefaults(preset);\n profileName = \"Event Modeling\";\n logger.info(\"Using default profile: Event Modeling (--yes flag)\");\n } else {\n // Always ask for profile selection\n const { preset: selectedPreset, profile } = await askForProfile();\n preset = selectedPreset;\n presetDefaults = presetToDefaults(preset);\n profileName = profile.displayName;\n logger.success(`Selected profile: ${profileName}`);\n }\n\n // Show profile summary\n console.log(chalk.bold(\"\\nProfile Configuration:\\n\"));\n console.log(chalk.gray(formatPresetSummary(preset, profileName)));\n console.log();\n\n // Profiles are opinionated - no customization during install\n // Users can edit config files later for advanced customization\n\n // Step 4: Use universal subscriptions - the routing system handles availability at runtime\n // We enable all providers by default; OpenCode's auth state determines actual availability\n const subscriptions: SubscriptionAnswers = {\n hasClaude: true,\n claudeAuth: \"subscription\",\n claudeTier: \"max5x\",\n hasOpenAI: true,\n openaiAuth: \"subscription\",\n hasGoogle: true,\n googleAuth: \"antigravity\",\n hasGitHubCopilot: true,\n copilotPlan: \"enterprise\",\n };\n\n // Step 5: Use profile defaults for all configuration\n // Models are handled at runtime by the routing system\n logger.section(\"Applying Profile Configuration\");\n\n // Use profile defaults for models directly\n // The routing system will handle model availability at runtime\n const models: InstallAnswers[\"models\"] = {\n marvin: presetDefaults.models.marvin,\n oracle: presetDefaults.models.oracle,\n librarian: presetDefaults.models.librarian,\n frontend: presetDefaults.models.frontend,\n documentWriter: presetDefaults.models.documentWriter,\n multimodalLooker: presetDefaults.models.multimodalLooker,\n };\n\n const methodology: InstallAnswers[\"methodology\"] = presetDefaults.methodology;\n const features: InstallAnswers[\"features\"] = presetDefaults.features;\n const advanced: InstallAnswers[\"advanced\"] = presetDefaults.advanced;\n\n // Use profile defaults for TDD, Event Modeling, Git, Modes, Memory\n const tdd: InstallAnswers[\"tdd\"] = preset.tdd\n ? {\n enabled: preset.tdd.enabled,\n verbosity: preset.tdd.verbosity,\n bypassPatterns: preset.tdd.bypassPatterns,\n mutationTesting: preset.tdd.mutationTesting,\n domainVetoEnabled: true,\n debateRounds: 2,\n requireVerification: true,\n }\n : undefined;\n\n const eventModeling: InstallAnswers[\"eventModeling\"] = preset.eventModeling\n ? {\n enabled: preset.eventModeling.enabled,\n outputPath: preset.eventModeling.outputPath,\n }\n : undefined;\n\n const gitWorkflow: InstallAnswers[\"gitWorkflow\"] = preset.git\n ? {\n workflow: preset.git.workflow,\n requireClean: preset.git.requireClean,\n worktrees: preset.git.worktrees,\n }\n : undefined;\n\n const modes: InstallAnswers[\"modes\"] = preset.modes\n ? {\n default: preset.modes.default as SdlcMode,\n eventModeling: preset.modes.eventModeling,\n enabled: preset.modes.enabled as SdlcMode[],\n }\n : undefined;\n\n const memory: InstallAnswers[\"memory\"] = preset.memory\n ? {\n backend: preset.memory.backend,\n checkpointTtl: preset.memory.checkpointTtl,\n }\n : undefined;\n\n // GitHub Integration - smart setup with auto-detection\n logger.section(\"GitHub Integration\");\n const githubResult = await setupSmartGitHub(process.cwd());\n\n // Convert smart GitHub result to InstallAnswers format\n const github =\n githubResult.enabled && githubResult.config\n ? {\n enabled: true,\n owner: githubResult.config.owner,\n repo: githubResult.config.repo,\n project: githubResult.config.project,\n statuses: githubResult.config.statuses || [],\n }\n : { enabled: false, owner: \"\", repo: \"\", statuses: [] };\n\n if (githubResult.repoCreated) {\n logger.success(\"Created new GitHub repository\");\n }\n if (githubResult.projectCreated) {\n logger.success(\"Linked project board\");\n }\n if (githubResult.rulesetsCreated) {\n logger.success(\"Created branch protection rules\");\n }\n logger.success(\"Profile configuration applied\");\n\n // Step 6: Generate configuration\n logger.section(\"Generating Configuration\");\n\n const answers: InstallAnswers = {\n subscriptions,\n models,\n methodology,\n features,\n advanced,\n installLocation: options.local ? \"local\" : \"global\",\n github,\n tdd,\n eventModeling,\n gitWorkflow,\n // v1.0.0 additions\n modes,\n memory,\n };\n\n const generator = new ConfigGenerator(answers);\n const files = await generator.generate();\n\n // Step 7: Preview files\n console.log(chalk.bold(\"Files to be created/modified:\\n\"));\n for (const file of files) {\n const action = file.exists ? chalk.yellow(\"update\") : chalk.green(\"create\");\n console.log(chalk.gray(` [${action}] ${file.path}`));\n }\n console.log();\n\n // Step 8: Confirm installation\n if (!options.yes) {\n const proceed = await confirm({\n message: \"Proceed with installation?\",\n default: true,\n });\n\n if (!proceed) {\n logger.info(\"Installation cancelled.\");\n process.exit(0);\n }\n }\n\n // Step 9: Install\n const installSpinner = ora(\"Installing OpenCode SDLC...\").start();\n\n try {\n const fileManager = new FileManager(generator.getConfigDir());\n\n // Write configuration files\n await fileManager.writeFiles(files);\n installSpinner.text = \"Configuration files written...\";\n\n // Install npm dependencies\n const packages = generator.getRequiredPackages();\n if (packages.length > 0) {\n installSpinner.text = `Installing dependencies: ${packages.join(\", \")}...`;\n await fileManager.installDependencies(packages);\n }\n\n // v1.0.0: Copy agent mode files to project directory if modes are enabled\n // Note: Bridge commands removed in v1.0 - modes replace commands entirely\n if (modes?.enabled && modes.enabled.length > 0) {\n installSpinner.text = \"Installing Marvin mode agents...\";\n const projectDir = process.cwd();\n const copiedAgents = await fileManager.copyAgentModes(projectDir, modes.enabled);\n if (copiedAgents.length > 0) {\n logger.info(`Installed ${copiedAgents.length} Marvin mode agents to .opencode/agent/`);\n }\n }\n\n installSpinner.succeed(\"Installation complete!\");\n } catch (error) {\n installSpinner.fail(\"Installation failed\");\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n // Step 10: Print next steps\n printNextSteps();\n}\n\n/**\n * Ask user to select a development profile\n * This is always the first question in the install flow\n */\nasync function askForProfile(): Promise<{ preset: PresetConfig; profile: ProfileDefinition }> {\n console.log(\n chalk.gray(\"\\nChoose a profile based on your project type. Each profile is opinionated\\n\") +\n chalk.gray(\"and includes sensible defaults - you can customize later if needed.\\n\")\n );\n\n const choices = PROFILES.map((p) => ({\n name: `${p.displayName} (${p.recommendation})`,\n value: p.id,\n description: p.description,\n }));\n\n const selected = await select({\n message: \"Select a development profile:\",\n choices,\n default: \"event-modeling\",\n });\n\n const profile = PROFILES.find((p) => p.id === selected);\n if (!profile) {\n throw new Error(`Profile not found: ${selected}`);\n }\n\n const preset = loadProfile(selected);\n return { preset, profile };\n}\n\n/**\n * Print next steps after installation\n */\nfunction printNextSteps(): void {\n logger.successBanner(\"OPENCODE SDLC INSTALLED SUCCESSFULLY!\");\n\n console.log(chalk.bold(\"Next Steps:\\n\"));\n console.log(\" 1. Authenticate with your LLM providers:\");\n console.log(` ${chalk.cyan(\"opencode auth login\")}`);\n console.log(\n \" (Select providers you have access to: Anthropic, OpenAI, Google, GitHub Copilot)\"\n );\n console.log();\n console.log(\" 2. Start OpenCode in your project directory:\");\n console.log(` ${chalk.cyan(\"opencode\")}`);\n\n console.log(chalk.bold(\"\\nThe SDLC plugin will automatically:\\n\"));\n console.log(chalk.gray(\" • Enforce TDD cycles (RED → DOMAIN → GREEN → DOMAIN)\"));\n console.log(chalk.gray(\" • Track work via GitHub Issues\"));\n console.log(chalk.gray(\" • Apply file ownership rules\"));\n console.log(chalk.gray(\" • Route to available models at runtime\"));\n console.log(chalk.gray(\"\\nUse Tab to switch between Marvin modes (Build, Discover, etc.)\"));\n\n console.log(chalk.gray(\"\\nAdvanced: Edit ~/.config/opencode/sdlc.json to customize models.\"));\n console.log(chalk.gray(\"Documentation: https://github.com/jwilger/opencode-sdlc-plugin\"));\n console.log();\n}\n","/**\n * Detect OpenCode authentication status\n *\n * Reads ~/.opencode.json to check which providers are authenticated.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface AuthStatus {\n anthropic: boolean;\n openai: boolean;\n google: boolean;\n githubCopilot: boolean;\n}\n\ninterface OpencodeConfig {\n providers?: Record<string, { apiKey?: string; disabled?: boolean }>;\n}\n\nexport async function detectAuthStatus(): Promise<AuthStatus> {\n const opencodeConfigPath = join(homedir(), \".opencode.json\");\n\n if (!existsSync(opencodeConfigPath)) {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n\n try {\n const content = readFileSync(opencodeConfigPath, \"utf-8\");\n const config = JSON.parse(content) as OpencodeConfig;\n\n const providers = config.providers || {};\n\n return {\n anthropic: isProviderAuthenticated(providers, \"anthropic\"),\n openai: isProviderAuthenticated(providers, \"openai\"),\n google: isProviderAuthenticated(providers, \"google\"),\n githubCopilot: isProviderAuthenticated(providers, \"github-copilot\"),\n };\n } catch {\n return {\n anthropic: false,\n openai: false,\n google: false,\n githubCopilot: false,\n };\n }\n}\n\nfunction isProviderAuthenticated(\n providers: Record<string, { apiKey?: string; disabled?: boolean }>,\n providerName: string\n): boolean {\n const provider = providers[providerName];\n if (!provider) return false;\n\n return provider.apiKey !== undefined && provider.apiKey !== \"\" && !provider.disabled;\n}\n","/**\n * Provider management command\n *\n * Subcommands:\n * - (no subcommand): Show status\n * - add: Add a provider\n * - remove: Remove a provider\n * - refresh: Re-evaluate model defaults\n * - sync: Sync with OpenCode auth state\n */\n\nimport { select } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { detectAuthStatus } from \"../utils/auth-detector.js\";\nimport { extractSubscriptions, loadExistingConfigs } from \"../utils/config-loader.js\";\nimport { logger } from \"../utils/logger.js\";\n\ntype ProviderAction = \"status\" | \"add\" | \"remove\" | \"refresh\" | \"sync\";\n\nexport interface ProvidersOptions {\n action?: ProviderAction;\n}\n\nexport async function providers(options: ProvidersOptions): Promise<void> {\n const action = options.action || \"status\";\n\n switch (action) {\n case \"status\":\n await showStatus();\n break;\n case \"add\":\n await addProvider();\n break;\n case \"remove\":\n await removeProvider();\n break;\n case \"refresh\":\n await refreshDefaults();\n break;\n case \"sync\":\n await syncWithAuth();\n break;\n }\n}\n\nasync function showStatus(): Promise<void> {\n logger.banner();\n logger.section(\"Provider Status\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const subscriptions = extractSubscriptions(configs.sdlc);\n if (!subscriptions) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const spinner = ora(\"Checking authentication status...\").start();\n const authStatus = await detectAuthStatus();\n spinner.stop();\n\n console.log(chalk.bold(\"\\nConfigured Providers:\\n\"));\n\n displayProvider(\n \"Claude\",\n subscriptions.hasClaude,\n subscriptions.claudeTier,\n authStatus.anthropic\n );\n displayProvider(\"OpenAI\", subscriptions.hasOpenAI, undefined, authStatus.openai);\n displayProvider(\"Google\", subscriptions.hasGoogle, subscriptions.googleAuth, authStatus.google);\n displayProvider(\n \"GitHub Copilot\",\n subscriptions.hasGitHubCopilot,\n subscriptions.copilotPlan,\n authStatus.githubCopilot\n );\n\n const models = configs.sdlc.models as Record<string, string>;\n if (models) {\n console.log(chalk.bold(\"\\nCurrent Model Assignments:\\n\"));\n console.log(` ${chalk.cyan(\"Marvin:\")} ${models.marvin || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Oracle:\")} ${models.oracle || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Librarian:\")} ${models.librarian || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Frontend:\")} ${models.frontend || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Doc Writer:\")} ${models.documentWriter || \"not set\"}`);\n console.log(` ${chalk.cyan(\"Multimodal:\")} ${models.multimodalLooker || \"not set\"}`);\n }\n\n if (!authStatus.anthropic && subscriptions.hasClaude) {\n console.log(chalk.yellow(\"\\n⚠ Tip: Run 'opencode auth login' to authenticate Claude\"));\n }\n if (!authStatus.openai && subscriptions.hasOpenAI) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate OpenAI\"));\n }\n if (!authStatus.google && subscriptions.hasGoogle) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate Google\"));\n }\n if (!authStatus.githubCopilot && subscriptions.hasGitHubCopilot) {\n console.log(chalk.yellow(\"⚠ Tip: Run 'opencode auth login' to authenticate GitHub Copilot\"));\n }\n\n console.log();\n}\n\nfunction displayProvider(\n name: string,\n enabled: boolean,\n tier: string | undefined,\n authenticated: boolean\n): void {\n const status = enabled ? chalk.green(\"✓ Enabled\") : chalk.gray(\"✗ Disabled\");\n const auth = enabled\n ? authenticated\n ? chalk.green(\"✓ Authenticated\")\n : chalk.yellow(\"⚠ Not authenticated\")\n : chalk.gray(\"(disabled)\");\n const tierText = tier && tier !== \"none\" ? chalk.gray(` (${tier})`) : \"\";\n\n console.log(` ${status.padEnd(30)} ${name}${tierText}`);\n console.log(` ${\" \".repeat(30)} Auth: ${auth}`);\n}\n\nasync function addProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Add Provider\");\n\n const configs = loadExistingConfigs();\n if (!configs.sdlc) {\n logger.error(\"No Sdlc configuration found. Run 'opencode-sdlc install' first.\");\n process.exit(1);\n }\n\n const currentSubs = extractSubscriptions(configs.sdlc);\n if (!currentSubs) {\n logger.error(\"Could not read subscription configuration.\");\n process.exit(1);\n }\n\n const choices = [];\n if (!currentSubs.hasClaude) choices.push({ name: \"Claude Pro/Max\", value: \"claude\" });\n if (!currentSubs.hasOpenAI) choices.push({ name: \"OpenAI ChatGPT Plus/Pro\", value: \"openai\" });\n if (!currentSubs.hasGoogle) choices.push({ name: \"Google/Gemini\", value: \"google\" });\n if (!currentSubs.hasGitHubCopilot) choices.push({ name: \"GitHub Copilot\", value: \"copilot\" });\n\n if (choices.length === 0) {\n logger.info(\"All providers are already enabled.\");\n return;\n }\n\n const provider = await select({\n message: \"Which provider do you want to add?\",\n choices,\n });\n\n const newSubs = { ...currentSubs };\n\n if (provider === \"claude\") {\n newSubs.hasClaude = true;\n newSubs.claudeTier = await select({\n message: \"Which Claude tier?\",\n choices: [\n { name: \"Max 5x\", value: \"max5x\" as const },\n { name: \"Max 20x\", value: \"max20x\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n ],\n });\n } else if (provider === \"openai\") {\n newSubs.hasOpenAI = true;\n } else if (provider === \"google\") {\n newSubs.hasGoogle = true;\n newSubs.googleAuth = await select({\n message: \"Google authentication method?\",\n choices: [\n { name: \"Google Workspace (Antigravity OAuth)\", value: \"antigravity\" as const },\n { name: \"Personal Google Account\", value: \"personal\" as const },\n { name: \"API Key\", value: \"api\" as const },\n ],\n });\n } else if (provider === \"copilot\") {\n newSubs.hasGitHubCopilot = true;\n newSubs.copilotPlan = await select({\n message: \"Which GitHub Copilot plan?\",\n choices: [\n { name: \"Enterprise\", value: \"enterprise\" as const },\n { name: \"Pro+\", value: \"pro-plus\" as const },\n { name: \"Pro\", value: \"pro\" as const },\n { name: \"Business\", value: \"business\" as const },\n { name: \"Free\", value: \"free\" as const },\n ],\n });\n }\n\n logger.success(`Provider added: ${provider}`);\n console.log(chalk.gray(\"\\nRun 'opencode-sdlc providers refresh' to update model defaults.\"));\n}\n\nasync function removeProvider(): Promise<void> {\n logger.banner();\n logger.section(\"Remove Provider\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function refreshDefaults(): Promise<void> {\n logger.banner();\n logger.section(\"Refresh Model Defaults\");\n\n logger.info(\"Not yet implemented.\");\n}\n\nasync function syncWithAuth(): Promise<void> {\n logger.banner();\n logger.section(\"Sync with OpenCode Auth\");\n\n logger.info(\"Not yet implemented.\");\n}\n","/**\n * Uninstall command\n *\n * Remove OpenCode SDLC configuration and dependencies.\n */\n\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport type { UninstallOptions } from \"../../shared/types.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\n\n/**\n * Main uninstall command handler\n */\nexport async function uninstall(options: UninstallOptions): Promise<void> {\n logger.banner();\n\n logger.warn(\"This will remove OpenCode SDLC from your system.\");\n console.log();\n\n // Confirm uninstall\n const proceed = await confirm({\n message: \"Are you sure you want to uninstall OpenCode SDLC?\",\n default: false,\n });\n\n if (!proceed) {\n logger.info(\"Uninstall cancelled.\");\n return;\n }\n\n logger.section(\"Uninstalling OpenCode SDLC\");\n\n const fileManager = new FileManager();\n\n // Step 1: Remove any legacy bridge commands (deprecated in v1.0)\n const commandsSpinner = ora(\"Cleaning up legacy bridge commands...\").start();\n try {\n const removedCommands = await fileManager.removeCommands();\n if (removedCommands.length > 0) {\n commandsSpinner.succeed(`Removed ${removedCommands.length} legacy command(s)`);\n } else {\n commandsSpinner.info(\"No legacy bridge commands found\");\n }\n } catch (err) {\n commandsSpinner.fail(\"Failed to remove legacy commands\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 2: Remove config files (unless --keep-config)\n if (!options.keepConfig) {\n const configSpinner = ora(\"Removing configuration files...\").start();\n try {\n const removedFiles = await fileManager.removeConfigFiles();\n if (removedFiles.length > 0) {\n configSpinner.succeed(`Removed ${removedFiles.length} configuration file(s)`);\n } else {\n configSpinner.info(\"No Sdlc configuration files found\");\n }\n } catch (err) {\n configSpinner.fail(\"Failed to remove configuration files\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n } else {\n logger.info(\"Keeping configuration files (--keep-config)\");\n }\n\n // Step 3: Remove from opencode.json\n const opencodeSpinner = ora(\"Updating opencode.json...\").start();\n try {\n const updated = await fileManager.removeFromOpencodeConfig();\n if (updated) {\n opencodeSpinner.succeed(\"Removed Sdlc plugins from opencode.json\");\n } else {\n opencodeSpinner.info(\"No Sdlc plugins found in opencode.json\");\n }\n } catch (err) {\n opencodeSpinner.fail(\"Failed to update opencode.json\");\n logger.error(err instanceof Error ? err.message : String(err));\n }\n\n // Step 4: Remove npm dependencies (unless --keep-deps)\n if (!options.keepDeps) {\n const depsSpinner = ora(\"Removing npm dependencies...\").start();\n try {\n const packagesToRemove = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n await fileManager.uninstallDependencies(packagesToRemove);\n depsSpinner.succeed(\"Removed npm dependencies\");\n } catch (_err) {\n depsSpinner.warn(\"Some dependencies could not be removed\");\n }\n } else {\n logger.info(\"Keeping npm dependencies (--keep-deps)\");\n }\n\n console.log();\n logger.success(\"OpenCode SDLC has been uninstalled.\");\n\n if (options.keepConfig) {\n logger.info(\"Configuration files were preserved.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to reinstall with existing config.`);\n }\n\n console.log();\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport semver from \"semver\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport type { InstallAnswers, SubscriptionAnswers, UpgradeOptions } from \"../../shared/types.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport {\n detectNewFeatures,\n extractAdvanced,\n extractFeatures,\n extractMethodology,\n extractModels,\n extractSubscriptions,\n loadExistingConfigs,\n} from \"../utils/config-loader.js\";\nimport { createBackups, mergeConfigs, writeMergedConfigs } from \"../utils/config-merger.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { migrateConfigs, migrateLegacyFiles } from \"../utils/migrations/index.js\";\nimport { getInstalledPlugins } from \"../utils/prerequisites.js\";\n\nconst execAsync = promisify(exec);\n\ninterface PackageUpdate {\n name: string;\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\ntype ReleaseChannel = \"latest\" | \"beta\" | \"alpha\";\n\nfunction detectReleaseChannel(version: string): ReleaseChannel {\n if (version.includes(\"-beta\")) return \"beta\";\n if (version.includes(\"-alpha\")) return \"alpha\";\n return \"latest\";\n}\n\nasync function getLatestVersion(\n packageName: string,\n tag: ReleaseChannel = \"latest\"\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(`npm view ${packageName}@${tag} version`);\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\nasync function checkPackageUpdate(name: string, currentVersion: string): Promise<PackageUpdate> {\n const latest = await getLatestVersion(name);\n const hasUpdate =\n latest !== null && semver.valid(latest) && semver.valid(currentVersion)\n ? semver.gt(latest, currentVersion)\n : latest !== null && latest !== currentVersion;\n return {\n name,\n current: currentVersion,\n latest: latest || currentVersion,\n updateAvailable: hasUpdate,\n };\n}\n\nexport async function upgrade(options: UpgradeOptions): Promise<void> {\n logger.banner();\n\n const configs = loadExistingConfigs();\n\n if (!configs.sdlc) {\n logger.error(\"No existing Sdlc installation found.\");\n logger.info(`Run ${chalk.cyan(\"opencode-sdlc install\")} to install for the first time.`);\n process.exit(1);\n }\n\n const existingVersion = configs.sdlcVersion || \"0.0.1\";\n\n logger.section(\"Checking for Updates\");\n\n const spinner = ora(\"Checking package versions...\").start();\n\n const installedPlugins = await getInstalledPlugins();\n\n const packagesToCheck = [\n \"oh-my-opencode\",\n \"opencode-antigravity-auth\",\n \"opencode-openai-codex-auth\",\n ];\n\n const updates: PackageUpdate[] = [];\n\n const sdlcChannel = detectReleaseChannel(VERSION);\n const sdlcLatest = await getLatestVersion(\"opencode-sdlc\", 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","/**\n * OpenCode SDLC CLI\n *\n * Interactive installer and management tool for OpenCode SDLC.\n */\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { DISPLAY_NAME, TAGLINE, VERSION } from \"../shared/constants.js\";\nimport { doctor } from \"./commands/doctor.js\";\nimport { info } from \"./commands/info.js\";\nimport { install } from \"./commands/install.js\";\nimport { providers } from \"./commands/providers.js\";\nimport { uninstall } from \"./commands/uninstall.js\";\nimport { upgrade } from \"./commands/upgrade.js\";\nimport { listProfiles } from \"./utils/preset-loader.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"opencode-sdlc\")\n .description(\n `${chalk.cyan(DISPLAY_NAME)} - ${TAGLINE}\\nTDD-driven development toolkit with GitHub Issues integration for OpenCode`\n )\n .version(VERSION);\n\nprogram\n .command(\"install\")\n .description(\"Install and configure OpenCode SDLC\")\n .option(\"-y, --yes\", \"Skip confirmation prompts (uses Event Modeling profile)\", false)\n .option(\"--advanced\", \"Show advanced configuration options\", false)\n .option(\"--global\", \"Install globally (default)\", true)\n .option(\"--local\", \"Install to current project only\", false)\n .option(\"--list-profiles\", \"List available profiles and exit\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration (ignore existing config)\", false)\n .action(async (options) => {\n if (options.listProfiles) {\n displayProfiles();\n return;\n }\n await install(options);\n });\n\nprogram\n .command(\"upgrade\")\n .description(\"Upgrade OpenCode SDLC to latest version\")\n .option(\"--check\", \"Check for updates without installing\", false)\n .option(\"-y, --yes\", \"Skip confirmation prompts\", false)\n .action(upgrade);\n\nprogram\n .command(\"doctor\")\n .description(\"Diagnose and fix common issues\")\n .option(\"--fix\", \"Automatically fix issues\", false)\n .action(doctor);\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove OpenCode SDLC\")\n .option(\"--keep-config\", \"Keep configuration files\", false)\n .option(\"--keep-deps\", \"Keep npm dependencies\", false)\n .action(uninstall);\n\nprogram.command(\"info\").description(\"Show current configuration and status\").action(info);\n\nprogram\n .command(\"providers [action]\")\n .description(\"Manage LLM provider subscriptions (status/add/remove/refresh/sync)\")\n .option(\"-v, --verbose\", \"Show detailed provider information\", false)\n .action(async (action) => {\n await providers({ action });\n });\n\n/**\n * Display available profiles in a formatted way\n */\nfunction displayProfiles(): void {\n console.log(chalk.bold.cyan(\"\\nAvailable Development Profiles:\\n\"));\n\n const profiles = listProfiles();\n\n for (const profile of profiles) {\n console.log(chalk.bold(` ${profile.name}`));\n console.log(chalk.gray(` ${profile.description}`));\n console.log();\n }\n\n console.log(chalk.gray(\"Usage: opencode-sdlc install\"));\n console.log(chalk.gray(\" opencode-sdlc install --yes (uses Event Modeling profile)\\n\"));\n}\n\nprogram.parse();\n"]}
|