@kaitranntt/ccs 7.63.1 → 7.64.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +12 -3
  2. package/dist/api/services/profile-lifecycle-service.js +4 -4
  3. package/dist/api/services/profile-lifecycle-service.js.map +1 -1
  4. package/dist/api/services/profile-types.d.ts +17 -0
  5. package/dist/api/services/profile-types.d.ts.map +1 -1
  6. package/dist/api/services/profile-writer.d.ts.map +1 -1
  7. package/dist/api/services/profile-writer.js +3 -5
  8. package/dist/api/services/profile-writer.js.map +1 -1
  9. package/dist/ccs.js +82 -15
  10. package/dist/ccs.js.map +1 -1
  11. package/dist/cliproxy/accounts/email-account-identity.d.ts +12 -0
  12. package/dist/cliproxy/accounts/email-account-identity.d.ts.map +1 -0
  13. package/dist/cliproxy/accounts/email-account-identity.js +124 -0
  14. package/dist/cliproxy/accounts/email-account-identity.js.map +1 -0
  15. package/dist/cliproxy/accounts/query.d.ts.map +1 -1
  16. package/dist/cliproxy/accounts/query.js +15 -8
  17. package/dist/cliproxy/accounts/query.js.map +1 -1
  18. package/dist/cliproxy/accounts/registry.d.ts +6 -0
  19. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  20. package/dist/cliproxy/accounts/registry.js +136 -42
  21. package/dist/cliproxy/accounts/registry.js.map +1 -1
  22. package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
  23. package/dist/cliproxy/auth/token-manager.js +45 -11
  24. package/dist/cliproxy/auth/token-manager.js.map +1 -1
  25. package/dist/cliproxy/executor/env-resolver.d.ts +27 -0
  26. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  27. package/dist/cliproxy/executor/env-resolver.js +87 -3
  28. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  29. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  30. package/dist/cliproxy/executor/index.js +55 -12
  31. package/dist/cliproxy/executor/index.js.map +1 -1
  32. package/dist/cliproxy/model-catalog.d.ts +6 -0
  33. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  34. package/dist/cliproxy/model-catalog.js +38 -1
  35. package/dist/cliproxy/model-catalog.js.map +1 -1
  36. package/dist/cliproxy/proxy-config-resolver.d.ts +2 -1
  37. package/dist/cliproxy/proxy-config-resolver.d.ts.map +1 -1
  38. package/dist/cliproxy/proxy-config-resolver.js +1 -0
  39. package/dist/cliproxy/proxy-config-resolver.js.map +1 -1
  40. package/dist/cliproxy/proxy-target-resolver.d.ts +2 -0
  41. package/dist/cliproxy/proxy-target-resolver.d.ts.map +1 -1
  42. package/dist/cliproxy/proxy-target-resolver.js +3 -0
  43. package/dist/cliproxy/proxy-target-resolver.js.map +1 -1
  44. package/dist/cliproxy/quota-fetcher-codex.d.ts +0 -3
  45. package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -1
  46. package/dist/cliproxy/quota-fetcher-codex.js +46 -17
  47. package/dist/cliproxy/quota-fetcher-codex.js.map +1 -1
  48. package/dist/cliproxy/remote-auth-fetcher.d.ts.map +1 -1
  49. package/dist/cliproxy/remote-auth-fetcher.js +89 -8
  50. package/dist/cliproxy/remote-auth-fetcher.js.map +1 -1
  51. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  52. package/dist/cliproxy/services/variant-settings.js +23 -10
  53. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  54. package/dist/cliproxy/stats-transformer.d.ts.map +1 -1
  55. package/dist/cliproxy/stats-transformer.js +26 -3
  56. package/dist/cliproxy/stats-transformer.js.map +1 -1
  57. package/dist/cliproxy/types.d.ts +2 -0
  58. package/dist/cliproxy/types.d.ts.map +1 -1
  59. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  60. package/dist/commands/cliproxy/quota-subcommand.js +25 -22
  61. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  62. package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
  63. package/dist/commands/cliproxy/variant-subcommand.js +14 -6
  64. package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
  65. package/dist/commands/config-image-analysis-command.d.ts.map +1 -1
  66. package/dist/commands/config-image-analysis-command.js +87 -1
  67. package/dist/commands/config-image-analysis-command.js.map +1 -1
  68. package/dist/commands/install-command.d.ts.map +1 -1
  69. package/dist/commands/install-command.js +8 -2
  70. package/dist/commands/install-command.js.map +1 -1
  71. package/dist/config/unified-config-loader.d.ts.map +1 -1
  72. package/dist/config/unified-config-loader.js +9 -4
  73. package/dist/config/unified-config-loader.js.map +1 -1
  74. package/dist/config/unified-config-types.d.ts +4 -0
  75. package/dist/config/unified-config-types.d.ts.map +1 -1
  76. package/dist/config/unified-config-types.js +4 -2
  77. package/dist/config/unified-config-types.js.map +1 -1
  78. package/dist/copilot/copilot-executor.d.ts +13 -0
  79. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  80. package/dist/copilot/copilot-executor.js +63 -4
  81. package/dist/copilot/copilot-executor.js.map +1 -1
  82. package/dist/delegation/executor/result-aggregator.d.ts +2 -1
  83. package/dist/delegation/executor/result-aggregator.d.ts.map +1 -1
  84. package/dist/delegation/executor/result-aggregator.js +21 -1
  85. package/dist/delegation/executor/result-aggregator.js.map +1 -1
  86. package/dist/delegation/executor/types.d.ts +6 -0
  87. package/dist/delegation/executor/types.d.ts.map +1 -1
  88. package/dist/delegation/headless-executor.d.ts.map +1 -1
  89. package/dist/delegation/headless-executor.js +69 -4
  90. package/dist/delegation/headless-executor.js.map +1 -1
  91. package/dist/management/checks/image-analysis-check.js +1 -1
  92. package/dist/management/checks/image-analysis-check.js.map +1 -1
  93. package/dist/management/instance-manager.d.ts +1 -1
  94. package/dist/management/instance-manager.d.ts.map +1 -1
  95. package/dist/management/instance-manager.js +10 -2
  96. package/dist/management/instance-manager.js.map +1 -1
  97. package/dist/shared/compatible-cli-contracts.d.ts +4 -0
  98. package/dist/shared/compatible-cli-contracts.d.ts.map +1 -1
  99. package/dist/targets/codex-adapter.d.ts.map +1 -1
  100. package/dist/targets/codex-adapter.js +78 -3
  101. package/dist/targets/codex-adapter.js.map +1 -1
  102. package/dist/targets/codex-detector.d.ts.map +1 -1
  103. package/dist/targets/codex-detector.js +28 -7
  104. package/dist/targets/codex-detector.js.map +1 -1
  105. package/dist/types/config.d.ts +5 -0
  106. package/dist/types/config.d.ts.map +1 -1
  107. package/dist/types/config.js.map +1 -1
  108. package/dist/ui/assets/{accounts-DkxZnPJE.js → accounts-BHEYnq6b.js} +1 -1
  109. package/dist/ui/assets/{alert-dialog-CiYMglgR.js → alert-dialog-D0EFRcfB.js} +1 -1
  110. package/dist/ui/assets/api-DhM3BYXr.js +4 -0
  111. package/dist/ui/assets/{auth-section-BMaKBRA_.js → auth-section-DVp8FQGm.js} +1 -1
  112. package/dist/ui/assets/{backups-section-DOpSADoH.js → backups-section-CRo0NZkA.js} +1 -1
  113. package/dist/ui/assets/channels-uZ_9CBqO.js +1 -0
  114. package/dist/ui/assets/checkbox-32DNqW_Q.js +1 -0
  115. package/dist/ui/assets/{claude-extension-B5RngGem.js → claude-extension-BfXlz5gV.js} +1 -1
  116. package/dist/ui/assets/cliproxy-DjNY9H-U.js +3 -0
  117. package/dist/ui/assets/{cliproxy-ai-providers-DVaaS-CT.js → cliproxy-ai-providers-5SHLMHiy.js} +5 -5
  118. package/dist/ui/assets/cliproxy-control-panel-Zax_m1AC.js +1 -0
  119. package/dist/ui/assets/codex-CRUSpjsu.js +27 -0
  120. package/dist/ui/assets/{confirm-dialog-B9vRgowr.js → confirm-dialog-DVf5ZmCZ.js} +1 -1
  121. package/dist/ui/assets/copilot-BZrihl_Z.js +3 -0
  122. package/dist/ui/assets/cursor-BP4nbEk_.js +1 -0
  123. package/dist/ui/assets/{droid-DshEfT1H.js → droid-BG92rdM2.js} +2 -2
  124. package/dist/ui/assets/globalenv-section-Cf6dKgSf.js +1 -0
  125. package/dist/ui/assets/{health-CE0VQs6K.js → health-BTy1UZs3.js} +1 -1
  126. package/dist/ui/assets/icons-CeH5899d.js +1 -0
  127. package/dist/ui/assets/index-B6SrL1O-.css +1 -0
  128. package/dist/ui/assets/index-BVeN0dIB.js +1 -0
  129. package/dist/ui/assets/index-Corv1lSo.js +69 -0
  130. package/dist/ui/assets/index-DHrTq-0n.js +1 -0
  131. package/dist/ui/assets/index-DuRYaONg.js +1 -0
  132. package/dist/ui/assets/index-N2ZSJurX.js +1 -0
  133. package/dist/ui/assets/index-wg7UtkFv.js +1 -0
  134. package/dist/ui/assets/{masked-input-B2tcbvAj.js → masked-input-DX9bedLy.js} +1 -1
  135. package/dist/ui/assets/{proxy-status-widget-BnJD49TF.js → proxy-status-widget-DVDMuZK5.js} +1 -1
  136. package/dist/ui/assets/{radix-ui-Dt3edmE5.js → radix-ui-C98W0NRG.js} +1 -1
  137. package/dist/ui/assets/{raw-json-settings-editor-panel-DnUbq1__.js → raw-json-settings-editor-panel-Dkt5E6Z_.js} +1 -1
  138. package/dist/ui/assets/{searchable-select-ULayr5K1.js → searchable-select-BP3Q1-Yn.js} +1 -1
  139. package/dist/ui/assets/separator-BLGGUlh9.js +1 -0
  140. package/dist/ui/assets/shared-G0XRyLig.js +8 -0
  141. package/dist/ui/assets/{table-E5IxHhrW.js → table-B4lRrWC-.js} +1 -1
  142. package/dist/ui/assets/tanstack-CfKik0yL.js +4 -0
  143. package/dist/ui/assets/updates--A2Sdo7N.js +1 -0
  144. package/dist/ui/index.html +5 -5
  145. package/dist/utils/claude-config-path.d.ts +2 -0
  146. package/dist/utils/claude-config-path.d.ts.map +1 -1
  147. package/dist/utils/claude-config-path.js +6 -1
  148. package/dist/utils/claude-config-path.js.map +1 -1
  149. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +3 -2
  150. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
  151. package/dist/utils/hooks/get-image-analysis-hook-env.js +15 -6
  152. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
  153. package/dist/utils/hooks/image-analysis-backend-resolver.d.ts +53 -0
  154. package/dist/utils/hooks/image-analysis-backend-resolver.d.ts.map +1 -0
  155. package/dist/utils/hooks/image-analysis-backend-resolver.js +376 -0
  156. package/dist/utils/hooks/image-analysis-backend-resolver.js.map +1 -0
  157. package/dist/utils/hooks/image-analysis-runtime-status.d.ts +17 -0
  158. package/dist/utils/hooks/image-analysis-runtime-status.d.ts.map +1 -0
  159. package/dist/utils/hooks/image-analysis-runtime-status.js +132 -0
  160. package/dist/utils/hooks/image-analysis-runtime-status.js.map +1 -0
  161. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts +6 -5
  162. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
  163. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +37 -17
  164. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
  165. package/dist/utils/hooks/index.d.ts +2 -0
  166. package/dist/utils/hooks/index.d.ts.map +1 -1
  167. package/dist/utils/hooks/index.js +8 -1
  168. package/dist/utils/hooks/index.js.map +1 -1
  169. package/dist/utils/websearch/claude-tool-args.d.ts +5 -0
  170. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -0
  171. package/dist/utils/websearch/claude-tool-args.js +125 -0
  172. package/dist/utils/websearch/claude-tool-args.js.map +1 -0
  173. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  174. package/dist/utils/websearch/hook-env.js +8 -0
  175. package/dist/utils/websearch/hook-env.js.map +1 -1
  176. package/dist/utils/websearch/hook-installer.d.ts +3 -2
  177. package/dist/utils/websearch/hook-installer.d.ts.map +1 -1
  178. package/dist/utils/websearch/hook-installer.js +3 -2
  179. package/dist/utils/websearch/hook-installer.js.map +1 -1
  180. package/dist/utils/websearch/index.d.ts +3 -0
  181. package/dist/utils/websearch/index.d.ts.map +1 -1
  182. package/dist/utils/websearch/index.js +23 -2
  183. package/dist/utils/websearch/index.js.map +1 -1
  184. package/dist/utils/websearch/mcp-installer.d.ts +14 -0
  185. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -0
  186. package/dist/utils/websearch/mcp-installer.js +351 -0
  187. package/dist/utils/websearch/mcp-installer.js.map +1 -0
  188. package/dist/utils/websearch/profile-hook-injector.d.ts +5 -3
  189. package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -1
  190. package/dist/utils/websearch/profile-hook-injector.js +5 -3
  191. package/dist/utils/websearch/profile-hook-injector.js.map +1 -1
  192. package/dist/utils/websearch/status.d.ts.map +1 -1
  193. package/dist/utils/websearch/status.js +67 -1
  194. package/dist/utils/websearch/status.js.map +1 -1
  195. package/dist/utils/websearch/trace.d.ts +23 -0
  196. package/dist/utils/websearch/trace.d.ts.map +1 -0
  197. package/dist/utils/websearch/trace.js +206 -0
  198. package/dist/utils/websearch/trace.js.map +1 -0
  199. package/dist/utils/websearch-manager.d.ts +11 -11
  200. package/dist/utils/websearch-manager.d.ts.map +1 -1
  201. package/dist/utils/websearch-manager.js +32 -17
  202. package/dist/utils/websearch-manager.js.map +1 -1
  203. package/dist/web-server/index.d.ts.map +1 -1
  204. package/dist/web-server/index.js +9 -1
  205. package/dist/web-server/index.js.map +1 -1
  206. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  207. package/dist/web-server/routes/account-routes.js +2 -1
  208. package/dist/web-server/routes/account-routes.js.map +1 -1
  209. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  210. package/dist/web-server/routes/cliproxy-auth-routes.js +1 -1
  211. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  212. package/dist/web-server/routes/cliproxy-local-proxy.d.ts +20 -0
  213. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -0
  214. package/dist/web-server/routes/cliproxy-local-proxy.js +117 -0
  215. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -0
  216. package/dist/web-server/routes/image-analysis-routes.d.ts +3 -0
  217. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -0
  218. package/dist/web-server/routes/image-analysis-routes.js +362 -0
  219. package/dist/web-server/routes/image-analysis-routes.js.map +1 -0
  220. package/dist/web-server/routes/index.d.ts.map +1 -1
  221. package/dist/web-server/routes/index.js +2 -0
  222. package/dist/web-server/routes/index.js.map +1 -1
  223. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  224. package/dist/web-server/routes/settings-routes.js +67 -5
  225. package/dist/web-server/routes/settings-routes.js.map +1 -1
  226. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  227. package/dist/web-server/services/codex-dashboard-service.js +27 -8
  228. package/dist/web-server/services/codex-dashboard-service.js.map +1 -1
  229. package/lib/hooks/websearch-transformer.cjs +660 -96
  230. package/lib/mcp/ccs-websearch-server.cjs +339 -0
  231. package/package.json +3 -2
  232. package/scripts/github/normalize-ai-review-output.mjs +232 -16
  233. package/scripts/github/prepare-ai-review-scope.mjs +317 -0
  234. package/dist/ui/assets/api-DaOtMRT4.js +0 -4
  235. package/dist/ui/assets/channels-zDFV-BlC.js +0 -1
  236. package/dist/ui/assets/checkbox-Cb5AZBZL.js +0 -1
  237. package/dist/ui/assets/cliproxy-VYe0Qov1.js +0 -3
  238. package/dist/ui/assets/cliproxy-control-panel-FVIQcFti.js +0 -1
  239. package/dist/ui/assets/codex-D2yIwOs4.js +0 -27
  240. package/dist/ui/assets/copilot-HvsOp6hu.js +0 -3
  241. package/dist/ui/assets/cursor-C1XOjAWS.js +0 -1
  242. package/dist/ui/assets/globalenv-section-CmcMkb6z.js +0 -1
  243. package/dist/ui/assets/icons-EMBHZkGo.js +0 -1
  244. package/dist/ui/assets/index-6dNBcNC3.js +0 -1
  245. package/dist/ui/assets/index-BAuT6yuc.css +0 -1
  246. package/dist/ui/assets/index-CesVGA6m.js +0 -1
  247. package/dist/ui/assets/index-CmKclBR1.js +0 -1
  248. package/dist/ui/assets/index-CmtSgCxo.js +0 -1
  249. package/dist/ui/assets/index-DAtuJuGe.js +0 -69
  250. package/dist/ui/assets/separator--ZH5ZM-3.js +0 -1
  251. package/dist/ui/assets/shared-qizFb9Ye.js +0 -8
  252. package/dist/ui/assets/switch-DmDIWykO.js +0 -1
  253. package/dist/ui/assets/tanstack-B8i0evp-.js +0 -4
  254. package/dist/ui/assets/updates-2Uu4Mgtg.js +0 -1
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveImageAnalysisStatus = exports.canonicalizeImageAnalysisConfig = exports.normalizeImageAnalysisBackendId = void 0;
4
+ const unified_config_types_1 = require("../../config/unified-config-types");
5
+ const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
6
+ const model_catalog_1 = require("../../cliproxy/model-catalog");
7
+ const model_id_normalizer_1 = require("../../cliproxy/model-id-normalizer");
8
+ const extended_context_utils_1 = require("../../shared/extended-context-utils");
9
+ const PROFILE_MODEL_ENV_KEYS = [
10
+ 'ANTHROPIC_MODEL',
11
+ 'ANTHROPIC_DEFAULT_OPUS_MODEL',
12
+ 'ANTHROPIC_DEFAULT_SONNET_MODEL',
13
+ 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
14
+ ];
15
+ function resolveProviderFromBaseUrl(baseUrl) {
16
+ if (typeof baseUrl !== 'string' || baseUrl.trim().length === 0) {
17
+ return null;
18
+ }
19
+ try {
20
+ const parsed = new URL(baseUrl);
21
+ const extracted = (0, model_id_normalizer_1.extractProviderFromPathname)(parsed.pathname);
22
+ return extracted ? (0, provider_capabilities_1.mapExternalProviderName)(extracted) : null;
23
+ }
24
+ catch {
25
+ const extracted = (0, model_id_normalizer_1.extractProviderFromPathname)(baseUrl);
26
+ return extracted ? (0, provider_capabilities_1.mapExternalProviderName)(extracted) : null;
27
+ }
28
+ }
29
+ function findCaseInsensitiveKey(entries, requestedKey) {
30
+ if (!entries) {
31
+ return null;
32
+ }
33
+ const normalizedRequestedKey = requestedKey.trim().toLowerCase();
34
+ for (const key of Object.keys(entries)) {
35
+ if (key.trim().toLowerCase() === normalizedRequestedKey) {
36
+ return key;
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ function normalizeImageAnalysisBackendId(value, knownBackends = []) {
42
+ if (!value || value.trim().length === 0) {
43
+ return null;
44
+ }
45
+ const trimmed = value.trim();
46
+ const canonicalProvider = (0, provider_capabilities_1.mapExternalProviderName)(trimmed.toLowerCase());
47
+ if (canonicalProvider) {
48
+ return canonicalProvider;
49
+ }
50
+ const knownBackendList = Array.from(knownBackends);
51
+ const exactKey = knownBackendList.find((backend) => backend === trimmed);
52
+ if (exactKey) {
53
+ return exactKey;
54
+ }
55
+ const caseInsensitiveKey = knownBackendList.find((backend) => backend.trim().toLowerCase() === trimmed.toLowerCase());
56
+ if (caseInsensitiveKey) {
57
+ return caseInsensitiveKey;
58
+ }
59
+ return trimmed.toLowerCase();
60
+ }
61
+ exports.normalizeImageAnalysisBackendId = normalizeImageAnalysisBackendId;
62
+ function canonicalizeImageAnalysisConfig(config) {
63
+ const normalizedProviderModels = Object.entries(config.provider_models ?? {}).reduce((acc, [backend, model]) => {
64
+ const normalizedBackend = normalizeImageAnalysisBackendId(backend, Object.keys(unified_config_types_1.DEFAULT_IMAGE_ANALYSIS_CONFIG.provider_models));
65
+ if (!normalizedBackend || typeof model !== 'string' || model.trim().length === 0) {
66
+ return acc;
67
+ }
68
+ acc[normalizedBackend] = model.trim();
69
+ return acc;
70
+ }, {});
71
+ const normalizedFallbackBackend = normalizeImageAnalysisBackendId(config.fallback_backend ?? unified_config_types_1.DEFAULT_IMAGE_ANALYSIS_CONFIG.fallback_backend, Object.keys(normalizedProviderModels)) ?? unified_config_types_1.DEFAULT_IMAGE_ANALYSIS_CONFIG.fallback_backend;
72
+ const normalizedProfileBackends = Object.entries(config.profile_backends ?? {}).reduce((acc, [profileName, backend]) => {
73
+ const trimmedProfileName = profileName.trim();
74
+ const normalizedBackend = normalizeImageAnalysisBackendId(backend, Object.keys(normalizedProviderModels));
75
+ if (!trimmedProfileName || !normalizedBackend) {
76
+ return acc;
77
+ }
78
+ acc[trimmedProfileName] = normalizedBackend;
79
+ return acc;
80
+ }, {});
81
+ return {
82
+ enabled: config.enabled,
83
+ timeout: config.timeout,
84
+ provider_models: normalizedProviderModels,
85
+ fallback_backend: normalizedFallbackBackend,
86
+ profile_backends: normalizedProfileBackends,
87
+ };
88
+ }
89
+ exports.canonicalizeImageAnalysisConfig = canonicalizeImageAnalysisConfig;
90
+ function resolveConfiguredProfileBackend(profileName, config) {
91
+ if (!config.profile_backends) {
92
+ return null;
93
+ }
94
+ const exactKey = config.profile_backends[profileName];
95
+ if (exactKey) {
96
+ return normalizeImageAnalysisBackendId(exactKey, Object.keys(config.provider_models));
97
+ }
98
+ const matchedKey = findCaseInsensitiveKey(config.profile_backends, profileName);
99
+ if (!matchedKey) {
100
+ return null;
101
+ }
102
+ return normalizeImageAnalysisBackendId(config.profile_backends[matchedKey], Object.keys(config.provider_models));
103
+ }
104
+ function getBackendDisplayName(backendId) {
105
+ if (!backendId) {
106
+ return null;
107
+ }
108
+ return (0, provider_capabilities_1.isCLIProxyProvider)(backendId) ? (0, provider_capabilities_1.getProviderDisplayName)(backendId) : backendId;
109
+ }
110
+ function getRuntimePath(backendId) {
111
+ if (!backendId) {
112
+ return null;
113
+ }
114
+ return `/api/provider/${backendId}`;
115
+ }
116
+ function resolveNativeImageProvider(context, knownBackends) {
117
+ return normalizeImageAnalysisBackendId(context.cliproxyProvider ??
118
+ context.cliproxyBridge?.provider ??
119
+ resolveProviderFromBaseUrl(context.settings?.env?.ANTHROPIC_BASE_URL ?? undefined), knownBackends);
120
+ }
121
+ function resolveProfileModel(context, provider) {
122
+ const env = context.settings?.env;
123
+ if (env && typeof env === 'object') {
124
+ for (const key of PROFILE_MODEL_ENV_KEYS) {
125
+ const value = env[key];
126
+ if (typeof value === 'string' && value.trim().length > 0) {
127
+ return value.trim();
128
+ }
129
+ }
130
+ }
131
+ if (provider && (0, provider_capabilities_1.isCLIProxyProvider)(provider)) {
132
+ return (0, model_catalog_1.getProviderCatalog)(provider)?.defaultModel ?? null;
133
+ }
134
+ return null;
135
+ }
136
+ function verifyNativeImageCapability(provider, modelId) {
137
+ if (!modelId) {
138
+ return null;
139
+ }
140
+ if (provider && (0, provider_capabilities_1.isCLIProxyProvider)(provider) && (0, model_catalog_1.supportsNativeImageInput)(provider, modelId)) {
141
+ return true;
142
+ }
143
+ const normalizedModel = (0, extended_context_utils_1.stripModelConfigurationSuffixes)(modelId).trim().toLowerCase();
144
+ if (!normalizedModel) {
145
+ return null;
146
+ }
147
+ if (normalizedModel.startsWith('gemini-') ||
148
+ normalizedModel.startsWith('claude-') ||
149
+ normalizedModel.startsWith('gpt-4o') ||
150
+ normalizedModel.includes('vision') ||
151
+ normalizedModel.includes('multimodal') ||
152
+ /(^|[-_.])vl([-. _]|$)/.test(normalizedModel) ||
153
+ /^glm-[\d.]+v([-. _]|$)/.test(normalizedModel)) {
154
+ return true;
155
+ }
156
+ return null;
157
+ }
158
+ function resolveNativeImageSupport(context, config) {
159
+ const knownBackends = Object.keys(config.provider_models);
160
+ const provider = resolveNativeImageProvider(context, knownBackends);
161
+ const profileModel = resolveProfileModel(context, provider);
162
+ const nativeReadPreference = context.settings?.ccs_image?.native_read === true;
163
+ const nativeImageCapable = verifyNativeImageCapability(provider, profileModel);
164
+ let nativeImageReason = null;
165
+ if (!profileModel) {
166
+ nativeImageReason = 'No current model is configured for this profile yet.';
167
+ }
168
+ else if (nativeImageCapable) {
169
+ nativeImageReason = `${profileModel} can read images natively.`;
170
+ }
171
+ else {
172
+ nativeImageReason = `CCS cannot verify native image support for ${profileModel} yet.`;
173
+ }
174
+ return {
175
+ profileModel,
176
+ nativeReadPreference,
177
+ nativeImageCapable,
178
+ nativeImageReason,
179
+ };
180
+ }
181
+ function resolveBackend(context, config, nativeSupport) {
182
+ const { profileName, profileType, cliproxyProvider, isComposite, cliproxyBridge, settings } = context;
183
+ if (!config.enabled) {
184
+ return {
185
+ backendId: null,
186
+ backendDisplayName: null,
187
+ resolutionSource: 'disabled',
188
+ reason: 'Disabled globally.',
189
+ };
190
+ }
191
+ if (profileType === 'default' || profileType === 'account') {
192
+ return {
193
+ backendId: null,
194
+ backendDisplayName: null,
195
+ resolutionSource: 'unsupported-profile',
196
+ reason: 'This profile type is not currently covered by image-analysis runtime.',
197
+ };
198
+ }
199
+ if (nativeSupport.nativeReadPreference) {
200
+ return {
201
+ backendId: null,
202
+ backendDisplayName: null,
203
+ resolutionSource: 'native-compatible',
204
+ reason: nativeSupport.nativeImageCapable === true
205
+ ? 'This profile is set to use native image reading.'
206
+ : `${nativeSupport.nativeImageReason ?? 'Native image reading is enabled for this profile.'} CCS will bypass the transformer for this profile.`,
207
+ };
208
+ }
209
+ // Explicit profile mappings are the only user-authored override and must
210
+ // win before provider/bridge inference.
211
+ const mappedBackend = resolveConfiguredProfileBackend(profileName, config);
212
+ if (mappedBackend) {
213
+ return {
214
+ backendId: mappedBackend,
215
+ backendDisplayName: getBackendDisplayName(mappedBackend),
216
+ resolutionSource: 'profile-backend',
217
+ reason: null,
218
+ };
219
+ }
220
+ if (profileType === 'copilot' || profileName === 'copilot') {
221
+ const backendId = normalizeImageAnalysisBackendId('ghcp', Object.keys(config.provider_models));
222
+ return {
223
+ backendId,
224
+ backendDisplayName: getBackendDisplayName(backendId),
225
+ resolutionSource: 'copilot-alias',
226
+ reason: null,
227
+ };
228
+ }
229
+ const normalizedCliproxyProvider = normalizeImageAnalysisBackendId(cliproxyProvider, Object.keys(config.provider_models));
230
+ if (normalizedCliproxyProvider) {
231
+ return {
232
+ backendId: normalizedCliproxyProvider,
233
+ backendDisplayName: getBackendDisplayName(normalizedCliproxyProvider),
234
+ resolutionSource: isComposite || profileName.startsWith('composite-')
235
+ ? 'cliproxy-composite'
236
+ : profileName === normalizedCliproxyProvider
237
+ ? 'cliproxy-provider'
238
+ : 'cliproxy-variant',
239
+ reason: null,
240
+ };
241
+ }
242
+ const bridgeBackend = normalizeImageAnalysisBackendId(cliproxyBridge?.provider ??
243
+ resolveProviderFromBaseUrl(settings?.env?.ANTHROPIC_BASE_URL ?? undefined), Object.keys(config.provider_models));
244
+ if (bridgeBackend) {
245
+ return {
246
+ backendId: bridgeBackend,
247
+ backendDisplayName: getBackendDisplayName(bridgeBackend),
248
+ resolutionSource: 'cliproxy-bridge',
249
+ reason: null,
250
+ };
251
+ }
252
+ const hasDirectAnthropicApiKey = Boolean(settings?.env?.ANTHROPIC_API_KEY?.trim());
253
+ const hasBaseUrl = Boolean(settings?.env?.ANTHROPIC_BASE_URL?.trim());
254
+ if (hasDirectAnthropicApiKey && !hasBaseUrl) {
255
+ return {
256
+ backendId: null,
257
+ backendDisplayName: null,
258
+ resolutionSource: 'unresolved',
259
+ reason: 'Direct Anthropic settings profiles use native file access unless explicitly mapped.',
260
+ };
261
+ }
262
+ const fallbackBackend = normalizeImageAnalysisBackendId(config.fallback_backend, Object.keys(config.provider_models));
263
+ if (fallbackBackend) {
264
+ return {
265
+ backendId: fallbackBackend,
266
+ backendDisplayName: getBackendDisplayName(fallbackBackend),
267
+ resolutionSource: 'fallback-backend',
268
+ reason: null,
269
+ };
270
+ }
271
+ return {
272
+ backendId: null,
273
+ backendDisplayName: null,
274
+ resolutionSource: 'unresolved',
275
+ reason: 'No supported backend could be resolved.',
276
+ };
277
+ }
278
+ function resolveImageAnalysisStatus(context, rawConfig = unified_config_types_1.DEFAULT_IMAGE_ANALYSIS_CONFIG) {
279
+ const config = canonicalizeImageAnalysisConfig(rawConfig);
280
+ const nativeSupport = resolveNativeImageSupport(context, config);
281
+ const resolution = resolveBackend(context, config, nativeSupport);
282
+ const model = resolution.backendId
283
+ ? (config.provider_models[resolution.backendId] ?? null)
284
+ : null;
285
+ const shouldPersistHook = config.enabled &&
286
+ context.profileType !== 'default' &&
287
+ context.profileType !== 'account' &&
288
+ Boolean(resolution.backendId && model);
289
+ let status = 'active';
290
+ let reason = resolution.reason;
291
+ if (!config.enabled) {
292
+ status = 'disabled';
293
+ reason ?? (reason = 'This profile falls back to native Read because image analysis is turned off in CCS config.');
294
+ }
295
+ else if (!resolution.backendId) {
296
+ status = 'skipped';
297
+ reason ?? (reason = 'No supported backend could be resolved.');
298
+ }
299
+ else if (!model) {
300
+ status = 'skipped';
301
+ reason = 'Resolved backend has no image-analysis model configured.';
302
+ }
303
+ else if (shouldPersistHook &&
304
+ (context.hookInstalled === false || context.sharedHookInstalled === false)) {
305
+ status = 'hook-missing';
306
+ reason =
307
+ context.sharedHookInstalled === false
308
+ ? 'Shared image-analysis hook is not installed.'
309
+ : 'Profile hook is missing from the persisted settings file.';
310
+ }
311
+ else if (resolution.resolutionSource === 'cliproxy-bridge' &&
312
+ context.cliproxyBridge &&
313
+ (!context.cliproxyBridge.usesCurrentTarget || !context.cliproxyBridge.usesCurrentAuthToken)) {
314
+ status = 'attention';
315
+ if (!context.cliproxyBridge.usesCurrentTarget && !context.cliproxyBridge.usesCurrentAuthToken) {
316
+ reason =
317
+ 'Runtime uses the current CLIProxy route and auth token instead of the saved values in this profile.';
318
+ }
319
+ else if (!context.cliproxyBridge.usesCurrentTarget) {
320
+ reason =
321
+ 'Runtime uses the current CLIProxy route instead of the saved route in this profile.';
322
+ }
323
+ else {
324
+ reason =
325
+ 'Runtime uses the current CLIProxy auth token instead of the saved token in this profile.';
326
+ }
327
+ }
328
+ else if (resolution.resolutionSource === 'profile-backend') {
329
+ status = 'mapped';
330
+ }
331
+ return {
332
+ enabled: config.enabled,
333
+ supported: Boolean(config.enabled && resolution.backendId && model),
334
+ status,
335
+ backendId: resolution.backendId,
336
+ backendDisplayName: resolution.backendDisplayName,
337
+ model,
338
+ resolutionSource: resolution.resolutionSource,
339
+ reason,
340
+ shouldPersistHook,
341
+ persistencePath: shouldPersistHook ? `${context.profileName}.settings.json` : null,
342
+ runtimePath: getRuntimePath(resolution.backendId),
343
+ usesCurrentTarget: context.cliproxyBridge?.usesCurrentTarget ?? null,
344
+ usesCurrentAuthToken: context.cliproxyBridge?.usesCurrentAuthToken ?? null,
345
+ hookInstalled: context.hookInstalled ?? null,
346
+ sharedHookInstalled: context.sharedHookInstalled ?? null,
347
+ authReadiness: resolution.backendId && model && (0, provider_capabilities_1.isCLIProxyProvider)(resolution.backendId)
348
+ ? 'unknown'
349
+ : 'not-needed',
350
+ authProvider: resolution.backendId && (0, provider_capabilities_1.isCLIProxyProvider)(resolution.backendId)
351
+ ? resolution.backendId
352
+ : null,
353
+ authDisplayName: resolution.backendId && (0, provider_capabilities_1.isCLIProxyProvider)(resolution.backendId)
354
+ ? (0, provider_capabilities_1.getProviderDisplayName)(resolution.backendId)
355
+ : null,
356
+ authReason: resolution.backendId && model && (0, provider_capabilities_1.isCLIProxyProvider)(resolution.backendId)
357
+ ? 'Auth readiness has not been verified yet.'
358
+ : null,
359
+ proxyReadiness: resolution.backendId && model ? 'unknown' : 'not-needed',
360
+ proxyReason: resolution.backendId && model
361
+ ? 'CLIProxy runtime readiness has not been verified yet.'
362
+ : null,
363
+ effectiveRuntimeMode: config.enabled && resolution.backendId && model && status !== 'hook-missing'
364
+ ? 'cliproxy-image-analysis'
365
+ : 'native-read',
366
+ effectiveRuntimeReason: status === 'hook-missing' || !config.enabled || !resolution.backendId || !model
367
+ ? reason
368
+ : null,
369
+ profileModel: nativeSupport.profileModel,
370
+ nativeReadPreference: nativeSupport.nativeReadPreference,
371
+ nativeImageCapable: nativeSupport.nativeImageCapable,
372
+ nativeImageReason: nativeSupport.nativeImageReason,
373
+ };
374
+ }
375
+ exports.resolveImageAnalysisStatus = resolveImageAnalysisStatus;
376
+ //# sourceMappingURL=image-analysis-backend-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-analysis-backend-resolver.js","sourceRoot":"","sources":["../../../src/utils/hooks/image-analysis-backend-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type AuthStatus } from '../../cliproxy/auth-handler';
2
+ import { type RemoteAuthStatus } from '../../cliproxy/remote-auth-fetcher';
3
+ import { type ProxyTarget } from '../../cliproxy/proxy-target-resolver';
4
+ import type { CLIProxyProvider } from '../../cliproxy/types';
5
+ import { type ImageAnalysisConfig } from '../../config/unified-config-types';
6
+ import { type ImageAnalysisResolutionContext, type ImageAnalysisStatus } from './image-analysis-backend-resolver';
7
+ interface ImageAnalysisRuntimeStatusDeps {
8
+ fetchRemoteAuthStatus: (target: ProxyTarget) => Promise<RemoteAuthStatus[]>;
9
+ getAuthStatus: (provider: CLIProxyProvider) => AuthStatus;
10
+ getProxyTarget: () => ProxyTarget;
11
+ initializeAccounts: () => void;
12
+ isCliproxyRunning: () => Promise<boolean>;
13
+ }
14
+ export declare function hydrateImageAnalysisRuntimeStatus(baseStatus: ImageAnalysisStatus, deps?: Partial<ImageAnalysisRuntimeStatusDeps>): Promise<ImageAnalysisStatus>;
15
+ export declare function resolveImageAnalysisRuntimeStatus(context: ImageAnalysisResolutionContext, config?: ImageAnalysisConfig, deps?: Partial<ImageAnalysisRuntimeStatusDeps>): Promise<ImageAnalysisStatus>;
16
+ export {};
17
+ //# sourceMappingURL=image-analysis-runtime-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-analysis-runtime-status.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analysis-runtime-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAClG,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,UAAU,8BAA8B;IACtC,qBAAqB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5E,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,UAAU,CAAC;IAC1D,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AA8HD,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,mBAAmB,EAC/B,IAAI,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACjD,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,8BAA8B,EACvC,MAAM,GAAE,mBAAmD,EAC3D,IAAI,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACjD,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveImageAnalysisRuntimeStatus = exports.hydrateImageAnalysisRuntimeStatus = void 0;
4
+ const auth_handler_1 = require("../../cliproxy/auth-handler");
5
+ const remote_auth_fetcher_1 = require("../../cliproxy/remote-auth-fetcher");
6
+ const proxy_target_resolver_1 = require("../../cliproxy/proxy-target-resolver");
7
+ const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
8
+ const stats_fetcher_1 = require("../../cliproxy/stats-fetcher");
9
+ const unified_config_types_1 = require("../../config/unified-config-types");
10
+ const image_analysis_backend_resolver_1 = require("./image-analysis-backend-resolver");
11
+ const defaultDeps = {
12
+ fetchRemoteAuthStatus: remote_auth_fetcher_1.fetchRemoteAuthStatus,
13
+ getAuthStatus: auth_handler_1.getAuthStatus,
14
+ getProxyTarget: proxy_target_resolver_1.getProxyTarget,
15
+ initializeAccounts: auth_handler_1.initializeAccounts,
16
+ isCliproxyRunning: () => (0, stats_fetcher_1.isCliproxyRunning)(),
17
+ };
18
+ async function resolveAuthReadiness(status, deps) {
19
+ if (!status.backendId || !status.model || !(0, provider_capabilities_1.isCLIProxyProvider)(status.backendId)) {
20
+ return {
21
+ authReadiness: 'not-needed',
22
+ authProvider: null,
23
+ authDisplayName: null,
24
+ authReason: null,
25
+ };
26
+ }
27
+ const authProvider = status.backendId;
28
+ const authDisplayName = (0, provider_capabilities_1.getProviderDisplayName)(authProvider);
29
+ try {
30
+ let authenticated = false;
31
+ const target = deps.getProxyTarget();
32
+ if (target.isRemote) {
33
+ const remoteStatuses = await deps.fetchRemoteAuthStatus(target);
34
+ authenticated = remoteStatuses.some((entry) => entry.provider === authProvider && entry.authenticated);
35
+ }
36
+ else {
37
+ deps.initializeAccounts();
38
+ authenticated = deps.getAuthStatus(authProvider).authenticated;
39
+ }
40
+ return {
41
+ authReadiness: authenticated ? 'ready' : 'missing',
42
+ authProvider,
43
+ authDisplayName,
44
+ authReason: authenticated
45
+ ? null
46
+ : `${authDisplayName} auth is missing. Run "ccs ${authProvider} --auth" to enable image analysis.`,
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ authReadiness: 'unknown',
52
+ authProvider,
53
+ authDisplayName,
54
+ authReason: `CCS could not verify ${authDisplayName} auth readiness: ${error.message}`,
55
+ };
56
+ }
57
+ }
58
+ async function resolveProxyReadiness(status, deps) {
59
+ if (!status.backendId || !status.model) {
60
+ return {
61
+ proxyReadiness: 'not-needed',
62
+ proxyReason: null,
63
+ };
64
+ }
65
+ const target = deps.getProxyTarget();
66
+ const reachable = await deps.isCliproxyRunning();
67
+ if (target.isRemote) {
68
+ return {
69
+ proxyReadiness: reachable ? 'remote' : 'unavailable',
70
+ proxyReason: reachable
71
+ ? `Remote CLIProxy target ${target.host}:${target.port} is reachable.`
72
+ : `Remote CLIProxy target ${target.host}:${target.port} is unreachable.`,
73
+ };
74
+ }
75
+ return {
76
+ proxyReadiness: reachable ? 'ready' : 'stopped',
77
+ proxyReason: reachable
78
+ ? 'Local CLIProxy service is reachable.'
79
+ : 'Local CLIProxy service is idle. CCS will start it automatically when image analysis is needed.',
80
+ };
81
+ }
82
+ function resolveEffectiveRuntime(status) {
83
+ if (!status.enabled || !status.backendId || !status.model) {
84
+ return {
85
+ effectiveRuntimeMode: 'native-read',
86
+ effectiveRuntimeReason: status.reason,
87
+ };
88
+ }
89
+ if (status.status === 'hook-missing') {
90
+ return {
91
+ effectiveRuntimeMode: 'native-read',
92
+ effectiveRuntimeReason: status.reason,
93
+ };
94
+ }
95
+ if (status.authReadiness === 'missing' || status.authReadiness === 'unknown') {
96
+ return {
97
+ effectiveRuntimeMode: 'native-read',
98
+ effectiveRuntimeReason: status.authReason,
99
+ };
100
+ }
101
+ if (status.proxyReadiness === 'unavailable' || status.proxyReadiness === 'unknown') {
102
+ return {
103
+ effectiveRuntimeMode: 'native-read',
104
+ effectiveRuntimeReason: status.proxyReason,
105
+ };
106
+ }
107
+ return {
108
+ effectiveRuntimeMode: 'cliproxy-image-analysis',
109
+ effectiveRuntimeReason: status.status === 'attention' ? status.reason : null,
110
+ };
111
+ }
112
+ async function hydrateImageAnalysisRuntimeStatus(baseStatus, deps = {}) {
113
+ const resolvedDeps = { ...defaultDeps, ...deps };
114
+ const authStatus = await resolveAuthReadiness(baseStatus, resolvedDeps);
115
+ const proxyStatus = await resolveProxyReadiness(baseStatus, resolvedDeps);
116
+ const mergedStatus = {
117
+ ...baseStatus,
118
+ ...authStatus,
119
+ ...proxyStatus,
120
+ };
121
+ return {
122
+ ...mergedStatus,
123
+ ...resolveEffectiveRuntime(mergedStatus),
124
+ };
125
+ }
126
+ exports.hydrateImageAnalysisRuntimeStatus = hydrateImageAnalysisRuntimeStatus;
127
+ async function resolveImageAnalysisRuntimeStatus(context, config = unified_config_types_1.DEFAULT_IMAGE_ANALYSIS_CONFIG, deps = {}) {
128
+ const baseStatus = (0, image_analysis_backend_resolver_1.resolveImageAnalysisStatus)(context, config);
129
+ return hydrateImageAnalysisRuntimeStatus(baseStatus, deps);
130
+ }
131
+ exports.resolveImageAnalysisRuntimeStatus = resolveImageAnalysisRuntimeStatus;
132
+ //# sourceMappingURL=image-analysis-runtime-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-analysis-runtime-status.js","sourceRoot":"","sources":["../../../src/utils/hooks/image-analysis-runtime-status.ts"],"names":[],"mappings":"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"}
@@ -4,19 +4,20 @@
4
4
  * Injects image analyzer hooks into per-profile settings files.
5
5
  * This replaces the global ~/.claude/settings.json approach.
6
6
  *
7
- * Injects for profiles configured in image_analysis.provider_models.
7
+ * Injects for profiles that resolve to a supported image-analysis backend.
8
8
  *
9
9
  * @module utils/hooks/image-analyzer-profile-injector
10
10
  */
11
+ import { type ImageAnalysisResolutionContext } from './image-analysis-backend-resolver';
12
+ export declare function getImageAnalysisProfileSettingsPath(profileName: string, settingsPath?: string | null): string;
13
+ export declare function hasImageAnalysisProfileHook(profileName: string, settingsPath?: string | null): boolean;
11
14
  /**
12
15
  * Ensure image analyzer hook is configured in profile's settings file
13
16
  *
14
- * Only injects for CLIProxy profiles with vision support (agy, gemini).
15
- *
16
- * @param profileName - Name of the profile (e.g., 'agy', 'gemini')
17
+ * @param input - Profile name or pre-resolved runtime context
17
18
  * @returns true if hook is configured (existing or newly added)
18
19
  */
19
- export declare function ensureProfileHooks(profileName: string): boolean;
20
+ export declare function ensureProfileHooks(input: string | ImageAnalysisResolutionContext): boolean;
20
21
  /**
21
22
  * Remove migration marker (called during uninstall)
22
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"image-analyzer-profile-hook-injector.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-profile-hook-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqEH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CA2F/D;AA+DD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}
1
+ {"version":3,"file":"image-analyzer-profile-hook-injector.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-profile-hook-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,mCAAmC,CAAC;AAkC3C,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAMR;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAiBT;AA2BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,8BAA8B,GAAG,OAAO,CAsF1F;AA+DD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}