@@ -25,10 +25,12 @@ import { loadMcpConfigs } from "../features/claude-code-mcp-loader";
2525import { loadAllPluginComponents } from "../features/claude-code-plugin-loader" ;
2626import { createBuiltinMcps } from "../mcp" ;
2727import type { OhMyOpenCodeConfig } from "../config" ;
28- import { log } from "../shared" ;
28+ import { log , fetchAvailableModels , readConnectedProvidersCache } from "../shared" ;
2929import { getOpenCodeConfigPaths } from "../shared/opencode-config-dir" ;
3030import { migrateAgentConfig } from "../shared/permission-compat" ;
3131import { AGENT_NAME_MAP } from "../shared/migration" ;
32+ import { resolveModelWithFallback } from "../shared/model-resolver" ;
33+ import { AGENT_MODEL_REQUIREMENTS } from "../shared/model-requirements" ;
3234import { PROMETHEUS_SYSTEM_PROMPT , PROMETHEUS_PERMISSION } from "../agents/prometheus-prompt" ;
3335import { DEFAULT_CATEGORIES } from "../tools/delegate-task/constants" ;
3436import type { ModelCacheState } from "../plugin-state" ;
@@ -221,33 +223,42 @@ export function createConfigHandler(deps: ConfigHandlerDeps) {
221223 ) ;
222224 const prometheusOverride =
223225 pluginConfig . agents ?. [ "prometheus" ] as
224- | ( Record < string , unknown > & { category ?: string ; model ?: string } )
226+ | ( Record < string , unknown > & { category ?: string ; model ?: string ; variant ?: string } )
225227 | undefined ;
226228 const defaultModel = config . model as string | undefined ;
227229
228- // Resolve full category config (model, temperature, top_p, tools, etc.)
229- // Apply all category properties when category is specified, but explicit
230- // overrides (model, temperature, etc.) will take precedence during merge
231230 const categoryConfig = prometheusOverride ?. category
232231 ? resolveCategoryConfig (
233232 prometheusOverride . category ,
234233 pluginConfig . categories
235234 )
236235 : undefined ;
237236
238- // Model resolution: explicit override → category config → OpenCode default
239- // No hardcoded fallback - OpenCode config.model is the terminal fallback
240- const resolvedModel = prometheusOverride ?. model ?? categoryConfig ?. model ?? defaultModel ;
241-
237+ const prometheusRequirement = AGENT_MODEL_REQUIREMENTS [ "prometheus" ] ;
238+ const connectedProviders = readConnectedProvidersCache ( ) ;
239+ const availableModels = ctx . client
240+ ? await fetchAvailableModels ( ctx . client , { connectedProviders : connectedProviders ?? undefined } )
241+ : new Set < string > ( ) ;
242+
243+ const modelResolution = resolveModelWithFallback ( {
244+ userModel : prometheusOverride ?. model ?? categoryConfig ?. model ,
245+ fallbackChain : prometheusRequirement ?. fallbackChain ,
246+ availableModels,
247+ systemDefaultModel : defaultModel ?? "" ,
248+ } ) ;
249+ const resolvedModel = modelResolution ?. model ;
250+ const resolvedVariant = modelResolution ?. variant ;
251+
252+ const variantToUse = prometheusOverride ?. variant ?? resolvedVariant ;
242253 const prometheusBase = {
243- // Only include model if one was resolved - let OpenCode apply its own default if none
254+ name : "prometheus" ,
244255 ...( resolvedModel ? { model : resolvedModel } : { } ) ,
256+ ...( variantToUse ? { variant : variantToUse } : { } ) ,
245257 mode : "primary" as const ,
246258 prompt : PROMETHEUS_SYSTEM_PROMPT ,
247259 permission : PROMETHEUS_PERMISSION ,
248260 description : `${ configAgent ?. plan ?. description ?? "Plan agent" } (Prometheus - OhMyOpenCode)` ,
249261 color : ( configAgent ?. plan ?. color as string ) ?? "#FF6347" ,
250- // Apply category properties (temperature, top_p, tools, etc.)
251262 ...( categoryConfig ?. temperature !== undefined
252263 ? { temperature : categoryConfig . temperature }
253264 : { } ) ,
@@ -295,8 +306,8 @@ export function createConfigHandler(deps: ConfigHandlerDeps) {
295306 ? migrateAgentConfig ( configAgent . build as Record < string , unknown > )
296307 : { } ;
297308
298- const planDemoteConfig = replacePlan
299- ? { mode : "subagent" as const }
309+ const planDemoteConfig = replacePlan && agentConfig [ "prometheus" ]
310+ ? { ... agentConfig [ "prometheus" ] , name : "plan" , mode : "subagent" as const }
300311 : undefined ;
301312
302313 config . agent = {
0 commit comments