diff --git a/app/src/components/settings/panels/AutocompletePanel.tsx b/app/src/components/settings/panels/AutocompletePanel.tsx index d30339c88..d6734f26e 100644 --- a/app/src/components/settings/panels/AutocompletePanel.tsx +++ b/app/src/components/settings/panels/AutocompletePanel.tsx @@ -28,6 +28,7 @@ const DEFAULT_CONFIG: AutocompleteConfig = { style_examples: [], disabled_apps: [], accept_with_tab: true, + overlay_ttl_ms: 1100, }; const MAX_LOG_ENTRIES = 200; @@ -56,6 +57,10 @@ const parseAutocompleteConfig = (raw: unknown): AutocompleteConfig => { typeof value.accept_with_tab === 'boolean' ? value.accept_with_tab : DEFAULT_CONFIG.accept_with_tab, + overlay_ttl_ms: + typeof value.overlay_ttl_ms === 'number' + ? value.overlay_ttl_ms + : DEFAULT_CONFIG.overlay_ttl_ms, }; }; @@ -77,6 +82,7 @@ const AutocompletePanel = () => { DEFAULT_CONFIG.disabled_apps.join('\n') ); const [acceptWithTab, setAcceptWithTab] = useState(DEFAULT_CONFIG.accept_with_tab); + const [overlayTtlMs, setOverlayTtlMs] = useState(String(DEFAULT_CONFIG.overlay_ttl_ms)); const [contextOverride, setContextOverride] = useState(''); const [focusDebug, setFocusDebug] = useState(''); const [logs, setLogs] = useState([]); @@ -153,6 +159,7 @@ const AutocompletePanel = () => { setStyleExamplesText(config.style_examples.join('\n')); setDisabledAppsText(config.disabled_apps.join('\n')); setAcceptWithTab(config.accept_with_tab); + setOverlayTtlMs(String(config.overlay_ttl_ms)); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load autocomplete settings'); } finally { @@ -253,6 +260,7 @@ const AutocompletePanel = () => { appendUiLog('saving autocomplete settings'); const debounce = Number(debounceMs); const max = Number(maxChars); + const ttl = Number(overlayTtlMs); const response = await openhumanAutocompleteSetStyle({ enabled, debounce_ms: Number.isFinite(debounce) ? Math.min(Math.max(debounce, 50), 2000) : 120, @@ -268,6 +276,7 @@ const AutocompletePanel = () => { .map(entry => entry.trim()) .filter(Boolean), accept_with_tab: acceptWithTab, + overlay_ttl_ms: Number.isFinite(ttl) ? Math.min(Math.max(ttl, 300), 10000) : 1100, }); setEnabled(response.result.config.enabled); @@ -278,6 +287,7 @@ const AutocompletePanel = () => { setStyleExamplesText(response.result.config.style_examples.join('\n')); setDisabledAppsText(response.result.config.disabled_apps.join('\n')); setAcceptWithTab(response.result.config.accept_with_tab); + setOverlayTtlMs(String(response.result.config.overlay_ttl_ms)); appendLogs(response.logs); setMessage('Autocomplete settings saved.'); await refreshStatus(); @@ -507,6 +517,18 @@ const AutocompletePanel = () => { className="w-28 rounded border border-stone-300 bg-white px-2 py-1 text-xs text-stone-700" /> +