@kaitranntt/ccs 7.53.0 → 7.54.0-dev.10

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 (266) hide show
  1. package/README.md +87 -5
  2. package/config/base-codex.settings.json +4 -4
  3. package/dist/auth/profile-detector.d.ts.map +1 -1
  4. package/dist/auth/profile-detector.js +3 -1
  5. package/dist/auth/profile-detector.js.map +1 -1
  6. package/dist/ccs.d.ts +1 -1
  7. package/dist/ccs.d.ts.map +1 -1
  8. package/dist/ccs.js +3 -112
  9. package/dist/ccs.js.map +1 -1
  10. package/dist/cliproxy/binary/downloader.d.ts +1 -14
  11. package/dist/cliproxy/binary/downloader.d.ts.map +1 -1
  12. package/dist/cliproxy/binary/downloader.js +5 -43
  13. package/dist/cliproxy/binary/downloader.js.map +1 -1
  14. package/dist/cliproxy/codex-plan-compatibility.d.ts +10 -0
  15. package/dist/cliproxy/codex-plan-compatibility.d.ts.map +1 -0
  16. package/dist/cliproxy/codex-plan-compatibility.js +69 -0
  17. package/dist/cliproxy/codex-plan-compatibility.js.map +1 -0
  18. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  19. package/dist/cliproxy/config/thinking-config.js +9 -0
  20. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  21. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  22. package/dist/cliproxy/executor/index.js +8 -0
  23. package/dist/cliproxy/executor/index.js.map +1 -1
  24. package/dist/cliproxy/index.d.ts +1 -0
  25. package/dist/cliproxy/index.d.ts.map +1 -1
  26. package/dist/cliproxy/index.js +6 -2
  27. package/dist/cliproxy/index.js.map +1 -1
  28. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  29. package/dist/cliproxy/model-catalog.js +81 -12
  30. package/dist/cliproxy/model-catalog.js.map +1 -1
  31. package/dist/cliproxy/model-config.d.ts.map +1 -1
  32. package/dist/cliproxy/model-config.js +2 -2
  33. package/dist/cliproxy/model-config.js.map +1 -1
  34. package/dist/cliproxy/services/variant-settings.d.ts +3 -1
  35. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  36. package/dist/cliproxy/services/variant-settings.js +5 -2
  37. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  38. package/dist/cliproxy/thinking-validator.js +20 -0
  39. package/dist/cliproxy/thinking-validator.js.map +1 -1
  40. package/dist/commands/api-command/copy-command.d.ts +2 -0
  41. package/dist/commands/api-command/copy-command.d.ts.map +1 -0
  42. package/dist/commands/api-command/copy-command.js +41 -0
  43. package/dist/commands/api-command/copy-command.js.map +1 -0
  44. package/dist/commands/api-command/create-command.d.ts +2 -0
  45. package/dist/commands/api-command/create-command.d.ts.map +1 -0
  46. package/dist/commands/api-command/create-command.js +239 -0
  47. package/dist/commands/api-command/create-command.js.map +1 -0
  48. package/dist/commands/api-command/discover-command.d.ts +2 -0
  49. package/dist/commands/api-command/discover-command.d.ts.map +1 -0
  50. package/dist/commands/api-command/discover-command.js +69 -0
  51. package/dist/commands/api-command/discover-command.js.map +1 -0
  52. package/dist/commands/api-command/export-command.d.ts +2 -0
  53. package/dist/commands/api-command/export-command.d.ts.map +1 -0
  54. package/dist/commands/api-command/export-command.js +73 -0
  55. package/dist/commands/api-command/export-command.js.map +1 -0
  56. package/dist/commands/api-command/help.d.ts +3 -0
  57. package/dist/commands/api-command/help.d.ts.map +1 -0
  58. package/dist/commands/api-command/help.js +100 -0
  59. package/dist/commands/api-command/help.js.map +1 -0
  60. package/dist/commands/api-command/import-command.d.ts +2 -0
  61. package/dist/commands/api-command/import-command.d.ts.map +1 -0
  62. package/dist/commands/api-command/import-command.js +111 -0
  63. package/dist/commands/api-command/import-command.js.map +1 -0
  64. package/dist/commands/api-command/index.d.ts +3 -0
  65. package/dist/commands/api-command/index.d.ts.map +1 -0
  66. package/dist/commands/api-command/index.js +34 -0
  67. package/dist/commands/api-command/index.js.map +1 -0
  68. package/dist/commands/api-command/list-command.d.ts +2 -0
  69. package/dist/commands/api-command/list-command.d.ts.map +1 -0
  70. package/dist/commands/api-command/list-command.js +53 -0
  71. package/dist/commands/api-command/list-command.js.map +1 -0
  72. package/dist/commands/api-command/remove-command.d.ts +2 -0
  73. package/dist/commands/api-command/remove-command.d.ts.map +1 -0
  74. package/dist/commands/api-command/remove-command.js +63 -0
  75. package/dist/commands/api-command/remove-command.js.map +1 -0
  76. package/dist/commands/api-command/shared.d.ts +36 -0
  77. package/dist/commands/api-command/shared.d.ts.map +1 -0
  78. package/dist/commands/api-command/shared.js +164 -0
  79. package/dist/commands/api-command/shared.js.map +1 -0
  80. package/dist/commands/api-command.d.ts +1 -26
  81. package/dist/commands/api-command.d.ts.map +1 -1
  82. package/dist/commands/api-command.js +3 -807
  83. package/dist/commands/api-command.js.map +1 -1
  84. package/dist/commands/arg-extractor.d.ts +15 -0
  85. package/dist/commands/arg-extractor.d.ts.map +1 -1
  86. package/dist/commands/arg-extractor.js +48 -2
  87. package/dist/commands/arg-extractor.js.map +1 -1
  88. package/dist/commands/config-auth/index.d.ts.map +1 -1
  89. package/dist/commands/config-auth/index.js +35 -19
  90. package/dist/commands/config-auth/index.js.map +1 -1
  91. package/dist/commands/config-command-options.d.ts +14 -0
  92. package/dist/commands/config-command-options.d.ts.map +1 -0
  93. package/dist/commands/config-command-options.js +108 -0
  94. package/dist/commands/config-command-options.js.map +1 -0
  95. package/dist/commands/config-command.d.ts +1 -1
  96. package/dist/commands/config-command.d.ts.map +1 -1
  97. package/dist/commands/config-command.js +91 -97
  98. package/dist/commands/config-command.js.map +1 -1
  99. package/dist/commands/config-dashboard-host.d.ts +17 -0
  100. package/dist/commands/config-dashboard-host.d.ts.map +1 -0
  101. package/dist/commands/config-dashboard-host.js +99 -0
  102. package/dist/commands/config-dashboard-host.js.map +1 -0
  103. package/dist/commands/copilot-command.d.ts.map +1 -1
  104. package/dist/commands/copilot-command.js +19 -8
  105. package/dist/commands/copilot-command.js.map +1 -1
  106. package/dist/commands/env-command.d.ts.map +1 -1
  107. package/dist/commands/env-command.js +31 -76
  108. package/dist/commands/env-command.js.map +1 -1
  109. package/dist/commands/help-command.d.ts.map +1 -1
  110. package/dist/commands/help-command.js +11 -2
  111. package/dist/commands/help-command.js.map +1 -1
  112. package/dist/commands/named-command-router.d.ts +17 -0
  113. package/dist/commands/named-command-router.d.ts.map +1 -0
  114. package/dist/commands/named-command-router.js +39 -0
  115. package/dist/commands/named-command-router.js.map +1 -0
  116. package/dist/commands/persist-command.d.ts +4 -4
  117. package/dist/commands/persist-command.d.ts.map +1 -1
  118. package/dist/commands/persist-command.js +76 -83
  119. package/dist/commands/persist-command.js.map +1 -1
  120. package/dist/commands/root-command-router.d.ts +2 -0
  121. package/dist/commands/root-command-router.d.ts.map +1 -0
  122. package/dist/commands/root-command-router.js +209 -0
  123. package/dist/commands/root-command-router.js.map +1 -0
  124. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  125. package/dist/copilot/copilot-executor.js +23 -14
  126. package/dist/copilot/copilot-executor.js.map +1 -1
  127. package/dist/copilot/copilot-model-normalizer.d.ts +30 -0
  128. package/dist/copilot/copilot-model-normalizer.d.ts.map +1 -0
  129. package/dist/copilot/copilot-model-normalizer.js +159 -0
  130. package/dist/copilot/copilot-model-normalizer.js.map +1 -0
  131. package/dist/copilot/copilot-models.d.ts.map +1 -1
  132. package/dist/copilot/copilot-models.js +0 -9
  133. package/dist/copilot/copilot-models.js.map +1 -1
  134. package/dist/copilot/index.d.ts +1 -0
  135. package/dist/copilot/index.d.ts.map +1 -1
  136. package/dist/copilot/index.js +9 -1
  137. package/dist/copilot/index.js.map +1 -1
  138. package/dist/cursor/cursor-anthropic-response.d.ts +6 -0
  139. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -0
  140. package/dist/cursor/cursor-anthropic-response.js +190 -0
  141. package/dist/cursor/cursor-anthropic-response.js.map +1 -0
  142. package/dist/cursor/cursor-anthropic-translator.d.ts +11 -0
  143. package/dist/cursor/cursor-anthropic-translator.d.ts.map +1 -0
  144. package/dist/cursor/cursor-anthropic-translator.js +167 -0
  145. package/dist/cursor/cursor-anthropic-translator.js.map +1 -0
  146. package/dist/cursor/cursor-anthropic-types.d.ts +46 -0
  147. package/dist/cursor/cursor-anthropic-types.d.ts.map +1 -0
  148. package/dist/cursor/cursor-anthropic-types.js +3 -0
  149. package/dist/cursor/cursor-anthropic-types.js.map +1 -0
  150. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  151. package/dist/cursor/cursor-daemon-entry.js +53 -24
  152. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  153. package/dist/cursor/cursor-models.d.ts.map +1 -1
  154. package/dist/cursor/cursor-models.js +36 -2
  155. package/dist/cursor/cursor-models.js.map +1 -1
  156. package/dist/glmt/sse-parser.d.ts +2 -0
  157. package/dist/glmt/sse-parser.d.ts.map +1 -1
  158. package/dist/glmt/sse-parser.js +4 -0
  159. package/dist/glmt/sse-parser.js.map +1 -1
  160. package/dist/management/instance-manager.d.ts.map +1 -1
  161. package/dist/management/instance-manager.js +1 -0
  162. package/dist/management/instance-manager.js.map +1 -1
  163. package/dist/management/shared-manager.d.ts +18 -1
  164. package/dist/management/shared-manager.d.ts.map +1 -1
  165. package/dist/management/shared-manager.js +82 -14
  166. package/dist/management/shared-manager.js.map +1 -1
  167. package/dist/shared/claude-extension-hosts.d.ts +12 -0
  168. package/dist/shared/claude-extension-hosts.d.ts.map +1 -0
  169. package/dist/shared/claude-extension-hosts.js +33 -0
  170. package/dist/shared/claude-extension-hosts.js.map +1 -0
  171. package/dist/shared/claude-extension-setup.d.ts +30 -0
  172. package/dist/shared/claude-extension-setup.d.ts.map +1 -0
  173. package/dist/shared/claude-extension-setup.js +235 -0
  174. package/dist/shared/claude-extension-setup.js.map +1 -0
  175. package/dist/shared/provider-preset-catalog.d.ts +1 -1
  176. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  177. package/dist/shared/provider-preset-catalog.js +32 -15
  178. package/dist/shared/provider-preset-catalog.js.map +1 -1
  179. package/dist/ui/assets/{accounts-BGeV6RYc.js → accounts-v8ElDmpv.js} +1 -1
  180. package/dist/ui/assets/{alert-dialog-BGgi27Hi.js → alert-dialog-L5Ct0Tm9.js} +1 -1
  181. package/dist/ui/assets/{api-NqhAOtK1.js → api-C5CuNrT6.js} +1 -1
  182. package/dist/ui/assets/{auth-section-B5dLDT5c.js → auth-section-P8GsBk1u.js} +1 -1
  183. package/dist/ui/assets/{backups-section-COPmsPIk.js → backups-section-gBIJ2rQw.js} +1 -1
  184. package/dist/ui/assets/checkbox-DQ1oAx_4.js +1 -0
  185. package/dist/ui/assets/claude-extension-CjEyjaGL.js +1 -0
  186. package/dist/ui/assets/cliproxy-C0dWlSJs.js +3 -0
  187. package/dist/ui/assets/{cliproxy-control-panel-C-Yyhlim.js → cliproxy-control-panel-CdCrzgLe.js} +1 -1
  188. package/dist/ui/assets/{confirm-dialog-B7Lzqyum.js → confirm-dialog-DaydoeD7.js} +1 -1
  189. package/dist/ui/assets/copilot-SA3U22Y9.js +3 -0
  190. package/dist/ui/assets/cursor-BfkF3VwC.js +1 -0
  191. package/dist/ui/assets/{droid-C4lLcCII.js → droid-BfSJyZXD.js} +2 -2
  192. package/dist/ui/assets/{globalenv-section-D0TAPAVS.js → globalenv-section-rg8Ctc2R.js} +1 -1
  193. package/dist/ui/assets/{health-BzfCtqqG.js → health-Cii2iTlp.js} +1 -1
  194. package/dist/ui/assets/icons-DtwH984l.js +1 -0
  195. package/dist/ui/assets/{index-B3R5r7pg.js → index-B4Qc134R.js} +1 -1
  196. package/dist/ui/assets/index-CBleAyoZ.js +1 -0
  197. package/dist/ui/assets/index-ClEn7Y7g.css +1 -0
  198. package/dist/ui/assets/{index-DI8j_aYa.js → index-D1CmdSLO.js} +1 -1
  199. package/dist/ui/assets/{index-BoCctuVm.js → index-Gpb2Emvl.js} +1 -1
  200. package/dist/ui/assets/index-og5NMtJP.js +47 -0
  201. package/dist/ui/assets/providers/llama-cpp.svg +5 -0
  202. package/dist/ui/assets/{proxy-status-widget-C3kt_0Qn.js → proxy-status-widget-CZnGc4zY.js} +1 -1
  203. package/dist/ui/assets/{radix-ui-BR1vy4kf.js → radix-ui-Dt3edmE5.js} +8 -8
  204. package/dist/ui/assets/searchable-select-BHhY-dTx.js +1 -0
  205. package/dist/ui/assets/{separator-DJb9h9_B.js → separator-7ggevEK6.js} +1 -1
  206. package/dist/ui/assets/{shared-CKcd4Q-6.js → shared-CoiUG_Qa.js} +1 -1
  207. package/dist/ui/assets/{switch-BVx3z2gz.js → switch-3-7lTxFj.js} +1 -1
  208. package/dist/ui/assets/{tanstack-e99Cjjy2.js → tanstack-B8i0evp-.js} +1 -1
  209. package/dist/ui/assets/updates-rQ3GVJIq.js +1 -0
  210. package/dist/ui/icons/novita.svg +9 -0
  211. package/dist/ui/index.html +5 -5
  212. package/dist/utils/fetch-proxy-setup.d.ts +13 -0
  213. package/dist/utils/fetch-proxy-setup.d.ts.map +1 -0
  214. package/dist/utils/fetch-proxy-setup.js +112 -0
  215. package/dist/utils/fetch-proxy-setup.js.map +1 -0
  216. package/dist/utils/proxy-env.d.ts +15 -0
  217. package/dist/utils/proxy-env.d.ts.map +1 -0
  218. package/dist/utils/proxy-env.js +126 -0
  219. package/dist/utils/proxy-env.js.map +1 -0
  220. package/dist/utils/shell-executor.d.ts.map +1 -1
  221. package/dist/utils/shell-executor.js +12 -0
  222. package/dist/utils/shell-executor.js.map +1 -1
  223. package/dist/web-server/index.d.ts +1 -0
  224. package/dist/web-server/index.d.ts.map +1 -1
  225. package/dist/web-server/index.js +39 -3
  226. package/dist/web-server/index.js.map +1 -1
  227. package/dist/web-server/routes/claude-extension-routes.d.ts +3 -0
  228. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -0
  229. package/dist/web-server/routes/claude-extension-routes.js +161 -0
  230. package/dist/web-server/routes/claude-extension-routes.js.map +1 -0
  231. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
  232. package/dist/web-server/routes/copilot-routes.js +53 -45
  233. package/dist/web-server/routes/copilot-routes.js.map +1 -1
  234. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  235. package/dist/web-server/routes/copilot-settings-routes.js +77 -36
  236. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  237. package/dist/web-server/routes/index.d.ts.map +1 -1
  238. package/dist/web-server/routes/index.js +2 -0
  239. package/dist/web-server/routes/index.js.map +1 -1
  240. package/dist/web-server/routes/profile-routes.d.ts +1 -0
  241. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  242. package/dist/web-server/routes/profile-routes.js +3 -0
  243. package/dist/web-server/routes/profile-routes.js.map +1 -1
  244. package/dist/web-server/routes/variant-routes.d.ts +1 -0
  245. package/dist/web-server/routes/variant-routes.d.ts.map +1 -1
  246. package/dist/web-server/routes/variant-routes.js +3 -0
  247. package/dist/web-server/routes/variant-routes.js.map +1 -1
  248. package/dist/web-server/services/claude-extension-binding-service.d.ts +30 -0
  249. package/dist/web-server/services/claude-extension-binding-service.d.ts.map +1 -0
  250. package/dist/web-server/services/claude-extension-binding-service.js +240 -0
  251. package/dist/web-server/services/claude-extension-binding-service.js.map +1 -0
  252. package/dist/web-server/services/claude-extension-settings-service.d.ts +23 -0
  253. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -0
  254. package/dist/web-server/services/claude-extension-settings-service.js +493 -0
  255. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -0
  256. package/package.json +3 -1
  257. package/scripts/completion/ccs.bash +11 -4
  258. package/dist/ui/assets/checkbox-DYHfVVrN.js +0 -1
  259. package/dist/ui/assets/cliproxy-BSKey7Yk.js +0 -3
  260. package/dist/ui/assets/copilot-D-MitpPb.js +0 -3
  261. package/dist/ui/assets/cursor-BH8co9su.js +0 -1
  262. package/dist/ui/assets/icons-D2eEmpHv.js +0 -1
  263. package/dist/ui/assets/index-Br6LTYDi.js +0 -1
  264. package/dist/ui/assets/index-BusjPRWX.css +0 -1
  265. package/dist/ui/assets/index-C2HpWmQl.js +0 -47
  266. package/dist/ui/assets/updates-D-X3ZIXa.js +0 -1
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.resetClaudeExtensionBinding = exports.applyClaudeExtensionBinding = exports.verifyClaudeExtensionBinding = exports.resolveClaudeExtensionIdeSettingsPath = exports.getDefaultClaudeExtensionIdeSettingsPath = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const os = __importStar(require("os"));
29
+ const path = __importStar(require("path"));
30
+ const crypto_1 = require("crypto");
31
+ const claude_extension_setup_1 = require("../../shared/claude-extension-setup");
32
+ const claude_extension_hosts_1 = require("../../shared/claude-extension-hosts");
33
+ const claude_config_path_1 = require("../../utils/claude-config-path");
34
+ const helpers_1 = require("../../utils/helpers");
35
+ const claude_extension_binding_service_1 = require("./claude-extension-binding-service");
36
+ function isRecord(value) {
37
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
38
+ }
39
+ function sortStringRecord(record) {
40
+ return Object.fromEntries(Object.entries(record).sort(([left], [right]) => left.localeCompare(right)));
41
+ }
42
+ function toStringRecord(record) {
43
+ const normalized = {};
44
+ for (const [key, value] of Object.entries(record)) {
45
+ if (typeof value === 'string') {
46
+ normalized[key] = value;
47
+ }
48
+ }
49
+ return normalized;
50
+ }
51
+ function uniqueFileNonce() {
52
+ return `${process.pid}-${Date.now()}-${(0, crypto_1.randomUUID)()}`;
53
+ }
54
+ function stripJsonComments(input) {
55
+ let output = '';
56
+ let inString = false;
57
+ let escaping = false;
58
+ let inLineComment = false;
59
+ let inBlockComment = false;
60
+ for (let index = 0; index < input.length; index += 1) {
61
+ const char = input[index];
62
+ const nextChar = input[index + 1];
63
+ if (inLineComment) {
64
+ if (char === '\n') {
65
+ inLineComment = false;
66
+ output += char;
67
+ }
68
+ continue;
69
+ }
70
+ if (inBlockComment) {
71
+ if (char === '*' && nextChar === '/') {
72
+ inBlockComment = false;
73
+ index += 1;
74
+ continue;
75
+ }
76
+ if (char === '\n') {
77
+ output += char;
78
+ }
79
+ continue;
80
+ }
81
+ if (inString) {
82
+ output += char;
83
+ if (escaping) {
84
+ escaping = false;
85
+ }
86
+ else if (char === '\\') {
87
+ escaping = true;
88
+ }
89
+ else if (char === '"') {
90
+ inString = false;
91
+ }
92
+ continue;
93
+ }
94
+ if (char === '"') {
95
+ inString = true;
96
+ output += char;
97
+ continue;
98
+ }
99
+ if (char === '/' && nextChar === '/') {
100
+ inLineComment = true;
101
+ index += 1;
102
+ continue;
103
+ }
104
+ if (char === '/' && nextChar === '*') {
105
+ inBlockComment = true;
106
+ index += 1;
107
+ continue;
108
+ }
109
+ output += char;
110
+ }
111
+ return output;
112
+ }
113
+ function stripTrailingCommas(input) {
114
+ let output = '';
115
+ let inString = false;
116
+ let escaping = false;
117
+ for (let index = 0; index < input.length; index += 1) {
118
+ const char = input[index];
119
+ if (inString) {
120
+ output += char;
121
+ if (escaping) {
122
+ escaping = false;
123
+ }
124
+ else if (char === '\\') {
125
+ escaping = true;
126
+ }
127
+ else if (char === '"') {
128
+ inString = false;
129
+ }
130
+ continue;
131
+ }
132
+ if (char === '"') {
133
+ inString = true;
134
+ output += char;
135
+ continue;
136
+ }
137
+ if (char === ',') {
138
+ let lookahead = index + 1;
139
+ while (lookahead < input.length && /\s/.test(input[lookahead])) {
140
+ lookahead += 1;
141
+ }
142
+ if (input[lookahead] === '}' || input[lookahead] === ']') {
143
+ continue;
144
+ }
145
+ }
146
+ output += char;
147
+ }
148
+ return output;
149
+ }
150
+ function parseJsonDocumentObject(raw, filePath) {
151
+ const normalized = stripTrailingCommas(stripJsonComments(raw));
152
+ let parsed;
153
+ try {
154
+ parsed = JSON.parse(normalized);
155
+ }
156
+ catch (error) {
157
+ throw new Error(`Failed to parse ${filePath}: ${error.message}`);
158
+ }
159
+ if (!isRecord(parsed)) {
160
+ throw new Error(`Expected a JSON object in ${filePath}`);
161
+ }
162
+ return parsed;
163
+ }
164
+ function readJsonDocument(filePath) {
165
+ if (!fs.existsSync(filePath)) {
166
+ return { exists: false, data: {}, mtime: null };
167
+ }
168
+ if (fs.lstatSync(filePath).isSymbolicLink()) {
169
+ throw new Error(`Refusing to manage symlinked file: ${filePath}`);
170
+ }
171
+ const raw = fs.readFileSync(filePath, 'utf8');
172
+ return {
173
+ exists: true,
174
+ data: parseJsonDocumentObject(raw, filePath),
175
+ mtime: fs.statSync(filePath).mtimeMs,
176
+ };
177
+ }
178
+ function backupIfPresent(filePath, suffix) {
179
+ if (!fs.existsSync(filePath))
180
+ return;
181
+ const backupPath = `${filePath}.${suffix}.${uniqueFileNonce()}`;
182
+ fs.copyFileSync(filePath, backupPath, fs.constants.COPYFILE_EXCL);
183
+ }
184
+ function writeJsonDocument(filePath, data, backupSuffix) {
185
+ if (fs.existsSync(filePath) && fs.lstatSync(filePath).isSymbolicLink()) {
186
+ throw new Error(`Refusing to manage symlinked file: ${filePath}`);
187
+ }
188
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
189
+ backupIfPresent(filePath, backupSuffix);
190
+ const tempPath = `${filePath}.tmp.${uniqueFileNonce()}`;
191
+ try {
192
+ fs.writeFileSync(tempPath, JSON.stringify(data, null, 2) + '\n', 'utf8');
193
+ fs.renameSync(tempPath, filePath);
194
+ }
195
+ catch (error) {
196
+ if (fs.existsSync(tempPath)) {
197
+ fs.rmSync(tempPath, { force: true });
198
+ }
199
+ throw error;
200
+ }
201
+ }
202
+ function getManagedSharedEnv(data, managedKeys) {
203
+ const rawEnv = isRecord(data.env) ? toStringRecord(data.env) : {};
204
+ const managed = {};
205
+ for (const key of managedKeys) {
206
+ if (typeof rawEnv[key] === 'string') {
207
+ managed[key] = rawEnv[key];
208
+ }
209
+ }
210
+ return sortStringRecord(managed);
211
+ }
212
+ function getExtensionEnvEntries(value) {
213
+ if (!Array.isArray(value))
214
+ return [];
215
+ return value
216
+ .map((entry) => {
217
+ if (!isRecord(entry) || typeof entry.name !== 'string' || typeof entry.value !== 'string') {
218
+ return null;
219
+ }
220
+ return { name: entry.name, value: entry.value };
221
+ })
222
+ .filter((entry) => entry !== null);
223
+ }
224
+ function getExtensionEnvMap(value, managedKeys) {
225
+ const entries = getExtensionEnvEntries(value)
226
+ .filter((entry) => !managedKeys || managedKeys.has(entry.name))
227
+ .map((entry) => [entry.name, entry.value]);
228
+ return sortStringRecord(Object.fromEntries(entries));
229
+ }
230
+ function mergeManagedExtensionEnvEntries(value, managedKeys, nextManagedEnv) {
231
+ const preservedEntries = getExtensionEnvEntries(value).filter((entry) => !managedKeys.has(entry.name));
232
+ const managedEntries = Object.entries(sortStringRecord(nextManagedEnv)).map(([name, entryValue]) => ({
233
+ name,
234
+ value: entryValue,
235
+ }));
236
+ return [...preservedEntries, ...managedEntries];
237
+ }
238
+ function recordsMatch(left, right) {
239
+ return JSON.stringify(sortStringRecord(left)) === JSON.stringify(sortStringRecord(right));
240
+ }
241
+ function booleansMatch(left, right) {
242
+ return left === right;
243
+ }
244
+ function targetEnabled(target, candidate) {
245
+ return target === 'all' || target === candidate;
246
+ }
247
+ function getManagedKeysForTarget(binding, target, currentResolvedKeys) {
248
+ const manifest = (0, claude_extension_binding_service_1.getClaudeExtensionManagedEnvManifest)(binding.id);
249
+ const manifestKeys = target === 'shared' ? manifest.shared : manifest.ide;
250
+ return new Set([...currentResolvedKeys, ...manifestKeys]);
251
+ }
252
+ function getCurrentResolvedManagedKeys(setup) {
253
+ return [...new Set([...setup.removeEnvKeys, ...Object.keys(setup.extensionEnv)])].sort((left, right) => left.localeCompare(right));
254
+ }
255
+ function getDefaultClaudeExtensionIdeSettingsPath(host) {
256
+ if (process.platform === 'darwin') {
257
+ if (host === 'vscode') {
258
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Code', 'User', 'settings.json');
259
+ }
260
+ if (host === 'cursor') {
261
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Cursor', 'User', 'settings.json');
262
+ }
263
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Windsurf', 'User', 'settings.json');
264
+ }
265
+ if (process.platform === 'win32') {
266
+ const appData = process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming');
267
+ if (host === 'vscode')
268
+ return path.join(appData, 'Code', 'User', 'settings.json');
269
+ if (host === 'cursor')
270
+ return path.join(appData, 'Cursor', 'User', 'settings.json');
271
+ return path.join(appData, 'Windsurf', 'User', 'settings.json');
272
+ }
273
+ if (host === 'vscode')
274
+ return path.join(os.homedir(), '.config', 'Code', 'User', 'settings.json');
275
+ if (host === 'cursor')
276
+ return path.join(os.homedir(), '.config', 'Cursor', 'User', 'settings.json');
277
+ return path.join(os.homedir(), '.config', 'Windsurf', 'User', 'settings.json');
278
+ }
279
+ exports.getDefaultClaudeExtensionIdeSettingsPath = getDefaultClaudeExtensionIdeSettingsPath;
280
+ function resolveClaudeExtensionIdeSettingsPath(binding) {
281
+ return binding.ideSettingsPath
282
+ ? (0, helpers_1.expandPath)(binding.ideSettingsPath)
283
+ : getDefaultClaudeExtensionIdeSettingsPath(binding.host);
284
+ }
285
+ exports.resolveClaudeExtensionIdeSettingsPath = resolveClaudeExtensionIdeSettingsPath;
286
+ async function verifyClaudeExtensionBinding(binding) {
287
+ const setup = await (0, claude_extension_setup_1.resolveClaudeExtensionSetup)(binding.profile);
288
+ const currentResolvedKeys = getCurrentResolvedManagedKeys(setup);
289
+ const sharedManagedKeys = getManagedKeysForTarget(binding, 'shared', currentResolvedKeys);
290
+ const ideManagedKeys = getManagedKeysForTarget(binding, 'ide', currentResolvedKeys);
291
+ const sharedPath = (0, claude_config_path_1.getClaudeSettingsPath)();
292
+ const idePath = resolveClaudeExtensionIdeSettingsPath(binding);
293
+ const sharedDoc = readJsonDocument(sharedPath);
294
+ const ideDoc = readJsonDocument(idePath);
295
+ const hostDefinition = (0, claude_extension_hosts_1.getClaudeExtensionHostDefinition)(binding.host);
296
+ const expectedIde = (0, claude_extension_setup_1.buildClaudeExtensionSettingsObject)(setup, binding.host);
297
+ const expectedIdeEnv = getExtensionEnvMap(expectedIde[hostDefinition.settingsKey], ideManagedKeys);
298
+ const expectedDisablePrompt = hostDefinition.disableLoginPromptKey
299
+ ? expectedIde[hostDefinition.disableLoginPromptKey]
300
+ : undefined;
301
+ const actualIdeEnv = getExtensionEnvMap(ideDoc.data[hostDefinition.settingsKey], ideManagedKeys);
302
+ const actualDisablePrompt = hostDefinition.disableLoginPromptKey
303
+ ? ideDoc.data[hostDefinition.disableLoginPromptKey]
304
+ : undefined;
305
+ const expectedShared = sortStringRecord(setup.extensionEnv);
306
+ const actualShared = getManagedSharedEnv(sharedDoc.data, sharedManagedKeys);
307
+ const missingSharedState = Object.keys(expectedShared).length > 0 ? 'missing' : 'applied';
308
+ const missingIdeState = Object.keys(expectedIdeEnv).length > 0 || expectedDisablePrompt === true
309
+ ? 'missing'
310
+ : 'applied';
311
+ const sharedSettings = !sharedDoc.exists
312
+ ? {
313
+ target: 'shared',
314
+ path: sharedPath,
315
+ exists: false,
316
+ mtime: null,
317
+ state: missingSharedState,
318
+ message: Object.keys(expectedShared).length > 0
319
+ ? 'Shared Claude settings file does not exist yet.'
320
+ : 'No shared CCS-managed values are required.',
321
+ }
322
+ : recordsMatch(actualShared, expectedShared)
323
+ ? {
324
+ target: 'shared',
325
+ path: sharedPath,
326
+ exists: true,
327
+ mtime: sharedDoc.mtime,
328
+ state: 'applied',
329
+ message: 'Shared Claude settings match this binding.',
330
+ }
331
+ : Object.keys(actualShared).length === 0
332
+ ? {
333
+ target: 'shared',
334
+ path: sharedPath,
335
+ exists: true,
336
+ mtime: sharedDoc.mtime,
337
+ state: 'unconfigured',
338
+ message: 'Shared Claude settings are not configured for this binding.',
339
+ }
340
+ : {
341
+ target: 'shared',
342
+ path: sharedPath,
343
+ exists: true,
344
+ mtime: sharedDoc.mtime,
345
+ state: 'drifted',
346
+ message: 'Shared Claude settings differ from the expected managed values.',
347
+ };
348
+ const ideSettings = !ideDoc.exists
349
+ ? {
350
+ target: 'ide',
351
+ path: idePath,
352
+ exists: false,
353
+ mtime: null,
354
+ state: missingIdeState,
355
+ message: Object.keys(expectedIdeEnv).length > 0 || expectedDisablePrompt === true
356
+ ? `${hostDefinition.label} settings file does not exist yet.`
357
+ : 'No IDE-local CCS-managed values are required.',
358
+ }
359
+ : recordsMatch(actualIdeEnv, expectedIdeEnv) &&
360
+ booleansMatch(actualDisablePrompt, expectedDisablePrompt)
361
+ ? {
362
+ target: 'ide',
363
+ path: idePath,
364
+ exists: true,
365
+ mtime: ideDoc.mtime,
366
+ state: 'applied',
367
+ message: `${hostDefinition.label} settings match this binding.`,
368
+ }
369
+ : Object.keys(actualIdeEnv).length === 0 && actualDisablePrompt === undefined
370
+ ? {
371
+ target: 'ide',
372
+ path: idePath,
373
+ exists: true,
374
+ mtime: ideDoc.mtime,
375
+ state: 'unconfigured',
376
+ message: `${hostDefinition.label} settings are not configured for this binding.`,
377
+ }
378
+ : {
379
+ target: 'ide',
380
+ path: idePath,
381
+ exists: true,
382
+ mtime: ideDoc.mtime,
383
+ state: 'drifted',
384
+ message: `${hostDefinition.label} settings differ from the expected managed values.`,
385
+ };
386
+ return { bindingId: binding.id, sharedSettings, ideSettings };
387
+ }
388
+ exports.verifyClaudeExtensionBinding = verifyClaudeExtensionBinding;
389
+ async function applyClaudeExtensionBinding(binding, target = 'all') {
390
+ const setup = await (0, claude_extension_setup_1.resolveClaudeExtensionSetup)(binding.profile);
391
+ const currentResolvedKeys = getCurrentResolvedManagedKeys(setup);
392
+ if (targetEnabled(target, 'shared')) {
393
+ const managedKeys = getManagedKeysForTarget(binding, 'shared', currentResolvedKeys);
394
+ const filePath = (0, claude_config_path_1.getClaudeSettingsPath)();
395
+ const document = readJsonDocument(filePath);
396
+ const env = isRecord(document.data.env) ? { ...document.data.env } : {};
397
+ for (const key of managedKeys)
398
+ delete env[key];
399
+ for (const [key, value] of Object.entries(setup.extensionEnv))
400
+ env[key] = value;
401
+ const nextData = { ...document.data };
402
+ const nextEnv = toStringRecord(env);
403
+ if (Object.keys(nextEnv).length > 0)
404
+ nextData.env = sortStringRecord(nextEnv);
405
+ else
406
+ delete nextData.env;
407
+ if (document.exists || Object.keys(setup.extensionEnv).length > 0) {
408
+ writeJsonDocument(filePath, nextData, 'backup');
409
+ }
410
+ (0, claude_extension_binding_service_1.updateClaudeExtensionManagedEnvManifest)(binding.id, {
411
+ shared: Object.keys(setup.extensionEnv),
412
+ });
413
+ }
414
+ if (targetEnabled(target, 'ide')) {
415
+ const managedKeys = getManagedKeysForTarget(binding, 'ide', currentResolvedKeys);
416
+ const hostDefinition = (0, claude_extension_hosts_1.getClaudeExtensionHostDefinition)(binding.host);
417
+ const filePath = resolveClaudeExtensionIdeSettingsPath(binding);
418
+ const document = readJsonDocument(filePath);
419
+ const nextData = { ...document.data };
420
+ const payload = (0, claude_extension_setup_1.buildClaudeExtensionSettingsObject)(setup, binding.host);
421
+ const mergedEnvEntries = mergeManagedExtensionEnvEntries(document.data[hostDefinition.settingsKey], managedKeys, setup.extensionEnv);
422
+ if (mergedEnvEntries.length > 0) {
423
+ nextData[hostDefinition.settingsKey] = mergedEnvEntries;
424
+ }
425
+ else {
426
+ delete nextData[hostDefinition.settingsKey];
427
+ }
428
+ if (hostDefinition.disableLoginPromptKey) {
429
+ if (payload[hostDefinition.disableLoginPromptKey] === true) {
430
+ nextData[hostDefinition.disableLoginPromptKey] = true;
431
+ }
432
+ else {
433
+ delete nextData[hostDefinition.disableLoginPromptKey];
434
+ }
435
+ }
436
+ if (document.exists ||
437
+ Object.keys(setup.extensionEnv).length > 0 ||
438
+ payload[hostDefinition.disableLoginPromptKey ?? ''] === true) {
439
+ writeJsonDocument(filePath, nextData, 'ccs-backup');
440
+ }
441
+ (0, claude_extension_binding_service_1.updateClaudeExtensionManagedEnvManifest)(binding.id, {
442
+ ide: Object.keys(setup.extensionEnv),
443
+ });
444
+ }
445
+ return verifyClaudeExtensionBinding(binding);
446
+ }
447
+ exports.applyClaudeExtensionBinding = applyClaudeExtensionBinding;
448
+ async function resetClaudeExtensionBinding(binding, target = 'all') {
449
+ const setup = await (0, claude_extension_setup_1.resolveClaudeExtensionSetup)(binding.profile);
450
+ const currentResolvedKeys = getCurrentResolvedManagedKeys(setup);
451
+ if (targetEnabled(target, 'shared')) {
452
+ const managedKeys = getManagedKeysForTarget(binding, 'shared', currentResolvedKeys);
453
+ const filePath = (0, claude_config_path_1.getClaudeSettingsPath)();
454
+ const document = readJsonDocument(filePath);
455
+ if (document.exists) {
456
+ const env = isRecord(document.data.env) ? { ...document.data.env } : {};
457
+ for (const key of managedKeys)
458
+ delete env[key];
459
+ const nextData = { ...document.data };
460
+ const nextEnv = toStringRecord(env);
461
+ if (Object.keys(nextEnv).length > 0)
462
+ nextData.env = sortStringRecord(nextEnv);
463
+ else
464
+ delete nextData.env;
465
+ writeJsonDocument(filePath, nextData, 'backup');
466
+ }
467
+ (0, claude_extension_binding_service_1.updateClaudeExtensionManagedEnvManifest)(binding.id, { shared: [] });
468
+ }
469
+ if (targetEnabled(target, 'ide')) {
470
+ const managedKeys = getManagedKeysForTarget(binding, 'ide', currentResolvedKeys);
471
+ const hostDefinition = (0, claude_extension_hosts_1.getClaudeExtensionHostDefinition)(binding.host);
472
+ const filePath = resolveClaudeExtensionIdeSettingsPath(binding);
473
+ const document = readJsonDocument(filePath);
474
+ if (document.exists) {
475
+ const nextData = { ...document.data };
476
+ const preservedEntries = getExtensionEnvEntries(document.data[hostDefinition.settingsKey]).filter((entry) => !managedKeys.has(entry.name));
477
+ if (preservedEntries.length > 0) {
478
+ nextData[hostDefinition.settingsKey] = preservedEntries;
479
+ }
480
+ else {
481
+ delete nextData[hostDefinition.settingsKey];
482
+ }
483
+ if (hostDefinition.disableLoginPromptKey) {
484
+ delete nextData[hostDefinition.disableLoginPromptKey];
485
+ }
486
+ writeJsonDocument(filePath, nextData, 'ccs-backup');
487
+ }
488
+ (0, claude_extension_binding_service_1.updateClaudeExtensionManagedEnvManifest)(binding.id, { ide: [] });
489
+ }
490
+ return verifyClaudeExtensionBinding(binding);
491
+ }
492
+ exports.resetClaudeExtensionBinding = resetClaudeExtensionBinding;
493
+ //# sourceMappingURL=claude-extension-settings-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-extension-settings-service.js","sourceRoot":"","sources":["../../../src/web-server/services/claude-extension-settings-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "7.53.0",
3
+ "version": "7.54.0-dev.10",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6",
5
5
  "keywords": [
6
6
  "cli",
@@ -58,6 +58,7 @@
58
58
  "build:server": "tsc && node scripts/add-shebang.js",
59
59
  "build:all": "bun run ui:build && bun run build:server",
60
60
  "prebuild": "node scripts/clean-dist.js",
61
+ "prebuild:server": "node scripts/clean-dist.js",
61
62
  "prebuild:all": "rm -rf dist tsconfig.tsbuildinfo",
62
63
  "postbuild:all": "node scripts/verify-bundle.js",
63
64
  "typecheck": "tsc --noEmit",
@@ -103,6 +104,7 @@
103
104
  "open": "^8.4.2",
104
105
  "ora": "^5.4.1",
105
106
  "proper-lockfile": "^4.1.2",
107
+ "undici": "^5.29.0",
106
108
  "ws": "^8.16.0"
107
109
  },
108
110
  "devDependencies": {
@@ -18,7 +18,7 @@ _ccs_completion() {
18
18
 
19
19
  # Top-level completion (first argument)
20
20
  if [[ ${COMP_CWORD} -eq 1 ]]; then
21
- local commands="auth api cliproxy doctor env sync update"
21
+ local commands="auth api cliproxy config doctor env persist sync update"
22
22
  local flags="--help --version --shell-completion -h -v -sc"
23
23
  local cliproxy_profiles="gemini codex agy qwen"
24
24
  local profiles=""
@@ -156,23 +156,30 @@ _ccs_completion() {
156
156
  case "${prev}" in
157
157
  env)
158
158
  # Complete with profile names and flags (inline profiles since $cliproxy_profiles is out of scope)
159
- local env_opts="--format --shell --help -h gemini codex agy qwen iflow kiro ghcp claude"
159
+ local env_opts="--format --shell --ide --help -h gemini codex agy qwen iflow kiro ghcp claude default"
160
160
  if [[ -f ~/.ccs/config.json ]]; then
161
161
  env_opts="$env_opts $(jq -r '.profiles | keys[]' ~/.ccs/config.json 2>/dev/null || true)"
162
162
  fi
163
+ if [[ -f ~/.ccs/profiles.json ]]; then
164
+ env_opts="$env_opts $(jq -r '.profiles | keys[]' ~/.ccs/profiles.json 2>/dev/null || true)"
165
+ fi
163
166
  COMPREPLY=( $(compgen -W "${env_opts}" -- ${cur}) )
164
167
  return 0
165
168
  ;;
166
169
  --format)
167
- COMPREPLY=( $(compgen -W "openai anthropic raw" -- ${cur}) )
170
+ COMPREPLY=( $(compgen -W "openai anthropic raw claude-extension" -- ${cur}) )
168
171
  return 0
169
172
  ;;
170
173
  --shell)
171
174
  COMPREPLY=( $(compgen -W "auto bash zsh fish powershell" -- ${cur}) )
172
175
  return 0
173
176
  ;;
177
+ --ide)
178
+ COMPREPLY=( $(compgen -W "vscode cursor windsurf" -- ${cur}) )
179
+ return 0
180
+ ;;
174
181
  *)
175
- COMPREPLY=( $(compgen -W "--format --shell --help -h" -- ${cur}) )
182
+ COMPREPLY=( $(compgen -W "--format --shell --ide --help -h" -- ${cur}) )
176
183
  return 0
177
184
  ;;
178
185
  esac
@@ -1 +0,0 @@
1
- import{j as r,a0 as i,a1 as t}from"./radix-ui-BR1vy4kf.js";import"./react-vendor-CNOkPC89.js";import{c as s}from"./index-C2HpWmQl.js";import{k as o}from"./icons-D2eEmpHv.js";function b({className:e,...a}){return r.jsx(i,{"data-slot":"checkbox",className:s("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",e),...a,children:r.jsx(t,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:r.jsx(o,{className:"size-3.5"})})})}export{b as C};