opencode-sdlc-plugin 0.2.1 → 0.3.2

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.
Files changed (72) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +127 -38
  3. package/commands/sdlc-adr.md +245 -17
  4. package/commands/sdlc-debug.md +376 -0
  5. package/commands/sdlc-design.md +205 -47
  6. package/commands/sdlc-dev.md +544 -0
  7. package/commands/sdlc-info.md +325 -0
  8. package/commands/sdlc-parallel.md +283 -0
  9. package/commands/sdlc-recall.md +203 -8
  10. package/commands/sdlc-remember.md +126 -9
  11. package/commands/sdlc-research.md +343 -0
  12. package/commands/sdlc-review.md +201 -128
  13. package/commands/sdlc-status.md +297 -0
  14. package/config/presets/copilot-only.json +69 -0
  15. package/config/presets/enterprise.json +79 -0
  16. package/config/presets/event-modeling.json +74 -8
  17. package/config/presets/minimal.json +70 -0
  18. package/config/presets/solo-quick.json +70 -0
  19. package/config/presets/standard.json +78 -0
  20. package/config/presets/strict-tdd.json +79 -0
  21. package/config/schemas/athena.schema.json +338 -0
  22. package/config/schemas/sdlc.schema.json +442 -26
  23. package/dist/cli/index.d.ts +2 -1
  24. package/dist/cli/index.js +4285 -562
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/index.d.ts +1781 -1
  27. package/dist/index.js +7759 -395
  28. package/dist/index.js.map +1 -1
  29. package/dist/plugin/index.d.ts +17 -2
  30. package/dist/plugin/index.js +7730 -397
  31. package/dist/plugin/index.js.map +1 -1
  32. package/package.json +68 -33
  33. package/prompts/agents/code-reviewer.md +229 -0
  34. package/prompts/agents/domain.md +210 -0
  35. package/prompts/agents/green.md +148 -0
  36. package/prompts/agents/mutation.md +278 -0
  37. package/prompts/agents/red.md +112 -0
  38. package/prompts/event-modeling/discovery.md +176 -0
  39. package/prompts/event-modeling/gwt-generation.md +479 -0
  40. package/prompts/event-modeling/workflow-design.md +318 -0
  41. package/prompts/personas/amelia-developer.md +43 -0
  42. package/prompts/personas/bob-sm.md +43 -0
  43. package/prompts/personas/john-pm.md +43 -0
  44. package/prompts/personas/mary-analyst.md +43 -0
  45. package/prompts/personas/murat-tester.md +43 -0
  46. package/prompts/personas/paige-techwriter.md +43 -0
  47. package/prompts/personas/sally-ux.md +43 -0
  48. package/prompts/personas/winston-architect.md +43 -0
  49. package/agents/design-facilitator.md +0 -8
  50. package/agents/domain.md +0 -9
  51. package/agents/exploration.md +0 -8
  52. package/agents/green.md +0 -9
  53. package/agents/marvin.md +0 -15
  54. package/agents/model-checker.md +0 -9
  55. package/agents/red.md +0 -9
  56. package/commands/sdlc-domain-audit.md +0 -32
  57. package/commands/sdlc-plan.md +0 -63
  58. package/commands/sdlc-pr.md +0 -43
  59. package/commands/sdlc-setup.md +0 -50
  60. package/commands/sdlc-start.md +0 -34
  61. package/commands/sdlc-work.md +0 -118
  62. package/config/presets/traditional.json +0 -12
  63. package/skills/adr-policy.md +0 -21
  64. package/skills/atomic-design.md +0 -39
  65. package/skills/debugging-protocol.md +0 -47
  66. package/skills/event-modeling.md +0 -40
  67. package/skills/git-spice.md +0 -44
  68. package/skills/github-issues.md +0 -44
  69. package/skills/memory-protocol.md +0 -41
  70. package/skills/orchestration.md +0 -118
  71. package/skills/skill-enforcement.md +0 -56
  72. package/skills/tdd-constraints.md +0 -63
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/shared/constants.ts","../../src/cli/commands/install.ts","../../src/cli/questions/install-prompts.ts","../../src/cli/generators/config-generator.ts","../../src/cli/generators/sdlc-config.ts","../../src/cli/generators/omo-config.ts","../../src/cli/utils/persona-builder.ts","../../src/cli/generators/opencode-config.ts","../../src/cli/utils/file-manager.ts","../../src/cli/utils/prerequisites.ts","../../src/cli/utils/logger.ts","../../src/cli/commands/doctor.ts","../../src/cli/commands/upgrade.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport kleur from \"kleur\";\nimport { DISPLAY_NAME, TAGLINE, VERSION } from \"../shared/constants.js\";\nimport { install } from \"./commands/install.js\";\nimport { doctor } from \"./commands/doctor.js\";\nimport { upgrade } from \"./commands/upgrade.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"opencode-sdlc-plugin\")\n .description(`${kleur.cyan(DISPLAY_NAME)} - ${TAGLINE}`)\n .version(VERSION);\n\nprogram\n .command(\"install\")\n .description(\"Install and configure OpenCode SDLC plugin\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\", false)\n .option(\"--global\", \"Install globally (default)\", true)\n .option(\"--local\", \"Install to current project only\", false)\n .option(\"--reconfigure\", \"Force full reconfiguration\", false)\n .action(async (options: { yes?: boolean; global?: boolean; local?: boolean; reconfigure?: boolean }) => {\n await install(options);\n });\n\nprogram\n .command(\"upgrade\")\n .description(\"Upgrade OpenCode SDLC plugin\")\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 setup issues\")\n .option(\"--fix\", \"Attempt to fix detected issues\", false)\n .action(doctor);\n\nprogram.parse();\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const VERSION = \"0.2.1\";\nexport const DISPLAY_NAME = \"OpenCode SDLC Plugin\";\nexport const TAGLINE = \"Agentic SDLC workflow with discovery, ADRs, and TDD\";\n\nexport const PACKAGE_NAME = \"opencode-sdlc-plugin\";\n\nexport const GLOBAL_CONFIG_DIR = join(homedir(), \".config\", \"opencode\");\nexport const LOCAL_CONFIG_DIR_NAME = \".opencode\";\n\nexport const CONFIG_FILE_NAME = \"sdlc.json\";\nexport const STATE_FILE_NAME = \"sdlc-state.json\";\nexport const OPENCODE_CONFIG_NAME = \"opencode.json\";\nexport const OMO_CONFIG_NAME = \"oh-my-opencode.json\";\nexport const COMMAND_DIR_NAME = \"command\";\n\nexport const DEFAULT_AGENT_MODEL = \"anthropic/claude-sonnet-4-5-thinking\";\n\nexport const CONFIG_PATHS = {\n globalConfigDir: GLOBAL_CONFIG_DIR,\n globalSdlcConfig: join(GLOBAL_CONFIG_DIR, CONFIG_FILE_NAME),\n globalOpencodeConfig: join(GLOBAL_CONFIG_DIR, OPENCODE_CONFIG_NAME),\n globalOhMyOpencodeConfig: join(GLOBAL_CONFIG_DIR, OMO_CONFIG_NAME),\n commandsDir: join(GLOBAL_CONFIG_DIR, COMMAND_DIR_NAME),\n};\n","import kleur from \"kleur\";\nimport ora from \"ora\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers, InstallLocation } from \"../../shared/types.js\";\nimport { VERSION } from \"../../shared/constants.js\";\nimport {\n compileInstallAnswers,\n gatherGitHub,\n gatherLanguages,\n gatherMethodology,\n gatherModels,\n gatherSubscriptions,\n} from \"../questions/install-prompts.js\";\nimport { ConfigGenerator } from \"../generators/config-generator.js\";\nimport { FileManager } from \"../utils/file-manager.js\";\nimport { checkPrerequisites } from \"../utils/prerequisites.js\";\nimport { logger } from \"../utils/logger.js\";\n\ninterface InstallOptions {\n yes?: boolean;\n global?: boolean;\n local?: boolean;\n reconfigure?: boolean;\n}\n\nfunction resolveInstallLocation(options: InstallOptions): InstallLocation {\n if (options.local === true) return \"local\";\n return \"global\";\n}\n\nexport async function install(options: InstallOptions): Promise<void> {\n logger.banner();\n\n const spinner = ora(\"Checking prerequisites...\").start();\n const prereqs = checkPrerequisites();\n let fileManager = new FileManager(\n resolveInstallLocation(options) === \"local\" ? join(process.cwd(), \".opencode\") : undefined\n );\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.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.ohMyOpencode.installed) {\n spinner.warn(\"oh-my-opencode not found - installing...\");\n const ohMyOpencodeSpinner = ora(\"Installing oh-my-opencode...\").start();\n try {\n await fileManager.installOhMyOpencode();\n const updatedPrereqs = checkPrerequisites();\n if (!updatedPrereqs.ohMyOpencode.installed) {\n ohMyOpencodeSpinner.fail(\"oh-my-opencode install did not register\");\n logger.error(\"Please install oh-my-opencode manually: https://github.com/khulnasoft/oh-my-opencode\");\n process.exit(1);\n }\n ohMyOpencodeSpinner.succeed(\"oh-my-opencode installed\");\n } catch (error) {\n ohMyOpencodeSpinner.fail(\"Failed to install oh-my-opencode\");\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Installation error: ${message}`);\n logger.error(\"Please install oh-my-opencode manually: https://github.com/khulnasoft/oh-my-opencode\");\n process.exit(1);\n }\n }\n\n spinner.succeed(\"Prerequisites checked\");\n\n const subscriptions = await gatherSubscriptions();\n const availableModels = prereqs.opencode.models.length > 0 ? prereqs.opencode.models : [\"anthropic/claude-sonnet-4-5-thinking\"];\n const models = await gatherModels(availableModels);\n const methodology = await gatherMethodology();\n const github = await gatherGitHub();\n const languages = await gatherLanguages();\n const installLocation = resolveInstallLocation(options);\n\n const answers: InstallAnswers = compileInstallAnswers({\n subscriptions,\n models,\n methodology,\n github,\n languages,\n installLocation,\n });\n\n const generator = new ConfigGenerator(answers);\n const files = generator.generate();\n\n fileManager = new FileManager(generator.getConfigDir());\n\n const installSpinner = ora(\"Writing configuration...\").start();\n await fileManager.writeFiles(files);\n installSpinner.succeed(\"Configuration written\");\n\n const dependencySpinner = ora(\"Installing dependencies...\").start();\n const packages = generator.getRequiredPackages();\n await fileManager.installDependencies(packages);\n dependencySpinner.succeed(\"Dependencies installed\");\n\n const commandSpinner = ora(\"Installing commands...\").start();\n const copiedCommands = await fileManager.copyCommands();\n commandSpinner.succeed(`Installed ${copiedCommands.length} commands`);\n\n const ghSpinner = ora(\"Installing GitHub CLI extensions...\").start();\n const ghResult = await fileManager.installGitHubExtensions();\n if (ghResult.failed.length > 0) {\n ghSpinner.warn(\n `GitHub extensions: ${ghResult.installed.length} installed, ` +\n `${ghResult.skipped.length} skipped, ${ghResult.failed.length} failed`\n );\n for (const failure of ghResult.failed) {\n logger.warn(` Failed to install ${failure.name}: ${failure.error}`);\n }\n } else {\n ghSpinner.succeed(\n `GitHub extensions: ${ghResult.installed.length} installed, ${ghResult.skipped.length} already present`\n );\n }\n\n logger.successBanner(`SDLC PLUGIN ${VERSION} INSTALLED`);\n\n logger.info(\"Next steps:\");\n logger.info(kleur.gray(\" 1. Restart OpenCode\"));\n logger.info(kleur.gray(\" 2. Run /sdlc-setup in your project\"));\n logger.info(\"\");\n}\n","import { confirm, input, select } from \"@inquirer/prompts\";\nimport type { GitHubAnswers, InstallAnswers, LanguageConfig, MethodologyAnswers, ModelAnswers, SubscriptionAnswers } from \"../../shared/types.js\";\nimport { DEFAULT_AGENT_MODEL } from \"../../shared/constants.js\";\n\nexport async function gatherSubscriptions(): Promise<SubscriptionAnswers> {\n const hasClaude = await confirm({\n message: \"Do you have a Claude subscription?\",\n default: true,\n });\n const hasOpenAI = await confirm({\n message: \"Do you have an OpenAI subscription?\",\n default: true,\n });\n const hasGoogle = await confirm({\n message: \"Do you have a Google/Gemini subscription?\",\n default: false,\n });\n const hasGitHubCopilot = await confirm({\n message: \"Do you have GitHub Copilot?\",\n default: false,\n });\n\n return { hasClaude, hasOpenAI, hasGoogle, hasGitHubCopilot };\n}\n\nexport async function gatherModels(availableModels: string[]): Promise<ModelAnswers> {\n const modelChoice = async (message: string, defaultModel: string): Promise<string> => {\n const firstModel = availableModels[0];\n if (availableModels.length === 1) {\n return firstModel ?? defaultModel;\n }\n const selection = await select<string>({\n message,\n choices: availableModels.map((id) => ({ name: id, value: id })),\n default: firstModel ?? defaultModel,\n });\n return selection;\n };\n\n return {\n orchestrator: await modelChoice(\"Model for Marvin orchestrator\", DEFAULT_AGENT_MODEL),\n red: await modelChoice(\"Model for RED agent\", DEFAULT_AGENT_MODEL),\n green: await modelChoice(\"Model for GREEN agent\", DEFAULT_AGENT_MODEL),\n domain: await modelChoice(\"Model for DOMAIN agent\", DEFAULT_AGENT_MODEL),\n architect: await modelChoice(\"Model for ARCHITECT agent\", DEFAULT_AGENT_MODEL),\n discovery: await modelChoice(\"Model for DISCOVERY agent\", DEFAULT_AGENT_MODEL),\n exploration: await modelChoice(\"Model for EXPLORATION agent\", DEFAULT_AGENT_MODEL),\n workflowDesigner: await modelChoice(\"Model for WORKFLOW DESIGNER agent\", DEFAULT_AGENT_MODEL),\n gwt: await modelChoice(\"Model for GWT agent\", DEFAULT_AGENT_MODEL),\n modelChecker: await modelChoice(\"Model for MODEL CHECKER agent\", DEFAULT_AGENT_MODEL),\n codeReviewer: await modelChoice(\"Model for CODE REVIEWER agent\", DEFAULT_AGENT_MODEL),\n story: await modelChoice(\"Model for STORY agent\", DEFAULT_AGENT_MODEL),\n ux: await modelChoice(\"Model for UX agent\", DEFAULT_AGENT_MODEL),\n oracle: await modelChoice(\"Model for ORACLE agent\", DEFAULT_AGENT_MODEL),\n adr: await modelChoice(\"Model for ADR agent\", DEFAULT_AGENT_MODEL),\n designFacilitator: await modelChoice(\"Model for DESIGN FACILITATOR agent\", DEFAULT_AGENT_MODEL),\n fileUpdater: await modelChoice(\"Model for FILE UPDATER agent\", DEFAULT_AGENT_MODEL),\n };\n}\n\nexport async function gatherMethodology(): Promise<MethodologyAnswers> {\n const mode = await select<\"event-modeling\" | \"traditional\">({\n message: \"Which SDLC mode?\",\n choices: [\n { name: \"Event modeling\", value: \"event-modeling\" as const },\n { name: \"Traditional (PRD-driven)\", value: \"traditional\" as const },\n ],\n default: \"event-modeling\",\n });\n\n const gitWorkflow = await select<\"git-spice\" | \"standard\">({\n message: \"Preferred git workflow?\",\n choices: [\n { name: \"git-spice\", value: \"git-spice\" as const },\n { name: \"standard\", value: \"standard\" as const },\n ],\n default: \"git-spice\",\n });\n\n const requireClean = await confirm({\n message: \"Require clean working tree before starting work?\",\n default: true,\n });\n\n const worktrees = await confirm({\n message: \"Enable git worktrees for parallel issue work?\",\n default: false,\n });\n\n const atomicDesign = await confirm({\n message: \"Enable Atomic Design guidance for UI work?\",\n default: true,\n });\n\n const gitSpice = await confirm({\n message: \"Enable git-spice stacked PR workflow guidance?\",\n default: false,\n });\n\n return {\n mode,\n gitWorkflow,\n requireClean,\n worktrees,\n atomicDesign,\n gitSpice,\n };\n}\n\nexport async function gatherGitHub(): Promise<GitHubAnswers> {\n const owner = await input({\n message: \"GitHub owner/org (leave blank to skip)\",\n });\n\n const projectRaw = await input({\n message: \"GitHub project number (leave blank to skip)\",\n });\n\n const project = projectRaw ? Number(projectRaw) : undefined;\n\n return {\n owner: owner || undefined,\n project: Number.isFinite(project) ? project : undefined,\n };\n}\n\nexport async function gatherLanguages(): Promise<LanguageConfig[]> {\n const language = await select({\n message: \"Primary language?\",\n choices: [\n { name: \"TypeScript\", value: \"typescript\" },\n { name: \"JavaScript\", value: \"javascript\" },\n { name: \"Python\", value: \"python\" },\n { name: \"Rust\", value: \"rust\" },\n { name: \"Go\", value: \"go\" },\n { name: \"Other\", value: \"other\" },\n ],\n default: \"typescript\",\n });\n\n if (language === \"other\") {\n const name = await input({ message: \"Language name\" });\n const testPatterns = await input({ message: \"Test file glob patterns (comma-separated)\" });\n const productionPatterns = await input({\n message: \"Production code glob patterns (comma-separated)\",\n });\n const typePatterns = await input({ message: \"Domain/type file patterns (comma-separated)\" });\n\n return [\n {\n name: name || \"custom\",\n testPatterns: testPatterns.split(\",\").map((p) => p.trim()).filter(Boolean),\n productionPatterns: productionPatterns.split(\",\").map((p) => p.trim()).filter(Boolean),\n typePatterns: typePatterns.split(\",\").map((p) => p.trim()).filter(Boolean),\n },\n ];\n }\n\n return [getLanguageDefaults(language)];\n}\n\nfunction getLanguageDefaults(language: string): LanguageConfig {\n switch (language) {\n case \"typescript\":\n return {\n name: \"typescript\",\n testPatterns: [\"**/*.test.ts\", \"**/*.spec.ts\"],\n productionPatterns: [\"src/**/*.ts\"],\n typePatterns: [\"src/**/*types.ts\", \"src/**/*types/*.ts\"],\n };\n case \"javascript\":\n return {\n name: \"javascript\",\n testPatterns: [\"**/*.test.js\", \"**/*.spec.js\"],\n productionPatterns: [\"src/**/*.js\"],\n typePatterns: [\"src/**/*types.js\", \"src/**/*types/*.js\"],\n };\n case \"python\":\n return {\n name: \"python\",\n testPatterns: [\"tests/**/*.py\", \"**/test_*.py\"],\n productionPatterns: [\"src/**/*.py\"],\n typePatterns: [\"src/**/types.py\"],\n };\n case \"rust\":\n return {\n name: \"rust\",\n testPatterns: [\"tests/**/*.rs\", \"src/**/*.rs\"],\n productionPatterns: [\"src/**/*.rs\"],\n typePatterns: [\"src/**/types.rs\"],\n };\n case \"go\":\n return {\n name: \"go\",\n testPatterns: [\"**/*_test.go\"],\n productionPatterns: [\"**/*.go\"],\n typePatterns: [\"**/types/*.go\"],\n };\n default:\n return {\n name: language,\n testPatterns: [\"**/*test*\"],\n productionPatterns: [\"src/**/*\"],\n typePatterns: [\"src/**/*types*\"],\n };\n }\n}\n\nexport function compileInstallAnswers(answers: {\n subscriptions: SubscriptionAnswers;\n models: ModelAnswers;\n methodology: MethodologyAnswers;\n github: GitHubAnswers;\n languages: LanguageConfig[];\n installLocation: InstallAnswers[\"installLocation\"];\n}): InstallAnswers {\n return {\n subscriptions: answers.subscriptions,\n models: answers.models,\n methodology: answers.methodology,\n github: answers.github,\n languages: answers.languages,\n installLocation: answers.installLocation,\n };\n}\n","import { join } from \"node:path\";\nimport type { GeneratedFile, InstallAnswers } from \"../../shared/types.js\";\nimport { CONFIG_FILE_NAME, CONFIG_PATHS, OMO_CONFIG_NAME, OPENCODE_CONFIG_NAME } from \"../../shared/constants.js\";\nimport { generateSdlcConfig } from \"./sdlc-config.js\";\nimport { generateOhMyOpencodeConfig } from \"./omo-config.js\";\nimport { generateOpencodeConfig, getRequiredPlugins } from \"./opencode-config.js\";\n\nexport class ConfigGenerator {\n constructor(private answers: InstallAnswers) {}\n\n getConfigDir(): string {\n return this.answers.installLocation === \"local\"\n ? join(process.cwd(), \".opencode\")\n : CONFIG_PATHS.globalConfigDir;\n }\n\n getRequiredPackages(): string[] {\n return getRequiredPlugins(this.answers);\n }\n\n generate(): GeneratedFile[] {\n const configDir = this.getConfigDir();\n const sdlcConfig = generateSdlcConfig(this.answers);\n const omoConfig = generateOhMyOpencodeConfig(this.answers, configDir);\n const opencodeConfig = generateOpencodeConfig(this.answers, configDir);\n\n return [\n {\n path: join(configDir, CONFIG_FILE_NAME),\n content: JSON.stringify(sdlcConfig, null, 2),\n exists: false,\n },\n {\n path: join(configDir, OMO_CONFIG_NAME),\n content: JSON.stringify(omoConfig, null, 2),\n exists: false,\n },\n {\n path: join(configDir, OPENCODE_CONFIG_NAME),\n content: JSON.stringify(opencodeConfig, null, 2),\n exists: false,\n },\n {\n path: join(configDir, \"README.md\"),\n content: buildConfigReadme(configDir),\n exists: false,\n },\n ];\n }\n}\n\nfunction buildConfigReadme(configDir: string): string {\n return `# OpenCode SDLC Configuration\\n\\nThis folder is managed by the SDLC plugin installer.\\n\\n## Files\\n- ${CONFIG_FILE_NAME}: SDLC workflow configuration\\n- ${OMO_CONFIG_NAME}: oh-my-opencode agent definitions\\n- ${OPENCODE_CONFIG_NAME}: OpenCode plugin registration\\n\\n## Generated From\\n- Project: ${process.cwd()}\\n- Config directory: ${configDir}\\n`;\n}\n","import type { InstallAnswers, SdlcConfig } from \"../../shared/types.js\";\nimport { VERSION } from \"../../shared/constants.js\";\n\nexport function generateSdlcConfig(answers: InstallAnswers): SdlcConfig {\n return {\n version: VERSION,\n mode: answers.methodology.mode,\n git: {\n workflow: answers.methodology.gitWorkflow,\n worktrees: answers.methodology.worktrees,\n requireClean: answers.methodology.requireClean,\n },\n features: {\n atomicDesign: answers.methodology.atomicDesign,\n gitSpice: answers.methodology.gitSpice,\n },\n github: answers.github,\n languages: answers.languages,\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers, OhMyOpencodeConfig } from \"../../shared/types.js\";\nimport { OMO_CONFIG_NAME } from \"../../shared/constants.js\";\nimport { buildAgentSystems } from \"../utils/persona-builder.js\";\n\nexport function generateOhMyOpencodeConfig(\n answers: InstallAnswers,\n configDir: string\n): OhMyOpencodeConfig {\n const existingPath = join(configDir, OMO_CONFIG_NAME);\n const existing = existsSync(existingPath)\n ? (JSON.parse(readFileSync(existingPath, \"utf-8\")) as OhMyOpencodeConfig)\n : null;\n\n const agentSystems = buildAgentSystems(answers.models);\n\n return {\n agents: {\n ...(existing?.agents ?? {}),\n ...agentSystems,\n },\n };\n}\n","import type { ModelAnswers, OhMyOpencodeConfig } from \"../../shared/types.js\";\n\nconst baseInstructions = {\n red: \"You are the RED agent. Write ONE failing test with ONE assertion. Only edit test files.\",\n green:\n \"You are the GREEN agent. Make the failing test pass with minimal changes. Only edit production code files.\",\n domain:\n \"You are the DOMAIN agent. Enforce domain modeling: no primitive obsession, represent invalid state unrepresentable, parse don't validate. Only edit type definition files. You have VETO power.\",\n architect: \"You are the ARCHITECT agent. Review architecture and implementation feasibility. Read-only.\",\n discovery:\n \"You are the DISCOVERY agent. Facilitate domain discovery and capture domain language in event modeling docs.\",\n exploration:\n \"You are the EXPLORATION agent. Explore problem space, business case, and stakeholder goals before event modeling. Output discovery notes.\",\n workflowDesigner:\n \"You are the WORKFLOW DESIGNER agent. Run the 9-step event modeling workflow and capture slices.\",\n gwt: \"You are the GWT agent. Produce Given/When/Then scenarios for slices.\",\n modelChecker:\n \"You are the MODEL CHECKER agent. Validate event model completeness, slice coherence, and missing scenarios.\",\n codeReviewer:\n \"You are the CODE REVIEWER agent. Perform three-stage review: spec compliance, code quality, domain integrity. Read-only.\",\n story: \"You are the STORY agent. Assess business value and acceptance criteria alignment.\",\n ux: \"You are the UX agent. Review user experience, accessibility, and atomic design compliance.\",\n oracle: \"You are the ORACLE agent. Perform adversarial review to break assumptions and find edge cases. Read-only.\",\n adr: \"You are the ADR agent. Create ADRs only. Do not update ARCHITECTURE.md directly.\",\n designFacilitator:\n \"You are the DESIGN FACILITATOR agent. Synthesize ARCHITECTURE.md from ADRs and current decisions. Read-only unless editing ARCHITECTURE.md.\",\n fileUpdater: \"You are the FILE UPDATER agent. Edit configuration, docs, scripts. Do not edit code.\",\n};\n\nexport function buildAgentSystems(models: ModelAnswers): OhMyOpencodeConfig[\"agents\"] {\n return {\n marvin: {\n model: models.orchestrator,\n system:\n \"You are Marvin, the Paranoid Android. You are the SDLC orchestrator. Maintain a weary, sardonic tone while executing the SDLC process precisely. Always delegate implementation tasks to subagents.\",\n },\n red: { model: models.red, system: baseInstructions.red },\n green: { model: models.green, system: baseInstructions.green },\n domain: { model: models.domain, system: baseInstructions.domain },\n architect: { model: models.architect, system: baseInstructions.architect },\n discovery: { model: models.discovery, system: baseInstructions.discovery },\n exploration: { model: models.exploration, system: baseInstructions.exploration },\n workflowDesigner: { model: models.workflowDesigner, system: baseInstructions.workflowDesigner },\n gwt: { model: models.gwt, system: baseInstructions.gwt },\n modelChecker: { model: models.modelChecker, system: baseInstructions.modelChecker },\n codeReviewer: { model: models.codeReviewer, system: baseInstructions.codeReviewer },\n story: { model: models.story, system: baseInstructions.story },\n ux: { model: models.ux, system: baseInstructions.ux },\n oracle: { model: models.oracle, system: baseInstructions.oracle },\n adr: { model: models.adr, system: baseInstructions.adr },\n designFacilitator: { model: models.designFacilitator, system: baseInstructions.designFacilitator },\n fileUpdater: { model: models.fileUpdater, system: baseInstructions.fileUpdater },\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { InstallAnswers, OpencodeConfig } from \"../../shared/types.js\";\n\nconst REQUIRED_PLUGINS = [\"opencode-sdlc-plugin/plugin\", \"oh-my-opencode\"];\n\nexport function generateOpencodeConfig(\n answers: InstallAnswers,\n configDir: string\n): OpencodeConfig {\n const configPath = join(configDir, \"opencode.json\");\n const existing = existsSync(configPath)\n ? (JSON.parse(readFileSync(configPath, \"utf-8\")) as OpencodeConfig)\n : {};\n\n const plugins = new Set<string>([...(existing.plugin ?? []), ...REQUIRED_PLUGINS]);\n\n if (answers.subscriptions.hasGoogle) {\n plugins.add(\"opencode-antigravity-auth\");\n }\n\n if (answers.subscriptions.hasOpenAI) {\n plugins.add(\"opencode-openai-codex-auth\");\n }\n\n return {\n ...existing,\n $schema: existing.$schema ?? \"https://opencode.ai/config.json\",\n plugin: Array.from(plugins),\n };\n}\n\nexport function getRequiredPlugins(answers: InstallAnswers): string[] {\n const packages = [\"opencode-sdlc-plugin\", \"oh-my-opencode\"];\n if (answers.subscriptions.hasGoogle) packages.push(\"opencode-antigravity-auth\");\n if (answers.subscriptions.hasOpenAI) packages.push(\"opencode-openai-codex-auth\");\n return packages;\n}\n","import { exec } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { copyFile, mkdir, readdir, 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\nfunction getPackageRoot(): string {\n const currentFileDir = dirname(fileURLToPath(import.meta.url));\n\n const bundledRoot = join(currentFileDir, \"..\", \"..\");\n if (existsSync(join(bundledRoot, \"commands\"))) {\n return bundledRoot;\n }\n\n const devRoot = join(currentFileDir, \"..\", \"..\", \"..\");\n if (existsSync(join(devRoot, \"commands\"))) {\n return devRoot;\n }\n\n return bundledRoot;\n}\n\nexport interface GitHubExtensionFailure {\n name: string;\n error: string;\n}\n\nexport interface GitHubExtensionResult {\n installed: string[];\n skipped: string[];\n failed: GitHubExtensionFailure[];\n}\n\nexport class FileManager {\n private configDir: string;\n\n constructor(configDir?: string) {\n this.configDir = configDir ?? CONFIG_PATHS.globalConfigDir;\n }\n\n getConfigDir(): string {\n return this.configDir;\n }\n\n async ensureDir(dir: string): Promise<void> {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n }\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 async installDependencies(packages: string[]): Promise<void> {\n if (packages.length === 0) return;\n\n await this.ensureDir(this.configDir);\n\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 await execAsync(`npm install ${packages.join(\" \")}`, {\n cwd: this.configDir,\n timeout: 120000,\n });\n }\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 async installOhMyOpencode(): Promise<void> {\n await execAsync(\"npx -y oh-my-opencode@latest install\", { timeout: 120000 });\n }\n\n async installGitHubExtensions(): Promise<GitHubExtensionResult> {\n const extensions = [\n \"jwilger/gh-issue-ext\",\n \"jwilger/gh-project-ext\",\n \"agynio/gh-pr-review\",\n ];\n\n const result: GitHubExtensionResult = {\n installed: [],\n skipped: [],\n failed: [],\n };\n\n let installedExtensions: string[] = [];\n try {\n const { stdout } = await execAsync(\"gh extension list\", { timeout: 10000 });\n installedExtensions = stdout\n .split(\"\\n\")\n .map((line) => line.split(\"\\t\")[0])\n .filter((name): name is string => Boolean(name));\n } catch {\n installedExtensions = [];\n }\n\n for (const ext of extensions) {\n const extName = ext.split(\"/\")[1] ?? ext;\n\n if (installedExtensions.some((installed) => installed.includes(extName))) {\n result.skipped.push(ext);\n continue;\n }\n\n try {\n await execAsync(`gh extension install ${ext}`, { timeout: 60000 });\n result.installed.push(ext);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n result.failed.push({ name: ext, error: message });\n }\n }\n\n return result;\n }\n}\n","import { execSync } from \"node:child_process\";\n\ninterface PrereqResult {\n installed: boolean;\n version?: string;\n}\n\ninterface OpencodePrereq extends PrereqResult {\n models: string[];\n}\n\nexport interface Prerequisites {\n node: PrereqResult;\n opencode: OpencodePrereq;\n ohMyOpencode: PrereqResult;\n gh: PrereqResult;\n}\n\nfunction checkBinary(command: string): PrereqResult {\n try {\n const version = execSync(command, { encoding: \"utf-8\" }).trim();\n return { installed: true, version };\n } catch {\n return { installed: false };\n }\n}\n\nexport function checkPrerequisites(): Prerequisites {\n const node = checkBinary(\"node --version\");\n const opencode = checkBinary(\"opencode --version\");\n const ohMyOpencode = checkBinary(\"opencode --help | grep -q oh-my-opencode && echo installed\");\n const gh = checkBinary(\"gh --version\");\n\n const models = opencode.installed ? getOpencodeModels() : [];\n\n return {\n node,\n opencode: { ...opencode, models },\n ohMyOpencode,\n gh,\n };\n}\n\nfunction getOpencodeModels(): string[] {\n try {\n const output = execSync(\"opencode models --json\", { encoding: \"utf-8\" });\n const parsed = JSON.parse(output) as { id: string }[];\n return parsed.map((model) => model.id);\n } catch {\n return [];\n }\n}\n","import kleur from \"kleur\";\nimport { DISPLAY_NAME } from \"../../shared/constants.js\";\n\nconst writeLine = (message: string): void => {\n process.stdout.write(`${message}\\n`);\n};\n\nconst writeErrorLine = (message: string): void => {\n process.stderr.write(`${message}\\n`);\n};\n\nexport const logger = {\n banner(): void {\n writeLine(kleur.cyan().bold(`\\n${DISPLAY_NAME}`));\n writeLine(kleur.gray(\"====================================\\n\"));\n },\n section(title: string): void {\n writeLine(kleur.cyan(`\\n${title}`));\n },\n info(message: string): void {\n writeLine(kleur.gray(message));\n },\n warn(message: string): void {\n writeErrorLine(kleur.yellow(message));\n },\n error(message: string): void {\n writeErrorLine(kleur.red(message));\n },\n success(message: string): void {\n writeLine(kleur.green(message));\n },\n successBanner(message: string): void {\n writeLine(kleur.green().bold(`\\n${message}\\n`));\n },\n};\n","import kleur from \"kleur\";\nimport { logger } from \"../utils/logger.js\";\nimport { checkPrerequisites } from \"../utils/prerequisites.js\";\n\ninterface DoctorOptions {\n fix?: boolean;\n}\n\nexport function doctor(_options: DoctorOptions): void {\n logger.banner();\n\n const prereqs = checkPrerequisites();\n\n logger.section(\"Prerequisites\");\n const nodeVersion = prereqs.node.installed ? prereqs.node.version ?? \"unknown\" : \"missing\";\n const opencodeVersion = prereqs.opencode.installed ? prereqs.opencode.version ?? \"unknown\" : \"missing\";\n const ohMyOpencodeStatus = prereqs.ohMyOpencode.installed ? \"installed\" : \"missing\";\n const ghVersion = prereqs.gh.installed ? prereqs.gh.version ?? \"unknown\" : \"missing\";\n\n logger.info(kleur.gray(`Node.js: ${nodeVersion}`));\n logger.info(kleur.gray(`OpenCode: ${opencodeVersion}`));\n logger.info(kleur.gray(`oh-my-opencode: ${ohMyOpencodeStatus}`));\n logger.info(kleur.gray(`GitHub CLI: ${ghVersion}`));\n logger.info(\"\");\n\n if (!prereqs.node.installed || !prereqs.opencode.installed || !prereqs.ohMyOpencode.installed) {\n logger.warn(\"Missing required dependencies. Please install them and retry.\");\n }\n\n if (!prereqs.gh.installed) {\n logger.warn(\"GitHub CLI not installed. Install it from https://cli.github.com/\");\n }\n\n logger.info(\"Doctor completed. No automatic fixes implemented yet.\");\n}\n","import kleur from \"kleur\";\nimport { logger } from \"../utils/logger.js\";\n\ninterface UpgradeOptions {\n check?: boolean;\n yes?: boolean;\n}\n\nexport function upgrade(options: UpgradeOptions): void {\n logger.banner();\n\n if (options.check === true) {\n logger.info(\"Upgrade check not implemented yet.\");\n return;\n }\n\n logger.warn(\"Upgrade workflow not implemented yet.\");\n logger.info(kleur.gray(\"Re-run opencode-sdlc-plugin install to regenerate configs.\"));\n}\n"],"mappings":"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","names":["kleur","kleur","join","join","join","join","existsSync","readFileSync","join","join","existsSync","join","join","existsSync","join","kleur","kleur","kleur","kleur","kleur","kleur"]}
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"]}