@kaitranntt/ccs 7.53.0-dev.3 → 7.53.0-dev.5
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 +58 -0
- package/dist/ccs.d.ts +1 -1
- package/dist/ccs.d.ts.map +1 -1
- package/dist/ccs.js +1 -0
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/binary/downloader.d.ts +1 -14
- package/dist/cliproxy/binary/downloader.d.ts.map +1 -1
- package/dist/cliproxy/binary/downloader.js +5 -43
- package/dist/cliproxy/binary/downloader.js.map +1 -1
- package/dist/commands/config-command.d.ts.map +1 -1
- package/dist/commands/config-command.js +7 -0
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/env-command.d.ts.map +1 -1
- package/dist/commands/env-command.js +31 -76
- package/dist/commands/env-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +10 -2
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/persist-command.d.ts +4 -4
- package/dist/commands/persist-command.d.ts.map +1 -1
- package/dist/commands/persist-command.js +76 -83
- package/dist/commands/persist-command.js.map +1 -1
- package/dist/shared/claude-extension-hosts.d.ts +12 -0
- package/dist/shared/claude-extension-hosts.d.ts.map +1 -0
- package/dist/shared/claude-extension-hosts.js +33 -0
- package/dist/shared/claude-extension-hosts.js.map +1 -0
- package/dist/shared/claude-extension-setup.d.ts +30 -0
- package/dist/shared/claude-extension-setup.d.ts.map +1 -0
- package/dist/shared/claude-extension-setup.js +232 -0
- package/dist/shared/claude-extension-setup.js.map +1 -0
- package/dist/ui/assets/{accounts--cwNsQjP.js → accounts-CZEg1_PX.js} +1 -1
- package/dist/ui/assets/{alert-dialog-p36g1qQ3.js → alert-dialog-DhwS38kc.js} +1 -1
- package/dist/ui/assets/{api-CV5n6K6m.js → api-sWNND4wP.js} +1 -1
- package/dist/ui/assets/{auth-section-BbAkkPVY.js → auth-section-nJIpOcnm.js} +1 -1
- package/dist/ui/assets/{backups-section-23AZLa6a.js → backups-section-D3A6hmrU.js} +1 -1
- package/dist/ui/assets/{checkbox-DevzY7b0.js → checkbox-CZrxD1iS.js} +1 -1
- package/dist/ui/assets/claude-extension-BjInaILv.js +1 -0
- package/dist/ui/assets/{cliproxy-Bp7J8ubf.js → cliproxy-BGiSCGkl.js} +2 -2
- package/dist/ui/assets/{cliproxy-control-panel-C5CoSr0Y.js → cliproxy-control-panel-CKO2Sn9B.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-B9YhXYaX.js → confirm-dialog-DTKxwrat.js} +1 -1
- package/dist/ui/assets/{copilot-C9ZTzmsE.js → copilot-CuRngdBg.js} +2 -2
- package/dist/ui/assets/{cursor-rzsYFYdN.js → cursor-Dxo0uIiU.js} +1 -1
- package/dist/ui/assets/{droid-C2HW6CP4.js → droid-Cl8QsJJL.js} +1 -1
- package/dist/ui/assets/{globalenv-section-DqoqH7aV.js → globalenv-section-C3dxxoD9.js} +1 -1
- package/dist/ui/assets/{health-U_NWGsbk.js → health-BUifaDU7.js} +1 -1
- package/dist/ui/assets/icons-DrEfTmfX.js +1 -0
- package/dist/ui/assets/{index-Cr6v7B1R.js → index-BOsbrhaa.js} +1 -1
- package/dist/ui/assets/index-Btf_ow2V.css +1 -0
- package/dist/ui/assets/{index-BS1NTGOE.js → index-CPdceT1C.js} +1 -1
- package/dist/ui/assets/index-CYo-E5rU.js +1 -0
- package/dist/ui/assets/index-Cw9Urr0S.js +47 -0
- package/dist/ui/assets/{index-CjAEUCa2.js → index-xayyyR26.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-BGYEE40m.js → proxy-status-widget-D94htBPb.js} +1 -1
- package/dist/ui/assets/{separator-ynn1LawO.js → separator-3fBbTn-V.js} +1 -1
- package/dist/ui/assets/{shared-C5T5_OVk.js → shared-q_FNNbjD.js} +1 -1
- package/dist/ui/assets/{switch-DqRgvjvy.js → switch-5N8qBdBr.js} +1 -1
- package/dist/ui/assets/updates-CubQ54J0.js +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/fetch-proxy-setup.d.ts +13 -0
- package/dist/utils/fetch-proxy-setup.d.ts.map +1 -0
- package/dist/utils/fetch-proxy-setup.js +112 -0
- package/dist/utils/fetch-proxy-setup.js.map +1 -0
- package/dist/utils/proxy-env.d.ts +15 -0
- package/dist/utils/proxy-env.d.ts.map +1 -0
- package/dist/utils/proxy-env.js +126 -0
- package/dist/utils/proxy-env.js.map +1 -0
- package/dist/web-server/routes/claude-extension-routes.d.ts +3 -0
- package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -0
- package/dist/web-server/routes/claude-extension-routes.js +161 -0
- package/dist/web-server/routes/claude-extension-routes.js.map +1 -0
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +2 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/services/claude-extension-binding-service.d.ts +30 -0
- package/dist/web-server/services/claude-extension-binding-service.d.ts.map +1 -0
- package/dist/web-server/services/claude-extension-binding-service.js +240 -0
- package/dist/web-server/services/claude-extension-binding-service.js.map +1 -0
- package/dist/web-server/services/claude-extension-settings-service.d.ts +23 -0
- package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -0
- package/dist/web-server/services/claude-extension-settings-service.js +493 -0
- package/dist/web-server/services/claude-extension-settings-service.js.map +1 -0
- package/package.json +2 -1
- package/scripts/completion/ccs.bash +11 -4
- package/dist/ui/assets/icons-D2eEmpHv.js +0 -1
- package/dist/ui/assets/index-BL_PxzDX.js +0 -47
- package/dist/ui/assets/index-BusjPRWX.css +0 -1
- package/dist/ui/assets/index-dRF49n0b.js +0 -1
- package/dist/ui/assets/updates-oGwlC9O3.js +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ClaudeExtensionHost } from '../../shared/claude-extension-hosts';
|
|
2
|
+
import { type ClaudeExtensionBinding } from './claude-extension-binding-service';
|
|
3
|
+
export type ClaudeExtensionActionTarget = 'shared' | 'ide' | 'all';
|
|
4
|
+
export type ClaudeExtensionFileState = 'applied' | 'drifted' | 'missing' | 'unconfigured';
|
|
5
|
+
export interface ClaudeExtensionTargetStatus {
|
|
6
|
+
target: 'shared' | 'ide';
|
|
7
|
+
path: string;
|
|
8
|
+
exists: boolean;
|
|
9
|
+
mtime: number | null;
|
|
10
|
+
state: ClaudeExtensionFileState;
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ClaudeExtensionBindingStatus {
|
|
14
|
+
bindingId: string;
|
|
15
|
+
sharedSettings: ClaudeExtensionTargetStatus;
|
|
16
|
+
ideSettings: ClaudeExtensionTargetStatus;
|
|
17
|
+
}
|
|
18
|
+
export declare function getDefaultClaudeExtensionIdeSettingsPath(host: ClaudeExtensionHost): string;
|
|
19
|
+
export declare function resolveClaudeExtensionIdeSettingsPath(binding: ClaudeExtensionBinding): string;
|
|
20
|
+
export declare function verifyClaudeExtensionBinding(binding: ClaudeExtensionBinding): Promise<ClaudeExtensionBindingStatus>;
|
|
21
|
+
export declare function applyClaudeExtensionBinding(binding: ClaudeExtensionBinding, target?: ClaudeExtensionActionTarget): Promise<ClaudeExtensionBindingStatus>;
|
|
22
|
+
export declare function resetClaudeExtensionBinding(binding: ClaudeExtensionBinding, target?: ClaudeExtensionActionTarget): Promise<ClaudeExtensionBindingStatus>;
|
|
23
|
+
//# sourceMappingURL=claude-extension-settings-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-extension-settings-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/claude-extension-settings-service.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,oCAAoC,CAAC;AAE5C,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AACnE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AAE1F,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,wBAAwB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,2BAA2B,CAAC;IAC5C,WAAW,EAAE,2BAA2B,CAAC;CAC1C;AAwSD,wBAAgB,wCAAwC,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA2C1F;AAED,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAI7F;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,4BAA4B,CAAC,CA+GvC;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,MAAM,GAAE,2BAAmC,GAC1C,OAAO,CAAC,4BAA4B,CAAC,CA2DvC;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,MAAM,GAAE,2BAAmC,GAC1C,OAAO,CAAC,4BAA4B,CAAC,CA4CvC"}
|
|
@@ -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-dev.
|
|
3
|
+
"version": "7.53.0-dev.5",
|
|
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
|