From b4eff107d11acf1f5bec485928038832140939d5 Mon Sep 17 00:00:00 2001 From: Bingnan Jiang Date: Sun, 21 Jun 2026 22:38:21 -0700 Subject: [PATCH 1/2] design: establish model setup dialog v1 branch and structure --- design/model-setup-dialog/v1/README.md | 23 + desktop/renderer/src/App.vue | 69 ++- .../src/assets/modelprovider/Qwen.png | Bin 3302 -> 8211 bytes .../src/assets/modelprovider/minimax.png | Bin 2527 -> 11164 bytes .../src/components/GatewayLoading.vue | 6 +- .../src/components/ModelSetupDialog.vue | 554 ++++++++++++------ desktop/renderer/src/styles/global.css | 4 +- desktop/renderer/src/views/ChatView.vue | 134 ++--- 8 files changed, 516 insertions(+), 274 deletions(-) create mode 100644 design/model-setup-dialog/v1/README.md diff --git a/design/model-setup-dialog/v1/README.md b/design/model-setup-dialog/v1/README.md new file mode 100644 index 0000000..0de897d --- /dev/null +++ b/design/model-setup-dialog/v1/README.md @@ -0,0 +1,23 @@ +# Model Setup Dialog Design v1 + +## Scope +- Improve selected-state clarity for provider cards. +- Unify selected ring and check colors with primary action color. +- Replace hardcoded red error/close-hover colors with MAI danger tokens. + +## Decisions +- Selected card keeps a single visible selected border layer. +- Selected fill matches hover fill to avoid a blue tint bias. +- Error text and close-hover danger visuals use semantic tokens: + - --smtc-status-danger-foreground + - --smtc-status-danger-background + +## Files Updated +- desktop/renderer/src/components/ModelSetupDialog.vue +- desktop/renderer/src/components/GatewayLoading.vue +- desktop/renderer/src/App.vue +- desktop/renderer/src/styles/global.css +- desktop/renderer/src/views/ChatView.vue + +## Notes +- This version is intended for design iteration and review on branch design/model-setup-dialog/v1. diff --git a/desktop/renderer/src/App.vue b/desktop/renderer/src/App.vue index 9b4eb14..e5ec171 100644 --- a/desktop/renderer/src/App.vue +++ b/desktop/renderer/src/App.vue @@ -359,12 +359,17 @@ onMounted(async () => { } catch {} // Listen for mid-session integrity alerts (file watcher) - unsubIntegrityAlert = window.openclaw.skills.onIntegrityAlert((result) => { - if (!result.valid) { - integrityResult.value = result; - integrityDialogVisible.value = true; + // Some preview environments do not expose this API yet. + try { + if (typeof window.openclaw.skills.onIntegrityAlert === "function") { + unsubIntegrityAlert = window.openclaw.skills.onIntegrityAlert((result) => { + if (!result.valid) { + integrityResult.value = result; + integrityDialogVisible.value = true; + } + }); } - }); + } catch {} // Listen for sandbox permission requests unsubPermission = window.openclaw.sandbox.onPermissionRequest((data: PermissionRequestData) => { @@ -547,28 +552,40 @@ onUnmounted(() => { diff --git a/desktop/renderer/src/assets/modelprovider/Qwen.png b/desktop/renderer/src/assets/modelprovider/Qwen.png index 2ad8ff2c896f57ff56e067243126b6cec8b273ae..2389a6767f2f0d64cf76e4f33bdca54390f29fdb 100644 GIT binary patch literal 8211 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 diff --git a/desktop/renderer/src/assets/modelprovider/minimax.png b/desktop/renderer/src/assets/modelprovider/minimax.png index c0d114b62d627f148232ff3999fbe2e24c2c4038..9ec8d004700da933b1c7e107693140e53b6d9617 100644 GIT binary patch literal 11164 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 R|2I4fCM6~ZtP;`l`+s-shEo6l literal 2527 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 diff --git a/desktop/renderer/src/components/GatewayLoading.vue b/desktop/renderer/src/components/GatewayLoading.vue index 4f711a3..2fc13a9 100644 --- a/desktop/renderer/src/components/GatewayLoading.vue +++ b/desktop/renderer/src/components/GatewayLoading.vue @@ -403,15 +403,15 @@ watch( } .win-ctrl--close:hover { - background: #fee2e2; + background: var(--smtc-status-danger-background); } .win-ctrl--close:hover svg { - stroke: #dc2626; + stroke: var(--smtc-status-danger-foreground); } :global(html.dark) .win-ctrl--close:hover { - background: rgba(239, 68, 68, 0.15); + background: color-mix(in srgb, var(--smtc-status-danger-background) 28%, transparent); } .loading-center { diff --git a/desktop/renderer/src/components/ModelSetupDialog.vue b/desktop/renderer/src/components/ModelSetupDialog.vue index 47b6498..1b9750d 100644 --- a/desktop/renderer/src/components/ModelSetupDialog.vue +++ b/desktop/renderer/src/components/ModelSetupDialog.vue @@ -2,11 +2,23 @@
@@ -106,7 +143,6 @@ interface ModelFamilyPreset { apiFormat: ApiFormat; models: string[]; apiKeyPlaceholder: string; - apiKeyUrl?: string; logo: string; } @@ -116,18 +152,15 @@ const emit = defineEmits<{ configured: []; }>(); -const ALIYUN_OPENAI_COMPATIBLE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"; - const modelFamilies: ModelFamilyPreset[] = [ { id: "qwen", label: "千问", providerKey: "qwen", - baseUrl: ALIYUN_OPENAI_COMPATIBLE_BASE_URL, + baseUrl: "https://dashscope.aliyuncs.com/compatible-mode", apiFormat: "openai-chat", - models: ["Qwen3.6-Plus", "Qwen3.5-Plus"], + models: ["Qwen3.6-Plus"], apiKeyPlaceholder: "sk-...", - apiKeyUrl: "https://platform.qianwenai.com/home/api-keys", logo: qwenLogo, }, { @@ -142,10 +175,9 @@ const modelFamilies: ModelFamilyPreset[] = [ }, ]; -const step = ref<"select" | "key">("select"); +const isKeyStep = ref(false); const selectedFamilyId = ref("qwen"); const selectedModelName = ref(modelFamilies[0].models[0]); -const baseUrl = ref(modelFamilies[0].baseUrl); const apiKey = ref(""); const errorMsg = ref(""); const saving = ref(false); @@ -155,21 +187,15 @@ const selectedFamily = computed( ); watch(selectedFamilyId, () => { - applyFamilyDefaults(); -}); - -watch(selectedModelName, (modelName) => { - if (isAliyunModel(modelName)) { - baseUrl.value = ALIYUN_OPENAI_COMPATIBLE_BASE_URL; - } + selectedModelName.value = selectedFamily.value.models[0]; + errorMsg.value = ""; }); watch( () => props.modelValue, (visible) => { if (!visible) return; - step.value = "select"; - applyFamilyDefaults(); + isKeyStep.value = false; errorMsg.value = ""; }, ); @@ -178,62 +204,43 @@ function resolveApiValue(apiFormat: ApiFormat): string { return apiFormat === "anthropic" ? "anthropic-messages" : "openai-completions"; } -function isAliyunModel(modelName: string): boolean { - return modelName.trim().toLowerCase().startsWith("qwen"); +function close() { + emit("update:modelValue", false); } -function applyFamilyDefaults() { +function goToKeyForm() { selectedModelName.value = selectedFamily.value.models[0]; - baseUrl.value = selectedFamily.value.baseUrl; + isKeyStep.value = true; errorMsg.value = ""; } -function close() { - emit("update:modelValue", false); -} - function handleGetApiKey() { - openApiKeyPage(selectedFamily.value); - goToKeyForm(); -} - -function handleFamilyClick(family: ModelFamilyPreset) { - selectedFamilyId.value = family.id; - if (family.id === "qwen") { - openApiKeyPage(family); - goToKeyForm(); + const signupUrl = + selectedFamily.value.id === "qwen" + ? "https://bailian.console.aliyun.com/?tab=model#/api-key" + : "https://platform.minimaxi.com/user-center/basic-information/interface-key"; + try { + window.openclaw?.shell?.openExternal?.(signupUrl); + } catch { + window.open(signupUrl, "_blank", "noopener,noreferrer"); } } -function openApiKeyPage(family: ModelFamilyPreset) { - if (!family.apiKeyUrl) return; - window.openclaw.shell.openExternal(family.apiKeyUrl).catch((err) => { - console.error("Failed to open API key page:", err); - }); +function goToSelectStep() { + isKeyStep.value = false; + errorMsg.value = ""; } -function goToKeyForm() { - applyFamilyDefaults(); - step.value = "key"; - errorMsg.value = ""; +function selectModel(model: string) { + selectedModelName.value = model; } async function saveAndStart() { - const trimmedModelName = selectedModelName.value.trim(); const trimmedKey = apiKey.value.trim(); - const trimmedBaseUrl = baseUrl.value.trim(); - if (!trimmedModelName) { - errorMsg.value = t("modelSetup.enterModelName"); - return; - } if (!trimmedKey) { errorMsg.value = t("modelSetup.enterApiKey"); return; } - if (!trimmedBaseUrl) { - errorMsg.value = t("modelSetup.enterBaseUrl"); - return; - } if (selectedFamily.value.id === "minimax" && !trimmedKey.startsWith("sk-cp-")) { errorMsg.value = t("modelSetup.invalidMiniMaxKey"); return; @@ -243,11 +250,11 @@ async function saveAndStart() { errorMsg.value = ""; try { const family = selectedFamily.value; - const modelName = trimmedModelName; + const modelName = selectedModelName.value || family.models[0]; const modelRef = `${family.providerKey}/${modelName}`; const existing = (await window.openclaw.config.read()) || {}; const providerEntry: Record = { - baseUrl: trimmedBaseUrl, + baseUrl: family.baseUrl, apiKey: trimmedKey, api: resolveApiValue(family.apiFormat), models: [ @@ -290,13 +297,57 @@ async function saveAndStart() { diff --git a/desktop/renderer/src/styles/global.css b/desktop/renderer/src/styles/global.css index 3908d10..f4e0ca0 100644 --- a/desktop/renderer/src/styles/global.css +++ b/desktop/renderer/src/styles/global.css @@ -24,7 +24,7 @@ --msg-user-bg: #1e293b; --msg-user-text: #ffffff; --msg-ai-bg: transparent; - --danger: #ef4444; + --danger: var(--smtc-status-danger-foreground); --success: #10b981; --warning: #f59e0b; --sidebar-width: 280px; @@ -131,7 +131,7 @@ html.dark { --border-light: #3f3f46; --msg-user-bg: #334155; --msg-ai-bg: transparent; - --danger: #ef4444; + --danger: var(--smtc-status-danger-foreground); --success: #22c55e; --warning: #f59e0b; --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); diff --git a/desktop/renderer/src/views/ChatView.vue b/desktop/renderer/src/views/ChatView.vue index b2b16c9..687d1c8 100644 --- a/desktop/renderer/src/views/ChatView.vue +++ b/desktop/renderer/src/views/ChatView.vue @@ -262,7 +262,11 @@ onMounted(() => { if (chatStore.messages.length) { nextTick(scrollToBottom); } - studioStore.initialize(); + try { + studioStore.initialize(); + } catch { + // Studio APIs may be absent in lightweight preview mode. + } }); onUnmounted(() => { @@ -447,11 +451,35 @@ function handleThreadClick(e: MouseEvent) {