ccman 2.1.4 → 2.1.6

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 (55) hide show
  1. package/README.md +75 -225
  2. package/README_en.md +51 -201
  3. package/dist/cli.js +219 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config/static-env.d.ts +1 -1
  6. package/dist/config/static-env.js +1 -1
  7. package/dist/core/ClaudeConfigManager.d.ts +1 -1
  8. package/dist/core/ClaudeConfigManager.d.ts.map +1 -1
  9. package/dist/core/ClaudeConfigManager.js +2 -4
  10. package/dist/core/ClaudeConfigManager.js.map +1 -1
  11. package/dist/core/EnvironmentManager.d.ts +27 -0
  12. package/dist/core/EnvironmentManager.d.ts.map +1 -0
  13. package/dist/core/EnvironmentManager.js +46 -0
  14. package/dist/core/EnvironmentManager.js.map +1 -0
  15. package/dist/i18n/messages.d.ts +30 -0
  16. package/dist/i18n/messages.d.ts.map +1 -1
  17. package/dist/i18n/messages.js +62 -0
  18. package/dist/i18n/messages.js.map +1 -1
  19. package/dist/setup/checker.d.ts +33 -0
  20. package/dist/setup/checker.d.ts.map +1 -0
  21. package/dist/setup/checker.js +169 -0
  22. package/dist/setup/checker.js.map +1 -0
  23. package/dist/setup/installer.d.ts +17 -0
  24. package/dist/setup/installer.d.ts.map +1 -0
  25. package/dist/setup/installer.js +108 -0
  26. package/dist/setup/installer.js.map +1 -0
  27. package/dist/setup/planner.d.ts +22 -0
  28. package/dist/setup/planner.d.ts.map +1 -0
  29. package/dist/setup/planner.js +213 -0
  30. package/dist/setup/planner.js.map +1 -0
  31. package/dist/setup/strategies/base.d.ts +26 -0
  32. package/dist/setup/strategies/base.d.ts.map +1 -0
  33. package/dist/setup/strategies/base.js +32 -0
  34. package/dist/setup/strategies/base.js.map +1 -0
  35. package/dist/setup/strategies/node.d.ts +9 -0
  36. package/dist/setup/strategies/node.d.ts.map +1 -0
  37. package/dist/setup/strategies/node.js +141 -0
  38. package/dist/setup/strategies/node.js.map +1 -0
  39. package/dist/setup/strategies/nvm.d.ts +9 -0
  40. package/dist/setup/strategies/nvm.d.ts.map +1 -0
  41. package/dist/setup/strategies/nvm.js +106 -0
  42. package/dist/setup/strategies/nvm.js.map +1 -0
  43. package/dist/setup/strategies/volta.d.ts +9 -0
  44. package/dist/setup/strategies/volta.d.ts.map +1 -0
  45. package/dist/setup/strategies/volta.js +111 -0
  46. package/dist/setup/strategies/volta.js.map +1 -0
  47. package/dist/setup/types.d.ts +95 -0
  48. package/dist/setup/types.d.ts.map +1 -0
  49. package/dist/setup/types.js +6 -0
  50. package/dist/setup/types.js.map +1 -0
  51. package/dist/utils/command.d.ts +33 -0
  52. package/dist/utils/command.d.ts.map +1 -0
  53. package/dist/utils/command.js +73 -0
  54. package/dist/utils/command.js.map +1 -0
  55. package/package.json +5 -2
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeStrategy = void 0;
4
+ /**
5
+ * 直接安装 Node.js 策略
6
+ */
7
+ const base_1 = require("./base");
8
+ class NodeStrategy extends base_1.InstallStrategy {
9
+ async getOptions() {
10
+ const options = [];
11
+ const tools = await this.checkPlatformTools();
12
+ // macOS
13
+ if (this.platform === 'darwin') {
14
+ // 选项1: 官方安装器
15
+ options.push({
16
+ id: 'node-official-macos',
17
+ name: '下载 Node.js 官方安装器(推荐)',
18
+ description: '访问 nodejs.org 下载 LTS 版本',
19
+ priority: 1,
20
+ steps: [
21
+ {
22
+ name: 'download-node',
23
+ description: '访问 https://nodejs.org/',
24
+ command: 'open https://nodejs.org/',
25
+ manual: true
26
+ },
27
+ {
28
+ name: 'install-node',
29
+ description: '下载并安装 LTS 版本 .pkg 文件',
30
+ command: 'manual',
31
+ manual: true
32
+ }
33
+ ]
34
+ });
35
+ // 选项2: Homebrew
36
+ if (tools.brew) {
37
+ options.push({
38
+ id: 'node-brew',
39
+ name: '使用 Homebrew 安装 Node.js',
40
+ description: '通过包管理器安装',
41
+ priority: 2,
42
+ steps: [
43
+ {
44
+ name: 'install-node',
45
+ description: '通过 Homebrew 安装 Node.js 20 LTS',
46
+ command: 'brew install node@20'
47
+ }
48
+ ]
49
+ });
50
+ }
51
+ }
52
+ // Linux
53
+ if (this.platform === 'linux') {
54
+ // Ubuntu/Debian - NodeSource 仓库
55
+ if (tools.apt) {
56
+ options.push({
57
+ id: 'node-nodesource-apt',
58
+ name: '使用 NodeSource 仓库安装(推荐)',
59
+ description: 'Ubuntu/Debian 官方推荐方式',
60
+ priority: 1,
61
+ steps: [
62
+ {
63
+ name: 'setup-repo',
64
+ description: '添加 NodeSource 仓库',
65
+ command: 'curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -'
66
+ },
67
+ {
68
+ name: 'install-node',
69
+ description: '安装 Node.js',
70
+ command: 'sudo apt-get install -y nodejs'
71
+ }
72
+ ]
73
+ });
74
+ }
75
+ // CentOS/RHEL/Fedora - NodeSource 仓库
76
+ if (tools.yum) {
77
+ options.push({
78
+ id: 'node-nodesource-yum',
79
+ name: '使用 NodeSource 仓库安装(推荐)',
80
+ description: 'CentOS/RHEL/Fedora 官方推荐方式',
81
+ priority: 1,
82
+ steps: [
83
+ {
84
+ name: 'setup-repo',
85
+ description: '添加 NodeSource 仓库',
86
+ command: 'curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -'
87
+ },
88
+ {
89
+ name: 'install-node',
90
+ description: '安装 Node.js',
91
+ command: 'sudo yum install -y nodejs'
92
+ }
93
+ ]
94
+ });
95
+ }
96
+ }
97
+ // Windows
98
+ if (this.platform === 'win32') {
99
+ // 选项1: 官方安装器
100
+ options.push({
101
+ id: 'node-official-windows',
102
+ name: '下载 Node.js 官方安装器(推荐)',
103
+ description: '访问 nodejs.org 下载 LTS 版本',
104
+ priority: 1,
105
+ steps: [
106
+ {
107
+ name: 'download-node',
108
+ description: '访问 https://nodejs.org/',
109
+ command: 'start https://nodejs.org/',
110
+ manual: true
111
+ },
112
+ {
113
+ name: 'install-node',
114
+ description: '下载并运行 LTS 版本 .msi 安装器',
115
+ command: 'manual',
116
+ manual: true
117
+ }
118
+ ]
119
+ });
120
+ // 选项2: Chocolatey
121
+ if (tools.choco) {
122
+ options.push({
123
+ id: 'node-choco',
124
+ name: '使用 Chocolatey 安装 Node.js',
125
+ description: '通过包管理器安装 LTS 版本',
126
+ priority: 2,
127
+ steps: [
128
+ {
129
+ name: 'install-node',
130
+ description: '通过 Chocolatey 安装 Node.js LTS',
131
+ command: 'choco install nodejs-lts'
132
+ }
133
+ ]
134
+ });
135
+ }
136
+ }
137
+ return options;
138
+ }
139
+ }
140
+ exports.NodeStrategy = NodeStrategy;
141
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/setup/strategies/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * nvm 安装策略
3
+ */
4
+ import { InstallStrategy } from './base';
5
+ import { InstallOption } from '../types';
6
+ export declare class NvmStrategy extends InstallStrategy {
7
+ getOptions(): Promise<InstallOption[]>;
8
+ }
9
+ //# sourceMappingURL=nvm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvm.d.ts","sourceRoot":"","sources":["../../../src/setup/strategies/nvm.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,WAAY,SAAQ,eAAe;IACxC,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAoG7C"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NvmStrategy = void 0;
4
+ /**
5
+ * nvm 安装策略
6
+ */
7
+ const base_1 = require("./base");
8
+ class NvmStrategy extends base_1.InstallStrategy {
9
+ async getOptions() {
10
+ const options = [];
11
+ const tools = await this.checkPlatformTools();
12
+ // macOS / Linux
13
+ if (this.platform === 'darwin' || this.platform === 'linux') {
14
+ // 选项1: 官方脚本(优先)
15
+ options.push({
16
+ id: 'nvm-script',
17
+ name: '使用官方脚本安装 nvm(推荐)',
18
+ description: '快速安装 Node 版本管理器',
19
+ priority: 1,
20
+ steps: [
21
+ {
22
+ name: 'install-nvm',
23
+ description: '下载并安装 nvm',
24
+ command: 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash'
25
+ },
26
+ {
27
+ name: 'reload-shell',
28
+ description: '重新加载 shell 配置',
29
+ command: 'source ~/.bashrc || source ~/.zshrc',
30
+ optional: true
31
+ }
32
+ ]
33
+ });
34
+ // 选项2: Homebrew(如果已安装,但需要额外配置)
35
+ if (tools.brew) {
36
+ options.push({
37
+ id: 'nvm-brew',
38
+ name: '使用 Homebrew 安装 nvm',
39
+ description: '需要手动配置环境变量',
40
+ priority: 2,
41
+ steps: [
42
+ {
43
+ name: 'install-nvm',
44
+ description: '通过 Homebrew 安装 nvm',
45
+ command: 'brew install nvm'
46
+ },
47
+ {
48
+ name: 'create-nvm-dir',
49
+ description: '创建 nvm 目录',
50
+ command: 'mkdir ~/.nvm'
51
+ },
52
+ {
53
+ name: 'configure-env',
54
+ description: '配置环境变量(请查看 brew info nvm)',
55
+ command: 'brew info nvm',
56
+ manual: true
57
+ }
58
+ ]
59
+ });
60
+ }
61
+ }
62
+ // Windows - nvm-windows
63
+ if (this.platform === 'win32') {
64
+ // 选项1: 官方安装器
65
+ options.push({
66
+ id: 'nvm-windows-installer',
67
+ name: '下载 nvm-windows 安装器(推荐)',
68
+ description: 'Windows 版本的 nvm',
69
+ priority: 1,
70
+ steps: [
71
+ {
72
+ name: 'download-nvm',
73
+ description: '访问 https://github.com/coreybutler/nvm-windows/releases',
74
+ command: 'open https://github.com/coreybutler/nvm-windows/releases',
75
+ manual: true
76
+ },
77
+ {
78
+ name: 'install-nvm',
79
+ description: '下载并运行 nvm-setup.exe',
80
+ command: 'manual',
81
+ manual: true
82
+ }
83
+ ]
84
+ });
85
+ // 选项2: Chocolatey
86
+ if (tools.choco) {
87
+ options.push({
88
+ id: 'nvm-windows-choco',
89
+ name: '使用 Chocolatey 安装 nvm-windows',
90
+ description: '通过 Chocolatey 包管理器',
91
+ priority: 2,
92
+ steps: [
93
+ {
94
+ name: 'install-nvm',
95
+ description: '通过 Chocolatey 安装 nvm',
96
+ command: 'choco install nvm'
97
+ }
98
+ ]
99
+ });
100
+ }
101
+ }
102
+ return options;
103
+ }
104
+ }
105
+ exports.NvmStrategy = NvmStrategy;
106
+ //# sourceMappingURL=nvm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvm.js","sourceRoot":"","sources":["../../../src/setup/strategies/nvm.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,iCAAyC;AAGzC,MAAa,WAAY,SAAQ,sBAAe;IAC9C,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9C,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5D,gBAAgB;YAChB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,WAAW;wBACxB,OAAO,EAAE,iFAAiF;qBAC3F;oBACD;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,eAAe;wBAC5B,OAAO,EAAE,qCAAqC;wBAC9C,QAAQ,EAAE,IAAI;qBACf;iBACF;aACF,CAAC,CAAC;YAEH,+BAA+B;YAC/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,UAAU;oBACd,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,YAAY;oBACzB,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,oBAAoB;4BACjC,OAAO,EAAE,kBAAkB;yBAC5B;wBACD;4BACE,IAAI,EAAE,gBAAgB;4BACtB,WAAW,EAAE,WAAW;4BACxB,OAAO,EAAE,cAAc;yBACxB;wBACD;4BACE,IAAI,EAAE,eAAe;4BACrB,WAAW,EAAE,2BAA2B;4BACxC,OAAO,EAAE,eAAe;4BACxB,MAAM,EAAE,IAAI;yBACb;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,aAAa;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,uBAAuB;gBAC3B,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EAAE,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,wDAAwD;wBACrE,OAAO,EAAE,0DAA0D;wBACnE,MAAM,EAAE,IAAI;qBACb;oBACD;wBACE,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,qBAAqB;wBAClC,OAAO,EAAE,QAAQ;wBACjB,MAAM,EAAE,IAAI;qBACb;iBACF;aACF,CAAC,CAAC;YAEH,kBAAkB;YAClB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,mBAAmB;oBACvB,IAAI,EAAE,8BAA8B;oBACpC,WAAW,EAAE,oBAAoB;oBACjC,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,sBAAsB;4BACnC,OAAO,EAAE,mBAAmB;yBAC7B;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AArGD,kCAqGC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Volta 安装策略
3
+ */
4
+ import { InstallStrategy } from './base';
5
+ import { InstallOption } from '../types';
6
+ export declare class VoltaStrategy extends InstallStrategy {
7
+ getOptions(): Promise<InstallOption[]>;
8
+ }
9
+ //# sourceMappingURL=volta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volta.d.ts","sourceRoot":"","sources":["../../../src/setup/strategies/volta.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AAEtD,qBAAa,aAAc,SAAQ,eAAe;IAC1C,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CA0G7C"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoltaStrategy = void 0;
4
+ /**
5
+ * Volta 安装策略
6
+ */
7
+ const base_1 = require("./base");
8
+ class VoltaStrategy extends base_1.InstallStrategy {
9
+ async getOptions() {
10
+ const options = [];
11
+ const tools = await this.checkPlatformTools();
12
+ // macOS / Linux
13
+ if (this.platform === 'darwin' || this.platform === 'linux') {
14
+ // 选项1: 官方脚本(优先推荐)
15
+ options.push({
16
+ id: 'volta-script',
17
+ name: '使用官方脚本安装 Volta(推荐)',
18
+ description: '简单快速,一键安装',
19
+ priority: 1,
20
+ steps: [
21
+ {
22
+ name: 'install-volta',
23
+ description: '下载并安装 Volta',
24
+ command: 'curl https://get.volta.sh | bash'
25
+ },
26
+ {
27
+ name: 'reload-shell',
28
+ description: '重新加载 shell 配置',
29
+ command: 'source ~/.bashrc || source ~/.zshrc',
30
+ optional: true
31
+ }
32
+ ]
33
+ });
34
+ // 选项2: Homebrew(如果已安装)
35
+ if (tools.brew) {
36
+ options.push({
37
+ id: 'volta-brew',
38
+ name: '使用 Homebrew 安装 Volta',
39
+ description: '如果你更喜欢使用 Homebrew',
40
+ priority: 2,
41
+ steps: [
42
+ {
43
+ name: 'install-volta',
44
+ description: '通过 Homebrew 安装 Volta',
45
+ command: 'brew install volta'
46
+ }
47
+ ]
48
+ });
49
+ }
50
+ }
51
+ // Windows
52
+ if (this.platform === 'win32') {
53
+ // 选项1: 官方安装器(优先)
54
+ options.push({
55
+ id: 'volta-installer',
56
+ name: '下载 Volta 官方安装器(推荐)',
57
+ description: '访问官网下载 .msi 安装器',
58
+ priority: 1,
59
+ steps: [
60
+ {
61
+ name: 'download-volta',
62
+ description: '访问 https://github.com/volta-cli/volta/releases',
63
+ command: 'open https://github.com/volta-cli/volta/releases',
64
+ manual: true
65
+ },
66
+ {
67
+ name: 'install-volta',
68
+ description: '下载并运行 volta-x.x.x-windows-x86_64.msi',
69
+ command: 'manual',
70
+ manual: true
71
+ }
72
+ ]
73
+ });
74
+ // 选项2: Chocolatey(如果已安装)
75
+ if (tools.choco) {
76
+ options.push({
77
+ id: 'volta-choco',
78
+ name: '使用 Chocolatey 安装 Volta',
79
+ description: '通过 Chocolatey 包管理器',
80
+ priority: 2,
81
+ steps: [
82
+ {
83
+ name: 'install-volta',
84
+ description: '通过 Chocolatey 安装 Volta',
85
+ command: 'choco install volta'
86
+ }
87
+ ]
88
+ });
89
+ }
90
+ // 选项3: Scoop(如果已安装)
91
+ if (tools.scoop) {
92
+ options.push({
93
+ id: 'volta-scoop',
94
+ name: '使用 Scoop 安装 Volta',
95
+ description: '通过 Scoop 包管理器',
96
+ priority: 3,
97
+ steps: [
98
+ {
99
+ name: 'install-volta',
100
+ description: '通过 Scoop 安装 Volta',
101
+ command: 'scoop install volta'
102
+ }
103
+ ]
104
+ });
105
+ }
106
+ }
107
+ return options;
108
+ }
109
+ }
110
+ exports.VoltaStrategy = VoltaStrategy;
111
+ //# sourceMappingURL=volta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volta.js","sourceRoot":"","sources":["../../../src/setup/strategies/volta.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,iCAAyC;AAGzC,MAAa,aAAc,SAAQ,sBAAe;IAChD,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9C,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5D,kBAAkB;YAClB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EAAE,WAAW;gBACxB,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,aAAa;wBAC1B,OAAO,EAAE,kCAAkC;qBAC5C;oBACD;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,eAAe;wBAC5B,OAAO,EAAE,qCAAqC;wBAC9C,QAAQ,EAAE,IAAI;qBACf;iBACF;aACF,CAAC,CAAC;YAEH,uBAAuB;YACvB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,YAAY;oBAChB,IAAI,EAAE,sBAAsB;oBAC5B,WAAW,EAAE,mBAAmB;oBAChC,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,eAAe;4BACrB,WAAW,EAAE,sBAAsB;4BACnC,OAAO,EAAE,oBAAoB;yBAC9B;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,iBAAiB;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EAAE,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,gBAAgB;wBACtB,WAAW,EAAE,gDAAgD;wBAC7D,OAAO,EAAE,kDAAkD;wBAC3D,MAAM,EAAE,IAAI;qBACb;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,sCAAsC;wBACnD,OAAO,EAAE,QAAQ;wBACjB,MAAM,EAAE,IAAI;qBACb;iBACF;aACF,CAAC,CAAC;YAEH,yBAAyB;YACzB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,aAAa;oBACjB,IAAI,EAAE,wBAAwB;oBAC9B,WAAW,EAAE,oBAAoB;oBACjC,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,eAAe;4BACrB,WAAW,EAAE,wBAAwB;4BACrC,OAAO,EAAE,qBAAqB;yBAC/B;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YAED,oBAAoB;YACpB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,aAAa;oBACjB,IAAI,EAAE,mBAAmB;oBACzB,WAAW,EAAE,eAAe;oBAC5B,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,eAAe;4BACrB,WAAW,EAAE,mBAAmB;4BAChC,OAAO,EAAE,qBAAqB;yBAC/B;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA3GD,sCA2GC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Setup 模块类型定义
3
+ */
4
+ export type Platform = 'darwin' | 'linux' | 'win32';
5
+ /**
6
+ * 工具信息
7
+ */
8
+ export interface ToolInfo {
9
+ installed: boolean;
10
+ version: string | null;
11
+ path?: string | null;
12
+ }
13
+ /**
14
+ * Node.js 信息
15
+ */
16
+ export interface NodeInfo extends ToolInfo {
17
+ versionValid?: boolean;
18
+ requiredVersion?: string;
19
+ }
20
+ /**
21
+ * 版本管理器信息
22
+ */
23
+ export interface VersionManagerInfo {
24
+ volta: boolean;
25
+ nvm: boolean;
26
+ }
27
+ /**
28
+ * Claude Code 依赖要求
29
+ */
30
+ export interface ClaudeCodeRequirements {
31
+ nodeVersion: string;
32
+ requiredTools: string[];
33
+ }
34
+ /**
35
+ * 环境检查结果
36
+ */
37
+ export interface EnvironmentCheckResult {
38
+ status: 'ready' | 'needs-setup' | 'warning' | 'error';
39
+ claudeCode: ToolInfo;
40
+ node: NodeInfo;
41
+ npm: ToolInfo;
42
+ versionManagers: VersionManagerInfo;
43
+ requirements: ClaudeCodeRequirements;
44
+ platform: Platform;
45
+ issues: string[];
46
+ suggestions: string[];
47
+ }
48
+ /**
49
+ * 安装步骤
50
+ */
51
+ export interface InstallStep {
52
+ name: string;
53
+ description: string;
54
+ command: string;
55
+ manual?: boolean;
56
+ optional?: boolean;
57
+ }
58
+ /**
59
+ * 安装选项
60
+ */
61
+ export interface InstallOption {
62
+ id: string;
63
+ name: string;
64
+ description: string;
65
+ priority: number;
66
+ steps: InstallStep[];
67
+ reason?: string;
68
+ }
69
+ /**
70
+ * 安装计划
71
+ */
72
+ export interface InstallationPlan {
73
+ needsNode: boolean;
74
+ needsClaudeCode: boolean;
75
+ nodeOptions: InstallOption[];
76
+ claudeCodeSteps: InstallStep[];
77
+ selectedNodeOption?: InstallOption;
78
+ }
79
+ /**
80
+ * 安装结果
81
+ */
82
+ export interface InstallationResult {
83
+ success: boolean;
84
+ message: string;
85
+ stepsExecuted: string[];
86
+ stepsFailed: string[];
87
+ }
88
+ /**
89
+ * 安装执行选项
90
+ */
91
+ export interface InstallerOptions {
92
+ dryRun?: boolean;
93
+ auto?: boolean;
94
+ }
95
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/setup/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;IACtD,UAAU,EAAE,QAAQ,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,eAAe,EAAE,kBAAkB,CAAC;IACpC,YAAY,EAAE,sBAAsB,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,aAAa,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Setup 模块类型定义
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/setup/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 命令执行结果
3
+ */
4
+ export interface CommandResult {
5
+ stdout: string;
6
+ stderr: string;
7
+ code: number;
8
+ }
9
+ /**
10
+ * 命令执行选项
11
+ */
12
+ export interface CommandOptions {
13
+ timeout?: number;
14
+ cwd?: string;
15
+ env?: Record<string, string>;
16
+ }
17
+ /**
18
+ * 执行命令
19
+ */
20
+ export declare function executeCommand(cmd: string, options?: CommandOptions): Promise<CommandResult>;
21
+ /**
22
+ * 检查命令是否存在
23
+ */
24
+ export declare function commandExists(cmd: string): Promise<boolean>;
25
+ /**
26
+ * 获取命令版本
27
+ */
28
+ export declare function getCommandVersion(cmd: string): Promise<string | null>;
29
+ /**
30
+ * 获取命令路径
31
+ */
32
+ export declare function getCommandPath(cmd: string): Promise<string | null>;
33
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/utils/command.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,CAoBxB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU3E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxE"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeCommand = executeCommand;
4
+ exports.commandExists = commandExists;
5
+ exports.getCommandVersion = getCommandVersion;
6
+ exports.getCommandPath = getCommandPath;
7
+ /**
8
+ * 命令执行工具函数
9
+ */
10
+ const child_process_1 = require("child_process");
11
+ const util_1 = require("util");
12
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
13
+ /**
14
+ * 执行命令
15
+ */
16
+ async function executeCommand(cmd, options) {
17
+ try {
18
+ const { stdout, stderr } = await execAsync(cmd, {
19
+ timeout: options?.timeout || 30000,
20
+ cwd: options?.cwd,
21
+ env: { ...process.env, ...options?.env }
22
+ });
23
+ return {
24
+ stdout: stdout.trim(),
25
+ stderr: stderr.trim(),
26
+ code: 0
27
+ };
28
+ }
29
+ catch (error) {
30
+ return {
31
+ stdout: error.stdout?.trim() || '',
32
+ stderr: error.stderr?.trim() || error.message,
33
+ code: error.code || 1
34
+ };
35
+ }
36
+ }
37
+ /**
38
+ * 检查命令是否存在
39
+ */
40
+ async function commandExists(cmd) {
41
+ const checkCmd = process.platform === 'win32'
42
+ ? `where ${cmd}`
43
+ : `command -v ${cmd}`;
44
+ const result = await executeCommand(checkCmd);
45
+ return result.code === 0;
46
+ }
47
+ /**
48
+ * 获取命令版本
49
+ */
50
+ async function getCommandVersion(cmd) {
51
+ const result = await executeCommand(`${cmd} --version`);
52
+ if (result.code !== 0) {
53
+ return null;
54
+ }
55
+ // 提取版本号(匹配常见格式 x.y.z)
56
+ const versionMatch = result.stdout.match(/\d+\.\d+\.\d+/);
57
+ return versionMatch ? versionMatch[0] : result.stdout.split('\n')[0];
58
+ }
59
+ /**
60
+ * 获取命令路径
61
+ */
62
+ async function getCommandPath(cmd) {
63
+ const checkCmd = process.platform === 'win32'
64
+ ? `where ${cmd}`
65
+ : `which ${cmd}`;
66
+ const result = await executeCommand(checkCmd);
67
+ if (result.code !== 0) {
68
+ return null;
69
+ }
70
+ // Windows 的 where 可能返回多个路径,取第一个
71
+ return result.stdout.split('\n')[0].trim();
72
+ }
73
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/utils/command.ts"],"names":[],"mappings":";;AA6BA,wCAuBC;AAKD,sCAOC;AAKD,8CAUC;AAKD,wCAaC;AAjGD;;GAEG;AACH,iDAAqC;AACrC,+BAAiC;AAEjC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAoBlC;;GAEG;AACI,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,OAAwB;IAExB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;YAClC,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;SACzC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,IAAI,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;YAClC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO;YAC7C,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;SACtB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3C,CAAC,CAAC,SAAS,GAAG,EAAE;QAChB,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC;IAExB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC;IAExD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3C,CAAC,CAAC,SAAS,GAAG,EAAE;QAChB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccman",
3
- "version": "2.1.4",
3
+ "version": "2.1.6",
4
4
  "description": "Claude Code Manager - A TypeScript tool to manage Claude Code API configurations",
5
5
  "main": "dist/index.js",
6
6
  "packageManager": "pnpm@7.33.7",
@@ -60,13 +60,16 @@
60
60
  "chalk": "^4.1.2",
61
61
  "commander": "^11.0.0",
62
62
  "fs-extra": "^11.0.0",
63
- "inquirer": "^8.2.6"
63
+ "inquirer": "^8.2.6",
64
+ "semver": "^7.7.2"
64
65
  },
65
66
  "devDependencies": {
67
+ "@esbuild/darwin-arm64": "^0.25.10",
66
68
  "@types/fs-extra": "^11.0.0",
67
69
  "@types/inquirer": "^9.0.0",
68
70
  "@types/jest": "^29.0.0",
69
71
  "@types/node": "^20.0.0",
72
+ "@types/semver": "^7.7.1",
70
73
  "@typescript-eslint/eslint-plugin": "^6.0.0",
71
74
  "@typescript-eslint/parser": "^6.0.0",
72
75
  "eslint": "^8.0.0",