diff --git a/frontend-web/src/components/workspace/skills/skill-evolution-panel.tsx b/frontend-web/src/components/workspace/skills/skill-evolution-panel.tsx index 1cd87920..b9549ed6 100644 --- a/frontend-web/src/components/workspace/skills/skill-evolution-panel.tsx +++ b/frontend-web/src/components/workspace/skills/skill-evolution-panel.tsx @@ -21,6 +21,13 @@ import { CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { useCuratorConfig, @@ -31,6 +38,7 @@ import { } from "@/core/curator/hooks"; import type { CuratorConfig } from "@/core/curator/types"; import { useI18n } from "@/core/i18n/hooks"; +import { useModels } from "@/core/models/hooks"; import { cn } from "@/lib/utils"; export function SkillEvolutionPanel() { @@ -68,6 +76,7 @@ function StatusCard() { const { t } = useI18n(); const tt = t.settings.skillEvolution.status; const { status, isLoading } = useCuratorStatus(); + const { config } = useCuratorConfig(); const runCurator = useRunCurator(); const lastRunDisplay = useMemo(() => { @@ -79,10 +88,25 @@ function StatusCard() { } }, [status?.last_run_at, tt.lastRunNever]); + // 总开关或 curator 子开关任一关闭时,手动触发跑不起来 —— 直接禁用按钮。 + const runDisabled = !config || !config.enabled || !config.curator.enabled; + const handleRun = async () => { try { - await runCurator.mutateAsync(); - toast.success(tt.runStarted); + const res = await runCurator.mutateAsync(); + if (res.triggered) { + toast.success(tt.runStarted); + } else { + // 后端预检拦下了(开关未开 / 已有任务在跑)—— 给出对应原因,而不是误报"已开始"。 + const reasonMsg: Record = { + evolution_disabled: tt.runBlockedEvolutionDisabled, + curator_disabled: tt.runBlockedCuratorDisabled, + already_running: tt.runBlockedAlreadyRunning, + }; + toast.warning( + reasonMsg[res.reason ?? ""] ?? tt.runBlockedEvolutionDisabled, + ); + } } catch (err) { toast.error(err instanceof Error ? err.message : String(err)); } @@ -107,7 +131,8 @@ function StatusCard() {