@kaitranntt/ccs 7.19.2 → 7.20.0-dev.1

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 (106) hide show
  1. package/dist/ccs.js +6 -0
  2. package/dist/ccs.js.map +1 -1
  3. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  4. package/dist/cliproxy/cliproxy-executor.js +4 -1
  5. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  6. package/dist/cliproxy/quota-fetcher.d.ts +6 -3
  7. package/dist/cliproxy/quota-fetcher.d.ts.map +1 -1
  8. package/dist/cliproxy/quota-fetcher.js +61 -17
  9. package/dist/cliproxy/quota-fetcher.js.map +1 -1
  10. package/dist/cliproxy/quota-manager.d.ts +2 -2
  11. package/dist/cliproxy/quota-manager.d.ts.map +1 -1
  12. package/dist/cliproxy/quota-manager.js +7 -7
  13. package/dist/cliproxy/quota-manager.js.map +1 -1
  14. package/dist/commands/cliproxy-command.d.ts.map +1 -1
  15. package/dist/commands/cliproxy-command.js +7 -6
  16. package/dist/commands/cliproxy-command.js.map +1 -1
  17. package/dist/commands/config-auth/disable-command.d.ts +10 -0
  18. package/dist/commands/config-auth/disable-command.d.ts.map +1 -0
  19. package/dist/commands/config-auth/disable-command.js +64 -0
  20. package/dist/commands/config-auth/disable-command.js.map +1 -0
  21. package/dist/commands/config-auth/index.d.ts +14 -0
  22. package/dist/commands/config-auth/index.d.ts.map +1 -0
  23. package/dist/commands/config-auth/index.js +84 -0
  24. package/dist/commands/config-auth/index.js.map +1 -0
  25. package/dist/commands/config-auth/setup-command.d.ts +13 -0
  26. package/dist/commands/config-auth/setup-command.d.ts.map +1 -0
  27. package/dist/commands/config-auth/setup-command.js +121 -0
  28. package/dist/commands/config-auth/setup-command.js.map +1 -0
  29. package/dist/commands/config-auth/show-command.d.ts +10 -0
  30. package/dist/commands/config-auth/show-command.d.ts.map +1 -0
  31. package/dist/commands/config-auth/show-command.js +79 -0
  32. package/dist/commands/config-auth/show-command.js.map +1 -0
  33. package/dist/commands/config-auth/types.d.ts +25 -0
  34. package/dist/commands/config-auth/types.d.ts.map +1 -0
  35. package/dist/commands/config-auth/types.js +8 -0
  36. package/dist/commands/config-auth/types.js.map +1 -0
  37. package/dist/commands/config-command.d.ts.map +1 -1
  38. package/dist/commands/config-command.js +37 -1
  39. package/dist/commands/config-command.js.map +1 -1
  40. package/dist/commands/help-command.d.ts.map +1 -1
  41. package/dist/commands/help-command.js +5 -0
  42. package/dist/commands/help-command.js.map +1 -1
  43. package/dist/commands/persist-command.d.ts +12 -0
  44. package/dist/commands/persist-command.d.ts.map +1 -0
  45. package/dist/commands/persist-command.js +565 -0
  46. package/dist/commands/persist-command.js.map +1 -0
  47. package/dist/config/unified-config-loader.d.ts +6 -1
  48. package/dist/config/unified-config-loader.d.ts.map +1 -1
  49. package/dist/config/unified-config-loader.js +41 -1
  50. package/dist/config/unified-config-loader.js.map +1 -1
  51. package/dist/config/unified-config-types.d.ts +22 -0
  52. package/dist/config/unified-config-types.d.ts.map +1 -1
  53. package/dist/config/unified-config-types.js +12 -1
  54. package/dist/config/unified-config-types.js.map +1 -1
  55. package/dist/ui/assets/accounts-Be6b-nwn.js +1 -0
  56. package/dist/ui/assets/{alert-dialog-CnDvl5IB.js → alert-dialog-CM5u0JHs.js} +1 -1
  57. package/dist/ui/assets/api-mj8kMJz1.js +1 -0
  58. package/dist/ui/assets/{auth-section-DbZac9VD.js → auth-section-nFosGq6Z.js} +1 -1
  59. package/dist/ui/assets/{charts-CJC4bH8P.js → charts-BBPXh0Ar.js} +1 -1
  60. package/dist/ui/assets/cliproxy-DlHYA8zi.js +3 -0
  61. package/dist/ui/assets/{cliproxy-control-panel-CP-dhv4O.js → cliproxy-control-panel-wKdIZ6WV.js} +1 -1
  62. package/dist/ui/assets/{code-highlight-DKN39ySy.js → code-highlight-BRUf_pqB.js} +1 -1
  63. package/dist/ui/assets/{confirm-dialog-w5D52_lL.js → confirm-dialog-BcIEdkmr.js} +1 -1
  64. package/dist/ui/assets/copilot-CK7anGeR.js +4 -0
  65. package/dist/ui/assets/{form-utils-kUVlZZAO.js → form-utils-C-pVd1--.js} +1 -1
  66. package/dist/ui/assets/globalenv-section-BgoWz-A2.js +1 -0
  67. package/dist/ui/assets/{health-BaRdlHhs.js → health-Clpm6LpQ.js} +1 -1
  68. package/dist/ui/assets/icons-WqZToXEO.js +1 -0
  69. package/dist/ui/assets/{index-BuLI32Lk.js → index-B3Y_vbPs.js} +1 -1
  70. package/dist/ui/assets/index-C3Ezj6Tb.js +1 -0
  71. package/dist/ui/assets/index-CDRTPpUQ.js +47 -0
  72. package/dist/ui/assets/index-CNsISHN_.css +1 -0
  73. package/dist/ui/assets/{index-CAdQ23xy.js → index-fYt7TJz8.js} +1 -1
  74. package/dist/ui/assets/{notifications-dJQY2-U6.js → notifications-B2HqRBj7.js} +1 -1
  75. package/dist/ui/assets/{radix-ui-CBgg0XeO.js → radix-ui-CFOhsBGh.js} +4 -4
  76. package/dist/ui/assets/{react-vendor-B_CU-WTZ.js → react-vendor-CNOkPC89.js} +2 -2
  77. package/dist/ui/assets/shared-C95GV4af.js +1 -0
  78. package/dist/ui/assets/{switch-Kx7oj3ow.js → switch-CUS7UF_z.js} +1 -1
  79. package/dist/ui/assets/{tanstack-CxYN0q6L.js → tanstack-U3Rle5gh.js} +1 -1
  80. package/dist/ui/index.html +9 -9
  81. package/dist/web-server/index.d.ts.map +1 -1
  82. package/dist/web-server/index.js +5 -0
  83. package/dist/web-server/index.js.map +1 -1
  84. package/dist/web-server/middleware/auth-middleware.d.ts +27 -0
  85. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -0
  86. package/dist/web-server/middleware/auth-middleware.js +116 -0
  87. package/dist/web-server/middleware/auth-middleware.js.map +1 -0
  88. package/dist/web-server/routes/auth-routes.d.ts +7 -0
  89. package/dist/web-server/routes/auth-routes.d.ts.map +1 -0
  90. package/dist/web-server/routes/auth-routes.js +108 -0
  91. package/dist/web-server/routes/auth-routes.js.map +1 -0
  92. package/dist/web-server/routes/index.d.ts.map +1 -1
  93. package/dist/web-server/routes/index.js +3 -0
  94. package/dist/web-server/routes/index.js.map +1 -1
  95. package/package.json +6 -1
  96. package/dist/ui/assets/accounts-CJISzCiC.js +0 -1
  97. package/dist/ui/assets/api-DP559Tqr.js +0 -1
  98. package/dist/ui/assets/card-nbrHgs37.js +0 -1
  99. package/dist/ui/assets/cliproxy-ssaB44zs.js +0 -3
  100. package/dist/ui/assets/copilot-DsYQqfFs.js +0 -4
  101. package/dist/ui/assets/globalenv-section-Bli3PW-y.js +0 -1
  102. package/dist/ui/assets/icons-CZDQWWm2.js +0 -1
  103. package/dist/ui/assets/index-B7MyxZLG.js +0 -47
  104. package/dist/ui/assets/index-BX0IVNt5.css +0 -1
  105. package/dist/ui/assets/index-DIrZx85u.js +0 -1
  106. package/dist/ui/assets/shared-CNbeCoBd.js +0 -1
@@ -0,0 +1,565 @@
1
+ "use strict";
2
+ /**
3
+ * Persist Command Handler
4
+ *
5
+ * Writes a profile's environment variables to ~/.claude/settings.json
6
+ * for native Claude Code usage (IDEs, extensions, etc.).
7
+ *
8
+ * Supports all profile types: API, CLIProxy, Copilot.
9
+ * Account-based profiles are not supported (use CLAUDE_CONFIG_DIR).
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.handlePersistCommand = void 0;
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const os = __importStar(require("os"));
39
+ const ui_1 = require("../utils/ui");
40
+ const prompt_1 = require("../utils/prompt");
41
+ const profile_detector_1 = __importStar(require("../auth/profile-detector"));
42
+ const config_generator_1 = require("../cliproxy/config-generator");
43
+ const copilot_executor_1 = require("../copilot/copilot-executor");
44
+ const helpers_1 = require("../utils/helpers");
45
+ /** Parse command line arguments */
46
+ function parseArgs(args) {
47
+ const result = {};
48
+ for (let i = 0; i < args.length; i++) {
49
+ const arg = args[i];
50
+ if (arg === '--yes' || arg === '-y') {
51
+ result.yes = true;
52
+ }
53
+ else if (arg === '--help' || arg === '-h') {
54
+ // Will be handled in main function
55
+ }
56
+ else if (arg === '--list-backups') {
57
+ result.listBackups = true;
58
+ }
59
+ else if (arg === '--restore') {
60
+ // Check if next arg is a timestamp (not a flag)
61
+ const nextArg = args[i + 1];
62
+ if (nextArg && !nextArg.startsWith('-')) {
63
+ result.restore = nextArg;
64
+ i++; // Skip next arg
65
+ }
66
+ else {
67
+ result.restore = true; // Use latest
68
+ }
69
+ }
70
+ else if (!arg.startsWith('-') && !result.profile) {
71
+ result.profile = arg;
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ /** Get Claude settings.json path */
77
+ function getClaudeSettingsPath() {
78
+ return path.join(os.homedir(), '.claude', 'settings.json');
79
+ }
80
+ /** Read existing Claude settings.json with validation */
81
+ function readClaudeSettings() {
82
+ const settingsPath = getClaudeSettingsPath();
83
+ try {
84
+ const content = fs.readFileSync(settingsPath, 'utf8');
85
+ // Handle empty file (0 bytes)
86
+ if (!content.trim()) {
87
+ return {};
88
+ }
89
+ const parsed = JSON.parse(content);
90
+ // Validate parsed value is a plain object (not array, null, or primitive)
91
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
92
+ throw new Error('settings.json must contain a JSON object, not an array or primitive');
93
+ }
94
+ return parsed;
95
+ }
96
+ catch (error) {
97
+ const nodeError = error;
98
+ if (nodeError.code === 'ENOENT') {
99
+ return {};
100
+ }
101
+ throw new Error(`Failed to parse settings.json: ${error.message}`);
102
+ }
103
+ }
104
+ /**
105
+ * Write settings back to settings.json
106
+ * Note: mode 0o600 only applies when creating a new file.
107
+ * Existing file permissions are preserved (acceptable behavior).
108
+ */
109
+ function writeClaudeSettings(settings) {
110
+ const settingsPath = getClaudeSettingsPath();
111
+ // Security: Reject symlinks to prevent writing to unexpected locations
112
+ if (isSymlink(settingsPath)) {
113
+ throw new Error('settings.json is a symlink - refusing to write for security');
114
+ }
115
+ const dir = path.dirname(settingsPath);
116
+ if (!fs.existsSync(dir)) {
117
+ fs.mkdirSync(dir, { recursive: true });
118
+ }
119
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 });
120
+ }
121
+ /** Maximum number of backups to keep (oldest are deleted) */
122
+ const MAX_BACKUPS = 10;
123
+ /** Check if path is a symlink (security check) */
124
+ function isSymlink(filePath) {
125
+ try {
126
+ const stats = fs.lstatSync(filePath);
127
+ return stats.isSymbolicLink();
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ }
133
+ /** Create backup of settings.json with proper permissions and rotation */
134
+ function createBackup() {
135
+ const settingsPath = getClaudeSettingsPath();
136
+ if (!fs.existsSync(settingsPath)) {
137
+ throw new Error('No settings.json to backup');
138
+ }
139
+ // Security: Reject symlinks to prevent writing to unexpected locations
140
+ if (isSymlink(settingsPath)) {
141
+ throw new Error('settings.json is a symlink - refusing to backup for security');
142
+ }
143
+ const now = new Date();
144
+ const timestamp = now.getFullYear().toString() +
145
+ (now.getMonth() + 1).toString().padStart(2, '0') +
146
+ now.getDate().toString().padStart(2, '0') +
147
+ '_' +
148
+ now.getHours().toString().padStart(2, '0') +
149
+ now.getMinutes().toString().padStart(2, '0') +
150
+ now.getSeconds().toString().padStart(2, '0');
151
+ const backupPath = `${settingsPath}.backup.${timestamp}`;
152
+ fs.copyFileSync(settingsPath, backupPath);
153
+ // Security: Set restrictive permissions on backup (contains API keys)
154
+ fs.chmodSync(backupPath, 0o600);
155
+ // Cleanup: Rotate old backups (keep only MAX_BACKUPS)
156
+ cleanupOldBackups();
157
+ return backupPath;
158
+ }
159
+ /** Remove old backups keeping only MAX_BACKUPS most recent */
160
+ function cleanupOldBackups() {
161
+ const backups = getBackupFiles();
162
+ if (backups.length > MAX_BACKUPS) {
163
+ const toDelete = backups.slice(MAX_BACKUPS);
164
+ for (const backup of toDelete) {
165
+ try {
166
+ fs.unlinkSync(backup.path);
167
+ }
168
+ catch {
169
+ // Ignore deletion errors (file may be locked or already deleted)
170
+ }
171
+ }
172
+ }
173
+ }
174
+ /** Get all backup files sorted by date (newest first) */
175
+ function getBackupFiles() {
176
+ const settingsPath = getClaudeSettingsPath();
177
+ const dir = path.dirname(settingsPath);
178
+ if (!fs.existsSync(dir)) {
179
+ return [];
180
+ }
181
+ const backupPattern = /^settings\.json\.backup\.(\d{8}_\d{6})$/;
182
+ const files = fs
183
+ .readdirSync(dir)
184
+ .filter((f) => backupPattern.test(f))
185
+ .map((f) => {
186
+ const match = f.match(backupPattern);
187
+ if (!match)
188
+ return null;
189
+ const timestamp = match[1];
190
+ // Parse YYYYMMDD_HHMMSS
191
+ const year = parseInt(timestamp.slice(0, 4));
192
+ const month = parseInt(timestamp.slice(4, 6)) - 1;
193
+ const day = parseInt(timestamp.slice(6, 8));
194
+ const hour = parseInt(timestamp.slice(9, 11));
195
+ const min = parseInt(timestamp.slice(11, 13));
196
+ const sec = parseInt(timestamp.slice(13, 15));
197
+ return {
198
+ path: path.join(dir, f),
199
+ timestamp,
200
+ date: new Date(year, month, day, hour, min, sec),
201
+ };
202
+ })
203
+ .filter((f) => f !== null)
204
+ .sort((a, b) => b.date.getTime() - a.date.getTime()); // newest first
205
+ return files;
206
+ }
207
+ /** Mask API key for display (show first 4 and last 4 chars) */
208
+ function maskApiKey(key) {
209
+ if (key.length <= 12) {
210
+ return '****';
211
+ }
212
+ return `${key.slice(0, 4)}...${key.slice(-4)}`;
213
+ }
214
+ /** Resolve env vars for a profile */
215
+ async function resolveProfileEnvVars(profileName, profileResult) {
216
+ switch (profileResult.type) {
217
+ case 'settings': {
218
+ // API profile - load from settings file
219
+ let env = {};
220
+ if (profileResult.env) {
221
+ env = profileResult.env;
222
+ }
223
+ else if (profileResult.settingsPath) {
224
+ env = (0, profile_detector_1.loadSettingsFromFile)((0, helpers_1.expandPath)(profileResult.settingsPath));
225
+ }
226
+ if (Object.keys(env).length === 0) {
227
+ throw new Error(`Profile '${profileName}' has no env vars configured`);
228
+ }
229
+ return { env, profileType: 'API' };
230
+ }
231
+ case 'cliproxy': {
232
+ // CLIProxy profile - generate env vars
233
+ const provider = profileResult.provider || profileName;
234
+ const port = profileResult.port || config_generator_1.CLIPROXY_DEFAULT_PORT;
235
+ const env = (0, config_generator_1.getEffectiveEnvVars)(provider, port, profileResult.settingsPath);
236
+ return {
237
+ env,
238
+ profileType: 'CLIProxy',
239
+ warning: 'CLIProxy must be running for this profile to work',
240
+ };
241
+ }
242
+ case 'copilot': {
243
+ // Copilot profile - generate env vars
244
+ if (!profileResult.copilotConfig) {
245
+ throw new Error('Copilot configuration not found');
246
+ }
247
+ const env = (0, copilot_executor_1.generateCopilotEnv)(profileResult.copilotConfig);
248
+ return {
249
+ env,
250
+ profileType: 'Copilot',
251
+ warning: 'copilot-api daemon must be running for this profile to work',
252
+ };
253
+ }
254
+ case 'account': {
255
+ throw new Error(`Account profiles use CLAUDE_CONFIG_DIR isolation, not env vars.\n` +
256
+ `Use 'ccs ${profileName}' to run with this profile instead.`);
257
+ }
258
+ case 'default': {
259
+ throw new Error('Default profile has no env vars to persist.\n' +
260
+ 'Specify a profile name: ccs persist <profile>');
261
+ }
262
+ default: {
263
+ throw new Error(`Unknown profile type: ${profileResult.type}`);
264
+ }
265
+ }
266
+ }
267
+ /** Handle --list-backups flag */
268
+ async function handleListBackups() {
269
+ await (0, ui_1.initUI)();
270
+ const backups = getBackupFiles();
271
+ if (backups.length === 0) {
272
+ console.log((0, ui_1.info)('No backups found'));
273
+ return;
274
+ }
275
+ console.log((0, ui_1.header)('Available Backups'));
276
+ console.log('');
277
+ backups.forEach((b, i) => {
278
+ const dateStr = b.date.toLocaleString();
279
+ const marker = i === 0 ? (0, ui_1.color)(' (latest)', 'success') : '';
280
+ console.log(` ${(0, ui_1.color)(b.timestamp, 'command')} ${(0, ui_1.dim)(dateStr)}${marker}`);
281
+ });
282
+ console.log('');
283
+ console.log((0, ui_1.dim)('To restore: ccs persist --restore [timestamp]'));
284
+ }
285
+ /** Handle --restore [timestamp] flag */
286
+ async function handleRestore(timestamp, yes) {
287
+ await (0, ui_1.initUI)();
288
+ const backups = getBackupFiles();
289
+ if (backups.length === 0) {
290
+ console.log((0, ui_1.fail)('No backups found'));
291
+ process.exit(1);
292
+ }
293
+ // Find backup to restore
294
+ let backup;
295
+ if (timestamp === true) {
296
+ // Use latest
297
+ backup = backups[0];
298
+ }
299
+ else {
300
+ const found = backups.find((b) => b.timestamp === timestamp);
301
+ if (!found) {
302
+ console.log((0, ui_1.fail)(`Backup not found: ${timestamp}`));
303
+ console.log('');
304
+ console.log('Available backups:');
305
+ backups.slice(0, 5).forEach((b) => console.log(` ${b.timestamp}`));
306
+ process.exit(1);
307
+ }
308
+ backup = found;
309
+ }
310
+ console.log((0, ui_1.header)('Restore Backup'));
311
+ console.log('');
312
+ console.log(`Backup: ${(0, ui_1.color)(backup.timestamp, 'command')}`);
313
+ console.log(`Date: ${backup.date.toLocaleString()}`);
314
+ console.log('');
315
+ console.log((0, ui_1.warn)('This will replace ~/.claude/settings.json'));
316
+ console.log('');
317
+ if (!yes) {
318
+ const proceed = await prompt_1.InteractivePrompt.confirm('Proceed with restore?', { default: false });
319
+ if (!proceed) {
320
+ console.log((0, ui_1.info)('Cancelled'));
321
+ process.exit(0);
322
+ }
323
+ }
324
+ // Validate backup JSON integrity before restore
325
+ try {
326
+ const backupContent = fs.readFileSync(backup.path, 'utf8');
327
+ const parsed = JSON.parse(backupContent);
328
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
329
+ console.log((0, ui_1.fail)('Backup file is corrupted: not a valid JSON object'));
330
+ process.exit(1);
331
+ }
332
+ }
333
+ catch (error) {
334
+ console.log((0, ui_1.fail)(`Backup file is corrupted: ${error.message}`));
335
+ process.exit(1);
336
+ }
337
+ // Security: Reject symlink backup files
338
+ if (isSymlink(backup.path)) {
339
+ console.log((0, ui_1.fail)('Backup file is a symlink - refusing to restore for security'));
340
+ process.exit(1);
341
+ }
342
+ // Copy backup over settings.json
343
+ const settingsPath = getClaudeSettingsPath();
344
+ // Security: Reject symlink target
345
+ if (isSymlink(settingsPath)) {
346
+ console.log((0, ui_1.fail)('settings.json is a symlink - refusing to restore for security'));
347
+ process.exit(1);
348
+ }
349
+ fs.copyFileSync(backup.path, settingsPath);
350
+ console.log((0, ui_1.ok)(`Restored from backup: ${backup.timestamp}`));
351
+ }
352
+ /** Show help for persist command */
353
+ async function showHelp() {
354
+ await (0, ui_1.initUI)();
355
+ console.log((0, ui_1.header)('CCS Persist Command'));
356
+ console.log('');
357
+ console.log((0, ui_1.subheader)('Usage'));
358
+ console.log(` ${(0, ui_1.color)('ccs persist', 'command')} <profile> [options]`);
359
+ console.log(` ${(0, ui_1.color)('ccs persist', 'command')} --list-backups`);
360
+ console.log(` ${(0, ui_1.color)('ccs persist', 'command')} --restore [timestamp]`);
361
+ console.log('');
362
+ console.log((0, ui_1.subheader)('Description'));
363
+ console.log(" Writes a profile's environment variables directly to");
364
+ console.log(' ~/.claude/settings.json for native Claude Code usage.');
365
+ console.log('');
366
+ console.log(' This allows Claude Code to use the profile without CCS,');
367
+ console.log(' enabling compatibility with IDEs and extensions.');
368
+ console.log('');
369
+ console.log((0, ui_1.subheader)('Options'));
370
+ console.log(` ${(0, ui_1.color)('--yes, -y', 'command')} Skip confirmation prompts (auto-backup)`);
371
+ console.log(` ${(0, ui_1.color)('--help, -h', 'command')} Show this help message`);
372
+ console.log('');
373
+ console.log((0, ui_1.subheader)('Backup Management'));
374
+ console.log(` ${(0, ui_1.color)('--list-backups', 'command')} List available backup files`);
375
+ console.log(` ${(0, ui_1.color)('--restore', 'command')} Restore from the most recent backup`);
376
+ console.log(` ${(0, ui_1.color)('--restore <ts>', 'command')} Restore from specific backup (e.g., 20260110_205324)`);
377
+ console.log('');
378
+ console.log((0, ui_1.subheader)('Supported Profile Types'));
379
+ console.log(` ${(0, ui_1.color)('API profiles', 'command')} glm, glmt, kimi, custom API profiles`);
380
+ console.log(` ${(0, ui_1.color)('CLIProxy', 'command')} gemini, codex, agy, qwen, kiro, ghcp`);
381
+ console.log(` ${(0, ui_1.color)('Copilot', 'command')} copilot (requires copilot-api daemon)`);
382
+ console.log(` ${(0, ui_1.dim)('Account-based')} Not supported (uses CLAUDE_CONFIG_DIR)`);
383
+ console.log('');
384
+ console.log((0, ui_1.subheader)('Examples'));
385
+ console.log(` ${(0, ui_1.dim)('# Persist GLM profile')}`);
386
+ console.log(` ${(0, ui_1.color)('ccs persist glm', 'command')}`);
387
+ console.log('');
388
+ console.log(` ${(0, ui_1.dim)('# Persist with auto-confirmation')}`);
389
+ console.log(` ${(0, ui_1.color)('ccs persist gemini --yes', 'command')}`);
390
+ console.log('');
391
+ console.log(` ${(0, ui_1.dim)('# List all backups')}`);
392
+ console.log(` ${(0, ui_1.color)('ccs persist --list-backups', 'command')}`);
393
+ console.log('');
394
+ console.log(` ${(0, ui_1.dim)('# Restore latest backup')}`);
395
+ console.log(` ${(0, ui_1.color)('ccs persist --restore', 'command')}`);
396
+ console.log('');
397
+ console.log(` ${(0, ui_1.dim)('# Restore specific backup')}`);
398
+ console.log(` ${(0, ui_1.color)('ccs persist --restore 20260110_205324', 'command')}`);
399
+ console.log('');
400
+ console.log((0, ui_1.subheader)('Notes'));
401
+ console.log(' [i] CLIProxy profiles require the proxy to be running.');
402
+ console.log(' [i] Copilot profiles require copilot-api daemon.');
403
+ console.log(' [i] Backups are saved as ~/.claude/settings.json.backup.YYYYMMDD_HHMMSS');
404
+ console.log('');
405
+ }
406
+ /** Main persist command handler */
407
+ async function handlePersistCommand(args) {
408
+ // Check for help first
409
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
410
+ await showHelp();
411
+ return;
412
+ }
413
+ const parsedArgs = parseArgs(args);
414
+ // Handle --list-backups
415
+ if (parsedArgs.listBackups) {
416
+ await handleListBackups();
417
+ return;
418
+ }
419
+ // Handle --restore
420
+ if (parsedArgs.restore) {
421
+ await handleRestore(parsedArgs.restore, parsedArgs.yes ?? false);
422
+ return;
423
+ }
424
+ await (0, ui_1.initUI)();
425
+ if (!parsedArgs.profile) {
426
+ console.log((0, ui_1.fail)('Profile name is required'));
427
+ console.log('');
428
+ console.log('Usage:');
429
+ console.log(` ${(0, ui_1.color)('ccs persist <profile>', 'command')}`);
430
+ console.log('');
431
+ console.log('Run for help:');
432
+ console.log(` ${(0, ui_1.color)('ccs persist --help', 'command')}`);
433
+ process.exit(1);
434
+ }
435
+ // Detect profile
436
+ const detector = new profile_detector_1.default();
437
+ let profileResult;
438
+ try {
439
+ profileResult = detector.detectProfileType(parsedArgs.profile);
440
+ }
441
+ catch (error) {
442
+ const err = error;
443
+ console.log((0, ui_1.fail)(`Profile not found: ${parsedArgs.profile}`));
444
+ console.log('');
445
+ if (err.availableProfiles) {
446
+ console.log(err.availableProfiles);
447
+ }
448
+ process.exit(1);
449
+ }
450
+ // Resolve env vars
451
+ let resolved;
452
+ try {
453
+ resolved = await resolveProfileEnvVars(parsedArgs.profile, profileResult);
454
+ }
455
+ catch (error) {
456
+ console.log((0, ui_1.fail)(error.message));
457
+ process.exit(1);
458
+ }
459
+ // Display what will be written
460
+ console.log((0, ui_1.header)(`Persist Profile: ${parsedArgs.profile}`));
461
+ console.log('');
462
+ console.log(`Profile type: ${(0, ui_1.color)(resolved.profileType, 'command')}`);
463
+ console.log('');
464
+ console.log('The following env vars will be written to ~/.claude/settings.json:');
465
+ console.log('');
466
+ // Display env vars (mask sensitive values)
467
+ const envKeys = Object.keys(resolved.env);
468
+ if (envKeys.length === 0) {
469
+ console.log((0, ui_1.fail)('Profile has no environment variables to persist'));
470
+ process.exit(1);
471
+ }
472
+ const maxKeyLen = Math.max(...envKeys.map((k) => k.length));
473
+ for (const [key, value] of Object.entries(resolved.env)) {
474
+ const paddedKey = key.padEnd(maxKeyLen + 2);
475
+ const displayValue = key.includes('TOKEN') || key.includes('KEY') || key.includes('SECRET')
476
+ ? maskApiKey(value)
477
+ : value;
478
+ console.log(` ${(0, ui_1.color)(paddedKey, 'command')} = ${displayValue}`);
479
+ }
480
+ console.log('');
481
+ // Show warning if applicable
482
+ if (resolved.warning) {
483
+ console.log((0, ui_1.warn)(resolved.warning));
484
+ console.log('');
485
+ }
486
+ // Warning about modification
487
+ console.log((0, ui_1.warn)('This will modify ~/.claude/settings.json'));
488
+ console.log((0, ui_1.dim)(' Existing hooks and other settings will be preserved.'));
489
+ console.log('');
490
+ // Check if settings.json exists for backup
491
+ const settingsPath = getClaudeSettingsPath();
492
+ const settingsExist = fs.existsSync(settingsPath);
493
+ // Track backup path for error recovery guidance
494
+ let createdBackupPath = null;
495
+ // Backup prompt (unless --yes)
496
+ if (settingsExist) {
497
+ let createBackupFlag = parsedArgs.yes === true; // Auto-backup with --yes
498
+ if (!parsedArgs.yes) {
499
+ createBackupFlag = await prompt_1.InteractivePrompt.confirm('Create backup before modifying?', {
500
+ default: true,
501
+ });
502
+ }
503
+ if (createBackupFlag) {
504
+ try {
505
+ createdBackupPath = createBackup();
506
+ console.log((0, ui_1.ok)(`Backup created: ${createdBackupPath.replace(os.homedir(), '~')}`));
507
+ console.log('');
508
+ }
509
+ catch (error) {
510
+ console.log((0, ui_1.fail)(`Failed to create backup: ${error.message}`));
511
+ process.exit(1);
512
+ }
513
+ }
514
+ }
515
+ // Proceed confirmation (unless --yes)
516
+ if (!parsedArgs.yes) {
517
+ const proceed = await prompt_1.InteractivePrompt.confirm('Proceed with persist?', { default: true });
518
+ if (!proceed) {
519
+ console.log((0, ui_1.info)('Cancelled'));
520
+ process.exit(0);
521
+ }
522
+ }
523
+ // Read existing settings and merge
524
+ const existingSettings = readClaudeSettings();
525
+ // Validate existing env is an object (not array/primitive)
526
+ const rawEnv = existingSettings.env;
527
+ let existingEnv = {};
528
+ if (rawEnv !== undefined && rawEnv !== null) {
529
+ if (typeof rawEnv !== 'object' || Array.isArray(rawEnv)) {
530
+ console.log((0, ui_1.warn)('Existing env in settings.json is not an object - it will be replaced'));
531
+ }
532
+ else {
533
+ existingEnv = rawEnv;
534
+ }
535
+ }
536
+ const mergedSettings = {
537
+ ...existingSettings,
538
+ env: {
539
+ ...existingEnv,
540
+ ...resolved.env,
541
+ },
542
+ };
543
+ // Write merged settings
544
+ try {
545
+ writeClaudeSettings(mergedSettings);
546
+ }
547
+ catch (error) {
548
+ console.log((0, ui_1.fail)(`Failed to write settings: ${error.message}`));
549
+ if (createdBackupPath) {
550
+ console.log('');
551
+ console.log((0, ui_1.info)(`A backup was created before this error:`));
552
+ console.log(` ${createdBackupPath.replace(os.homedir(), '~')}`);
553
+ console.log((0, ui_1.dim)(' To restore: ccs persist --restore'));
554
+ }
555
+ process.exit(1);
556
+ }
557
+ console.log('');
558
+ console.log((0, ui_1.ok)(`Profile '${parsedArgs.profile}' written to ~/.claude/settings.json`));
559
+ console.log('');
560
+ console.log((0, ui_1.info)('Claude Code will now use this profile by default.'));
561
+ console.log((0, ui_1.dim)(' To revert, restore the backup or edit settings.json manually.'));
562
+ console.log('');
563
+ }
564
+ exports.handlePersistCommand = handlePersistCommand;
565
+ //# sourceMappingURL=persist-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist-command.js","sourceRoot":"","sources":["../../src/commands/persist-command.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Loads and saves the unified YAML configuration.
5
5
  * Provides fallback to legacy JSON format for backward compatibility.
6
6
  */
7
- import { UnifiedConfig, GlobalEnvConfig } from './unified-config-types';
7
+ import { UnifiedConfig, GlobalEnvConfig, DashboardAuthConfig } from './unified-config-types';
8
8
  /**
9
9
  * Get path to unified config.yaml
10
10
  */
@@ -98,4 +98,9 @@ export declare function getWebSearchConfig(): {
98
98
  * Returns defaults if not configured.
99
99
  */
100
100
  export declare function getGlobalEnvConfig(): GlobalEnvConfig;
101
+ /**
102
+ * Get dashboard_auth configuration with ENV var override.
103
+ * Priority: ENV vars > config.yaml > defaults
104
+ */
105
+ export declare function getDashboardAuthConfig(): DashboardAuthConfig;
101
106
  //# sourceMappingURL=unified-config-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unified-config-loader.d.ts","sourceRoot":"","sources":["../../src/config/unified-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,aAAa,EAQb,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAMhC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAK1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAuCxD;AAuID;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,aAAa,CAUzD;AA2KD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAiC7D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAKlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,QAAQ,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,CAAC;IAEF,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD,CAqCA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAMpD"}
1
+ {"version":3,"file":"unified-config-loader.d.ts","sourceRoot":"","sources":["../../src/config/unified-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,aAAa,EASb,eAAe,EACf,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAMhC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAK1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAuCxD;AAiJD;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,aAAa,CAUzD;AA+LD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAiC7D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAKlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,QAAQ,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,CAAC;IAEF,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD,CAqCA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAMpD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAiB5D"}