From 57d4b04c682aac6246d2678a8104ed64e3bbd39a Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Wed, 4 Feb 2026 11:36:31 -0500 Subject: [PATCH] fix(hooks): deduplicate WebSearch hooks when saving via Dashboard Add deduplicateCcsHooks() call to PUT /api/settings/:profile endpoint. This prevents WebSearch hooks from accumulating when users save settings via the Dashboard UI. Fixes #450 --- src/web-server/routes/settings-routes.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/web-server/routes/settings-routes.ts b/src/web-server/routes/settings-routes.ts index baaa73a9..dc4c5063 100644 --- a/src/web-server/routes/settings-routes.ts +++ b/src/web-server/routes/settings-routes.ts @@ -18,6 +18,7 @@ import { resetAuthToDefaults, } from '../../cliproxy'; import { regenerateConfig } from '../../cliproxy/config-generator'; +import { deduplicateCcsHooks } from '../../utils/websearch/hook-utils'; import type { Settings } from '../../types/config'; const router = Router(); @@ -136,6 +137,10 @@ router.put('/:profile', (req: Request, res: Response): void => { return; } + // Deduplicate CCS hooks to prevent accumulation (fixes #450) + // This handles cases where duplicate hooks were added by previous versions + deduplicateCcsHooks(settings as Record); + const ccsDir = getCcsDir(); // Check for missing required fields (warning, not blocking - runtime fills defaults)