ccman 1.0.1 → 2.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 (91) hide show
  1. package/.env.development +3 -0
  2. package/.env.production +3 -0
  3. package/.github/workflows/release.yml +5 -5
  4. package/CLAUDE.md +246 -185
  5. package/README.md +282 -249
  6. package/README_zh.md +283 -250
  7. package/dev-test.sh +40 -0
  8. package/dist/cli.js +425 -369
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/lang.d.ts +3 -0
  11. package/dist/commands/lang.d.ts.map +1 -0
  12. package/dist/commands/lang.js +99 -0
  13. package/dist/commands/lang.js.map +1 -0
  14. package/dist/config/static-env.d.ts +14 -0
  15. package/dist/config/static-env.d.ts.map +1 -0
  16. package/dist/config/static-env.js +17 -0
  17. package/dist/config/static-env.js.map +1 -0
  18. package/dist/core/CCMConfigManager.d.ts +52 -0
  19. package/dist/core/CCMConfigManager.d.ts.map +1 -0
  20. package/dist/core/CCMConfigManager.js +203 -0
  21. package/dist/core/CCMConfigManager.js.map +1 -0
  22. package/dist/core/ClaudeConfigManager.d.ts +35 -0
  23. package/dist/core/ClaudeConfigManager.d.ts.map +1 -0
  24. package/dist/core/ClaudeConfigManager.js +149 -0
  25. package/dist/core/ClaudeConfigManager.js.map +1 -0
  26. package/dist/i18n/LanguageManager.d.ts +43 -0
  27. package/dist/i18n/LanguageManager.d.ts.map +1 -0
  28. package/dist/i18n/LanguageManager.js +157 -0
  29. package/dist/i18n/LanguageManager.js.map +1 -0
  30. package/dist/i18n/messages.d.ts +65 -0
  31. package/dist/i18n/messages.d.ts.map +1 -0
  32. package/dist/i18n/messages.js +144 -0
  33. package/dist/i18n/messages.js.map +1 -0
  34. package/dist/index.d.ts +3 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/providers/ProviderManager.d.ts +58 -0
  39. package/dist/providers/ProviderManager.d.ts.map +1 -0
  40. package/dist/providers/ProviderManager.js +335 -0
  41. package/dist/providers/ProviderManager.js.map +1 -0
  42. package/dist/types/index.d.ts +78 -38
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/index.js +1 -0
  45. package/dist/types/index.js.map +1 -1
  46. package/dist/utils/env-config.d.ts +27 -0
  47. package/dist/utils/env-config.d.ts.map +1 -0
  48. package/dist/{config/constants.js → utils/env-config.js} +36 -50
  49. package/dist/utils/env-config.js.map +1 -0
  50. package/dist/utils/version.d.ts +2 -64
  51. package/dist/utils/version.d.ts.map +1 -1
  52. package/dist/utils/version.js +12 -158
  53. package/dist/utils/version.js.map +1 -1
  54. package/package.json +17 -16
  55. package/release-temp/README.md +282 -249
  56. package/release-temp/package.json +17 -16
  57. package/scripts/build-env.js +75 -0
  58. package/scripts/modules/create-tag.sh +53 -10
  59. package/scripts/modules/monitor-release.sh +40 -12
  60. package/scripts/modules/version-bump.sh +14 -17
  61. package/scripts/smart-release-v3.sh +20 -26
  62. package/src/cli.ts +462 -394
  63. package/src/commands/lang.ts +105 -0
  64. package/src/core/CCMConfigManager.ts +185 -0
  65. package/src/core/ClaudeConfigManager.ts +125 -0
  66. package/src/i18n/LanguageManager.ts +169 -0
  67. package/src/i18n/messages.ts +233 -0
  68. package/src/index.ts +4 -5
  69. package/src/providers/ProviderManager.ts +393 -0
  70. package/src/types/index.ts +80 -39
  71. package/src/utils/env-config.ts +53 -0
  72. package/src/utils/version.ts +11 -184
  73. package/dist/config/ConfigManager.d.ts +0 -67
  74. package/dist/config/ConfigManager.d.ts.map +0 -1
  75. package/dist/config/ConfigManager.js +0 -226
  76. package/dist/config/ConfigManager.js.map +0 -1
  77. package/dist/config/EnvironmentManager.d.ts +0 -83
  78. package/dist/config/EnvironmentManager.d.ts.map +0 -1
  79. package/dist/config/EnvironmentManager.js +0 -280
  80. package/dist/config/EnvironmentManager.js.map +0 -1
  81. package/dist/config/constants.d.ts +0 -40
  82. package/dist/config/constants.d.ts.map +0 -1
  83. package/dist/config/constants.js.map +0 -1
  84. package/dist/shell/ShellManager.d.ts +0 -81
  85. package/dist/shell/ShellManager.d.ts.map +0 -1
  86. package/dist/shell/ShellManager.js +0 -490
  87. package/dist/shell/ShellManager.js.map +0 -1
  88. package/src/config/ConfigManager.ts +0 -227
  89. package/src/config/EnvironmentManager.ts +0 -327
  90. package/src/config/constants.ts +0 -64
  91. package/src/shell/ShellManager.ts +0 -526
@@ -0,0 +1,149 @@
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.ClaudeConfigManager = void 0;
37
+ const fs = __importStar(require("fs-extra"));
38
+ const path = __importStar(require("path"));
39
+ const env_config_1 = require("../utils/env-config");
40
+ /**
41
+ * Claude配置管理器
42
+ * 负责直接修改 ~/.claude/settings.json
43
+ */
44
+ class ClaudeConfigManager {
45
+ constructor(claudeConfigPath) {
46
+ // 优先使用传入参数,否则使用编译时确定的路径
47
+ this.claudeConfigPath = claudeConfigPath || env_config_1.envConfig.getClaudeConfigPath();
48
+ }
49
+ /**
50
+ * 读取Claude配置
51
+ */
52
+ async readClaudeConfig() {
53
+ try {
54
+ if (!await fs.pathExists(this.claudeConfigPath)) {
55
+ return null;
56
+ }
57
+ const content = await fs.readFile(this.claudeConfigPath, 'utf8');
58
+ return JSON.parse(content);
59
+ }
60
+ catch (error) {
61
+ throw new Error(`Failed to read Claude config: ${error}`);
62
+ }
63
+ }
64
+ /**
65
+ * 选择性写入Claude配置
66
+ * 只覆盖指定的key,保留其他用户配置
67
+ */
68
+ async writeClaudeConfig(config) {
69
+ try {
70
+ await fs.ensureDir(path.dirname(this.claudeConfigPath));
71
+ let existingConfig = {};
72
+ // 如果文件已存在,先读取现有配置
73
+ if (await fs.pathExists(this.claudeConfigPath)) {
74
+ const content = await fs.readFile(this.claudeConfigPath, 'utf8');
75
+ existingConfig = JSON.parse(content);
76
+ }
77
+ // 选择性覆盖只有CCM管理的key
78
+ const mergedConfig = {
79
+ ...existingConfig, // 保留现有配置
80
+ env: {
81
+ ...existingConfig.env, // 保留现有env配置
82
+ // 只覆盖CCM管理的环境变量
83
+ ANTHROPIC_AUTH_TOKEN: config.env.ANTHROPIC_AUTH_TOKEN,
84
+ ANTHROPIC_BASE_URL: config.env.ANTHROPIC_BASE_URL,
85
+ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: config.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
86
+ },
87
+ permissions: {
88
+ ...existingConfig.permissions, // 保留现有permissions配置
89
+ // 覆盖CCM管理的权限设置
90
+ allow: config.permissions.allow,
91
+ deny: config.permissions.deny
92
+ },
93
+ // 覆盖apiKeyHelper
94
+ apiKeyHelper: config.apiKeyHelper
95
+ };
96
+ await fs.writeFile(this.claudeConfigPath, JSON.stringify(mergedConfig, null, 2), 'utf8');
97
+ }
98
+ catch (error) {
99
+ throw new Error(`Failed to write Claude config: ${error}`);
100
+ }
101
+ }
102
+ /**
103
+ * 备份当前Claude配置
104
+ */
105
+ async backupClaudeConfig() {
106
+ try {
107
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
108
+ const backupPath = `${this.claudeConfigPath}.backup-${timestamp}`;
109
+ if (await fs.pathExists(this.claudeConfigPath)) {
110
+ await fs.copy(this.claudeConfigPath, backupPath);
111
+ return backupPath;
112
+ }
113
+ return '';
114
+ }
115
+ catch (error) {
116
+ throw new Error(`Failed to backup Claude config: ${error}`);
117
+ }
118
+ }
119
+ /**
120
+ * 恢复Claude配置
121
+ */
122
+ async restoreClaudeConfig(backupPath) {
123
+ try {
124
+ if (await fs.pathExists(backupPath)) {
125
+ await fs.copy(backupPath, this.claudeConfigPath);
126
+ }
127
+ }
128
+ catch (error) {
129
+ throw new Error(`Failed to restore Claude config: ${error}`);
130
+ }
131
+ }
132
+ /**
133
+ * 验证Claude配置目录是否存在
134
+ */
135
+ async ensureClaudeConfigDir() {
136
+ const claudeDir = path.dirname(this.claudeConfigPath);
137
+ if (!await fs.pathExists(claudeDir)) {
138
+ throw new Error(`Claude config directory not found: ${claudeDir}. Please ensure Claude Code is installed and initialized.`);
139
+ }
140
+ }
141
+ /**
142
+ * 获取Claude配置路径
143
+ */
144
+ getClaudeConfigPath() {
145
+ return this.claudeConfigPath;
146
+ }
147
+ }
148
+ exports.ClaudeConfigManager = ClaudeConfigManager;
149
+ //# sourceMappingURL=ClaudeConfigManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeConfigManager.js","sourceRoot":"","sources":["../../src/core/ClaudeConfigManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { MessageBundle } from './messages';
2
+ import { LanguageStats } from '../types';
3
+ export declare class LanguageManager {
4
+ private configManager;
5
+ constructor();
6
+ /**
7
+ * 检测系统是否为英文环境
8
+ */
9
+ private shouldUseEnglish;
10
+ /**
11
+ * 检查是否为首次运行
12
+ */
13
+ isFirstRun(): Promise<boolean>;
14
+ /**
15
+ * 获取当前语言设置
16
+ */
17
+ getCurrentLanguage(): Promise<'zh' | 'en'>;
18
+ /**
19
+ * 获取当前语言的消息包
20
+ */
21
+ getMessages(): Promise<MessageBundle>;
22
+ /**
23
+ * 首次运行语言选择向导
24
+ */
25
+ promptLanguageChoice(): Promise<'zh' | 'en' | 'auto'>;
26
+ /**
27
+ * 设置语言
28
+ */
29
+ setLanguage(language: 'zh' | 'en' | 'auto'): Promise<void>;
30
+ /**
31
+ * 重置语言设置(恢复首次运行状态)
32
+ */
33
+ resetLanguage(): Promise<void>;
34
+ /**
35
+ * 获取语言统计信息
36
+ */
37
+ getLanguageStats(): Promise<LanguageStats>;
38
+ /**
39
+ * 处理首次运行流程
40
+ */
41
+ handleFirstRun(): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=LanguageManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageManager.d.ts","sourceRoot":"","sources":["../../src/i18n/LanguageManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAoC,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAmB;;IAMxC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAWpC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuBhD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAK3C;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IA8B3D;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAWhD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAWtC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LanguageManager = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const messages_1 = require("./messages");
9
+ const CCMConfigManager_1 = require("../core/CCMConfigManager");
10
+ class LanguageManager {
11
+ constructor() {
12
+ this.configManager = new CCMConfigManager_1.CCMConfigManager();
13
+ }
14
+ /**
15
+ * 检测系统是否为英文环境
16
+ */
17
+ shouldUseEnglish() {
18
+ const locale = process.env.LANG || process.env.LANGUAGE || '';
19
+ return locale.toLowerCase().startsWith('en');
20
+ }
21
+ /**
22
+ * 检查是否为首次运行
23
+ */
24
+ async isFirstRun() {
25
+ try {
26
+ await this.configManager.init();
27
+ const config = await this.configManager.readConfig();
28
+ return !config.settings || config.settings.language === null || config.settings.firstRun !== false;
29
+ }
30
+ catch (error) {
31
+ // 配置不存在,视为首次运行
32
+ return true;
33
+ }
34
+ }
35
+ /**
36
+ * 获取当前语言设置
37
+ */
38
+ async getCurrentLanguage() {
39
+ try {
40
+ await this.configManager.init();
41
+ const config = await this.configManager.readConfig();
42
+ const langSetting = config.settings?.language;
43
+ switch (langSetting) {
44
+ case 'zh':
45
+ return 'zh';
46
+ case 'en':
47
+ return 'en';
48
+ case 'auto':
49
+ return this.shouldUseEnglish() ? 'en' : 'zh';
50
+ default:
51
+ // 首次运行或未设置,根据系统环境决定
52
+ return this.shouldUseEnglish() ? 'en' : 'zh';
53
+ }
54
+ }
55
+ catch (error) {
56
+ // 配置读取失败,使用自动检测
57
+ return this.shouldUseEnglish() ? 'en' : 'zh';
58
+ }
59
+ }
60
+ /**
61
+ * 获取当前语言的消息包
62
+ */
63
+ async getMessages() {
64
+ const currentLang = await this.getCurrentLanguage();
65
+ return currentLang === 'en' ? messages_1.englishMessages : messages_1.chineseMessages;
66
+ }
67
+ /**
68
+ * 首次运行语言选择向导
69
+ */
70
+ async promptLanguageChoice() {
71
+ console.log('🌍 Welcome to CCM! / 欢迎使用 CCM!\n');
72
+ console.log('This is your first time running CCM.');
73
+ console.log('这是您首次运行 CCM。\n');
74
+ const answer = await inquirer_1.default.prompt([
75
+ {
76
+ type: 'list',
77
+ name: 'language',
78
+ message: 'Please choose your preferred language:\n请选择您偏好的语言:',
79
+ choices: [
80
+ {
81
+ name: '🇨🇳 中文 (Chinese)',
82
+ value: 'zh'
83
+ },
84
+ {
85
+ name: '🇺🇸 English',
86
+ value: 'en'
87
+ },
88
+ {
89
+ name: '🌐 自动检测 (Auto-detect based on system)',
90
+ value: 'auto'
91
+ }
92
+ ]
93
+ }
94
+ ]);
95
+ return answer.language;
96
+ }
97
+ /**
98
+ * 设置语言
99
+ */
100
+ async setLanguage(language) {
101
+ await this.configManager.init();
102
+ const config = await this.configManager.readConfig();
103
+ // 更新配置
104
+ const updatedConfig = {
105
+ ...config,
106
+ settings: {
107
+ ...config.settings,
108
+ language,
109
+ firstRun: false
110
+ }
111
+ };
112
+ await this.configManager.writeConfig(updatedConfig);
113
+ }
114
+ /**
115
+ * 重置语言设置(恢复首次运行状态)
116
+ */
117
+ async resetLanguage() {
118
+ await this.configManager.init();
119
+ const config = await this.configManager.readConfig();
120
+ const updatedConfig = {
121
+ ...config,
122
+ settings: {
123
+ ...config.settings,
124
+ language: null,
125
+ firstRun: true
126
+ }
127
+ };
128
+ await this.configManager.writeConfig(updatedConfig);
129
+ }
130
+ /**
131
+ * 获取语言统计信息
132
+ */
133
+ async getLanguageStats() {
134
+ await this.configManager.init();
135
+ const config = await this.configManager.readConfig();
136
+ return {
137
+ current: config.settings?.language || 'auto',
138
+ isFirstRun: await this.isFirstRun(),
139
+ autoDetected: this.shouldUseEnglish() ? 'en' : 'zh'
140
+ };
141
+ }
142
+ /**
143
+ * 处理首次运行流程
144
+ */
145
+ async handleFirstRun() {
146
+ if (await this.isFirstRun()) {
147
+ const selectedLang = await this.promptLanguageChoice();
148
+ await this.setLanguage(selectedLang);
149
+ // 显示设置成功消息(双语)
150
+ const messages = await this.getMessages();
151
+ console.log(`\n✓ ${messages.languageSetSuccess}`);
152
+ console.log(`✓ ${messages.languageChangeHint}\n`);
153
+ }
154
+ }
155
+ }
156
+ exports.LanguageManager = LanguageManager;
157
+ //# sourceMappingURL=LanguageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageManager.js","sourceRoot":"","sources":["../../src/i18n/LanguageManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ export interface MessageBundle {
2
+ welcome: string;
3
+ error: string;
4
+ success: string;
5
+ cancelled: string;
6
+ firstRunWelcome: string;
7
+ firstRunDescription: string;
8
+ chooseLanguage: string;
9
+ languageOptions: {
10
+ chinese: string;
11
+ english: string;
12
+ autoDetect: string;
13
+ };
14
+ languageSetSuccess: string;
15
+ languageChangeHint: string;
16
+ mainMenuTitle: string;
17
+ mainMenuOptions: {
18
+ switchProvider: string;
19
+ addProvider: string;
20
+ updateProvider: string;
21
+ removeProvider: string;
22
+ showStatus: string;
23
+ exit: string;
24
+ };
25
+ noProvidersFound: string;
26
+ createFirstProvider: string;
27
+ providerAdded: string;
28
+ providerSwitched: string;
29
+ providerUpdated: string;
30
+ providerRemoved: string;
31
+ operationCancelled: string;
32
+ forms: {
33
+ providerId: string;
34
+ providerName: string;
35
+ description: string;
36
+ baseUrl: string;
37
+ apiKey: string;
38
+ selectProvider: string;
39
+ confirmRemove: string;
40
+ continueOperation: string;
41
+ };
42
+ status: {
43
+ title: string;
44
+ totalProviders: string;
45
+ currentProvider: string;
46
+ claudeConfig: string;
47
+ ccmConfig: string;
48
+ recentProviders: string;
49
+ lastUsed: string;
50
+ usage: string;
51
+ };
52
+ language: {
53
+ current: string;
54
+ switchSuccess: string;
55
+ resetConfirm: string;
56
+ resetSuccess: string;
57
+ invalidLanguage: string;
58
+ availableCommands: string;
59
+ };
60
+ exitMessage: string;
61
+ interruptMessage: string;
62
+ }
63
+ export declare const chineseMessages: MessageBundle;
64
+ export declare const englishMessages: MessageBundle;
65
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAGlB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAGF,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAGF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAGF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAGF,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,aA4E7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,aA4E7B,CAAC"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.englishMessages = exports.chineseMessages = void 0;
4
+ exports.chineseMessages = {
5
+ // 通用消息
6
+ welcome: '欢迎使用 CCM!',
7
+ error: '错误',
8
+ success: '成功',
9
+ cancelled: '操作已取消',
10
+ // 首次运行语言选择
11
+ firstRunWelcome: '🌍 欢迎使用 CCM!/ Welcome to CCM!',
12
+ firstRunDescription: '这是您首次运行 CCM。\nThis is your first time running CCM.',
13
+ chooseLanguage: '请选择您偏好的语言:\nPlease choose your preferred language:',
14
+ languageOptions: {
15
+ chinese: '🇨🇳 中文 (Chinese)',
16
+ english: '🇺🇸 English',
17
+ autoDetect: '🌐 自动检测 (Auto-detect based on system)'
18
+ },
19
+ languageSetSuccess: '语言已设置为中文',
20
+ languageChangeHint: '您可以稍后使用以下命令更改:ccman lang set <zh|en|auto>',
21
+ // 主菜单
22
+ mainMenuTitle: '您想要执行什么操作?',
23
+ mainMenuOptions: {
24
+ switchProvider: '切换供应商',
25
+ addProvider: '添加新供应商',
26
+ updateProvider: '更新供应商',
27
+ removeProvider: '删除供应商',
28
+ showStatus: '显示详细状态',
29
+ exit: '退出'
30
+ },
31
+ // 供应商操作
32
+ noProvidersFound: '未找到供应商配置。让我们创建您的第一个供应商。',
33
+ createFirstProvider: '创建您的第一个供应商',
34
+ providerAdded: '供应商添加成功',
35
+ providerSwitched: '供应商切换成功',
36
+ providerUpdated: '供应商更新成功',
37
+ providerRemoved: '供应商删除成功',
38
+ operationCancelled: '操作已取消',
39
+ // 表单字段
40
+ forms: {
41
+ providerId: '供应商ID(唯一标识符):',
42
+ providerName: '供应商名称:',
43
+ description: '描述:',
44
+ baseUrl: '基础URL:',
45
+ apiKey: 'API密钥:',
46
+ selectProvider: '选择供应商:',
47
+ confirmRemove: '确认删除此供应商吗?',
48
+ continueOperation: '是否要执行其他操作?'
49
+ },
50
+ // 状态信息
51
+ status: {
52
+ title: 'CCM 状态:',
53
+ totalProviders: '总供应商数:',
54
+ currentProvider: '当前供应商:',
55
+ claudeConfig: 'Claude配置:',
56
+ ccmConfig: 'CCM配置:',
57
+ recentProviders: '最近使用的供应商:',
58
+ lastUsed: '最后使用',
59
+ usage: '使用次数'
60
+ },
61
+ // 语言管理
62
+ language: {
63
+ current: '当前语言:',
64
+ switchSuccess: '语言切换成功',
65
+ resetConfirm: '这将重置语言设置并在下次运行时显示欢迎界面。继续吗?',
66
+ resetSuccess: '语言设置已重置。再次运行 ccman 以选择语言。',
67
+ invalidLanguage: '无效的语言选项。可用选项:zh, en, auto',
68
+ availableCommands: '您可以使用以下命令更改:ccman lang set <zh|en|auto>'
69
+ },
70
+ // 退出消息
71
+ exitMessage: '感谢使用 CCM。再见!',
72
+ interruptMessage: '\n\n用户取消操作。再见!'
73
+ };
74
+ exports.englishMessages = {
75
+ // 通用消息
76
+ welcome: 'Welcome to CCM!',
77
+ error: 'Error',
78
+ success: 'Success',
79
+ cancelled: 'Operation cancelled',
80
+ // 首次运行语言选择
81
+ firstRunWelcome: '🌍 Welcome to CCM! / 欢迎使用 CCM!',
82
+ firstRunDescription: 'This is your first time running CCM.\n这是您首次运行 CCM。',
83
+ chooseLanguage: 'Please choose your preferred language:\n请选择您偏好的语言:',
84
+ languageOptions: {
85
+ chinese: '🇨🇳 中文 (Chinese)',
86
+ english: '🇺🇸 English',
87
+ autoDetect: '🌐 Auto-detect based on system (基于系统自动检测)'
88
+ },
89
+ languageSetSuccess: 'Language set to English',
90
+ languageChangeHint: 'You can change this later with: ccman lang set <zh|en|auto>',
91
+ // 主菜单
92
+ mainMenuTitle: 'What would you like to do?',
93
+ mainMenuOptions: {
94
+ switchProvider: 'Switch provider',
95
+ addProvider: 'Add new provider',
96
+ updateProvider: 'Update provider',
97
+ removeProvider: 'Remove provider',
98
+ showStatus: 'Show detailed status',
99
+ exit: 'Exit'
100
+ },
101
+ // 供应商操作
102
+ noProvidersFound: 'No providers found. Let\'s create your first one.',
103
+ createFirstProvider: 'Create your first provider',
104
+ providerAdded: 'Provider added successfully',
105
+ providerSwitched: 'Provider switched successfully',
106
+ providerUpdated: 'Provider updated successfully',
107
+ providerRemoved: 'Provider removed successfully',
108
+ operationCancelled: 'Operation cancelled',
109
+ // 表单字段
110
+ forms: {
111
+ providerId: 'Provider ID (unique identifier):',
112
+ providerName: 'Provider name:',
113
+ description: 'Description:',
114
+ baseUrl: 'Base URL:',
115
+ apiKey: 'API Key:',
116
+ selectProvider: 'Select provider:',
117
+ confirmRemove: 'Are you sure you want to remove this provider?',
118
+ continueOperation: 'Would you like to perform another operation?'
119
+ },
120
+ // 状态信息
121
+ status: {
122
+ title: 'CCM Status:',
123
+ totalProviders: 'Total providers:',
124
+ currentProvider: 'Current provider:',
125
+ claudeConfig: 'Claude config:',
126
+ ccmConfig: 'CCM config:',
127
+ recentProviders: 'Recent providers:',
128
+ lastUsed: 'Last used',
129
+ usage: 'uses'
130
+ },
131
+ // 语言管理
132
+ language: {
133
+ current: 'Current language:',
134
+ switchSuccess: 'Language switched successfully',
135
+ resetConfirm: 'This will reset language setting and show the welcome screen on next run. Continue?',
136
+ resetSuccess: 'Language setting reset. Run ccman again to choose language.',
137
+ invalidLanguage: 'Invalid language option. Available: zh, en, auto',
138
+ availableCommands: 'You can change with: ccman lang set <zh|en|auto>'
139
+ },
140
+ // 退出消息
141
+ exitMessage: 'Thank you for using CCM. Goodbye!',
142
+ interruptMessage: '\n\nOperation cancelled by user. Goodbye!'
143
+ };
144
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { ConfigManager } from './config/ConfigManager';
2
- export { EnvironmentManager } from './config/EnvironmentManager';
3
- export { ShellManager } from './shell/ShellManager';
4
1
  export * from './types';
2
+ export * from './core/CCMConfigManager';
3
+ export * from './core/ClaudeConfigManager';
4
+ export * from './providers/ProviderManager';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -14,13 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ShellManager = exports.EnvironmentManager = exports.ConfigManager = void 0;
18
- // 导出所有主要模块
19
- var ConfigManager_1 = require("./config/ConfigManager");
20
- Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return ConfigManager_1.ConfigManager; } });
21
- var EnvironmentManager_1 = require("./config/EnvironmentManager");
22
- Object.defineProperty(exports, "EnvironmentManager", { enumerable: true, get: function () { return EnvironmentManager_1.EnvironmentManager; } });
23
- var ShellManager_1 = require("./shell/ShellManager");
24
- Object.defineProperty(exports, "ShellManager", { enumerable: true, get: function () { return ShellManager_1.ShellManager; } });
25
17
  __exportStar(require("./types"), exports);
18
+ __exportStar(require("./core/CCMConfigManager"), exports);
19
+ __exportStar(require("./core/ClaudeConfigManager"), exports);
20
+ __exportStar(require("./providers/ProviderManager"), exports);
26
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,WAAW;AACX,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,kEAAiE;AAAxD,wHAAA,kBAAkB,OAAA;AAC3B,qDAAoD;AAA3C,4GAAA,YAAY,OAAA;AACrB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0DAAwC;AACxC,6DAA2C;AAC3C,8DAA4C"}