@minniexcode/codex-switch 0.0.3 → 0.0.4

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.
@@ -0,0 +1,580 @@
1
+ # codex-switch CLI Usage
2
+
3
+ 本文档详细介绍 `codex-switch` 在 `0.0.4` 版本中的命令、参数、交互规则和典型使用方式。
4
+
5
+ 可执行命令名:
6
+
7
+ ```bash
8
+ codexs
9
+ ```
10
+
11
+ ## 1. 概览
12
+
13
+ `codex-switch` 用来管理本地 Codex 目录中的 provider/profile 配置,默认目标目录是 `~/.codex`。
14
+
15
+ 它的核心设计有三点:
16
+
17
+ 1. 本地优先,不依赖远端服务保存状态
18
+ 2. 写入前先备份,异常时支持回滚
19
+ 3. 同时兼容人类终端使用和脚本/Agent 自动化调用
20
+
21
+ 默认管理的文件:
22
+
23
+ ```text
24
+ ~/.codex/
25
+ config.toml
26
+ auth.json
27
+ providers.json
28
+ backups/
29
+ ```
30
+
31
+ ## 2. 安装与入口
32
+
33
+ 全局安装:
34
+
35
+ ```bash
36
+ npm install -g @minniexcode/codex-switch
37
+ ```
38
+
39
+ 临时执行:
40
+
41
+ ```bash
42
+ npx @minniexcode/codex-switch --help
43
+ ```
44
+
45
+ 查看总帮助:
46
+
47
+ ```bash
48
+ codexs --help
49
+ ```
50
+
51
+ 查看版本:
52
+
53
+ ```bash
54
+ codexs --version
55
+ ```
56
+
57
+ ## 3. 全局规则
58
+
59
+ ### 3.1 全局参数
60
+
61
+ 所有命令都支持以下全局参数:
62
+
63
+ ```bash
64
+ --json
65
+ --codex-dir <path>
66
+ --help
67
+ --version
68
+ ```
69
+
70
+ 说明:
71
+
72
+ - `--json`:输出标准 JSON 结果,并禁用所有交互 prompt
73
+ - `--codex-dir <path>`:将目标目录从默认 `~/.codex` 改成指定路径
74
+ - `--help`:查看命令帮助
75
+ - `--version`:输出当前 CLI 版本
76
+
77
+ ### 3.2 交互规则
78
+
79
+ CLI 的交互行为遵循以下规则:
80
+
81
+ - 只有在真实 TTY 终端下才会出现 prompt
82
+ - 只要传入 `--json`,就绝不会出现 prompt
83
+ - 面向脚本或 CI 的调用应显式传参,并优先使用 `--json`
84
+ - 某些危险操作在交互模式下会确认,在非交互模式下则要求显式参数
85
+
86
+ ### 3.3 备份与回滚
87
+
88
+ 所有受管理的写操作都会先备份相关文件,再执行写入。
89
+
90
+ 典型受影响命令包括:
91
+
92
+ - `setup`
93
+ - `add`
94
+ - `edit`
95
+ - `switch`
96
+ - `remove`
97
+ - `import`
98
+
99
+ 如果操作失败,命令内部会尽量自动回滚。你也可以稍后手动执行:
100
+
101
+ ```bash
102
+ codexs rollback
103
+ codexs rollback <backup-id>
104
+ ```
105
+
106
+ ## 4. 读取类命令
107
+
108
+ ### 4.1 `list`
109
+
110
+ 列出 `providers.json` 中的全部 provider。
111
+
112
+ ```bash
113
+ codexs list [--json] [--codex-dir <path>]
114
+ ```
115
+
116
+ 示例:
117
+
118
+ ```bash
119
+ codexs list
120
+ codexs list --json
121
+ ```
122
+
123
+ 适用场景:
124
+
125
+ - 查看当前已管理 provider 列表
126
+ - 给后续 `switch`、`show`、`edit`、`remove` 提供候选名称
127
+
128
+ ### 4.2 `show`
129
+
130
+ 查看单个 provider 的完整记录。
131
+
132
+ ```bash
133
+ codexs show <provider> [--json] [--codex-dir <path>]
134
+ ```
135
+
136
+ 示例:
137
+
138
+ ```bash
139
+ codexs show packycode
140
+ codexs show packycode --json
141
+ ```
142
+
143
+ 说明:
144
+
145
+ - 普通文本输出会默认隐藏 `apiKey`
146
+ - `--json` 模式会输出完整 provider 数据,适合本地自动化
147
+
148
+ ### 4.3 `current`
149
+
150
+ 查看 `config.toml` 当前激活的顶层 profile。
151
+
152
+ ```bash
153
+ codexs current [--json] [--codex-dir <path>]
154
+ ```
155
+
156
+ 示例:
157
+
158
+ ```bash
159
+ codexs current
160
+ codexs current --json
161
+ ```
162
+
163
+ 说明:
164
+
165
+ - 如果缺少 `config.toml`,或配置中没有顶层 profile,会直接报错
166
+
167
+ ### 4.4 `status`
168
+
169
+ 输出本地 Codex 目录的快速状态摘要。
170
+
171
+ ```bash
172
+ codexs status [--json] [--codex-dir <path>]
173
+ ```
174
+
175
+ 示例:
176
+
177
+ ```bash
178
+ codexs status
179
+ codexs status --json
180
+ ```
181
+
182
+ 通常会覆盖这些信息:
183
+
184
+ - 关键文件是否存在
185
+ - 当前激活 profile 是什么
186
+ - 当前运行态是否能在受管理的 provider 映射中找到
187
+
188
+ ### 4.5 `backups list`
189
+
190
+ 查看历史备份清单。
191
+
192
+ ```bash
193
+ codexs backups list [--json] [--codex-dir <path>]
194
+ ```
195
+
196
+ 示例:
197
+
198
+ ```bash
199
+ codexs backups list
200
+ codexs backups list --json
201
+ ```
202
+
203
+ 说明:
204
+
205
+ - 返回结果按 `createdAt` 倒序排列
206
+ - 损坏的备份 manifest 会被跳过,并给出 warning,不会导致整个命令失败
207
+
208
+ ## 5. 变更类命令
209
+
210
+ ### 5.1 `setup`
211
+
212
+ 从现有 Codex 目录初始化 `providers.json`。
213
+
214
+ ```bash
215
+ codexs setup [--json] [--codex-dir <path>] [--merge|--overwrite]
216
+ ```
217
+
218
+ 示例:
219
+
220
+ ```bash
221
+ codexs setup
222
+ codexs setup --overwrite --json
223
+ codexs setup --merge --codex-dir ./.tmp-codex
224
+ ```
225
+
226
+ 行为说明:
227
+
228
+ - 读取 `config.toml` 中已有 profile
229
+ - 收集每个 profile 对应的 provider 记录
230
+ - 在受管备份流程下写入 `providers.json`
231
+ - 成功后会自动运行一次 `doctor`
232
+
233
+ 交互模式:
234
+
235
+ - 如果 `providers.json` 已存在,会让你选择 `merge`、`overwrite` 或取消
236
+ - 如果需要补全 provider 细节,会在 TTY 中询问
237
+
238
+ 非交互模式:
239
+
240
+ - `providers.json` 已存在时,必须显式传入 `--merge` 或 `--overwrite`
241
+ - `--json` 模式下不会进入任何引导式输入
242
+
243
+ ### 5.2 `add`
244
+
245
+ 新增一个 provider。
246
+
247
+ ```bash
248
+ codexs add <provider> --profile <name> --api-key <key> [--base-url <url>] [--note <text>] [--tag <tag> ...]
249
+ codexs add [--profile <name>] [--api-key <key>] [--base-url <url>] [--note <text>] [--tag <tag> ...]
250
+ ```
251
+
252
+ 示例:
253
+
254
+ ```bash
255
+ codexs add packycode --profile packycode --api-key sk-xxx
256
+ codexs add packycode --profile packycode --api-key sk-xxx --tag paid --tag daily
257
+ codexs add
258
+ ```
259
+
260
+ 字段说明:
261
+
262
+ - `provider`:provider 名称,也是后续 `switch/show/edit/remove` 的标识
263
+ - `--profile`:写入到 `config.toml` 的 profile 名称
264
+ - `--api-key`:provider API key
265
+ - `--base-url`:可选的 API base URL
266
+ - `--note`:备注
267
+ - `--tag`:标签,可重复传多次
268
+
269
+ 交互模式:
270
+
271
+ - 如果缺少 `provider`、`profile`、`apiKey`,会在 TTY 中补问
272
+ - profile 选择会优先复用现有 `config.toml` profile
273
+ - API key 的隐藏输入会做二次确认
274
+ - tag 支持预设多选和自定义逗号分隔输入
275
+
276
+ 非交互模式:
277
+
278
+ - 必须显式传入所有必填字段
279
+
280
+ ### 5.3 `edit`
281
+
282
+ 编辑单个 provider 的字段。
283
+
284
+ ```bash
285
+ codexs edit <provider> [--profile <name>] [--api-key <key>] [--base-url <url>] [--note <text>] [--tag <tag> ...] [--json] [--codex-dir <path>]
286
+ ```
287
+
288
+ 示例:
289
+
290
+ ```bash
291
+ codexs edit packycode --note primary
292
+ codexs edit packycode --api-key sk-new --base-url https://example.com/v1
293
+ codexs edit packycode --tag daily --tag paid
294
+ ```
295
+
296
+ 行为说明:
297
+
298
+ - 只会更新你显式传入的字段
299
+ - 未传入的字段保持不变
300
+ - `--tag` 会替换整组标签,而不是追加单个 tag
301
+ - 写入前会备份 `providers.json`
302
+
303
+ 交互模式:
304
+
305
+ - 如果没有传任何可编辑字段,TTY 下会进入交互编辑
306
+
307
+ 非交互模式:
308
+
309
+ - 至少要提供一个需要修改的字段
310
+
311
+ ### 5.4 `switch`
312
+
313
+ 切换当前使用的 provider/profile。
314
+
315
+ ```bash
316
+ codexs switch <provider> [--no-login] [--json] [--codex-dir <path>]
317
+ ```
318
+
319
+ 示例:
320
+
321
+ ```bash
322
+ codexs switch freemodel
323
+ codexs switch freemodel --no-login
324
+ codexs switch --no-login
325
+ ```
326
+
327
+ 行为说明:
328
+
329
+ - 根据 `providers.json` 找到目标 provider
330
+ - 更新相关运行态配置
331
+ - 默认会执行 Codex 登录刷新流程
332
+ - 会先备份 `config.toml` 和 `auth.json`
333
+
334
+ 参数说明:
335
+
336
+ - `--no-login`:切换后不执行登录刷新
337
+
338
+ 交互模式:
339
+
340
+ - 如果没有传 `<provider>`,TTY 下会弹出 provider 选择器
341
+ - 如果已经传了 `<provider>`,则直接执行,不再额外确认
342
+
343
+ ### 5.5 `remove`
344
+
345
+ 删除一个 provider 记录。
346
+
347
+ ```bash
348
+ codexs remove <provider> [--force] [--json] [--codex-dir <path>]
349
+ ```
350
+
351
+ 示例:
352
+
353
+ ```bash
354
+ codexs remove freemodel
355
+ codexs remove freemodel --force --json
356
+ ```
357
+
358
+ 行为说明:
359
+
360
+ - 删除的是 `providers.json` 中的记录
361
+ - 删除前会备份 `providers.json`
362
+
363
+ 交互模式:
364
+
365
+ - 如果没传 provider,可以在 TTY 中选择
366
+ - 无论是否显式传入 provider,交互模式下都会要求确认删除
367
+
368
+ 非交互模式:
369
+
370
+ - 必须同时传入 `<provider>` 和 `--force`
371
+
372
+ ### 5.6 `import`
373
+
374
+ 从外部 JSON 文件导入 provider 配置。
375
+
376
+ ```bash
377
+ codexs import <file> [--merge] [--json] [--codex-dir <path>]
378
+ ```
379
+
380
+ 示例:
381
+
382
+ ```bash
383
+ codexs import ./providers.json
384
+ codexs import ./providers.json --merge
385
+ codexs import ./providers.json --merge --json
386
+ ```
387
+
388
+ 行为说明:
389
+
390
+ - 默认会用导入文件替换当前 `providers.json`
391
+ - 加上 `--merge` 后,会按 provider 名称做浅合并
392
+ - 冲突时,以导入文件中的 provider 记录为准
393
+
394
+ 交互模式:
395
+
396
+ - 会在写入前确认是替换还是合并结果
397
+
398
+ 非交互模式:
399
+
400
+ - 不会弹出路径向导或确认框
401
+ - 会先验证输入文件,再执行写入
402
+
403
+ ### 5.7 `export`
404
+
405
+ 导出当前 `providers.json` 到指定文件。
406
+
407
+ ```bash
408
+ codexs export <file> [--force] [--json] [--codex-dir <path>]
409
+ ```
410
+
411
+ 示例:
412
+
413
+ ```bash
414
+ codexs export ./providers-backup.json
415
+ codexs export ./providers-backup.json --force
416
+ ```
417
+
418
+ 行为说明:
419
+
420
+ - 将当前受管理 provider 注册表导出为外部 JSON 文件
421
+
422
+ 覆盖规则:
423
+
424
+ - 如果目标文件不存在,直接导出
425
+ - 如果目标文件已存在,交互模式下会询问是否覆盖
426
+ - 非交互模式下必须显式传 `--force`
427
+
428
+ ## 6. 诊断与恢复
429
+
430
+ ### 6.1 `doctor`
431
+
432
+ 运行本地配置与环境诊断。
433
+
434
+ ```bash
435
+ codexs doctor [--json] [--codex-dir <path>]
436
+ ```
437
+
438
+ 示例:
439
+
440
+ ```bash
441
+ codexs doctor
442
+ codexs doctor --json
443
+ ```
444
+
445
+ 通常会检查:
446
+
447
+ - 必要文件是否存在
448
+ - provider/profile 映射是否一致
449
+ - 当前运行态是否有漂移
450
+ - Codex CLI 是否可用
451
+
452
+ ### 6.2 `rollback`
453
+
454
+ 回滚到最近一次备份,或者指定备份 ID。
455
+
456
+ ```bash
457
+ codexs rollback [<backup-id>] [--json] [--codex-dir <path>]
458
+ ```
459
+
460
+ 示例:
461
+
462
+ ```bash
463
+ codexs rollback
464
+ codexs rollback 20260511-221457-switch
465
+ codexs rollback 20260511-221457-switch --json
466
+ ```
467
+
468
+ 行为说明:
469
+
470
+ - 不带参数时,默认回滚最近一次受管备份
471
+ - 传入 `<backup-id>` 时,回滚到指定备份
472
+
473
+ 交互模式:
474
+
475
+ - 会先展示目标备份和受影响文件,再要求确认
476
+
477
+ 非交互模式:
478
+
479
+ - 直接执行,不会二次确认
480
+
481
+ ## 7. JSON 输出与自动化建议
482
+
483
+ 如果你是在脚本、CI 或 Agent 环境中调用,建议遵循以下约束:
484
+
485
+ ```bash
486
+ codexs <command> --json
487
+ ```
488
+
489
+ 推荐实践:
490
+
491
+ - 始终显式传入必需参数,不依赖交互输入
492
+ - 使用 `--json` 获取稳定输出
493
+ - 对危险命令显式传入控制参数,例如 `--force`、`--merge`、`--overwrite`
494
+ - 对多环境调试使用 `--codex-dir <path>`,避免误改默认 `~/.codex`
495
+
496
+ 适合自动化的例子:
497
+
498
+ ```bash
499
+ codexs list --json
500
+ codexs show packycode --json
501
+ codexs switch packycode --no-login --json
502
+ codexs export ./providers.snapshot.json --force --json
503
+ codexs rollback 20260511-221457-switch --json
504
+ ```
505
+
506
+ ## 8. 典型使用流程
507
+
508
+ ### 8.1 第一次接管现有 Codex 配置
509
+
510
+ ```bash
511
+ codexs setup
512
+ codexs list
513
+ codexs doctor
514
+ ```
515
+
516
+ ### 8.2 新增并切换到一个 provider
517
+
518
+ ```bash
519
+ codexs add my-provider --profile my-provider --api-key sk-xxx
520
+ codexs switch my-provider
521
+ codexs current
522
+ ```
523
+
524
+ ### 8.3 批量迁移 provider 配置
525
+
526
+ ```bash
527
+ codexs export ./providers.backup.json
528
+ codexs import ./team.providers.json --merge
529
+ codexs doctor
530
+ ```
531
+
532
+ ### 8.4 出现错误后恢复
533
+
534
+ ```bash
535
+ codexs backups list
536
+ codexs rollback
537
+ ```
538
+
539
+ 或者:
540
+
541
+ ```bash
542
+ codexs rollback <backup-id>
543
+ ```
544
+
545
+ ## 9. 危险命令说明
546
+
547
+ 以下命令会修改本地配置或覆盖文件,使用前应明确预期:
548
+
549
+ - `setup`
550
+ - `add`
551
+ - `edit`
552
+ - `switch`
553
+ - `remove`
554
+ - `import`
555
+ - `export`(目标文件已存在时)
556
+ - `rollback`
557
+
558
+ 建议:
559
+
560
+ - 人工操作先执行 `backups list`
561
+ - 自动化操作统一加 `--json`
562
+ - 在测试目录中先用 `--codex-dir <path>` 验证流程
563
+
564
+ ## 10. 查看命令帮助
565
+
566
+ 可以查看总帮助:
567
+
568
+ ```bash
569
+ codexs --help
570
+ ```
571
+
572
+ 也可以查看单个命令帮助:
573
+
574
+ ```bash
575
+ codexs help setup
576
+ codexs help add
577
+ codexs help switch
578
+ codexs help backups
579
+ codexs help rollback
580
+ ```
@@ -5,7 +5,7 @@
5
5
  - 文档类型:命令设计文档
6
6
  - 适用范围:`codex-switch` MVP
7
7
  - 关联文档:
8
- - [`codex-switch-prd.md`](./codex-switch-prd.md)
8
+ - [`PRD/codex-switch-prd.md`](./PRD/codex-switch-prd.md)
9
9
  - [`codex-switch-technical-architecture.md`](./codex-switch-technical-architecture.md)
10
10
 
11
11
  ## 1. 文档目标
@@ -9,7 +9,7 @@
9
9
  相关文档:
10
10
 
11
11
  - 研究输入稿:[`codex-switch-product-research.md`](./codex-switch-product-research.md)
12
- - 正式 PRD:[`codex-switch-prd.md`](./codex-switch-prd.md)
12
+ - 正式 PRD:[`PRD/codex-switch-prd.md`](./PRD/codex-switch-prd.md)
13
13
  - 技术架构设计:[`codex-switch-technical-architecture.md`](./codex-switch-technical-architecture.md)
14
14
  - 命令设计说明:[`codex-switch-command-design.md`](./codex-switch-command-design.md)
15
15
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 背景与当前结论
4
4
 
5
- 这份文档的定位不是正式 PRD,而是 `codex-switch` 的前置分析稿。它用于整合当前对参考项目、产品边界和技术方向的判断,并为后续单独编写 `codex-switch-prd.md` 提供输入。
5
+ 这份文档的定位不是正式 PRD,而是 `codex-switch` 的前置分析稿。它用于整合当前对参考项目、产品边界和技术方向的判断,并为后续单独编写 `PRD/codex-switch-prd.md` 提供输入。
6
6
 
7
7
  当前已经相对明确、可以先锁定的基础结论如下:
8
8
 
@@ -317,7 +317,7 @@ Rust / Zig 不是不能做,而是当前收益不足。只有在下面这些诉
317
317
 
318
318
  ## 后续 PRD 输入项
319
319
 
320
- 以下内容应留给后续单独的 `codex-switch-prd.md` 详细展开,这次只列为输入清单,不在本稿中定死:
320
+ 以下内容应留给后续单独的 `PRD/codex-switch-prd.md` 详细展开,这次只列为输入清单,不在本稿中定死:
321
321
 
322
322
  - 目标用户和典型场景
323
323
  - 例如个人多 provider 用户、需要让 AI 执行切换命令的开发者、需要本地安全回滚的用户
@@ -7,7 +7,7 @@
7
7
  - 对应产品文档:
8
8
  - [`codex-switch-product-overview.md`](./codex-switch-product-overview.md)
9
9
  - [`codex-switch-product-research.md`](./codex-switch-product-research.md)
10
- - [`codex-switch-prd.md`](./codex-switch-prd.md)
10
+ - [`PRD/codex-switch-prd.md`](./PRD/codex-switch-prd.md)
11
11
  - [`codex-switch-command-design.md`](./codex-switch-command-design.md)
12
12
 
13
13
  ## 1. 文档目标