前言¶
在 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。