feat: auto-detect model provider and apply appropriate options (#146)

When overriding an agent's model to a different provider, the agent
now automatically gets provider-appropriate reasoning options:

- GPT models: `reasoningEffort`, `textVerbosity`
- Anthropic models: `thinking` with `budgetTokens`

## Why utils.ts changes are required

The original flow merges overrides onto pre-built agent configs:

    mergeAgentConfig(sisyphusAgent, { model: "gpt-5.2" })
    // Result: { model: "gpt-5.2", thinking: {...} }

The `thinking` config persists because it exists in the pre-built
`sisyphusAgent`. GPT models ignore `thinking` and need `reasoningEffort`.

The fix: call the agent factory with the resolved model, so the factory
can return the correct provider-specific config:

    buildAgent(createSisyphusAgent, "gpt-5.2")
    // Result: { model: "gpt-5.2", reasoningEffort: "medium" }

Closes #144

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Christopher Tso
2025-12-21 19:09:26 +11:00
committed by GitHub
parent 97e7679dec
commit b724136bae
5 changed files with 164 additions and 47 deletions
+6
View File
@@ -1,5 +1,11 @@
import type { AgentConfig } from "@opencode-ai/sdk"
export type AgentFactory = (model?: string) => AgentConfig
export function isGptModel(model: string): boolean {
return model.startsWith("openai/") || model.startsWith("github-copilot/gpt-")
}
export type BuiltinAgentName =
| "Sisyphus"
| "oracle"