@kaitranntt/ccs 7.34.1-dev.4 → 7.34.1-dev.5
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.
- package/dist/ccs.js +5 -0
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +26 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/commands/config-command.d.ts.map +1 -1
- package/dist/commands/config-command.js +14 -0
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/config-image-analysis-command.d.ts +8 -0
- package/dist/commands/config-image-analysis-command.d.ts.map +1 -0
- package/dist/commands/config-image-analysis-command.js +175 -0
- package/dist/commands/config-image-analysis-command.js.map +1 -0
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +14 -0
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts +7 -1
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +157 -24
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +19 -0
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +18 -1
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/management/checks/image-analysis-check.d.ts +16 -0
- package/dist/management/checks/image-analysis-check.d.ts.map +1 -0
- package/dist/management/checks/image-analysis-check.js +164 -0
- package/dist/management/checks/image-analysis-check.js.map +1 -0
- package/dist/management/checks/index.d.ts +1 -0
- package/dist/management/checks/index.d.ts.map +1 -1
- package/dist/management/checks/index.js +5 -1
- package/dist/management/checks/index.js.map +1 -1
- package/dist/management/doctor.d.ts.map +1 -1
- package/dist/management/doctor.js +4 -0
- package/dist/management/doctor.js.map +1 -1
- package/dist/management/repair/auto-repair.d.ts.map +1 -1
- package/dist/management/repair/auto-repair.js +16 -0
- package/dist/management/repair/auto-repair.js.map +1 -1
- package/dist/ui/assets/{accounts-BROl36rt.js → accounts-b2F3ZAU8.js} +1 -1
- package/dist/ui/assets/{alert-dialog-Bc0CRwpK.js → alert-dialog-L3d8GDXi.js} +1 -1
- package/dist/ui/assets/{api-BTvodZ9c.js → api-BuyRFWlp.js} +1 -1
- package/dist/ui/assets/auth-section-BpICzMKK.js +1 -0
- package/dist/ui/assets/backups-section-CAqSh_mu.js +1 -0
- package/dist/ui/assets/{cliproxy-CL-Lk791.js → cliproxy-CcLAW8bB.js} +2 -2
- package/dist/ui/assets/cliproxy-control-panel-K7xiAvok.js +1 -0
- package/dist/ui/assets/{confirm-dialog-B0UGiTIr.js → confirm-dialog-OG_57rDw.js} +1 -1
- package/dist/ui/assets/{copilot-DoojagGr.js → copilot-NIAKmbdW.js} +2 -2
- package/dist/ui/assets/globalenv-section-DdsS7yEO.js +1 -0
- package/dist/ui/assets/health--QCS2yIj.js +1 -0
- package/dist/ui/assets/{icons-B_4flurP.js → icons-D5eAI-GR.js} +1 -1
- package/dist/ui/assets/{index-8_6THoWM.css → index-BL8DS7Z0.css} +1 -1
- package/dist/ui/assets/{index-Dhj9QHKA.js → index-BcClU15l.js} +1 -1
- package/dist/ui/assets/index-C2Cx0QB3.js +1 -0
- package/dist/ui/assets/{index-C8D32oPF.js → index-CxBjoBIe.js} +16 -16
- package/dist/ui/assets/index-D4NhXgPa.js +1 -0
- package/dist/ui/assets/index-Dl9qz9yj.js +1 -0
- package/dist/ui/assets/proxy-status-widget-BvGTE0sc.js +1 -0
- package/dist/ui/assets/shared-CBqyGf1c.js +1 -0
- package/dist/ui/assets/{switch-l6toeZhu.js → switch-Cl6oSNjg.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +17 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.js +42 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts +21 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.js +78 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts +31 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.js +148 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts +24 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +250 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -0
- package/dist/utils/hooks/image-read-block-hook-env.d.ts +34 -0
- package/dist/utils/hooks/image-read-block-hook-env.d.ts.map +1 -0
- package/dist/utils/hooks/image-read-block-hook-env.js +52 -0
- package/dist/utils/hooks/image-read-block-hook-env.js.map +1 -0
- package/dist/utils/hooks/index.d.ts +12 -0
- package/dist/utils/hooks/index.d.ts.map +1 -0
- package/dist/utils/hooks/index.js +24 -0
- package/dist/utils/hooks/index.js.map +1 -0
- package/dist/utils/image-analysis/hook-installer.d.ts +48 -0
- package/dist/utils/image-analysis/hook-installer.d.ts.map +1 -0
- package/dist/utils/image-analysis/hook-installer.js +214 -0
- package/dist/utils/image-analysis/hook-installer.js.map +1 -0
- package/dist/utils/image-analysis/index.d.ts +7 -0
- package/dist/utils/image-analysis/index.d.ts.map +1 -0
- package/dist/utils/image-analysis/index.js +17 -0
- package/dist/utils/image-analysis/index.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +1 -0
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +28 -3
- package/dist/utils/shell-executor.js.map +1 -1
- package/lib/hooks/block-image-read.cjs +170 -0
- package/lib/hooks/image-analyzer-transformer.cjs +758 -0
- package/lib/prompts/image-analysis-default.txt +12 -0
- package/lib/prompts/image-analysis-document.txt +13 -0
- package/lib/prompts/image-analysis-screenshot.txt +13 -0
- package/package.json +3 -2
- package/dist/ui/assets/auth-section-CdJfwuku.js +0 -1
- package/dist/ui/assets/backups-section-C1QbR4iU.js +0 -1
- package/dist/ui/assets/cliproxy-control-panel-C67g3-lG.js +0 -1
- package/dist/ui/assets/globalenv-section-DWvTHsju.js +0 -1
- package/dist/ui/assets/health-kyBi8s6g.js +0 -1
- package/dist/ui/assets/index-Br2-kfvk.js +0 -1
- package/dist/ui/assets/index-CaHIXCeK.js +0 -1
- package/dist/ui/assets/index-DaeRFGpX.js +0 -1
- package/dist/ui/assets/proxy-status-widget-CRQnzDjM.js +0 -1
- package/dist/ui/assets/shared-CjMwFBIs.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/hook-installer.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,8BAAmC;AACnC,sDAA8C;AAE9C,iBAAiB;AACjB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEhD;;GAEG;AACH,SAAgB,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAS,GAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAFD,kCAEC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAS,GAAE,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAFD,wCAEC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAS,GAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC7D,CAAC;AAFD,sCAEC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AACtC,CAAC;AAFD,8CAEC;AAED;;;;;;;GAOG;AACH,SAAgB,qBAAqB;IACnC,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAE/B,+BAA+B;QAC/B,8CAA8C;QAC9C,6BAA6B;QAC7B,MAAM,aAAa,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC;SAC7D,CAAC;QAEF,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,UAAU,GAAG,CAAC,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,sCAAsC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6BAA6B;QAC7B,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,uCAAwC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAjDD,sDAiDC;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B;IACzC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QAEnC,wDAAwD;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CACX,IAAA,SAAI,EAAC,2EAA2E,CAAC,CAClF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,uBAAuB;QACvB,MAAM,iBAAiB,GAAG;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;SAC7C,CAAC;QAEF,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,eAAe,GAAG,CAAC,CAAC;gBACpB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,yCAAyC,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG;YAClB,4BAA4B;YAC5B,+BAA+B;YAC/B,6BAA6B;SAC9B,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;YAE5E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACtC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,6CAA8C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AArED,kEAqEC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAE/B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,SAAI,EAAC,yCAA0C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAlBD,0DAkBC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Analysis Utilities
|
|
3
|
+
*
|
|
4
|
+
* Exports hook installer functions for image blocking and prompt management
|
|
5
|
+
*/
|
|
6
|
+
export { getHookPath, getCcsHooksDir, getPromptsDir, hasImageBlockHook, installImageBlockHook, installImageAnalysisPrompts, uninstallImageBlockHook, } from './hook-installer';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image Analysis Utilities
|
|
4
|
+
*
|
|
5
|
+
* Exports hook installer functions for image blocking and prompt management
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.uninstallImageBlockHook = exports.installImageAnalysisPrompts = exports.installImageBlockHook = exports.hasImageBlockHook = exports.getPromptsDir = exports.getCcsHooksDir = exports.getHookPath = void 0;
|
|
9
|
+
var hook_installer_1 = require("./hook-installer");
|
|
10
|
+
Object.defineProperty(exports, "getHookPath", { enumerable: true, get: function () { return hook_installer_1.getHookPath; } });
|
|
11
|
+
Object.defineProperty(exports, "getCcsHooksDir", { enumerable: true, get: function () { return hook_installer_1.getCcsHooksDir; } });
|
|
12
|
+
Object.defineProperty(exports, "getPromptsDir", { enumerable: true, get: function () { return hook_installer_1.getPromptsDir; } });
|
|
13
|
+
Object.defineProperty(exports, "hasImageBlockHook", { enumerable: true, get: function () { return hook_installer_1.hasImageBlockHook; } });
|
|
14
|
+
Object.defineProperty(exports, "installImageBlockHook", { enumerable: true, get: function () { return hook_installer_1.installImageBlockHook; } });
|
|
15
|
+
Object.defineProperty(exports, "installImageAnalysisPrompts", { enumerable: true, get: function () { return hook_installer_1.installImageAnalysisPrompts; } });
|
|
16
|
+
Object.defineProperty(exports, "uninstallImageBlockHook", { enumerable: true, get: function () { return hook_installer_1.uninstallImageBlockHook; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAQ0B;AAPxB,6GAAA,WAAW,OAAA;AACX,gHAAA,cAAc,OAAA;AACd,+GAAA,aAAa,OAAA;AACb,mHAAA,iBAAiB,OAAA;AACjB,uHAAA,qBAAqB,OAAA;AACrB,6HAAA,2BAA2B,OAAA;AAC3B,yHAAA,uBAAuB,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAOH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW,GACvC,IAAI,CAyCN"}
|
|
@@ -9,11 +9,35 @@ exports.execClaude = exports.escapeShellArg = void 0;
|
|
|
9
9
|
const child_process_1 = require("child_process");
|
|
10
10
|
const error_manager_1 = require("./error-manager");
|
|
11
11
|
const websearch_manager_1 = require("./websearch-manager");
|
|
12
|
+
const image_read_block_hook_env_1 = require("./hooks/image-read-block-hook-env");
|
|
12
13
|
/**
|
|
13
14
|
* Escape arguments for shell execution (Windows compatibility)
|
|
15
|
+
* Handles PowerShell special characters: backticks, $variables, double quotes
|
|
14
16
|
*/
|
|
15
17
|
function escapeShellArg(arg) {
|
|
16
|
-
|
|
18
|
+
const isWindows = process.platform === 'win32';
|
|
19
|
+
if (isWindows) {
|
|
20
|
+
// PowerShell: Use single quotes for literal strings to prevent variable expansion
|
|
21
|
+
// Escape single quotes by doubling them (PowerShell syntax)
|
|
22
|
+
// Fallback to double quotes with escapes if single quotes present
|
|
23
|
+
if (arg.includes("'")) {
|
|
24
|
+
// Contains single quote - use double quotes with escape sequences
|
|
25
|
+
return ('"' +
|
|
26
|
+
String(arg)
|
|
27
|
+
.replace(/\$/g, '`$') // Escape $ to prevent variable expansion
|
|
28
|
+
.replace(/`/g, '``') // Escape backticks
|
|
29
|
+
.replace(/"/g, '`"') + // Escape double quotes
|
|
30
|
+
'"');
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// No single quotes - use single quotes for literal string (safest)
|
|
34
|
+
return "'" + String(arg) + "'";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Unix/macOS: Double quotes with escaped inner quotes
|
|
39
|
+
return '"' + String(arg).replace(/"/g, '""') + '"';
|
|
40
|
+
}
|
|
17
41
|
}
|
|
18
42
|
exports.escapeShellArg = escapeShellArg;
|
|
19
43
|
/**
|
|
@@ -24,10 +48,11 @@ function execClaude(claudeCli, args, envVars = null) {
|
|
|
24
48
|
const needsShell = isWindows && /\.(cmd|bat|ps1)$/i.test(claudeCli);
|
|
25
49
|
// Get WebSearch hook config env vars
|
|
26
50
|
const webSearchEnv = (0, websearch_manager_1.getWebSearchHookEnv)();
|
|
51
|
+
const imageReadBlockEnv = (0, image_read_block_hook_env_1.getImageReadBlockHookEnv)();
|
|
27
52
|
// Prepare environment (merge with process.env if envVars provided)
|
|
28
53
|
const env = envVars
|
|
29
|
-
? { ...process.env, ...envVars, ...webSearchEnv }
|
|
30
|
-
: { ...process.env, ...webSearchEnv };
|
|
54
|
+
? { ...process.env, ...envVars, ...webSearchEnv, ...imageReadBlockEnv }
|
|
55
|
+
: { ...process.env, ...webSearchEnv, ...imageReadBlockEnv };
|
|
31
56
|
let child;
|
|
32
57
|
if (needsShell) {
|
|
33
58
|
// When shell needed: concatenate into string to avoid DEP0190 warning
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-executor.js","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iDAAoD;AACpD,mDAA+C;AAC/C,2DAA0D;
|
|
1
|
+
{"version":3,"file":"shell-executor.js","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CCS Image Read Blocking Hook
|
|
4
|
+
*
|
|
5
|
+
* Blocks Claude's Read tool from reading image files to prevent context overflow.
|
|
6
|
+
* Each image can consume 100K+ tokens, causing immediate context exhaustion.
|
|
7
|
+
*
|
|
8
|
+
* This is a PreToolUse hook that runs BEFORE the tool is executed.
|
|
9
|
+
*
|
|
10
|
+
* Behavior (matches WebSearch pattern):
|
|
11
|
+
* - ENABLED by default for third-party profiles (settings, cliproxy)
|
|
12
|
+
* - DISABLED for native Claude accounts (account, default profiles)
|
|
13
|
+
* - User can override via config: hooks.block_image_read.enabled: false
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* Configured in ~/.claude/settings.json:
|
|
17
|
+
* {
|
|
18
|
+
* "hooks": {
|
|
19
|
+
* "PreToolUse": [{
|
|
20
|
+
* "matcher": "Read",
|
|
21
|
+
* "hooks": [{
|
|
22
|
+
* "type": "command",
|
|
23
|
+
* "command": "node ~/.ccs/hooks/block-image-read.cjs",
|
|
24
|
+
* "timeout": 5
|
|
25
|
+
* }]
|
|
26
|
+
* }]
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* Environment Variables (set by CCS):
|
|
31
|
+
* CCS_BLOCK_IMAGE_READ=1 - Enable blocking (default for third-party)
|
|
32
|
+
* CCS_BLOCK_IMAGE_READ=0 - Disable blocking
|
|
33
|
+
* CCS_PROFILE_TYPE - Profile type (account, default, settings, cliproxy)
|
|
34
|
+
* CCS_DEBUG=1 - Enable debug output
|
|
35
|
+
*
|
|
36
|
+
* Exit codes:
|
|
37
|
+
* 0 - Allow tool (pass-through)
|
|
38
|
+
* 2 - Block tool (deny with message)
|
|
39
|
+
*
|
|
40
|
+
* @module hooks/block-image-read
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
// Image file extensions to block
|
|
44
|
+
const IMAGE_EXTENSIONS = /\.(png|jpg|jpeg|webp|gif|bmp|tiff|tif|ico|svg|heic|heif|avif)$/i;
|
|
45
|
+
|
|
46
|
+
// Read input from stdin
|
|
47
|
+
let input = '';
|
|
48
|
+
process.stdin.setEncoding('utf8');
|
|
49
|
+
process.stdin.on('data', (chunk) => {
|
|
50
|
+
input += chunk;
|
|
51
|
+
});
|
|
52
|
+
process.stdin.on('end', () => {
|
|
53
|
+
processHook();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Handle stdin not being available
|
|
57
|
+
process.stdin.on('error', () => {
|
|
58
|
+
process.exit(0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Check if hook should skip (for native Claude accounts).
|
|
63
|
+
* Matches WebSearch hook pattern.
|
|
64
|
+
*/
|
|
65
|
+
function shouldSkipHook() {
|
|
66
|
+
// Account/default profiles use native Claude - don't block
|
|
67
|
+
const profileType = process.env.CCS_PROFILE_TYPE;
|
|
68
|
+
if (profileType === 'account' || profileType === 'default') {
|
|
69
|
+
if (process.env.CCS_DEBUG) {
|
|
70
|
+
console.error(`[CCS Hook] Skipping image block for profile type: ${profileType}`);
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Explicit disable via config
|
|
76
|
+
if (process.env.CCS_BLOCK_IMAGE_READ === '0') {
|
|
77
|
+
if (process.env.CCS_DEBUG) {
|
|
78
|
+
console.error('[CCS Hook] Image read blocking disabled by config');
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Main hook processing logic
|
|
88
|
+
*/
|
|
89
|
+
function processHook() {
|
|
90
|
+
try {
|
|
91
|
+
// Skip for native accounts or explicit disable
|
|
92
|
+
if (shouldSkipHook()) {
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const data = JSON.parse(input);
|
|
97
|
+
|
|
98
|
+
// Only handle Read tool
|
|
99
|
+
if (data.tool_name !== 'Read') {
|
|
100
|
+
process.exit(0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const filePath = data.tool_input?.file_path || '';
|
|
104
|
+
|
|
105
|
+
if (process.env.CCS_DEBUG) {
|
|
106
|
+
console.error(`[CCS Hook] Read intercepted: ${filePath}`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Check if file is an image
|
|
110
|
+
if (IMAGE_EXTENSIONS.test(filePath)) {
|
|
111
|
+
if (process.env.CCS_DEBUG) {
|
|
112
|
+
console.error(`[CCS Hook] Blocking image read: ${filePath}`);
|
|
113
|
+
}
|
|
114
|
+
outputBlock(filePath);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Allow non-image files
|
|
119
|
+
process.exit(0);
|
|
120
|
+
} catch (err) {
|
|
121
|
+
if (process.env.CCS_DEBUG) {
|
|
122
|
+
console.error('[CCS Hook] Parse error:', err.message);
|
|
123
|
+
}
|
|
124
|
+
// Don't block on parse errors
|
|
125
|
+
process.exit(0);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Output block response and exit
|
|
131
|
+
*/
|
|
132
|
+
function outputBlock(filePath) {
|
|
133
|
+
// Extract just the filename for cleaner display
|
|
134
|
+
const fileName = filePath.split(/[/\\]/).pop() || filePath;
|
|
135
|
+
|
|
136
|
+
const message = [
|
|
137
|
+
'[Image Read Blocked - Context Protection]',
|
|
138
|
+
'',
|
|
139
|
+
`File: ${fileName}`,
|
|
140
|
+
`Path: ${filePath}`,
|
|
141
|
+
'',
|
|
142
|
+
'Image files consume 100K+ tokens each and will exhaust context.',
|
|
143
|
+
'',
|
|
144
|
+
'The image was generated successfully. To view it:',
|
|
145
|
+
' - Open the file path above in your image viewer',
|
|
146
|
+
' - Use your file manager to navigate to the location',
|
|
147
|
+
' - On macOS: open "' + filePath + '"',
|
|
148
|
+
' - On Linux: xdg-open "' + filePath + '"',
|
|
149
|
+
' - On Windows: start "" "' + filePath + '"',
|
|
150
|
+
'',
|
|
151
|
+
'If you need to analyze the image, use the ai-multimodal skill',
|
|
152
|
+
'which processes images via Gemini API without loading into context.',
|
|
153
|
+
].join('\n');
|
|
154
|
+
|
|
155
|
+
const output = {
|
|
156
|
+
decision: 'block',
|
|
157
|
+
reason: 'Image file blocked to prevent context overflow',
|
|
158
|
+
// User-facing message (shows in CLI output)
|
|
159
|
+
systemMessage: `[Image Read Blocked] ${fileName} - Open file directly to view.`,
|
|
160
|
+
hookSpecificOutput: {
|
|
161
|
+
hookEventName: 'PreToolUse',
|
|
162
|
+
permissionDecision: 'deny',
|
|
163
|
+
// Claude reads this - explains what happened and alternatives
|
|
164
|
+
permissionDecisionReason: message,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
console.log(JSON.stringify(output));
|
|
169
|
+
process.exit(2);
|
|
170
|
+
}
|