ccman 2.1.6 → 3.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.
- package/README.md +103 -227
- package/dist/commands/claudecode/add.d.ts +3 -0
- package/dist/commands/claudecode/add.d.ts.map +1 -0
- package/dist/commands/claudecode/add.js +129 -0
- package/dist/commands/claudecode/add.js.map +1 -0
- package/dist/commands/claudecode/clone.d.ts +3 -0
- package/dist/commands/claudecode/clone.d.ts.map +1 -0
- package/dist/commands/claudecode/clone.js +71 -0
- package/dist/commands/claudecode/clone.js.map +1 -0
- package/dist/commands/claudecode/current.d.ts +3 -0
- package/dist/commands/claudecode/current.d.ts.map +1 -0
- package/dist/commands/claudecode/current.js +32 -0
- package/dist/commands/claudecode/current.js.map +1 -0
- package/dist/commands/claudecode/edit.d.ts +3 -0
- package/dist/commands/claudecode/edit.d.ts.map +1 -0
- package/dist/commands/claudecode/edit.js +94 -0
- package/dist/commands/claudecode/edit.js.map +1 -0
- package/dist/commands/claudecode/index.d.ts +6 -0
- package/dist/commands/claudecode/index.d.ts.map +1 -0
- package/dist/commands/claudecode/index.js +20 -0
- package/dist/commands/claudecode/index.js.map +1 -0
- package/dist/commands/claudecode/list.d.ts +3 -0
- package/dist/commands/claudecode/list.d.ts.map +1 -0
- package/dist/commands/claudecode/list.js +45 -0
- package/dist/commands/claudecode/list.js.map +1 -0
- package/dist/commands/claudecode/remove.d.ts +3 -0
- package/dist/commands/claudecode/remove.d.ts.map +1 -0
- package/dist/commands/claudecode/remove.js +75 -0
- package/dist/commands/claudecode/remove.js.map +1 -0
- package/dist/commands/claudecode/use.d.ts +3 -0
- package/dist/commands/claudecode/use.d.ts.map +1 -0
- package/dist/commands/claudecode/use.js +66 -0
- package/dist/commands/claudecode/use.js.map +1 -0
- package/dist/commands/codex/add.d.ts +3 -0
- package/dist/commands/codex/add.d.ts.map +1 -0
- package/dist/commands/codex/add.js +130 -0
- package/dist/commands/codex/add.js.map +1 -0
- package/dist/commands/codex/clone.d.ts +3 -0
- package/dist/commands/codex/clone.d.ts.map +1 -0
- package/dist/commands/codex/clone.js +71 -0
- package/dist/commands/codex/clone.js.map +1 -0
- package/dist/commands/codex/current.d.ts +3 -0
- package/dist/commands/codex/current.d.ts.map +1 -0
- package/dist/commands/codex/current.js +32 -0
- package/dist/commands/codex/current.js.map +1 -0
- package/dist/commands/codex/edit.d.ts +3 -0
- package/dist/commands/codex/edit.d.ts.map +1 -0
- package/dist/commands/codex/edit.js +94 -0
- package/dist/commands/codex/edit.js.map +1 -0
- package/dist/commands/codex/index.d.ts +6 -0
- package/dist/commands/codex/index.d.ts.map +1 -0
- package/dist/commands/codex/index.js +20 -0
- package/dist/commands/codex/index.js.map +1 -0
- package/dist/commands/codex/list.d.ts +3 -0
- package/dist/commands/codex/list.d.ts.map +1 -0
- package/dist/commands/codex/list.js +45 -0
- package/dist/commands/codex/list.js.map +1 -0
- package/dist/commands/codex/remove.d.ts +3 -0
- package/dist/commands/codex/remove.d.ts.map +1 -0
- package/dist/commands/codex/remove.js +75 -0
- package/dist/commands/codex/remove.js.map +1 -0
- package/dist/commands/codex/use.d.ts +3 -0
- package/dist/commands/codex/use.d.ts.map +1 -0
- package/dist/commands/codex/use.js +66 -0
- package/dist/commands/codex/use.js.map +1 -0
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -19
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +36 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +509 -0
- package/dist/interactive.js.map +1 -0
- package/dist/utils/file-check.d.ts +5 -0
- package/dist/utils/file-check.d.ts.map +1 -0
- package/dist/utils/file-check.js +14 -0
- package/dist/utils/file-check.js.map +1 -0
- package/dist/utils/logo.d.ts +2 -0
- package/dist/utils/logo.d.ts.map +1 -0
- package/dist/utils/logo.js +13 -0
- package/dist/utils/logo.js.map +1 -0
- package/package.json +28 -61
- package/LICENSE +0 -21
- package/README_en.md +0 -294
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -948
- package/dist/cli.js.map +0 -1
- package/dist/commands/lang.d.ts +0 -3
- package/dist/commands/lang.d.ts.map +0 -1
- package/dist/commands/lang.js +0 -99
- package/dist/commands/lang.js.map +0 -1
- package/dist/config/default-providers.d.ts +0 -34
- package/dist/config/default-providers.d.ts.map +0 -1
- package/dist/config/default-providers.js +0 -96
- package/dist/config/default-providers.js.map +0 -1
- package/dist/config/static-env.d.ts +0 -14
- package/dist/config/static-env.d.ts.map +0 -1
- package/dist/config/static-env.js +0 -17
- package/dist/config/static-env.js.map +0 -1
- package/dist/core/CCMConfigManager.d.ts +0 -64
- package/dist/core/CCMConfigManager.d.ts.map +0 -1
- package/dist/core/CCMConfigManager.js +0 -267
- package/dist/core/CCMConfigManager.js.map +0 -1
- package/dist/core/ClaudeConfigManager.d.ts +0 -39
- package/dist/core/ClaudeConfigManager.d.ts.map +0 -1
- package/dist/core/ClaudeConfigManager.js +0 -161
- package/dist/core/ClaudeConfigManager.js.map +0 -1
- package/dist/core/EnvironmentManager.d.ts +0 -27
- package/dist/core/EnvironmentManager.d.ts.map +0 -1
- package/dist/core/EnvironmentManager.js +0 -46
- package/dist/core/EnvironmentManager.js.map +0 -1
- package/dist/i18n/LanguageManager.d.ts +0 -43
- package/dist/i18n/LanguageManager.d.ts.map +0 -1
- package/dist/i18n/LanguageManager.js +0 -157
- package/dist/i18n/LanguageManager.js.map +0 -1
- package/dist/i18n/messages.d.ts +0 -95
- package/dist/i18n/messages.d.ts.map +0 -1
- package/dist/i18n/messages.js +0 -206
- package/dist/i18n/messages.js.map +0 -1
- package/dist/providers/ProviderManager.d.ts +0 -63
- package/dist/providers/ProviderManager.d.ts.map +0 -1
- package/dist/providers/ProviderManager.js +0 -350
- package/dist/providers/ProviderManager.js.map +0 -1
- package/dist/setup/checker.d.ts +0 -33
- package/dist/setup/checker.d.ts.map +0 -1
- package/dist/setup/checker.js +0 -169
- package/dist/setup/checker.js.map +0 -1
- package/dist/setup/installer.d.ts +0 -17
- package/dist/setup/installer.d.ts.map +0 -1
- package/dist/setup/installer.js +0 -108
- package/dist/setup/installer.js.map +0 -1
- package/dist/setup/planner.d.ts +0 -22
- package/dist/setup/planner.d.ts.map +0 -1
- package/dist/setup/planner.js +0 -213
- package/dist/setup/planner.js.map +0 -1
- package/dist/setup/strategies/base.d.ts +0 -26
- package/dist/setup/strategies/base.d.ts.map +0 -1
- package/dist/setup/strategies/base.js +0 -32
- package/dist/setup/strategies/base.js.map +0 -1
- package/dist/setup/strategies/node.d.ts +0 -9
- package/dist/setup/strategies/node.d.ts.map +0 -1
- package/dist/setup/strategies/node.js +0 -141
- package/dist/setup/strategies/node.js.map +0 -1
- package/dist/setup/strategies/nvm.d.ts +0 -9
- package/dist/setup/strategies/nvm.d.ts.map +0 -1
- package/dist/setup/strategies/nvm.js +0 -106
- package/dist/setup/strategies/nvm.js.map +0 -1
- package/dist/setup/strategies/volta.d.ts +0 -9
- package/dist/setup/strategies/volta.d.ts.map +0 -1
- package/dist/setup/strategies/volta.js +0 -111
- package/dist/setup/strategies/volta.js.map +0 -1
- package/dist/setup/types.d.ts +0 -95
- package/dist/setup/types.d.ts.map +0 -1
- package/dist/setup/types.js +0 -6
- package/dist/setup/types.js.map +0 -1
- package/dist/types/index.d.ts +0 -95
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -7
- package/dist/types/index.js.map +0 -1
- package/dist/utils/command.d.ts +0 -33
- package/dist/utils/command.d.ts.map +0 -1
- package/dist/utils/command.js +0 -73
- package/dist/utils/command.js.map +0 -1
- package/dist/utils/env-config.d.ts +0 -27
- package/dist/utils/env-config.d.ts.map +0 -1
- package/dist/utils/env-config.js +0 -83
- package/dist/utils/env-config.js.map +0 -1
- package/dist/utils/version.d.ts +0 -5
- package/dist/utils/version.d.ts.map +0 -1
- package/dist/utils/version.js +0 -53
- package/dist/utils/version.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,294 +1,170 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @ccman/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Command-line interface for managing Codex and Claude Code API service provider configurations.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://www.npmjs.com/package/ccman)
|
|
7
|
-
[](https://opensource.org/licenses/MIT)
|
|
8
|
-
[](https://nodejs.org)
|
|
9
|
-
|
|
10
|
-
**智能管理 Claude Code API 配置的 TypeScript CLI 工具**
|
|
11
|
-
|
|
12
|
-
🌍 多语言支持 · 🔧 直接配置集成 · 📁 多供应商管理 · ⚡ 零配置体验
|
|
13
|
-
|
|
14
|
-
**中文文档** | [English](./README_en.md)
|
|
15
|
-
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## ✨ 核心特性
|
|
21
|
-
|
|
22
|
-
- **🌍 智能语言支持** - 自动检测系统语言,支持中英文无缝切换
|
|
23
|
-
- **🔧 直接配置集成** - 直接修改 `~/.claude/settings.json`,无需 Shell 集成
|
|
24
|
-
- **📁 多供应商管理** - 在不同 API 供应商间快速切换(Anthropic 官方、第三方等)
|
|
25
|
-
- **🎯 交互式菜单** - 友好的命令行交互界面,支持连续操作
|
|
26
|
-
- **⚡ 零配置体验** - 开箱即用,智能默认配置
|
|
27
|
-
- **🔒 安全可靠** - 自动备份,选择性配置更新,保护用户数据
|
|
28
|
-
|
|
29
|
-
## 🚀 快速开始
|
|
30
|
-
|
|
31
|
-
### 安装方式
|
|
32
|
-
|
|
33
|
-
#### 方式 1: npm 安装 (推荐)
|
|
5
|
+
## Installation
|
|
34
6
|
|
|
35
7
|
```bash
|
|
36
|
-
#
|
|
37
|
-
npm install -g ccman
|
|
38
|
-
|
|
39
|
-
# 或使用 pnpm
|
|
40
|
-
pnpm add -g ccman
|
|
8
|
+
# Install globally
|
|
9
|
+
npm install -g @ccman/cli
|
|
41
10
|
|
|
42
|
-
#
|
|
43
|
-
|
|
11
|
+
# Or use pnpm
|
|
12
|
+
pnpm add -g @ccman/cli
|
|
44
13
|
```
|
|
45
14
|
|
|
46
|
-
|
|
15
|
+
## Quick Start
|
|
47
16
|
|
|
48
17
|
```bash
|
|
49
|
-
#
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# 运行特定命令
|
|
53
|
-
npx ccman ls
|
|
54
|
-
npx ccman add anthropic "Anthropic Official" https://api.anthropic.com
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
#### 方式 3: 从源码安装
|
|
18
|
+
# 1. Initialize configuration
|
|
19
|
+
ccman init
|
|
58
20
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
git clone https://github.com/2ue/ccman.git
|
|
62
|
-
cd ccman
|
|
21
|
+
# 2. Add a provider (interactive)
|
|
22
|
+
ccman add
|
|
63
23
|
|
|
64
|
-
#
|
|
65
|
-
|
|
24
|
+
# 3. List all providers
|
|
25
|
+
ccman list
|
|
66
26
|
|
|
67
|
-
#
|
|
68
|
-
|
|
27
|
+
# 4. Switch to a provider
|
|
28
|
+
ccman use "Provider Name"
|
|
69
29
|
|
|
70
|
-
#
|
|
71
|
-
|
|
72
|
-
node dist/cli.js
|
|
30
|
+
# 5. Check current active provider
|
|
31
|
+
ccman current
|
|
73
32
|
```
|
|
74
33
|
|
|
75
|
-
|
|
34
|
+
## Commands
|
|
76
35
|
|
|
77
|
-
|
|
36
|
+
### `ccman init`
|
|
78
37
|
|
|
79
|
-
|
|
38
|
+
Initialize ccman configuration file (`~/.ccman/config.json`).
|
|
80
39
|
|
|
81
40
|
```bash
|
|
82
|
-
ccman
|
|
41
|
+
ccman init
|
|
83
42
|
```
|
|
84
43
|
|
|
85
|
-
|
|
86
|
-
1. 选择界面语言(中文/英文/自动检测)
|
|
87
|
-
2. 创建第一个供应商配置
|
|
88
|
-
3. 自动应用到 Claude Code
|
|
44
|
+
### `ccman add`
|
|
89
45
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
### 核心命令
|
|
46
|
+
Add a new service provider with interactive prompts. Supports both preset templates and custom configuration.
|
|
93
47
|
|
|
94
48
|
```bash
|
|
95
|
-
ccman
|
|
96
|
-
ccman ls # 列出所有供应商及系统状态
|
|
97
|
-
ccman ls --current # 显示当前供应商详情
|
|
98
|
-
ccman ls --brief # 简洁列表模式
|
|
99
|
-
ccman add <id> <name> <url> [key] # 添加新供应商
|
|
100
|
-
ccman use <id> # 切换到指定供应商
|
|
101
|
-
ccman rm <id> # 删除供应商
|
|
102
|
-
ccman clear # 清除所有配置(需确认)
|
|
49
|
+
ccman add
|
|
103
50
|
```
|
|
104
51
|
|
|
105
|
-
|
|
52
|
+
**Interactive prompts:**
|
|
53
|
+
1. Choose preset template or custom configuration
|
|
54
|
+
2. If preset: Select from available presets (Anthropic Official, PackyCode)
|
|
55
|
+
3. If custom: Enter provider details manually
|
|
56
|
+
4. Enter API key (masked input)
|
|
106
57
|
|
|
107
|
-
|
|
108
|
-
ccman lang # 显示当前语言设置
|
|
109
|
-
ccman lang set zh # 设置为中文
|
|
110
|
-
ccman lang set en # 设置为英文
|
|
111
|
-
ccman lang set auto # 自动检测系统语言
|
|
112
|
-
ccman lang reset # 重置为首次运行状态
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## 💡 使用示例
|
|
58
|
+
### `ccman list` (alias: `ls`)
|
|
116
59
|
|
|
117
|
-
|
|
60
|
+
List all configured service providers. The currently active provider is marked with `●`.
|
|
118
61
|
|
|
119
62
|
```bash
|
|
120
|
-
|
|
121
|
-
ccman
|
|
122
|
-
|
|
123
|
-
# 添加第三方供应商
|
|
124
|
-
ccman add custom "My Custom API" https://api.custom.com
|
|
125
|
-
|
|
126
|
-
# 切换到自定义供应商
|
|
127
|
-
ccman use custom
|
|
128
|
-
|
|
129
|
-
# 列出所有供应商
|
|
130
|
-
ccman ls
|
|
63
|
+
ccman list
|
|
64
|
+
ccman ls # alias
|
|
131
65
|
```
|
|
132
66
|
|
|
133
|
-
###
|
|
67
|
+
### `ccman use <name>`
|
|
68
|
+
|
|
69
|
+
Switch to a specific provider by name. This command updates both ccman config and the corresponding tool's configuration files.
|
|
134
70
|
|
|
135
71
|
```bash
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
? 您想要执行什么操作?
|
|
139
|
-
❯ 切换供应商
|
|
140
|
-
添加新供应商
|
|
141
|
-
更新供应商
|
|
142
|
-
删除供应商
|
|
143
|
-
显示详细状态
|
|
144
|
-
退出
|
|
145
|
-
|
|
146
|
-
# 选择操作后,按提示完成配置
|
|
147
|
-
# 每次操作后可以选择继续或退出
|
|
72
|
+
ccman use "Anthropic Official"
|
|
148
73
|
```
|
|
149
74
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
### 选择性更新
|
|
155
|
-
|
|
156
|
-
只修改 CCM 管理的配置项:
|
|
157
|
-
- `env.ANTHROPIC_AUTH_TOKEN`
|
|
158
|
-
- `env.ANTHROPIC_BASE_URL`
|
|
159
|
-
- `env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`
|
|
160
|
-
- `env.CLAUDE_CODE_MAX_OUTPUT_TOKENS`
|
|
161
|
-
- `permissions.allow` / `permissions.deny`
|
|
162
|
-
|
|
163
|
-
**保留所有其他用户配置项**(如 `mcpServers`、`model`、`customUserConfig` 等)
|
|
75
|
+
**Updates:**
|
|
76
|
+
- For Codex providers: `~/.codex/config.toml` and `~/.codex/auth.json`
|
|
77
|
+
- For Claude providers: `~/.claude/settings.json`
|
|
164
78
|
|
|
165
|
-
###
|
|
79
|
+
### `ccman current`
|
|
166
80
|
|
|
167
|
-
|
|
81
|
+
Show the currently active provider.
|
|
168
82
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
~/.ccman/
|
|
173
|
-
├── config.json # CCM 主配置
|
|
174
|
-
├── providers/ # 供应商配置目录
|
|
175
|
-
│ ├── anthropic.json # Anthropic 官方
|
|
176
|
-
│ ├── custom.json # 自定义供应商
|
|
177
|
-
│ └── ...
|
|
178
|
-
└── backups/ # 配置备份目录(自动创建)
|
|
83
|
+
```bash
|
|
84
|
+
ccman current
|
|
179
85
|
```
|
|
180
86
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
### 支持的语言
|
|
184
|
-
|
|
185
|
-
- **中文 (zh)** - 完整中文界面
|
|
186
|
-
- **英文 (en)** - 完整英文界面
|
|
187
|
-
- **自动检测 (auto)** - 基于系统 `LANG` 环境变量自动选择
|
|
188
|
-
|
|
189
|
-
### 语言检测逻辑
|
|
190
|
-
|
|
191
|
-
- 英文环境 (`en-*`) → 自动使用英文界面
|
|
192
|
-
- 其他环境(包括 `zh-*`、未设置等) → 自动使用中文界面
|
|
193
|
-
- 用户可随时手动覆盖语言设置
|
|
87
|
+
### `ccman remove <name>` (alias: `rm`)
|
|
194
88
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
- **Node.js** >= 16.0.0
|
|
198
|
-
- **Claude Code** 已安装并支持 settings.json
|
|
199
|
-
- **操作系统**: Linux, macOS, Windows (WSL)
|
|
200
|
-
- **包管理器**: npm, pnpm, yarn(推荐 pnpm)
|
|
201
|
-
|
|
202
|
-
## 🔍 故障排除
|
|
203
|
-
|
|
204
|
-
### 供应商配置未生效
|
|
89
|
+
Remove a provider by name. Requires confirmation before deletion.
|
|
205
90
|
|
|
206
91
|
```bash
|
|
207
|
-
|
|
208
|
-
ccman
|
|
209
|
-
|
|
210
|
-
# 2. 重新应用配置
|
|
211
|
-
ccman use <provider-id>
|
|
212
|
-
|
|
213
|
-
# 3. 检查 Claude 配置文件
|
|
214
|
-
cat ~/.claude/settings.json | grep ANTHROPIC
|
|
92
|
+
ccman remove "Provider Name"
|
|
93
|
+
ccman rm "Provider Name" # alias
|
|
215
94
|
```
|
|
216
95
|
|
|
217
|
-
###
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
# 查看当前语言设置
|
|
221
|
-
ccman lang
|
|
222
|
-
|
|
223
|
-
# 强制设置为中文
|
|
224
|
-
ccman lang set zh
|
|
225
|
-
|
|
226
|
-
# 重置到首次运行状态(重新选择语言)
|
|
227
|
-
ccman lang reset
|
|
228
|
-
ccman
|
|
229
|
-
```
|
|
96
|
+
### `ccman edit <name>`
|
|
230
97
|
|
|
231
|
-
|
|
98
|
+
Edit an existing provider with interactive prompts.
|
|
232
99
|
|
|
233
100
|
```bash
|
|
234
|
-
|
|
235
|
-
ccman clear
|
|
236
|
-
|
|
237
|
-
# 重新开始配置
|
|
238
|
-
ccman
|
|
101
|
+
ccman edit "Provider Name"
|
|
239
102
|
```
|
|
240
103
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
- [脚本使用指南](./docs/scripts-guide.md)
|
|
247
|
-
|
|
248
|
-
## 🤝 贡献
|
|
249
|
-
|
|
250
|
-
我们欢迎各种形式的贡献!
|
|
104
|
+
**Editable fields:**
|
|
105
|
+
- Provider name
|
|
106
|
+
- Provider type (Codex/Claude Code)
|
|
107
|
+
- Base URL
|
|
108
|
+
- API Key (optional)
|
|
251
109
|
|
|
252
|
-
###
|
|
110
|
+
### `ccman clone <source> <new-name>`
|
|
253
111
|
|
|
254
|
-
|
|
255
|
-
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
|
256
|
-
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
|
257
|
-
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
|
258
|
-
5. 提交 Pull Request
|
|
112
|
+
Clone an existing provider with a new name. Useful for creating variants of existing configurations.
|
|
259
113
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
114
|
+
```bash
|
|
115
|
+
ccman clone "Anthropic Official" "Anthropic Dev"
|
|
116
|
+
```
|
|
263
117
|
|
|
264
|
-
##
|
|
118
|
+
## Configuration
|
|
119
|
+
|
|
120
|
+
All configuration is stored in `~/.ccman/config.json`:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"providers": [
|
|
125
|
+
{
|
|
126
|
+
"id": "claude-1234567890-abc123",
|
|
127
|
+
"name": "Anthropic Official",
|
|
128
|
+
"type": "claude",
|
|
129
|
+
"baseUrl": "https://api.anthropic.com",
|
|
130
|
+
"apiKey": "sk-ant-...",
|
|
131
|
+
"createdAt": 1234567890,
|
|
132
|
+
"lastUsedAt": 1234567900
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"currentProvider": "claude-1234567890-abc123"
|
|
136
|
+
}
|
|
137
|
+
```
|
|
265
138
|
|
|
266
|
-
|
|
139
|
+
## Preset Templates
|
|
267
140
|
|
|
268
|
-
|
|
141
|
+
The CLI includes built-in preset templates:
|
|
269
142
|
|
|
270
|
-
**
|
|
271
|
-
-
|
|
272
|
-
- 🐙 GitHub: [@2ue](https://github.com/2ue)
|
|
143
|
+
- **Anthropic Official** (Claude Code) - Official Anthropic Claude API
|
|
144
|
+
- **PackyCode** (Codex) - PackyCode Codex API service
|
|
273
145
|
|
|
274
|
-
##
|
|
146
|
+
## Error Handling
|
|
275
147
|
|
|
276
|
-
|
|
148
|
+
The CLI provides friendly error messages with suggestions:
|
|
277
149
|
|
|
278
|
-
|
|
279
|
-
-
|
|
280
|
-
-
|
|
281
|
-
- [Inquirer.js](https://github.com/SBoudrias/Inquirer.js)
|
|
282
|
-
- [Chalk](https://github.com/chalk/chalk)
|
|
150
|
+
- **Configuration not found**: Run `ccman init` first
|
|
151
|
+
- **Provider not found**: Check available providers with `ccman list`
|
|
152
|
+
- **Invalid configuration**: Detailed validation errors with fix suggestions
|
|
283
153
|
|
|
284
|
-
|
|
154
|
+
## Development
|
|
285
155
|
|
|
286
|
-
|
|
156
|
+
```bash
|
|
157
|
+
# Install dependencies
|
|
158
|
+
pnpm install
|
|
287
159
|
|
|
288
|
-
|
|
160
|
+
# Run in development mode
|
|
161
|
+
pnpm dev <command>
|
|
289
162
|
|
|
290
|
-
|
|
163
|
+
# Example
|
|
164
|
+
pnpm dev list
|
|
165
|
+
pnpm dev add
|
|
166
|
+
```
|
|
291
167
|
|
|
292
|
-
|
|
168
|
+
## License
|
|
293
169
|
|
|
294
|
-
|
|
170
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkIjD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { createClaudeCodeManager, CLAUDECODE_PRESETS } from '@ccman/core';
|
|
4
|
+
import { promptProviderForm } from '../../interactive.js';
|
|
5
|
+
export function addCommand(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('add')
|
|
8
|
+
.description('添加新的 Claude Code 服务商(交互式)')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
try {
|
|
11
|
+
const manager = createClaudeCodeManager();
|
|
12
|
+
console.log(chalk.bold('\n📝 添加 Claude Code 服务商\n'));
|
|
13
|
+
// 询问是否使用预置服务商
|
|
14
|
+
const { usePreset } = await inquirer.prompt([
|
|
15
|
+
{
|
|
16
|
+
type: 'list',
|
|
17
|
+
name: 'usePreset',
|
|
18
|
+
message: '选择配置来源:',
|
|
19
|
+
choices: [
|
|
20
|
+
{ name: '📦 使用预置服务商', value: true },
|
|
21
|
+
{ name: '✏️ 自定义配置', value: false },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
]);
|
|
25
|
+
let name;
|
|
26
|
+
let baseUrl;
|
|
27
|
+
let apiKey;
|
|
28
|
+
if (usePreset) {
|
|
29
|
+
// 使用预置服务商
|
|
30
|
+
const { presetName } = await inquirer.prompt([
|
|
31
|
+
{
|
|
32
|
+
type: 'list',
|
|
33
|
+
name: 'presetName',
|
|
34
|
+
message: '选择预置服务商:',
|
|
35
|
+
choices: CLAUDECODE_PRESETS.map((p) => ({
|
|
36
|
+
name: `${p.name} - ${p.description}`,
|
|
37
|
+
value: p.name,
|
|
38
|
+
})),
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
const preset = CLAUDECODE_PRESETS.find((p) => p.name === presetName);
|
|
42
|
+
console.log(chalk.blue(`\n使用预设: ${preset.name} - ${preset.description}\n`));
|
|
43
|
+
// 允许修改所有字段
|
|
44
|
+
const input = await promptProviderForm({
|
|
45
|
+
name: preset.name,
|
|
46
|
+
baseUrl: preset.baseUrl,
|
|
47
|
+
apiKey: '',
|
|
48
|
+
});
|
|
49
|
+
name = input.name;
|
|
50
|
+
baseUrl = input.baseUrl;
|
|
51
|
+
apiKey = input.apiKey;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// 自定义配置
|
|
55
|
+
const answers = await inquirer.prompt([
|
|
56
|
+
{
|
|
57
|
+
type: 'input',
|
|
58
|
+
name: 'name',
|
|
59
|
+
message: '服务商名称:',
|
|
60
|
+
validate: (value) => {
|
|
61
|
+
if (!value)
|
|
62
|
+
return '名称不能为空';
|
|
63
|
+
return true;
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'input',
|
|
68
|
+
name: 'baseUrl',
|
|
69
|
+
message: 'API 地址:',
|
|
70
|
+
validate: (value) => {
|
|
71
|
+
if (!value)
|
|
72
|
+
return 'API 地址不能为空';
|
|
73
|
+
if (!value.startsWith('http://') && !value.startsWith('https://')) {
|
|
74
|
+
return 'API 地址必须以 http:// 或 https:// 开头';
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'password',
|
|
81
|
+
name: 'apiKey',
|
|
82
|
+
message: 'API 密钥:',
|
|
83
|
+
mask: '*',
|
|
84
|
+
validate: (value) => {
|
|
85
|
+
if (!value)
|
|
86
|
+
return 'API 密钥不能为空';
|
|
87
|
+
return true;
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
name = answers.name;
|
|
92
|
+
baseUrl = answers.baseUrl;
|
|
93
|
+
apiKey = answers.apiKey;
|
|
94
|
+
}
|
|
95
|
+
const provider = manager.add({ name, baseUrl, apiKey });
|
|
96
|
+
console.log();
|
|
97
|
+
console.log(chalk.green('✅ 添加成功'));
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(` ${chalk.bold(provider.name)} ${chalk.blue('[Claude Code]')}`);
|
|
100
|
+
console.log(` ${chalk.gray(`ID: ${provider.id}`)}`);
|
|
101
|
+
console.log(` ${chalk.gray(`URL: ${provider.baseUrl}`)}`);
|
|
102
|
+
console.log();
|
|
103
|
+
// 询问是否立即切换
|
|
104
|
+
const { switchNow } = await inquirer.prompt([
|
|
105
|
+
{
|
|
106
|
+
type: 'confirm',
|
|
107
|
+
name: 'switchNow',
|
|
108
|
+
message: '是否立即切换到此服务商?',
|
|
109
|
+
default: true,
|
|
110
|
+
},
|
|
111
|
+
]);
|
|
112
|
+
if (switchNow) {
|
|
113
|
+
manager.switch(provider.id);
|
|
114
|
+
console.log(chalk.green('✅ 已切换到新服务商'));
|
|
115
|
+
console.log();
|
|
116
|
+
console.log(chalk.gray('配置已更新:'));
|
|
117
|
+
console.log(chalk.gray(' - ~/.claude/settings.json'));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(chalk.blue('💡 稍后切换:') + chalk.white(` ccman cc use "${provider.name}"`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/claudecode/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuEnD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { createClaudeCodeManager, ProviderNotFoundError } from '@ccman/core';
|
|
4
|
+
import { promptProviderForm } from '../../interactive.js';
|
|
5
|
+
export function cloneCommand(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('clone [source-name] [new-name]')
|
|
8
|
+
.description('克隆 Claude Code 服务商')
|
|
9
|
+
.action(async (sourceName, newName) => {
|
|
10
|
+
try {
|
|
11
|
+
const manager = createClaudeCodeManager();
|
|
12
|
+
const providers = manager.list();
|
|
13
|
+
if (providers.length === 0) {
|
|
14
|
+
console.log(chalk.yellow('\n⚠️ 暂无 Claude Code 服务商\n'));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
let sourceId;
|
|
18
|
+
if (sourceName) {
|
|
19
|
+
const provider = manager.findByName(sourceName);
|
|
20
|
+
if (!provider) {
|
|
21
|
+
throw new ProviderNotFoundError(sourceName);
|
|
22
|
+
}
|
|
23
|
+
sourceId = provider.id;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// 交互式选择源
|
|
27
|
+
const { selectedId } = await inquirer.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: 'list',
|
|
30
|
+
name: 'selectedId',
|
|
31
|
+
message: '选择要克隆的服务商:',
|
|
32
|
+
choices: providers.map((p) => ({
|
|
33
|
+
name: `${p.name} - ${p.baseUrl}`,
|
|
34
|
+
value: p.id,
|
|
35
|
+
})),
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
sourceId = selectedId;
|
|
39
|
+
}
|
|
40
|
+
// 获取源 provider
|
|
41
|
+
const source = manager.get(sourceId);
|
|
42
|
+
let cloned;
|
|
43
|
+
if (newName) {
|
|
44
|
+
// 非交互模式:只改名,其他字段完全复制(向后兼容)
|
|
45
|
+
cloned = manager.clone(sourceId, newName);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// 交互模式:允许修改所有字段
|
|
49
|
+
console.log(chalk.blue(`\n克隆自: ${source.name}\n`));
|
|
50
|
+
const input = await promptProviderForm({
|
|
51
|
+
name: `${source.name}(副本)`,
|
|
52
|
+
baseUrl: source.baseUrl,
|
|
53
|
+
apiKey: source.apiKey,
|
|
54
|
+
});
|
|
55
|
+
cloned = manager.add(input);
|
|
56
|
+
}
|
|
57
|
+
console.log();
|
|
58
|
+
console.log(chalk.green('✅ 克隆成功'));
|
|
59
|
+
console.log();
|
|
60
|
+
console.log(` ${chalk.bold(cloned.name)} ${chalk.blue('[Claude Code]')}`);
|
|
61
|
+
console.log(` ${chalk.gray(`ID: ${cloned.id}`)}`);
|
|
62
|
+
console.log(` ${chalk.gray(`URL: ${cloned.baseUrl}`)}`);
|
|
63
|
+
console.log();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/commands/claudecode/clone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/current.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+BrD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createClaudeCodeManager } from '@ccman/core';
|
|
3
|
+
export function currentCommand(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('current')
|
|
6
|
+
.description('显示当前使用的 Claude Code 服务商')
|
|
7
|
+
.action(async () => {
|
|
8
|
+
try {
|
|
9
|
+
const manager = createClaudeCodeManager();
|
|
10
|
+
const current = manager.getCurrent();
|
|
11
|
+
if (!current) {
|
|
12
|
+
console.log(chalk.yellow('\n⚠️ 未选择任何 Claude Code 服务商\n'));
|
|
13
|
+
console.log(chalk.blue('💡 选择服务商:') + chalk.white(' ccman cc use\n'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.bold('\n📍 当前 Claude Code 服务商\n'));
|
|
17
|
+
console.log(` ${chalk.green.bold(current.name)}`);
|
|
18
|
+
console.log(` ${chalk.gray(`ID: ${current.id}`)}`);
|
|
19
|
+
console.log(` ${chalk.gray(`URL: ${current.baseUrl}`)}`);
|
|
20
|
+
if (current.lastUsedAt) {
|
|
21
|
+
const date = new Date(current.lastUsedAt).toLocaleString('zh-CN');
|
|
22
|
+
console.log(` ${chalk.gray(`最后使用: ${date}`)}`);
|
|
23
|
+
}
|
|
24
|
+
console.log();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=current.js.map
|