From 3252228e5c230d291fc705fb5f1f4b3f58cb2d99 Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Wed, 4 Feb 2026 00:11:53 -0500 Subject: [PATCH] feat(hooks): extend image analyzer to all CLIProxy providers - Derive supported profiles from provider_models config dynamically - Add qwen and iflow to default provider_models - Full parity with WebSearch hook injection pattern Providers now covered: agy, gemini, codex, kiro, ghcp, claude, qwen, iflow --- src/config/unified-config-types.ts | 2 ++ .../hooks/image-analyzer-profile-hook-injector.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/config/unified-config-types.ts b/src/config/unified-config-types.ts index c654d9ec..15a65998 100644 --- a/src/config/unified-config-types.ts +++ b/src/config/unified-config-types.ts @@ -545,6 +545,8 @@ export const DEFAULT_IMAGE_ANALYSIS_CONFIG: ImageAnalysisConfig = { kiro: 'kiro-claude-haiku-4-5', ghcp: 'claude-haiku-4.5', claude: 'claude-haiku-4-5-20251001', + qwen: 'vision-model', + iflow: 'qwen3-vl-plus', }, }; diff --git a/src/utils/hooks/image-analyzer-profile-hook-injector.ts b/src/utils/hooks/image-analyzer-profile-hook-injector.ts index 4d4e4f12..cd7a4db4 100644 --- a/src/utils/hooks/image-analyzer-profile-hook-injector.ts +++ b/src/utils/hooks/image-analyzer-profile-hook-injector.ts @@ -94,14 +94,15 @@ export function ensureProfileHooks(profileName: string): boolean { return false; } - // Only inject for CLIProxy profiles with vision support - const visionProfiles = ['agy', 'gemini']; - if (!visionProfiles.includes(profileName)) { + const imageConfig = getImageAnalysisConfig(); + + // Only inject for profiles that have a model mapping in provider_models + // This allows dynamic extension without hardcoding profile names + const configuredProviders = Object.keys(imageConfig.provider_models); + if (!configuredProviders.includes(profileName)) { return false; } - const imageConfig = getImageAnalysisConfig(); - // Skip if image analysis is disabled if (!imageConfig.enabled) { return false;