diff --git a/bun.lock b/bun.lock index 35787d04..edf84d50 100644 --- a/bun.lock +++ b/bun.lock @@ -27,13 +27,13 @@ "typescript": "^5.7.3", }, "optionalDependencies": { - "oh-my-opencode-darwin-arm64": "3.0.0-beta.16", - "oh-my-opencode-darwin-x64": "3.0.0-beta.16", - "oh-my-opencode-linux-arm64": "3.0.0-beta.16", - "oh-my-opencode-linux-arm64-musl": "3.0.0-beta.16", - "oh-my-opencode-linux-x64": "3.0.0-beta.16", - "oh-my-opencode-linux-x64-musl": "3.0.0-beta.16", - "oh-my-opencode-windows-x64": "3.0.0-beta.16", + "oh-my-opencode-darwin-arm64": "3.0.0-beta.13", + "oh-my-opencode-darwin-x64": "3.0.0-beta.13", + "oh-my-opencode-linux-arm64": "3.0.0-beta.13", + "oh-my-opencode-linux-arm64-musl": "3.0.0-beta.13", + "oh-my-opencode-linux-x64": "3.0.0-beta.13", + "oh-my-opencode-linux-x64-musl": "3.0.0-beta.13", + "oh-my-opencode-windows-x64": "3.0.0-beta.13", }, }, }, @@ -225,20 +225,6 @@ "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "oh-my-opencode-darwin-arm64": ["oh-my-opencode-darwin-arm64@3.0.0-beta.16", "", { "os": "darwin", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-1gfnTsKpYxTMXpbuV98wProR3RMe6BI/muuSVa3Xy68EEkBJsuRAne6IzFq/yxIMbx9OiQaS5cTE0mxFtxcCGA=="], - - "oh-my-opencode-darwin-x64": ["oh-my-opencode-darwin-x64@3.0.0-beta.16", "", { "os": "darwin", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-/h7kBZAN5Ut9kL7gEtwVVZ49Kw4gZoSVJdrpnh7Wij0a3mlOwqbkgGilK7oUiJ2N8fsxvxEBbTscYOLAdhyVBw=="], - - "oh-my-opencode-linux-arm64": ["oh-my-opencode-linux-arm64@3.0.0-beta.16", "", { "os": "linux", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-jW7pl76WerBa7FucKCYcthpbKbhJQSVe6rqUFSbVobjOP9VWslrGdxc9Y8BeiMx9SJEFYwA8/2ROhnOHpH3TxA=="], - - "oh-my-opencode-linux-arm64-musl": ["oh-my-opencode-linux-arm64-musl@3.0.0-beta.16", "", { "os": "linux", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-cXXka0zQDBiFu9mmxa45o3g812w8q/jZRYgdwJsLbj3nm24WXv6uRP7nnVVoZiVmJ2GQbLE1nyGCMkBXFwRGGA=="], - - "oh-my-opencode-linux-x64": ["oh-my-opencode-linux-x64@3.0.0-beta.16", "", { "os": "linux", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-4VS1V6DiXdWHQ/AGc3rB1sCxFUlD1REex0Ai/y4tEgA2M0FD0Bu+tjXHhDghUvC8f0kQBRfijnTrtc1Lh7hIrA=="], - - "oh-my-opencode-linux-x64-musl": ["oh-my-opencode-linux-x64-musl@3.0.0-beta.16", "", { "os": "linux", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-PGVe7vyUK3hjSNfvu1fBXTbgbe0OPh7JgB/TZR2U5R54X1k3NBkb1VHX9yxEUSA0VsNR+inE2x+DfEA+7KIruQ=="], - - "oh-my-opencode-windows-x64": ["oh-my-opencode-windows-x64@3.0.0-beta.16", "", { "os": "win32", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode.exe" } }, "sha512-1lN/8y4laQnSJDvyARuV5YaETAwBb+PK06QHQzpoK/0asiFoEIBcKNgjaRwau+nBsdRUrQocE2xc6g2ZNH4HUw=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], diff --git a/src/plugin-handlers/config-handler.ts b/src/plugin-handlers/config-handler.ts index 629c61ef..f571d05f 100644 --- a/src/plugin-handlers/config-handler.ts +++ b/src/plugin-handlers/config-handler.ts @@ -106,13 +106,38 @@ export function createConfigHandler(deps: ConfigHandlerDeps) { } if (!(config.model as string | undefined)?.trim()) { - const paths = getOpenCodeConfigPaths({ binary: "opencode", version: null }) - throw new Error( - 'oh-my-opencode requires a default model.\n\n' + - `Add this to ${paths.configJsonc}:\n\n` + - ' "model": "anthropic/claude-sonnet-4-5"\n\n' + - '(Replace with your preferred provider/model)' - ) + let fallbackModel: string | undefined + + for (const agentConfig of Object.values(pluginConfig.agents ?? {})) { + const model = (agentConfig as { model?: string })?.model + if (model && typeof model === 'string' && model.trim()) { + fallbackModel = model.trim() + break + } + } + + if (!fallbackModel) { + for (const categoryConfig of Object.values(pluginConfig.categories ?? {})) { + const model = (categoryConfig as { model?: string })?.model + if (model && typeof model === 'string' && model.trim()) { + fallbackModel = model.trim() + break + } + } + } + + if (fallbackModel) { + config.model = fallbackModel + log(`No default model specified, using fallback from config: ${fallbackModel}`) + } else { + const paths = getOpenCodeConfigPaths({ binary: "opencode", version: null }) + throw new Error( + 'oh-my-opencode requires a default model.\n\n' + + `Add this to ${paths.configJsonc}:\n\n` + + ' "model": "anthropic/claude-sonnet-4-5"\n\n' + + '(Replace with your preferred provider/model)' + ) + } } // Migrate disabled_agents from old names to new names