From bb3130cbe04311b56304f5c9cbcbb86f65c8e2ca Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 24 Feb 2026 15:31:02 +0800 Subject: [PATCH] fix(opencode): add missing omo-slim category checks across add/form/mutation paths Several code paths only checked for "omo" category but missed "omo-slim", causing OMO Slim providers to be treated as regular OpenCode providers (triggering invalid write_live_snapshot, requiring manual provider key, and showing wrong form fields). --- src-tauri/src/services/provider/mod.rs | 7 ++++--- .../providers/forms/ProviderForm.tsx | 21 ++++++++++--------- src/lib/query/mutations.ts | 8 +++++-- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src-tauri/src/services/provider/mod.rs b/src-tauri/src/services/provider/mod.rs index 98c8c7a3..fdd9daa5 100644 --- a/src-tauri/src/services/provider/mod.rs +++ b/src-tauri/src/services/provider/mod.rs @@ -133,10 +133,11 @@ impl ProviderService { // Additive mode apps (OpenCode, OpenClaw) - always write to live config if app_type.is_additive_mode() { - // OMO providers use exclusive mode and write to dedicated config file. - if matches!(app_type, AppType::OpenCode) && provider.category.as_deref() == Some("omo") + // OMO / OMO Slim providers use exclusive mode and write to dedicated config file. + if matches!(app_type, AppType::OpenCode) + && matches!(provider.category.as_deref(), Some("omo") | Some("omo-slim")) { - // Do not auto-enable newly added OMO providers. + // Do not auto-enable newly added OMO / OMO Slim providers. // Users must explicitly switch/apply an OMO provider to activate it. return Ok(true); } diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index 647e02f1..2f7d33ca 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -551,7 +551,7 @@ export function ProviderForm({ return; } - if (appId === "opencode" && category !== "omo") { + if (appId === "opencode" && !isAnyOmoCategory) { const keyPattern = /^[a-z0-9]+(-[a-z0-9]+)*$/; if (!opencodeForm.opencodeProviderKey.trim()) { toast.error(t("opencode.providerKeyRequired")); @@ -732,9 +732,10 @@ export function ProviderForm({ }; if (appId === "opencode") { - if (category === "omo") { + if (isAnyOmoCategory) { if (!isEditMode) { - payload.providerKey = `omo-${crypto.randomUUID().slice(0, 8)}`; + const prefix = category === "omo" ? "omo" : "omo-slim"; + payload.providerKey = `${prefix}-${crypto.randomUUID().slice(0, 8)}`; } } else { payload.providerKey = opencodeForm.opencodeProviderKey; @@ -743,8 +744,8 @@ export function ProviderForm({ payload.providerKey = openclawForm.openclawProviderKey; } - if (category === "omo" && !payload.presetCategory) { - payload.presetCategory = "omo"; + if (isAnyOmoCategory && !payload.presetCategory) { + payload.presetCategory = category; } if (activePreset) { @@ -1000,10 +1001,10 @@ export function ProviderForm({ const preset = entry.preset as OpenCodeProviderPreset; const config = preset.settingsConfig; - if (preset.category === "omo") { + if (preset.category === "omo" || preset.category === "omo-slim") { omoDraft.resetOmoDraftState(); form.reset({ - name: "OMO", + name: preset.category === "omo" ? "OMO" : "OMO Slim", websiteUrl: preset.websiteUrl ?? "", settingsConfig: JSON.stringify({}, null, 2), icon: preset.icon ?? "", @@ -1113,7 +1114,7 @@ export function ProviderForm({