Skip to content

Latest commit

 

History

History
132 lines (88 loc) · 4.21 KB

README.md

File metadata and controls

132 lines (88 loc) · 4.21 KB

Codex 全任务列表代理

English

这是一个用于 macOS Codex App 的本地兼容代理。它让 App 的任务列表同时显示所有 provider 的任务,不需要修改 Codex App、本地配置或已有 session。

从源码重新构建

需要安装 Go,然后运行:

cd /path/to/codex-all-sessions-proxy
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
  go build -trimpath -o codex-all-sessions-proxy codex-all-sessions-proxy.go
codesign --force --sign - codex-all-sessions-proxy

当前附带的可执行文件面向 Apple Silicon(arm64),不依赖 Node.js。

快速使用

  1. 使用 Command-Q 完全退出 Codex App。

  2. 双击 launch-codex-all-sessions.command,或者在终端运行:

    /path/to/codex-all-sessions-proxy/launch-codex-all-sessions.command
  3. Codex App 会正常打开。活跃任务和归档任务列表此时都不再受当前 provider 限制。

如果 App 已经在运行,启动器会拒绝启动并提示先完全退出,防止 App 继续使用原来的后端进程。

每次需要显示全部任务时,都应通过这个启动器打开 Codex App。从 Dock 或 Finder 正常启动不会启用代理。

工作原理

Codex App 查询任务列表时,会向本地 app-server 发送类似下面的请求:

thread/list: modelProviders = null(或缺少该字段)
                         ↓
thread/list: modelProviders = []

在当前版本的 app-server 中,null 表示按当前 provider 过滤,空数组 [] 表示不按 provider 过滤。

代理只执行上述改写:

  • 仅处理 thread/list 请求。
  • 仅在 modelProviders 为 null 或缺失时改成 []。
  • 如果 App 明确传入了 modelProviders: ["openai"] 等过滤条件,则保持原样。
  • 其他请求以及后端返回的数据都原样转发。

安全边界

这个代理只改变列表查询,不会合并或迁移 session:

  • 不修改 ~/.codex/config.toml。
  • 不修改 session JSONL 文件。
  • 不修改 state_5.sqlite。
  • 不修改 session 中保存的 model_provider。
  • 不改写 thread/resume,也不会强制改变继续对话时使用的 provider。
  • 不替换、不修改、不重新签名已安装的 Codex App。
  • 调用 App 自带的 /Applications/ChatGPT.app/Contents/Resources/codex,使前端与后端版本保持一致。

如果某个历史 session 对应的 provider 已从配置中删除,代理仍可能让它出现在列表中,但恢复对话时仍可能因为 provider 不可用而失败。

文件说明

  • codex-all-sessions-proxy:已编译并进行本地临时签名的 Apple Silicon 原生程序。
  • codex-all-sessions-proxy.go:完整 Go 源码。
  • launch-codex-all-sessions.command:用于带代理启动 Codex App 的脚本。
  • README.md:本说明。
  • README.en.md:英文说明。

状态检查

确认代理能正常调用 App 自带的 Codex 后端:

./codex-all-sessions-proxy --version

查看代理实际使用的路径:

./codex-all-sessions-proxy --proxy-show-config

日志和调试

普通启动器会把 App 输出写入:

/private/tmp/codex-all-sessions-app.log

如需在前台启动并查看代理的改写日志,可以运行:

CODEX_ALL_SESSIONS_PROXY_DEBUG=1 \
CODEX_CLI_PATH=/path/to/codex-all-sessions-proxy/codex-all-sessions-proxy \
CODEX_APP_SERVER_FORCE_CLI=1 \
/Applications/ChatGPT.app/Contents/MacOS/ChatGPT

每次改写列表请求时会输出类似内容:

[codex-all-sessions-proxy] rewrote thread/list request #1

App 更新后的处理

代理默认调用以下后端:

/Applications/ChatGPT.app/Contents/Resources/codex

因此 Codex App 正常更新后,代理会自动调用更新后的内置后端。若未来 App 改变了后端文件位置,可以通过环境变量覆盖:

CODEX_REAL_CLI_PATH=/新的绝对路径/codex \
./codex-all-sessions-proxy app-server --analytics-default-enabled

恢复原状

使用 Command-Q 退出 App,然后从 Dock 或 Finder 正常启动即可。代理只在 App 通过启动器启动,并且 CODEX_CLI_PATH 指向代理程序时生效。

删除本仓库不会影响 Codex App、配置或已有任务。