@jonnyhoo/ccs 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +6 -0
- package/.claude/skills/ccs-delegation/SKILL.md +7 -7
- package/.claude/skills/ccs-delegation/references/troubleshooting.md +20 -20
- package/config/base-codex.settings.json +4 -4
- package/dist/api/services/profile-writer.d.ts +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +8 -9
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/auth/profile-detector.d.ts +3 -1
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +16 -17
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/ccs.js +303 -44
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/anthropic-to-openai-proxy.d.ts +58 -0
- package/dist/cliproxy/anthropic-to-openai-proxy.d.ts.map +1 -0
- package/dist/cliproxy/anthropic-to-openai-proxy.js +1660 -0
- package/dist/cliproxy/anthropic-to-openai-proxy.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +211 -48
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/codex-reasoning-proxy.d.ts +5 -0
- package/dist/cliproxy/codex-reasoning-proxy.d.ts.map +1 -1
- package/dist/cliproxy/codex-reasoning-proxy.js +6 -0
- package/dist/cliproxy/codex-reasoning-proxy.js.map +1 -1
- package/dist/cliproxy/config-generator.d.ts +10 -1
- package/dist/cliproxy/config-generator.d.ts.map +1 -1
- package/dist/cliproxy/config-generator.js +75 -5
- package/dist/cliproxy/config-generator.js.map +1 -1
- package/dist/cliproxy/endpoint-setup.d.ts +44 -0
- package/dist/cliproxy/endpoint-setup.d.ts.map +1 -0
- package/dist/cliproxy/endpoint-setup.js +299 -0
- package/dist/cliproxy/endpoint-setup.js.map +1 -0
- package/dist/cliproxy/index.d.ts +1 -1
- package/dist/cliproxy/index.d.ts.map +1 -1
- package/dist/cliproxy/index.js +4 -3
- package/dist/cliproxy/index.js.map +1 -1
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +12 -1
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.js +0 -5
- package/dist/cliproxy/services/variant-settings.js.map +1 -1
- package/dist/cliproxy/tool-name-sanitizer.d.ts +17 -21
- package/dist/cliproxy/tool-name-sanitizer.d.ts.map +1 -1
- package/dist/cliproxy/tool-name-sanitizer.js +46 -33
- package/dist/cliproxy/tool-name-sanitizer.js.map +1 -1
- package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/tool-sanitization-proxy.js +18 -1
- package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +21 -1
- package/dist/commands/api-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +15 -94
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/index.d.ts +0 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/install-command.d.ts.map +1 -1
- package/dist/commands/install-command.js +2 -9
- package/dist/commands/install-command.js.map +1 -1
- package/dist/commands/router.js +1 -1
- package/dist/commands/router.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts +0 -32
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +6 -95
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +3 -75
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +0 -20
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/delegation/background-monitor.d.ts +80 -0
- package/dist/delegation/background-monitor.d.ts.map +1 -0
- package/dist/delegation/background-monitor.js +295 -0
- package/dist/delegation/background-monitor.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +2 -1
- package/dist/delegation/delegation-handler.d.ts.map +1 -1
- package/dist/delegation/delegation-handler.js +48 -30
- package/dist/delegation/delegation-handler.js.map +1 -1
- package/dist/delegation/executor/types.d.ts +2 -0
- package/dist/delegation/executor/types.d.ts.map +1 -1
- package/dist/delegation/headless-executor.d.ts +3 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +162 -14
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/hello.d.ts +7 -0
- package/dist/hello.d.ts.map +1 -0
- package/dist/hello.js +13 -0
- package/dist/hello.js.map +1 -0
- package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
- package/dist/management/checks/image-analysis-check.js.map +1 -1
- package/dist/router/index.d.ts +3 -3
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/scenario-router.d.ts +2 -8
- package/dist/router/scenario-router.d.ts.map +1 -1
- package/dist/router/scenario-router.js +3 -22
- package/dist/router/scenario-router.js.map +1 -1
- package/dist/router/scenario-routing-proxy.d.ts.map +1 -1
- package/dist/router/scenario-routing-proxy.js +19 -4
- package/dist/router/scenario-routing-proxy.js.map +1 -1
- package/dist/router/settings-routing-executor.d.ts.map +1 -1
- package/dist/router/settings-routing-executor.js.map +1 -1
- package/dist/router/types.d.ts +1 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +1 -6
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/web-server/health/index.d.ts +0 -1
- package/dist/web-server/health/index.d.ts.map +1 -1
- package/dist/web-server/health/index.js +1 -4
- package/dist/web-server/health/index.js.map +1 -1
- package/dist/web-server/health-service.d.ts.map +1 -1
- package/dist/web-server/health-service.js +0 -4
- package/dist/web-server/health-service.js.map +1 -1
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +0 -3
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +0 -4
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/background-redis-bridge.js +320 -0
- package/scripts/monitor-task.js +313 -0
- package/dist/commands/cliproxy-command.d.ts +0 -21
- package/dist/commands/cliproxy-command.d.ts.map +0 -1
- package/dist/commands/cliproxy-command.js +0 -1099
- package/dist/commands/cliproxy-command.js.map +0 -1
- package/dist/commands/cliproxy-sync-handler.d.ts +0 -19
- package/dist/commands/cliproxy-sync-handler.d.ts.map +0 -1
- package/dist/commands/cliproxy-sync-handler.js +0 -99
- package/dist/commands/cliproxy-sync-handler.js.map +0 -1
- package/dist/utils/websearch/gemini-cli.d.ts +0 -36
- package/dist/utils/websearch/gemini-cli.d.ts.map +0 -1
- package/dist/utils/websearch/gemini-cli.js +0 -132
- package/dist/utils/websearch/gemini-cli.js.map +0 -1
- package/dist/utils/websearch/grok-cli.d.ts +0 -26
- package/dist/utils/websearch/grok-cli.d.ts.map +0 -1
- package/dist/utils/websearch/grok-cli.js +0 -81
- package/dist/utils/websearch/grok-cli.js.map +0 -1
- package/dist/utils/websearch/hook-config.d.ts +0 -27
- package/dist/utils/websearch/hook-config.d.ts.map +0 -1
- package/dist/utils/websearch/hook-config.js +0 -280
- package/dist/utils/websearch/hook-config.js.map +0 -1
- package/dist/utils/websearch/hook-env.d.ts +0 -16
- package/dist/utils/websearch/hook-env.d.ts.map +0 -1
- package/dist/utils/websearch/hook-env.js +0 -62
- package/dist/utils/websearch/hook-env.js.map +0 -1
- package/dist/utils/websearch/hook-installer.d.ts +0 -30
- package/dist/utils/websearch/hook-installer.d.ts.map +0 -1
- package/dist/utils/websearch/hook-installer.js +0 -148
- package/dist/utils/websearch/hook-installer.js.map +0 -1
- package/dist/utils/websearch/hook-utils.d.ts +0 -18
- package/dist/utils/websearch/hook-utils.d.ts.map +0 -1
- package/dist/utils/websearch/hook-utils.js +0 -59
- package/dist/utils/websearch/hook-utils.js.map +0 -1
- package/dist/utils/websearch/index.d.ts +0 -17
- package/dist/utils/websearch/index.d.ts.map +0 -1
- package/dist/utils/websearch/index.js +0 -51
- package/dist/utils/websearch/index.js.map +0 -1
- package/dist/utils/websearch/opencode-cli.d.ts +0 -26
- package/dist/utils/websearch/opencode-cli.d.ts.map +0 -1
- package/dist/utils/websearch/opencode-cli.js +0 -81
- package/dist/utils/websearch/opencode-cli.js.map +0 -1
- package/dist/utils/websearch/profile-hook-injector.d.ts +0 -20
- package/dist/utils/websearch/profile-hook-injector.d.ts.map +0 -1
- package/dist/utils/websearch/profile-hook-injector.js +0 -250
- package/dist/utils/websearch/profile-hook-injector.js.map +0 -1
- package/dist/utils/websearch/status.d.ts +0 -36
- package/dist/utils/websearch/status.d.ts.map +0 -1
- package/dist/utils/websearch/status.js +0 -192
- package/dist/utils/websearch/status.js.map +0 -1
- package/dist/utils/websearch/types.d.ts +0 -85
- package/dist/utils/websearch/types.d.ts.map +0 -1
- package/dist/utils/websearch/types.js +0 -10
- package/dist/utils/websearch/types.js.map +0 -1
- package/dist/utils/websearch-manager.d.ts +0 -31
- package/dist/utils/websearch-manager.d.ts.map +0 -1
- package/dist/utils/websearch-manager.js +0 -72
- package/dist/utils/websearch-manager.js.map +0 -1
- package/dist/web-server/health/websearch-checks.d.ts +0 -11
- package/dist/web-server/health/websearch-checks.d.ts.map +0 -1
- package/dist/web-server/health/websearch-checks.js +0 -53
- package/dist/web-server/health/websearch-checks.js.map +0 -1
- package/dist/web-server/routes/websearch-routes.d.ts +0 -6
- package/dist/web-server/routes/websearch-routes.d.ts.map +0 -1
- package/dist/web-server/routes/websearch-routes.js +0 -130
- package/dist/web-server/routes/websearch-routes.js.map +0 -1
- package/lib/hooks/block-websearch.cjs +0 -75
- package/lib/hooks/websearch-transformer.cjs +0 -632
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* WebSearch Hook Configuration
|
|
4
|
-
*
|
|
5
|
-
* Manages hook configuration in Claude settings.json.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/websearch/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.removeHookConfig = exports.ensureHookConfig = exports.getWebSearchHookConfig = exports.getHookPath = void 0;
|
|
34
|
-
const fs = __importStar(require("fs"));
|
|
35
|
-
const path = __importStar(require("path"));
|
|
36
|
-
const os = __importStar(require("os"));
|
|
37
|
-
const ui_1 = require("../ui");
|
|
38
|
-
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
39
|
-
const config_manager_1 = require("../config-manager");
|
|
40
|
-
const hook_utils_1 = require("./hook-utils");
|
|
41
|
-
// Hook file name
|
|
42
|
-
const WEBSEARCH_HOOK = 'websearch-transformer.cjs';
|
|
43
|
-
/**
|
|
44
|
-
* Get Claude settings path (respects CCS_HOME for test isolation)
|
|
45
|
-
* In tests, returns path under CCS_HOME; in production, uses real ~/.claude/
|
|
46
|
-
*/
|
|
47
|
-
function getClaudeSettingsPath() {
|
|
48
|
-
const ccsHome = process.env.CCS_HOME;
|
|
49
|
-
if (ccsHome) {
|
|
50
|
-
// Test mode: use CCS_HOME parent for .claude directory
|
|
51
|
-
// This prevents tests from modifying user's real settings
|
|
52
|
-
return path.join(path.dirname(ccsHome), '.claude', 'settings.json');
|
|
53
|
-
}
|
|
54
|
-
// Production: use real home directory
|
|
55
|
-
return path.join(os.homedir(), '.claude', 'settings.json');
|
|
56
|
-
}
|
|
57
|
-
// Buffer time added to max provider timeout for hook timeout (seconds)
|
|
58
|
-
const HOOK_TIMEOUT_BUFFER = 30;
|
|
59
|
-
// Minimum hook timeout in seconds (fallback if no providers configured)
|
|
60
|
-
const MIN_HOOK_TIMEOUT = 60;
|
|
61
|
-
/**
|
|
62
|
-
* Get path to WebSearch hook
|
|
63
|
-
*/
|
|
64
|
-
function getHookPath() {
|
|
65
|
-
return path.join((0, config_manager_1.getCcsHooksDir)(), WEBSEARCH_HOOK);
|
|
66
|
-
}
|
|
67
|
-
exports.getHookPath = getHookPath;
|
|
68
|
-
/**
|
|
69
|
-
* Get WebSearch hook configuration for settings.json
|
|
70
|
-
* Timeout is computed from max provider timeout in config.yaml + buffer
|
|
71
|
-
*/
|
|
72
|
-
function getWebSearchHookConfig() {
|
|
73
|
-
const hookPath = getHookPath();
|
|
74
|
-
const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
|
|
75
|
-
// Compute max timeout from enabled providers
|
|
76
|
-
const timeouts = [];
|
|
77
|
-
if (wsConfig.providers?.gemini?.enabled && wsConfig.providers.gemini.timeout) {
|
|
78
|
-
timeouts.push(wsConfig.providers.gemini.timeout);
|
|
79
|
-
}
|
|
80
|
-
if (wsConfig.providers?.opencode?.enabled && wsConfig.providers.opencode.timeout) {
|
|
81
|
-
timeouts.push(wsConfig.providers.opencode.timeout);
|
|
82
|
-
}
|
|
83
|
-
if (wsConfig.providers?.grok?.enabled && wsConfig.providers.grok.timeout) {
|
|
84
|
-
timeouts.push(wsConfig.providers.grok.timeout);
|
|
85
|
-
}
|
|
86
|
-
// Hook timeout = max provider timeout + buffer (or minimum if none configured)
|
|
87
|
-
const maxProviderTimeout = timeouts.length > 0 ? Math.max(...timeouts) : MIN_HOOK_TIMEOUT;
|
|
88
|
-
const hookTimeout = maxProviderTimeout + HOOK_TIMEOUT_BUFFER;
|
|
89
|
-
return {
|
|
90
|
-
PreToolUse: [
|
|
91
|
-
{
|
|
92
|
-
matcher: 'WebSearch',
|
|
93
|
-
hooks: [
|
|
94
|
-
{
|
|
95
|
-
type: 'command',
|
|
96
|
-
command: `node "${hookPath}"`,
|
|
97
|
-
timeout: hookTimeout,
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
],
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
exports.getWebSearchHookConfig = getWebSearchHookConfig;
|
|
105
|
-
/**
|
|
106
|
-
* Ensure WebSearch hook is configured in ~/.claude/settings.json
|
|
107
|
-
*/
|
|
108
|
-
function ensureHookConfig() {
|
|
109
|
-
try {
|
|
110
|
-
const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
|
|
111
|
-
if (!wsConfig.enabled) {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
// Read existing settings or start fresh
|
|
115
|
-
let settings = {};
|
|
116
|
-
if (fs.existsSync(getClaudeSettingsPath())) {
|
|
117
|
-
try {
|
|
118
|
-
const content = fs.readFileSync(getClaudeSettingsPath(), 'utf8');
|
|
119
|
-
settings = JSON.parse(content);
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
if (process.env.CCS_DEBUG) {
|
|
123
|
-
console.error((0, ui_1.warn)('Malformed settings.json - will merge carefully'));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Check if WebSearch hook already configured
|
|
128
|
-
const hooks = settings.hooks;
|
|
129
|
-
const expectedHookPath = getHookPath();
|
|
130
|
-
const expectedCommand = `node "${expectedHookPath}"`;
|
|
131
|
-
if (hooks?.PreToolUse) {
|
|
132
|
-
const webSearchHookIndex = hooks.PreToolUse.findIndex((h) => {
|
|
133
|
-
const hook = h;
|
|
134
|
-
if (hook.matcher !== 'WebSearch')
|
|
135
|
-
return false;
|
|
136
|
-
const hookArray = hook.hooks;
|
|
137
|
-
const command = hookArray?.[0]?.command;
|
|
138
|
-
if (typeof command !== 'string')
|
|
139
|
-
return false;
|
|
140
|
-
const normalized = command
|
|
141
|
-
.replace(/\\/g, '/') // Windows backslashes
|
|
142
|
-
.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
143
|
-
return normalized.includes('.ccs/hooks/websearch-transformer');
|
|
144
|
-
});
|
|
145
|
-
if (webSearchHookIndex !== -1) {
|
|
146
|
-
// Hook exists - first clean up any duplicates
|
|
147
|
-
// INVARIANT: webSearchHookIndex remains valid after deduplication because:
|
|
148
|
-
// - findIndex() returns the FIRST matching CCS hook
|
|
149
|
-
// - deduplicateCcsHooks() keeps the FIRST CCS hook and removes subsequent duplicates
|
|
150
|
-
// This means the index always points to the preserved hook.
|
|
151
|
-
const hadDuplicates = (0, hook_utils_1.deduplicateCcsHooks)(settings);
|
|
152
|
-
// Then check if it needs updating
|
|
153
|
-
const existingHook = hooks.PreToolUse[webSearchHookIndex];
|
|
154
|
-
const existingHooks = existingHook.hooks;
|
|
155
|
-
const currentHookConfig = getWebSearchHookConfig();
|
|
156
|
-
const expectedHooks = currentHookConfig.PreToolUse[0]
|
|
157
|
-
.hooks;
|
|
158
|
-
const expectedTimeout = expectedHooks[0].timeout;
|
|
159
|
-
let needsUpdate = false;
|
|
160
|
-
if (existingHooks?.[0]?.command !== expectedCommand) {
|
|
161
|
-
existingHooks[0].command = expectedCommand;
|
|
162
|
-
needsUpdate = true;
|
|
163
|
-
}
|
|
164
|
-
if (existingHooks?.[0]?.timeout !== expectedTimeout) {
|
|
165
|
-
existingHooks[0].timeout = expectedTimeout;
|
|
166
|
-
needsUpdate = true;
|
|
167
|
-
}
|
|
168
|
-
// Combine into single write if either changed
|
|
169
|
-
if (hadDuplicates || needsUpdate) {
|
|
170
|
-
fs.writeFileSync(getClaudeSettingsPath(), JSON.stringify(settings, null, 2), 'utf8');
|
|
171
|
-
if (process.env.CCS_DEBUG) {
|
|
172
|
-
if (hadDuplicates)
|
|
173
|
-
console.error((0, ui_1.info)('Removed duplicate WebSearch hooks from settings.json'));
|
|
174
|
-
if (needsUpdate)
|
|
175
|
-
console.error((0, ui_1.info)('Updated WebSearch hook config in settings.json'));
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
// Get hook config
|
|
182
|
-
const hookConfig = getWebSearchHookConfig();
|
|
183
|
-
// Merge hook config into settings
|
|
184
|
-
if (!settings.hooks) {
|
|
185
|
-
settings.hooks = {};
|
|
186
|
-
}
|
|
187
|
-
const settingsHooks = settings.hooks;
|
|
188
|
-
if (!settingsHooks.PreToolUse) {
|
|
189
|
-
settingsHooks.PreToolUse = [];
|
|
190
|
-
}
|
|
191
|
-
// Remove any existing CCS hooks first to prevent duplicates
|
|
192
|
-
settingsHooks.PreToolUse = settingsHooks.PreToolUse.filter((h) => {
|
|
193
|
-
const hook = h;
|
|
194
|
-
return !(0, hook_utils_1.isCcsWebSearchHook)(hook);
|
|
195
|
-
});
|
|
196
|
-
// Add our hook config
|
|
197
|
-
const preToolUseHooks = hookConfig.PreToolUse;
|
|
198
|
-
settingsHooks.PreToolUse.push(...preToolUseHooks);
|
|
199
|
-
// Ensure ~/.claude directory exists
|
|
200
|
-
const claudeDir = path.dirname(getClaudeSettingsPath());
|
|
201
|
-
if (!fs.existsSync(claudeDir)) {
|
|
202
|
-
fs.mkdirSync(claudeDir, { recursive: true, mode: 0o700 });
|
|
203
|
-
}
|
|
204
|
-
// Write updated settings
|
|
205
|
-
fs.writeFileSync(getClaudeSettingsPath(), JSON.stringify(settings, null, 2), 'utf8');
|
|
206
|
-
if (process.env.CCS_DEBUG) {
|
|
207
|
-
console.error((0, ui_1.info)('Added WebSearch hook to settings.json'));
|
|
208
|
-
}
|
|
209
|
-
return true;
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
if (process.env.CCS_DEBUG) {
|
|
213
|
-
console.error((0, ui_1.warn)(`Failed to configure WebSearch hook: ${error.message}`));
|
|
214
|
-
}
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
exports.ensureHookConfig = ensureHookConfig;
|
|
219
|
-
/**
|
|
220
|
-
* Remove CCS WebSearch hook from ~/.claude/settings.json
|
|
221
|
-
* Only removes hooks matching: matcher='WebSearch' AND command contains '.ccs/hooks/websearch-transformer'
|
|
222
|
-
* Preserves user-defined WebSearch hooks
|
|
223
|
-
*/
|
|
224
|
-
function removeHookConfig() {
|
|
225
|
-
try {
|
|
226
|
-
if (!fs.existsSync(getClaudeSettingsPath())) {
|
|
227
|
-
return true; // Nothing to remove
|
|
228
|
-
}
|
|
229
|
-
const content = fs.readFileSync(getClaudeSettingsPath(), 'utf8');
|
|
230
|
-
let settings;
|
|
231
|
-
try {
|
|
232
|
-
settings = JSON.parse(content);
|
|
233
|
-
}
|
|
234
|
-
catch {
|
|
235
|
-
return false; // Malformed JSON, don't touch
|
|
236
|
-
}
|
|
237
|
-
const hooks = settings.hooks;
|
|
238
|
-
if (!hooks?.PreToolUse) {
|
|
239
|
-
return true; // No hooks to remove
|
|
240
|
-
}
|
|
241
|
-
const originalLength = hooks.PreToolUse.length;
|
|
242
|
-
hooks.PreToolUse = hooks.PreToolUse.filter((h) => {
|
|
243
|
-
const hook = h;
|
|
244
|
-
if (hook.matcher !== 'WebSearch')
|
|
245
|
-
return true; // Keep non-WebSearch hooks
|
|
246
|
-
const hookArray = hook.hooks;
|
|
247
|
-
if (!hookArray?.[0]?.command)
|
|
248
|
-
return true; // Keep malformed entries
|
|
249
|
-
const command = hookArray[0].command;
|
|
250
|
-
// Normalize path separators for cross-platform matching (Windows uses backslashes)
|
|
251
|
-
const normalizedCommand = command
|
|
252
|
-
.replace(/\\/g, '/') // Windows backslashes
|
|
253
|
-
.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
254
|
-
return !normalizedCommand.includes('.ccs/hooks/websearch-transformer'); // Remove if CCS hook
|
|
255
|
-
});
|
|
256
|
-
if (hooks.PreToolUse.length === originalLength) {
|
|
257
|
-
return true; // Nothing changed
|
|
258
|
-
}
|
|
259
|
-
// Clean up empty hooks object
|
|
260
|
-
if (hooks.PreToolUse.length === 0) {
|
|
261
|
-
delete hooks.PreToolUse;
|
|
262
|
-
}
|
|
263
|
-
if (Object.keys(hooks).length === 0) {
|
|
264
|
-
delete settings.hooks;
|
|
265
|
-
}
|
|
266
|
-
fs.writeFileSync(getClaudeSettingsPath(), JSON.stringify(settings, null, 2), 'utf8');
|
|
267
|
-
if (process.env.CCS_DEBUG) {
|
|
268
|
-
console.error((0, ui_1.info)('Removed WebSearch hook from settings.json'));
|
|
269
|
-
}
|
|
270
|
-
return true;
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
if (process.env.CCS_DEBUG) {
|
|
274
|
-
console.error((0, ui_1.warn)(`Failed to remove hook config: ${error.message}`));
|
|
275
|
-
}
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
exports.removeHookConfig = removeHookConfig;
|
|
280
|
-
//# sourceMappingURL=hook-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-config.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSearch Hook Environment Variables
|
|
3
|
-
*
|
|
4
|
-
* Provides environment variables for WebSearch hook configuration.
|
|
5
|
-
*
|
|
6
|
-
* @module utils/websearch/hook-env
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Get environment variables for WebSearch hook configuration.
|
|
10
|
-
*
|
|
11
|
-
* Simple env vars - hook reads these to control behavior.
|
|
12
|
-
*
|
|
13
|
-
* @returns Record of environment variables to set before spawning Claude
|
|
14
|
-
*/
|
|
15
|
-
export declare function getWebSearchHookEnv(): Record<string, string>;
|
|
16
|
-
//# sourceMappingURL=hook-env.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-env.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgD5D"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* WebSearch Hook Environment Variables
|
|
4
|
-
*
|
|
5
|
-
* Provides environment variables for WebSearch hook configuration.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/websearch/hook-env
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.getWebSearchHookEnv = void 0;
|
|
11
|
-
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
12
|
-
/**
|
|
13
|
-
* Get environment variables for WebSearch hook configuration.
|
|
14
|
-
*
|
|
15
|
-
* Simple env vars - hook reads these to control behavior.
|
|
16
|
-
*
|
|
17
|
-
* @returns Record of environment variables to set before spawning Claude
|
|
18
|
-
*/
|
|
19
|
-
function getWebSearchHookEnv() {
|
|
20
|
-
const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
|
|
21
|
-
const env = {};
|
|
22
|
-
// Skip hook entirely if disabled
|
|
23
|
-
if (!wsConfig.enabled) {
|
|
24
|
-
env.CCS_WEBSEARCH_SKIP = '1';
|
|
25
|
-
return env;
|
|
26
|
-
}
|
|
27
|
-
// Pass master switch
|
|
28
|
-
env.CCS_WEBSEARCH_ENABLED = '1';
|
|
29
|
-
// Pass individual provider enabled states
|
|
30
|
-
// Hook will only use providers that are BOTH enabled AND installed
|
|
31
|
-
if (wsConfig.providers?.gemini?.enabled) {
|
|
32
|
-
env.CCS_WEBSEARCH_GEMINI = '1';
|
|
33
|
-
if (wsConfig.providers.gemini.model) {
|
|
34
|
-
env.CCS_WEBSEARCH_GEMINI_MODEL = wsConfig.providers.gemini.model;
|
|
35
|
-
}
|
|
36
|
-
env.CCS_WEBSEARCH_TIMEOUT = String(wsConfig.providers.gemini.timeout || 55);
|
|
37
|
-
}
|
|
38
|
-
if (wsConfig.providers?.opencode?.enabled) {
|
|
39
|
-
env.CCS_WEBSEARCH_OPENCODE = '1';
|
|
40
|
-
if (wsConfig.providers.opencode.model) {
|
|
41
|
-
env.CCS_WEBSEARCH_OPENCODE_MODEL = wsConfig.providers.opencode.model;
|
|
42
|
-
}
|
|
43
|
-
// Use opencode timeout if no gemini timeout set
|
|
44
|
-
if (!env.CCS_WEBSEARCH_TIMEOUT) {
|
|
45
|
-
env.CCS_WEBSEARCH_TIMEOUT = String(wsConfig.providers.opencode.timeout || 90);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (wsConfig.providers?.grok?.enabled) {
|
|
49
|
-
env.CCS_WEBSEARCH_GROK = '1';
|
|
50
|
-
// Use grok timeout if no other timeout set
|
|
51
|
-
if (!env.CCS_WEBSEARCH_TIMEOUT) {
|
|
52
|
-
env.CCS_WEBSEARCH_TIMEOUT = String(wsConfig.providers.grok.timeout || 55);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Default timeout if none set
|
|
56
|
-
if (!env.CCS_WEBSEARCH_TIMEOUT) {
|
|
57
|
-
env.CCS_WEBSEARCH_TIMEOUT = '55';
|
|
58
|
-
}
|
|
59
|
-
return env;
|
|
60
|
-
}
|
|
61
|
-
exports.getWebSearchHookEnv = getWebSearchHookEnv;
|
|
62
|
-
//# sourceMappingURL=hook-env.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-env.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,8EAAwE;AAExE;;;;;;GAMG;AACH,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAA,0CAAkB,GAAE,CAAC;IACtC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,iCAAiC;IACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qBAAqB;IACrB,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IAEhC,0CAA0C;IAC1C,mEAAmE;IACnE,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACxC,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAC/B,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,GAAG,CAAC,0BAA0B,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QACnE,CAAC;QACD,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC1C,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACjC,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtC,GAAG,CAAC,4BAA4B,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvE,CAAC;QACD,gDAAgD;QAChD,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/B,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACtC,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAC7B,2CAA2C;QAC3C,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/B,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC/B,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAhDD,kDAgDC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSearch Hook Installer
|
|
3
|
-
*
|
|
4
|
-
* Manages installation and uninstallation of the WebSearch hook.
|
|
5
|
-
*
|
|
6
|
-
* @module utils/websearch/hook-installer
|
|
7
|
-
*/
|
|
8
|
-
export { getHookPath, getWebSearchHookConfig } from './hook-config';
|
|
9
|
-
/**
|
|
10
|
-
* Check if WebSearch hook is installed
|
|
11
|
-
*/
|
|
12
|
-
export declare function hasWebSearchHook(): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Install WebSearch hook to ~/.ccs/hooks/
|
|
15
|
-
*
|
|
16
|
-
* This hook intercepts WebSearch and executes via Gemini CLI.
|
|
17
|
-
*
|
|
18
|
-
* @returns true if hook installed successfully
|
|
19
|
-
*/
|
|
20
|
-
export declare function installWebSearchHook(): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Uninstall WebSearch hook from ~/.ccs/hooks/
|
|
23
|
-
*
|
|
24
|
-
* Note: Does NOT touch global ~/.claude/settings.json.
|
|
25
|
-
* Profile-specific hooks are removed when ~/.ccs/ is deleted.
|
|
26
|
-
*
|
|
27
|
-
* @returns true if hook uninstalled successfully
|
|
28
|
-
*/
|
|
29
|
-
export declare function uninstallWebSearchHook(): boolean;
|
|
30
|
-
//# sourceMappingURL=hook-installer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/hook-installer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAKpE;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CA+D9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAwBhD"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* WebSearch Hook Installer
|
|
4
|
-
*
|
|
5
|
-
* Manages installation and uninstallation of the WebSearch hook.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/websearch/hook-installer
|
|
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.uninstallWebSearchHook = exports.installWebSearchHook = exports.hasWebSearchHook = exports.getWebSearchHookConfig = exports.getHookPath = void 0;
|
|
34
|
-
const fs = __importStar(require("fs"));
|
|
35
|
-
const path = __importStar(require("path"));
|
|
36
|
-
const ui_1 = require("../ui");
|
|
37
|
-
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
38
|
-
const config_manager_1 = require("../config-manager");
|
|
39
|
-
const hook_config_1 = require("./hook-config");
|
|
40
|
-
const profile_hook_injector_1 = require("./profile-hook-injector");
|
|
41
|
-
// Re-export from hook-config for backward compatibility
|
|
42
|
-
var hook_config_2 = require("./hook-config");
|
|
43
|
-
Object.defineProperty(exports, "getHookPath", { enumerable: true, get: function () { return hook_config_2.getHookPath; } });
|
|
44
|
-
Object.defineProperty(exports, "getWebSearchHookConfig", { enumerable: true, get: function () { return hook_config_2.getWebSearchHookConfig; } });
|
|
45
|
-
// Hook file name
|
|
46
|
-
const WEBSEARCH_HOOK = 'websearch-transformer.cjs';
|
|
47
|
-
/**
|
|
48
|
-
* Check if WebSearch hook is installed
|
|
49
|
-
*/
|
|
50
|
-
function hasWebSearchHook() {
|
|
51
|
-
return fs.existsSync((0, hook_config_1.getHookPath)());
|
|
52
|
-
}
|
|
53
|
-
exports.hasWebSearchHook = hasWebSearchHook;
|
|
54
|
-
/**
|
|
55
|
-
* Install WebSearch hook to ~/.ccs/hooks/
|
|
56
|
-
*
|
|
57
|
-
* This hook intercepts WebSearch and executes via Gemini CLI.
|
|
58
|
-
*
|
|
59
|
-
* @returns true if hook installed successfully
|
|
60
|
-
*/
|
|
61
|
-
function installWebSearchHook() {
|
|
62
|
-
try {
|
|
63
|
-
const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
|
|
64
|
-
// Skip if disabled
|
|
65
|
-
if (!wsConfig.enabled) {
|
|
66
|
-
if (process.env.CCS_DEBUG) {
|
|
67
|
-
console.error((0, ui_1.info)('WebSearch disabled - skipping hook install'));
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
// Ensure hooks directory exists
|
|
72
|
-
const hooksDir = (0, config_manager_1.getCcsHooksDir)();
|
|
73
|
-
if (!fs.existsSync(hooksDir)) {
|
|
74
|
-
fs.mkdirSync(hooksDir, { recursive: true, mode: 0o700 });
|
|
75
|
-
}
|
|
76
|
-
const hookPath = (0, hook_config_1.getHookPath)();
|
|
77
|
-
// Find the bundled hook script
|
|
78
|
-
// In npm package: node_modules/ccs/lib/hooks/
|
|
79
|
-
// In development: lib/hooks/
|
|
80
|
-
const possiblePaths = [
|
|
81
|
-
path.join(__dirname, '..', '..', '..', 'lib', 'hooks', WEBSEARCH_HOOK),
|
|
82
|
-
path.join(__dirname, '..', '..', 'lib', 'hooks', WEBSEARCH_HOOK),
|
|
83
|
-
path.join(__dirname, '..', 'lib', 'hooks', WEBSEARCH_HOOK),
|
|
84
|
-
];
|
|
85
|
-
let sourcePath = null;
|
|
86
|
-
for (const p of possiblePaths) {
|
|
87
|
-
if (fs.existsSync(p)) {
|
|
88
|
-
sourcePath = p;
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (!sourcePath) {
|
|
93
|
-
if (process.env.CCS_DEBUG) {
|
|
94
|
-
console.error((0, ui_1.warn)(`WebSearch hook source not found: ${WEBSEARCH_HOOK}`));
|
|
95
|
-
}
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
// Copy hook to ~/.ccs/hooks/
|
|
99
|
-
fs.copyFileSync(sourcePath, hookPath);
|
|
100
|
-
fs.chmodSync(hookPath, 0o755);
|
|
101
|
-
if (process.env.CCS_DEBUG) {
|
|
102
|
-
console.error((0, ui_1.info)(`Installed WebSearch hook: ${hookPath}`));
|
|
103
|
-
}
|
|
104
|
-
// Note: Hook registration is handled by ensureProfileHooks() in profile-hook-injector.ts
|
|
105
|
-
// which writes to per-profile settings (~/.ccs/<profile>.settings.json)
|
|
106
|
-
// Global settings (~/.claude/settings.json) are NOT modified here
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
if (process.env.CCS_DEBUG) {
|
|
111
|
-
console.error((0, ui_1.warn)(`Failed to install WebSearch hook: ${error.message}`));
|
|
112
|
-
}
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.installWebSearchHook = installWebSearchHook;
|
|
117
|
-
/**
|
|
118
|
-
* Uninstall WebSearch hook from ~/.ccs/hooks/
|
|
119
|
-
*
|
|
120
|
-
* Note: Does NOT touch global ~/.claude/settings.json.
|
|
121
|
-
* Profile-specific hooks are removed when ~/.ccs/ is deleted.
|
|
122
|
-
*
|
|
123
|
-
* @returns true if hook uninstalled successfully
|
|
124
|
-
*/
|
|
125
|
-
function uninstallWebSearchHook() {
|
|
126
|
-
try {
|
|
127
|
-
const hookPath = (0, hook_config_1.getHookPath)();
|
|
128
|
-
if (fs.existsSync(hookPath)) {
|
|
129
|
-
fs.unlinkSync(hookPath);
|
|
130
|
-
if (process.env.CCS_DEBUG) {
|
|
131
|
-
console.error((0, ui_1.info)(`Uninstalled WebSearch hook: ${hookPath}`));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// Remove migration marker (so fresh install re-runs migration)
|
|
135
|
-
(0, profile_hook_injector_1.removeMigrationMarker)();
|
|
136
|
-
// Note: Do NOT call removeHookConfig() - global settings should not be touched.
|
|
137
|
-
// Per-profile hooks in ~/.ccs/*.settings.json are cleaned up when ~/.ccs/ is deleted.
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
if (process.env.CCS_DEBUG) {
|
|
142
|
-
console.error((0, ui_1.warn)(`Failed to uninstall WebSearch hook: ${error.message}`));
|
|
143
|
-
}
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
exports.uninstallWebSearchHook = uninstallWebSearchHook;
|
|
148
|
-
//# sourceMappingURL=hook-installer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSearch Hook Utilities
|
|
3
|
-
*
|
|
4
|
-
* Shared helper functions for WebSearch hook detection and deduplication.
|
|
5
|
-
*
|
|
6
|
-
* @module utils/websearch/hook-utils
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Check if a hook entry is a CCS WebSearch hook
|
|
10
|
-
* Normalizes path separators for cross-platform matching (Windows uses backslashes)
|
|
11
|
-
*/
|
|
12
|
-
export declare function isCcsWebSearchHook(hook: Record<string, unknown>): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Remove duplicate CCS WebSearch hooks from settings, keeping only the first one
|
|
15
|
-
* Returns true if duplicates were removed
|
|
16
|
-
*/
|
|
17
|
-
export declare function deduplicateCcsHooks(settings: Record<string, unknown>): boolean;
|
|
18
|
-
//# sourceMappingURL=hook-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/hook-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAczE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAyB9E"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* WebSearch Hook Utilities
|
|
4
|
-
*
|
|
5
|
-
* Shared helper functions for WebSearch hook detection and deduplication.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/websearch/hook-utils
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.deduplicateCcsHooks = exports.isCcsWebSearchHook = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* Check if a hook entry is a CCS WebSearch hook
|
|
13
|
-
* Normalizes path separators for cross-platform matching (Windows uses backslashes)
|
|
14
|
-
*/
|
|
15
|
-
function isCcsWebSearchHook(hook) {
|
|
16
|
-
if (hook.matcher !== 'WebSearch')
|
|
17
|
-
return false;
|
|
18
|
-
const hookArray = hook.hooks;
|
|
19
|
-
if (!hookArray?.[0]?.command)
|
|
20
|
-
return false;
|
|
21
|
-
const command = hookArray[0].command;
|
|
22
|
-
if (typeof command !== 'string')
|
|
23
|
-
return false;
|
|
24
|
-
// Normalize path separators for cross-platform matching
|
|
25
|
-
const normalizedCommand = command
|
|
26
|
-
.replace(/\\/g, '/') // Windows backslashes
|
|
27
|
-
.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
28
|
-
return normalizedCommand.includes('.ccs/hooks/websearch-transformer');
|
|
29
|
-
}
|
|
30
|
-
exports.isCcsWebSearchHook = isCcsWebSearchHook;
|
|
31
|
-
/**
|
|
32
|
-
* Remove duplicate CCS WebSearch hooks from settings, keeping only the first one
|
|
33
|
-
* Returns true if duplicates were removed
|
|
34
|
-
*/
|
|
35
|
-
function deduplicateCcsHooks(settings) {
|
|
36
|
-
const hooks = settings.hooks;
|
|
37
|
-
if (!hooks?.PreToolUse)
|
|
38
|
-
return false;
|
|
39
|
-
let foundFirst = false;
|
|
40
|
-
const originalLength = hooks.PreToolUse.length;
|
|
41
|
-
hooks.PreToolUse = hooks.PreToolUse.filter((h) => {
|
|
42
|
-
const hook = h;
|
|
43
|
-
if (!isCcsWebSearchHook(hook))
|
|
44
|
-
return true; // Keep non-CCS hooks
|
|
45
|
-
if (!foundFirst) {
|
|
46
|
-
foundFirst = true;
|
|
47
|
-
return true; // Keep first CCS hook
|
|
48
|
-
}
|
|
49
|
-
return false; // Remove subsequent duplicates
|
|
50
|
-
});
|
|
51
|
-
const newLength = hooks.PreToolUse.length;
|
|
52
|
-
if (process.env.CCS_DEBUG && newLength < originalLength) {
|
|
53
|
-
const removedCount = originalLength - newLength;
|
|
54
|
-
console.error(`Removed ${removedCount} duplicate CCS WebSearch hook(s)`);
|
|
55
|
-
}
|
|
56
|
-
return newLength < originalLength;
|
|
57
|
-
}
|
|
58
|
-
exports.deduplicateCcsHooks = deduplicateCcsHooks;
|
|
59
|
-
//# sourceMappingURL=hook-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-utils.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAA6B;IAC9D,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAmD,CAAC;IAC3E,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACrC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE9C,wDAAwD;IACxD,MAAM,iBAAiB,GAAG,OAAO;SAC9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,sBAAsB;SAC1C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,4BAA4B;IACrD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;AACxE,CAAC;AAdD,gDAcC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,QAAiC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA8C,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,UAAU;QAAE,OAAO,KAAK,CAAC;IAErC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;IAE/C,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE;QACxD,MAAM,IAAI,GAAG,CAA4B,CAAC;QAC1C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;QAEjE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC,CAAC,sBAAsB;QACrC,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,+BAA+B;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,GAAG,cAAc,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,WAAW,YAAY,kCAAkC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,SAAS,GAAG,cAAc,CAAC;AACpC,CAAC;AAzBD,kDAyBC"}
|