1:切第三方后官方登录丢失
解决:
先切到 OpenAI Official,完全退出 Codex,然后:
codex logout
codex login
选择:
Sign in with ChatGPT
再检查:
codex login status
确认显示:
Logged in using ChatGPT
然后 CC Switch 开启:
设置
→ 通用
→ Codex 应用增强
→ 切换第三方时保留官方登录
这样切第三方后,官方 OAuth 和插件还能保留。
2:官方会话切到第三方后打不开
报错:
Model provider `cc-switch-official` not found
或者第三方旧会话切官方时报:
Model provider `custom` not found
解决:
开启 CC Switch 的:
统一 Codex 会话历史
同时修改了:
会话 JSONL:
session_meta.payload.model_provider
数据库:
state_5.sqlite
threads.model_provider
改完后,这个旧官方会话就能在第三方里继续用了。
3:第三方用过的会话再切回官方,报 401 / 502
我遇到过:
502 Bad Gateway
和:
401 Unauthorized: Invalid API key
而且报错 URL 还是第三方地址:
https://hub.oaifree.com/v1/responses
说明虽然 CC Switch 已经切到官方,但这个会话实际还在走第三方。
解决:
把 CC Switch 的“路由”关闭。
最后使用:
✓ 切换第三方时保留官方登录
✓ 统一 Codex 会话历史
✗ 路由
ccs中的OpenAI Official,config.toml 里的 custom 改成:
model_provider = "custom"
[model_providers.custom]
name = "OpenAI"
requires_openai_auth = true
supports_websockets = true
wire_api = "responses"
注意:
官方状态下不要保留第三方 base_url
比如不能再有:
base_url = "https://hub.oaifree.com/v1"
路由开启和关闭的区别
开启路由
可以做到:
✓ 保持官方 ChatGPT 登录状态
✓ 正常使用官方插件
✓ 官方订阅本身也能正常使用
✓ 平时主要使用第三方中转
但是问题是:
第三方会话和官方会话不能稳定继续同一个历史会话
实际会出现:
官方会话 → 第三方继续
有时可以
第三方使用过的会话 → 再切官方继续
容易继续命中第三方 provider,
出现 401 / 502 等问题
所以“开启路由”更适合这种情况:
✓平时主要使用中转站
✓希望 Codex 一直保持官方登录
✓需要稳定使用官方插件
✓偶尔单独使用官方订阅
不适合频繁在:
官方订阅和第三方中转之间继续同一个长会话。
关闭路由
如果主要需求是:
同一个 Codex 会话
可以在官方订阅和第三方中转之间来回继续
则使用:
✗ 路由
✓ 切换第三方时保留官方登录
✓ 统一 Codex 会话历史
并把会话统一到:
custom
实测这样可以:
官方会话 → 第三方继续
✓
第三方会话 → 官方继续
✓
所以简单来说:
开路由:
适合“主要用中转 + 保持官方登录和插件”
关路由:
适合“官方和第三方来回继续同一个会话”
相关指令
查看所有会话和对应 provider:
@'
import sqlite3
from pathlib import Path
db = Path.home() / ".codex" / "state_5.sqlite"
conn = sqlite3.connect(db)
for row in conn.execute("""
SELECT id, title, model_provider, rollout_path
FROM threads
ORDER BY updated_at DESC
"""):
print(row)
conn.close()
'@ | python -
只看某个 provider,比如 cc-switch-official:
@'
import sqlite3
from pathlib import Path
db = Path.home() / ".codex" / "state_5.sqlite"
conn = sqlite3.connect(db)
for row in conn.execute("""
SELECT id, title, model_provider, rollout_path
FROM threads
WHERE model_provider = ?
""", ("cc-switch-official",)):
print(row)
conn.close()
'@ | python -
把某一个会话改成 custom:
@'
import sqlite3
from pathlib import Path
THREAD_ID = "你的会话ID"
TARGET = "custom"
db = Path.home() / ".codex" / "state_5.sqlite"
conn = sqlite3.connect(db)
cur = conn.execute("""
UPDATE threads
SET model_provider = ?
WHERE id = ?
""", (TARGET, THREAD_ID))
conn.commit()
print("修改行数:", cur.rowcount)
conn.close()
'@ | python -
如果要批量把所有 cc-switch-official 改成 custom:
@'
import sqlite3
from pathlib import Path
db = Path.home() / ".codex" / "state_5.sqlite"
conn = sqlite3.connect(db)
cur = conn.execute("""
UPDATE threads
SET model_provider = 'custom'
WHERE model_provider = 'cc-switch-official'
""")
conn.commit()
print("修改行数:", cur.rowcount)
conn.close()
'@ | python -
以上整理来自gpt