@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.
Files changed (76) hide show
  1. package/README.md +39 -0
  2. package/VERSION +1 -1
  3. package/dist/ccs.js +9 -1
  4. package/dist/ccs.js.map +1 -1
  5. package/dist/cliproxy/account-manager.d.ts.map +1 -1
  6. package/dist/cliproxy/account-manager.js +3 -1
  7. package/dist/cliproxy/account-manager.js.map +1 -1
  8. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  9. package/dist/cliproxy/cliproxy-executor.js +145 -76
  10. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  11. package/dist/cliproxy/session-tracker.d.ts +54 -0
  12. package/dist/cliproxy/session-tracker.d.ts.map +1 -0
  13. package/dist/cliproxy/session-tracker.js +228 -0
  14. package/dist/cliproxy/session-tracker.js.map +1 -0
  15. package/dist/cliproxy/stats-fetcher.d.ts +19 -0
  16. package/dist/cliproxy/stats-fetcher.d.ts.map +1 -1
  17. package/dist/cliproxy/stats-fetcher.js +41 -3
  18. package/dist/cliproxy/stats-fetcher.js.map +1 -1
  19. package/dist/config/unified-config-loader.d.ts +33 -0
  20. package/dist/config/unified-config-loader.d.ts.map +1 -1
  21. package/dist/config/unified-config-loader.js +105 -3
  22. package/dist/config/unified-config-loader.js.map +1 -1
  23. package/dist/config/unified-config-types.d.ts +75 -1
  24. package/dist/config/unified-config-types.d.ts.map +1 -1
  25. package/dist/config/unified-config-types.js +21 -1
  26. package/dist/config/unified-config-types.js.map +1 -1
  27. package/dist/ui/assets/{accounts-achdtDUJ.js → accounts-BfRSUzvC.js} +1 -1
  28. package/dist/ui/assets/{analytics-BVlC8Y7-.js → analytics-ClDxRP9x.js} +34 -34
  29. package/dist/ui/assets/api-DyJHhCv0.js +1 -0
  30. package/dist/ui/assets/card-CrGAcUkx.js +1 -0
  31. package/dist/ui/assets/cliproxy-Zr4pFy6O.js +1 -0
  32. package/dist/ui/assets/cliproxy-control-panel-Cu7DgEPx.js +1 -0
  33. package/dist/ui/assets/code-editor-D0YjMRQO.js +2 -0
  34. package/dist/ui/assets/{form-utils-DKkU3nz7.js → form-utils-CKETQmt9.js} +1 -1
  35. package/dist/ui/assets/{health-Xbq8eUat.js → health-Rretog4H.js} +1 -1
  36. package/dist/ui/assets/icons-D6DaLbNh.js +1 -0
  37. package/dist/ui/assets/index-B2PFll-u.js +46 -0
  38. package/dist/ui/assets/index-DTVwRqgB.css +1 -0
  39. package/dist/ui/assets/providers/iflow.png +0 -0
  40. package/dist/ui/assets/{radix-ui-OFtPgiRV.js → radix-ui-Bhyw9pC9.js} +2 -2
  41. package/dist/ui/assets/{react-vendor-CjrBBxxX.js → react-vendor-DadlvKzT.js} +1 -1
  42. package/dist/ui/assets/settings-B7OFU9lZ.js +1 -0
  43. package/dist/ui/assets/shared-qGCa7mu2.js +1 -0
  44. package/dist/ui/assets/{tanstack-DMWkeNzM.js → tanstack-DZ3a6J0N.js} +1 -1
  45. package/dist/ui/index.html +7 -7
  46. package/dist/utils/shell-executor.d.ts.map +1 -1
  47. package/dist/utils/shell-executor.js +6 -1
  48. package/dist/utils/shell-executor.js.map +1 -1
  49. package/dist/utils/websearch-manager.d.ts +197 -0
  50. package/dist/utils/websearch-manager.d.ts.map +1 -0
  51. package/dist/utils/websearch-manager.js +685 -0
  52. package/dist/utils/websearch-manager.js.map +1 -0
  53. package/dist/web-server/health-service.d.ts.map +1 -1
  54. package/dist/web-server/health-service.js +50 -0
  55. package/dist/web-server/health-service.js.map +1 -1
  56. package/dist/web-server/routes.d.ts.map +1 -1
  57. package/dist/web-server/routes.js +169 -1
  58. package/dist/web-server/routes.js.map +1 -1
  59. package/dist/web-server/shutdown.d.ts +4 -4
  60. package/dist/web-server/shutdown.d.ts.map +1 -1
  61. package/dist/web-server/shutdown.js +9 -17
  62. package/dist/web-server/shutdown.js.map +1 -1
  63. package/lib/hooks/block-websearch.cjs +75 -0
  64. package/lib/hooks/websearch-transformer.cjs +600 -0
  65. package/package.json +2 -1
  66. package/scripts/dev-install.sh +57 -5
  67. package/scripts/preinstall.js +59 -0
  68. package/dist/ui/assets/api-BwWsFLoC.js +0 -1
  69. package/dist/ui/assets/cliproxy-DuaxYcVk.js +0 -1
  70. package/dist/ui/assets/cliproxy-control-panel-DTiBzA5u.js +0 -1
  71. package/dist/ui/assets/code-editor-D7CYoILm.js +0 -36
  72. package/dist/ui/assets/icons-Alnq4BWm.js +0 -1
  73. package/dist/ui/assets/index-B1gvMo-b.css +0 -1
  74. package/dist/ui/assets/index-C2RMogI8.js +0 -12
  75. package/dist/ui/assets/settings-95g3F5Gk.js +0 -1
  76. package/dist/ui/assets/shared-Cg5XjdQM.js +0 -1
@@ -1,14 +1,14 @@
1
1
  /**
2
- * Graceful Shutdown Handler
2
+ * Shutdown Handler
3
3
  *
4
- * Handles SIGINT/SIGTERM signals to gracefully close WebSocket connections
5
- * and HTTP server before process exit.
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 graceful shutdown handlers for SIGINT and SIGTERM
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;AAKrC;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,IAAI,CAwBN"}
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
- * Graceful Shutdown Handler
3
+ * Shutdown Handler
4
4
  *
5
- * Handles SIGINT/SIGTERM signals to gracefully close WebSocket connections
6
- * and HTTP server before process exit.
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 graceful shutdown handlers for SIGINT and SIGTERM
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.info)('Shutting down gracefully...'));
18
- // Run cleanup first (closes file watchers + WebSocket clients)
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 HTTP server
23
- server.close(() => {
24
- console.log((0, ui_1.ok)('Server closed'));
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,oCAA6C;AAE7C,MAAM,gBAAgB,GAAG,KAAM,CAAC,CAAC,aAAa;AAE9C;;GAEG;AACH,SAAgB,qBAAqB,CACnC,MAAkB,EAClB,IAAqB,EACrB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,SAAI,EAAC,6BAA6B,CAAC,CAAC,CAAC;QAExD,+DAA+D;QAC/D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,oBAAoB;QACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,eAAe,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvB,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;AA5BD,sDA4BC"}
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
+ });