@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.
Files changed (115) hide show
  1. package/dist/ccs.js +5 -0
  2. package/dist/ccs.js.map +1 -1
  3. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  4. package/dist/cliproxy/cliproxy-executor.js +26 -0
  5. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  6. package/dist/commands/config-command.d.ts.map +1 -1
  7. package/dist/commands/config-command.js +14 -0
  8. package/dist/commands/config-command.js.map +1 -1
  9. package/dist/commands/config-image-analysis-command.d.ts +8 -0
  10. package/dist/commands/config-image-analysis-command.d.ts.map +1 -0
  11. package/dist/commands/config-image-analysis-command.js +175 -0
  12. package/dist/commands/config-image-analysis-command.js.map +1 -0
  13. package/dist/commands/help-command.d.ts.map +1 -1
  14. package/dist/commands/help-command.js +14 -0
  15. package/dist/commands/help-command.js.map +1 -1
  16. package/dist/commands/index.d.ts +1 -0
  17. package/dist/commands/index.d.ts.map +1 -1
  18. package/dist/commands/index.js +3 -1
  19. package/dist/commands/index.js.map +1 -1
  20. package/dist/config/unified-config-loader.d.ts +7 -1
  21. package/dist/config/unified-config-loader.d.ts.map +1 -1
  22. package/dist/config/unified-config-loader.js +157 -24
  23. package/dist/config/unified-config-loader.js.map +1 -1
  24. package/dist/config/unified-config-types.d.ts +19 -0
  25. package/dist/config/unified-config-types.d.ts.map +1 -1
  26. package/dist/config/unified-config-types.js +18 -1
  27. package/dist/config/unified-config-types.js.map +1 -1
  28. package/dist/management/checks/image-analysis-check.d.ts +16 -0
  29. package/dist/management/checks/image-analysis-check.d.ts.map +1 -0
  30. package/dist/management/checks/image-analysis-check.js +164 -0
  31. package/dist/management/checks/image-analysis-check.js.map +1 -0
  32. package/dist/management/checks/index.d.ts +1 -0
  33. package/dist/management/checks/index.d.ts.map +1 -1
  34. package/dist/management/checks/index.js +5 -1
  35. package/dist/management/checks/index.js.map +1 -1
  36. package/dist/management/doctor.d.ts.map +1 -1
  37. package/dist/management/doctor.js +4 -0
  38. package/dist/management/doctor.js.map +1 -1
  39. package/dist/management/repair/auto-repair.d.ts.map +1 -1
  40. package/dist/management/repair/auto-repair.js +16 -0
  41. package/dist/management/repair/auto-repair.js.map +1 -1
  42. package/dist/ui/assets/{accounts-BROl36rt.js → accounts-b2F3ZAU8.js} +1 -1
  43. package/dist/ui/assets/{alert-dialog-Bc0CRwpK.js → alert-dialog-L3d8GDXi.js} +1 -1
  44. package/dist/ui/assets/{api-BTvodZ9c.js → api-BuyRFWlp.js} +1 -1
  45. package/dist/ui/assets/auth-section-BpICzMKK.js +1 -0
  46. package/dist/ui/assets/backups-section-CAqSh_mu.js +1 -0
  47. package/dist/ui/assets/{cliproxy-CL-Lk791.js → cliproxy-CcLAW8bB.js} +2 -2
  48. package/dist/ui/assets/cliproxy-control-panel-K7xiAvok.js +1 -0
  49. package/dist/ui/assets/{confirm-dialog-B0UGiTIr.js → confirm-dialog-OG_57rDw.js} +1 -1
  50. package/dist/ui/assets/{copilot-DoojagGr.js → copilot-NIAKmbdW.js} +2 -2
  51. package/dist/ui/assets/globalenv-section-DdsS7yEO.js +1 -0
  52. package/dist/ui/assets/health--QCS2yIj.js +1 -0
  53. package/dist/ui/assets/{icons-B_4flurP.js → icons-D5eAI-GR.js} +1 -1
  54. package/dist/ui/assets/{index-8_6THoWM.css → index-BL8DS7Z0.css} +1 -1
  55. package/dist/ui/assets/{index-Dhj9QHKA.js → index-BcClU15l.js} +1 -1
  56. package/dist/ui/assets/index-C2Cx0QB3.js +1 -0
  57. package/dist/ui/assets/{index-C8D32oPF.js → index-CxBjoBIe.js} +16 -16
  58. package/dist/ui/assets/index-D4NhXgPa.js +1 -0
  59. package/dist/ui/assets/index-Dl9qz9yj.js +1 -0
  60. package/dist/ui/assets/proxy-status-widget-BvGTE0sc.js +1 -0
  61. package/dist/ui/assets/shared-CBqyGf1c.js +1 -0
  62. package/dist/ui/assets/{switch-l6toeZhu.js → switch-Cl6oSNjg.js} +1 -1
  63. package/dist/ui/index.html +3 -3
  64. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +17 -0
  65. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -0
  66. package/dist/utils/hooks/get-image-analysis-hook-env.js +42 -0
  67. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -0
  68. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts +21 -0
  69. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -0
  70. package/dist/utils/hooks/image-analyzer-hook-configuration.js +78 -0
  71. package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -0
  72. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts +31 -0
  73. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -0
  74. package/dist/utils/hooks/image-analyzer-hook-installer.js +148 -0
  75. package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -0
  76. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts +24 -0
  77. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -0
  78. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +250 -0
  79. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -0
  80. package/dist/utils/hooks/image-read-block-hook-env.d.ts +34 -0
  81. package/dist/utils/hooks/image-read-block-hook-env.d.ts.map +1 -0
  82. package/dist/utils/hooks/image-read-block-hook-env.js +52 -0
  83. package/dist/utils/hooks/image-read-block-hook-env.js.map +1 -0
  84. package/dist/utils/hooks/index.d.ts +12 -0
  85. package/dist/utils/hooks/index.d.ts.map +1 -0
  86. package/dist/utils/hooks/index.js +24 -0
  87. package/dist/utils/hooks/index.js.map +1 -0
  88. package/dist/utils/image-analysis/hook-installer.d.ts +48 -0
  89. package/dist/utils/image-analysis/hook-installer.d.ts.map +1 -0
  90. package/dist/utils/image-analysis/hook-installer.js +214 -0
  91. package/dist/utils/image-analysis/hook-installer.js.map +1 -0
  92. package/dist/utils/image-analysis/index.d.ts +7 -0
  93. package/dist/utils/image-analysis/index.d.ts.map +1 -0
  94. package/dist/utils/image-analysis/index.js +17 -0
  95. package/dist/utils/image-analysis/index.js.map +1 -0
  96. package/dist/utils/shell-executor.d.ts +1 -0
  97. package/dist/utils/shell-executor.d.ts.map +1 -1
  98. package/dist/utils/shell-executor.js +28 -3
  99. package/dist/utils/shell-executor.js.map +1 -1
  100. package/lib/hooks/block-image-read.cjs +170 -0
  101. package/lib/hooks/image-analyzer-transformer.cjs +758 -0
  102. package/lib/prompts/image-analysis-default.txt +12 -0
  103. package/lib/prompts/image-analysis-document.txt +13 -0
  104. package/lib/prompts/image-analysis-screenshot.txt +13 -0
  105. package/package.json +3 -2
  106. package/dist/ui/assets/auth-section-CdJfwuku.js +0 -1
  107. package/dist/ui/assets/backups-section-C1QbR4iU.js +0 -1
  108. package/dist/ui/assets/cliproxy-control-panel-C67g3-lG.js +0 -1
  109. package/dist/ui/assets/globalenv-section-DWvTHsju.js +0 -1
  110. package/dist/ui/assets/health-kyBi8s6g.js +0 -1
  111. package/dist/ui/assets/index-Br2-kfvk.js +0 -1
  112. package/dist/ui/assets/index-CaHIXCeK.js +0 -1
  113. package/dist/ui/assets/index-DaeRFGpX.js +0 -1
  114. package/dist/ui/assets/proxy-status-widget-CRQnzDjM.js +0 -1
  115. 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":"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"}
@@ -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"}
@@ -6,6 +6,7 @@
6
6
  /// <reference types="node" />
7
7
  /**
8
8
  * Escape arguments for shell execution (Windows compatibility)
9
+ * Handles PowerShell special characters: backticks, $variables, double quotes
9
10
  */
10
11
  export declare function escapeShellArg(arg: string): string;
11
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAMH;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW,GACvC,IAAI,CAwCN"}
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
- return '"' + String(arg).replace(/"/g, '""') + '"';
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;AAE1D;;GAEG;AACH,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC;AAFD,wCAEC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,SAAiB,EACjB,IAAc,EACd,UAAoC,IAAI;IAExC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC/C,MAAM,UAAU,GAAG,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpE,qCAAqC;IACrC,MAAM,YAAY,GAAG,IAAA,uCAAmB,GAAE,CAAC;IAE3C,mEAAmE;IACnE,MAAM,GAAG,GAAG,OAAO;QACjB,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,YAAY,EAAE;QACjD,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAExC,IAAI,KAAmB,CAAC;IACxB,IAAI,UAAU,EAAE,CAAC;QACf,sEAAsE;QACtE,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,KAAK,GAAG,IAAA,qBAAK,EAAC,SAAS,EAAE;YACvB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI;YACX,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,mEAAmE;QACnE,KAAK,GAAG,IAAA,qBAAK,EAAC,SAAS,EAAE,IAAI,EAAE;YAC7B,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,IAAI;YACjB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAwB,CAAC,CAAC;;YAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,4BAAY,CAAC,kBAAkB,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AA5CD,gCA4CC"}
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
+ }