@minniexcode/codex-switch 0.0.9 → 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.
Files changed (51) hide show
  1. package/README.AI.md +52 -13
  2. package/README.CN.md +94 -39
  3. package/README.md +75 -33
  4. package/dist/app/add-provider.js +29 -26
  5. package/dist/app/bridge.js +15 -15
  6. package/dist/app/edit-provider.js +2 -18
  7. package/dist/app/get-status.js +35 -13
  8. package/dist/app/import-providers.js +1 -1
  9. package/dist/app/init-codex.js +13 -14
  10. package/dist/app/list-providers.js +0 -1
  11. package/dist/app/remove-provider.js +1 -1
  12. package/dist/app/run-doctor.js +21 -39
  13. package/dist/app/run-mutation.js +3 -2
  14. package/dist/app/setup-codex.js +30 -18
  15. package/dist/app/show-config.js +1 -5
  16. package/dist/app/switch-provider.js +16 -33
  17. package/dist/cli/output.js +4 -6
  18. package/dist/cli.js +35 -3
  19. package/dist/commands/args.js +2 -2
  20. package/dist/commands/dispatch.js +40 -0
  21. package/dist/commands/handlers.js +202 -84
  22. package/dist/commands/help.js +2 -0
  23. package/dist/commands/registry.js +33 -12
  24. package/dist/domain/backups.js +4 -4
  25. package/dist/domain/config.js +102 -61
  26. package/dist/domain/providers.js +12 -5
  27. package/dist/domain/runtime-state.js +81 -4
  28. package/dist/domain/setup.js +58 -3
  29. package/dist/interaction/add-interactive.js +55 -1
  30. package/dist/interaction/interactive.js +1 -5
  31. package/dist/runtime/copilot-adapter.js +56 -13
  32. package/dist/runtime/copilot-bridge.js +392 -44
  33. package/dist/runtime/copilot-cli.js +142 -0
  34. package/dist/runtime/copilot-installer.js +59 -11
  35. package/dist/runtime/copilot-sdk-loader.js +5 -5
  36. package/dist/storage/auth-repo.js +28 -77
  37. package/dist/storage/backup-repo.js +4 -4
  38. package/dist/storage/codex-paths.js +34 -8
  39. package/dist/storage/config-repo.js +1 -36
  40. package/dist/storage/lock-repo.js +2 -4
  41. package/dist/storage/runtime-state-repo.js +43 -10
  42. package/dist/storage/tool-config-repo.js +111 -0
  43. package/docs/Design/codex-switch-copilot-integration-design.md +517 -0
  44. package/docs/Design/codex-switch-v0.0.10-design.md +669 -0
  45. package/docs/Design/codex-switch-v0.0.11-design.md +824 -0
  46. package/docs/PRD/codex-switch-prd-v0.0.10.md +406 -0
  47. package/docs/PRD/codex-switch-prd-v0.0.11.md +577 -0
  48. package/docs/cli-usage.md +166 -271
  49. package/docs/codex-switch-product-overview.md +2 -2
  50. package/docs/codex-switch-technical-architecture.md +6 -5
  51. 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.4` 版本中的命令、参数、交互规则和典型使用方式。
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` 用来管理本地 Codex 目录中的 provider/profile 配置,默认目标目录是 `~/.codex`。
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
- 1. 本地优先,不依赖远端服务保存状态
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>`:将目标目录从默认 `~/.codex` 改成指定路径
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.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
- - 普通文本输出会默认隐藏 `apiKey`
146
- - `--json` 模式会输出完整 provider 数据,适合本地自动化
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 current
160
- codexs current --json
170
+ codexs status [--json] [--codex-dir <path>]
161
171
  ```
162
172
 
163
- 说明:
173
+ 通常会覆盖这些信息:
164
174
 
165
- - 如果缺少 `config.toml`,或配置中没有顶层 profile,会直接报错
175
+ - 关键文件是否存在
176
+ - 当前激活 profile 是什么
177
+ - 当前运行态是否能在受管理 provider 映射中找到
178
+ - Copilot SDK 是否已安装
179
+ - Copilot bridge runtime state 是否健康
166
180
 
167
- ### 4.4 `status`
181
+ ### 4.5 `config show`
168
182
 
169
- 输出本地 Codex 目录的快速状态摘要。
183
+ 查看结构化 config profile 视图。
170
184
 
171
185
  ```bash
172
- codexs status [--json] [--codex-dir <path>]
186
+ codexs config show [profile] [--json] [--codex-dir <path>]
173
187
  ```
174
188
 
175
- 示例:
189
+ 说明:
176
190
 
177
- ```bash
178
- codexs status
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 名称及其受管态提示。
197
+
198
+ ```bash
199
+ codexs config list-profiles [--json] [--codex-dir <path>]
200
+ ```
187
201
 
188
- ### 4.5 `backups list`
202
+ ### 4.7 `bridge status`
189
203
 
190
- 查看历史备份清单。
204
+ 查看当前受管 Copilot bridge 的运行状态。
191
205
 
192
206
  ```bash
193
- codexs backups list [--json] [--codex-dir <path>]
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
- 轻量初始化目标 Codex 目录,确保 `providers.json` 已存在。
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
- - 不要求 `config.toml` 或 `auth.json` 已存在
236
+ - 不要求目标 `config.toml` 或 `auth.json` 已存在
237
+ - `codex-switch.json` 不存在时创建
230
238
  - `providers.json` 不存在时创建空 registry:`{ "providers": {} }`
231
- - `providers.json` 已存在时返回成功 no-op,不改写文件,也不会创建备份
232
- - 成功 JSON 结果固定包含:`codexDir`、`createdCodexDir`、`createdProvidersFile`、`providersAlreadyExisted`、`configExists`、`authExists`
239
+ - 若显式传入 `--codex-dir` 且 `codex-switch.json` 尚不存在,`init` 会把它持久化为 `defaultCodexDir`
240
+ - 成功结果围绕 tool home 返回,不再承诺旧的 `createdCodexDir`、`configExists`、`authExists` 等字段
233
241
 
234
- 交互模式:
242
+ ### 5.2 `login copilot`
235
243
 
236
- - 未显式传 `--codex-dir` 时,会复用候选目录发现并允许你选择或手动输入目录
237
- - 如果目标目录不存在,会确认是否创建目录
244
+ 完成 GitHub Copilot 上游安装与登录就绪检查。
238
245
 
239
- 非交互模式:
246
+ ```bash
247
+ codexs login copilot
248
+ codexs login github-copilot
249
+ ```
250
+
251
+ 行为说明:
240
252
 
241
- - `--json` 或非 TTY 下绝不会进入 prompt
242
- - 目标目录不存在时直接返回结构化错误
253
+ - 当前支持 `copilot` `github-copilot` 两种拼写
254
+ - 若本地 Copilot SDK runtime 未安装,会先确认是否安装
255
+ - 若登录尚未就绪,会调用官方 `copilot login`,完成后做一次 recheck
256
+ - 该命令要求真实 TTY,不支持 `--json`
257
+ - 登录状态是共享的;切换 GitHub 账号会影响所有 Copilot provider
243
258
 
244
- ### 5.2 `migrate`
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` 且能解析到匹配 `model_providers.*.base_url` 和 `env_key` 的 unmanaged profile
270
+ - 仅 adopt 已具备 `model`、`model_provider` 且能解析到匹配 `base_url` 的 unmanaged profile
264
271
  - 收集每个 profile 对应的 provider 记录
265
- - 保持现有受管备份、锁、`auth.json` mirror 和 post-run `doctor` 流程
266
-
267
- 交互模式:
268
-
269
- - 如果 `providers.json` 已存在,会让你选择 `merge`、`overwrite` 或取消
270
- - profile 选择和 provider 细节收集仍然只在 TTY 中进行
271
-
272
- 非交互模式:
273
-
274
- - `providers.json` 已存在时,必须显式传入 `--merge` 或 `--overwrite`
275
- - `--json` 模式下不会进入任何引导式输入
276
- - 由于 adopt profile 选择和 provider secret 收集仍然是交互契约,当前版本会直接失败
272
+ - 保持受管备份、锁和 post-run `doctor` 流程
273
+ - 非交互模式下,profile 选择和 provider 细节收集仍不会自动化展开
277
274
 
278
- ### 5.3 `setup`
275
+ ### 5.4 `setup`
279
276
 
280
277
  `setup` 已弃用,不再执行实际初始化或迁移工作。
281
278
 
@@ -283,81 +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。
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 [--profile <name>] [--api-key <key>] [--base-url <url>] [--note <text>] [--tag <tag> ...]
299
- ```
300
-
301
- 示例:
302
-
303
- ```bash
304
- codexs add packycode --profile packycode --api-key sk-xxx
305
- codexs add packycode --profile packycode --api-key sk-xxx --tag paid --tag daily
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>
306
291
  codexs add
307
292
  ```
308
293
 
309
- 字段说明:
294
+ 说明:
310
295
 
311
- - `provider`:provider 名称,也是后续 `switch/show/edit/remove` 的标识
312
- - `--profile`:写入到 `config.toml` profile 名称
313
- - `--api-key`:provider API key
314
- - `--base-url`:可选的 provider 元数据,不会写回 `[profiles.*]`
315
- - `--note`:备注
316
- - `--tag`:标签,可重复传多次
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
317
303
 
318
304
  交互模式:
319
305
 
320
- - 如果缺少 `provider`、`profile`、`apiKey`,会在 TTY 中补问
321
- - profile 选择会优先复用现有 `config.toml` profile
322
- - API key 的隐藏输入会做二次确认
323
- - tag 仅支持预设选项多选
324
-
325
- 非交互模式:
326
-
327
- - 必须显式传入所有必填字段
306
+ - direct provider 缺少必填项时会在 TTY 中补问
307
+ - Copilot provider 的交互流不会要求 direct API key
308
+ - tags 交互使用 preset multi-select
328
309
 
329
- ### 5.5 `edit`
310
+ ### 5.6 `edit`
330
311
 
331
312
  编辑单个 provider 的字段。
332
313
 
333
314
  ```bash
334
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>
335
317
  ```
336
318
 
337
- 示例:
338
-
339
- ```bash
340
- codexs edit packycode --note primary
341
- codexs edit packycode --api-key sk-new --base-url https://example.com/v1
342
- codexs edit packycode --tag daily --tag paid
343
- ```
344
-
345
- 行为说明:
319
+ 说明:
346
320
 
347
- - 只会更新你显式传入的字段
348
- - 未传入的字段保持不变
321
+ - 只更新显式传入的字段
349
322
  - `--tag` 会替换整组标签,而不是追加单个 tag
350
- - 写入前会备份 `providers.json`
351
-
352
- 交互模式:
353
-
354
- - 如果没有传任何可编辑字段,TTY 下会进入交互编辑
355
-
356
- 非交互模式:
357
-
358
- - 至少要提供一个需要修改的字段
323
+ - 当目标 profile 不存在时,可配合 `--create-profile`、`--model`、`--base-url` 完成重绑定
359
324
 
360
- ### 5.6 `switch`
325
+ ### 5.7 `switch`
361
326
 
362
327
  切换当前使用的 provider/profile。
363
328
 
@@ -365,87 +330,63 @@ codexs edit packycode --tag daily --tag paid
365
330
  codexs switch <provider> [--json] [--codex-dir <path>]
366
331
  ```
367
332
 
368
- 示例:
369
-
370
- ```bash
371
- codexs switch freemodel
372
- codexs switch freemodel --json
373
- codexs switch
374
- ```
375
-
376
333
  行为说明:
377
334
 
378
335
  - 根据 `providers.json` 找到目标 provider
379
- - 更新相关运行态配置
380
- - 重写当前 active provider 对应的 `auth.json` mirror
381
- - 会先备份 `config.toml` `auth.json`
382
-
383
- 交互模式:
384
-
385
- - 如果没有传 `<provider>`,TTY 下会弹出 provider 选择器
386
- - 如果已经传了 `<provider>`,则直接执行,不再额外确认
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`
387
340
 
388
- ### 5.7 `remove`
341
+ ### 5.8 `bridge start`
389
342
 
390
- 删除一个 provider 记录。
343
+ 启动或复用受管 Copilot bridge。
391
344
 
392
345
  ```bash
393
- codexs remove <provider> [--force] [--json] [--codex-dir <path>]
346
+ codexs bridge start [provider] [--json] [--codex-dir <path>]
394
347
  ```
395
348
 
396
- 示例:
397
-
398
- ```bash
399
- codexs remove freemodel
400
- codexs remove freemodel --force --json
401
- ```
402
-
403
- 行为说明:
404
-
405
- - 删除的是 `providers.json` 中的记录
406
- - 删除前会备份 `providers.json`
349
+ 说明:
407
350
 
408
- 交互模式:
351
+ - 可通过显式 provider、当前 active provider、唯一 provider 或 TTY 选择来解析目标
352
+ - 如果预期端口被占用,会自动寻找新的 5 位端口并持久化
409
353
 
410
- - 如果没传 provider,可以在 TTY 中选择
411
- - 无论是否显式传入 provider,交互模式下都会要求确认删除
354
+ ### 5.9 `bridge stop`
412
355
 
413
- 非交互模式:
356
+ 停止受管 Copilot bridge。
414
357
 
415
- - 必须同时传入 `<provider>` 和 `--force`
358
+ ```bash
359
+ codexs bridge stop [provider] [--json] [--codex-dir <path>]
360
+ ```
416
361
 
417
- ### 5.8 `import`
362
+ 说明:
418
363
 
419
- 从外部 JSON 文件导入 provider 配置。
364
+ - 不修改 `providers.json`
365
+ - 在没有运行中的受管 bridge 时保持幂等
420
366
 
421
- ```bash
422
- codexs import <file> [--merge] [--json] [--codex-dir <path>]
423
- ```
367
+ ### 5.10 `remove`
424
368
 
425
- 示例:
369
+ 删除一个 provider 记录。
426
370
 
427
371
  ```bash
428
- codexs import ./providers.json
429
- codexs import ./providers.json --merge
430
- codexs import ./providers.json --merge --json
372
+ codexs remove <provider> [--force] [--switch-to <profile>] [--json] [--codex-dir <path>]
431
373
  ```
432
374
 
433
- 行为说明:
434
-
435
- - 默认会用导入文件替换当前 `providers.json`
436
- - 加上 `--merge` 后,会按 provider 名称做浅合并
437
- - 冲突时,以导入文件中的 provider 记录为准
375
+ 说明:
438
376
 
439
- 交互模式:
377
+ - 删除的是 `providers.json` 中的记录
378
+ - 如果删除的 provider 是当前 active profile 的最后一个绑定项,可先传 `--switch-to`
379
+ - 非交互模式下必须同时传入 `<provider>` 和 `--force`
440
380
 
441
- - 会在写入前确认是替换还是合并结果
381
+ ### 5.11 `import`
442
382
 
443
- 非交互模式:
383
+ 从外部 JSON 文件导入 provider 配置。
444
384
 
445
- - 不会弹出路径向导或确认框
446
- - 会先验证输入文件,再执行写入
385
+ ```bash
386
+ codexs import <file> [--merge] [--json] [--codex-dir <path>]
387
+ ```
447
388
 
448
- ### 5.9 `export`
389
+ ### 5.12 `export`
449
390
 
450
391
  导出当前 `providers.json` 到指定文件。
451
392
 
@@ -453,22 +394,9 @@ codexs import ./providers.json --merge --json
453
394
  codexs export <file> [--force] [--json] [--codex-dir <path>]
454
395
  ```
455
396
 
456
- 示例:
457
-
458
- ```bash
459
- codexs export ./providers-backup.json
460
- codexs export ./providers-backup.json --force
461
- ```
462
-
463
- 行为说明:
464
-
465
- - 将当前受管理 provider 注册表导出为外部 JSON 文件
466
-
467
- 覆盖规则:
397
+ 说明:
468
398
 
469
- - 如果目标文件不存在,直接导出
470
- - 如果目标文件已存在,交互模式下会询问是否覆盖
471
- - 非交互模式下必须显式传 `--force`
399
+ - 目标文件已存在时,非交互模式下必须显式传 `--force`
472
400
 
473
401
  ## 6. 诊断与恢复
474
402
 
@@ -480,19 +408,13 @@ codexs export ./providers-backup.json --force
480
408
  codexs doctor [--json] [--codex-dir <path>]
481
409
  ```
482
410
 
483
- 示例:
484
-
485
- ```bash
486
- codexs doctor
487
- codexs doctor --json
488
- ```
489
-
490
411
  通常会检查:
491
412
 
492
413
  - 必要文件是否存在
493
414
  - provider/profile 映射是否一致
494
415
  - 当前运行态是否有漂移
495
416
  - Codex CLI 是否可用
417
+ - Copilot SDK、登录状态和 bridge runtime 是否健康
496
418
 
497
419
  ### 6.2 `rollback`
498
420
 
@@ -502,27 +424,6 @@ codexs doctor --json
502
424
  codexs rollback [<backup-id>] [--json] [--codex-dir <path>]
503
425
  ```
504
426
 
505
- 示例:
506
-
507
- ```bash
508
- codexs rollback
509
- codexs rollback 20260511-221457-switch
510
- codexs rollback 20260511-221457-switch --json
511
- ```
512
-
513
- 行为说明:
514
-
515
- - 不带参数时,默认回滚最近一次受管备份
516
- - 传入 `<backup-id>` 时,回滚到指定备份
517
-
518
- 交互模式:
519
-
520
- - 会先展示目标备份和受影响文件,再要求确认
521
-
522
- 非交互模式:
523
-
524
- - 直接执行,不会二次确认
525
-
526
427
  ## 7. JSON 输出与自动化建议
527
428
 
528
429
  如果你是在脚本、CI 或 Agent 环境中调用,建议遵循以下约束:
@@ -536,17 +437,8 @@ codexs <command> --json
536
437
  - 始终显式传入必需参数,不依赖交互输入
537
438
  - 使用 `--json` 获取稳定输出
538
439
  - 对危险命令显式传入控制参数,例如 `--force`、`--merge`、`--overwrite`
539
- - 对多环境调试使用 `--codex-dir <path>`,避免误改默认 `~/.codex`
540
-
541
- 适合自动化的例子:
542
-
543
- ```bash
544
- codexs list --json
545
- codexs show packycode --json
546
- codexs switch packycode --json
547
- codexs export ./providers.snapshot.json --force --json
548
- codexs rollback 20260511-221457-switch --json
549
- ```
440
+ - 对多环境调试使用 `--codex-dir <path>` `CODEXS_HOME`
441
+ - 不要在自动化环境中调用 `login copilot`
550
442
 
551
443
  ## 8. 典型使用流程
552
444
 
@@ -559,7 +451,7 @@ codexs list
559
451
  codexs doctor
560
452
  ```
561
453
 
562
- ### 8.2 新增并切换到一个 provider
454
+ ### 8.2 新增并切换到一个 direct provider
563
455
 
564
456
  ```bash
565
457
  codexs add my-provider --profile my-provider --api-key sk-xxx
@@ -567,25 +459,27 @@ codexs switch my-provider
567
459
  codexs current
568
460
  ```
569
461
 
570
- ### 8.3 批量迁移 provider 配置
462
+ ### 8.3 接入 GitHub Copilot provider
571
463
 
572
464
  ```bash
573
- codexs export ./providers.backup.json
574
- codexs import ./team.providers.json --merge
575
- codexs doctor
465
+ codexs login copilot
466
+ codexs add copilot-main --copilot --profile copilot-main
467
+ codexs switch copilot-main
468
+ codexs bridge status copilot-main
576
469
  ```
577
470
 
578
- ### 8.4 出现错误后恢复
471
+ ### 8.4 检查 config profile 与受管态映射
579
472
 
580
473
  ```bash
581
- codexs backups list
582
- codexs rollback
474
+ codexs config list-profiles
475
+ codexs config show
583
476
  ```
584
477
 
585
- 或者:
478
+ ### 8.5 出现错误后恢复
586
479
 
587
480
  ```bash
588
- codexs rollback <backup-id>
481
+ codexs backups list
482
+ codexs rollback
589
483
  ```
590
484
 
591
485
  ## 9. 危险命令说明
@@ -597,6 +491,7 @@ codexs rollback <backup-id>
597
491
  - `add`
598
492
  - `edit`
599
493
  - `switch`
494
+ - `bridge start`
600
495
  - `remove`
601
496
  - `import`
602
497
  - `export`(目标文件已存在时)
@@ -606,7 +501,7 @@ codexs rollback <backup-id>
606
501
 
607
502
  - 人工操作先执行 `backups list`
608
503
  - 自动化操作统一加 `--json`
609
- - 在测试目录中先用 `--codex-dir <path>` 验证流程
504
+ - 在测试目录中先用 `--codex-dir <path>` 与 `CODEXS_HOME` 验证流程
610
505
 
611
506
  ## 10. 查看命令帮助
612
507
 
@@ -620,10 +515,10 @@ codexs --help
620
515
 
621
516
  ```bash
622
517
  codexs help init
623
- codexs help migrate
624
- codexs help setup
518
+ codexs help login
519
+ codexs help bridge
520
+ codexs help config
625
521
  codexs help add
626
522
  codexs help switch
627
- codexs help backups
628
523
  codexs help rollback
629
524
  ```