From b7cae62d27934f3bbb699022613a0bc87f86a9db Mon Sep 17 00:00:00 2001 From: Jeffrey Smith Date: Fri, 27 Mar 2026 13:31:58 +0000 Subject: [PATCH] Replace dead chat settings with user default surface preference Remove all chat-era fields from user settings General section (Default Model, System Prompt, Max Tokens, Temperature, Show Thinking). Replace with a Default Surface dropdown that lets users override the global admin-configured landing page. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/js/sw/surfaces/settings/general.js | 108 +++++-------------------- 1 file changed, 21 insertions(+), 87 deletions(-) diff --git a/src/js/sw/surfaces/settings/general.js b/src/js/sw/surfaces/settings/general.js index d648116..004b7e0 100644 --- a/src/js/sw/surfaces/settings/general.js +++ b/src/js/sw/surfaces/settings/general.js @@ -1,66 +1,35 @@ /** - * GeneralSection — user preferences (model, system prompt, max tokens, temperature) + * GeneralSection — user preferences (default surface) */ const { html } = window; -const { useState, useEffect, useCallback, useRef } = hooks; +const { useState, useEffect, useCallback } = hooks; export function GeneralSection() { - const [models, setModels] = useState([]); - const [settings, setSettings] = useState({}); + const [surfaces, setSurfaces] = useState([]); + const [defaultSurface, setDefaultSurface] = useState(''); const [saving, setSaving] = useState(false); - const [maxHint, setMaxHint] = useState(''); - const tempRef = useRef(null); - // Load settings + models useEffect(() => { (async () => { try { - const s = await sw.api.profile.settings(); - const m = sw.api.models?.enabled ? await sw.api.models.enabled() : null; + const [s, surfList] = await Promise.all([ + sw.api.profile.settings(), + sw.api.get('/api/v1/surfaces').catch(() => []), + ]); const sObj = s || {}; - setSettings({ - model: sObj.model || '', - system_prompt: sObj.system_prompt || '', - max_tokens: sObj.max_tokens || 0, - temperature: sObj.temperature ?? 0.7, - show_thinking: sObj.show_thinking || false, - }); - const modelList = (m?.data || []).filter(x => !x.hidden); - setModels(modelList); - - // Set initial max hint - const active = modelList.find(x => x.id === sObj.model); - if (active?.capabilities?.max_output_tokens > 0) { - setMaxHint(`(model max: ${(active.capabilities.max_output_tokens / 1000).toFixed(0)}K)`); - } + setDefaultSurface(sObj.default_surface || ''); + setSurfaces((surfList || []).filter(s => s.source !== 'core' && s.enabled)); } catch (e) { console.warn('[settings/general] Load failed:', e.message); } })(); }, []); - const onModelChange = useCallback((e) => { - const id = e.target.value; - setSettings(s => ({ ...s, model: id })); - const m = models.find(x => x.id === id); - const cap = m?.capabilities || {}; - setMaxHint(cap.max_output_tokens > 0 - ? `(model max: ${(cap.max_output_tokens / 1000).toFixed(0)}K)` : ''); - }, [models]); - - const onTempInput = useCallback((e) => { - setSettings(s => ({ ...s, temperature: parseFloat(e.target.value) })); - }, []); - const save = useCallback(async () => { setSaving(true); try { await sw.api.profile.updateSettings({ - model: settings.model, - system_prompt: settings.system_prompt, - max_tokens: settings.max_tokens, - temperature: settings.temperature, - show_thinking: settings.show_thinking, + default_surface: defaultSurface, }); sw.emit('toast', { message: 'Settings saved', variant: 'success' }); } catch (e) { @@ -68,57 +37,22 @@ export function GeneralSection() { } finally { setSaving(false); } - }, [settings]); + }, [defaultSurface]); return html`
-

Defaults

+

Default Surface

- - setDefaultSurface(e.target.value)}> + + ${surfaces.map(s => html``)}
-
- -