@minniexcode/codex-switch 0.0.1
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/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/cli.js +30 -0
- package/docs/codex-switch-prd.md +625 -0
- package/docs/codex-switch-product-overview.md +239 -0
- package/docs/codex-switch-product-research.md +343 -0
- package/package.json +48 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# codex-switch 产品文档
|
|
2
|
+
|
|
3
|
+
## 文档定位
|
|
4
|
+
|
|
5
|
+
这份文档用于介绍 `codex-switch` 是什么、解决什么问题、适合谁用,以及它和现有方案相比的产品价值。
|
|
6
|
+
|
|
7
|
+
它不是实现规格文档,也不是研究笔记。
|
|
8
|
+
|
|
9
|
+
相关文档:
|
|
10
|
+
|
|
11
|
+
- 研究输入稿:[`codex-switch-product-research.md`](./codex-switch-product-research.md)
|
|
12
|
+
- 正式 PRD:[`codex-switch-prd.md`](./codex-switch-prd.md)
|
|
13
|
+
|
|
14
|
+
## 产品概述
|
|
15
|
+
|
|
16
|
+
`codex-switch` 是一个本地优先、默认安全、对 AI 友好的 CLI 工具,用于管理和切换本机 Codex 的 provider/profile 配置。
|
|
17
|
+
|
|
18
|
+
它的产品展示名是:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
codex-switch
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
它的命令名是:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
codexs
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`codex-switch` 的核心目标不是做一个“大而全”的账号系统,也不是先做成桌面应用,而是提供一套轻量、稳定、可安装的命令行产品,让用户和 AI 都能可靠地管理本地 Codex 配置。
|
|
31
|
+
|
|
32
|
+
## 为什么要做这个产品
|
|
33
|
+
|
|
34
|
+
围绕 Codex 配置切换,当前常见方案通常有两个问题:
|
|
35
|
+
|
|
36
|
+
- 太轻
|
|
37
|
+
- 单个脚本可以完成基本切换,但不够产品化,不适合长期维护,也不适合让 AI 稳定调用
|
|
38
|
+
- 太重
|
|
39
|
+
- 一些方案偏桌面 GUI、偏多账号体系、偏代理层控制,不适合只想快速切换本地配置的场景
|
|
40
|
+
|
|
41
|
+
`codex-switch` 填补的是这两者之间的空缺:
|
|
42
|
+
|
|
43
|
+
- 比脚本更标准
|
|
44
|
+
- 比重型工具更轻
|
|
45
|
+
- 比手工改配置更安全
|
|
46
|
+
- 比临时命令更适合 AI 自动化调用
|
|
47
|
+
|
|
48
|
+
## 它解决什么问题
|
|
49
|
+
|
|
50
|
+
`codex-switch` 主要解决以下问题:
|
|
51
|
+
|
|
52
|
+
- 本机维护多个 provider / profile 时,切换过程繁琐
|
|
53
|
+
- 手动修改 `~/.codex/config.toml` 风险高,容易改错
|
|
54
|
+
- 切换后还需要同步处理登录状态或 API key
|
|
55
|
+
- 缺少统一命令去查看当前状态、导入导出配置、做基础诊断
|
|
56
|
+
- AI 代理难以稳定复用临时脚本或手工流程
|
|
57
|
+
|
|
58
|
+
简单说,它把原本零散、不稳定、容易出错的本地切换流程,收敛成一套可预期的产品接口。
|
|
59
|
+
|
|
60
|
+
## 目标用户
|
|
61
|
+
|
|
62
|
+
### 1. 个人开发者
|
|
63
|
+
|
|
64
|
+
这类用户会在同一台机器上使用多个 Codex provider 或多个 profile,希望快速切换,而不想反复手动编辑文件。
|
|
65
|
+
|
|
66
|
+
### 2. 高频切换用户
|
|
67
|
+
|
|
68
|
+
这类用户需要在不同 API key、不同环境配置、不同 provider 之间频繁切换,希望切换动作标准化。
|
|
69
|
+
|
|
70
|
+
### 3. AI 代理使用者
|
|
71
|
+
|
|
72
|
+
这类用户希望让 AI 直接执行:
|
|
73
|
+
|
|
74
|
+
- 查看当前配置
|
|
75
|
+
- 列出可用 provider
|
|
76
|
+
- 切换 provider
|
|
77
|
+
- 导入或导出配置
|
|
78
|
+
- 诊断当前环境
|
|
79
|
+
|
|
80
|
+
### 4. 重视配置安全的用户
|
|
81
|
+
|
|
82
|
+
这类用户不接受“切换失败后手动修配置”的流程,希望所有写操作都先备份,失败后能回滚。
|
|
83
|
+
|
|
84
|
+
## 产品形态
|
|
85
|
+
|
|
86
|
+
`codex-switch` 当前明确采用 CLI-first 形态。
|
|
87
|
+
|
|
88
|
+
这意味着:
|
|
89
|
+
|
|
90
|
+
- 第一阶段只提供命令行接口
|
|
91
|
+
- 所有核心功能都能通过命令完成
|
|
92
|
+
- 重点优化稳定命令、明确输出和自动化兼容性
|
|
93
|
+
- 不依赖 GUI,不依赖后台常驻服务
|
|
94
|
+
|
|
95
|
+
这也是它和一些桌面切换器最大的区别:`codex-switch` 更强调自动化与可调用性,而不是可视化操作界面。
|
|
96
|
+
|
|
97
|
+
## 核心价值
|
|
98
|
+
|
|
99
|
+
### 1. 切换更简单
|
|
100
|
+
|
|
101
|
+
用户不需要手动打开配置文件查找和修改 `profile`,只需要执行一条命令。
|
|
102
|
+
|
|
103
|
+
### 2. 修改更安全
|
|
104
|
+
|
|
105
|
+
所有关键写操作都围绕“先备份、后修改、失败回滚”的原则设计,降低误操作风险。
|
|
106
|
+
|
|
107
|
+
### 3. 对 AI 更友好
|
|
108
|
+
|
|
109
|
+
命令名、参数和输出结构保持稳定,AI 可以把它当成标准工具调用,而不是临时脚本。
|
|
110
|
+
|
|
111
|
+
### 4. 产品边界更清晰
|
|
112
|
+
|
|
113
|
+
它不试图一开始就处理账号全生命周期、可视化界面、复杂路由和远程同步,而是聚焦“本地 provider/profile 管理和切换”这一件事。
|
|
114
|
+
|
|
115
|
+
## 核心能力
|
|
116
|
+
|
|
117
|
+
MVP 的能力范围主要包括:
|
|
118
|
+
|
|
119
|
+
- provider/profile 管理
|
|
120
|
+
- 查看、添加、删除本地 provider 记录
|
|
121
|
+
- 当前状态查看
|
|
122
|
+
- 查看当前生效 profile
|
|
123
|
+
- 查看本地配置整体状态
|
|
124
|
+
- provider 切换
|
|
125
|
+
- 切换到指定 provider
|
|
126
|
+
- 默认联动执行 `codex login --with-api-key`
|
|
127
|
+
- 配置安全
|
|
128
|
+
- 修改前自动备份
|
|
129
|
+
- 失败时自动回滚
|
|
130
|
+
- 配置迁移
|
|
131
|
+
- 导入和导出 `providers.json`
|
|
132
|
+
- 环境诊断
|
|
133
|
+
- 检查配置文件、provider 映射和 CLI 可用性
|
|
134
|
+
|
|
135
|
+
## 产品工作方式
|
|
136
|
+
|
|
137
|
+
`codex-switch` 的工作对象主要围绕 `~/.codex/` 目录:
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
~/.codex/
|
|
141
|
+
config.toml
|
|
142
|
+
auth.json
|
|
143
|
+
providers.json
|
|
144
|
+
backups/
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
其中:
|
|
148
|
+
|
|
149
|
+
- `config.toml` 是主配置文件
|
|
150
|
+
- `providers.json` 是 `codex-switch` 自身维护的 provider 清单
|
|
151
|
+
- `auth.json` 在存在时会被纳入备份与回滚考虑
|
|
152
|
+
- `backups/` 用于保存历史备份
|
|
153
|
+
|
|
154
|
+
产品不会要求用户先理解全部内部实现,只暴露统一的命令接口。
|
|
155
|
+
|
|
156
|
+
## 典型使用流程
|
|
157
|
+
|
|
158
|
+
### 场景 1:查看当前状态
|
|
159
|
+
|
|
160
|
+
用户可以先查看当前生效 profile,以及本地配置是否完整。
|
|
161
|
+
|
|
162
|
+
### 场景 2:列出所有 provider
|
|
163
|
+
|
|
164
|
+
用户可以查看当前有哪些可切换 provider,以及它们分别映射到哪个 profile。
|
|
165
|
+
|
|
166
|
+
### 场景 3:切换到目标 provider
|
|
167
|
+
|
|
168
|
+
用户执行切换命令后,工具会完成校验、备份、修改和必要的登录动作。
|
|
169
|
+
|
|
170
|
+
### 场景 4:出现异常时恢复
|
|
171
|
+
|
|
172
|
+
如果切换失败,工具会自动回滚;如果用户需要手动恢复,也可以通过回滚命令恢复最近一次状态。
|
|
173
|
+
|
|
174
|
+
### 场景 5:迁移到新机器
|
|
175
|
+
|
|
176
|
+
用户可以导出 `providers.json`,在另一台机器上导入,再进行本地校验和切换。
|
|
177
|
+
|
|
178
|
+
## 与其他方案的区别
|
|
179
|
+
|
|
180
|
+
相较于临时脚本,`codex-switch` 的区别在于:
|
|
181
|
+
|
|
182
|
+
- 有稳定命令集
|
|
183
|
+
- 有统一输出格式
|
|
184
|
+
- 有更清晰的产品边界
|
|
185
|
+
- 更适合长期维护
|
|
186
|
+
|
|
187
|
+
相较于 GUI 或重型账号工具,`codex-switch` 的区别在于:
|
|
188
|
+
|
|
189
|
+
- 更轻量
|
|
190
|
+
- 更适合自动化
|
|
191
|
+
- 更适合 AI 调用
|
|
192
|
+
- 聚焦本地 provider/profile,而不是扩展成完整账号平台
|
|
193
|
+
|
|
194
|
+
## 当前明确不做的内容
|
|
195
|
+
|
|
196
|
+
当前版本不做以下内容:
|
|
197
|
+
|
|
198
|
+
- GUI / Desktop App
|
|
199
|
+
- 常驻后台服务
|
|
200
|
+
- 代理转发层
|
|
201
|
+
- 复杂多账号体系
|
|
202
|
+
- 自动智能路由
|
|
203
|
+
- 远程同步
|
|
204
|
+
|
|
205
|
+
这些方向不是永远不做,而是不属于当前产品的首要问题。
|
|
206
|
+
|
|
207
|
+
## 为什么是 TypeScript / Node.js
|
|
208
|
+
|
|
209
|
+
`codex-switch` 当前优先选择 TypeScript / Node.js,不是因为这个产品需要高性能计算,而是因为这条路线更符合它的产品形态:
|
|
210
|
+
|
|
211
|
+
- npm 全局安装体验成熟
|
|
212
|
+
- CLI 生态完善
|
|
213
|
+
- 开发和迭代速度更快
|
|
214
|
+
- 更方便后续扩展交互、JSON 输出和 AI 集成
|
|
215
|
+
|
|
216
|
+
因此,当前阶段真正重要的不是“是否足够底层”,而是:
|
|
217
|
+
|
|
218
|
+
- 命令是否稳定
|
|
219
|
+
- 文件修改是否安全
|
|
220
|
+
- 输出是否易于解析
|
|
221
|
+
- 用户是否容易安装和使用
|
|
222
|
+
|
|
223
|
+
## 成功标准
|
|
224
|
+
|
|
225
|
+
如果 `codex-switch` 能做到以下几点,就说明这个产品方向成立:
|
|
226
|
+
|
|
227
|
+
- 用户可以轻松安装并使用统一 CLI
|
|
228
|
+
- 用户可以可靠地查看、切换和管理本地 provider
|
|
229
|
+
- 切换失败时不会破坏本地配置
|
|
230
|
+
- AI 可以稳定调用关键命令
|
|
231
|
+
- 用户不需要再依赖手工改配置或维护零散脚本
|
|
232
|
+
|
|
233
|
+
## 当前结论
|
|
234
|
+
|
|
235
|
+
`codex-switch` 的产品定位可以概括为:
|
|
236
|
+
|
|
237
|
+
> 一个轻量、可安装、默认安全、对 AI 友好的本地 Codex provider/profile 切换工具。
|
|
238
|
+
|
|
239
|
+
它不是从 GUI 起步,也不是从复杂账号系统起步,而是从最有价值、最容易落地、最适合自动化调用的 CLI 能力起步。
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
# codex-switch 产品研究与 PRD 输入稿
|
|
2
|
+
|
|
3
|
+
## 背景与当前结论
|
|
4
|
+
|
|
5
|
+
这份文档的定位不是正式 PRD,而是 `codex-switch` 的前置分析稿。它用于整合当前对参考项目、产品边界和技术方向的判断,并为后续单独编写 `codex-switch-prd.md` 提供输入。
|
|
6
|
+
|
|
7
|
+
当前已经相对明确、可以先锁定的基础结论如下:
|
|
8
|
+
|
|
9
|
+
- 产品展示名使用 `codex-switch`
|
|
10
|
+
- CLI 命令名使用 `codexs`
|
|
11
|
+
- 第一阶段做 CLI,不做 GUI
|
|
12
|
+
- 技术路线优先 TypeScript / Node.js
|
|
13
|
+
|
|
14
|
+
为什么需要 `codex-switch`:
|
|
15
|
+
|
|
16
|
+
- 现有方案里,有的过重
|
|
17
|
+
- 偏 GUI、偏完整账号体系、偏桌面应用或代理接管,不适合只想快速管理本地 Codex provider/profile 的场景
|
|
18
|
+
- 也有方案过轻
|
|
19
|
+
- 单个 PowerShell 脚本虽然能完成切换,但不够产品化,不利于统一安装、稳定命令调用和后续 AI 使用
|
|
20
|
+
|
|
21
|
+
当前仓库里的 [`codex-provider-switch/README.md`](./codex-provider-switch/README.md) 已经验证了一个最小可行方向:
|
|
22
|
+
|
|
23
|
+
- 切换 `~/.codex/config.toml` 顶层 `profile`
|
|
24
|
+
- 通过 `codex login --with-api-key` 更新当前 API key
|
|
25
|
+
- 在失败时回滚 `config.toml`
|
|
26
|
+
- 以 `providers.json` 维护 provider 到 profile / key 的映射
|
|
27
|
+
|
|
28
|
+
这说明 `codex-switch` 的第一阶段并不需要先做成重型系统。它更像一个“可分发、可维护、对 AI 友好、默认安全”的本地配置管理 CLI。
|
|
29
|
+
|
|
30
|
+
## 参考项目一:codex-auth
|
|
31
|
+
|
|
32
|
+
官方项目:
|
|
33
|
+
|
|
34
|
+
- 仓库:<https://github.com/Loongphy/codex-auth>
|
|
35
|
+
- README:<https://github.com/Loongphy/codex-auth/blob/main/README.md>
|
|
36
|
+
- 命令文档入口:<https://github.com/Loongphy/codex-auth/blob/main/docs/commands/README.md>
|
|
37
|
+
|
|
38
|
+
### 产品定位
|
|
39
|
+
|
|
40
|
+
根据官方 README,`codex-auth` 是一个 command-line tool for switching Codex accounts。它的核心对象是 Codex 的账号 / 认证状态,而不是 provider/profile 映射本身。
|
|
41
|
+
|
|
42
|
+
更具体地说,它解决的是:
|
|
43
|
+
|
|
44
|
+
- 多个 Codex 账号的保存与管理
|
|
45
|
+
- 当前活跃账号的切换
|
|
46
|
+
- 认证文件的导入导出
|
|
47
|
+
- 账号使用状态与限制信息的查看
|
|
48
|
+
|
|
49
|
+
因此它更接近:
|
|
50
|
+
|
|
51
|
+
- 账号管理器
|
|
52
|
+
- 本地认证状态切换器
|
|
53
|
+
- 已经产品化的全局 CLI 工具
|
|
54
|
+
|
|
55
|
+
### 安装与分发方式
|
|
56
|
+
|
|
57
|
+
根据 README,`codex-auth` 的主安装方式是 npm:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install -g @loongphy/codex-auth
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
同时也支持:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx @loongphy/codex-auth list
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
README 还明确写到 npm 包支持 Linux、macOS、Windows 的 x64 / arm64 组合。这说明它虽然是 CLI,但分发思路已经是“可直接安装使用的产品”,而不是仓库里的脚本集合。
|
|
70
|
+
|
|
71
|
+
### 主要命令与功能域
|
|
72
|
+
|
|
73
|
+
根据 README 和命令文档入口,`codex-auth` 至少公开了以下命令域:
|
|
74
|
+
|
|
75
|
+
- 账号管理
|
|
76
|
+
- `list`
|
|
77
|
+
- `login`
|
|
78
|
+
- `switch`
|
|
79
|
+
- `remove`
|
|
80
|
+
- `status`
|
|
81
|
+
- 导入与维护
|
|
82
|
+
- `import`
|
|
83
|
+
- `export`
|
|
84
|
+
- `clean`
|
|
85
|
+
- 配置与后台能力
|
|
86
|
+
- `config`
|
|
87
|
+
- `daemon`
|
|
88
|
+
|
|
89
|
+
从命令集合可以看出,它已经不只是“切换一下 auth.json”,而是在做一整套账号状态管理与刷新机制,包括:
|
|
90
|
+
|
|
91
|
+
- 本地账号注册表维护
|
|
92
|
+
- 认证数据导入导出
|
|
93
|
+
- 使用量 / 限额刷新
|
|
94
|
+
- 可选的后台自动切换
|
|
95
|
+
- 面向多个 Codex 客户端的兼容
|
|
96
|
+
|
|
97
|
+
### 它解决的是账号 / auth 管理,还是 provider / profile 切换
|
|
98
|
+
|
|
99
|
+
结论很明确:`codex-auth` 主要解决的是账号 / auth 管理,不是 provider/profile 切换。
|
|
100
|
+
|
|
101
|
+
依据有三点:
|
|
102
|
+
|
|
103
|
+
- README 直接把产品定义为切换 Codex accounts 的 CLI
|
|
104
|
+
- 主要命令围绕 `login`、`switch account`、`import auth`、`export auth`、usage refresh 展开
|
|
105
|
+
- README 明确提到它面向 Codex CLI、VS Code extension、Codex App,而不只是本地 `config.toml` / `providers.json` 模型
|
|
106
|
+
|
|
107
|
+
所以它与 `codex-switch` 的关系是“产品形态相近,但核心对象不同”:
|
|
108
|
+
|
|
109
|
+
- 相近点:都是 CLI-first,都强调可安装、可切换、可管理
|
|
110
|
+
- 不同点:`codex-auth` 的主对象是账号和认证状态,`codex-switch` 的主对象应是 provider/profile 与本地配置文件
|
|
111
|
+
|
|
112
|
+
### 哪些能力值得借鉴
|
|
113
|
+
|
|
114
|
+
- CLI-first 形态是对的
|
|
115
|
+
- 它证明这类工具可以先以全局 CLI 成型,而不是先做桌面界面
|
|
116
|
+
- npm 分发路线值得借鉴
|
|
117
|
+
- 对 `codex-switch` 来说,这和 TypeScript / Node.js 路线天然一致
|
|
118
|
+
- 命令入口清晰、职责分组明确
|
|
119
|
+
- 这对后续 AI 调用尤其重要
|
|
120
|
+
- `import` / `export` / `status` 这类产品化命令值得保留
|
|
121
|
+
- 它们比单纯脚本更接近可维护工具
|
|
122
|
+
- 兼顾交互式与非交互式调用的思路值得借鉴
|
|
123
|
+
- 人类用户和 AI 代理都能受益
|
|
124
|
+
|
|
125
|
+
### 哪些能力当前不适合直接照搬
|
|
126
|
+
|
|
127
|
+
- 多账号体系本身不是 `codex-switch` 的第一阶段核心
|
|
128
|
+
- usage limit 刷新与远程 API 调用不是当前 MVP 必需能力
|
|
129
|
+
- `daemon`、后台自动切换、实验性自动策略过重
|
|
130
|
+
- 面向 Codex App / VS Code / CLI 的统一账号管理范围过大
|
|
131
|
+
|
|
132
|
+
换句话说,`codex-auth` 值得借鉴的是“工具产品化方法”,不适合直接复制的是“账号系统和后台策略的完整范围”。
|
|
133
|
+
|
|
134
|
+
## 参考项目二:codex-switcher
|
|
135
|
+
|
|
136
|
+
官方项目:
|
|
137
|
+
|
|
138
|
+
- 仓库:<https://github.com/Lampese/codex-switcher>
|
|
139
|
+
- README:<https://github.com/Lampese/codex-switcher/blob/main/README.md>
|
|
140
|
+
|
|
141
|
+
### 产品定位
|
|
142
|
+
|
|
143
|
+
根据 README,`codex-switcher` 的自我定义是:
|
|
144
|
+
|
|
145
|
+
- A Desktop Application for Managing Multiple OpenAI Codex CLI Accounts
|
|
146
|
+
|
|
147
|
+
README 列出的核心功能包括:
|
|
148
|
+
|
|
149
|
+
- Multi-Account Management
|
|
150
|
+
- Quick Switching
|
|
151
|
+
- Usage Monitoring
|
|
152
|
+
- Dual Login Mode
|
|
153
|
+
|
|
154
|
+
因此它本质上也是一个多账号管理工具,但它的产品形态不是纯 CLI,而是桌面应用。
|
|
155
|
+
|
|
156
|
+
### GUI / Desktop 形态
|
|
157
|
+
|
|
158
|
+
这一点在 README 中非常明确:
|
|
159
|
+
|
|
160
|
+
- 它直接把自己定义为 Desktop Application
|
|
161
|
+
- 核心交互强调 single click 切换
|
|
162
|
+
- README 提供的是 `pnpm tauri dev` 与 `pnpm tauri build` 的运行方式
|
|
163
|
+
- 仓库结构里同时存在 `src/` 与 `src-tauri/`
|
|
164
|
+
|
|
165
|
+
这些信息足以说明它的默认交互模式是 GUI-first,而不是 CLI-first。
|
|
166
|
+
|
|
167
|
+
### Tauri / Rust 技术背景与其产品含义
|
|
168
|
+
|
|
169
|
+
`codex-switcher` 使用 Tauri,这一点可以从 README 的构建说明和仓库结构直接确认。
|
|
170
|
+
|
|
171
|
+
它对产品含义的影响比“性能”更重要:
|
|
172
|
+
|
|
173
|
+
- 选择 Tauri,意味着它想做桌面分发形态
|
|
174
|
+
- 使用 Rust,不必然说明这个场景存在高性能需求
|
|
175
|
+
- 更真实的原因通常是:桌面壳层、本地能力封装、安装包产出都跟 Tauri 技术栈绑定
|
|
176
|
+
|
|
177
|
+
也就是说,`codex-switcher` 的 Rust 不是 `codex-switch` 必须跟进的证据。它更像是“因为要做桌面应用,所以自然进入 Rust + Web UI 的组合”。
|
|
178
|
+
|
|
179
|
+
### 主要功能模块
|
|
180
|
+
|
|
181
|
+
基于 README 可确认的模块包括:
|
|
182
|
+
|
|
183
|
+
- 多账号管理
|
|
184
|
+
- 一键切换
|
|
185
|
+
- 实时 usage 监控
|
|
186
|
+
- OAuth 登录
|
|
187
|
+
- 导入现有 `auth.json`
|
|
188
|
+
|
|
189
|
+
以下判断属于推断,但与 README 表述一致:
|
|
190
|
+
|
|
191
|
+
- 它的核心对象仍然偏账号 / auth,而不是 provider/profile 抽象
|
|
192
|
+
- 它更强调可视化状态呈现与交互便利
|
|
193
|
+
- 它对单机桌面用户更友好,但不如稳定命令接口那样适合被 AI 代理直接调用
|
|
194
|
+
|
|
195
|
+
### 哪些交互 / 能力值得借鉴
|
|
196
|
+
|
|
197
|
+
- 状态可见性强
|
|
198
|
+
- 即使 `codex-switch` 不做 GUI,也可以借鉴“状态汇总要直观”的思路,体现在 `status` / `doctor` 输出里
|
|
199
|
+
- 多账号或多配置切换的路径足够短
|
|
200
|
+
- 这提醒 `codex-switch` 的命令设计要减少步骤
|
|
201
|
+
- 导入既有本地文件的能力值得借鉴
|
|
202
|
+
- 说明用户迁移成本要低
|
|
203
|
+
|
|
204
|
+
### 哪些方向不符合 codex-switch 的 CLI-first 目标
|
|
205
|
+
|
|
206
|
+
- GUI-first 本身不符合当前方向
|
|
207
|
+
- Tauri / Rust 桌面分发不是当前第一阶段需要承担的复杂度
|
|
208
|
+
- 以账号池、使用量面板、可视化 dashboard 为中心的产品心智,不适合当前 CLI 工具边界
|
|
209
|
+
|
|
210
|
+
## 对比分析
|
|
211
|
+
|
|
212
|
+
| 维度 | `codex-auth` | `codex-switcher` | 对 `codex-switch` 的启发 |
|
|
213
|
+
| --- | --- | --- | --- |
|
|
214
|
+
| 产品形态 | CLI | Desktop App / GUI | 第一阶段更应靠近 CLI |
|
|
215
|
+
| 核心对象 | 账号 / auth 状态 | 账号 / auth 状态 | `codex-switch` 需要把核心对象收敛到 provider/profile |
|
|
216
|
+
| 安装方式 | npm 全局安装 / `npx` | 从源码构建,依赖 Node.js、pnpm、Rust,产出 Tauri 应用 | 对 CLI-first MVP 来说,npm 分发更轻 |
|
|
217
|
+
| 交互方式 | 命令驱动,可交互也可脚本化 | 图形界面、一键点击、桌面操作 | AI 调用更偏好稳定 CLI |
|
|
218
|
+
| 是否适合 AI 调用 | 较适合 | 较不适合 | `codex-switch` 应优先提供稳定命令和 `--json` 输出 |
|
|
219
|
+
| 技术栈选择的真实原因 | 更像产品化 CLI 分发与作者实现选择,不是因为高 IO 压力 | 更像桌面应用形态带来的 Tauri / Rust 绑定 | 技术选型应服务产品形态,而不是为了“显得更底层” |
|
|
220
|
+
| 对 `codex-switch` 的可借鉴点 | 命令分组、安装分发、导入导出、状态命令 | 状态可见性、切换路径短、迁移已有本地文件 | 以 `codex-auth` 为主参考,以 `codex-switcher` 的部分交互思想为辅 |
|
|
221
|
+
|
|
222
|
+
从这个对比可以直接得到两个重要结论:
|
|
223
|
+
|
|
224
|
+
- `codex-switch` 在产品形态上明显更像 `codex-auth`
|
|
225
|
+
- `codex-switcher` 的 Rust / Tauri 选择,不能直接推出 `codex-switch` 也应走原生桌面路线
|
|
226
|
+
|
|
227
|
+
## codex-switch 当前产品方向
|
|
228
|
+
|
|
229
|
+
### 为什么更像 codex-auth,而不是 codex-switcher
|
|
230
|
+
|
|
231
|
+
`codex-switch` 当前要解决的问题是:
|
|
232
|
+
|
|
233
|
+
- 读取本地 `~/.codex/config.toml`
|
|
234
|
+
- 读取和维护本地 `providers.json`
|
|
235
|
+
- 在多个 provider/profile 之间切换
|
|
236
|
+
- 在修改真实配置前做备份、校验和回滚
|
|
237
|
+
|
|
238
|
+
这个问题天然更适合 CLI:
|
|
239
|
+
|
|
240
|
+
- 命令边界清楚
|
|
241
|
+
- 易于全局安装
|
|
242
|
+
- 易于被脚本和 AI 调用
|
|
243
|
+
- 不要求用户打开桌面应用
|
|
244
|
+
|
|
245
|
+
相反,如果先做 GUI,会让第一阶段立刻承担额外复杂度:
|
|
246
|
+
|
|
247
|
+
- 界面状态管理
|
|
248
|
+
- 打包与跨平台桌面分发
|
|
249
|
+
- UI 与底层逻辑的双层维护
|
|
250
|
+
|
|
251
|
+
因此它在产品路径上更接近 `codex-auth` 的 CLI-first 思路,而不是 `codex-switcher` 的 desktop-first 思路。
|
|
252
|
+
|
|
253
|
+
### 为什么 TypeScript 足够,Rust / Zig 不是当前必要条件
|
|
254
|
+
|
|
255
|
+
从当前需求看,核心操作主要是:
|
|
256
|
+
|
|
257
|
+
- 读取 `config.toml`
|
|
258
|
+
- 读取和写入 `providers.json`
|
|
259
|
+
- 调用 `codex login --with-api-key`
|
|
260
|
+
- 做备份、回滚、导入导出、诊断
|
|
261
|
+
|
|
262
|
+
这些都不是高频计算,也不是重并发服务,几乎不构成“必须用 Rust / Zig 才能解决”的性能问题。
|
|
263
|
+
|
|
264
|
+
当前阶段更重要的是:
|
|
265
|
+
|
|
266
|
+
- 安装是否简单
|
|
267
|
+
- 命令是否稳定
|
|
268
|
+
- 文件修改是否安全
|
|
269
|
+
- 备份 / 回滚是否可靠
|
|
270
|
+
- AI 是否容易调用
|
|
271
|
+
|
|
272
|
+
TypeScript / Node.js 在这些点上的现实优势更强:
|
|
273
|
+
|
|
274
|
+
- npm 全局分发成熟
|
|
275
|
+
- CLI 生态成熟
|
|
276
|
+
- 开发速度快,迭代成本低
|
|
277
|
+
- 后续加 `--json`、交互式命令、配置校验都方便
|
|
278
|
+
|
|
279
|
+
Rust / Zig 不是不能做,而是当前收益不足。只有在下面这些诉求变强时,它们才更值得考虑:
|
|
280
|
+
|
|
281
|
+
- 强烈要求零 Node.js 依赖
|
|
282
|
+
- 明确要分发单文件原生二进制
|
|
283
|
+
- 计划进入桌面 GUI 版本
|
|
284
|
+
- 希望把底层逻辑下沉为原生模块长期复用
|
|
285
|
+
|
|
286
|
+
### MVP 的核心边界
|
|
287
|
+
|
|
288
|
+
`codex-switch` 第一阶段建议只保留以下高价值核心能力:
|
|
289
|
+
|
|
290
|
+
- provider/profile 管理
|
|
291
|
+
- 至少支持 list、current、add、remove
|
|
292
|
+
- 切换
|
|
293
|
+
- 至少支持 `switch <provider>`
|
|
294
|
+
- 备份与回滚
|
|
295
|
+
- 对 `config.toml` 和必要配置文件先备份,失败时可恢复
|
|
296
|
+
- 导入导出
|
|
297
|
+
- 允许迁移或备份 `providers.json`
|
|
298
|
+
- 状态诊断
|
|
299
|
+
- 至少支持 `status` 与 `doctor`
|
|
300
|
+
|
|
301
|
+
这些能力和当前仓库里的 PowerShell 最小方案是一致的,只是会从脚本升级为更标准的产品化 CLI。
|
|
302
|
+
|
|
303
|
+
### 当前明确不做的内容
|
|
304
|
+
|
|
305
|
+
- GUI
|
|
306
|
+
- 常驻后台服务
|
|
307
|
+
- 重代理层
|
|
308
|
+
- 复杂账号系统
|
|
309
|
+
- 自动智能路由
|
|
310
|
+
- 远程同步依赖
|
|
311
|
+
- 需要联网才能工作的核心主流程
|
|
312
|
+
|
|
313
|
+
这里尤其要强调两点:
|
|
314
|
+
|
|
315
|
+
- 不做 GUI,是为了先把核心切换能力做稳
|
|
316
|
+
- 不做复杂账号系统,是为了避免把 `codex-switch` 变成另一个 `codex-auth`
|
|
317
|
+
|
|
318
|
+
## 后续 PRD 输入项
|
|
319
|
+
|
|
320
|
+
以下内容应留给后续单独的 `codex-switch-prd.md` 详细展开,这次只列为输入清单,不在本稿中定死:
|
|
321
|
+
|
|
322
|
+
- 目标用户和典型场景
|
|
323
|
+
- 例如个人多 provider 用户、需要让 AI 执行切换命令的开发者、需要本地安全回滚的用户
|
|
324
|
+
- 最终命令集
|
|
325
|
+
- 哪些命令进入首发,哪些进入后续版本
|
|
326
|
+
- `providers.json` / 本地配置模型
|
|
327
|
+
- 字段、默认路径、兼容与迁移策略
|
|
328
|
+
- 安全与凭据处理
|
|
329
|
+
- 明文 key、日志脱敏、导出限制、失败回滚规则
|
|
330
|
+
- 安装与发布方式
|
|
331
|
+
- npm 全局安装、`npx`、是否需要后续二进制分发
|
|
332
|
+
- 成功标准与版本分层
|
|
333
|
+
- MVP 判定标准、后续增强版边界、哪些能力必须延后
|
|
334
|
+
|
|
335
|
+
## 当前结论
|
|
336
|
+
|
|
337
|
+
这次合并后的研究结论可以压缩为三句话:
|
|
338
|
+
|
|
339
|
+
> `codex-switch` 当前应定位为一个 CLI-first、本地优先、默认安全、对 AI 友好的 provider/profile 切换工具。
|
|
340
|
+
>
|
|
341
|
+
> 它在产品形态上更接近 `codex-auth`,但核心对象应从账号 / auth 收敛为 provider/profile 与本地配置管理。
|
|
342
|
+
>
|
|
343
|
+
> 现阶段优先使用 TypeScript / Node.js,先把切换、备份回滚、导入导出和状态诊断做稳,再单独编写正式 PRD。
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@minniexcode/codex-switch",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Local-first CLI for managing and switching Codex provider/profile configuration.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "commonjs",
|
|
7
|
+
"bin": {
|
|
8
|
+
"codexs": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"docs",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"codex",
|
|
18
|
+
"cli",
|
|
19
|
+
"switch",
|
|
20
|
+
"provider",
|
|
21
|
+
"profile",
|
|
22
|
+
"automation"
|
|
23
|
+
],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/minniexcode/codex-switch.git"
|
|
30
|
+
},
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/minniexcode/codex-switch/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/minniexcode/codex-switch#readme",
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc",
|
|
40
|
+
"prepare": "npm run build",
|
|
41
|
+
"start": "node ./dist/cli.js",
|
|
42
|
+
"test": "node ./dist/cli.js --help"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^24.9.1",
|
|
46
|
+
"typescript": "^5.9.3"
|
|
47
|
+
}
|
|
48
|
+
}
|