ddll8023/dsh-codex ↗★ 1

dsh-codex

Standalone OpenAI Codex (ChatGPT Plus/Pro OAuth) provider plugin for the DeepSeek Harness 适合拥有ChatGPT Plus/Pro并想在DSH中调用其模型能力的用户。

패키지
dsh-codex
호환성
미검증
Harness peer 범위
^0.1.7-rc.2
버전
0.1.0
라이선스
MIT
최근 업데이트
2026. 9. 27.

같은 패키지 이름의 다른 저장소

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ddll8023/dsh-codex

已发布到 npm registry 后也可使用包名:

dsh plugin --profile web add dsh-codex


`dsh plugin` 需要 `pnpm`(可通过 `corepack enable pnpm` 启用)。安装后重启 `dsh web`,插件随 profile 启动。

### 方式 B:手动

1. 将插件包放入 `$DSH_HOME/profiles/web/node_modules/dsh-codex`(或执行 `npm install `)。
2. 在 `$DSH_HOME/profiles/web/package.json` 的 `dsh.profile.bundles` 追加 `"dsh-codex"`。
3. 重启 `dsh web`。

### 验证是否启用

```bash
dsh --profile web --dump-config | grep -A2 llm-codex

## 登录与使用

| 命令 | 说明 |
| --- | --- |
| `/codex login` | 浏览器 OAuth 登录(Authorization Code + PKCE,回调 `http://localhost:1455/auth/callback`)。在 DSH Web/Desktop 客户端执行时会尝试自动打开授权页;若被弹窗策略拦截,可从命令结果打开授权 URL。流程在后台继续。 |
| `/codex login --device` | 无浏览器环境的 Device Code 流程(显示设备码与验证 URL)。 |
| `/codex logout` | 删除本地 OAuth 凭证。 |
| `/codex cancel` | 取消进行中的登录。 |
| `/codex status` | 登录状态、账号(accountId)、token 有效期(不显示任何 token),以及当前配额用量。 |
| `/codex usage` | 只查询并显示当前账号配额用量(5h / 每周 / Spark 子额度,含重置倒计时)。 |
| `/codex speed` | 查看当前会话的 Codex 速度模式。 |
| `/codex speed standard` | 将当前会话切回 Standard。 |
| `/codex speed fast` | 将当前会话切换为 Fast。 |

`/codex login --device` 不自动打开浏览器,会显示设备码和验证 URL。

登录后在模型选择器中选择 `openai-codex` 下的任意 Codex 模型即可对话;支持文本流、工具调用和图片输入,事件格式与现有 Provider 一致。

### Fast 模式

选择 `openai-codex` 模型后,聊天输入框中会出现速度菜单。Fast 状态按会话保存,通过新版 `stateSchema` / `wire` 投影同步到客户端;Host 缺少投影服务时从 `sessionQuery` 读取,二者均不可用时明确报错,不静默重置速度。切换后从下一次尚未组装的请求生效;正在执行的请求不会中途改变。Standard 不发送 `service_tier`,Fast 发送 `service_tier: "priority"`。如果 Codex 后端拒绝该服务等级,请切回 Standard 后重试。

### 用量显示

`/codex status` 与 `/codex usage` 调用 ChatGPT 的只读配额端点(`GET {baseURL}/wham/usage`,请求头 `referer: https://chatgpt.com/codex/settings/usage` 与 `x-openai-target-path`),使用插件已存储的 OAuth token 认证,不引入新凭证。输出形如:

Usage: [plus] 5h 43% (reset 2h 5m) · week 12% (reset 4d 1h)


端点不可达、返回非 2xx 或响应形状变化时,用量行降级为 `Usage: unavailable (原因)`,不影响登录状态本身;token 永不出现在输出中。

### 设置页(可视化登录管理)

设置中新增 **Codex 账号** 独立分区(无需在模型列表中查找):

- 显示登录状态、账号 ID、token 剩余有效期与用量(5h/周/Spark,含重置倒计时与消耗进度条);
- 提供 **浏览器登录 / Device Code 登录 / 取消登录 / 退出登录 / 刷新用量** 按钮;浏览器登录会自动尝试打开授权链接,也可一键复制链接或设备码;
- 登录与用量状态通过 Host Remote 轮询(`codexAccount/getStatus`,脱敏数据,token 不出服务端),进行中的登录会每 2 秒刷新。

### Web UI 用量显示

选择 `openai-codex` 模型后,聊天输入框下方会显示 Codex 用量摘要;点击摘要可展开 5h、每周和 Spark 子额度的重置时间,并可手动刷新。未选择 Codex 时该行不显示。浏览器只通过 Host Remote 获取脱敏后的配额窗口,OAuth token 不离开服务端凭证层。

> 原 `/codex` 命令仍保留,适合 CLI/自动化;日常推荐在设置页完成登录与用量查看。

### 配置(可选,非密钥)

通过 Host 插件设置表单编辑,或将以下内容放入当前 profile 的 **已有 `llm-codex` 插件条目的 `config` 对象**;不要重复添加插件条目,也不再写入旧 `settings.yaml`:

```yaml
baseURL: https://chatgpt.com/backend-api
modelCatalogClientVersion: "0.157.0"
transport: sse                 # sse | websocket | websocket-cached | auto
cacheRetention: short         # none | short | long
nativeWebSearch: true
webSearchMode: live            # live | cached | indexed | disabled
refreshLeadTimeMs: 300000
streamIdleTimeoutMs: 300000
retryPolicy:
  mode: normal
  maxRetries: 2

整个配置对象声明为 volatile。Host loader 校验后更新不可变快照,下一次请求读取新值;非法配置在提交前被拒绝。设置命名空间使用实际插件条目 ID,默认是 llm-codex。OAuth 凭证仍只由 Host 凭证服务保存,不进入此配置。

回放数据按新版信封写入;不迁移旧插件写入的扁平回放数据。测试包含模拟 loader 更新、独立工具结果、Host 截断工具调用后的回放对齐、请求图片投影和 Fast 会话投影恢复;完整测试结果为 97 项通过、0 项失败。模拟 loader 测试不替代实际 Desktop 配置更新验证。

图片通过 Host 生成请求预览,默认单图最多 4,194,304 像素、目标 1 MiB,请求内图片 base64 总量上限 20 MiB。超过总量时返回 Host 的 IMAGE_OFFLOAD_REQUIRED 及需卸载的图片数量;已标记卸载的图片只发送说明文本,不重新读取或上传。图片读取接收请求取消信号,用户消息和独立工具结果中的图片采用同一转换规则。