dsh-workbuddy-codex:在 DSH 里监护本地 WorkBuddy 反向代理链

前言

在 DeepSeek Harness(DSH)里接 WorkBuddy,常见布局是:模型选择器走 workbuddy 提供商路由,背后再挂本机的 wb2api 网关,把 OpenAI 兼容的 /v1/chat/completions 转给 WorkBuddy。若还要用 OpenAI Codex CLI,中间还得有一层把 Responses API 翻成 Chat Completions 的桥接进程。

这三段链路都不会自动变成系统服务。重启或进程退出后,提供商插件往往仍能加载、仍能列出模型,但第一次真正发请求就会打到死端口。下面介绍 dsh-workbuddy-codex:在 Harness 加载时探测健康检查、拉起缺失进程,并按定时器复查,让网关与桥接在本地端口上持续应答。

这是什么

dsh-workbuddy-codex 是维护者 kangjiazhen 发布的 DSH 工作流类插件(npm 包名与仓库名一致,当前资料中的版本为 0.3.2,MIT 许可证)。它不重新实现网关,也不 fork WorkBuddy 适配器;网关以子进程方式编排,提供商路由通过 ctx.plugin() 委托给依赖包 dsh-llm-workbuddy,由该包维护适配器、设置区与签到逻辑。

本地链路上需要同时就绪的三部分如下(资料中的端口与角色):

地址 组件 作用
127.0.0.1:7863 wb2api 网关 OpenAI 兼容 /v1/chat/completions
127.0.0.1:7864 内置 Responses 桥接 Responses API → chat/completions,供 Codex CLI
— workbuddy 提供商 模型选择器路由,由 dsh-llm-workbuddy 挂载

若你单独启用 dsh-llm-workbuddy 与本品并存,先注册路由的一方生效,另一方会打日志并退让,两种布局都不会因此抛错。

核心功能

进程监护

插件加载时探测各健康端点,缺什么就拉起什么;之后按定时器再次检查,进程崩溃会被重新拉起。网关目录里的 config.json 中的 api_key 同时供桥接与提供商使用,端口与密钥只需在网关侧配置一次。

内置 Codex 桥接

Codex CLI 0.1xx 起只走 OpenAI Responses API(POST /v1/responses),而 WorkBuddy 网关只实现 Chat Completions。直连网关会得到对 /v1/responses 的 404,且 Codex 已无法在配置里改回 wire_api = "chat"。本品内置与 codex-chat-bridge 同源、零依赖的桥接脚本(bridge/codex-chat-bridge.mjs),安装插件即可,无需再克隆第二个仓库。

数据路径为:

Codex CLI --(Responses)--> bridge :7864 --(ChatCompletions)--> gateway :7863 --> WorkBuddy

提供商委托

通过依赖 dsh-llm-workbuddy 挂载 workbuddy 路由。若环境中未安装该包,插件仍会监护网关与桥接,并在日志中提示安装命令 dsh plugin add dsh-llm-workbuddy,不会因此中断 Harness。

配置说明

配置写在 profile 的 cordis.yml 里 workbuddy-codex 条目的 config 下;随包提供的 cordis.patch.yml 含完整默认值。常用项如下:

键 默认值 说明
gatewayDir ~/Documents/deepseek-harness/default-workspace/workbuddy2api-panel 网关 config.json 所在目录
provider.enabled true 是否注册 workbuddy 路由
provider.baseURL 空则沿用 gateway.baseURL 适配器使用的网关 URL
provider.discovery true 是否向网关 /v1/models 拉取模型列表
provider.autoCheckin true 是否自动完成 WorkBuddy 每日签到
gateway.acceptStatus [200, 503] 网关在无可用账号时可能返回 503,仍视为存活
bridge.conversationId auto 对接 WorkBuddy 时必填语义;缺失会导致上游 400 并可能触发网关禁用账号
bridge.maxPromptTokens 1200000 本地预估超长则返回 413;0 关闭

安装与启用

官方安装命令(来自仓库 README):

dsh plugin add git+https://github.com/kangjiazhen/dsh-workbuddy-codex.git

本地目录开发安装:

dsh plugin add file:/path/to/dsh-workbuddy-codex

包内带 cordis.patch.yml,成为 profile 依赖后会自动写入 workbuddy-codex 配置项。运行环境要求 Node >=18(见 package.json 的 engines)。

从单独的 dsh-llm-workbuddy 迁移

若 profile 里曾把 dsh-llm-workbuddy 放在 dsh.profile.bundles 中,资料建议改为只保留本品为 bundle,但 dsh-llm-workbuddy 仍须留在 dependencies,因为本插件通过 import 挂载提供商:

"dsh": { "profile": { "bundles": [
  // "dsh-llm-workbuddy",   <- 删除此行
  "dsh-workbuddy-codex"
] } }

git 安装失败时的常见处理

pnpm 可能把 git+https://… 改成 SSH,无 GitHub 密钥时会 Permission denied (publickey):

npm config set git-protocol https

代理环境下需让 git 自身走代理(pnpm 调用 git 时不会继承 pnpm 的代理设置):

git config --global http.proxy http://127.0.0.1:7890

典型用法:配合 Codex CLI

桥接监听 7864,对外提供 Responses API。在 ~/.codex/config.toml 中指向该地址(示例来自 README):

model = "global:gpt-5.3-codex"
model_provider = "wb"

[model_providers.wb]
name = "workbuddy"
base_url = "http://127.0.0.1:7864/v1"
wire_api = "responses"
experimental_bearer_token = "anything"
request_max_retries = 2
stream_max_retries = 2

桥接不校验 bearer 字符串本身,但 Codex 要求非空;实际鉴权使用从网关 config.json 读出的 api_key。之后可照常使用 Codex,例如:

codex exec "list the files in this directory"

若账号 tier 不允许某模型,网关会返回 11158 model not allowed for user type [...],属于账号权限而非桥接故障。

两处不要省略的设置

1. bridge.conversationId(默认 auto)

WorkBuddy 上游校验会话相关头;缺失时可能返回 400 且网关将错误归类为账号故障并禁用账号。桥接默认按 Codex 会话推导稳定 id 并写入 metadata.conversation_id。请勿清空;启动时若配置不当插件会告警。若账号已被误禁用,可在网关面板恢复,而不必重新登录:

# 面板地址:http://127.0.0.1:7863/panel/
curl -X POST http://127.0.0.1:7863/panel/api/accounts/<uid>/revive

2. 网关 api_key

请求网关需携带与 config.json 一致的密钥;插件通过 gatewayDir 读取并交给桥接,避免手工复制。

适用场景与注意

适合已经在本机使用 WorkBuddy wb2api 面板、并在 DSH profile 里希望「提供商 + 网关 + Codex 桥接」一次装齐、由 Harness 进程统一监护的开发者。DSH 社区插件目录(如 SkillHub)与 DeepSeek / 幻方无官方从属关系;安装前请自行阅读仓库源码与 MIT 许可证。插件以当前 dsh 进程的用户与权限运行,会拉起本地子进程并读取你配置的 gatewayDir,安装与启用前应确认路径与密钥暴露范围可接受。

结尾

dsh-workbuddy-codex 把 WorkBuddy 本地反向代理链的监护、提供商挂载与 Codex 所需的 Responses 桥接收拢到一个 DSH 插件里,减少重启后「能选模型却不能对话」的隐性故障。仓库与说明文档:https://github.com/kangjiazhen/dsh-workbuddy-codex。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜