ccman 0.1.2 → 2.0.0

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 (78) hide show
  1. package/.github/workflows/release.yml +5 -5
  2. package/CLAUDE.md +246 -185
  3. package/README.md +282 -249
  4. package/README_zh.md +283 -250
  5. package/dev-test.sh +40 -0
  6. package/dist/cli.js +421 -369
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/lang.d.ts +3 -0
  9. package/dist/commands/lang.d.ts.map +1 -0
  10. package/dist/commands/lang.js +99 -0
  11. package/dist/commands/lang.js.map +1 -0
  12. package/dist/core/CCMConfigManager.d.ts +52 -0
  13. package/dist/core/CCMConfigManager.d.ts.map +1 -0
  14. package/dist/core/CCMConfigManager.js +203 -0
  15. package/dist/core/CCMConfigManager.js.map +1 -0
  16. package/dist/core/ClaudeConfigManager.d.ts +35 -0
  17. package/dist/core/ClaudeConfigManager.d.ts.map +1 -0
  18. package/dist/core/ClaudeConfigManager.js +151 -0
  19. package/dist/core/ClaudeConfigManager.js.map +1 -0
  20. package/dist/i18n/LanguageManager.d.ts +43 -0
  21. package/dist/i18n/LanguageManager.d.ts.map +1 -0
  22. package/dist/i18n/LanguageManager.js +157 -0
  23. package/dist/i18n/LanguageManager.js.map +1 -0
  24. package/dist/i18n/messages.d.ts +65 -0
  25. package/dist/i18n/messages.d.ts.map +1 -0
  26. package/dist/i18n/messages.js +144 -0
  27. package/dist/i18n/messages.js.map +1 -0
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -8
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers/ProviderManager.d.ts +55 -0
  33. package/dist/providers/ProviderManager.d.ts.map +1 -0
  34. package/dist/providers/ProviderManager.js +326 -0
  35. package/dist/providers/ProviderManager.js.map +1 -0
  36. package/dist/types/index.d.ts +78 -38
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/index.js +1 -0
  39. package/dist/types/index.js.map +1 -1
  40. package/dist/utils/version.d.ts +2 -64
  41. package/dist/utils/version.d.ts.map +1 -1
  42. package/dist/utils/version.js +12 -158
  43. package/dist/utils/version.js.map +1 -1
  44. package/package.json +2 -2
  45. package/release-temp/README.md +282 -249
  46. package/release-temp/package.json +2 -2
  47. package/scripts/modules/version-bump.sh +2 -2
  48. package/scripts/smart-release-v3.sh +20 -26
  49. package/src/cli.ts +458 -394
  50. package/src/commands/lang.ts +105 -0
  51. package/src/core/CCMConfigManager.ts +185 -0
  52. package/src/core/ClaudeConfigManager.ts +127 -0
  53. package/src/i18n/LanguageManager.ts +169 -0
  54. package/src/i18n/messages.ts +233 -0
  55. package/src/index.ts +4 -5
  56. package/src/providers/ProviderManager.ts +380 -0
  57. package/src/types/index.ts +80 -39
  58. package/src/utils/version.ts +11 -184
  59. package/dist/config/ConfigManager.d.ts +0 -67
  60. package/dist/config/ConfigManager.d.ts.map +0 -1
  61. package/dist/config/ConfigManager.js +0 -226
  62. package/dist/config/ConfigManager.js.map +0 -1
  63. package/dist/config/EnvironmentManager.d.ts +0 -83
  64. package/dist/config/EnvironmentManager.d.ts.map +0 -1
  65. package/dist/config/EnvironmentManager.js +0 -280
  66. package/dist/config/EnvironmentManager.js.map +0 -1
  67. package/dist/config/constants.d.ts +0 -40
  68. package/dist/config/constants.d.ts.map +0 -1
  69. package/dist/config/constants.js +0 -97
  70. package/dist/config/constants.js.map +0 -1
  71. package/dist/shell/ShellManager.d.ts +0 -81
  72. package/dist/shell/ShellManager.d.ts.map +0 -1
  73. package/dist/shell/ShellManager.js +0 -490
  74. package/dist/shell/ShellManager.js.map +0 -1
  75. package/src/config/ConfigManager.ts +0 -227
  76. package/src/config/EnvironmentManager.ts +0 -327
  77. package/src/config/constants.ts +0 -64
  78. package/src/shell/ShellManager.ts +0 -526
@@ -1,60 +1,101 @@
1
1
  /**
2
2
  * Claude Code Manager 类型定义
3
+ * 新架构:直接修改 ~/.claude/settings.json
3
4
  */
4
5
 
5
- export interface ClaudeEnv {
6
- /** 环境名称 */
7
- name: string;
8
- /** API 基础 URL */
9
- baseUrl: string;
10
- /** API 密钥 */
11
- apiKey: string;
12
- /** 创建时间 */
13
- createdAt: string;
14
- /** 最后使用时间 */
15
- lastUsed?: string;
6
+ /**
7
+ * Claude settings.json 结构
8
+ */
9
+ export interface ClaudeSettings {
10
+ env: {
11
+ ANTHROPIC_AUTH_TOKEN: string;
12
+ ANTHROPIC_BASE_URL: string;
13
+ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC?: number;
14
+ };
15
+ permissions: {
16
+ allow: string[];
17
+ deny: string[];
18
+ };
19
+ apiKeyHelper: string;
16
20
  }
17
21
 
18
- export interface Config {
19
- /** 当前使用的环境名称 */
20
- current: string | null;
21
- /** 环境配置列表 */
22
- environments: { [name: string]: ClaudeEnv };
23
- /** 全局设置 */
24
- settings: GlobalSettings;
22
+ /**
23
+ * 供应商配置
24
+ */
25
+ export interface ProviderConfig {
26
+ name: string;
27
+ description: string;
28
+ config: ClaudeSettings;
29
+ metadata: {
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ usageCount: number;
33
+ };
25
34
  }
26
35
 
27
- export interface GlobalSettings {
28
- /** 是否自动写入 shell 配置文件 */
29
- autoWriteShell: boolean;
30
- /** 首选的 shell 类型 */
31
- preferredShell: 'bash' | 'zsh' | 'auto';
32
- /** shell 配置文件路径(可自定义) */
33
- shellConfigPath?: string;
36
+ /**
37
+ * CCM 主配置
38
+ */
39
+ export interface CCMConfig {
40
+ currentProvider: string;
41
+ claudeConfigPath: string;
42
+ providers: {
43
+ [providerId: string]: {
44
+ name: string;
45
+ configFile: string;
46
+ lastUsed: string;
47
+ };
48
+ };
49
+ settings: {
50
+ language: 'zh' | 'en' | 'auto' | null;
51
+ firstRun: boolean;
52
+ };
53
+ metadata: {
54
+ version: string;
55
+ createdAt: string;
56
+ updatedAt: string;
57
+ };
34
58
  }
35
59
 
36
- export interface ShellEnvVars {
37
- ANTHROPIC_BASE_URL: string;
38
- ANTHROPIC_AUTH_TOKEN: string;
60
+ /**
61
+ * 添加供应商选项
62
+ */
63
+ export interface AddProviderOptions {
64
+ id: string;
65
+ name: string;
66
+ description?: string;
67
+ baseUrl: string;
68
+ apiKey: string;
69
+ apiKeyHelper?: string;
39
70
  }
40
71
 
41
- export interface AddEnvOptions {
72
+ /**
73
+ * 供应商列表项
74
+ */
75
+ export interface ProviderListItem {
76
+ id: string;
42
77
  name: string;
78
+ description: string;
43
79
  baseUrl: string;
44
- apiKey: string;
45
- autoWriteShell?: boolean;
80
+ isCurrent: boolean;
81
+ lastUsed?: string;
82
+ usageCount: number;
46
83
  }
47
84
 
48
- export interface ShellWriteResult {
85
+ /**
86
+ * 操作结果
87
+ */
88
+ export interface OperationResult {
49
89
  success: boolean;
50
- filePath: string;
51
90
  message: string;
52
91
  error?: string;
53
92
  }
54
93
 
55
- export interface EnvironmentListItem extends ClaudeEnv {
56
- /** 是否为当前使用的环境 */
57
- isCurrent: boolean;
58
- }
59
-
60
- export type ShellType = 'bash' | 'zsh' | 'fish' | 'unknown';
94
+ /**
95
+ * 语言配置统计
96
+ */
97
+ export interface LanguageStats {
98
+ current: 'zh' | 'en' | 'auto';
99
+ isFirstRun: boolean;
100
+ autoDetected?: string;
101
+ }
@@ -1,189 +1,16 @@
1
- import { readFileSync } from 'fs';
2
- import { join } from 'path';
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
3
 
4
4
  /**
5
- * 版本信息接口
5
+ * 读取 package.json 中的版本号
6
6
  */
7
- export interface VersionInfo {
8
- version: string;
9
- major: number;
10
- minor: number;
11
- patch: number;
12
- prerelease?: string;
13
- }
14
-
15
- /**
16
- * 版本工具类
17
- */
18
- export class VersionManager {
19
- private static instance: VersionManager;
20
- private cachedVersion?: VersionInfo;
21
-
22
- private constructor() {}
23
-
24
- /**
25
- * 获取单例实例
26
- */
27
- static getInstance(): VersionManager {
28
- if (!VersionManager.instance) {
29
- VersionManager.instance = new VersionManager();
30
- }
31
- return VersionManager.instance;
32
- }
33
-
34
- /**
35
- * 获取当前版本信息
36
- */
37
- getCurrentVersion(): VersionInfo {
38
- if (this.cachedVersion) {
39
- return this.cachedVersion;
40
- }
41
-
42
- try {
43
- const packageJsonPath = this.getPackageJsonPath();
44
- const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
45
- const version = packageJson.version;
46
-
47
- this.cachedVersion = this.parseVersion(version);
48
- return this.cachedVersion;
49
- } catch (error) {
50
- console.warn('⚠️ 无法读取版本信息,使用默认版本');
51
- this.cachedVersion = this.parseVersion('0.0.1');
52
- return this.cachedVersion;
53
- }
54
- }
55
-
56
- /**
57
- * 获取版本字符串
58
- */
59
- getVersionString(): string {
60
- return this.getCurrentVersion().version;
61
- }
62
-
63
- /**
64
- * 解析版本字符串
65
- */
66
- private parseVersion(versionString: string): VersionInfo {
67
- const match = versionString.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
68
-
69
- if (!match) {
70
- throw new Error(`无效的版本格式: ${versionString}`);
71
- }
72
-
73
- const [, major, minor, patch, prerelease] = match;
74
-
75
- return {
76
- version: versionString,
77
- major: parseInt(major, 10),
78
- minor: parseInt(minor, 10),
79
- patch: parseInt(patch, 10),
80
- prerelease
81
- };
82
- }
83
-
84
- /**
85
- * 获取 package.json 路径
86
- */
87
- private getPackageJsonPath(): string {
88
- // 在构建后的环境中,package.json 在 ../package.json
89
- // 在开发环境中,可能在不同的位置
90
- const paths = [
91
- join(__dirname, '../package.json'), // 构建后
92
- join(__dirname, '../../package.json'), // 开发环境
93
- join(process.cwd(), 'package.json') // 当前工作目录
94
- ];
95
-
96
- for (const path of paths) {
97
- try {
98
- readFileSync(path, 'utf8');
99
- return path;
100
- } catch {
101
- continue;
102
- }
103
- }
104
-
105
- throw new Error('找不到 package.json 文件');
106
- }
107
-
108
- /**
109
- * 预测下一个版本
110
- */
111
- getNextVersion(type: 'patch' | 'minor' | 'major'): string {
112
- const current = this.getCurrentVersion();
113
-
114
- switch (type) {
115
- case 'patch':
116
- return `${current.major}.${current.minor}.${current.patch + 1}`;
117
- case 'minor':
118
- return `${current.major}.${current.minor + 1}.0`;
119
- case 'major':
120
- return `${current.major + 1}.0.0`;
121
- default:
122
- throw new Error(`不支持的版本类型: ${type}`);
123
- }
7
+ export function getPackageVersion(): string {
8
+ try {
9
+ const packageJsonPath = path.join(__dirname, '../../package.json');
10
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
11
+ return packageJson.version || '0.0.0';
12
+ } catch (error) {
13
+ console.warn('Failed to read package.json version, using fallback');
14
+ return '0.0.0';
124
15
  }
125
-
126
- /**
127
- * 获取版本变更建议(基于 git 历史分析)
128
- */
129
- async getVersionSuggestion(): Promise<'patch' | 'minor' | 'major'> {
130
- try {
131
- // 这里可以添加 git 历史分析逻辑
132
- // 比如分析提交信息中的关键词来推荐版本类型
133
- const { exec } = await import('child_process');
134
- const { promisify } = await import('util');
135
- const execAsync = promisify(exec);
136
-
137
- // 获取最近的提交信息
138
- const { stdout } = await execAsync('git log --oneline -10');
139
- const commits = stdout.toLowerCase();
140
-
141
- // 简单的启发式规则
142
- if (commits.includes('breaking') || commits.includes('major')) {
143
- return 'major';
144
- } else if (commits.includes('feat') || commits.includes('feature') || commits.includes('add')) {
145
- return 'minor';
146
- } else {
147
- return 'patch';
148
- }
149
- } catch {
150
- // 默认推荐 patch
151
- return 'patch';
152
- }
153
- }
154
-
155
- /**
156
- * 清除缓存(测试用)
157
- */
158
- clearCache(): void {
159
- this.cachedVersion = undefined;
160
- }
161
- }
162
-
163
- /**
164
- * 便捷函数:获取当前版本字符串
165
- */
166
- export function getCurrentVersion(): string {
167
- return VersionManager.getInstance().getVersionString();
168
- }
169
-
170
- /**
171
- * 便捷函数:获取版本信息
172
- */
173
- export function getVersionInfo(): VersionInfo {
174
- return VersionManager.getInstance().getCurrentVersion();
175
- }
176
-
177
- /**
178
- * 便捷函数:获取下一个版本
179
- */
180
- export function getNextVersion(type: 'patch' | 'minor' | 'major'): string {
181
- return VersionManager.getInstance().getNextVersion(type);
182
- }
183
-
184
- /**
185
- * 便捷函数:获取版本建议
186
- */
187
- export async function getVersionSuggestion(): Promise<'patch' | 'minor' | 'major'> {
188
- return VersionManager.getInstance().getVersionSuggestion();
189
16
  }
@@ -1,67 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,226 +0,0 @@
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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ConfigManager = void 0;
37
- const fs = __importStar(require("fs"));
38
- const constants_1 = require("./constants");
39
- class ConfigManager {
40
- constructor() {
41
- this.configDir = (0, constants_1.getConfigDir)();
42
- this.configFile = (0, constants_1.getConfigFile)();
43
- this.ensureConfigDir();
44
- }
45
- /**
46
- * 确保配置目录存在
47
- */
48
- ensureConfigDir() {
49
- if (!fs.existsSync(this.configDir)) {
50
- fs.mkdirSync(this.configDir, { recursive: true });
51
- }
52
- }
53
- /**
54
- * 获取配置
55
- */
56
- getConfig() {
57
- if (!fs.existsSync(this.configFile)) {
58
- const defaultConfig = {
59
- current: null,
60
- environments: {},
61
- settings: {
62
- autoWriteShell: true,
63
- preferredShell: 'auto'
64
- }
65
- };
66
- this.saveConfig(defaultConfig);
67
- return defaultConfig;
68
- }
69
- try {
70
- const content = fs.readFileSync(this.configFile, 'utf8');
71
- return JSON.parse(content);
72
- }
73
- catch (error) {
74
- throw new Error(`Failed to read config: ${error}`);
75
- }
76
- }
77
- /**
78
- * 保存配置
79
- */
80
- saveConfig(config) {
81
- try {
82
- fs.writeFileSync(this.configFile, JSON.stringify(config, null, 2));
83
- }
84
- catch (error) {
85
- throw new Error(`Failed to save config: ${error}`);
86
- }
87
- }
88
- /**
89
- * 添加环境
90
- */
91
- addEnvironment(options) {
92
- const config = this.getConfig();
93
- if (config.environments[options.name]) {
94
- throw new Error(`Environment "${options.name}" already exists`);
95
- }
96
- const newEnv = {
97
- name: options.name,
98
- baseUrl: options.baseUrl,
99
- apiKey: options.apiKey,
100
- createdAt: new Date().toISOString()
101
- };
102
- config.environments[options.name] = newEnv;
103
- // 如果是第一个环境,设为当前环境
104
- if (!config.current) {
105
- config.current = options.name;
106
- }
107
- this.saveConfig(config);
108
- return newEnv;
109
- }
110
- /**
111
- * 删除环境
112
- */
113
- removeEnvironment(name) {
114
- const config = this.getConfig();
115
- if (!config.environments[name]) {
116
- throw new Error(`Environment "${name}" not found`);
117
- }
118
- delete config.environments[name];
119
- // 如果删除的是当前环境,清空当前环境或切换到第一个可用环境
120
- if (config.current === name) {
121
- const remainingEnvs = Object.keys(config.environments);
122
- config.current = remainingEnvs.length > 0 ? remainingEnvs[0] : null;
123
- }
124
- this.saveConfig(config);
125
- }
126
- /**
127
- * 设置当前环境
128
- */
129
- setCurrentEnvironment(name) {
130
- const config = this.getConfig();
131
- if (!config.environments[name]) {
132
- throw new Error(`Environment "${name}" not found`);
133
- }
134
- config.current = name;
135
- config.environments[name].lastUsed = new Date().toISOString();
136
- this.saveConfig(config);
137
- return config.environments[name];
138
- }
139
- /**
140
- * 获取当前环境
141
- */
142
- getCurrentEnvironment() {
143
- const config = this.getConfig();
144
- if (!config.current || !config.environments[config.current]) {
145
- return null;
146
- }
147
- return config.environments[config.current];
148
- }
149
- /**
150
- * 获取所有环境列表
151
- */
152
- listEnvironments() {
153
- const config = this.getConfig();
154
- return Object.values(config.environments).map(env => ({
155
- ...env,
156
- isCurrent: env.name === config.current
157
- }));
158
- }
159
- /**
160
- * 获取指定环境
161
- */
162
- getEnvironment(name) {
163
- const config = this.getConfig();
164
- return config.environments[name] || null;
165
- }
166
- /**
167
- * 更新环境
168
- */
169
- updateEnvironment(name, updates) {
170
- const config = this.getConfig();
171
- if (!config.environments[name]) {
172
- throw new Error(`Environment "${name}" not found`);
173
- }
174
- config.environments[name] = {
175
- ...config.environments[name],
176
- ...updates
177
- };
178
- this.saveConfig(config);
179
- return config.environments[name];
180
- }
181
- /**
182
- * 更新全局设置
183
- */
184
- updateSettings(settings) {
185
- const config = this.getConfig();
186
- config.settings = {
187
- ...config.settings,
188
- ...settings
189
- };
190
- this.saveConfig(config);
191
- return config.settings;
192
- }
193
- /**
194
- * 获取全局设置
195
- */
196
- getSettings() {
197
- return this.getConfig().settings;
198
- }
199
- /**
200
- * 检查环境是否存在
201
- */
202
- hasEnvironment(name) {
203
- const config = this.getConfig();
204
- return !!config.environments[name];
205
- }
206
- /**
207
- * 获取环境数量
208
- */
209
- getEnvironmentCount() {
210
- const config = this.getConfig();
211
- return Object.keys(config.environments).length;
212
- }
213
- /**
214
- * 清除所有环境和重置配置
215
- */
216
- clearAll() {
217
- const config = this.getConfig();
218
- // 重置配置到初始状态
219
- config.current = null;
220
- config.environments = {};
221
- // 保存重置后的配置
222
- this.saveConfig(config);
223
- }
224
- }
225
- exports.ConfigManager = ConfigManager;
226
- //# sourceMappingURL=ConfigManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,2CAA0D;AAE1D,MAAa,aAAa;IAIxB;QACE,IAAI,CAAC,SAAS,GAAG,IAAA,wBAAY,GAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAA,yBAAa,GAAE,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,aAAa,GAAW;gBAC5B,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,EAAE;gBAChB,QAAQ,EAAE;oBACR,cAAc,EAAE,IAAI;oBACpB,cAAc,EAAE,MAAM;iBACvB;aACF,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/B,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAsB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAc;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAE3C,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAY;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEjC,+BAA+B;QAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAExB,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpD,GAAG,GAAG;YACN,SAAS,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO;SACvC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAY,EAAE,OAAuD;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG;YAC1B,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;YAC5B,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAiC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,GAAG;YAChB,GAAG,MAAM,CAAC,QAAQ;YAClB,GAAG,QAAQ;SACZ,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,YAAY;QACZ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;QAEzB,WAAW;QACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;CACF;AA9ND,sCA8NC"}