Codex Auth
@tnnevol/dsh-codex-auth 为 DSH 提供 ChatGPT/Codex 登录、模型目录和账号用量。当前版本见插件总览,适配 DSH 0.1.5-rc.2。
安装
fn-deepseek-harness 会在安装和升级时自动安装 npm rc 标签对应的版本。其他 DSH 环境可以执行:
dsh plugin --profile web add @tnnevol/dsh-codex-auth@0.1.5-rc.2
dsh --profile web --dump-config安装后重启 Web profile。旧版 dsh-codex-connect 不应与本插件同时启用,否则可能重复注册 Codex 模型和设置插槽。
登录与用量
打开「设置 → Codex Auth」,点击「登录」。插件会生成一次性授权码并打开 Codex 授权页面,不需要选择工作空间。
授权码右端有一个复制图标,点它即把授权码写入剪贴板,成功后就地显示勾选标记。
插件不做主动复制。早期版本在打开授权页时自动复制,但浏览器会把焦点和用户手势交给新窗口,此时写入剪贴板必然失败——用户侧表现就是每次都提示「复制失败」。所以复制只由用户点击触发,那时主页面仍有焦点,HTTP 页面下同样可用。若浏览器仍阻止复制,页面会提示手动选中。
等待授权期间,按钮变成「取消」;点它会放弃本次登录并退回未登录状态,同时把还开着的授权窗口一并关掉(重复点「打开授权页面」开出的多个窗口也会全部关闭)。取消不会删除已经登录的账号,只有「退出登录」才清除凭据。
取一次性授权码的等待上限是两分钟。这个上限只管「向 OpenAI 要授权码」这一步,拿到码之后就不再计时——用户在浏览器里完成授权的时间由 Codex 自己的设备码有效期兜底(约 15 分钟)。
关掉授权窗口不算取消。Codex 授权成功后那个窗口会由页面自己关闭,把它当成放弃信号会让插件中止正在进行的轮询,刚拿到的凭据随之丢失。
登录成功后,账号用量不再在设置页展示;对话输入区右侧的紧凑用量状态保留,优先显示五小时窗口,没有五小时窗口时显示每周窗口。点击该状态可展开查看剩余额度与重置时间。

这个图标只在当前选中模型属于 Codex 供应商时出现。选中 CodeBuddy 或其它供应商的模型时它不显示,也不会在后台继续轮询用量;切换模型即时跟随,不需要刷新页面。CodeBuddy 插件在同一个位置也放了一个用量图标,两个按各自供应商显隐,因此同一轮对话里不会出现两个图标并存。

全局模型
「全局模型」用于设置 DSH 会话默认使用的 Codex 模型和思考强度。选择器中的模型来自当前 Codex 模型目录;未配置时显示「请选择模型」。保存后,新建会话会采用这组默认值,仍可在对话输入区临时切换模型。
刷新模型目录
Codex Auth 页面提供「刷新模型目录」按钮。点击后插件读取当前 ChatGPT 账号实际可用的 Codex 模型与思考强度,并同步到 DSH 的 OpenAI Codex 模型配置;刷新成功后,消息框模型选择器与全局模型选择器都会显示账号当前可用的模型。内部服务型条目(如自动审查、预留位)不会写入,思考级别只保留 DSH 支持的范围。
- 刷新需要已登录;未登录时按钮不显示。
- 刷新失败(网络异常、接口不可用、写入被拒绝)会保留上一次有效的模型列表,并在页面显示错误提示。
- 账号接口与内置静态目录不一致时(例如上游发布了新模型而 DSH 内置表尚未更新),以刷新后的账号列表为准。
- 刷新会把账号返回的最大上下文窗口写入 DSH 模型目录;如果账号接口未提供最大值,才回退使用默认上下文窗口。这样可以避免 Codex 后端实际接受更长上下文时,被 pi-ai 按较小默认窗口误判为溢出。
上下文管理
上下文压缩和溢出恢复由 DSH 官方的 dsh-compaction-basic 与 dsh-llm-pi-ai 负责,插件只负责从 ChatGPT Codex 账号目录提供准确的模型上下文窗口:
- DSH 会在上下文接近模型窗口时自动压缩历史消息,并保留必要的最近内容。
- 供应商报告上下文溢出时,DSH 会执行强制压缩并重试当前请求。
- Codex Auth 刷新模型目录时优先写入
max_context_window,避免 pi-ai 使用过小的contextWindow把成功的长上下文响应误判为CONTEXT_WINDOW_EXCEEDED。
如果升级插件前已经出现 pi-ai detected context overflow for model,升级后请重新点击「刷新模型目录」,让修正后的窗口值写入当前 Web profile;必要时刷新 Web 页面后再继续原会话。
图片能力
图片能力默认关闭,可在 Codex Auth 页面中分别启用:
| 配置 | 作用 |
|---|---|
| 图片识别 | 注册 view_image 工具,让支持图片输入的 Codex 模型读取本地 PNG、JPEG、WebP 或 GIF |
| 图片上传 | 允许支持图片输入的 Codex 模型接收粘贴或上传到对话的图片 |
当前版本(DSH 0.1.5-rc.2)不提供图像生成或图像输出,仅支持图片识别和图片上传。模型本身未声明图片输入能力时,即使打开开关也不能处理图片。
凭据与请求
OAuth 凭据保存在 $DSH_HOME/.openai-codex-auth.json,文件权限为 0600。插件会把有效访问令牌同步到 DSH 的通用凭据接口,退出登录时同时清理同步结果。
Web 设置通过同源插件路由访问 Host。使用 fn-deepseek-harness 时应从应用入口打开页面,不要绕过应用网关直接访问 DSH 监听端口。
排查
看不到 Codex Auth 设置页
确认组合配置包含插件:
dsh --profile web --dump-config | grep -n -C 3 'dsh-codex-auth'如果出现 cannot resolve profile bundle,请重新执行 dsh plugin --profile web add @tnnevol/dsh-codex-auth@0.1.5-rc.2,不要只在 package.json 中手动补 bundle。插件安装后,「设置」侧栏会出现 Codex Auth 入口。
刷新模型目录后模型没有变化
- 确认页面显示「已登录」;刷新按钮只在登录后出现。
- 刷新成功后需在消息框模型选择器中重新查看。DSH 会在写入后重建模型目录,但已打开的页面可能需要刷新一次。
- 若显示错误提示,说明上游接口或配置写入暂时失败,当前仍保留上一次有效模型列表,可稍后重试。
本地开发
在仓库根目录执行检查:
pnpm --filter @tnnevol/dsh-codex-auth run check将源码包安装到本地 Web profile 后启动 DSH:
dsh plugin --profile web add /absolute/path/to/fn-os-apps/plugins/dsh-codex-auth-plugin
dsh web --no-open