@minniexcode/codex-switch 0.0.2 → 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.
@@ -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. 文档目标
@@ -236,6 +236,27 @@ scripts/
236
236
  - 文件访问
237
237
  - 输出格式化
238
238
 
239
+ #### `src/cli/prompt.ts`
240
+
241
+ 负责:
242
+
243
+ - 对 `inquirer` 做轻量封装
244
+ - 提供 `input` / `password` / `select` / `confirm` 四类 typed 交互能力
245
+ - 把 prompt 取消统一转换成稳定 CLI 错误
246
+
247
+ 不负责:
248
+
249
+ - 业务判断某个命令是否应该进入交互
250
+ - 直接读写 provider/config 文件
251
+
252
+ #### `src/cli/interactive.ts`
253
+
254
+ 负责:
255
+
256
+ - 统一判定何时允许交互
257
+ - 组合 provider 选择、危险确认、rollback 摘要展示等 CLI 级辅助逻辑
258
+ - 保持命令分支对交互的接入方式一致
259
+
239
260
  #### `src/cli/output.ts`
240
261
 
241
262
  负责:
@@ -524,19 +545,20 @@ scripts/
524
545
 
525
546
  流程如下:
526
547
 
527
- 1. 获取单操作写锁
528
- 2. 读取并解析 `providers.json`
529
- 3. 校验目标 provider 是否存在
530
- 4. 读取 `config.toml`
531
- 5. 校验 provider 对应的 `profile` 在配置中存在
532
- 6. 创建备份:
548
+ 1. CLI 层在 TTY 且 `<provider>` 缺失时,先用 selector 选 provider
549
+ 2. 获取单操作写锁
550
+ 3. 读取并解析 `providers.json`
551
+ 4. 校验目标 provider 是否存在
552
+ 5. 读取 `config.toml`
553
+ 6. 校验 provider 对应的 `profile` 在配置中存在
554
+ 7. 创建备份:
533
555
  - `config.toml`
534
556
  - `auth.json`(如果存在)
535
- 7. 更新顶层 `profile`
536
- 8. 如果未传 `--no-login`,执行 `codex login --with-api-key`
537
- 9. 成功后把这次备份记录为 `latest.json`
538
- 10. 若任何步骤失败,按 manifest 回滚
539
- 11. 释放写锁
557
+ 8. 更新顶层 `profile`
558
+ 9. 如果未传 `--no-login`,执行 `codex login --with-api-key`
559
+ 10. 成功后把这次备份记录为 `latest.json`
560
+ 11. 若任何步骤失败,按 manifest 回滚
561
+ 12. 释放写锁
540
562
 
541
563
  #### 为什么 `switch` 必须由应用层编排
542
564
 
@@ -625,11 +647,13 @@ failure path:
625
647
 
626
648
  流程:
627
649
 
628
- 1. 读取外部文件
629
- 2. 校验 JSON 和 schema
630
- 3. 备份当前 `providers.json`
631
- 4. 整体替换写入
632
- 5. 写失败则恢复旧文件
650
+ 1. CLI 层保留显式路径参数
651
+ 2. TTY 中写入前先确认
652
+ 3. 读取外部文件
653
+ 4. 校验 JSON 和 schema
654
+ 5. 备份当前 `providers.json`
655
+ 6. 整体替换写入
656
+ 7. 写失败则恢复旧文件
633
657
 
634
658
  当前明确不支持 merge import。
635
659
 
@@ -639,37 +663,46 @@ failure path:
639
663
 
640
664
  1. 读取当前 `providers.json`
641
665
  2. 检查目标文件是否存在
642
- 3. 默认拒绝覆盖
643
- 4. 传入 `--force` 时允许覆盖
666
+ 3. TTY 中若文件已存在且未传 `--force`,先确认是否覆盖
667
+ 4. 默认拒绝覆盖
668
+ 5. 传入 `--force` 或确认覆盖时允许写入
644
669
 
645
670
  ### 6.8 `add`
646
671
 
647
672
  流程:
648
673
 
649
- 1. 读取现有 provider 集合
650
- 2. 校验重名
651
- 3. 备份旧文件
652
- 4. 追加一条 provider 记录
653
- 5. 写回 `providers.json`
674
+ 1. CLI 层仅在缺失必填字段且当前是 TTY 时进入交互
675
+ 2. provider 名在 prompt 阶段尽早做重名检查
676
+ 3. profile 优先从 `config.toml` 里解析出的现有 profile 列表选择
677
+ 4. apiKey 通过隐藏输入采集并二次确认
678
+ 5. 读取现有 provider 集合
679
+ 6. 校验重名
680
+ 7. 备份旧文件
681
+ 8. 追加一条 provider 记录
682
+ 9. 写回 `providers.json`
654
683
 
655
684
  ### 6.9 `remove`
656
685
 
657
686
  流程:
658
687
 
659
- 1. 校验 provider 存在
660
- 2. 要求显式 `--force`
661
- 3. 备份 `providers.json`
662
- 4. 删除目标 provider
663
- 5. 写回
688
+ 1. CLI 层在 TTY 且缺少 provider 时可先选择 provider
689
+ 2. CLI 层在 TTY 中始终做删除确认
690
+ 3. TTY 或 `--json` 场景继续要求显式 `--force`
691
+ 4. 校验 provider 存在
692
+ 5. 备份 `providers.json`
693
+ 6. 删除目标 provider
694
+ 7. 写回
664
695
 
665
696
  ### 6.10 `rollback`
666
697
 
667
698
  流程:
668
699
 
669
- 1. 读取 `backups/latest.json`
670
- 2. 加载最近一次 manifest
671
- 3. 按 manifest 恢复文件
672
- 4. 返回恢复文件列表和备份目录
700
+ 1. TTY 中先读取 `backups/latest.json`
701
+ 2. 展示备份目录和待恢复文件摘要
702
+ 3. 请求确认
703
+ 4. 加载最近一次 manifest
704
+ 5. 按 manifest 恢复文件
705
+ 6. 返回恢复文件列表和备份目录
673
706
 
674
707
  #### `rollback` 时序图
675
708
 
@@ -934,15 +967,23 @@ tests/
934
967
 
935
968
  从 MVP 可用性上没问题,但长期更推荐拆成专门的 CLI availability 错误。
936
969
 
937
- ### 13.3 当前没有真正的交互式命令层
970
+ ### 13.3 当前交互式命令层范围仍然受控
971
+
972
+ 当前 CLI 仍以显式参数模式为主,但已经把 `inquirer` 交互扩展到了高频写命令:
973
+
974
+ - `add` 缺失必填字段时的渐进式提问
975
+ - `switch` 的 provider 选择
976
+ - `remove` 的 provider 选择与确认
977
+ - `import` / `export` 的危险确认
978
+ - `rollback` 的恢复确认
938
979
 
939
- 现在所有命令都是显式参数模式,没有:
980
+ 当前仍然没有:
940
981
 
941
- - 交互式 provider 选择
942
- - 向导式 add/import
982
+ - 路径向导式 import/export
943
983
  - TUI 状态面板
984
+ - 脱离显式参数契约的自动化交互
944
985
 
945
- 这符合 PRD 的 MVP 边界。
986
+ 这继续保持了 CLI-first 和自动化优先的主体边界。
946
987
 
947
988
  ### 13.4 尚未引入持久化审计日志
948
989