@kaitranntt/ccs 7.34.1 → 7.35.1-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.
- package/dist/ccs.js +11 -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 -4
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.js +5 -0
- package/dist/cliproxy/services/variant-settings.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 +174 -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/commands/update-command.js +15 -5
- package/dist/commands/update-command.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 +21 -1
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +1 -1
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/delegation/result-formatter.d.ts +0 -4
- package/dist/delegation/result-formatter.d.ts.map +1 -1
- package/dist/delegation/result-formatter.js +5 -16
- package/dist/delegation/result-formatter.js.map +1 -1
- package/dist/glmt/glmt-proxy.d.ts.map +1 -1
- package/dist/glmt/glmt-proxy.js +6 -2
- package/dist/glmt/glmt-proxy.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 +140 -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-BBpXWvSH.js} +1 -1
- package/dist/ui/assets/{alert-dialog-Bc0CRwpK.js → alert-dialog-vAfEWTTx.js} +1 -1
- package/dist/ui/assets/{api-BTvodZ9c.js → api-DZ5UMkSM.js} +1 -1
- package/dist/ui/assets/auth-section-CaMKkkvu.js +1 -0
- package/dist/ui/assets/backups-section-WHuXhsOd.js +1 -0
- package/dist/ui/assets/{cliproxy-CL-Lk791.js → cliproxy-BJ4pL9JG.js} +2 -2
- package/dist/ui/assets/cliproxy-control-panel-RfbZRHh8.js +1 -0
- package/dist/ui/assets/{confirm-dialog-B0UGiTIr.js → confirm-dialog-DflEMDZr.js} +1 -1
- package/dist/ui/assets/{copilot-DoojagGr.js → copilot-qDXWR1GO.js} +2 -2
- package/dist/ui/assets/globalenv-section-f_BGs9T6.js +1 -0
- package/dist/ui/assets/health-C8g76Gw9.js +1 -0
- package/dist/ui/assets/{icons-B_4flurP.js → icons-D5eAI-GR.js} +1 -1
- package/dist/ui/assets/{index-C8D32oPF.js → index-BgcyV-uV.js} +19 -19
- package/dist/ui/assets/index-DFnuP2Pl.js +1 -0
- package/dist/ui/assets/index-DZpRED6o.js +1 -0
- package/dist/ui/assets/index-QvMpU4Lc.css +1 -0
- package/dist/ui/assets/index-lueAmZoj.js +1 -0
- package/dist/ui/assets/{index-Dhj9QHKA.js → index-mYPtkHHX.js} +1 -1
- package/dist/ui/assets/proxy-status-widget-B4pFTeam.js +1 -0
- package/dist/ui/assets/shared-DBOiFFnj.js +1 -0
- package/dist/ui/assets/{switch-l6toeZhu.js → switch-DtGK4jP3.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/claude-detector.d.ts.map +1 -1
- package/dist/utils/claude-detector.js +42 -2
- package/dist/utils/claude-detector.js.map +1 -1
- package/dist/utils/config-manager.d.ts +11 -0
- package/dist/utils/config-manager.d.ts.map +1 -1
- package/dist/utils/config-manager.js +40 -1
- package/dist/utils/config-manager.js.map +1 -1
- package/dist/utils/error-manager.d.ts.map +1 -1
- package/dist/utils/error-manager.js +19 -6
- package/dist/utils/error-manager.js.map +1 -1
- 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 +17 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.js +71 -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 +149 -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 +251 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -0
- package/dist/utils/hooks/index.d.ts +11 -0
- package/dist/utils/hooks/index.d.ts.map +1 -0
- package/dist/utils/hooks/index.js +21 -0
- package/dist/utils/hooks/index.js.map +1 -0
- package/dist/utils/image-analysis/hook-installer.d.ts +19 -0
- package/dist/utils/image-analysis/hook-installer.d.ts.map +1 -0
- package/dist/utils/image-analysis/hook-installer.js +112 -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 +12 -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 +24 -1
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/utils/websearch/hook-config.d.ts +0 -4
- package/dist/utils/websearch/hook-config.d.ts.map +1 -1
- package/dist/utils/websearch/hook-config.js +2 -9
- package/dist/utils/websearch/hook-config.js.map +1 -1
- package/dist/utils/websearch/hook-installer.d.ts.map +1 -1
- package/dist/utils/websearch/hook-installer.js +2 -1
- package/dist/utils/websearch/hook-installer.js.map +1 -1
- package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -1
- package/dist/utils/websearch/profile-hook-injector.js +9 -3
- package/dist/utils/websearch/profile-hook-injector.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +13 -8
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/lib/hooks/image-analyzer-transformer.cjs +880 -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-8_6THoWM.css +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,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image Analysis Hook Environment Variables
|
|
4
|
+
*
|
|
5
|
+
* Provides environment variables for image analysis hook configuration.
|
|
6
|
+
* Hook routes image/PDF files through CLIProxy for vision analysis.
|
|
7
|
+
*
|
|
8
|
+
* @module utils/hooks/image-analysis-hook-env
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.getImageAnalysisHookEnv = void 0;
|
|
12
|
+
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
13
|
+
/**
|
|
14
|
+
* Serialize provider_models map to env var format: provider:model,provider:model
|
|
15
|
+
*/
|
|
16
|
+
function serializeProviderModels(providerModels) {
|
|
17
|
+
return Object.entries(providerModels)
|
|
18
|
+
.map(([provider, model]) => `${provider}:${model}`)
|
|
19
|
+
.join(',');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get image analysis hook environment variables.
|
|
23
|
+
* These env vars control the hook's behavior via Claude Code hook system.
|
|
24
|
+
*
|
|
25
|
+
* @param provider - Current CLIProxy provider (e.g., 'agy', 'gemini', 'codex')
|
|
26
|
+
* @returns Environment variables for image analysis hook
|
|
27
|
+
*/
|
|
28
|
+
function getImageAnalysisHookEnv(provider) {
|
|
29
|
+
const config = (0, unified_config_loader_1.getImageAnalysisConfig)();
|
|
30
|
+
// Check if current provider has a vision model configured
|
|
31
|
+
const hasVisionModel = provider && config.provider_models[provider];
|
|
32
|
+
const skipImageAnalysis = !config.enabled || !hasVisionModel;
|
|
33
|
+
return {
|
|
34
|
+
CCS_IMAGE_ANALYSIS_ENABLED: config.enabled ? '1' : '0',
|
|
35
|
+
CCS_IMAGE_ANALYSIS_TIMEOUT: String(Number(config.timeout) || 60),
|
|
36
|
+
CCS_IMAGE_ANALYSIS_PROVIDER_MODELS: serializeProviderModels(config.provider_models),
|
|
37
|
+
CCS_CURRENT_PROVIDER: provider || '',
|
|
38
|
+
CCS_IMAGE_ANALYSIS_SKIP: skipImageAnalysis ? '1' : '0',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
exports.getImageAnalysisHookEnv = getImageAnalysisHookEnv;
|
|
42
|
+
//# sourceMappingURL=get-image-analysis-hook-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-image-analysis-hook-env.js","sourceRoot":"","sources":["../../../src/utils/hooks/get-image-analysis-hook-env.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,8EAA4E;AAE5E;;GAEG;AACH,SAAS,uBAAuB,CAAC,cAAsC;IACrE,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,QAAiB;IACvD,MAAM,MAAM,GAAG,IAAA,8CAAsB,GAAE,CAAC;IAExC,0DAA0D;IAC1D,MAAM,cAAc,GAAG,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC;IAE7D,OAAO;QACL,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACtD,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChE,kCAAkC,EAAE,uBAAuB,CAAC,MAAM,CAAC,eAAe,CAAC;QACnF,oBAAoB,EAAE,QAAQ,IAAI,EAAE;QACpC,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KACvD,CAAC;AACJ,CAAC;AAdD,0DAcC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Analyzer Hook Configuration
|
|
3
|
+
*
|
|
4
|
+
* Manages hook configuration for image analysis in Claude settings.
|
|
5
|
+
*
|
|
6
|
+
* @module utils/hooks/image-analyzer-hook-config
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Get path to image analyzer hook
|
|
10
|
+
*/
|
|
11
|
+
export declare function getImageAnalyzerHookPath(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Get hook config for settings.json injection
|
|
14
|
+
* Timeout includes buffer for CLI overhead
|
|
15
|
+
*/
|
|
16
|
+
export declare function getImageAnalyzerHookConfig(): Record<string, unknown>;
|
|
17
|
+
//# sourceMappingURL=image-analyzer-hook-configuration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-hook-configuration.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-hook-configuration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBpE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image Analyzer Hook Configuration
|
|
4
|
+
*
|
|
5
|
+
* Manages hook configuration for image analysis in Claude settings.
|
|
6
|
+
*
|
|
7
|
+
* @module utils/hooks/image-analyzer-hook-config
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.getImageAnalyzerHookConfig = exports.getImageAnalyzerHookPath = void 0;
|
|
34
|
+
const path = __importStar(require("path"));
|
|
35
|
+
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
36
|
+
const config_manager_1 = require("../config-manager");
|
|
37
|
+
// Hook file name
|
|
38
|
+
const IMAGE_ANALYZER_HOOK = 'image-analyzer-transformer.cjs';
|
|
39
|
+
/**
|
|
40
|
+
* Get path to image analyzer hook
|
|
41
|
+
*/
|
|
42
|
+
function getImageAnalyzerHookPath() {
|
|
43
|
+
return path.join((0, config_manager_1.getCcsHooksDir)(), IMAGE_ANALYZER_HOOK);
|
|
44
|
+
}
|
|
45
|
+
exports.getImageAnalyzerHookPath = getImageAnalyzerHookPath;
|
|
46
|
+
/**
|
|
47
|
+
* Get hook config for settings.json injection
|
|
48
|
+
* Timeout includes buffer for CLI overhead
|
|
49
|
+
*/
|
|
50
|
+
function getImageAnalyzerHookConfig() {
|
|
51
|
+
const hookPath = getImageAnalyzerHookPath();
|
|
52
|
+
const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
|
|
53
|
+
// Add 5 second buffer to analysis timeout for hook execution overhead
|
|
54
|
+
const hookTimeout = imageConfig.timeout * 1000 + 5000;
|
|
55
|
+
return {
|
|
56
|
+
PreToolUse: [
|
|
57
|
+
{
|
|
58
|
+
matcher: 'Read',
|
|
59
|
+
hooks: [
|
|
60
|
+
{
|
|
61
|
+
type: 'command',
|
|
62
|
+
command: `node "${hookPath}"`,
|
|
63
|
+
timeout: hookTimeout,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.getImageAnalyzerHookConfig = getImageAnalyzerHookConfig;
|
|
71
|
+
//# sourceMappingURL=image-analyzer-hook-configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-hook-configuration.js","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-hook-configuration.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,8EAA4E;AAC5E,sDAAmD;AAEnD,iBAAiB;AACjB,MAAM,mBAAmB,GAAG,gCAAgC,CAAC;AAE7D;;GAEG;AACH,SAAgB,wBAAwB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,+BAAc,GAAE,EAAE,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AAFD,4DAEC;AAED;;;GAGG;AACH,SAAgB,0BAA0B;IACxC,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAA,8CAAsB,GAAE,CAAC;IAE7C,sEAAsE;IACtE,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;IAEtD,OAAO;QACL,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,SAAS,QAAQ,GAAG;wBAC7B,OAAO,EAAE,WAAW;qBACrB;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AArBD,gEAqBC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Analyzer Hook Installer
|
|
3
|
+
*
|
|
4
|
+
* Manages installation and uninstallation of the image analyzer hook.
|
|
5
|
+
* This hook intercepts Read tool calls and analyzes image files via CLIProxy.
|
|
6
|
+
*
|
|
7
|
+
* @module utils/hooks/image-analyzer-hook-installer
|
|
8
|
+
*/
|
|
9
|
+
export { getImageAnalyzerHookPath, getImageAnalyzerHookConfig, } from './image-analyzer-hook-configuration';
|
|
10
|
+
/**
|
|
11
|
+
* Check if image analyzer hook is installed
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasImageAnalyzerHook(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Install image analyzer hook to ~/.ccs/hooks/
|
|
16
|
+
*
|
|
17
|
+
* This hook intercepts Read calls and analyzes images via CLIProxy.
|
|
18
|
+
*
|
|
19
|
+
* @returns true if hook installed successfully
|
|
20
|
+
*/
|
|
21
|
+
export declare function installImageAnalyzerHook(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Uninstall image analyzer hook from ~/.ccs/hooks/
|
|
24
|
+
*
|
|
25
|
+
* Note: Does NOT touch global ~/.claude/settings.json.
|
|
26
|
+
* Profile-specific hooks are removed when ~/.ccs/ is deleted.
|
|
27
|
+
*
|
|
28
|
+
* @returns true if hook uninstalled successfully
|
|
29
|
+
*/
|
|
30
|
+
export declare function uninstallImageAnalyzerHook(): boolean;
|
|
31
|
+
//# sourceMappingURL=image-analyzer-hook-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-hook-installer.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-hook-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qCAAqC,CAAC;AAK7C;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CA+DlD;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAwBpD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image Analyzer Hook Installer
|
|
4
|
+
*
|
|
5
|
+
* Manages installation and uninstallation of the image analyzer hook.
|
|
6
|
+
* This hook intercepts Read tool calls and analyzes image files via CLIProxy.
|
|
7
|
+
*
|
|
8
|
+
* @module utils/hooks/image-analyzer-hook-installer
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.uninstallImageAnalyzerHook = exports.installImageAnalyzerHook = exports.hasImageAnalyzerHook = exports.getImageAnalyzerHookConfig = exports.getImageAnalyzerHookPath = void 0;
|
|
35
|
+
const fs = __importStar(require("fs"));
|
|
36
|
+
const path = __importStar(require("path"));
|
|
37
|
+
const ui_1 = require("../ui");
|
|
38
|
+
const image_analyzer_hook_configuration_1 = require("./image-analyzer-hook-configuration");
|
|
39
|
+
const config_manager_1 = require("../config-manager");
|
|
40
|
+
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
41
|
+
const image_analyzer_profile_hook_injector_1 = require("./image-analyzer-profile-hook-injector");
|
|
42
|
+
// Re-export from hook-configuration for backward compatibility
|
|
43
|
+
var image_analyzer_hook_configuration_2 = require("./image-analyzer-hook-configuration");
|
|
44
|
+
Object.defineProperty(exports, "getImageAnalyzerHookPath", { enumerable: true, get: function () { return image_analyzer_hook_configuration_2.getImageAnalyzerHookPath; } });
|
|
45
|
+
Object.defineProperty(exports, "getImageAnalyzerHookConfig", { enumerable: true, get: function () { return image_analyzer_hook_configuration_2.getImageAnalyzerHookConfig; } });
|
|
46
|
+
// Hook file name
|
|
47
|
+
const IMAGE_ANALYZER_HOOK = 'image-analyzer-transformer.cjs';
|
|
48
|
+
/**
|
|
49
|
+
* Check if image analyzer hook is installed
|
|
50
|
+
*/
|
|
51
|
+
function hasImageAnalyzerHook() {
|
|
52
|
+
return fs.existsSync((0, image_analyzer_hook_configuration_1.getImageAnalyzerHookPath)());
|
|
53
|
+
}
|
|
54
|
+
exports.hasImageAnalyzerHook = hasImageAnalyzerHook;
|
|
55
|
+
/**
|
|
56
|
+
* Install image analyzer hook to ~/.ccs/hooks/
|
|
57
|
+
*
|
|
58
|
+
* This hook intercepts Read calls and analyzes images via CLIProxy.
|
|
59
|
+
*
|
|
60
|
+
* @returns true if hook installed successfully
|
|
61
|
+
*/
|
|
62
|
+
function installImageAnalyzerHook() {
|
|
63
|
+
try {
|
|
64
|
+
const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
|
|
65
|
+
// Skip if disabled
|
|
66
|
+
if (!imageConfig.enabled) {
|
|
67
|
+
if (process.env.CCS_DEBUG) {
|
|
68
|
+
console.error((0, ui_1.info)('Image analysis disabled - skipping hook install'));
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// Ensure hooks directory exists
|
|
73
|
+
const hooksDir = (0, config_manager_1.getCcsHooksDir)();
|
|
74
|
+
if (!fs.existsSync(hooksDir)) {
|
|
75
|
+
fs.mkdirSync(hooksDir, { recursive: true, mode: 0o700 });
|
|
76
|
+
}
|
|
77
|
+
const hookPath = (0, image_analyzer_hook_configuration_1.getImageAnalyzerHookPath)();
|
|
78
|
+
// Find the bundled hook script
|
|
79
|
+
// In npm package: node_modules/ccs/lib/hooks/
|
|
80
|
+
// In development: lib/hooks/
|
|
81
|
+
const possiblePaths = [
|
|
82
|
+
path.join(__dirname, '..', '..', '..', 'lib', 'hooks', IMAGE_ANALYZER_HOOK),
|
|
83
|
+
path.join(__dirname, '..', '..', 'lib', 'hooks', IMAGE_ANALYZER_HOOK),
|
|
84
|
+
path.join(__dirname, '..', 'lib', 'hooks', IMAGE_ANALYZER_HOOK),
|
|
85
|
+
];
|
|
86
|
+
let sourcePath = null;
|
|
87
|
+
for (const p of possiblePaths) {
|
|
88
|
+
if (fs.existsSync(p)) {
|
|
89
|
+
sourcePath = p;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (!sourcePath) {
|
|
94
|
+
if (process.env.CCS_DEBUG) {
|
|
95
|
+
console.error((0, ui_1.warn)(`Image analyzer hook source not found: ${IMAGE_ANALYZER_HOOK}`));
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// Copy hook to ~/.ccs/hooks/
|
|
100
|
+
fs.copyFileSync(sourcePath, hookPath);
|
|
101
|
+
fs.chmodSync(hookPath, 0o755);
|
|
102
|
+
if (process.env.CCS_DEBUG) {
|
|
103
|
+
console.error((0, ui_1.info)(`Installed image analyzer hook: ${hookPath}`));
|
|
104
|
+
}
|
|
105
|
+
// Note: Hook registration is handled by ensureProfileHooks() in image-analyzer-profile-injector.ts
|
|
106
|
+
// which writes to per-profile settings (~/.ccs/<profile>.settings.json)
|
|
107
|
+
// Global settings (~/.claude/settings.json) are NOT modified here
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (process.env.CCS_DEBUG) {
|
|
112
|
+
console.error((0, ui_1.warn)(`Failed to install image analyzer hook: ${error.message}`));
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.installImageAnalyzerHook = installImageAnalyzerHook;
|
|
118
|
+
/**
|
|
119
|
+
* Uninstall image analyzer hook from ~/.ccs/hooks/
|
|
120
|
+
*
|
|
121
|
+
* Note: Does NOT touch global ~/.claude/settings.json.
|
|
122
|
+
* Profile-specific hooks are removed when ~/.ccs/ is deleted.
|
|
123
|
+
*
|
|
124
|
+
* @returns true if hook uninstalled successfully
|
|
125
|
+
*/
|
|
126
|
+
function uninstallImageAnalyzerHook() {
|
|
127
|
+
try {
|
|
128
|
+
const hookPath = (0, image_analyzer_hook_configuration_1.getImageAnalyzerHookPath)();
|
|
129
|
+
if (fs.existsSync(hookPath)) {
|
|
130
|
+
fs.unlinkSync(hookPath);
|
|
131
|
+
if (process.env.CCS_DEBUG) {
|
|
132
|
+
console.error((0, ui_1.info)(`Uninstalled image analyzer hook: ${hookPath}`));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Remove migration marker (so fresh install re-runs migration)
|
|
136
|
+
(0, image_analyzer_profile_hook_injector_1.removeMigrationMarker)();
|
|
137
|
+
// Note: Do NOT call removeHookConfig() - global settings should not be touched.
|
|
138
|
+
// Per-profile hooks in ~/.ccs/*.settings.json are cleaned up when ~/.ccs/ is deleted.
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (process.env.CCS_DEBUG) {
|
|
143
|
+
console.error((0, ui_1.warn)(`Failed to uninstall image analyzer hook: ${error.message}`));
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.uninstallImageAnalyzerHook = uninstallImageAnalyzerHook;
|
|
149
|
+
//# sourceMappingURL=image-analyzer-hook-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-hook-installer.js","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-hook-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Analyzer Profile Hook Injector
|
|
3
|
+
*
|
|
4
|
+
* Injects image analyzer hooks into per-profile settings files.
|
|
5
|
+
* This replaces the global ~/.claude/settings.json approach.
|
|
6
|
+
*
|
|
7
|
+
* Injects for profiles configured in image_analysis.provider_models.
|
|
8
|
+
*
|
|
9
|
+
* @module utils/hooks/image-analyzer-profile-injector
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Ensure image analyzer hook is configured in profile's settings file
|
|
13
|
+
*
|
|
14
|
+
* Only injects for CLIProxy profiles with vision support (agy, gemini).
|
|
15
|
+
*
|
|
16
|
+
* @param profileName - Name of the profile (e.g., 'agy', 'gemini')
|
|
17
|
+
* @returns true if hook is configured (existing or newly added)
|
|
18
|
+
*/
|
|
19
|
+
export declare function ensureProfileHooks(profileName: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Remove migration marker (called during uninstall)
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeMigrationMarker(): void;
|
|
24
|
+
//# sourceMappingURL=image-analyzer-profile-hook-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-profile-hook-injector.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-profile-hook-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqEH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CA0F/D;AA+DD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image Analyzer Profile Hook Injector
|
|
4
|
+
*
|
|
5
|
+
* Injects image analyzer hooks into per-profile settings files.
|
|
6
|
+
* This replaces the global ~/.claude/settings.json approach.
|
|
7
|
+
*
|
|
8
|
+
* Injects for profiles configured in image_analysis.provider_models.
|
|
9
|
+
*
|
|
10
|
+
* @module utils/hooks/image-analyzer-profile-injector
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.removeMigrationMarker = exports.ensureProfileHooks = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const ui_1 = require("../ui");
|
|
40
|
+
const image_analyzer_hook_configuration_1 = require("./image-analyzer-hook-configuration");
|
|
41
|
+
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
42
|
+
const config_manager_1 = require("../config-manager");
|
|
43
|
+
// Valid profile name pattern (alphanumeric, dash, underscore only)
|
|
44
|
+
const VALID_PROFILE_NAME = /^[a-zA-Z0-9_-]+$/;
|
|
45
|
+
/**
|
|
46
|
+
* Get migration marker path (respects CCS_HOME for test isolation)
|
|
47
|
+
*/
|
|
48
|
+
function getMigrationMarkerPath() {
|
|
49
|
+
return path.join((0, config_manager_1.getCcsDir)(), '.image-analyzer-hook-migrated');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if CCS image analyzer hook exists in settings
|
|
53
|
+
*/
|
|
54
|
+
function hasCcsHook(settings) {
|
|
55
|
+
const hooks = settings.hooks;
|
|
56
|
+
if (!hooks?.PreToolUse)
|
|
57
|
+
return false;
|
|
58
|
+
return hooks.PreToolUse.some((h) => {
|
|
59
|
+
const hook = h;
|
|
60
|
+
if (hook.matcher !== 'Read')
|
|
61
|
+
return false;
|
|
62
|
+
const hookArray = hook.hooks;
|
|
63
|
+
const command = hookArray?.[0]?.command;
|
|
64
|
+
if (typeof command !== 'string')
|
|
65
|
+
return false;
|
|
66
|
+
const normalized = command
|
|
67
|
+
.replace(/\\/g, '/') // Windows backslashes
|
|
68
|
+
.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
69
|
+
return normalized.includes('.ccs/hooks/image-analyzer-transformer');
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* One-time migration marker management
|
|
74
|
+
*/
|
|
75
|
+
function migrateGlobalHook() {
|
|
76
|
+
const markerPath = getMigrationMarkerPath();
|
|
77
|
+
if (fs.existsSync(markerPath)) {
|
|
78
|
+
return; // Already migrated
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
// No global hook to migrate (image analyzer is profile-only from the start)
|
|
82
|
+
// Just create marker to prevent future migration attempts
|
|
83
|
+
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
84
|
+
if (!fs.existsSync(ccsDir)) {
|
|
85
|
+
fs.mkdirSync(ccsDir, { recursive: true, mode: 0o700 });
|
|
86
|
+
}
|
|
87
|
+
// Create marker file atomically (wx = fail if exists, prevents race condition)
|
|
88
|
+
fs.writeFileSync(markerPath, new Date().toISOString(), { encoding: 'utf8', flag: 'wx' });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (process.env.CCS_DEBUG) {
|
|
92
|
+
console.error((0, ui_1.warn)(`Migration failed: ${error.message}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Ensure image analyzer hook is configured in profile's settings file
|
|
98
|
+
*
|
|
99
|
+
* Only injects for CLIProxy profiles with vision support (agy, gemini).
|
|
100
|
+
*
|
|
101
|
+
* @param profileName - Name of the profile (e.g., 'agy', 'gemini')
|
|
102
|
+
* @returns true if hook is configured (existing or newly added)
|
|
103
|
+
*/
|
|
104
|
+
function ensureProfileHooks(profileName) {
|
|
105
|
+
try {
|
|
106
|
+
// Validate profile name to prevent path traversal
|
|
107
|
+
if (!VALID_PROFILE_NAME.test(profileName)) {
|
|
108
|
+
if (process.env.CCS_DEBUG) {
|
|
109
|
+
console.error((0, ui_1.warn)(`Invalid profile name: ${profileName}`));
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const imageConfig = (0, unified_config_loader_1.getImageAnalysisConfig)();
|
|
114
|
+
// Only inject for profiles that have a model mapping in provider_models
|
|
115
|
+
// This allows dynamic extension without hardcoding profile names
|
|
116
|
+
const configuredProviders = Object.keys(imageConfig.provider_models);
|
|
117
|
+
if (!configuredProviders.includes(profileName)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Skip if image analysis is disabled
|
|
121
|
+
if (!imageConfig.enabled) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
// One-time migration marker
|
|
125
|
+
migrateGlobalHook();
|
|
126
|
+
// Get CCS directory (respects CCS_HOME for test isolation)
|
|
127
|
+
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
128
|
+
// Ensure CCS dir exists
|
|
129
|
+
if (!fs.existsSync(ccsDir)) {
|
|
130
|
+
fs.mkdirSync(ccsDir, { recursive: true, mode: 0o700 });
|
|
131
|
+
}
|
|
132
|
+
const settingsPath = path.join(ccsDir, `${profileName}.settings.json`);
|
|
133
|
+
// Read existing settings or create empty
|
|
134
|
+
let settings = {};
|
|
135
|
+
if (fs.existsSync(settingsPath)) {
|
|
136
|
+
try {
|
|
137
|
+
const content = fs.readFileSync(settingsPath, 'utf8');
|
|
138
|
+
settings = JSON.parse(content);
|
|
139
|
+
}
|
|
140
|
+
catch (parseError) {
|
|
141
|
+
if (process.env.CCS_DEBUG) {
|
|
142
|
+
console.error((0, ui_1.warn)(`Malformed ${profileName}.settings.json: ${parseError.message}`));
|
|
143
|
+
}
|
|
144
|
+
// Continue with empty settings, will add hooks
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Check if CCS hook already present
|
|
148
|
+
if (hasCcsHook(settings)) {
|
|
149
|
+
// Update timeout if needed
|
|
150
|
+
return updateHookTimeoutIfNeeded(settings, settingsPath);
|
|
151
|
+
}
|
|
152
|
+
// Get hook config
|
|
153
|
+
const hookConfig = (0, image_analyzer_hook_configuration_1.getImageAnalyzerHookConfig)();
|
|
154
|
+
// Ensure hooks structure exists
|
|
155
|
+
if (!settings.hooks) {
|
|
156
|
+
settings.hooks = {};
|
|
157
|
+
}
|
|
158
|
+
const settingsHooks = settings.hooks;
|
|
159
|
+
if (!settingsHooks.PreToolUse) {
|
|
160
|
+
settingsHooks.PreToolUse = [];
|
|
161
|
+
}
|
|
162
|
+
// Add CCS hook
|
|
163
|
+
const preToolUseHooks = hookConfig.PreToolUse;
|
|
164
|
+
settingsHooks.PreToolUse.push(...preToolUseHooks);
|
|
165
|
+
// Write updated settings
|
|
166
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
167
|
+
if (process.env.CCS_DEBUG) {
|
|
168
|
+
console.error((0, ui_1.info)(`Added image analyzer hook to ${profileName}.settings.json`));
|
|
169
|
+
}
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (process.env.CCS_DEBUG) {
|
|
174
|
+
console.error((0, ui_1.warn)(`Failed to inject hook: ${error.message}`));
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.ensureProfileHooks = ensureProfileHooks;
|
|
180
|
+
/**
|
|
181
|
+
* Update hook timeout if it differs from current config
|
|
182
|
+
*/
|
|
183
|
+
function updateHookTimeoutIfNeeded(settings, settingsPath) {
|
|
184
|
+
try {
|
|
185
|
+
const hooks = settings.hooks;
|
|
186
|
+
const hookConfig = (0, image_analyzer_hook_configuration_1.getImageAnalyzerHookConfig)();
|
|
187
|
+
const expectedHookPath = (0, image_analyzer_hook_configuration_1.getImageAnalyzerHookPath)();
|
|
188
|
+
const expectedCommand = `node "${expectedHookPath}"`;
|
|
189
|
+
const expectedHooks = hookConfig.PreToolUse[0]
|
|
190
|
+
.hooks;
|
|
191
|
+
const expectedTimeout = expectedHooks[0].timeout;
|
|
192
|
+
let needsUpdate = false;
|
|
193
|
+
for (const h of hooks.PreToolUse) {
|
|
194
|
+
const hook = h;
|
|
195
|
+
if (hook.matcher !== 'Read')
|
|
196
|
+
continue;
|
|
197
|
+
const hookArray = hook.hooks;
|
|
198
|
+
if (!hookArray?.[0]?.command)
|
|
199
|
+
continue;
|
|
200
|
+
const command = hookArray[0].command;
|
|
201
|
+
if (typeof command !== 'string')
|
|
202
|
+
continue;
|
|
203
|
+
// Normalize path separators for cross-platform matching (Windows uses backslashes)
|
|
204
|
+
const normalizedCommand = command
|
|
205
|
+
.replace(/\\/g, '/') // Windows backslashes
|
|
206
|
+
.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
207
|
+
if (!normalizedCommand.includes('.ccs/hooks/image-analyzer-transformer'))
|
|
208
|
+
continue;
|
|
209
|
+
// Found CCS hook - check if needs update
|
|
210
|
+
if (hookArray[0].command !== expectedCommand) {
|
|
211
|
+
hookArray[0].command = expectedCommand;
|
|
212
|
+
needsUpdate = true;
|
|
213
|
+
}
|
|
214
|
+
if (hookArray[0].timeout !== expectedTimeout) {
|
|
215
|
+
hookArray[0].timeout = expectedTimeout;
|
|
216
|
+
needsUpdate = true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (needsUpdate) {
|
|
220
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
221
|
+
if (process.env.CCS_DEBUG) {
|
|
222
|
+
console.error((0, ui_1.info)('Updated image analyzer hook timeout in profile settings'));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (process.env.CCS_DEBUG) {
|
|
229
|
+
console.error((0, ui_1.warn)(`updateHookTimeoutIfNeeded failed: ${error.message}`));
|
|
230
|
+
}
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Remove migration marker (called during uninstall)
|
|
236
|
+
*/
|
|
237
|
+
function removeMigrationMarker() {
|
|
238
|
+
try {
|
|
239
|
+
const markerPath = getMigrationMarkerPath();
|
|
240
|
+
if (fs.existsSync(markerPath)) {
|
|
241
|
+
fs.unlinkSync(markerPath);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
if (process.env.CCS_DEBUG) {
|
|
246
|
+
console.error((0, ui_1.warn)(`removeMigrationMarker failed: ${error.message}`));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
exports.removeMigrationMarker = removeMigrationMarker;
|
|
251
|
+
//# sourceMappingURL=image-analyzer-profile-hook-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-analyzer-profile-hook-injector.js","sourceRoot":"","sources":["../../../src/utils/hooks/image-analyzer-profile-hook-injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks Utilities Index
|
|
3
|
+
*
|
|
4
|
+
* Centralized exports for all hook-related utilities.
|
|
5
|
+
*
|
|
6
|
+
* @module utils/hooks
|
|
7
|
+
*/
|
|
8
|
+
export { getImageAnalysisHookEnv } from './get-image-analysis-hook-env';
|
|
9
|
+
export { getImageAnalyzerHookPath, getImageAnalyzerHookConfig, hasImageAnalyzerHook, installImageAnalyzerHook, uninstallImageAnalyzerHook, } from './image-analyzer-hook-installer';
|
|
10
|
+
export { ensureProfileHooks as ensureImageAnalyzerProfileHooks } from './image-analyzer-profile-hook-injector';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,IAAI,+BAA+B,EAAE,MAAM,wCAAwC,CAAC"}
|