codex-model-change 1.0.5 → 1.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.
Files changed (3) hide show
  1. package/README.md +16 -3
  2. package/cx.py +13 -12
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -44,14 +44,14 @@ cd codex-model-change
44
44
  | 命令 | 作用 |
45
45
  |---|---|
46
46
  | `cx status` | 查看默认模型 / provider / 最近会话各自用的模型 |
47
- | `cx use deepseek` | 切换到 DeepSeek 直连(改写 `~/.codex/config.toml`,自动备份) |
47
+ | `cx fix-all deepseek\|gpt` | **批量把所有老会话切换到目标模型**(需退 App);切到 gpt 时自动清理旧代理遗留的不兼容历史条目(`reasoning.content` 等),避免续聊报 `Invalid 'input[..].content'` |
48
+ | `cx fix-all deepseek --limit 10` | 只处理最近 10 个会话(`--limit` 可按需调整,省略则处理全部) |
49
+ | `cx use deepseek` | 切换默认模型(**只对新会话生效**;改写 `~/.codex/config.toml`,自动备份) |
48
50
  | `cx use gpt` | 切回原生 ChatGPT(走 ChatGPT 登录态,无需 API key) |
49
51
  | `cx key <API_KEY>` | 保存 DeepSeek key 并注入 GUI 环境(桌面 App 需要) |
50
52
  | `cx doctor` | 体检:key 有效性 / 直连连通性 / 会话健康 |
51
53
  | `cx fix <会话ID>` | 修复某个打不开/报 404 的会话(ID 取 `cx status` 里显示的前 8 位即可) |
52
54
  | `cx fix last` | 修复最近一个会话 |
53
- | `cx fix-all <目标> [--limit N]` | **批量把所有老会话切换到目标模型**(`deepseek` 或 `gpt`,需退 App);切到 gpt 时自动清理旧代理遗留的不兼容历史条目(`reasoning.content` 等),避免续聊报 `Invalid 'input[..].content'` |
54
- | `cx fix-all deepseek --limit 10` | 只处理最近 10 个会话(`--limit` 可按需调整,省略则处理全部) |
55
55
 
56
56
  **关于老会话**:每个会话记录着自己创建时的模型,`cx use` 只影响新会话——老会话继续用原模型,互不干扰。想把老会话搬到新模型:单个用 `cx fix`,全部用 `cx fix-all`(会先备份数据库和会话文件,确认后执行)。
57
57
 
@@ -124,6 +124,19 @@ App 没读到 `DEEPSEEK_API_KEY`。执行上面「桌面 App 的一次性配置
124
124
  **Q: 提示 `deepseek 拒绝了 exec 自定义工具` 之类的 400?**
125
125
  模型目录(`~/.codex/cx-catalog.json`)被改坏了,重跑一次 `cx use deepseek` 会重新生成。
126
126
 
127
+ **Q: 跑完 `cx fix-all` 后,重开 App 某个会话“今天聊的内容不见了”?**
128
+
129
+ 1.0.5 之前确实存在这个坑:`cx fix-all` 清洗老会话时会删掉部分 `reasoning` 行,而会话文件(rollout)
130
+ 里每条记录带一个必须**从 0 起连续递增**的 `ordinal`。删行不重编号就留下缺口,App 的投影缓存
131
+ (`~/.codex/thread_history_1.sqlite`)会**永久卡在缺口处**,于是之后的新内容再也进不了界面——
132
+ 看起来就像“丢了”(其实原始 rollout 文件里还在,只是没被投影出来)。
133
+
134
+ 1.0.5 已修复:`fix-all` 现在会在改写后自动重编号 `ordinal` 消除缺口,并清掉该会话的投影缓存,
135
+ 让 App 下次打开时从会话文件完整重建。
136
+
137
+ 若用的是 1.0.5 之前的版本且已中招:升级后**完全退出 App**,再重新打开该会话即可恢复;
138
+ 仍不显示时,可手动删掉 `~/.codex/thread_history_1.sqlite` 中对应 `thread_id` 的行,强制其重建。
139
+
127
140
  ## 隐私说明
128
141
 
129
142
  - API key 仅保存在本机 `~/.cx/deepseek.key`(权限 600)和 launchd 环境中,**不写入任何配置文件明文**,不外发。
package/cx.py CHANGED
@@ -3,17 +3,18 @@
3
3
 
4
4
  无代理、无常驻进程。Codex 直连 deepseek(Responses API) / 原生 ChatGPT。
5
5
  命令:
6
- cx status 查看当前模型配置与最近会话
7
- cx use deepseek|gpt 切换默认模型(改写 ~/.codex/config.toml, 自动备份)
8
- cx doctor 体检: key/直连/会话健康
9
- cx key <API_KEY> 保存 deepseek key 并注入 GUI 环境(launchctl setenv)
10
- cx fix <会话ID> 修复单个会话(续跑一轮写入正确模型)
11
- cx fix-all <目标> 把所有老会话批量切换到目标模型(需退 App)
12
- 例: cx fix-all deepseek --limit 10 (只改最近 10 个)
6
+ cx status 查看当前模型配置与最近会话
7
+ cx fix-all deepseek|gpt
8
+ 把所有老会话批量切换到目标模型(需退 App)
9
+ 例: cx fix-all deepseek --limit 10 (只改最近 10 个)
10
+ cx use deepseek|gpt 切换默认模型(只针对新会话生效)
11
+ cx doctor 体检: key/直连/会话健康
12
+ cx key <API_KEY> 保存 deepseek key 并注入 GUI 环境(launchctl setenv)
13
+ cx fix <会话ID> 修复单个会话(续跑一轮写入正确模型)
13
14
  """
14
15
  import json, os, re, glob, sqlite3, subprocess, sys, shutil, time, urllib.request, urllib.error
15
16
 
16
- CX_VERSION = "1.0.5"
17
+ CX_VERSION = "1.0.7"
17
18
 
18
19
  CODEX_HOME = os.environ.get("CODEX_HOME", os.path.expanduser("~/.codex"))
19
20
  CONFIG = os.path.join(CODEX_HOME, "config.toml")
@@ -41,13 +42,13 @@ HELP = """cx — Codex 模型直连切换器
41
42
 
42
43
  命令一览:
43
44
  status 查看默认模型/provider/最近会话(不带参数执行 cx 等同于此)
44
- use deepseek|gpt 切换默认模型(改写 config.toml,自动备份)
45
+ fix-all deepseek|gpt 批量把所有老会话切换到目标模型(需退 App)
46
+ 用法: cx fix-all deepseek|gpt [--limit N]
47
+ 例: cx fix-all deepseek --limit 10 (只改最近 10 个)
48
+ use deepseek|gpt 切换默认模型(只针对新会话生效)
45
49
  key <API_KEY> 保存 deepseek key 并注入 GUI 环境(桌面 App 需要)
46
50
  doctor 体检: key 有效性/直连连通性/会话健康
47
51
  fix <会话ID|last> 修复单个会话(ID 取 status 里显示的前 8 位即可)
48
- fix-all <目标> 批量把所有老会话切换到目标模型(需退 App)
49
- 用法: cx fix-all deepseek|gpt [--limit N]
50
- 例: cx fix-all deepseek --limit 10 (只改最近 10 个)
51
52
  version 显示 cx 版本
52
53
  help 显示本帮助
53
54
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-model-change",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Switch OpenAI Codex (CLI / desktop app) between DeepSeek direct-connect and native ChatGPT. No proxy, no daemon.",
5
5
  "bin": {
6
6
  "cx": "bin/cx.js"