From ebc1082b6d4ec7e8c14afd803bed2f1f7e0b29e0 Mon Sep 17 00:00:00 2001 From: Thomas Marchand Date: Sun, 18 Jan 2026 17:35:05 +0000 Subject: [PATCH] fix: mission creation for Claude Code backend - Skip agent validation for Claude Code backend in create_mission Claude Code has its own built-in agents that don't exist in OpenCode's agent list, so validation was incorrectly failing. - Filter model dropdown by selected backend Claude Code only supports Anthropic models, so the dropdown now only shows those when Claude Code backend is selected. Also resets model override when switching to Claude Code if non-Anthropic model was selected. --- .../src/components/new-mission-dialog.tsx | 29 ++++++++++++++++++- src/api/control.rs | 10 +++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/dashboard/src/components/new-mission-dialog.tsx b/dashboard/src/components/new-mission-dialog.tsx index e041b28..dbc6cf9 100644 --- a/dashboard/src/components/new-mission-dialog.tsx +++ b/dashboard/src/components/new-mission-dialog.tsx @@ -169,9 +169,36 @@ export function NewMissionDialog({ return backend && agent ? { backend, agent } : null; }; + // Get the currently selected backend + const selectedBackend = useMemo(() => { + const parsed = parseSelectedValue(selectedAgentValue); + return parsed?.backend || null; + }, [selectedAgentValue]); + + // Filter providers based on selected backend + // Claude Code only supports Anthropic models + const filteredProviders = useMemo(() => { + if (selectedBackend === 'claudecode') { + // Only show Anthropic (Claude) models for Claude Code + return providers.filter(p => p.id === 'anthropic'); + } + // Show all providers for OpenCode or when no backend is selected + return providers; + }, [providers, selectedBackend]); + const formatWorkspaceType = (type: Workspace['workspace_type']) => type === 'host' ? 'host' : 'isolated'; + // Reset model override when switching to Claude Code if current model isn't Anthropic + useEffect(() => { + if (selectedBackend === 'claudecode' && newMissionModelOverride) { + // Check if current model is from Anthropic + if (!newMissionModelOverride.startsWith('anthropic/')) { + setNewMissionModelOverride(''); + } + } + }, [selectedBackend, newMissionModelOverride]); + // Click outside handler useEffect(() => { if (!open) return; @@ -362,7 +389,7 @@ export function NewMissionDialog({ - {providers.map((provider) => ( + {filteredProviders.map((provider) => ( {provider.models.map((model) => (