@kaitranntt/ccs 5.20.0 → 6.0.0-dev.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/README.md +39 -0
- package/VERSION +1 -1
- package/dist/ccs.js +9 -1
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/account-manager.d.ts.map +1 -1
- package/dist/cliproxy/account-manager.js +3 -1
- package/dist/cliproxy/account-manager.js.map +1 -1
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +145 -76
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/session-tracker.d.ts +54 -0
- package/dist/cliproxy/session-tracker.d.ts.map +1 -0
- package/dist/cliproxy/session-tracker.js +228 -0
- package/dist/cliproxy/session-tracker.js.map +1 -0
- package/dist/cliproxy/stats-fetcher.d.ts +19 -0
- package/dist/cliproxy/stats-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/stats-fetcher.js +41 -3
- package/dist/cliproxy/stats-fetcher.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts +33 -0
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +105 -3
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +75 -1
- 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/ui/assets/{accounts-achdtDUJ.js → accounts-BfRSUzvC.js} +1 -1
- package/dist/ui/assets/{analytics-BVlC8Y7-.js → analytics-ClDxRP9x.js} +34 -34
- package/dist/ui/assets/api-DyJHhCv0.js +1 -0
- package/dist/ui/assets/card-CrGAcUkx.js +1 -0
- package/dist/ui/assets/cliproxy-Zr4pFy6O.js +1 -0
- package/dist/ui/assets/cliproxy-control-panel-Cu7DgEPx.js +1 -0
- package/dist/ui/assets/code-editor-D0YjMRQO.js +2 -0
- package/dist/ui/assets/{form-utils-DKkU3nz7.js → form-utils-CKETQmt9.js} +1 -1
- package/dist/ui/assets/{health-Xbq8eUat.js → health-Rretog4H.js} +1 -1
- package/dist/ui/assets/icons-D6DaLbNh.js +1 -0
- package/dist/ui/assets/index-B2PFll-u.js +46 -0
- package/dist/ui/assets/index-DTVwRqgB.css +1 -0
- package/dist/ui/assets/providers/iflow.png +0 -0
- package/dist/ui/assets/{radix-ui-OFtPgiRV.js → radix-ui-Bhyw9pC9.js} +2 -2
- package/dist/ui/assets/{react-vendor-CjrBBxxX.js → react-vendor-DadlvKzT.js} +1 -1
- package/dist/ui/assets/settings-B7OFU9lZ.js +1 -0
- package/dist/ui/assets/shared-qGCa7mu2.js +1 -0
- package/dist/ui/assets/{tanstack-DMWkeNzM.js → tanstack-DZ3a6J0N.js} +1 -1
- package/dist/ui/index.html +7 -7
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +6 -1
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/utils/websearch-manager.d.ts +197 -0
- package/dist/utils/websearch-manager.d.ts.map +1 -0
- package/dist/utils/websearch-manager.js +685 -0
- package/dist/utils/websearch-manager.js.map +1 -0
- package/dist/web-server/health-service.d.ts.map +1 -1
- package/dist/web-server/health-service.js +50 -0
- package/dist/web-server/health-service.js.map +1 -1
- package/dist/web-server/routes.d.ts.map +1 -1
- package/dist/web-server/routes.js +169 -1
- package/dist/web-server/routes.js.map +1 -1
- package/dist/web-server/shutdown.d.ts +4 -4
- package/dist/web-server/shutdown.d.ts.map +1 -1
- package/dist/web-server/shutdown.js +9 -17
- package/dist/web-server/shutdown.js.map +1 -1
- package/lib/hooks/block-websearch.cjs +75 -0
- package/lib/hooks/websearch-transformer.cjs +600 -0
- package/package.json +2 -1
- package/scripts/dev-install.sh +57 -5
- package/scripts/preinstall.js +59 -0
- package/dist/ui/assets/api-BwWsFLoC.js +0 -1
- package/dist/ui/assets/cliproxy-DuaxYcVk.js +0 -1
- package/dist/ui/assets/cliproxy-control-panel-DTiBzA5u.js +0 -1
- package/dist/ui/assets/code-editor-D7CYoILm.js +0 -36
- package/dist/ui/assets/icons-Alnq4BWm.js +0 -1
- package/dist/ui/assets/index-B1gvMo-b.css +0 -1
- package/dist/ui/assets/index-C2RMogI8.js +0 -12
- package/dist/ui/assets/settings-95g3F5Gk.js +0 -1
- package/dist/ui/assets/shared-Cg5XjdQM.js +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Shutdown Handler
|
|
3
3
|
*
|
|
4
|
-
* Handles SIGINT/SIGTERM signals to
|
|
5
|
-
*
|
|
4
|
+
* Handles SIGINT/SIGTERM signals to close server and exit immediately.
|
|
5
|
+
* No graceful waiting - config dashboard doesn't need it.
|
|
6
6
|
*/
|
|
7
7
|
/// <reference types="node" />
|
|
8
8
|
import { Server as HTTPServer } from 'http';
|
|
9
9
|
import { WebSocketServer } from 'ws';
|
|
10
10
|
/**
|
|
11
|
-
* Setup
|
|
11
|
+
* Setup shutdown handlers for SIGINT and SIGTERM
|
|
12
12
|
*/
|
|
13
13
|
export declare function setupGracefulShutdown(server: HTTPServer, _wss: WebSocketServer, cleanup?: () => void): void;
|
|
14
14
|
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/web-server/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/web-server/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAGrC;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,IAAI,CAgBN"}
|
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Shutdown Handler
|
|
4
4
|
*
|
|
5
|
-
* Handles SIGINT/SIGTERM signals to
|
|
6
|
-
*
|
|
5
|
+
* Handles SIGINT/SIGTERM signals to close server and exit immediately.
|
|
6
|
+
* No graceful waiting - config dashboard doesn't need it.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.setupGracefulShutdown = void 0;
|
|
10
10
|
const ui_1 = require("../utils/ui");
|
|
11
|
-
const SHUTDOWN_TIMEOUT = 10000; // 10 seconds
|
|
12
11
|
/**
|
|
13
|
-
* Setup
|
|
12
|
+
* Setup shutdown handlers for SIGINT and SIGTERM
|
|
14
13
|
*/
|
|
15
14
|
function setupGracefulShutdown(server, _wss, cleanup) {
|
|
16
15
|
const shutdown = () => {
|
|
17
|
-
console.log('\n' + (0, ui_1.
|
|
18
|
-
// Run cleanup
|
|
16
|
+
console.log('\n' + (0, ui_1.ok)('Shutting down...'));
|
|
17
|
+
// Run cleanup (closes file watchers + WebSocket clients)
|
|
19
18
|
if (cleanup) {
|
|
20
19
|
cleanup();
|
|
21
20
|
}
|
|
22
|
-
// Close
|
|
23
|
-
server.close(
|
|
24
|
-
|
|
25
|
-
process.exit(0);
|
|
26
|
-
});
|
|
27
|
-
// Force shutdown if graceful shutdown takes too long
|
|
28
|
-
setTimeout(() => {
|
|
29
|
-
console.log((0, ui_1.warn)('Force shutdown (timeout exceeded)'));
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}, SHUTDOWN_TIMEOUT);
|
|
21
|
+
// Close server and exit immediately
|
|
22
|
+
server.close();
|
|
23
|
+
process.exit(0);
|
|
32
24
|
};
|
|
33
25
|
process.on('SIGINT', shutdown);
|
|
34
26
|
process.on('SIGTERM', shutdown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/web-server/shutdown.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/web-server/shutdown.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,oCAAiC;AAEjC;;GAEG;AACH,SAAgB,qBAAqB,CACnC,MAAkB,EAClB,IAAqB,EACrB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,OAAE,EAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3C,yDAAyD;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,oCAAoC;QACpC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AApBD,sDAoBC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CCS WebSearch Blocking Hook
|
|
4
|
+
*
|
|
5
|
+
* Blocks Claude's native WebSearch tool and redirects to MCP alternative.
|
|
6
|
+
* This is a PreToolUse hook that runs BEFORE the tool is executed.
|
|
7
|
+
*
|
|
8
|
+
* WebSearch is a server-side tool executed by Anthropic's API.
|
|
9
|
+
* Third-party providers (gemini, agy, codex, qwen) don't have access.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* Configured in ~/.claude/settings.json:
|
|
13
|
+
* {
|
|
14
|
+
* "hooks": {
|
|
15
|
+
* "PreToolUse": [{
|
|
16
|
+
* "matcher": "WebSearch",
|
|
17
|
+
* "hooks": [{
|
|
18
|
+
* "type": "command",
|
|
19
|
+
* "command": "node ~/.ccs/hooks/block-websearch.cjs",
|
|
20
|
+
* "timeout": 5
|
|
21
|
+
* }]
|
|
22
|
+
* }]
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* Exit codes:
|
|
27
|
+
* 0 - Allow tool (pass-through)
|
|
28
|
+
* 2 - Block tool (deny with message)
|
|
29
|
+
*
|
|
30
|
+
* @module hooks/block-websearch
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
// Read input from stdin
|
|
34
|
+
let input = '';
|
|
35
|
+
process.stdin.setEncoding('utf8');
|
|
36
|
+
process.stdin.on('data', (chunk) => {
|
|
37
|
+
input += chunk;
|
|
38
|
+
});
|
|
39
|
+
process.stdin.on('end', () => {
|
|
40
|
+
try {
|
|
41
|
+
const data = JSON.parse(input);
|
|
42
|
+
|
|
43
|
+
// Only block WebSearch tool
|
|
44
|
+
if (data.tool_name === 'WebSearch') {
|
|
45
|
+
const query = data.tool_input?.query || '';
|
|
46
|
+
|
|
47
|
+
const output = {
|
|
48
|
+
decision: 'block',
|
|
49
|
+
reason: 'WebSearch unavailable with current provider',
|
|
50
|
+
hookSpecificOutput: {
|
|
51
|
+
hookEventName: 'PreToolUse',
|
|
52
|
+
permissionDecision: 'deny',
|
|
53
|
+
permissionDecisionReason: `WebSearch is not available with third-party providers. Use mcp__web-search-prime__webSearchPrime tool instead with the same query: "${query}"`,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
console.log(JSON.stringify(output));
|
|
58
|
+
process.exit(2); // Exit code 2 = block
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Allow all other tools
|
|
62
|
+
process.exit(0);
|
|
63
|
+
} catch (err) {
|
|
64
|
+
// Don't block on parse errors - allow tool to proceed
|
|
65
|
+
if (process.env.CCS_DEBUG) {
|
|
66
|
+
console.error('[CCS Hook] Parse error:', err.message);
|
|
67
|
+
}
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Handle stdin not being available
|
|
73
|
+
process.stdin.on('error', () => {
|
|
74
|
+
process.exit(0);
|
|
75
|
+
});
|