summaryrefslogtreecommitdiffhomepage
path: root/src/app/views
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-09-24 19:20:37 +0900
committerAdam Malczewski <[email protected]>2026-09-24 19:20:37 +0900
commit591e2dbe5cbf2283d58debdf92943a075edc4569 (patch)
tree11ee2481ed79f257cd6303f44992471ec9282237 /src/app/views
parent6556e70e396ec7cc9b2311ef60e00c81722777c7 (diff)
downloaddispatch-web-591e2dbe5cbf2283d58debdf92943a075edc4569.tar.gz
dispatch-web-591e2dbe5cbf2283d58debdf92943a075edc4569.zip
feat(search-backend-selection): Search backend dropdown in Settings
- New features/search-settings: pure view-model (options = available backends ∪ 'None (search disabled)', unconfigured entries disabled with a suffix, unknown persisted selection prepended, network-seam normalization) + the SearchBackendField dropdown (save-on-change, spinner/saved/error states, revert-to-persisted on failure, 503 -> disabled field with a 'search not available' hint, loading skeleton, help text noting search-mode-only scope). - store.svelte.ts: searchBackendConfig() / setSearchBackend() over the global GET/PUT /search/config routes (503 marked unavailable on the failure variant). - SettingsPane renders the field under the chat limit; ExtensionsPane lists the new module manifest. - .dispatch mirrors: wire + transport-contract deltas for the new types/routes.
Diffstat (limited to 'src/app/views')
-rw-r--r--src/app/views/ExtensionsPane.svelte2
-rw-r--r--src/app/views/SettingsPane.svelte5
2 files changed, 7 insertions, 0 deletions
diff --git a/src/app/views/ExtensionsPane.svelte b/src/app/views/ExtensionsPane.svelte
index 7a2343e..6afc2bf 100644
--- a/src/app/views/ExtensionsPane.svelte
+++ b/src/app/views/ExtensionsPane.svelte
@@ -17,6 +17,7 @@
import { manifest as markdownManifest } from "../../features/markdown";
import { manifest as mcpManifest } from "../../features/mcp";
import { manifest as namedAgentsManifest } from "../../features/named-agents";
+ import { manifest as searchSettingsManifest } from "../../features/search-settings";
import { manifest as settingsManifest } from "../../features/settings";
import { manifest as smartScrollManifest } from "../../features/smart-scroll";
import { SurfaceView } from "../../features/surface-host";
@@ -60,6 +61,7 @@
concurrencyManifest,
visionManifest,
namedAgentsManifest,
+ searchSettingsManifest,
].map((m) => [m.name, m.description] as const);
</script>
diff --git a/src/app/views/SettingsPane.svelte b/src/app/views/SettingsPane.svelte
index 67a88ec..f119103 100644
--- a/src/app/views/SettingsPane.svelte
+++ b/src/app/views/SettingsPane.svelte
@@ -8,6 +8,7 @@
*/
import { tick } from "svelte";
import { ChatLimitField, type ChatLimitSaveResult } from "../../features/settings";
+ import { SearchBackendField } from "../../features/search-settings";
import type { AppViewPorts } from "../view-ports";
let { ports }: { ports: AppViewPorts } = $props();
@@ -31,4 +32,8 @@
<div class="flex flex-col gap-3">
<ChatLimitField chatLimit={store.chatLimit} save={saveChatLimit} />
+ <SearchBackendField
+ load={() => store.searchBackendConfig()}
+ save={(backend) => store.setSearchBackend(backend)}
+ />
</div>