ccman 1.0.1 → 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 (80) 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/create-tag.sh +53 -10
  48. package/scripts/modules/monitor-release.sh +40 -12
  49. package/scripts/modules/version-bump.sh +14 -17
  50. package/scripts/smart-release-v3.sh +20 -26
  51. package/src/cli.ts +458 -394
  52. package/src/commands/lang.ts +105 -0
  53. package/src/core/CCMConfigManager.ts +185 -0
  54. package/src/core/ClaudeConfigManager.ts +127 -0
  55. package/src/i18n/LanguageManager.ts +169 -0
  56. package/src/i18n/messages.ts +233 -0
  57. package/src/index.ts +4 -5
  58. package/src/providers/ProviderManager.ts +380 -0
  59. package/src/types/index.ts +80 -39
  60. package/src/utils/version.ts +11 -184
  61. package/dist/config/ConfigManager.d.ts +0 -67
  62. package/dist/config/ConfigManager.d.ts.map +0 -1
  63. package/dist/config/ConfigManager.js +0 -226
  64. package/dist/config/ConfigManager.js.map +0 -1
  65. package/dist/config/EnvironmentManager.d.ts +0 -83
  66. package/dist/config/EnvironmentManager.d.ts.map +0 -1
  67. package/dist/config/EnvironmentManager.js +0 -280
  68. package/dist/config/EnvironmentManager.js.map +0 -1
  69. package/dist/config/constants.d.ts +0 -40
  70. package/dist/config/constants.d.ts.map +0 -1
  71. package/dist/config/constants.js +0 -97
  72. package/dist/config/constants.js.map +0 -1
  73. package/dist/shell/ShellManager.d.ts +0 -81
  74. package/dist/shell/ShellManager.d.ts.map +0 -1
  75. package/dist/shell/ShellManager.js +0 -490
  76. package/dist/shell/ShellManager.js.map +0 -1
  77. package/src/config/ConfigManager.ts +0 -227
  78. package/src/config/EnvironmentManager.ts +0 -327
  79. package/src/config/constants.ts +0 -64
  80. package/src/shell/ShellManager.ts +0 -526
@@ -1,490 +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.ShellManager = void 0;
37
- const fse = __importStar(require("fs-extra"));
38
- const path = __importStar(require("path"));
39
- const os = __importStar(require("os"));
40
- const constants_1 = require("../config/constants");
41
- class ShellManager {
42
- constructor() {
43
- this.homeDir = os.homedir();
44
- this.ccmanDir = (0, constants_1.getConfigDir)();
45
- this.ccmanrcPath = (0, constants_1.getShellRCFile)();
46
- }
47
- /**
48
- * 写入环境变量到 CCMan 配置文件并更新 shell 引用
49
- */
50
- async writeToShell(envVars, envName) {
51
- try {
52
- // 1. 写入环境变量到独立的 ccmanrc 文件(通常不会有权限问题)
53
- await this.writeCCMANRC(envVars, envName);
54
- // 2. 检查shell配置文件权限
55
- const shellPermissionCheck = this.checkShellWritePermissions();
56
- // 3. 尝试更新 shell 配置文件引用
57
- if (shellPermissionCheck.hasWritableShellConfig) {
58
- try {
59
- const shellUpdateResult = await this.ensureShellReference();
60
- return {
61
- success: true,
62
- filePath: this.ccmanrcPath,
63
- message: `环境变量已写入 ${this.ccmanrcPath}${shellUpdateResult.updated ? ` 并${shellUpdateResult.action}shell引用` : ''}`
64
- };
65
- }
66
- catch (error) {
67
- // Shell引用失败但有可写配置文件时,提供具体的手动指导
68
- return this.createManualConfigResult(shellPermissionCheck, String(error));
69
- }
70
- }
71
- else {
72
- // 没有可写的shell配置文件,提供完整的手动配置指导
73
- return this.createManualConfigResult(shellPermissionCheck);
74
- }
75
- }
76
- catch (error) {
77
- return {
78
- success: false,
79
- filePath: this.ccmanrcPath,
80
- message: '写入环境变量失败',
81
- error: String(error)
82
- };
83
- }
84
- }
85
- /**
86
- * 创建手动配置结果
87
- */
88
- createManualConfigResult(shellPermissionCheck, shellError) {
89
- const reference = this.generateShellReference().trim();
90
- const writableFiles = shellPermissionCheck.shellConfigAccess.filter(f => f.writable);
91
- const nonWritableFiles = shellPermissionCheck.shellConfigAccess.filter(f => !f.writable);
92
- let message = `环境变量已写入 ${this.ccmanrcPath},但需要手动配置shell引用。\n\n`;
93
- if (writableFiles.length > 0) {
94
- message += `推荐添加到以下文件之一:\n`;
95
- writableFiles.forEach(f => {
96
- message += ` ✅ ${f.file}\n`;
97
- });
98
- }
99
- if (nonWritableFiles.length > 0) {
100
- message += `以下文件无写入权限:\n`;
101
- nonWritableFiles.forEach(f => {
102
- message += ` ❌ ${f.file} (${f.error})\n`;
103
- });
104
- message += `\n可尝试修复权限:\n`;
105
- nonWritableFiles.forEach(f => {
106
- if (f.error === '无写入权限') {
107
- message += ` chmod 644 ${f.file}\n`;
108
- }
109
- });
110
- }
111
- message += `\n需要手动添加的内容:\n${reference}`;
112
- return {
113
- success: true, // ccmanrc写入成功,只是需要手动配置
114
- filePath: this.ccmanrcPath,
115
- message,
116
- error: shellError ? `Shell配置自动更新失败: ${shellError}` : '所有shell配置文件都无写入权限'
117
- };
118
- }
119
- /**
120
- * 检查shell配置文件写入权限
121
- */
122
- checkShellWritePermissions() {
123
- const result = {
124
- hasWritableShellConfig: false,
125
- shellConfigAccess: []
126
- };
127
- const shellType = this.detectShell();
128
- const configFiles = this.getShellConfigFiles(shellType);
129
- for (const configFile of configFiles) {
130
- const fileCheck = { file: configFile, writable: false, error: undefined };
131
- try {
132
- if (fse.pathExistsSync(configFile)) {
133
- // 文件存在,检查写入权限
134
- fse.accessSync(configFile, fse.constants.W_OK);
135
- fileCheck.writable = true;
136
- result.hasWritableShellConfig = true;
137
- }
138
- else {
139
- // 文件不存在,检查父目录权限(能否创建文件)
140
- const dir = path.dirname(configFile);
141
- if (fse.pathExistsSync(dir)) {
142
- fse.accessSync(dir, fse.constants.W_OK);
143
- fileCheck.writable = true;
144
- result.hasWritableShellConfig = true;
145
- }
146
- else {
147
- fileCheck.error = '目录不存在';
148
- }
149
- }
150
- }
151
- catch (error) {
152
- fileCheck.error = `无写入权限`;
153
- }
154
- result.shellConfigAccess.push(fileCheck);
155
- }
156
- return result;
157
- }
158
- /**
159
- * 写入 ccmanrc 文件
160
- */
161
- async writeCCMANRC(envVars, envName) {
162
- // 确保 .ccman 目录存在
163
- fse.ensureDirSync(this.ccmanDir);
164
- const content = this.generateExportStatements(envVars, envName);
165
- await fse.writeFile(this.ccmanrcPath, content, 'utf8');
166
- }
167
- /**
168
- * 确保 shell 配置文件中有对 ccmanrc 的引用
169
- */
170
- async ensureShellReference() {
171
- const shellType = this.detectShell();
172
- const configFiles = this.getShellConfigFiles(shellType);
173
- // 检查是否已经有引用
174
- for (const configFile of configFiles) {
175
- if (fse.pathExistsSync(configFile)) {
176
- const content = fse.readFileSync(configFile, 'utf8');
177
- if (this.hasShellReference(content)) {
178
- return { updated: false, action: 'already exists' };
179
- }
180
- }
181
- }
182
- // 添加引用到主配置文件
183
- const primaryConfigFile = configFiles[0];
184
- try {
185
- await this.addShellReference(primaryConfigFile);
186
- return {
187
- updated: true,
188
- action: 'added',
189
- filePath: primaryConfigFile
190
- };
191
- }
192
- catch (error) {
193
- // 尝试其他配置文件
194
- for (let i = 1; i < configFiles.length; i++) {
195
- try {
196
- await this.addShellReference(configFiles[i]);
197
- return {
198
- updated: true,
199
- action: 'added (fallback)',
200
- filePath: configFiles[i]
201
- };
202
- }
203
- catch (fallbackError) {
204
- continue;
205
- }
206
- }
207
- throw new Error('Failed to add shell reference to any configuration file');
208
- }
209
- }
210
- /**
211
- * 添加 shell 引用到配置文件
212
- */
213
- async addShellReference(configFilePath) {
214
- // 确保目录存在
215
- const dir = path.dirname(configFilePath);
216
- fse.ensureDirSync(dir);
217
- let content = '';
218
- if (fse.pathExistsSync(configFilePath)) {
219
- try {
220
- content = fse.readFileSync(configFilePath, 'utf8');
221
- }
222
- catch (error) {
223
- if (error.code === 'EACCES' || error.code === 'EPERM') {
224
- throw new Error(`无权限读取shell配置文件 ${configFilePath}`);
225
- }
226
- throw error;
227
- }
228
- }
229
- // 添加对 ccmanrc 的引用
230
- const reference = this.generateShellReference();
231
- content += reference;
232
- try {
233
- await fse.writeFile(configFilePath, content, 'utf8');
234
- }
235
- catch (error) {
236
- if (error.code === 'EACCES' || error.code === 'EPERM') {
237
- throw new Error(`无权限修改shell配置文件 ${configFilePath}。\n建议:\n 1. 检查文件权限:chmod 644 ${configFilePath}\n 2. 或手动添加以下内容到该文件:\n${reference.trim()}`);
238
- }
239
- throw error;
240
- }
241
- }
242
- /**
243
- * 生成 shell 引用代码
244
- */
245
- generateShellReference() {
246
- return `
247
- # ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference
248
- # This line sources ${constants_1.CONFIG.APP_NAME} environment variables from ${this.ccmanrcPath}
249
- [ -f "${this.ccmanrcPath}" ] && source "${this.ccmanrcPath}"
250
- # End ${constants_1.CONFIG.APP_NAME} Reference
251
- `;
252
- }
253
- /**
254
- * 检查是否已经有 shell 引用
255
- */
256
- hasShellReference(content) {
257
- return content.includes(`# ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference`) ||
258
- content.includes(this.ccmanrcPath);
259
- }
260
- /**
261
- * 从 shell 配置文件中清除 ccmanrc 引用和 ccmanrc 文件
262
- */
263
- async clearFromShell() {
264
- let clearedAny = false;
265
- let lastError;
266
- // 1. 删除 ccmanrc 文件
267
- if (fse.pathExistsSync(this.ccmanrcPath)) {
268
- try {
269
- fse.removeSync(this.ccmanrcPath);
270
- clearedAny = true;
271
- }
272
- catch (error) {
273
- lastError = String(error);
274
- }
275
- }
276
- // 2. 从 shell 配置文件中移除引用
277
- const shellType = this.detectShell();
278
- const configFiles = this.getShellConfigFiles(shellType);
279
- for (const configFile of configFiles) {
280
- try {
281
- if (fse.pathExistsSync(configFile)) {
282
- await this.removeShellReference(configFile);
283
- clearedAny = true;
284
- }
285
- }
286
- catch (error) {
287
- lastError = String(error);
288
- }
289
- }
290
- if (clearedAny) {
291
- return {
292
- success: true,
293
- filePath: this.ccmanrcPath,
294
- message: 'Environment variables and shell references cleared'
295
- };
296
- }
297
- else {
298
- return {
299
- success: false,
300
- filePath: this.ccmanrcPath,
301
- message: 'Failed to clear environment variables',
302
- error: lastError
303
- };
304
- }
305
- }
306
- /**
307
- * 从配置文件中移除 shell 引用
308
- */
309
- async removeShellReference(filePath) {
310
- if (!fse.pathExistsSync(filePath)) {
311
- return;
312
- }
313
- const content = fse.readFileSync(filePath, 'utf8');
314
- const cleanedContent = this.removeShellReferenceFromContent(content);
315
- await fse.writeFile(filePath, cleanedContent, 'utf8');
316
- }
317
- /**
318
- * 从内容中移除 shell 引用部分
319
- */
320
- removeShellReferenceFromContent(content) {
321
- const startMarker = `# ${constants_1.CONFIG.APP_FULL_NAME} - Auto Generated Reference`;
322
- const endMarker = `# End ${constants_1.CONFIG.APP_NAME} Reference`;
323
- const lines = content.split('\n');
324
- const filteredLines = [];
325
- let inCCMSection = false;
326
- for (const line of lines) {
327
- if (line.includes(startMarker)) {
328
- inCCMSection = true;
329
- continue;
330
- }
331
- if (line.includes(endMarker)) {
332
- inCCMSection = false;
333
- continue;
334
- }
335
- if (!inCCMSection) {
336
- filteredLines.push(line);
337
- }
338
- }
339
- return filteredLines.join('\n').replace(/\n{3,}/g, '\n\n');
340
- }
341
- /**
342
- * 检测当前使用的 shell 类型
343
- */
344
- detectShell() {
345
- const shell = process.env.SHELL || '';
346
- if (shell.includes('zsh')) {
347
- return 'zsh';
348
- }
349
- else if (shell.includes('bash')) {
350
- return 'bash';
351
- }
352
- else if (shell.includes('fish')) {
353
- return 'fish';
354
- }
355
- else {
356
- return 'unknown';
357
- }
358
- }
359
- /**
360
- * 获取 shell 配置文件路径列表
361
- */
362
- getShellConfigFiles(shellType) {
363
- const configFiles = [];
364
- switch (shellType) {
365
- case 'zsh':
366
- configFiles.push(path.join(this.homeDir, '.zshrc'), path.join(this.homeDir, '.zprofile'));
367
- break;
368
- case 'bash':
369
- configFiles.push(path.join(this.homeDir, '.bashrc'), path.join(this.homeDir, '.bash_profile'), path.join(this.homeDir, '.profile'));
370
- break;
371
- case 'fish':
372
- configFiles.push(path.join(this.homeDir, '.config/fish/config.fish'));
373
- break;
374
- default:
375
- // 默认尝试常见的配置文件
376
- configFiles.push(path.join(this.homeDir, '.zshrc'), path.join(this.homeDir, '.bashrc'), path.join(this.homeDir, '.profile'));
377
- }
378
- return configFiles;
379
- }
380
- /**
381
- * 生成环境变量导出语句
382
- */
383
- generateExportStatements(envVars, envName) {
384
- const now = new Date();
385
- const timestamp = now.getFullYear() + '-' +
386
- String(now.getMonth() + 1).padStart(2, '0') + '-' +
387
- String(now.getDate()).padStart(2, '0') + ' ' +
388
- String(now.getHours()).padStart(2, '0') + ':' +
389
- String(now.getMinutes()).padStart(2, '0') + ':' +
390
- String(now.getSeconds()).padStart(2, '0');
391
- const nameComment = envName ? `# Environment: ${envName}` : '';
392
- return `
393
- # ${constants_1.CONFIG.APP_FULL_NAME} Environment Variables - Auto Generated
394
- # Generated at: ${timestamp}${nameComment ? '\n' + nameComment : ''}
395
- export ${constants_1.CONFIG.ENV_VARS.BASE_URL}="${envVars.ANTHROPIC_BASE_URL}"
396
- export ${constants_1.CONFIG.ENV_VARS.AUTH_TOKEN}="${envVars.ANTHROPIC_AUTH_TOKEN}"
397
- # End ${constants_1.CONFIG.APP_NAME} Environment Variables
398
- `;
399
- }
400
- /**
401
- * 检查是否已经写入了环境变量
402
- */
403
- hasEnvVarsInShell() {
404
- // 检查 ccmanrc 文件是否存在
405
- if (fse.pathExistsSync(this.ccmanrcPath)) {
406
- return true;
407
- }
408
- // 检查 shell 配置文件中是否有引用
409
- const shellType = this.detectShell();
410
- const configFiles = this.getShellConfigFiles(shellType);
411
- for (const configFile of configFiles) {
412
- if (fse.pathExistsSync(configFile)) {
413
- const content = fse.readFileSync(configFile, 'utf8');
414
- if (this.hasShellReference(content)) {
415
- return true;
416
- }
417
- }
418
- }
419
- return false;
420
- }
421
- /**
422
- * 自动 source shell 配置文件
423
- */
424
- async autoSourceShell() {
425
- const shellType = this.detectShell();
426
- const configFiles = this.getShellConfigFiles(shellType);
427
- // 找到第一个存在的配置文件
428
- const activeConfigFile = configFiles.find(file => fse.pathExistsSync(file));
429
- if (!activeConfigFile) {
430
- return {
431
- success: false,
432
- filePath: configFiles.join(', '),
433
- message: 'No shell configuration file found to source',
434
- error: 'Configuration file not found'
435
- };
436
- }
437
- try {
438
- // 使用子进程执行 source 命令
439
- const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
440
- const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
441
- const execAsync = promisify(exec);
442
- // 根据不同 shell 类型使用不同的 source 命令
443
- let sourceCommand;
444
- switch (shellType) {
445
- case 'zsh':
446
- sourceCommand = `zsh -c "source ${activeConfigFile}"`;
447
- break;
448
- case 'bash':
449
- sourceCommand = `bash -c "source ${activeConfigFile}"`;
450
- break;
451
- case 'fish':
452
- sourceCommand = `fish -c "source ${activeConfigFile}"`;
453
- break;
454
- default:
455
- sourceCommand = `bash -c "source ${activeConfigFile}"`;
456
- }
457
- await execAsync(sourceCommand);
458
- return {
459
- success: true,
460
- filePath: activeConfigFile,
461
- message: `Successfully sourced ${activeConfigFile}`
462
- };
463
- }
464
- catch (error) {
465
- return {
466
- success: false,
467
- filePath: activeConfigFile,
468
- message: 'Failed to source shell configuration file',
469
- error: String(error)
470
- };
471
- }
472
- }
473
- /**
474
- * 获取当前 shell 信息
475
- */
476
- getShellInfo() {
477
- const shellType = this.detectShell();
478
- const configFiles = this.getShellConfigFiles(shellType);
479
- // 找到第一个存在的配置文件作为活动配置文件
480
- const activeConfigFile = configFiles.find(file => fse.pathExistsSync(file));
481
- return {
482
- shellType,
483
- shellPath: process.env.SHELL || 'unknown',
484
- configFiles,
485
- activeConfigFile
486
- };
487
- }
488
- }
489
- exports.ShellManager = ShellManager;
490
- //# sourceMappingURL=ShellManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellManager.js","sourceRoot":"","sources":["../../src/shell/ShellManager.ts"],"names":[],"mappings":"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"}