ccman 0.0.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 (58) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/workflows/release.yml +213 -0
  4. package/.prettierrc +10 -0
  5. package/CLAUDE.md +215 -0
  6. package/README.md +361 -0
  7. package/README_zh.md +361 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +476 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/config/ConfigManager.d.ts +67 -0
  13. package/dist/config/ConfigManager.d.ts.map +1 -0
  14. package/dist/config/ConfigManager.js +226 -0
  15. package/dist/config/ConfigManager.js.map +1 -0
  16. package/dist/config/EnvironmentManager.d.ts +83 -0
  17. package/dist/config/EnvironmentManager.d.ts.map +1 -0
  18. package/dist/config/EnvironmentManager.js +280 -0
  19. package/dist/config/EnvironmentManager.js.map +1 -0
  20. package/dist/config/constants.d.ts +40 -0
  21. package/dist/config/constants.d.ts.map +1 -0
  22. package/dist/config/constants.js +97 -0
  23. package/dist/config/constants.js.map +1 -0
  24. package/dist/index.d.ts +5 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +26 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/shell/ShellManager.d.ts +73 -0
  29. package/dist/shell/ShellManager.d.ts.map +1 -0
  30. package/dist/shell/ShellManager.js +391 -0
  31. package/dist/shell/ShellManager.js.map +1 -0
  32. package/dist/types/index.d.ts +55 -0
  33. package/dist/types/index.d.ts.map +1 -0
  34. package/dist/types/index.js +6 -0
  35. package/dist/types/index.js.map +1 -0
  36. package/dist/utils/version.d.ts +67 -0
  37. package/dist/utils/version.d.ts.map +1 -0
  38. package/dist/utils/version.js +199 -0
  39. package/dist/utils/version.js.map +1 -0
  40. package/docs/npm-publish-guide.md +71 -0
  41. package/docs/release-guide.md +86 -0
  42. package/docs/version-management.md +64 -0
  43. package/jest.config.js +22 -0
  44. package/package.json +57 -0
  45. package/release-temp/README.md +361 -0
  46. package/release-temp/package.json +57 -0
  47. package/scripts/publish-local.sh +91 -0
  48. package/scripts/quick-release.sh +100 -0
  49. package/scripts/release.sh +430 -0
  50. package/src/cli.ts +510 -0
  51. package/src/config/ConfigManager.ts +227 -0
  52. package/src/config/EnvironmentManager.ts +327 -0
  53. package/src/config/constants.ts +64 -0
  54. package/src/index.ts +5 -0
  55. package/src/shell/ShellManager.ts +416 -0
  56. package/src/types/index.ts +60 -0
  57. package/src/utils/version.ts +189 -0
  58. package/tsconfig.json +25 -0
package/dist/cli.js ADDED
@@ -0,0 +1,476 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const EnvironmentManager_1 = require("./config/EnvironmentManager");
11
+ const version_1 = require("./utils/version");
12
+ const program = new commander_1.Command();
13
+ const envManager = new EnvironmentManager_1.EnvironmentManager();
14
+ /**
15
+ * 统一的 use 环境交互逻辑
16
+ */
17
+ async function performUseEnvironment(name, options) {
18
+ const result = await envManager.useEnvironment(name, {
19
+ autoWriteShell: options?.autoWrite,
20
+ autoSource: options?.autoSource
21
+ });
22
+ if (!options?.skipSuccessMessage) {
23
+ console.log(chalk_1.default.green(`✓ Switched to environment "${name}"`));
24
+ console.log(` Base URL: ${result.env.baseUrl}`);
25
+ }
26
+ if (result.shellWriteResult?.success) {
27
+ console.log(chalk_1.default.green(`✓ Environment variables written to ${result.shellWriteResult.filePath}`));
28
+ if (options?.autoSource) {
29
+ if (result.sourceResult?.success) {
30
+ console.log(chalk_1.default.green('✓ Shell configuration sourced automatically'));
31
+ console.log(chalk_1.default.yellow('⚠️ Note: Auto-sourcing may not work in all terminal environments'));
32
+ }
33
+ else {
34
+ console.log(chalk_1.default.red(`✗ Failed to source shell config: ${result.sourceResult?.error}`));
35
+ console.log(chalk_1.default.cyan('Please run manually: source ~/.bashrc (or ~/.zshrc)'));
36
+ }
37
+ }
38
+ else {
39
+ // 询问用户是否要自动 source
40
+ const sourceAnswer = await inquirer_1.default.prompt([
41
+ {
42
+ type: 'list',
43
+ name: 'sourceChoice',
44
+ message: 'How would you like to apply the environment variables?',
45
+ choices: [
46
+ { name: 'Manual - I will restart terminal or source manually (Recommended)', value: 'manual' },
47
+ { name: 'Auto-source - Try to source automatically (May not work in all environments)', value: 'auto' }
48
+ ],
49
+ default: 'manual'
50
+ }
51
+ ]);
52
+ if (sourceAnswer.sourceChoice === 'auto') {
53
+ console.log(chalk_1.default.yellow('⚠️ Attempting auto-source - this may not work in all terminal environments'));
54
+ const sourceResult = await envManager.getShellManager().autoSourceShell();
55
+ if (sourceResult.success) {
56
+ console.log(chalk_1.default.green('✓ Shell configuration sourced successfully'));
57
+ }
58
+ else {
59
+ console.log(chalk_1.default.red(`✗ Auto-source failed: ${sourceResult.error}`));
60
+ console.log(chalk_1.default.cyan('Please run manually: source ~/.bashrc (or ~/.zshrc)'));
61
+ }
62
+ }
63
+ else {
64
+ console.log(chalk_1.default.cyan('To apply changes, restart your terminal or run:'));
65
+ console.log(chalk_1.default.cyan('source ~/.bashrc (or ~/.zshrc)'));
66
+ }
67
+ }
68
+ }
69
+ else if (options?.autoWrite !== false) {
70
+ console.log(chalk_1.default.yellow('Environment variables have been set, but may not persist.'));
71
+ console.log(chalk_1.default.cyan('Consider running: source <(ccman env)'));
72
+ }
73
+ else {
74
+ console.log(chalk_1.default.yellow('To set environment variables manually, run:'));
75
+ console.log(chalk_1.default.cyan('source <(ccman env)'));
76
+ }
77
+ }
78
+ program
79
+ .name('ccman')
80
+ .description('Claude Code Manager - Manage Claude Code API configurations')
81
+ .version((0, version_1.getCurrentVersion)());
82
+ // 列出所有环境
83
+ program
84
+ .command('list')
85
+ .alias('ls')
86
+ .description('List all environment groups')
87
+ .action(() => {
88
+ const environments = envManager.listEnvironments();
89
+ if (environments.length === 0) {
90
+ console.log(chalk_1.default.yellow('No environment groups found. Use "ccman add" to create one.'));
91
+ return;
92
+ }
93
+ console.log();
94
+ environments.forEach(env => {
95
+ const marker = env.isCurrent ? chalk_1.default.green('* ') : ' ';
96
+ const name = env.isCurrent ? chalk_1.default.green(env.name) : env.name;
97
+ console.log(`${marker}${name.padEnd(15)} ${env.baseUrl}`);
98
+ if (env.lastUsed) {
99
+ const lastUsed = new Date(env.lastUsed).toLocaleDateString();
100
+ console.log(`${' '.repeat(17)} Last used: ${lastUsed}`);
101
+ }
102
+ });
103
+ console.log();
104
+ });
105
+ // 添加环境
106
+ program
107
+ .command('add <name> <baseUrl> [apiKey]')
108
+ .description('Add a new environment group')
109
+ .option('--no-auto-write', 'Do not automatically write to shell config')
110
+ .action(async (name, baseUrl, apiKey, options) => {
111
+ try {
112
+ if (!apiKey) {
113
+ const answer = await inquirer_1.default.prompt([
114
+ {
115
+ type: 'password',
116
+ name: 'apiKey',
117
+ message: 'Enter API Key:',
118
+ mask: '*'
119
+ }
120
+ ]);
121
+ apiKey = answer.apiKey;
122
+ }
123
+ const addOptions = {
124
+ name,
125
+ baseUrl,
126
+ apiKey: apiKey,
127
+ autoWriteShell: options?.autoWrite
128
+ };
129
+ const env = await envManager.addEnvironment(addOptions);
130
+ console.log(chalk_1.default.green(`✓ Added environment group "${name}"`));
131
+ console.log(` Base URL: ${env.baseUrl}`);
132
+ console.log(` Created: ${new Date(env.createdAt).toLocaleString()}`);
133
+ // 询问是否设为当前环境
134
+ const currentEnv = envManager.getCurrentEnvironment();
135
+ if (!currentEnv || currentEnv.name !== name) {
136
+ const useAnswer = await inquirer_1.default.prompt([
137
+ {
138
+ type: 'confirm',
139
+ name: 'useCurrent',
140
+ message: `Set "${name}" as current environment?`,
141
+ default: true
142
+ }
143
+ ]);
144
+ if (useAnswer.useCurrent) {
145
+ await performUseEnvironment(name, {
146
+ autoWrite: options?.autoWrite,
147
+ skipSuccessMessage: true // 因为前面已经显示了添加成功的信息
148
+ });
149
+ }
150
+ }
151
+ }
152
+ catch (error) {
153
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
154
+ process.exit(1);
155
+ }
156
+ });
157
+ // 删除环境
158
+ program
159
+ .command('remove <name>')
160
+ .alias('rm')
161
+ .description('Remove an environment group')
162
+ .action(async (name) => {
163
+ try {
164
+ const env = envManager.getEnvironment(name);
165
+ if (!env) {
166
+ console.error(chalk_1.default.red(`✗ Environment "${name}" not found`));
167
+ process.exit(1);
168
+ }
169
+ const answer = await inquirer_1.default.prompt([
170
+ {
171
+ type: 'confirm',
172
+ name: 'confirm',
173
+ message: `Are you sure you want to remove environment "${name}"?`,
174
+ default: false
175
+ }
176
+ ]);
177
+ if (answer.confirm) {
178
+ await envManager.removeEnvironment(name);
179
+ console.log(chalk_1.default.green(`✓ Removed environment "${name}"`));
180
+ }
181
+ else {
182
+ console.log(chalk_1.default.yellow('Operation cancelled'));
183
+ }
184
+ }
185
+ catch (error) {
186
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
187
+ process.exit(1);
188
+ }
189
+ });
190
+ // 使用环境
191
+ program
192
+ .command('use <name>')
193
+ .description('Switch to an environment group')
194
+ .option('--no-auto-write', 'Do not automatically write to shell config')
195
+ .option('--auto-source', 'Automatically source shell config after writing (risky)')
196
+ .action(async (name, options) => {
197
+ try {
198
+ await performUseEnvironment(name, {
199
+ autoWrite: options?.autoWrite,
200
+ autoSource: options?.autoSource
201
+ });
202
+ }
203
+ catch (error) {
204
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
205
+ process.exit(1);
206
+ }
207
+ });
208
+ // 显示当前环境
209
+ program
210
+ .command('current')
211
+ .description('Show current environment group')
212
+ .action(() => {
213
+ const currentEnv = envManager.getCurrentEnvironment();
214
+ if (!currentEnv) {
215
+ console.log(chalk_1.default.yellow('No environment is currently active.'));
216
+ console.log('Use "ccman use <name>" to activate an environment.');
217
+ return;
218
+ }
219
+ console.log();
220
+ console.log(chalk_1.default.green(`Current environment: ${currentEnv.name}`));
221
+ console.log(`Base URL: ${currentEnv.baseUrl}`);
222
+ console.log(`API Key: ${'*'.repeat(Math.min(currentEnv.apiKey.length, 20))}`);
223
+ console.log(`Created: ${new Date(currentEnv.createdAt).toLocaleString()}`);
224
+ if (currentEnv.lastUsed) {
225
+ console.log(`Last used: ${new Date(currentEnv.lastUsed).toLocaleString()}`);
226
+ }
227
+ console.log();
228
+ });
229
+ // 生成环境变量脚本
230
+ program
231
+ .command('env')
232
+ .description('Generate shell script to set environment variables')
233
+ .action(() => {
234
+ try {
235
+ const script = envManager.generateEnvScript();
236
+ console.log(script);
237
+ }
238
+ catch (error) {
239
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
240
+ process.exit(1);
241
+ }
242
+ });
243
+ // 测试环境
244
+ program
245
+ .command('test [name]')
246
+ .description('Test environment configuration (defaults to current)')
247
+ .action(async (name) => {
248
+ const result = await envManager.testEnvironment(name);
249
+ if (result.success) {
250
+ console.log(chalk_1.default.green(`✓ ${result.message}`));
251
+ }
252
+ else {
253
+ console.error(chalk_1.default.red(`✗ ${result.message}`));
254
+ if (result.error) {
255
+ console.error(chalk_1.default.gray(`Details: ${result.error}`));
256
+ }
257
+ process.exit(1);
258
+ }
259
+ });
260
+ // 显示统计信息
261
+ program
262
+ .command('status')
263
+ .description('Show CCM status and statistics')
264
+ .action(() => {
265
+ const stats = envManager.getStats();
266
+ const environments = envManager.listEnvironments();
267
+ console.log();
268
+ console.log(chalk_1.default.blue('CCM Status:'));
269
+ console.log(`Total environments: ${stats.totalEnvironments}`);
270
+ console.log(`Current environment: ${stats.currentEnvironment || 'None'}`);
271
+ console.log(`Shell integration: ${stats.hasShellIntegration ? 'Enabled' : 'Disabled'}`);
272
+ if (environments.length > 0) {
273
+ console.log();
274
+ console.log(chalk_1.default.blue('Recent environments:'));
275
+ const sortedEnvs = environments
276
+ .filter(env => env.lastUsed)
277
+ .sort((a, b) => new Date(b.lastUsed).getTime() - new Date(a.lastUsed).getTime())
278
+ .slice(0, 3);
279
+ sortedEnvs.forEach(env => {
280
+ const lastUsed = new Date(env.lastUsed).toLocaleDateString();
281
+ console.log(` ${env.name} (${lastUsed})`);
282
+ });
283
+ }
284
+ console.log();
285
+ });
286
+ // 清除所有配置
287
+ program
288
+ .command('clear')
289
+ .alias('clearall')
290
+ .description('Clear all environments and shell integration (DESTRUCTIVE)')
291
+ .action(async () => {
292
+ try {
293
+ // 确认操作
294
+ const confirmAnswer = await inquirer_1.default.prompt([
295
+ {
296
+ type: 'confirm',
297
+ name: 'confirmed',
298
+ message: chalk_1.default.red('⚠️ This will remove ALL environments and shell integration. Are you sure?'),
299
+ default: false
300
+ }
301
+ ]);
302
+ if (!confirmAnswer.confirmed) {
303
+ console.log(chalk_1.default.yellow('Operation cancelled.'));
304
+ return;
305
+ }
306
+ // 执行清除
307
+ console.log(chalk_1.default.yellow('Clearing CCM configuration...'));
308
+ const result = await envManager.clearAll();
309
+ // 显示结果
310
+ console.log();
311
+ if (result.success) {
312
+ console.log(chalk_1.default.green(`✓ ${result.message}`));
313
+ }
314
+ else {
315
+ console.log(chalk_1.default.red(`✗ ${result.message}`));
316
+ }
317
+ // 显示详细信息
318
+ if (result.details.length > 0) {
319
+ console.log();
320
+ result.details.forEach(detail => {
321
+ if (detail.startsWith('✓')) {
322
+ console.log(chalk_1.default.green(detail));
323
+ }
324
+ else if (detail.startsWith('⚠')) {
325
+ console.log(chalk_1.default.yellow(detail));
326
+ }
327
+ else if (detail.startsWith('✗')) {
328
+ console.log(chalk_1.default.red(detail));
329
+ }
330
+ else {
331
+ console.log(detail);
332
+ }
333
+ });
334
+ }
335
+ console.log();
336
+ console.log(chalk_1.default.cyan('CCM has been reset to initial state.'));
337
+ console.log(chalk_1.default.cyan('You can start fresh with: ccman config'));
338
+ }
339
+ catch (error) {
340
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
341
+ process.exit(1);
342
+ }
343
+ });
344
+ // 交互式配置
345
+ program
346
+ .command('config')
347
+ .description('Interactive configuration')
348
+ .action(async () => {
349
+ const environments = envManager.listEnvironments();
350
+ if (environments.length === 0) {
351
+ console.log(chalk_1.default.yellow('No environments found. Let\'s create your first one.'));
352
+ const answers = await inquirer_1.default.prompt([
353
+ { type: 'input', name: 'name', message: 'Environment name:', default: 'default' },
354
+ { type: 'input', name: 'baseUrl', message: 'Base URL:', default: 'https://api.anthropic.com' },
355
+ { type: 'password', name: 'apiKey', message: 'API Key:', mask: '*' },
356
+ { type: 'confirm', name: 'autoWrite', message: 'Automatically write to shell config?', default: true }
357
+ ]);
358
+ try {
359
+ await envManager.addEnvironment({
360
+ name: answers.name,
361
+ baseUrl: answers.baseUrl,
362
+ apiKey: answers.apiKey,
363
+ autoWriteShell: answers.autoWrite
364
+ });
365
+ console.log(chalk_1.default.green(`✓ Created environment "${answers.name}"`));
366
+ }
367
+ catch (error) {
368
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
369
+ }
370
+ return;
371
+ }
372
+ const choices = environments.map(env => ({
373
+ name: `${env.name} (${env.baseUrl})${env.isCurrent ? ' [current]' : ''}`,
374
+ value: env.name
375
+ }));
376
+ const action = await inquirer_1.default.prompt([
377
+ {
378
+ type: 'list',
379
+ name: 'action',
380
+ message: 'What would you like to do?',
381
+ choices: [
382
+ { name: 'Switch environment', value: 'switch' },
383
+ { name: 'Add new environment', value: 'add' },
384
+ { name: 'Edit environment', value: 'edit' },
385
+ { name: 'Remove environment', value: 'remove' },
386
+ { name: 'Show current status', value: 'status' }
387
+ ]
388
+ }
389
+ ]);
390
+ switch (action.action) {
391
+ case 'switch':
392
+ const switchAnswer = await inquirer_1.default.prompt([
393
+ {
394
+ type: 'list',
395
+ name: 'name',
396
+ message: 'Select environment:',
397
+ choices
398
+ }
399
+ ]);
400
+ try {
401
+ await performUseEnvironment(switchAnswer.name);
402
+ }
403
+ catch (error) {
404
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
405
+ }
406
+ break;
407
+ case 'add':
408
+ const addAnswers = await inquirer_1.default.prompt([
409
+ { type: 'input', name: 'name', message: 'Environment name:' },
410
+ { type: 'input', name: 'baseUrl', message: 'Base URL:' },
411
+ { type: 'password', name: 'apiKey', message: 'API Key:', mask: '*' }
412
+ ]);
413
+ try {
414
+ await envManager.addEnvironment(addAnswers);
415
+ console.log(chalk_1.default.green(`✓ Added environment "${addAnswers.name}"`));
416
+ }
417
+ catch (error) {
418
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
419
+ }
420
+ break;
421
+ case 'edit':
422
+ const editEnvAnswer = await inquirer_1.default.prompt([
423
+ {
424
+ type: 'list',
425
+ name: 'name',
426
+ message: 'Select environment to edit:',
427
+ choices
428
+ }
429
+ ]);
430
+ const currentConfig = envManager.getEnvironment(editEnvAnswer.name);
431
+ if (currentConfig) {
432
+ const editAnswers = await inquirer_1.default.prompt([
433
+ { type: 'input', name: 'baseUrl', message: 'Base URL:', default: currentConfig.baseUrl },
434
+ { type: 'password', name: 'apiKey', message: 'API Key:', mask: '*', default: currentConfig.apiKey }
435
+ ]);
436
+ try {
437
+ await envManager.updateEnvironment(editEnvAnswer.name, {
438
+ baseUrl: editAnswers.baseUrl,
439
+ apiKey: editAnswers.apiKey
440
+ });
441
+ console.log(chalk_1.default.green(`✓ Updated environment "${editEnvAnswer.name}"`));
442
+ }
443
+ catch (error) {
444
+ console.error(chalk_1.default.red(`✗ Error: ${error}`));
445
+ }
446
+ }
447
+ break;
448
+ case 'status':
449
+ {
450
+ const stats = envManager.getStats();
451
+ const environments = envManager.listEnvironments();
452
+ console.log();
453
+ console.log(chalk_1.default.blue('CCM Status:'));
454
+ console.log(`Total environments: ${stats.totalEnvironments}`);
455
+ console.log(`Current environment: ${stats.currentEnvironment || 'None'}`);
456
+ console.log(`Shell integration: ${stats.hasShellIntegration ? 'Enabled' : 'Disabled'}`);
457
+ if (environments.length > 0) {
458
+ console.log();
459
+ console.log(chalk_1.default.blue('Recent environments:'));
460
+ environments
461
+ .sort((a, b) => new Date(b.lastUsed || b.createdAt).getTime() - new Date(a.lastUsed || a.createdAt).getTime())
462
+ .slice(0, 3)
463
+ .forEach(env => {
464
+ const marker = env.isCurrent ? chalk_1.default.green('* ') : ' ';
465
+ const name = env.isCurrent ? chalk_1.default.green(env.name) : env.name;
466
+ console.log(`${marker}${name.padEnd(15)} ${env.baseUrl}`);
467
+ });
468
+ }
469
+ console.log();
470
+ }
471
+ break;
472
+ }
473
+ });
474
+ // 解析命令行参数
475
+ program.parse();
476
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Config, ClaudeEnv, GlobalSettings, AddEnvOptions, EnvironmentListItem } from '../types';
2
+ export declare class ConfigManager {
3
+ private readonly configDir;
4
+ private readonly configFile;
5
+ constructor();
6
+ /**
7
+ * 确保配置目录存在
8
+ */
9
+ private ensureConfigDir;
10
+ /**
11
+ * 获取配置
12
+ */
13
+ getConfig(): Config;
14
+ /**
15
+ * 保存配置
16
+ */
17
+ saveConfig(config: Config): void;
18
+ /**
19
+ * 添加环境
20
+ */
21
+ addEnvironment(options: AddEnvOptions): ClaudeEnv;
22
+ /**
23
+ * 删除环境
24
+ */
25
+ removeEnvironment(name: string): void;
26
+ /**
27
+ * 设置当前环境
28
+ */
29
+ setCurrentEnvironment(name: string): ClaudeEnv;
30
+ /**
31
+ * 获取当前环境
32
+ */
33
+ getCurrentEnvironment(): ClaudeEnv | null;
34
+ /**
35
+ * 获取所有环境列表
36
+ */
37
+ listEnvironments(): EnvironmentListItem[];
38
+ /**
39
+ * 获取指定环境
40
+ */
41
+ getEnvironment(name: string): ClaudeEnv | null;
42
+ /**
43
+ * 更新环境
44
+ */
45
+ updateEnvironment(name: string, updates: Partial<Omit<ClaudeEnv, 'name' | 'createdAt'>>): ClaudeEnv;
46
+ /**
47
+ * 更新全局设置
48
+ */
49
+ updateSettings(settings: Partial<GlobalSettings>): GlobalSettings;
50
+ /**
51
+ * 获取全局设置
52
+ */
53
+ getSettings(): GlobalSettings;
54
+ /**
55
+ * 检查环境是否存在
56
+ */
57
+ hasEnvironment(name: string): boolean;
58
+ /**
59
+ * 获取环境数量
60
+ */
61
+ getEnvironmentCount(): number;
62
+ /**
63
+ * 清除所有环境和重置配置
64
+ */
65
+ clearAll(): void;
66
+ }
67
+ //# sourceMappingURL=ConfigManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGjG,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;;IAQpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,SAAS,IAAI,MAAM;IAsBnB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS;IAyBjD;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBrC;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAc9C;;OAEG;IACH,qBAAqB,IAAI,SAAS,GAAG,IAAI;IAUzC;;OAEG;IACH,gBAAgB,IAAI,mBAAmB,EAAE;IASzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK9C;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS;IAgBnG;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc;IAUjE;;OAEG;IACH,WAAW,IAAI,cAAc;IAI7B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKrC;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAK7B;;OAEG;IACH,QAAQ,IAAI,IAAI;CAUjB"}