@minniexcode/codex-switch 0.0.5 → 0.0.7
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 +5 -2
- package/README.md +44 -100
- package/dist/app/add-provider.js +28 -4
- package/dist/app/edit-provider.js +47 -19
- package/dist/app/export-providers.js +2 -2
- package/dist/app/get-current-profile.js +1 -1
- package/dist/app/get-status.js +10 -3
- package/dist/app/import-providers.js +15 -7
- package/dist/app/init-codex.js +68 -0
- package/dist/app/list-backups.js +1 -1
- package/dist/app/list-config-profiles.js +3 -2
- package/dist/app/list-providers.js +2 -1
- package/dist/app/remove-provider.js +2 -2
- package/dist/app/rollback-backup.js +1 -1
- package/dist/app/rollback-latest.js +1 -1
- package/dist/app/run-doctor.js +83 -6
- package/dist/app/run-mutation.js +2 -2
- package/dist/app/setup-codex.js +21 -12
- package/dist/app/show-config.js +11 -3
- package/dist/app/show-provider.js +1 -1
- package/dist/app/switch-provider.js +16 -9
- package/dist/cli/add-interactive.js +7 -104
- package/dist/cli/args.js +6 -135
- package/dist/cli/help.js +8 -313
- package/dist/cli/interactive.js +17 -225
- package/dist/cli/output.js +21 -6
- package/dist/cli/prompt.js +4 -106
- package/dist/cli.js +10 -404
- package/dist/commands/args.js +132 -0
- package/dist/commands/dispatch.js +16 -0
- package/dist/commands/handlers.js +460 -0
- package/dist/commands/help.js +120 -0
- package/dist/commands/registry.js +351 -0
- package/dist/commands/types.js +2 -0
- package/dist/domain/config.js +235 -21
- package/dist/domain/providers.js +16 -2
- package/dist/domain/setup.js +1 -0
- package/dist/infra/backup-repo.js +9 -206
- package/dist/infra/codex-cli.js +9 -126
- package/dist/infra/codex-paths.js +6 -67
- package/dist/infra/config-repo.js +59 -0
- package/dist/infra/fs-utils.js +8 -93
- package/dist/infra/lock-repo.js +4 -95
- package/dist/infra/providers-repo.js +8 -94
- package/dist/interaction/add-interactive.js +99 -0
- package/dist/interaction/interactive.js +289 -0
- package/dist/interaction/prompt.js +110 -0
- package/dist/runtime/codex-cli.js +130 -0
- package/dist/runtime/codex-probe.js +57 -0
- package/dist/runtime/types.js +2 -0
- package/dist/storage/auth-repo.js +160 -0
- package/dist/storage/backup-repo.js +210 -0
- package/dist/storage/codex-paths.js +71 -0
- package/dist/storage/config-repo.js +266 -0
- package/dist/storage/fs-utils.js +97 -0
- package/dist/storage/lock-repo.js +99 -0
- package/dist/storage/providers-repo.js +98 -0
- package/docs/Design/codex-switch-v0.0.5-design.md +32 -22
- package/docs/Design/codex-switch-v0.0.6-design.md +708 -0
- package/docs/Design/codex-switch-v0.0.7-design.md +862 -0
- package/docs/PRD/codex-switch-prd-v0.0.5-to-v0.1.0.md +227 -89
- package/docs/PRD/codex-switch-prd-v0.1.0.md +200 -226
- package/docs/PRD/codex-switch-prd.md +1 -1
- package/docs/Reference/codex-config-reference.md +604 -0
- package/docs/Reference/codex-config-reference.zh-CN.md +633 -0
- package/docs/cli-usage.md +78 -29
- package/docs/codex-switch-technical-architecture.md +73 -4
- package/docs/test-report-0.0.5.md +163 -0
- package/docs/test-report-0.0.7.md +118 -0
- package/docs/testing.md +151 -0
- package/package.json +1 -1
|
@@ -121,29 +121,31 @@
|
|
|
121
121
|
```ts
|
|
122
122
|
type ManagedProfileFields = {
|
|
123
123
|
model: string;
|
|
124
|
-
|
|
124
|
+
modelProvider: string;
|
|
125
125
|
};
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
规则:
|
|
129
129
|
|
|
130
|
-
- `model` 和 `
|
|
131
|
-
- 写命令创建 profile section 时,必须同时具备 `model` 和 `
|
|
130
|
+
- `model` 和 `model_provider` 是当前唯一正式受管 profile 字段
|
|
131
|
+
- 写命令创建 profile section 时,必须同时具备 `model` 和 `model_provider`
|
|
132
132
|
- 未提供任一必需字段时,不允许创建新的受管 section
|
|
133
133
|
- `apiKey` 继续只保存在 `providers.json`
|
|
134
134
|
- `note`、`tags` 等 provider 管理字段不进入 `config.toml`
|
|
135
|
+
- `[model_providers.<name>].base_url` 继续由 Codex runtime config 承载,`codex-switch` 首版只读校验,不负责创建
|
|
135
136
|
|
|
136
137
|
字段归属直接锁定如下:
|
|
137
138
|
|
|
138
|
-
- `[profiles.<name>]`:`model`、`
|
|
139
|
-
- `
|
|
139
|
+
- `[profiles.<name>]`:`model`、`model_provider`
|
|
140
|
+
- `[model_providers.<name>]`:`base_url`
|
|
141
|
+
- `providers.json`:`profile`、`apiKey`、可选 `baseUrl`、`note`、`tags`
|
|
140
142
|
- `auth.json`:当前激活 provider 对应的运行态认证内容
|
|
141
143
|
|
|
142
144
|
设计原因:
|
|
143
145
|
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
- 因此 `0.0.5`
|
|
146
|
+
- 你的使用场景是“中转站”,真正的 runtime 路由由 `profiles.<name>.model_provider -> model_providers.<name>.base_url` 共同定义
|
|
147
|
+
- 如果只维护 provider 名称映射,而不校验 `model_provider` 与 `model_providers` 的一致性,切换后就可能出现 profile 名变了但 runtime endpoint 仍落到错误上游的分裂状态
|
|
148
|
+
- 因此 `0.0.5` 需要把 `model_provider` 视为 profile runtime projection 的正式字段,并把 `base_url` 作为解析视图与一致性校验的一部分
|
|
147
149
|
|
|
148
150
|
### 5.2 `ManagedProfileView`
|
|
149
151
|
|
|
@@ -158,6 +160,7 @@ type ManagedProfileView = {
|
|
|
158
160
|
isActive: boolean;
|
|
159
161
|
linkedProviders: string[];
|
|
160
162
|
model: string | null;
|
|
163
|
+
modelProvider: string | null;
|
|
161
164
|
baseUrl: string | null;
|
|
162
165
|
managedFields: string[];
|
|
163
166
|
source: "managed" | "unmanaged" | "orphaned-reference";
|
|
@@ -171,8 +174,9 @@ type ManagedProfileView = {
|
|
|
171
174
|
- `isActive`:是否为顶层 active profile
|
|
172
175
|
- `linkedProviders`:引用该 profile 的 provider 名列表
|
|
173
176
|
- `model`:可识别的受管 `model` 值;不存在或不受管时为 `null`
|
|
174
|
-
- `
|
|
175
|
-
- `
|
|
177
|
+
- `modelProvider`:可识别的受管 `model_provider` 值;不存在或不受管时为 `null`
|
|
178
|
+
- `baseUrl`:通过 `model_provider -> model_providers.<name>.base_url` 解析出的 runtime endpoint;缺失时为 `null`
|
|
179
|
+
- `managedFields`:当前识别到并纳入正式受管的字段名数组;`0.0.5` 只可能为 `[]`、`["model"]`、`["model_provider"]` 或 `["model", "model_provider"]`
|
|
176
180
|
- `source`:
|
|
177
181
|
- `managed`:section 存在且被 provider 引用
|
|
178
182
|
- `unmanaged`:section 存在但没有 provider 引用
|
|
@@ -287,7 +291,9 @@ patch 规则直接锁定:
|
|
|
287
291
|
|
|
288
292
|
- 顶层 `profile = "..."`
|
|
289
293
|
- `[profiles.<name>]`
|
|
294
|
+
- `[model_providers.<name>]`
|
|
290
295
|
- `model = "..."`
|
|
296
|
+
- `model_provider = "..."`
|
|
291
297
|
- `base_url = "..."`
|
|
292
298
|
|
|
293
299
|
其余字段允许原样存在,但:
|
|
@@ -411,8 +417,9 @@ JSON 最小字段:
|
|
|
411
417
|
"isActive": true,
|
|
412
418
|
"linkedProviders": ["packycode"],
|
|
413
419
|
"model": "gpt-5",
|
|
420
|
+
"modelProvider": "packycode",
|
|
414
421
|
"baseUrl": "https://relay.example.com/v1",
|
|
415
|
-
"managedFields": ["model", "
|
|
422
|
+
"managedFields": ["model", "model_provider"],
|
|
416
423
|
"source": "managed"
|
|
417
424
|
}
|
|
418
425
|
]
|
|
@@ -453,6 +460,7 @@ codexs config list-profiles [--json] [--codex-dir <path>]
|
|
|
453
460
|
- `isActive`
|
|
454
461
|
- `linkedProviders`
|
|
455
462
|
- `model`
|
|
463
|
+
- `modelProvider`
|
|
456
464
|
- `baseUrl`
|
|
457
465
|
- `source`
|
|
458
466
|
|
|
@@ -468,8 +476,9 @@ codexs config list-profiles [--json] [--codex-dir <path>]
|
|
|
468
476
|
规则锁定如下:
|
|
469
477
|
|
|
470
478
|
- 当目标 profile 已存在时,只建立 provider -> profile 映射
|
|
471
|
-
- 当目标 profile 缺失时,只有同时传入 `--create-profile --model <name
|
|
472
|
-
- 只传 `--create-profile` 但缺少 `--model
|
|
479
|
+
- 当目标 profile 缺失时,只有同时传入 `--create-profile --model <name>` 且 `config.toml` 中已存在同名 `[model_providers.<profile>]` section 时才允许创建 section
|
|
480
|
+
- 只传 `--create-profile` 但缺少 `--model`,返回 `MANAGED_PROFILE_FIELDS_MISSING`
|
|
481
|
+
- 若缺少同名 `model_providers` section 或其 `base_url`,返回 `PROFILE_NOT_FOUND` 或 `MANAGED_PROFILE_FIELDS_MISSING`
|
|
473
482
|
- 不允许写出 provider 指向缺失 profile 的新状态
|
|
474
483
|
|
|
475
484
|
### 10.2 `edit <provider>`
|
|
@@ -477,10 +486,10 @@ codexs config list-profiles [--json] [--codex-dir <path>]
|
|
|
477
486
|
规则锁定如下:
|
|
478
487
|
|
|
479
488
|
- 改绑到已有 profile:更新 provider 映射并重新计算 active / shared 关系
|
|
480
|
-
- 改绑到缺失 profile:只有 `--create-profile --model <name
|
|
489
|
+
- 改绑到缺失 profile:只有 `--create-profile --model <name>` 且存在同名 `model_providers` runtime section 时才允许
|
|
481
490
|
- 旧 section 不做隐式 rename
|
|
482
491
|
- 旧 section 不做隐式 copy
|
|
483
|
-
- 旧 section 不做隐式 `model` / `
|
|
492
|
+
- 旧 section 不做隐式 `model` / `model_provider` 迁移
|
|
484
493
|
|
|
485
494
|
删除旧 section 的规则:
|
|
486
495
|
|
|
@@ -603,7 +612,7 @@ codexs config list-profiles [--json] [--codex-dir <path>]
|
|
|
603
612
|
`MANAGED_PROFILE_FIELDS_MISSING`:
|
|
604
613
|
|
|
605
614
|
- 需要创建新的受管 profile section,但缺少最小字段
|
|
606
|
-
- `0.0.5` 至少用于缺少 `model` 或 `
|
|
615
|
+
- `0.0.5` 至少用于缺少 `model` 或 `model_provider`
|
|
607
616
|
|
|
608
617
|
### 12.3 明确不进入 `0.0.5` 的错误语义
|
|
609
618
|
|
|
@@ -723,7 +732,7 @@ codexs config list-profiles [--json] [--codex-dir <path>]
|
|
|
723
732
|
- 新命令帮助文案
|
|
724
733
|
- `config show` / `config list-profiles` 的文本渲染
|
|
725
734
|
- `setup` 多候选目录选择交互
|
|
726
|
-
- adopt
|
|
735
|
+
- adopt 辅助交互的最小提示
|
|
727
736
|
|
|
728
737
|
## 14. 关键流程时序
|
|
729
738
|
|
|
@@ -748,7 +757,7 @@ argv
|
|
|
748
757
|
-> executeCommand("add")
|
|
749
758
|
-> app/add-provider
|
|
750
759
|
-> read providers.json + structured config
|
|
751
|
-
-> validate create-profile + model/
|
|
760
|
+
-> validate create-profile + model/model_provider preconditions
|
|
752
761
|
-> domain/config.planProfileLifecycleOutcome
|
|
753
762
|
-> infra/config-repo.planConfigMutation
|
|
754
763
|
-> app/run-mutation
|
|
@@ -765,7 +774,7 @@ argv
|
|
|
765
774
|
-> app/edit-provider
|
|
766
775
|
-> load provider + structured config
|
|
767
776
|
-> resolve new profile target
|
|
768
|
-
-> create missing profile only when --create-profile --model
|
|
777
|
+
-> create missing profile only when --create-profile --model is present and matching model_provider runtime section already exists
|
|
769
778
|
-> update provider mapping
|
|
770
779
|
-> keep or delete old section based on shared/active rules
|
|
771
780
|
-> single mutation transaction
|
|
@@ -822,7 +831,8 @@ argv
|
|
|
822
831
|
|
|
823
832
|
- `doctor` 识别问题并给出问题码
|
|
824
833
|
- `status` 给出浅层信号,不做静默修复
|
|
825
|
-
- `setup`
|
|
834
|
+
- `setup` 在交互模式下承接 adopt
|
|
835
|
+
- `import --merge` 保持显式失败,不为缺失 `model_providers` runtime section 做交互 repair
|
|
826
836
|
- 非交互模式遇到不可自动收敛状态时失败,并返回明确原因
|
|
827
837
|
|
|
828
838
|
### 15.3 `doctor` 与 `status` 的责任差异
|
|
@@ -859,8 +869,8 @@ argv
|
|
|
859
869
|
- `setup` 多候选目录 + TTY 选择
|
|
860
870
|
- `setup` 无候选目录 + TTY 手动输入
|
|
861
871
|
- `setup` 多候选目录 + 非交互失败 `CODEX_DIR_AMBIGUOUS`
|
|
862
|
-
- `add --create-profile --model
|
|
863
|
-
- `edit --profile <missing> --create-profile --model
|
|
872
|
+
- `add --create-profile --model` with existing same-named `[model_providers.*]`
|
|
873
|
+
- `edit --profile <missing> --create-profile --model` with existing same-named `[model_providers.*]`
|
|
864
874
|
- `remove --switch-to`
|
|
865
875
|
|
|
866
876
|
### 16.3 Application 测试
|