From 90ac222bc98e8af47aef2536be52121baa792db6 Mon Sep 17 00:00:00 2001 From: Acbox Date: Sat, 28 Mar 2026 23:47:09 +0800 Subject: [PATCH] feat: auto-create search/tts providers at startup with enable toggle - Add `enable` column (default false) to search_providers and tts_providers tables - Auto-create default entries for all provider types on startup (disabled by default) - Add enable/disable Switch toggle in frontend for both search and TTS providers - Show green status dot in sidebar for enabled providers, sort enabled first - Filter bot settings dropdowns to only show enabled providers --- .../pages/bots/components/bot-settings.vue | 7 ++- .../speech/components/provider-setting.vue | 58 ++++++++++++++----- apps/web/src/pages/speech/index.vue | 20 ++++++- .../components/provider-setting.vue | 51 +++++++++++++--- apps/web/src/pages/web-search/index.vue | 44 ++++++++++---- cmd/agent/main.go | 24 ++++++++ cmd/memoh/serve.go | 24 ++++++++ db/migrations/0001_init.up.sql | 2 + .../0049_search_provider_enable.down.sql | 4 ++ .../0049_search_provider_enable.up.sql | 4 ++ .../0050_tts_provider_enable.down.sql | 4 ++ db/migrations/0050_tts_provider_enable.up.sql | 4 ++ db/queries/search_providers.sql | 6 +- db/queries/tts_providers.sql | 6 +- internal/db/sqlc/models.go | 2 + internal/db/sqlc/search_providers.sql.go | 36 ++++++++---- internal/db/sqlc/tts_providers.sql.go | 36 ++++++++---- internal/searchproviders/service.go | 58 +++++++++++++++++++ internal/searchproviders/types.go | 2 + internal/tts/service.go | 51 ++++++++++++++++ internal/tts/types.go | 4 +- packages/sdk/src/types.gen.ts | 4 ++ spec/docs.go | 12 ++++ spec/swagger.json | 12 ++++ spec/swagger.yaml | 8 +++ 25 files changed, 420 insertions(+), 63 deletions(-) create mode 100644 db/migrations/0049_search_provider_enable.down.sql create mode 100644 db/migrations/0049_search_provider_enable.up.sql create mode 100644 db/migrations/0050_tts_provider_enable.down.sql create mode 100644 db/migrations/0050_tts_provider_enable.up.sql diff --git a/apps/web/src/pages/bots/components/bot-settings.vue b/apps/web/src/pages/bots/components/bot-settings.vue index 7bb4228d..69d0e3db 100644 --- a/apps/web/src/pages/bots/components/bot-settings.vue +++ b/apps/web/src/pages/bots/components/bot-settings.vue @@ -477,10 +477,11 @@ const { mutateAsync: deleteBot, isLoading: deleteLoading } = useMutation({ const models = computed(() => modelData.value ?? []) const providers = computed(() => providerData.value ?? []) -const searchProviders = computed(() => searchProviderData.value ?? []) +const searchProviders = computed(() => (searchProviderData.value ?? []).filter((p) => p.enable !== false)) const memoryProviders = computed(() => memoryProviderData.value ?? []) -const ttsProviders = computed(() => ttsProviderData.value ?? []) -const ttsModels = computed(() => ttsModelData.value ?? []) +const ttsProviders = computed(() => (ttsProviderData.value ?? []).filter((p) => p.enable !== false)) +const enabledTtsProviderIds = computed(() => new Set(ttsProviders.value.map((p) => p.id))) +const ttsModels = computed(() => (ttsModelData.value ?? []).filter((m: Record) => enabledTtsProviderIds.value.has(m.tts_provider_id as string))) const browserContexts = computed(() => browserContextData.value ?? []) // ---- Form ---- diff --git a/apps/web/src/pages/speech/components/provider-setting.vue b/apps/web/src/pages/speech/components/provider-setting.vue index f81a1ce3..afcee903 100644 --- a/apps/web/src/pages/speech/components/provider-setting.vue +++ b/apps/web/src/pages/speech/components/provider-setting.vue @@ -1,19 +1,27 @@