@kaitranntt/ccs 7.53.0 → 7.54.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 (164) hide show
  1. package/README.md +61 -1
  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 +1 -0
  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/config-command.d.ts.map +1 -1
  41. package/dist/commands/config-command.js +7 -0
  42. package/dist/commands/config-command.js.map +1 -1
  43. package/dist/commands/copilot-command.d.ts.map +1 -1
  44. package/dist/commands/copilot-command.js +19 -8
  45. package/dist/commands/copilot-command.js.map +1 -1
  46. package/dist/commands/env-command.d.ts.map +1 -1
  47. package/dist/commands/env-command.js +31 -76
  48. package/dist/commands/env-command.js.map +1 -1
  49. package/dist/commands/help-command.d.ts.map +1 -1
  50. package/dist/commands/help-command.js +10 -2
  51. package/dist/commands/help-command.js.map +1 -1
  52. package/dist/commands/persist-command.d.ts +4 -4
  53. package/dist/commands/persist-command.d.ts.map +1 -1
  54. package/dist/commands/persist-command.js +76 -83
  55. package/dist/commands/persist-command.js.map +1 -1
  56. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  57. package/dist/copilot/copilot-executor.js +23 -14
  58. package/dist/copilot/copilot-executor.js.map +1 -1
  59. package/dist/copilot/copilot-model-normalizer.d.ts +30 -0
  60. package/dist/copilot/copilot-model-normalizer.d.ts.map +1 -0
  61. package/dist/copilot/copilot-model-normalizer.js +159 -0
  62. package/dist/copilot/copilot-model-normalizer.js.map +1 -0
  63. package/dist/copilot/copilot-models.d.ts.map +1 -1
  64. package/dist/copilot/copilot-models.js +0 -9
  65. package/dist/copilot/copilot-models.js.map +1 -1
  66. package/dist/copilot/index.d.ts +1 -0
  67. package/dist/copilot/index.d.ts.map +1 -1
  68. package/dist/copilot/index.js +9 -1
  69. package/dist/copilot/index.js.map +1 -1
  70. package/dist/cursor/cursor-anthropic-response.d.ts +6 -0
  71. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -0
  72. package/dist/cursor/cursor-anthropic-response.js +190 -0
  73. package/dist/cursor/cursor-anthropic-response.js.map +1 -0
  74. package/dist/cursor/cursor-anthropic-translator.d.ts +11 -0
  75. package/dist/cursor/cursor-anthropic-translator.d.ts.map +1 -0
  76. package/dist/cursor/cursor-anthropic-translator.js +167 -0
  77. package/dist/cursor/cursor-anthropic-translator.js.map +1 -0
  78. package/dist/cursor/cursor-anthropic-types.d.ts +46 -0
  79. package/dist/cursor/cursor-anthropic-types.d.ts.map +1 -0
  80. package/dist/cursor/cursor-anthropic-types.js +3 -0
  81. package/dist/cursor/cursor-anthropic-types.js.map +1 -0
  82. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  83. package/dist/cursor/cursor-daemon-entry.js +53 -24
  84. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  85. package/dist/cursor/cursor-models.d.ts.map +1 -1
  86. package/dist/cursor/cursor-models.js +36 -2
  87. package/dist/cursor/cursor-models.js.map +1 -1
  88. package/dist/glmt/sse-parser.d.ts +2 -0
  89. package/dist/glmt/sse-parser.d.ts.map +1 -1
  90. package/dist/glmt/sse-parser.js +4 -0
  91. package/dist/glmt/sse-parser.js.map +1 -1
  92. package/dist/shared/claude-extension-hosts.d.ts +12 -0
  93. package/dist/shared/claude-extension-hosts.d.ts.map +1 -0
  94. package/dist/shared/claude-extension-hosts.js +33 -0
  95. package/dist/shared/claude-extension-hosts.js.map +1 -0
  96. package/dist/shared/claude-extension-setup.d.ts +30 -0
  97. package/dist/shared/claude-extension-setup.d.ts.map +1 -0
  98. package/dist/shared/claude-extension-setup.js +232 -0
  99. package/dist/shared/claude-extension-setup.js.map +1 -0
  100. package/dist/ui/assets/{accounts-BGeV6RYc.js → accounts-CZEg1_PX.js} +1 -1
  101. package/dist/ui/assets/{alert-dialog-BGgi27Hi.js → alert-dialog-DhwS38kc.js} +1 -1
  102. package/dist/ui/assets/{api-NqhAOtK1.js → api-sWNND4wP.js} +1 -1
  103. package/dist/ui/assets/{auth-section-B5dLDT5c.js → auth-section-nJIpOcnm.js} +1 -1
  104. package/dist/ui/assets/{backups-section-COPmsPIk.js → backups-section-D3A6hmrU.js} +1 -1
  105. package/dist/ui/assets/{checkbox-DYHfVVrN.js → checkbox-CZrxD1iS.js} +1 -1
  106. package/dist/ui/assets/claude-extension-BjInaILv.js +1 -0
  107. package/dist/ui/assets/{cliproxy-BSKey7Yk.js → cliproxy-BGiSCGkl.js} +2 -2
  108. package/dist/ui/assets/{cliproxy-control-panel-C-Yyhlim.js → cliproxy-control-panel-CKO2Sn9B.js} +1 -1
  109. package/dist/ui/assets/{confirm-dialog-B7Lzqyum.js → confirm-dialog-DTKxwrat.js} +1 -1
  110. package/dist/ui/assets/copilot-CuRngdBg.js +3 -0
  111. package/dist/ui/assets/{cursor-BH8co9su.js → cursor-Dxo0uIiU.js} +1 -1
  112. package/dist/ui/assets/{droid-C4lLcCII.js → droid-Cl8QsJJL.js} +1 -1
  113. package/dist/ui/assets/{globalenv-section-D0TAPAVS.js → globalenv-section-C3dxxoD9.js} +1 -1
  114. package/dist/ui/assets/{health-BzfCtqqG.js → health-BUifaDU7.js} +1 -1
  115. package/dist/ui/assets/icons-DrEfTmfX.js +1 -0
  116. package/dist/ui/assets/{index-DI8j_aYa.js → index-BOsbrhaa.js} +1 -1
  117. package/dist/ui/assets/index-Btf_ow2V.css +1 -0
  118. package/dist/ui/assets/{index-B3R5r7pg.js → index-CPdceT1C.js} +1 -1
  119. package/dist/ui/assets/index-CYo-E5rU.js +1 -0
  120. package/dist/ui/assets/index-Cw9Urr0S.js +47 -0
  121. package/dist/ui/assets/{index-BoCctuVm.js → index-xayyyR26.js} +1 -1
  122. package/dist/ui/assets/{proxy-status-widget-C3kt_0Qn.js → proxy-status-widget-D94htBPb.js} +1 -1
  123. package/dist/ui/assets/{separator-DJb9h9_B.js → separator-3fBbTn-V.js} +1 -1
  124. package/dist/ui/assets/{shared-CKcd4Q-6.js → shared-q_FNNbjD.js} +1 -1
  125. package/dist/ui/assets/{switch-BVx3z2gz.js → switch-5N8qBdBr.js} +1 -1
  126. package/dist/ui/assets/updates-CubQ54J0.js +1 -0
  127. package/dist/ui/index.html +3 -3
  128. package/dist/utils/fetch-proxy-setup.d.ts +13 -0
  129. package/dist/utils/fetch-proxy-setup.d.ts.map +1 -0
  130. package/dist/utils/fetch-proxy-setup.js +112 -0
  131. package/dist/utils/fetch-proxy-setup.js.map +1 -0
  132. package/dist/utils/proxy-env.d.ts +15 -0
  133. package/dist/utils/proxy-env.d.ts.map +1 -0
  134. package/dist/utils/proxy-env.js +126 -0
  135. package/dist/utils/proxy-env.js.map +1 -0
  136. package/dist/web-server/routes/claude-extension-routes.d.ts +3 -0
  137. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -0
  138. package/dist/web-server/routes/claude-extension-routes.js +161 -0
  139. package/dist/web-server/routes/claude-extension-routes.js.map +1 -0
  140. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
  141. package/dist/web-server/routes/copilot-routes.js +53 -45
  142. package/dist/web-server/routes/copilot-routes.js.map +1 -1
  143. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  144. package/dist/web-server/routes/copilot-settings-routes.js +77 -36
  145. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  146. package/dist/web-server/routes/index.d.ts.map +1 -1
  147. package/dist/web-server/routes/index.js +2 -0
  148. package/dist/web-server/routes/index.js.map +1 -1
  149. package/dist/web-server/services/claude-extension-binding-service.d.ts +30 -0
  150. package/dist/web-server/services/claude-extension-binding-service.d.ts.map +1 -0
  151. package/dist/web-server/services/claude-extension-binding-service.js +240 -0
  152. package/dist/web-server/services/claude-extension-binding-service.js.map +1 -0
  153. package/dist/web-server/services/claude-extension-settings-service.d.ts +23 -0
  154. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -0
  155. package/dist/web-server/services/claude-extension-settings-service.js +493 -0
  156. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -0
  157. package/package.json +2 -1
  158. package/scripts/completion/ccs.bash +11 -4
  159. package/dist/ui/assets/copilot-D-MitpPb.js +0 -3
  160. package/dist/ui/assets/icons-D2eEmpHv.js +0 -1
  161. package/dist/ui/assets/index-Br6LTYDi.js +0 -1
  162. package/dist/ui/assets/index-BusjPRWX.css +0 -1
  163. package/dist/ui/assets/index-C2HpWmQl.js +0 -47
  164. 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.2",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6",
5
5
  "keywords": [
6
6
  "cli",
@@ -103,6 +103,7 @@
103
103
  "open": "^8.4.2",
104
104
  "ora": "^5.4.1",
105
105
  "proper-lockfile": "^4.1.2",
106
+ "undici": "^5.29.0",
106
107
  "ws": "^8.16.0"
107
108
  },
108
109
  "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