@kaitranntt/ccs 7.65.3 → 7.66.0-dev.1

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 (241) hide show
  1. package/README.md +88 -750
  2. package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -1
  3. package/dist/api/services/profile-lifecycle-service.js +4 -0
  4. package/dist/api/services/profile-lifecycle-service.js.map +1 -1
  5. package/dist/api/services/profile-writer.d.ts.map +1 -1
  6. package/dist/api/services/profile-writer.js +3 -0
  7. package/dist/api/services/profile-writer.js.map +1 -1
  8. package/dist/auth/auth-commands.d.ts +1 -0
  9. package/dist/auth/auth-commands.d.ts.map +1 -1
  10. package/dist/auth/auth-commands.js +11 -0
  11. package/dist/auth/auth-commands.js.map +1 -1
  12. package/dist/auth/commands/backup-command.d.ts +3 -0
  13. package/dist/auth/commands/backup-command.d.ts.map +1 -0
  14. package/dist/auth/commands/backup-command.js +126 -0
  15. package/dist/auth/commands/backup-command.js.map +1 -0
  16. package/dist/auth/commands/index.d.ts +1 -0
  17. package/dist/auth/commands/index.d.ts.map +1 -1
  18. package/dist/auth/commands/index.js +3 -1
  19. package/dist/auth/commands/index.js.map +1 -1
  20. package/dist/auth/profile-continuity-inheritance.d.ts +1 -0
  21. package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
  22. package/dist/auth/profile-continuity-inheritance.js +10 -6
  23. package/dist/auth/profile-continuity-inheritance.js.map +1 -1
  24. package/dist/auth/profile-detector.d.ts +9 -1
  25. package/dist/auth/profile-detector.d.ts.map +1 -1
  26. package/dist/auth/profile-detector.js +35 -0
  27. package/dist/auth/profile-detector.js.map +1 -1
  28. package/dist/auth/resume-lane-diagnostics.d.ts +21 -0
  29. package/dist/auth/resume-lane-diagnostics.d.ts.map +1 -0
  30. package/dist/auth/resume-lane-diagnostics.js +146 -0
  31. package/dist/auth/resume-lane-diagnostics.js.map +1 -0
  32. package/dist/auth/resume-lane-warning.d.ts +9 -0
  33. package/dist/auth/resume-lane-warning.d.ts.map +1 -0
  34. package/dist/auth/resume-lane-warning.js +60 -0
  35. package/dist/auth/resume-lane-warning.js.map +1 -0
  36. package/dist/ccs.js +82 -7
  37. package/dist/ccs.js.map +1 -1
  38. package/dist/cliproxy/auth/auth-types.d.ts +29 -6
  39. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  40. package/dist/cliproxy/auth/auth-types.js +58 -10
  41. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  42. package/dist/cliproxy/auth/oauth-handler.d.ts +9 -1
  43. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  44. package/dist/cliproxy/auth/oauth-handler.js +196 -45
  45. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  46. package/dist/cliproxy/auth/oauth-process.d.ts +13 -1
  47. package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
  48. package/dist/cliproxy/auth/oauth-process.js +262 -17
  49. package/dist/cliproxy/auth/oauth-process.js.map +1 -1
  50. package/dist/cliproxy/executor/env-resolver.d.ts +3 -0
  51. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  52. package/dist/cliproxy/executor/env-resolver.js +19 -1
  53. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  54. package/dist/cliproxy/executor/index.d.ts +5 -0
  55. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  56. package/dist/cliproxy/executor/index.js +138 -12
  57. package/dist/cliproxy/executor/index.js.map +1 -1
  58. package/dist/cliproxy/gemini-cli-quota-normalizer.d.ts +10 -0
  59. package/dist/cliproxy/gemini-cli-quota-normalizer.d.ts.map +1 -0
  60. package/dist/cliproxy/gemini-cli-quota-normalizer.js +122 -0
  61. package/dist/cliproxy/gemini-cli-quota-normalizer.js.map +1 -0
  62. package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts.map +1 -1
  63. package/dist/cliproxy/quota-fetcher-gemini-cli.js +133 -92
  64. package/dist/cliproxy/quota-fetcher-gemini-cli.js.map +1 -1
  65. package/dist/cliproxy/quota-types.d.ts +8 -0
  66. package/dist/cliproxy/quota-types.d.ts.map +1 -1
  67. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  68. package/dist/cliproxy/services/variant-settings.js +11 -0
  69. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  70. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  71. package/dist/commands/cliproxy/quota-subcommand.js +10 -1
  72. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  73. package/dist/commands/command-catalog.d.ts +39 -0
  74. package/dist/commands/command-catalog.d.ts.map +1 -0
  75. package/dist/commands/command-catalog.js +299 -0
  76. package/dist/commands/command-catalog.js.map +1 -0
  77. package/dist/commands/completion-backend.d.ts +14 -0
  78. package/dist/commands/completion-backend.d.ts.map +1 -0
  79. package/dist/commands/completion-backend.js +216 -0
  80. package/dist/commands/completion-backend.js.map +1 -0
  81. package/dist/commands/cursor-command-display.d.ts.map +1 -1
  82. package/dist/commands/cursor-command-display.js +25 -5
  83. package/dist/commands/cursor-command-display.js.map +1 -1
  84. package/dist/commands/cursor-command.d.ts +1 -3
  85. package/dist/commands/cursor-command.d.ts.map +1 -1
  86. package/dist/commands/cursor-command.js +3 -15
  87. package/dist/commands/cursor-command.js.map +1 -1
  88. package/dist/commands/help-command.d.ts +4 -3
  89. package/dist/commands/help-command.d.ts.map +1 -1
  90. package/dist/commands/help-command.js +209 -503
  91. package/dist/commands/help-command.js.map +1 -1
  92. package/dist/commands/install-command.d.ts.map +1 -1
  93. package/dist/commands/install-command.js +16 -3
  94. package/dist/commands/install-command.js.map +1 -1
  95. package/dist/commands/root-command-router.d.ts +2 -0
  96. package/dist/commands/root-command-router.d.ts.map +1 -1
  97. package/dist/commands/root-command-router.js +13 -13
  98. package/dist/commands/root-command-router.js.map +1 -1
  99. package/dist/commands/shell-completion-command.d.ts +1 -0
  100. package/dist/commands/shell-completion-command.d.ts.map +1 -1
  101. package/dist/commands/shell-completion-command.js +27 -11
  102. package/dist/commands/shell-completion-command.js.map +1 -1
  103. package/dist/copilot/copilot-executor.d.ts +2 -0
  104. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  105. package/dist/copilot/copilot-executor.js +36 -4
  106. package/dist/copilot/copilot-executor.js.map +1 -1
  107. package/dist/cursor/constants.d.ts +3 -0
  108. package/dist/cursor/constants.d.ts.map +1 -0
  109. package/dist/cursor/constants.js +20 -0
  110. package/dist/cursor/constants.js.map +1 -0
  111. package/dist/cursor/cursor-models.d.ts.map +1 -1
  112. package/dist/cursor/cursor-models.js +2 -0
  113. package/dist/cursor/cursor-models.js.map +1 -1
  114. package/dist/cursor/cursor-profile-executor.d.ts +10 -0
  115. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -0
  116. package/dist/cursor/cursor-profile-executor.js +158 -0
  117. package/dist/cursor/cursor-profile-executor.js.map +1 -0
  118. package/dist/cursor/cursor-translator.d.ts +22 -11
  119. package/dist/cursor/cursor-translator.d.ts.map +1 -1
  120. package/dist/cursor/cursor-translator.js +254 -75
  121. package/dist/cursor/cursor-translator.js.map +1 -1
  122. package/dist/cursor/index.d.ts +1 -0
  123. package/dist/cursor/index.d.ts.map +1 -1
  124. package/dist/cursor/index.js +4 -1
  125. package/dist/cursor/index.js.map +1 -1
  126. package/dist/delegation/headless-executor.d.ts.map +1 -1
  127. package/dist/delegation/headless-executor.js +79 -2
  128. package/dist/delegation/headless-executor.js.map +1 -1
  129. package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
  130. package/dist/management/checks/image-analysis-check.js +4 -5
  131. package/dist/management/checks/image-analysis-check.js.map +1 -1
  132. package/dist/management/instance-manager.js +1 -1
  133. package/dist/management/instance-manager.js.map +1 -1
  134. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  135. package/dist/shared/claude-extension-setup.js +36 -16
  136. package/dist/shared/claude-extension-setup.js.map +1 -1
  137. package/dist/targets/target-runtime-compatibility.d.ts.map +1 -1
  138. package/dist/targets/target-runtime-compatibility.js +6 -0
  139. package/dist/targets/target-runtime-compatibility.js.map +1 -1
  140. package/dist/types/profile.d.ts +1 -1
  141. package/dist/types/profile.d.ts.map +1 -1
  142. package/dist/ui/assets/accounts-jW1C1XCz.js +1 -0
  143. package/dist/ui/assets/{alert-dialog-D0EFRcfB.js → alert-dialog-9ra2FBXt.js} +1 -1
  144. package/dist/ui/assets/{api-DhM3BYXr.js → api-B1wB-xCb.js} +1 -1
  145. package/dist/ui/assets/{auth-section-DVp8FQGm.js → auth-section-L6FxRKHW.js} +1 -1
  146. package/dist/ui/assets/{backups-section-CRo0NZkA.js → backups-section-yDahh7vx.js} +1 -1
  147. package/dist/ui/assets/{channels-uZ_9CBqO.js → channels-Detih8L-.js} +1 -1
  148. package/dist/ui/assets/{checkbox-32DNqW_Q.js → checkbox-BBnsYp-P.js} +1 -1
  149. package/dist/ui/assets/{claude-extension-BfXlz5gV.js → claude-extension-C_krIRVF.js} +1 -1
  150. package/dist/ui/assets/cliproxy-H2_ozRn-.js +3 -0
  151. package/dist/ui/assets/{cliproxy-ai-providers-5SHLMHiy.js → cliproxy-ai-providers-CtVQymuP.js} +1 -1
  152. package/dist/ui/assets/cliproxy-control-panel-zu9VU_Qf.js +1 -0
  153. package/dist/ui/assets/{codex-CRUSpjsu.js → codex-Cxzll9c5.js} +1 -1
  154. package/dist/ui/assets/{confirm-dialog-DVf5ZmCZ.js → confirm-dialog-B2ThVV1S.js} +1 -1
  155. package/dist/ui/assets/{copilot-BZrihl_Z.js → copilot-DXUM1KLv.js} +1 -1
  156. package/dist/ui/assets/{cursor-BP4nbEk_.js → cursor-CrNFzSu5.js} +1 -1
  157. package/dist/ui/assets/{droid-BG92rdM2.js → droid-RJdLxGub.js} +2 -2
  158. package/dist/ui/assets/{globalenv-section-Cf6dKgSf.js → globalenv-section-Bv9iXrlD.js} +1 -1
  159. package/dist/ui/assets/{health-BTy1UZs3.js → health-CgOSX-UJ.js} +1 -1
  160. package/dist/ui/assets/icons-B9oTjo-t.js +1 -0
  161. package/dist/ui/assets/{index-BVeN0dIB.js → index-33V44ka2.js} +1 -1
  162. package/dist/ui/assets/{index-DuRYaONg.js → index-C6BzhDNJ.js} +1 -1
  163. package/dist/ui/assets/{index-wg7UtkFv.js → index-CK2D-leN.js} +1 -1
  164. package/dist/ui/assets/index-CknHGRYp.css +1 -0
  165. package/dist/ui/assets/{index-N2ZSJurX.js → index-D-9haA2-.js} +1 -1
  166. package/dist/ui/assets/index-DEb_1YYh.js +69 -0
  167. package/dist/ui/assets/{index-DHrTq-0n.js → index-K0k4WFge.js} +1 -1
  168. package/dist/ui/assets/{masked-input-DX9bedLy.js → masked-input-DUpF2a8k.js} +1 -1
  169. package/dist/ui/assets/{proxy-status-widget-DVDMuZK5.js → proxy-status-widget-Dswa7OEL.js} +1 -1
  170. package/dist/ui/assets/{radix-ui-C98W0NRG.js → radix-ui-Zb8sVEtn.js} +1 -1
  171. package/dist/ui/assets/{raw-json-settings-editor-panel-Dkt5E6Z_.js → raw-json-settings-editor-panel-CrjDrQgJ.js} +1 -1
  172. package/dist/ui/assets/{searchable-select-BP3Q1-Yn.js → searchable-select-Cl3WCoVu.js} +1 -1
  173. package/dist/ui/assets/{separator-BLGGUlh9.js → separator-B_mZud18.js} +1 -1
  174. package/dist/ui/assets/{shared-G0XRyLig.js → shared-CEbDLM0x.js} +1 -1
  175. package/dist/ui/assets/{table-B4lRrWC-.js → table-B7Mqppr5.js} +1 -1
  176. package/dist/ui/assets/{tanstack-CfKik0yL.js → tanstack-DWm6aJ-G.js} +1 -1
  177. package/dist/ui/assets/{updates--A2Sdo7N.js → updates-CBtsQjS3.js} +1 -1
  178. package/dist/ui/index.html +5 -5
  179. package/dist/utils/config-manager.d.ts +5 -0
  180. package/dist/utils/config-manager.d.ts.map +1 -1
  181. package/dist/utils/config-manager.js +10 -1
  182. package/dist/utils/config-manager.js.map +1 -1
  183. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +26 -0
  184. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
  185. package/dist/utils/hooks/get-image-analysis-hook-env.js +79 -1
  186. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
  187. package/dist/utils/hooks/image-analysis-backend-resolver.d.ts.map +1 -1
  188. package/dist/utils/hooks/image-analysis-backend-resolver.js +13 -5
  189. package/dist/utils/hooks/image-analysis-backend-resolver.js.map +1 -1
  190. package/dist/utils/hooks/image-analysis-runtime-status.d.ts +2 -0
  191. package/dist/utils/hooks/image-analysis-runtime-status.d.ts.map +1 -1
  192. package/dist/utils/hooks/image-analysis-runtime-status.js +15 -11
  193. package/dist/utils/hooks/image-analysis-runtime-status.js.map +1 -1
  194. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -1
  195. package/dist/utils/hooks/image-analyzer-hook-installer.js +60 -27
  196. package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -1
  197. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
  198. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +3 -0
  199. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
  200. package/dist/utils/hooks/index.d.ts +2 -1
  201. package/dist/utils/hooks/index.d.ts.map +1 -1
  202. package/dist/utils/hooks/index.js +14 -7
  203. package/dist/utils/hooks/index.js.map +1 -1
  204. package/dist/utils/image-analysis/claude-tool-args.d.ts +6 -0
  205. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -0
  206. package/dist/utils/image-analysis/claude-tool-args.js +65 -0
  207. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -0
  208. package/dist/utils/image-analysis/index.d.ts +4 -0
  209. package/dist/utils/image-analysis/index.d.ts.map +1 -1
  210. package/dist/utils/image-analysis/index.js +20 -1
  211. package/dist/utils/image-analysis/index.js.map +1 -1
  212. package/dist/utils/image-analysis/mcp-installer.d.ts +18 -0
  213. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -0
  214. package/dist/utils/image-analysis/mcp-installer.js +447 -0
  215. package/dist/utils/image-analysis/mcp-installer.js.map +1 -0
  216. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  217. package/dist/web-server/routes/account-routes.js +14 -2
  218. package/dist/web-server/routes/account-routes.js.map +1 -1
  219. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +8 -0
  220. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  221. package/dist/web-server/routes/cliproxy-auth-routes.js +141 -11
  222. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  223. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  224. package/dist/web-server/routes/image-analysis-routes.js +30 -5
  225. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  226. package/lib/hooks/image-analysis-runtime.cjs +469 -0
  227. package/lib/hooks/image-analyzer-transformer.cjs +27 -418
  228. package/lib/hooks/websearch-transformer.cjs +37 -2
  229. package/lib/mcp/ccs-image-analysis-server.cjs +440 -0
  230. package/package.json +1 -1
  231. package/scripts/completion/README.md +55 -131
  232. package/scripts/completion/ccs.bash +22 -190
  233. package/scripts/completion/ccs.fish +19 -245
  234. package/scripts/completion/ccs.ps1 +37 -427
  235. package/scripts/completion/ccs.zsh +27 -305
  236. package/dist/ui/assets/accounts-BHEYnq6b.js +0 -1
  237. package/dist/ui/assets/cliproxy-DjNY9H-U.js +0 -3
  238. package/dist/ui/assets/cliproxy-control-panel-Zax_m1AC.js +0 -1
  239. package/dist/ui/assets/icons-CeH5899d.js +0 -1
  240. package/dist/ui/assets/index-B6SrL1O-.css +0 -1
  241. package/dist/ui/assets/index-Corv1lSo.js +0 -69
@@ -7,9 +7,12 @@
7
7
  * @module utils/hooks
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ensureImageAnalyzerProfileHooks = exports.uninstallImageAnalyzerHook = exports.installImageAnalyzerHook = exports.hasImageAnalyzerHook = exports.getImageAnalyzerHookConfig = exports.getImageAnalyzerHookPath = exports.resolveImageAnalysisRuntimeStatus = exports.hydrateImageAnalysisRuntimeStatus = exports.normalizeImageAnalysisBackendId = exports.resolveImageAnalysisStatus = exports.canonicalizeImageAnalysisConfig = exports.getImageAnalysisHookEnv = void 0;
10
+ exports.prepareImageAnalysisFallbackHook = exports.ensureImageAnalyzerProfileHooks = exports.uninstallImageAnalyzerHook = exports.installImageAnalyzerHook = exports.hasImageAnalyzerHook = exports.getImageAnalyzerHookConfig = exports.getImageAnalyzerHookPath = exports.resolveImageAnalysisRuntimeStatus = exports.hydrateImageAnalysisRuntimeStatus = exports.normalizeImageAnalysisBackendId = exports.resolveImageAnalysisStatus = exports.canonicalizeImageAnalysisConfig = exports.resolveImageAnalysisRuntimeConnection = exports.applyImageAnalysisRuntimeOverrides = exports.getImageAnalysisHookEnv = void 0;
11
+ const image_analyzer_hook_installer_1 = require("./image-analyzer-hook-installer");
11
12
  var get_image_analysis_hook_env_1 = require("./get-image-analysis-hook-env");
12
13
  Object.defineProperty(exports, "getImageAnalysisHookEnv", { enumerable: true, get: function () { return get_image_analysis_hook_env_1.getImageAnalysisHookEnv; } });
14
+ Object.defineProperty(exports, "applyImageAnalysisRuntimeOverrides", { enumerable: true, get: function () { return get_image_analysis_hook_env_1.applyImageAnalysisRuntimeOverrides; } });
15
+ Object.defineProperty(exports, "resolveImageAnalysisRuntimeConnection", { enumerable: true, get: function () { return get_image_analysis_hook_env_1.resolveImageAnalysisRuntimeConnection; } });
13
16
  var image_analysis_backend_resolver_1 = require("./image-analysis-backend-resolver");
14
17
  Object.defineProperty(exports, "canonicalizeImageAnalysisConfig", { enumerable: true, get: function () { return image_analysis_backend_resolver_1.canonicalizeImageAnalysisConfig; } });
15
18
  Object.defineProperty(exports, "resolveImageAnalysisStatus", { enumerable: true, get: function () { return image_analysis_backend_resolver_1.resolveImageAnalysisStatus; } });
@@ -17,12 +20,16 @@ Object.defineProperty(exports, "normalizeImageAnalysisBackendId", { enumerable:
17
20
  var image_analysis_runtime_status_1 = require("./image-analysis-runtime-status");
18
21
  Object.defineProperty(exports, "hydrateImageAnalysisRuntimeStatus", { enumerable: true, get: function () { return image_analysis_runtime_status_1.hydrateImageAnalysisRuntimeStatus; } });
19
22
  Object.defineProperty(exports, "resolveImageAnalysisRuntimeStatus", { enumerable: true, get: function () { return image_analysis_runtime_status_1.resolveImageAnalysisRuntimeStatus; } });
20
- var image_analyzer_hook_installer_1 = require("./image-analyzer-hook-installer");
21
- Object.defineProperty(exports, "getImageAnalyzerHookPath", { enumerable: true, get: function () { return image_analyzer_hook_installer_1.getImageAnalyzerHookPath; } });
22
- Object.defineProperty(exports, "getImageAnalyzerHookConfig", { enumerable: true, get: function () { return image_analyzer_hook_installer_1.getImageAnalyzerHookConfig; } });
23
- Object.defineProperty(exports, "hasImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_1.hasImageAnalyzerHook; } });
24
- Object.defineProperty(exports, "installImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_1.installImageAnalyzerHook; } });
25
- Object.defineProperty(exports, "uninstallImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_1.uninstallImageAnalyzerHook; } });
23
+ var image_analyzer_hook_installer_2 = require("./image-analyzer-hook-installer");
24
+ Object.defineProperty(exports, "getImageAnalyzerHookPath", { enumerable: true, get: function () { return image_analyzer_hook_installer_2.getImageAnalyzerHookPath; } });
25
+ Object.defineProperty(exports, "getImageAnalyzerHookConfig", { enumerable: true, get: function () { return image_analyzer_hook_installer_2.getImageAnalyzerHookConfig; } });
26
+ Object.defineProperty(exports, "hasImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_2.hasImageAnalyzerHook; } });
27
+ Object.defineProperty(exports, "installImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_2.installImageAnalyzerHook; } });
28
+ Object.defineProperty(exports, "uninstallImageAnalyzerHook", { enumerable: true, get: function () { return image_analyzer_hook_installer_2.uninstallImageAnalyzerHook; } });
26
29
  var image_analyzer_profile_hook_injector_1 = require("./image-analyzer-profile-hook-injector");
27
30
  Object.defineProperty(exports, "ensureImageAnalyzerProfileHooks", { enumerable: true, get: function () { return image_analyzer_profile_hook_injector_1.ensureProfileHooks; } });
31
+ function prepareImageAnalysisFallbackHook() {
32
+ return (0, image_analyzer_hook_installer_1.hasImageAnalyzerHook)() || (0, image_analyzer_hook_installer_1.installImageAnalyzerHook)();
33
+ }
34
+ exports.prepareImageAnalysisFallbackHook = prepareImageAnalysisFallbackHook;
28
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/hooks/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6EAAwE;AAA/D,sIAAA,uBAAuB,OAAA;AAChC,qFAM2C;AALzC,kJAAA,+BAA+B,OAAA;AAC/B,6IAAA,0BAA0B,OAAA;AAC1B,kJAAA,+BAA+B,OAAA;AAIjC,iFAGyC;AAFvC,kJAAA,iCAAiC,OAAA;AACjC,kJAAA,iCAAiC,OAAA;AAEnC,iFAMyC;AALvC,yIAAA,wBAAwB,OAAA;AACxB,2IAAA,0BAA0B,OAAA;AAC1B,qIAAA,oBAAoB,OAAA;AACpB,yIAAA,wBAAwB,OAAA;AACxB,2IAAA,0BAA0B,OAAA;AAE5B,+FAA+G;AAAtG,uJAAA,kBAAkB,OAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/hooks/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,mFAGyC;AAEzC,6EAOuC;AANrC,sIAAA,uBAAuB,OAAA;AACvB,iJAAA,kCAAkC,OAAA;AAClC,oJAAA,qCAAqC,OAAA;AAKvC,qFAM2C;AALzC,kJAAA,+BAA+B,OAAA;AAC/B,6IAAA,0BAA0B,OAAA;AAC1B,kJAAA,+BAA+B,OAAA;AAIjC,iFAGyC;AAFvC,kJAAA,iCAAiC,OAAA;AACjC,kJAAA,iCAAiC,OAAA;AAEnC,iFAMyC;AALvC,yIAAA,wBAAwB,OAAA;AACxB,2IAAA,0BAA0B,OAAA;AAC1B,qIAAA,oBAAoB,OAAA;AACpB,yIAAA,wBAAwB,OAAA;AACxB,2IAAA,0BAA0B,OAAA;AAE5B,+FAA+G;AAAtG,uJAAA,kBAAkB,OAAmC;AAE9D,SAAgB,gCAAgC;IAC9C,OAAO,IAAA,oDAA6B,GAAE,IAAI,IAAA,wDAA8B,GAAE,CAAC;AAC7E,CAAC;AAFD,4EAEC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Claude launch argument helpers for first-class Image Analysis.
3
+ */
4
+ export declare function appendThirdPartyImageAnalysisToolArgs(args: string[]): string[];
5
+ export declare function getImageAnalysisSteeringPrompt(): string;
6
+ //# sourceMappingURL=claude-tool-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9E;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Claude launch argument helpers for first-class Image Analysis.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getImageAnalysisSteeringPrompt = exports.appendThirdPartyImageAnalysisToolArgs = void 0;
7
+ const APPEND_SYSTEM_PROMPT_FLAG = '--append-system-prompt';
8
+ const IMAGE_ANALYSIS_STEERING_PROMPT = 'For local image or PDF files, prefer the CCS MCP tool ImageAnalysis instead of Read. Use Read for text, code, and other plain files. If the user asks a specific question about the visual, pass that question as the focus field when useful. If ImageAnalysis is unavailable or fails, you may fall back to Read.';
9
+ function splitArgsAtTerminator(args) {
10
+ const terminatorIndex = args.indexOf('--');
11
+ if (terminatorIndex === -1) {
12
+ return { optionArgs: args, trailingArgs: [] };
13
+ }
14
+ return {
15
+ optionArgs: args.slice(0, terminatorIndex),
16
+ trailingArgs: args.slice(terminatorIndex),
17
+ };
18
+ }
19
+ function getImmediateFlagValue(args, index) {
20
+ const value = args[index + 1];
21
+ if (value === undefined || value === '--' || value.startsWith('--')) {
22
+ return null;
23
+ }
24
+ return value;
25
+ }
26
+ function hasExactFlagValue(args, flag, expectedValue) {
27
+ for (let index = 0; index < args.length; index += 1) {
28
+ const arg = args[index];
29
+ if (arg === flag) {
30
+ const value = getImmediateFlagValue(args, index);
31
+ if (value === expectedValue) {
32
+ return true;
33
+ }
34
+ continue;
35
+ }
36
+ if (arg === `${flag}=${expectedValue}`) {
37
+ return true;
38
+ }
39
+ if (arg.startsWith(`${flag}=`) && arg.slice(flag.length + 1) === expectedValue) {
40
+ return true;
41
+ }
42
+ }
43
+ return false;
44
+ }
45
+ function ensureImageAnalysisSteeringPrompt(args) {
46
+ const { optionArgs, trailingArgs } = splitArgsAtTerminator(args);
47
+ if (hasExactFlagValue(optionArgs, APPEND_SYSTEM_PROMPT_FLAG, IMAGE_ANALYSIS_STEERING_PROMPT)) {
48
+ return args;
49
+ }
50
+ return [
51
+ ...optionArgs,
52
+ APPEND_SYSTEM_PROMPT_FLAG,
53
+ IMAGE_ANALYSIS_STEERING_PROMPT,
54
+ ...trailingArgs,
55
+ ];
56
+ }
57
+ function appendThirdPartyImageAnalysisToolArgs(args) {
58
+ return ensureImageAnalysisSteeringPrompt(args);
59
+ }
60
+ exports.appendThirdPartyImageAnalysisToolArgs = appendThirdPartyImageAnalysisToolArgs;
61
+ function getImageAnalysisSteeringPrompt() {
62
+ return IMAGE_ANALYSIS_STEERING_PROMPT;
63
+ }
64
+ exports.getImageAnalysisSteeringPrompt = getImageAnalysisSteeringPrompt;
65
+ //# sourceMappingURL=claude-tool-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,8BAA8B,GAClC,qTAAqT,CAAC;AAExT,SAAS,qBAAqB,CAAC,IAAc;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAc,EAAE,KAAa;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAc,EAAE,IAAY,EAAE,aAAqB;IAC5E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAc;IACvD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjE,IAAI,iBAAiB,CAAC,UAAU,EAAE,yBAAyB,EAAE,8BAA8B,CAAC,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,UAAU;QACb,yBAAyB;QACzB,8BAA8B;QAC9B,GAAG,YAAY;KAChB,CAAC;AACJ,CAAC;AAED,SAAgB,qCAAqC,CAAC,IAAc;IAClE,OAAO,iCAAiC,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAFD,sFAEC;AAED,SAAgB,8BAA8B;IAC5C,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAFD,wEAEC"}
@@ -4,4 +4,8 @@
4
4
  * Exports hook installer functions for prompt management
5
5
  */
6
6
  export { getPromptsDir, installImageAnalysisPrompts } from './hook-installer';
7
+ export { getImageAnalysisMcpServerName, getImageAnalysisMcpServerPath, getImageAnalysisMcpRuntimePath, hasImageAnalysisMcpServerInstalled, hasImageAnalysisMcpConfig, hasImageAnalysisMcpReady, installImageAnalysisMcpServer, ensureImageAnalysisMcpConfig, ensureImageAnalysisMcp, uninstallImageAnalysisMcpServer, removeImageAnalysisMcpConfig, uninstallImageAnalysisMcp, syncImageAnalysisMcpToConfigDir, ensureImageAnalysisMcpOrThrow, } from './mcp-installer';
8
+ export { appendThirdPartyImageAnalysisToolArgs, getImageAnalysisSteeringPrompt, } from './claude-tool-args';
9
+ export declare const IMAGE_ANALYSIS_PROMPT_TEMPLATES: readonly ["default", "screenshot", "document"];
10
+ export type ImageAnalysisPromptTemplate = (typeof IMAGE_ANALYSIS_PROMPT_TEMPLATES)[number];
7
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,8BAA8B,EAC9B,kCAAkC,EAClC,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,+BAA+B,EAC/B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qCAAqC,EACrC,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,+BAA+B,gDAAiD,CAAC;AAC9F,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -5,8 +5,27 @@
5
5
  * Exports hook installer functions for prompt management
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.installImageAnalysisPrompts = exports.getPromptsDir = void 0;
8
+ exports.IMAGE_ANALYSIS_PROMPT_TEMPLATES = exports.getImageAnalysisSteeringPrompt = exports.appendThirdPartyImageAnalysisToolArgs = exports.ensureImageAnalysisMcpOrThrow = exports.syncImageAnalysisMcpToConfigDir = exports.uninstallImageAnalysisMcp = exports.removeImageAnalysisMcpConfig = exports.uninstallImageAnalysisMcpServer = exports.ensureImageAnalysisMcp = exports.ensureImageAnalysisMcpConfig = exports.installImageAnalysisMcpServer = exports.hasImageAnalysisMcpReady = exports.hasImageAnalysisMcpConfig = exports.hasImageAnalysisMcpServerInstalled = exports.getImageAnalysisMcpRuntimePath = exports.getImageAnalysisMcpServerPath = exports.getImageAnalysisMcpServerName = exports.installImageAnalysisPrompts = exports.getPromptsDir = void 0;
9
9
  var hook_installer_1 = require("./hook-installer");
10
10
  Object.defineProperty(exports, "getPromptsDir", { enumerable: true, get: function () { return hook_installer_1.getPromptsDir; } });
11
11
  Object.defineProperty(exports, "installImageAnalysisPrompts", { enumerable: true, get: function () { return hook_installer_1.installImageAnalysisPrompts; } });
12
+ var mcp_installer_1 = require("./mcp-installer");
13
+ Object.defineProperty(exports, "getImageAnalysisMcpServerName", { enumerable: true, get: function () { return mcp_installer_1.getImageAnalysisMcpServerName; } });
14
+ Object.defineProperty(exports, "getImageAnalysisMcpServerPath", { enumerable: true, get: function () { return mcp_installer_1.getImageAnalysisMcpServerPath; } });
15
+ Object.defineProperty(exports, "getImageAnalysisMcpRuntimePath", { enumerable: true, get: function () { return mcp_installer_1.getImageAnalysisMcpRuntimePath; } });
16
+ Object.defineProperty(exports, "hasImageAnalysisMcpServerInstalled", { enumerable: true, get: function () { return mcp_installer_1.hasImageAnalysisMcpServerInstalled; } });
17
+ Object.defineProperty(exports, "hasImageAnalysisMcpConfig", { enumerable: true, get: function () { return mcp_installer_1.hasImageAnalysisMcpConfig; } });
18
+ Object.defineProperty(exports, "hasImageAnalysisMcpReady", { enumerable: true, get: function () { return mcp_installer_1.hasImageAnalysisMcpReady; } });
19
+ Object.defineProperty(exports, "installImageAnalysisMcpServer", { enumerable: true, get: function () { return mcp_installer_1.installImageAnalysisMcpServer; } });
20
+ Object.defineProperty(exports, "ensureImageAnalysisMcpConfig", { enumerable: true, get: function () { return mcp_installer_1.ensureImageAnalysisMcpConfig; } });
21
+ Object.defineProperty(exports, "ensureImageAnalysisMcp", { enumerable: true, get: function () { return mcp_installer_1.ensureImageAnalysisMcp; } });
22
+ Object.defineProperty(exports, "uninstallImageAnalysisMcpServer", { enumerable: true, get: function () { return mcp_installer_1.uninstallImageAnalysisMcpServer; } });
23
+ Object.defineProperty(exports, "removeImageAnalysisMcpConfig", { enumerable: true, get: function () { return mcp_installer_1.removeImageAnalysisMcpConfig; } });
24
+ Object.defineProperty(exports, "uninstallImageAnalysisMcp", { enumerable: true, get: function () { return mcp_installer_1.uninstallImageAnalysisMcp; } });
25
+ Object.defineProperty(exports, "syncImageAnalysisMcpToConfigDir", { enumerable: true, get: function () { return mcp_installer_1.syncImageAnalysisMcpToConfigDir; } });
26
+ Object.defineProperty(exports, "ensureImageAnalysisMcpOrThrow", { enumerable: true, get: function () { return mcp_installer_1.ensureImageAnalysisMcpOrThrow; } });
27
+ var claude_tool_args_1 = require("./claude-tool-args");
28
+ Object.defineProperty(exports, "appendThirdPartyImageAnalysisToolArgs", { enumerable: true, get: function () { return claude_tool_args_1.appendThirdPartyImageAnalysisToolArgs; } });
29
+ Object.defineProperty(exports, "getImageAnalysisSteeringPrompt", { enumerable: true, get: function () { return claude_tool_args_1.getImageAnalysisSteeringPrompt; } });
30
+ exports.IMAGE_ANALYSIS_PROMPT_TEMPLATES = ['default', 'screenshot', 'document'];
12
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAA8E;AAArE,+GAAA,aAAa,OAAA;AAAE,6HAAA,2BAA2B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAA8E;AAArE,+GAAA,aAAa,OAAA;AAAE,6HAAA,2BAA2B,OAAA;AACnD,iDAeyB;AAdvB,8HAAA,6BAA6B,OAAA;AAC7B,8HAAA,6BAA6B,OAAA;AAC7B,+HAAA,8BAA8B,OAAA;AAC9B,mIAAA,kCAAkC,OAAA;AAClC,0HAAA,yBAAyB,OAAA;AACzB,yHAAA,wBAAwB,OAAA;AACxB,8HAAA,6BAA6B,OAAA;AAC7B,6HAAA,4BAA4B,OAAA;AAC5B,uHAAA,sBAAsB,OAAA;AACtB,gIAAA,+BAA+B,OAAA;AAC/B,6HAAA,4BAA4B,OAAA;AAC5B,0HAAA,yBAAyB,OAAA;AACzB,gIAAA,+BAA+B,OAAA;AAC/B,8HAAA,6BAA6B,OAAA;AAE/B,uDAG4B;AAF1B,yIAAA,qCAAqC,OAAA;AACrC,kIAAA,8BAA8B,OAAA;AAGnB,QAAA,+BAA+B,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Image Analysis MCP installer and ~/.claude.json provisioning.
3
+ */
4
+ export declare function getImageAnalysisMcpServerName(): string;
5
+ export declare function getImageAnalysisMcpServerPath(): string;
6
+ export declare function getImageAnalysisMcpRuntimePath(): string;
7
+ export declare function hasImageAnalysisMcpServerInstalled(): boolean;
8
+ export declare function hasImageAnalysisMcpConfig(configPath?: string): boolean;
9
+ export declare function hasImageAnalysisMcpReady(configPath?: string): boolean;
10
+ export declare function installImageAnalysisMcpServer(): boolean;
11
+ export declare function ensureImageAnalysisMcpConfig(): boolean;
12
+ export declare function ensureImageAnalysisMcp(): boolean;
13
+ export declare function syncImageAnalysisMcpToConfigDir(claudeConfigDir: string | undefined): boolean;
14
+ export declare function uninstallImageAnalysisMcpServer(): boolean;
15
+ export declare function removeImageAnalysisMcpConfig(): boolean;
16
+ export declare function uninstallImageAnalysisMcp(): boolean;
17
+ export declare function ensureImageAnalysisMcpOrThrow(): boolean;
18
+ //# sourceMappingURL=mcp-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-installer.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/mcp-installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgCH,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AA8GD,wBAAgB,kCAAkC,IAAI,OAAO,CAK5D;AAED,wBAAgB,yBAAyB,CAAC,UAAU,SAA4B,GAAG,OAAO,CAuBzF;AAED,wBAAgB,wBAAwB,CAAC,UAAU,SAA4B,GAAG,OAAO,CAExF;AAqED,wBAAgB,6BAA6B,IAAI,OAAO,CAgFvD;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CA8EtD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAShD;AAED,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAM5F;AAED,wBAAgB,+BAA+B,IAAI,OAAO,CAwBzD;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAWtD;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD;AAED,wBAAgB,6BAA6B,IAAI,OAAO,CAgBvD"}
@@ -0,0 +1,447 @@
1
+ "use strict";
2
+ /**
3
+ * Image Analysis MCP installer and ~/.claude.json provisioning.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ensureImageAnalysisMcpOrThrow = exports.uninstallImageAnalysisMcp = exports.removeImageAnalysisMcpConfig = exports.uninstallImageAnalysisMcpServer = exports.syncImageAnalysisMcpToConfigDir = exports.ensureImageAnalysisMcp = exports.ensureImageAnalysisMcpConfig = exports.installImageAnalysisMcpServer = exports.hasImageAnalysisMcpReady = exports.hasImageAnalysisMcpConfig = exports.hasImageAnalysisMcpServerInstalled = exports.getImageAnalysisMcpRuntimePath = exports.getImageAnalysisMcpServerPath = exports.getImageAnalysisMcpServerName = void 0;
30
+ const fs = __importStar(require("fs"));
31
+ const path = __importStar(require("path"));
32
+ const lockfile = __importStar(require("proper-lockfile"));
33
+ const unified_config_loader_1 = require("../../config/unified-config-loader");
34
+ const config_manager_1 = require("../config-manager");
35
+ const claude_config_path_1 = require("../claude-config-path");
36
+ const ui_1 = require("../ui");
37
+ const instance_manager_1 = require("../../management/instance-manager");
38
+ const hook_installer_1 = require("./hook-installer");
39
+ const IMAGE_ANALYSIS_MCP_SERVER = 'ccs-image-analysis-server.cjs';
40
+ const IMAGE_ANALYSIS_MCP_RUNTIME = 'image-analysis-runtime.cjs';
41
+ const IMAGE_ANALYSIS_MCP_SERVER_NAME = 'ccs-image-analysis';
42
+ function getCcsMcpDir() {
43
+ return path.join((0, config_manager_1.getCcsDir)(), 'mcp');
44
+ }
45
+ function getImageAnalysisMcpServerName() {
46
+ return IMAGE_ANALYSIS_MCP_SERVER_NAME;
47
+ }
48
+ exports.getImageAnalysisMcpServerName = getImageAnalysisMcpServerName;
49
+ function getImageAnalysisMcpServerPath() {
50
+ return path.join(getCcsMcpDir(), IMAGE_ANALYSIS_MCP_SERVER);
51
+ }
52
+ exports.getImageAnalysisMcpServerPath = getImageAnalysisMcpServerPath;
53
+ function getImageAnalysisMcpRuntimePath() {
54
+ return path.join(getCcsMcpDir(), IMAGE_ANALYSIS_MCP_RUNTIME);
55
+ }
56
+ exports.getImageAnalysisMcpRuntimePath = getImageAnalysisMcpRuntimePath;
57
+ function hasMatchingContents(sourcePath, destinationPath) {
58
+ if (!fs.existsSync(destinationPath)) {
59
+ return false;
60
+ }
61
+ const source = fs.readFileSync(sourcePath);
62
+ try {
63
+ const destination = fs.readFileSync(destinationPath);
64
+ return source.equals(destination);
65
+ }
66
+ catch (error) {
67
+ if (process.env.CCS_DEBUG) {
68
+ console.error((0, ui_1.warn)(`Existing Image Analysis MCP server is unreadable: ${error.message}`));
69
+ }
70
+ return false;
71
+ }
72
+ }
73
+ function getTempPath(targetPath) {
74
+ const suffix = `${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
75
+ return `${targetPath}.${suffix}.tmp`;
76
+ }
77
+ function resolveBundledArtifactSourcePath(fileName) {
78
+ const possiblePaths = [
79
+ path.join(__dirname, '..', '..', '..', 'lib', 'mcp', fileName),
80
+ path.join(__dirname, '..', '..', 'lib', 'mcp', fileName),
81
+ path.join(__dirname, '..', 'lib', 'mcp', fileName),
82
+ path.join(__dirname, '..', '..', '..', 'lib', 'hooks', fileName),
83
+ path.join(__dirname, '..', '..', 'lib', 'hooks', fileName),
84
+ path.join(__dirname, '..', 'lib', 'hooks', fileName),
85
+ ];
86
+ for (const candidate of possiblePaths) {
87
+ if (fs.existsSync(candidate)) {
88
+ return candidate;
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+ function readClaudeUserConfig(configPath) {
94
+ if (!fs.existsSync(configPath)) {
95
+ return {};
96
+ }
97
+ try {
98
+ const raw = fs.readFileSync(configPath, 'utf8');
99
+ const parsed = JSON.parse(raw);
100
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
101
+ return null;
102
+ }
103
+ return parsed;
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ function writeClaudeUserConfig(configPath, config) {
110
+ const tempPath = getTempPath(configPath);
111
+ const fileMode = fs.existsSync(configPath) ? fs.statSync(configPath).mode & 0o777 : 0o600;
112
+ try {
113
+ fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
114
+ fs.chmodSync(tempPath, fileMode);
115
+ fs.renameSync(tempPath, configPath);
116
+ return true;
117
+ }
118
+ finally {
119
+ if (fs.existsSync(tempPath)) {
120
+ fs.unlinkSync(tempPath);
121
+ }
122
+ }
123
+ }
124
+ function withClaudeUserConfigLock(configPath, callback) {
125
+ const configDir = path.dirname(configPath);
126
+ const lockTarget = path.join(configDir, `${path.basename(configPath)}.ccs-lock`);
127
+ let release;
128
+ if (!fs.existsSync(configDir)) {
129
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
130
+ }
131
+ if (!fs.existsSync(lockTarget)) {
132
+ fs.writeFileSync(lockTarget, '', { encoding: 'utf8', mode: 0o600 });
133
+ }
134
+ try {
135
+ release = lockfile.lockSync(lockTarget, { stale: 10000 });
136
+ return callback();
137
+ }
138
+ finally {
139
+ if (release) {
140
+ try {
141
+ release();
142
+ }
143
+ catch {
144
+ // Best-effort release.
145
+ }
146
+ }
147
+ }
148
+ }
149
+ function isLockUnavailableError(error) {
150
+ const code = error?.code;
151
+ return code === 'ELOCKED' || code === 'ENOTACQUIRED';
152
+ }
153
+ function hasImageAnalysisMcpServerInstalled() {
154
+ return (fs.existsSync(getImageAnalysisMcpServerPath()) &&
155
+ fs.existsSync(getImageAnalysisMcpRuntimePath()));
156
+ }
157
+ exports.hasImageAnalysisMcpServerInstalled = hasImageAnalysisMcpServerInstalled;
158
+ function hasImageAnalysisMcpConfig(configPath = (0, claude_config_path_1.getClaudeUserConfigPath)()) {
159
+ const config = readClaudeUserConfig(configPath);
160
+ if (config === null) {
161
+ return false;
162
+ }
163
+ const existingServers = config.mcpServers && typeof config.mcpServers === 'object' && !Array.isArray(config.mcpServers)
164
+ ? config.mcpServers
165
+ : {};
166
+ const currentConfig = existingServers[IMAGE_ANALYSIS_MCP_SERVER_NAME];
167
+ return (typeof currentConfig === 'object' &&
168
+ currentConfig !== null &&
169
+ JSON.stringify(currentConfig) ===
170
+ JSON.stringify({
171
+ type: 'stdio',
172
+ command: 'node',
173
+ args: [getImageAnalysisMcpServerPath()],
174
+ env: {},
175
+ }));
176
+ }
177
+ exports.hasImageAnalysisMcpConfig = hasImageAnalysisMcpConfig;
178
+ function hasImageAnalysisMcpReady(configPath = (0, claude_config_path_1.getClaudeUserConfigPath)()) {
179
+ return hasImageAnalysisMcpServerInstalled() && hasImageAnalysisMcpConfig(configPath);
180
+ }
181
+ exports.hasImageAnalysisMcpReady = hasImageAnalysisMcpReady;
182
+ function removeManagedServerConfig(configPath) {
183
+ if (!fs.existsSync(configPath)) {
184
+ return false;
185
+ }
186
+ try {
187
+ return withClaudeUserConfigLock(configPath, () => {
188
+ const config = readClaudeUserConfig(configPath);
189
+ if (config === null) {
190
+ if (process.env.CCS_DEBUG) {
191
+ console.error((0, ui_1.warn)(`Malformed Claude config prevents MCP cleanup: ${configPath}`));
192
+ }
193
+ return false;
194
+ }
195
+ const existingServers = config.mcpServers &&
196
+ typeof config.mcpServers === 'object' &&
197
+ !Array.isArray(config.mcpServers)
198
+ ? { ...config.mcpServers }
199
+ : {};
200
+ if (!(IMAGE_ANALYSIS_MCP_SERVER_NAME in existingServers)) {
201
+ return false;
202
+ }
203
+ delete existingServers[IMAGE_ANALYSIS_MCP_SERVER_NAME];
204
+ const nextConfig = { ...config };
205
+ if (Object.keys(existingServers).length === 0) {
206
+ delete nextConfig.mcpServers;
207
+ }
208
+ else {
209
+ nextConfig.mcpServers = existingServers;
210
+ }
211
+ try {
212
+ writeClaudeUserConfig(configPath, nextConfig);
213
+ if (process.env.CCS_DEBUG) {
214
+ console.error((0, ui_1.info)(`Removed Image Analysis MCP config from ${configPath}`));
215
+ }
216
+ return true;
217
+ }
218
+ catch (error) {
219
+ if (process.env.CCS_DEBUG) {
220
+ console.error((0, ui_1.warn)(`Failed to remove Image Analysis MCP config from ${configPath}: ${error.message}`));
221
+ }
222
+ return false;
223
+ }
224
+ });
225
+ }
226
+ catch (error) {
227
+ if (isLockUnavailableError(error)) {
228
+ if (process.env.CCS_DEBUG) {
229
+ console.error((0, ui_1.warn)(`Image Analysis MCP cleanup skipped because ${configPath} is locked by another process`));
230
+ }
231
+ return false;
232
+ }
233
+ throw error;
234
+ }
235
+ }
236
+ function installImageAnalysisMcpServer() {
237
+ const config = (0, unified_config_loader_1.getImageAnalysisConfig)();
238
+ if (!config.enabled) {
239
+ return false;
240
+ }
241
+ const artifacts = [
242
+ {
243
+ fileName: IMAGE_ANALYSIS_MCP_SERVER,
244
+ sourcePath: resolveBundledArtifactSourcePath(IMAGE_ANALYSIS_MCP_SERVER),
245
+ destinationPath: getImageAnalysisMcpServerPath(),
246
+ },
247
+ {
248
+ fileName: IMAGE_ANALYSIS_MCP_RUNTIME,
249
+ sourcePath: resolveBundledArtifactSourcePath(IMAGE_ANALYSIS_MCP_RUNTIME),
250
+ destinationPath: getImageAnalysisMcpRuntimePath(),
251
+ },
252
+ ];
253
+ const missingArtifact = artifacts.find((artifact) => !artifact.sourcePath);
254
+ if (missingArtifact) {
255
+ if (process.env.CCS_DEBUG) {
256
+ console.error((0, ui_1.warn)(`Image Analysis MCP runtime source not found: ${missingArtifact.fileName}`));
257
+ }
258
+ return false;
259
+ }
260
+ const mcpDir = getCcsMcpDir();
261
+ if (!fs.existsSync(mcpDir)) {
262
+ fs.mkdirSync(mcpDir, { recursive: true, mode: 0o700 });
263
+ }
264
+ try {
265
+ for (const artifact of artifacts) {
266
+ const sourcePath = artifact.sourcePath;
267
+ if (!sourcePath) {
268
+ continue;
269
+ }
270
+ if (hasMatchingContents(sourcePath, artifact.destinationPath)) {
271
+ continue;
272
+ }
273
+ const tempPath = getTempPath(artifact.destinationPath);
274
+ try {
275
+ fs.copyFileSync(sourcePath, tempPath);
276
+ fs.chmodSync(tempPath, 0o755);
277
+ try {
278
+ fs.renameSync(tempPath, artifact.destinationPath);
279
+ }
280
+ catch (renameError) {
281
+ const errorCode = renameError.code;
282
+ if (errorCode !== 'EEXIST' && errorCode !== 'EPERM') {
283
+ throw renameError;
284
+ }
285
+ if (!hasMatchingContents(sourcePath, artifact.destinationPath)) {
286
+ fs.copyFileSync(tempPath, artifact.destinationPath);
287
+ fs.chmodSync(artifact.destinationPath, 0o755);
288
+ }
289
+ }
290
+ }
291
+ finally {
292
+ if (fs.existsSync(tempPath)) {
293
+ fs.unlinkSync(tempPath);
294
+ }
295
+ }
296
+ }
297
+ (0, hook_installer_1.installImageAnalysisPrompts)();
298
+ return true;
299
+ }
300
+ catch (error) {
301
+ if (process.env.CCS_DEBUG) {
302
+ console.error((0, ui_1.warn)(`Failed to install Image Analysis MCP server: ${error.message}`));
303
+ }
304
+ return false;
305
+ }
306
+ }
307
+ exports.installImageAnalysisMcpServer = installImageAnalysisMcpServer;
308
+ function ensureImageAnalysisMcpConfig() {
309
+ const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
310
+ if (!imageConfig.enabled) {
311
+ return false;
312
+ }
313
+ const claudeUserConfigPath = (0, claude_config_path_1.getClaudeUserConfigPath)();
314
+ const claudeUserConfigDir = path.dirname(claudeUserConfigPath);
315
+ if (!fs.existsSync(claudeUserConfigDir)) {
316
+ fs.mkdirSync(claudeUserConfigDir, { recursive: true, mode: 0o700 });
317
+ }
318
+ const desiredServerConfig = {
319
+ type: 'stdio',
320
+ command: 'node',
321
+ args: [getImageAnalysisMcpServerPath()],
322
+ env: {},
323
+ };
324
+ try {
325
+ return withClaudeUserConfigLock(claudeUserConfigPath, () => {
326
+ const config = readClaudeUserConfig(claudeUserConfigPath);
327
+ if (config === null) {
328
+ if (process.env.CCS_DEBUG) {
329
+ console.error((0, ui_1.warn)('Malformed ~/.claude.json prevents Image Analysis MCP provisioning'));
330
+ }
331
+ return false;
332
+ }
333
+ const existingServers = config.mcpServers &&
334
+ typeof config.mcpServers === 'object' &&
335
+ !Array.isArray(config.mcpServers)
336
+ ? config.mcpServers
337
+ : {};
338
+ const currentConfig = existingServers[IMAGE_ANALYSIS_MCP_SERVER_NAME];
339
+ if (typeof currentConfig === 'object' &&
340
+ currentConfig !== null &&
341
+ JSON.stringify(currentConfig) === JSON.stringify(desiredServerConfig)) {
342
+ return true;
343
+ }
344
+ const nextConfig = {
345
+ ...config,
346
+ mcpServers: {
347
+ ...existingServers,
348
+ [IMAGE_ANALYSIS_MCP_SERVER_NAME]: desiredServerConfig,
349
+ },
350
+ };
351
+ try {
352
+ writeClaudeUserConfig(claudeUserConfigPath, nextConfig);
353
+ if (process.env.CCS_DEBUG) {
354
+ console.error((0, ui_1.info)(`Ensured Image Analysis MCP config in ${claudeUserConfigPath}`));
355
+ }
356
+ return true;
357
+ }
358
+ catch (error) {
359
+ if (process.env.CCS_DEBUG) {
360
+ console.error((0, ui_1.warn)(`Failed to update ~/.claude.json: ${error.message}`));
361
+ }
362
+ return false;
363
+ }
364
+ });
365
+ }
366
+ catch (error) {
367
+ if (isLockUnavailableError(error)) {
368
+ if (process.env.CCS_DEBUG) {
369
+ console.error((0, ui_1.warn)(`Image Analysis MCP provisioning skipped because ${claudeUserConfigPath} is locked by another process`));
370
+ }
371
+ return false;
372
+ }
373
+ throw error;
374
+ }
375
+ }
376
+ exports.ensureImageAnalysisMcpConfig = ensureImageAnalysisMcpConfig;
377
+ function ensureImageAnalysisMcp() {
378
+ const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
379
+ if (!imageConfig.enabled) {
380
+ return false;
381
+ }
382
+ const installed = installImageAnalysisMcpServer();
383
+ const configured = installed && ensureImageAnalysisMcpConfig();
384
+ return installed && configured;
385
+ }
386
+ exports.ensureImageAnalysisMcp = ensureImageAnalysisMcp;
387
+ function syncImageAnalysisMcpToConfigDir(claudeConfigDir) {
388
+ if (!claudeConfigDir) {
389
+ return false;
390
+ }
391
+ return new instance_manager_1.InstanceManager().syncMcpServers(claudeConfigDir);
392
+ }
393
+ exports.syncImageAnalysisMcpToConfigDir = syncImageAnalysisMcpToConfigDir;
394
+ function uninstallImageAnalysisMcpServer() {
395
+ const artifactPaths = [getImageAnalysisMcpServerPath(), getImageAnalysisMcpRuntimePath()];
396
+ if (!artifactPaths.some((artifactPath) => fs.existsSync(artifactPath))) {
397
+ return false;
398
+ }
399
+ try {
400
+ let removed = false;
401
+ for (const artifactPath of artifactPaths) {
402
+ if (!fs.existsSync(artifactPath)) {
403
+ continue;
404
+ }
405
+ fs.unlinkSync(artifactPath);
406
+ removed = true;
407
+ }
408
+ return removed;
409
+ }
410
+ catch (error) {
411
+ if (process.env.CCS_DEBUG) {
412
+ console.error((0, ui_1.warn)(`Failed to remove Image Analysis MCP server: ${error.message}`));
413
+ }
414
+ return false;
415
+ }
416
+ }
417
+ exports.uninstallImageAnalysisMcpServer = uninstallImageAnalysisMcpServer;
418
+ function removeImageAnalysisMcpConfig() {
419
+ let removed = removeManagedServerConfig((0, claude_config_path_1.getClaudeUserConfigPath)());
420
+ const instanceManager = new instance_manager_1.InstanceManager();
421
+ for (const instanceName of instanceManager.listInstances()) {
422
+ const instancePath = instanceManager.getInstancePath(instanceName);
423
+ const instanceClaudeConfigPath = path.join(instancePath, '.claude.json');
424
+ removed = removeManagedServerConfig(instanceClaudeConfigPath) || removed;
425
+ }
426
+ return removed;
427
+ }
428
+ exports.removeImageAnalysisMcpConfig = removeImageAnalysisMcpConfig;
429
+ function uninstallImageAnalysisMcp() {
430
+ const removedConfig = removeImageAnalysisMcpConfig();
431
+ const removedServer = uninstallImageAnalysisMcpServer();
432
+ return removedConfig || removedServer;
433
+ }
434
+ exports.uninstallImageAnalysisMcp = uninstallImageAnalysisMcp;
435
+ function ensureImageAnalysisMcpOrThrow() {
436
+ const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
437
+ if (!imageConfig.enabled) {
438
+ return false;
439
+ }
440
+ const ready = ensureImageAnalysisMcp();
441
+ if (!ready) {
442
+ console.error((0, ui_1.warn)('Image Analysis is enabled, but CCS could not prepare the local ImageAnalysis tool. This session will fall back to native Read.'));
443
+ }
444
+ return ready;
445
+ }
446
+ exports.ensureImageAnalysisMcpOrThrow = ensureImageAnalysisMcpOrThrow;
447
+ //# sourceMappingURL=mcp-installer.js.map