@minniexcode/codex-switch 0.0.10 → 0.0.11
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.AI.md +52 -15
- package/README.CN.md +81 -48
- package/README.md +75 -34
- package/dist/app/add-provider.js +29 -15
- package/dist/app/bridge.js +15 -14
- package/dist/app/edit-provider.js +1 -1
- package/dist/app/get-status.js +13 -6
- package/dist/app/import-providers.js +1 -1
- package/dist/app/init-codex.js +13 -14
- package/dist/app/remove-provider.js +1 -1
- package/dist/app/run-doctor.js +12 -5
- package/dist/app/run-mutation.js +3 -2
- package/dist/app/setup-codex.js +3 -1
- package/dist/app/switch-provider.js +11 -13
- package/dist/cli.js +34 -2
- package/dist/commands/args.js +2 -2
- package/dist/commands/dispatch.js +40 -0
- package/dist/commands/handlers.js +121 -156
- package/dist/commands/help.js +2 -0
- package/dist/commands/registry.js +28 -9
- package/dist/domain/backups.js +4 -4
- package/dist/domain/config.js +110 -5
- package/dist/domain/providers.js +12 -0
- package/dist/domain/runtime-state.js +81 -5
- package/dist/runtime/copilot-adapter.js +12 -12
- package/dist/runtime/copilot-bridge.js +392 -44
- package/dist/runtime/copilot-cli.js +84 -12
- package/dist/runtime/copilot-installer.js +10 -9
- package/dist/runtime/copilot-sdk-loader.js +5 -5
- package/dist/storage/backup-repo.js +4 -4
- package/dist/storage/codex-paths.js +34 -8
- package/dist/storage/lock-repo.js +2 -4
- package/dist/storage/runtime-state-repo.js +14 -13
- package/dist/storage/tool-config-repo.js +111 -0
- package/docs/Design/codex-switch-v0.0.11-design.md +824 -0
- package/docs/PRD/codex-switch-prd-v0.0.11.md +577 -0
- package/docs/cli-usage.md +166 -295
- package/package.json +1 -1
package/docs/cli-usage.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# codex-switch CLI Usage
|
|
2
2
|
|
|
3
|
-
本文档详细介绍 `codex-switch` 在 `0.0.
|
|
3
|
+
本文档详细介绍 `codex-switch` 在 `0.0.11` 版本中的命令、参数、交互规则和典型使用方式。
|
|
4
4
|
|
|
5
5
|
可执行命令名:
|
|
6
6
|
|
|
@@ -10,22 +10,35 @@ codexs
|
|
|
10
10
|
|
|
11
11
|
## 1. 概览
|
|
12
12
|
|
|
13
|
-
`codex-switch`
|
|
13
|
+
从 `0.0.11` 开始,`codex-switch` 使用双路径模型:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
- tool home:保存 `codex-switch` 自己的管理态
|
|
16
|
+
- target Codex runtime:保存目标 Codex 的 `config.toml` 和 `auth.json`
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
核心设计:
|
|
19
|
+
|
|
20
|
+
1. 本地优先,不依赖远端服务保存管理态
|
|
18
21
|
2. 写入前先备份,异常时支持回滚
|
|
19
22
|
3. 同时兼容人类终端使用和脚本/Agent 自动化调用
|
|
23
|
+
4. 对 GitHub Copilot 这类交互式上游登录提供独立命令入口
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
tool home 默认路径:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
~/.config/codex-switch/
|
|
29
|
+
codex-switch.json
|
|
30
|
+
providers.json
|
|
31
|
+
backups/
|
|
32
|
+
runtime/
|
|
33
|
+
runtimes/
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
target Codex runtime 默认路径:
|
|
22
37
|
|
|
23
38
|
```text
|
|
24
39
|
~/.codex/
|
|
25
40
|
config.toml
|
|
26
41
|
auth.json
|
|
27
|
-
providers.json
|
|
28
|
-
backups/
|
|
29
42
|
```
|
|
30
43
|
|
|
31
44
|
## 2. 安装与入口
|
|
@@ -70,11 +83,23 @@ codexs --version
|
|
|
70
83
|
说明:
|
|
71
84
|
|
|
72
85
|
- `--json`:输出标准 JSON 结果,并禁用所有交互 prompt
|
|
73
|
-
- `--codex-dir <path
|
|
86
|
+
- `--codex-dir <path>`:指定目标 Codex runtime 目录
|
|
74
87
|
- `--help`:查看命令帮助
|
|
75
88
|
- `--version`:输出当前 CLI 版本
|
|
76
89
|
|
|
77
|
-
### 3.2
|
|
90
|
+
### 3.2 环境变量
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
CODEXS_HOME
|
|
94
|
+
CODEXS_CODEX_DIR
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
说明:
|
|
98
|
+
|
|
99
|
+
- `CODEXS_HOME`:覆盖默认 tool home 目录
|
|
100
|
+
- `CODEXS_CODEX_DIR`:在未传 `--codex-dir` 时提供默认 Codex runtime 目录
|
|
101
|
+
|
|
102
|
+
### 3.3 交互规则
|
|
78
103
|
|
|
79
104
|
CLI 的交互行为遵循以下规则:
|
|
80
105
|
|
|
@@ -82,8 +107,10 @@ CLI 的交互行为遵循以下规则:
|
|
|
82
107
|
- 只要传入 `--json`,就绝不会出现 prompt
|
|
83
108
|
- 面向脚本或 CI 的调用应显式传参,并优先使用 `--json`
|
|
84
109
|
- 某些危险操作在交互模式下会确认,在非交互模式下则要求显式参数
|
|
110
|
+
- `login copilot` 必须在真实 TTY 中运行
|
|
111
|
+
- `migrate` 当前仍保留交互式 adopt 契约
|
|
85
112
|
|
|
86
|
-
### 3.
|
|
113
|
+
### 3.4 备份与回滚
|
|
87
114
|
|
|
88
115
|
所有受管理的写操作都会先备份相关文件,再执行写入。
|
|
89
116
|
|
|
@@ -93,6 +120,7 @@ CLI 的交互行为遵循以下规则:
|
|
|
93
120
|
- `add`
|
|
94
121
|
- `edit`
|
|
95
122
|
- `switch`
|
|
123
|
+
- `bridge start`
|
|
96
124
|
- `remove`
|
|
97
125
|
- `import`
|
|
98
126
|
|
|
@@ -113,18 +141,6 @@ codexs rollback <backup-id>
|
|
|
113
141
|
codexs list [--json] [--codex-dir <path>]
|
|
114
142
|
```
|
|
115
143
|
|
|
116
|
-
示例:
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
codexs list
|
|
120
|
-
codexs list --json
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
适用场景:
|
|
124
|
-
|
|
125
|
-
- 查看当前已管理 provider 列表
|
|
126
|
-
- 给后续 `switch`、`show`、`edit`、`remove` 提供候选名称
|
|
127
|
-
|
|
128
144
|
### 4.2 `show`
|
|
129
145
|
|
|
130
146
|
查看单个 provider 的完整记录。
|
|
@@ -133,17 +149,10 @@ codexs list --json
|
|
|
133
149
|
codexs show <provider> [--json] [--codex-dir <path>]
|
|
134
150
|
```
|
|
135
151
|
|
|
136
|
-
示例:
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
codexs show packycode
|
|
140
|
-
codexs show packycode --json
|
|
141
|
-
```
|
|
142
|
-
|
|
143
152
|
说明:
|
|
144
153
|
|
|
145
|
-
-
|
|
146
|
-
- `--json`
|
|
154
|
+
- 普通文本输出默认隐藏 `apiKey`
|
|
155
|
+
- `--json` 模式会返回完整 provider 数据
|
|
147
156
|
|
|
148
157
|
### 4.3 `current`
|
|
149
158
|
|
|
@@ -153,51 +162,57 @@ codexs show packycode --json
|
|
|
153
162
|
codexs current [--json] [--codex-dir <path>]
|
|
154
163
|
```
|
|
155
164
|
|
|
156
|
-
|
|
165
|
+
### 4.4 `status`
|
|
166
|
+
|
|
167
|
+
输出目标 Codex runtime 的快速状态摘要。
|
|
157
168
|
|
|
158
169
|
```bash
|
|
159
|
-
codexs
|
|
160
|
-
codexs current --json
|
|
170
|
+
codexs status [--json] [--codex-dir <path>]
|
|
161
171
|
```
|
|
162
172
|
|
|
163
|
-
|
|
173
|
+
通常会覆盖这些信息:
|
|
164
174
|
|
|
165
|
-
-
|
|
175
|
+
- 关键文件是否存在
|
|
176
|
+
- 当前激活 profile 是什么
|
|
177
|
+
- 当前运行态是否能在受管理 provider 映射中找到
|
|
178
|
+
- Copilot SDK 是否已安装
|
|
179
|
+
- Copilot bridge runtime state 是否健康
|
|
166
180
|
|
|
167
|
-
### 4.
|
|
181
|
+
### 4.5 `config show`
|
|
168
182
|
|
|
169
|
-
|
|
183
|
+
查看结构化 config profile 视图。
|
|
170
184
|
|
|
171
185
|
```bash
|
|
172
|
-
codexs
|
|
186
|
+
codexs config show [profile] [--json] [--codex-dir <path>]
|
|
173
187
|
```
|
|
174
188
|
|
|
175
|
-
|
|
189
|
+
说明:
|
|
176
190
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
codexs status --json
|
|
180
|
-
```
|
|
191
|
+
- 不传 `[profile]` 时返回全部可识别 profile
|
|
192
|
+
- 可同时看到 managed、unmanaged 和 orphaned 引用
|
|
181
193
|
|
|
182
|
-
|
|
194
|
+
### 4.6 `config list-profiles`
|
|
183
195
|
|
|
184
|
-
|
|
185
|
-
- 当前激活 profile 是什么
|
|
186
|
-
- 当前运行态是否能在受管理的 provider 映射中找到
|
|
196
|
+
列出可识别的 config profile 名称及其受管态提示。
|
|
187
197
|
|
|
188
|
-
|
|
198
|
+
```bash
|
|
199
|
+
codexs config list-profiles [--json] [--codex-dir <path>]
|
|
200
|
+
```
|
|
189
201
|
|
|
190
|
-
|
|
202
|
+
### 4.7 `bridge status`
|
|
203
|
+
|
|
204
|
+
查看当前受管 Copilot bridge 的运行状态。
|
|
191
205
|
|
|
192
206
|
```bash
|
|
193
|
-
codexs
|
|
207
|
+
codexs bridge status [provider] [--json] [--codex-dir <path>]
|
|
194
208
|
```
|
|
195
209
|
|
|
196
|
-
|
|
210
|
+
### 4.8 `backups list`
|
|
211
|
+
|
|
212
|
+
查看历史备份清单。
|
|
197
213
|
|
|
198
214
|
```bash
|
|
199
|
-
codexs backups list
|
|
200
|
-
codexs backups list --json
|
|
215
|
+
codexs backups list [--json] [--codex-dir <path>]
|
|
201
216
|
```
|
|
202
217
|
|
|
203
218
|
说明:
|
|
@@ -209,39 +224,39 @@ codexs backups list --json
|
|
|
209
224
|
|
|
210
225
|
### 5.1 `init`
|
|
211
226
|
|
|
212
|
-
|
|
227
|
+
初始化 codex-switch tool home 和 registry 文件。
|
|
213
228
|
|
|
214
229
|
```bash
|
|
215
230
|
codexs init [--json] [--codex-dir <path>]
|
|
216
231
|
```
|
|
217
232
|
|
|
218
|
-
示例:
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
codexs init
|
|
222
|
-
codexs init --json
|
|
223
|
-
codexs init --codex-dir ./.tmp-codex
|
|
224
|
-
```
|
|
225
|
-
|
|
226
233
|
行为说明:
|
|
227
234
|
|
|
228
235
|
- 不依赖 `codex` 可执行文件
|
|
229
|
-
-
|
|
236
|
+
- 不要求目标 `config.toml` 或 `auth.json` 已存在
|
|
237
|
+
- `codex-switch.json` 不存在时创建
|
|
230
238
|
- `providers.json` 不存在时创建空 registry:`{ "providers": {} }`
|
|
231
|
-
- `
|
|
232
|
-
-
|
|
239
|
+
- 若显式传入 `--codex-dir` 且 `codex-switch.json` 尚不存在,`init` 会把它持久化为 `defaultCodexDir`
|
|
240
|
+
- 成功结果围绕 tool home 返回,不再承诺旧的 `createdCodexDir`、`configExists`、`authExists` 等字段
|
|
233
241
|
|
|
234
|
-
|
|
242
|
+
### 5.2 `login copilot`
|
|
243
|
+
|
|
244
|
+
完成 GitHub Copilot 上游安装与登录就绪检查。
|
|
235
245
|
|
|
236
|
-
|
|
237
|
-
|
|
246
|
+
```bash
|
|
247
|
+
codexs login copilot
|
|
248
|
+
codexs login github-copilot
|
|
249
|
+
```
|
|
238
250
|
|
|
239
|
-
|
|
251
|
+
行为说明:
|
|
240
252
|
|
|
241
|
-
-
|
|
242
|
-
-
|
|
253
|
+
- 当前支持 `copilot` 与 `github-copilot` 两种拼写
|
|
254
|
+
- 若本地 Copilot SDK runtime 未安装,会先确认是否安装
|
|
255
|
+
- 若登录尚未就绪,会调用官方 `copilot login`,完成后做一次 recheck
|
|
256
|
+
- 该命令要求真实 TTY,不支持 `--json`
|
|
257
|
+
- 登录状态是共享的;切换 GitHub 账号会影响所有 Copilot provider
|
|
243
258
|
|
|
244
|
-
### 5.
|
|
259
|
+
### 5.3 `migrate`
|
|
245
260
|
|
|
246
261
|
从现有 `config.toml` adopt unmanaged profiles,并写入受管理的 `providers.json`。
|
|
247
262
|
|
|
@@ -249,33 +264,15 @@ codexs init --codex-dir ./.tmp-codex
|
|
|
249
264
|
codexs migrate [--json] [--codex-dir <path>] [--merge|--overwrite]
|
|
250
265
|
```
|
|
251
266
|
|
|
252
|
-
示例:
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
codexs migrate
|
|
256
|
-
codexs migrate --overwrite --json
|
|
257
|
-
codexs migrate --merge --codex-dir ./.tmp-codex
|
|
258
|
-
```
|
|
259
|
-
|
|
260
267
|
行为说明:
|
|
261
268
|
|
|
262
269
|
- 读取 `config.toml` 中已有 profile
|
|
263
|
-
- 仅 adopt 已具备 `model`、`model_provider` 且能解析到匹配 `
|
|
270
|
+
- 仅 adopt 已具备 `model`、`model_provider` 且能解析到匹配 `base_url` 的 unmanaged profile
|
|
264
271
|
- 收集每个 profile 对应的 provider 记录
|
|
265
|
-
-
|
|
266
|
-
|
|
267
|
-
交互模式:
|
|
268
|
-
|
|
269
|
-
- 如果 `providers.json` 已存在,会让你选择 `merge`、`overwrite` 或取消
|
|
270
|
-
- profile 选择和 provider 细节收集仍然只在 TTY 中进行
|
|
272
|
+
- 保持受管备份、锁和 post-run `doctor` 流程
|
|
273
|
+
- 非交互模式下,profile 选择和 provider 细节收集仍不会自动化展开
|
|
271
274
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
- `providers.json` 已存在时,必须显式传入 `--merge` 或 `--overwrite`
|
|
275
|
-
- `--json` 模式下不会进入任何引导式输入
|
|
276
|
-
- 由于 adopt profile 选择和 provider secret 收集仍然是交互契约,当前版本会直接失败
|
|
277
|
-
|
|
278
|
-
### 5.3 `setup`
|
|
275
|
+
### 5.4 `setup`
|
|
279
276
|
|
|
280
277
|
`setup` 已弃用,不再执行实际初始化或迁移工作。
|
|
281
278
|
|
|
@@ -283,104 +280,49 @@ codexs migrate --merge --codex-dir ./.tmp-codex
|
|
|
283
280
|
codexs setup
|
|
284
281
|
```
|
|
285
282
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
- 该命令现在返回 `COMMAND_DEPRECATED`
|
|
289
|
-
- 错误详情中包含 `replacements: ["init", "migrate"]`
|
|
290
|
-
- 应改用 `codexs init` 或 `codexs migrate`
|
|
291
|
-
|
|
292
|
-
### 5.4 `add`
|
|
283
|
+
### 5.5 `add`
|
|
293
284
|
|
|
294
|
-
新增一个 provider。`add`
|
|
285
|
+
新增一个 provider。`add` 同时支持 direct provider 和 Copilot bridge provider。
|
|
295
286
|
|
|
296
287
|
```bash
|
|
297
288
|
codexs add <provider> --profile <name> --api-key <key> [--base-url <url>] [--note <text>] [--tag <tag> ...]
|
|
298
|
-
codexs add <provider> --copilot --profile <name> [--bridge-host <host>] [--bridge-port <port>] [--bridge-api-key <secret>]
|
|
289
|
+
codexs add <provider> --copilot --profile <name> [--bridge-host <host>] [--bridge-port <port>] [--bridge-api-key <secret>]
|
|
290
|
+
codexs add <provider> --profile <name> --api-key <key> --create-profile --model <name> --base-url <url>
|
|
299
291
|
codexs add
|
|
300
292
|
```
|
|
301
293
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
codexs add packycode --profile packycode --api-key sk-xxx
|
|
306
|
-
codexs add packycode --profile packycode --api-key sk-xxx --tag paid --tag daily
|
|
307
|
-
codexs add
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
Copilot provider 示例:
|
|
311
|
-
|
|
312
|
-
```bash
|
|
313
|
-
codexs add copilot-main --copilot --profile copilot-main --install-copilot-sdk
|
|
314
|
-
codexs add copilot-main --copilot --profile copilot-main --bridge-port 41415 --bridge-api-key local-secret
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
direct provider 字段说明:
|
|
318
|
-
|
|
319
|
-
- `provider`:provider 名称,也是后续 `switch/show/edit/remove` 的标识
|
|
320
|
-
- `--profile`:写入到 `config.toml` 的 profile 名称
|
|
321
|
-
- `--api-key`:provider API key
|
|
322
|
-
- `--base-url`:可选的 provider 元数据,不会写回 `[profiles.*]`
|
|
323
|
-
- `--note`:备注
|
|
324
|
-
- `--tag`:标签,可重复传多次
|
|
325
|
-
|
|
326
|
-
Copilot provider 字段说明:
|
|
294
|
+
说明:
|
|
327
295
|
|
|
328
|
-
-
|
|
329
|
-
- `--profile
|
|
330
|
-
-
|
|
331
|
-
- `--
|
|
332
|
-
- `--
|
|
333
|
-
-
|
|
334
|
-
- `--install-copilot-sdk
|
|
296
|
+
- direct provider 必须提供 `provider`、`profile`、`apiKey`
|
|
297
|
+
- `--create-profile` 可在 profile 缺失时一并创建目标 profile
|
|
298
|
+
- direct provider 创建新 profile 时需要同时给出 `--model` 与 `--base-url`
|
|
299
|
+
- Copilot provider 创建新 profile 时需要 `--create-profile` 与 `--model`
|
|
300
|
+
- `--copilot` 下禁止 `--api-key`,应使用 `--bridge-api-key`
|
|
301
|
+
- `add --copilot` 不再负责安装 SDK 或触发登录,应先执行 `codexs login copilot`
|
|
302
|
+
- `--install-copilot-sdk` 现在只保留为 rejected compatibility flag
|
|
335
303
|
|
|
336
304
|
交互模式:
|
|
337
305
|
|
|
338
|
-
- direct provider
|
|
339
|
-
-
|
|
340
|
-
-
|
|
341
|
-
- Copilot provider 的专用输入流只采集 provider/profile/model、note/tags 和 bridge 参数
|
|
342
|
-
- Copilot provider 不会提示 `API key`、`Confirm API key` 或输出 `API key is required.`
|
|
343
|
-
- 若官方 `copilot login` 无法启动,会回退为人工提示:运行 `copilot login`,完成 GitHub 官方 device/browser 流程后执行一次明确 recheck
|
|
344
|
-
- `add --copilot --json` 永远不会启动登录流程;若 auth 未就绪,直接返回 `COPILOT_AUTH_REQUIRED`,并提示手动运行 `copilot login`
|
|
345
|
-
|
|
346
|
-
非交互模式:
|
|
306
|
+
- direct provider 缺少必填项时会在 TTY 中补问
|
|
307
|
+
- Copilot provider 的交互流不会要求 direct API key
|
|
308
|
+
- tags 交互使用 preset multi-select
|
|
347
309
|
|
|
348
|
-
|
|
349
|
-
- `add --copilot` 必须显式传入 `<provider>` 和 `--profile`
|
|
350
|
-
- `add --copilot --json` 不会进入任何 prompt;若 SDK 缺失且未传 `--install-copilot-sdk`,直接失败;若 auth 未就绪,也直接返回 `COPILOT_AUTH_REQUIRED`
|
|
351
|
-
|
|
352
|
-
### 5.5 `edit`
|
|
310
|
+
### 5.6 `edit`
|
|
353
311
|
|
|
354
312
|
编辑单个 provider 的字段。
|
|
355
313
|
|
|
356
314
|
```bash
|
|
357
315
|
codexs edit <provider> [--profile <name>] [--api-key <key>] [--base-url <url>] [--note <text>] [--tag <tag> ...] [--json] [--codex-dir <path>]
|
|
316
|
+
codexs edit <provider> --profile <name> --create-profile --model <name> --base-url <url>
|
|
358
317
|
```
|
|
359
318
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
codexs edit packycode --note primary
|
|
364
|
-
codexs edit packycode --api-key sk-new --base-url https://example.com/v1
|
|
365
|
-
codexs edit packycode --tag daily --tag paid
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
行为说明:
|
|
319
|
+
说明:
|
|
369
320
|
|
|
370
|
-
-
|
|
371
|
-
- 未传入的字段保持不变
|
|
321
|
+
- 只更新显式传入的字段
|
|
372
322
|
- `--tag` 会替换整组标签,而不是追加单个 tag
|
|
373
|
-
-
|
|
374
|
-
|
|
375
|
-
交互模式:
|
|
376
|
-
|
|
377
|
-
- 如果没有传任何可编辑字段,TTY 下会进入交互编辑
|
|
378
|
-
|
|
379
|
-
非交互模式:
|
|
323
|
+
- 当目标 profile 不存在时,可配合 `--create-profile`、`--model`、`--base-url` 完成重绑定
|
|
380
324
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
### 5.6 `switch`
|
|
325
|
+
### 5.7 `switch`
|
|
384
326
|
|
|
385
327
|
切换当前使用的 provider/profile。
|
|
386
328
|
|
|
@@ -388,88 +330,63 @@ codexs edit packycode --tag daily --tag paid
|
|
|
388
330
|
codexs switch <provider> [--json] [--codex-dir <path>]
|
|
389
331
|
```
|
|
390
332
|
|
|
391
|
-
示例:
|
|
392
|
-
|
|
393
|
-
```bash
|
|
394
|
-
codexs switch freemodel
|
|
395
|
-
codexs switch freemodel --json
|
|
396
|
-
codexs switch
|
|
397
|
-
```
|
|
398
|
-
|
|
399
333
|
行为说明:
|
|
400
334
|
|
|
401
335
|
- 根据 `providers.json` 找到目标 provider
|
|
402
|
-
-
|
|
403
|
-
-
|
|
404
|
-
- Copilot bridge provider
|
|
405
|
-
-
|
|
336
|
+
- direct provider 会切换 active profile,并将 `auth.json` 重写为 `auth_mode=apikey` 与 `OPENAI_API_KEY=<provider.apiKey>`
|
|
337
|
+
- Copilot bridge provider 会维护本地 bridge 路由,并将认证投影写到本地 bridge secret
|
|
338
|
+
- Copilot bridge provider 会在切换前检查 SDK 和上游登录状态
|
|
339
|
+
- 切换前会备份 `config.toml` 与 `auth.json`
|
|
406
340
|
|
|
407
|
-
|
|
341
|
+
### 5.8 `bridge start`
|
|
408
342
|
|
|
409
|
-
|
|
410
|
-
- 如果已经传了 `<provider>`,则直接执行,不再额外确认
|
|
411
|
-
|
|
412
|
-
### 5.7 `remove`
|
|
413
|
-
|
|
414
|
-
删除一个 provider 记录。
|
|
415
|
-
|
|
416
|
-
```bash
|
|
417
|
-
codexs remove <provider> [--force] [--json] [--codex-dir <path>]
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
示例:
|
|
343
|
+
启动或复用受管 Copilot bridge。
|
|
421
344
|
|
|
422
345
|
```bash
|
|
423
|
-
codexs
|
|
424
|
-
codexs remove freemodel --force --json
|
|
346
|
+
codexs bridge start [provider] [--json] [--codex-dir <path>]
|
|
425
347
|
```
|
|
426
348
|
|
|
427
|
-
|
|
349
|
+
说明:
|
|
428
350
|
|
|
429
|
-
-
|
|
430
|
-
-
|
|
351
|
+
- 可通过显式 provider、当前 active provider、唯一 provider 或 TTY 选择来解析目标
|
|
352
|
+
- 如果预期端口被占用,会自动寻找新的 5 位端口并持久化
|
|
431
353
|
|
|
432
|
-
|
|
354
|
+
### 5.9 `bridge stop`
|
|
433
355
|
|
|
434
|
-
|
|
435
|
-
- 无论是否显式传入 provider,交互模式下都会要求确认删除
|
|
356
|
+
停止受管 Copilot bridge。
|
|
436
357
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
358
|
+
```bash
|
|
359
|
+
codexs bridge stop [provider] [--json] [--codex-dir <path>]
|
|
360
|
+
```
|
|
440
361
|
|
|
441
|
-
|
|
362
|
+
说明:
|
|
442
363
|
|
|
443
|
-
|
|
364
|
+
- 不修改 `providers.json`
|
|
365
|
+
- 在没有运行中的受管 bridge 时保持幂等
|
|
444
366
|
|
|
445
|
-
|
|
446
|
-
codexs import <file> [--merge] [--json] [--codex-dir <path>]
|
|
447
|
-
```
|
|
367
|
+
### 5.10 `remove`
|
|
448
368
|
|
|
449
|
-
|
|
369
|
+
删除一个 provider 记录。
|
|
450
370
|
|
|
451
371
|
```bash
|
|
452
|
-
codexs
|
|
453
|
-
codexs import ./providers.json --merge
|
|
454
|
-
codexs import ./providers.json --merge --json
|
|
372
|
+
codexs remove <provider> [--force] [--switch-to <profile>] [--json] [--codex-dir <path>]
|
|
455
373
|
```
|
|
456
374
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
- 默认会用导入文件替换当前 `providers.json`
|
|
460
|
-
- 加上 `--merge` 后,会按 provider 名称做浅合并
|
|
461
|
-
- 冲突时,以导入文件中的 provider 记录为准
|
|
375
|
+
说明:
|
|
462
376
|
|
|
463
|
-
|
|
377
|
+
- 删除的是 `providers.json` 中的记录
|
|
378
|
+
- 如果删除的 provider 是当前 active profile 的最后一个绑定项,可先传 `--switch-to`
|
|
379
|
+
- 非交互模式下必须同时传入 `<provider>` 和 `--force`
|
|
464
380
|
|
|
465
|
-
|
|
381
|
+
### 5.11 `import`
|
|
466
382
|
|
|
467
|
-
|
|
383
|
+
从外部 JSON 文件导入 provider 配置。
|
|
468
384
|
|
|
469
|
-
|
|
470
|
-
-
|
|
385
|
+
```bash
|
|
386
|
+
codexs import <file> [--merge] [--json] [--codex-dir <path>]
|
|
387
|
+
```
|
|
471
388
|
|
|
472
|
-
### 5.
|
|
389
|
+
### 5.12 `export`
|
|
473
390
|
|
|
474
391
|
导出当前 `providers.json` 到指定文件。
|
|
475
392
|
|
|
@@ -477,22 +394,9 @@ codexs import ./providers.json --merge --json
|
|
|
477
394
|
codexs export <file> [--force] [--json] [--codex-dir <path>]
|
|
478
395
|
```
|
|
479
396
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
```bash
|
|
483
|
-
codexs export ./providers-backup.json
|
|
484
|
-
codexs export ./providers-backup.json --force
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
行为说明:
|
|
488
|
-
|
|
489
|
-
- 将当前受管理 provider 注册表导出为外部 JSON 文件
|
|
490
|
-
|
|
491
|
-
覆盖规则:
|
|
397
|
+
说明:
|
|
492
398
|
|
|
493
|
-
-
|
|
494
|
-
- 如果目标文件已存在,交互模式下会询问是否覆盖
|
|
495
|
-
- 非交互模式下必须显式传 `--force`
|
|
399
|
+
- 目标文件已存在时,非交互模式下必须显式传 `--force`
|
|
496
400
|
|
|
497
401
|
## 6. 诊断与恢复
|
|
498
402
|
|
|
@@ -504,19 +408,13 @@ codexs export ./providers-backup.json --force
|
|
|
504
408
|
codexs doctor [--json] [--codex-dir <path>]
|
|
505
409
|
```
|
|
506
410
|
|
|
507
|
-
示例:
|
|
508
|
-
|
|
509
|
-
```bash
|
|
510
|
-
codexs doctor
|
|
511
|
-
codexs doctor --json
|
|
512
|
-
```
|
|
513
|
-
|
|
514
411
|
通常会检查:
|
|
515
412
|
|
|
516
413
|
- 必要文件是否存在
|
|
517
414
|
- provider/profile 映射是否一致
|
|
518
415
|
- 当前运行态是否有漂移
|
|
519
416
|
- Codex CLI 是否可用
|
|
417
|
+
- Copilot SDK、登录状态和 bridge runtime 是否健康
|
|
520
418
|
|
|
521
419
|
### 6.2 `rollback`
|
|
522
420
|
|
|
@@ -526,27 +424,6 @@ codexs doctor --json
|
|
|
526
424
|
codexs rollback [<backup-id>] [--json] [--codex-dir <path>]
|
|
527
425
|
```
|
|
528
426
|
|
|
529
|
-
示例:
|
|
530
|
-
|
|
531
|
-
```bash
|
|
532
|
-
codexs rollback
|
|
533
|
-
codexs rollback 20260511-221457-switch
|
|
534
|
-
codexs rollback 20260511-221457-switch --json
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
行为说明:
|
|
538
|
-
|
|
539
|
-
- 不带参数时,默认回滚最近一次受管备份
|
|
540
|
-
- 传入 `<backup-id>` 时,回滚到指定备份
|
|
541
|
-
|
|
542
|
-
交互模式:
|
|
543
|
-
|
|
544
|
-
- 会先展示目标备份和受影响文件,再要求确认
|
|
545
|
-
|
|
546
|
-
非交互模式:
|
|
547
|
-
|
|
548
|
-
- 直接执行,不会二次确认
|
|
549
|
-
|
|
550
427
|
## 7. JSON 输出与自动化建议
|
|
551
428
|
|
|
552
429
|
如果你是在脚本、CI 或 Agent 环境中调用,建议遵循以下约束:
|
|
@@ -560,17 +437,8 @@ codexs <command> --json
|
|
|
560
437
|
- 始终显式传入必需参数,不依赖交互输入
|
|
561
438
|
- 使用 `--json` 获取稳定输出
|
|
562
439
|
- 对危险命令显式传入控制参数,例如 `--force`、`--merge`、`--overwrite`
|
|
563
|
-
- 对多环境调试使用 `--codex-dir <path
|
|
564
|
-
|
|
565
|
-
适合自动化的例子:
|
|
566
|
-
|
|
567
|
-
```bash
|
|
568
|
-
codexs list --json
|
|
569
|
-
codexs show packycode --json
|
|
570
|
-
codexs switch packycode --json
|
|
571
|
-
codexs export ./providers.snapshot.json --force --json
|
|
572
|
-
codexs rollback 20260511-221457-switch --json
|
|
573
|
-
```
|
|
440
|
+
- 对多环境调试使用 `--codex-dir <path>` 和 `CODEXS_HOME`
|
|
441
|
+
- 不要在自动化环境中调用 `login copilot`
|
|
574
442
|
|
|
575
443
|
## 8. 典型使用流程
|
|
576
444
|
|
|
@@ -583,7 +451,7 @@ codexs list
|
|
|
583
451
|
codexs doctor
|
|
584
452
|
```
|
|
585
453
|
|
|
586
|
-
### 8.2 新增并切换到一个 provider
|
|
454
|
+
### 8.2 新增并切换到一个 direct provider
|
|
587
455
|
|
|
588
456
|
```bash
|
|
589
457
|
codexs add my-provider --profile my-provider --api-key sk-xxx
|
|
@@ -591,25 +459,27 @@ codexs switch my-provider
|
|
|
591
459
|
codexs current
|
|
592
460
|
```
|
|
593
461
|
|
|
594
|
-
### 8.3
|
|
462
|
+
### 8.3 接入 GitHub Copilot provider
|
|
595
463
|
|
|
596
464
|
```bash
|
|
597
|
-
codexs
|
|
598
|
-
codexs
|
|
599
|
-
codexs
|
|
465
|
+
codexs login copilot
|
|
466
|
+
codexs add copilot-main --copilot --profile copilot-main
|
|
467
|
+
codexs switch copilot-main
|
|
468
|
+
codexs bridge status copilot-main
|
|
600
469
|
```
|
|
601
470
|
|
|
602
|
-
### 8.4
|
|
471
|
+
### 8.4 检查 config profile 与受管态映射
|
|
603
472
|
|
|
604
473
|
```bash
|
|
605
|
-
codexs
|
|
606
|
-
codexs
|
|
474
|
+
codexs config list-profiles
|
|
475
|
+
codexs config show
|
|
607
476
|
```
|
|
608
477
|
|
|
609
|
-
|
|
478
|
+
### 8.5 出现错误后恢复
|
|
610
479
|
|
|
611
480
|
```bash
|
|
612
|
-
codexs
|
|
481
|
+
codexs backups list
|
|
482
|
+
codexs rollback
|
|
613
483
|
```
|
|
614
484
|
|
|
615
485
|
## 9. 危险命令说明
|
|
@@ -621,6 +491,7 @@ codexs rollback <backup-id>
|
|
|
621
491
|
- `add`
|
|
622
492
|
- `edit`
|
|
623
493
|
- `switch`
|
|
494
|
+
- `bridge start`
|
|
624
495
|
- `remove`
|
|
625
496
|
- `import`
|
|
626
497
|
- `export`(目标文件已存在时)
|
|
@@ -630,7 +501,7 @@ codexs rollback <backup-id>
|
|
|
630
501
|
|
|
631
502
|
- 人工操作先执行 `backups list`
|
|
632
503
|
- 自动化操作统一加 `--json`
|
|
633
|
-
- 在测试目录中先用 `--codex-dir <path>` 验证流程
|
|
504
|
+
- 在测试目录中先用 `--codex-dir <path>` 与 `CODEXS_HOME` 验证流程
|
|
634
505
|
|
|
635
506
|
## 10. 查看命令帮助
|
|
636
507
|
|
|
@@ -644,10 +515,10 @@ codexs --help
|
|
|
644
515
|
|
|
645
516
|
```bash
|
|
646
517
|
codexs help init
|
|
647
|
-
codexs help
|
|
648
|
-
codexs help
|
|
518
|
+
codexs help login
|
|
519
|
+
codexs help bridge
|
|
520
|
+
codexs help config
|
|
649
521
|
codexs help add
|
|
650
522
|
codexs help switch
|
|
651
|
-
codexs help backups
|
|
652
523
|
codexs help rollback
|
|
653
524
|
```
|