workbuddy2everything: Transforming a Local WorkBuddy Gateway into a Multi-Client Shared Model Backend

前言

在 DeepSeek Harness(DSH)里接 WorkBuddy,常见做法是把 wb2api 网关、模型选择器里的 workbuddy provider,以及给不同 CLI 用的协议转换层分开维护。这些进程默认不会注册成系统服务,重启后 provider 仍能加载、模型列表仍能刷出来,第一次真正发请求却连不上端口,排查往往要从「谁没起来」开始。

kangjiazhen/workbuddy2everything(npm 包名 dsh-workbuddy-codex)面向同一套链路:用 DSH 插件在加载时探测健康端点、拉起缺失进程、定时复查崩溃,并内置 Responses 与 Anthropic Messages 两座桥,让 Codex CLI、Claude Code、Claude 桌面端 3p 都能指向同一条 WorkBuddy 网关。下面介绍它的定位、能力与可复现的接法。

这是什么

维护者 kangjiazhen,分类为模型推理,在 GitHub 上以 workbuddy2everything 发布,许可证 MIT,要求 Node.js >= 18。

插件自述:把本地 WorkBuddy 网关变成「任何客户端都能用的模型后端」——包括 DSH 模型选择器的 provider 路由、背后的 wb2api 网关,以及两条内置协议桥(Codex 用的 Responses、Claude 用的 Anthropic Messages)。provider 路由通过 ctx.plugin() 委派给 dsh-llm-workbuddy 挂载,插件本身不重写网关、也不 fork 适配器代码。

核心功能

端口与角色

在 WorkBuddy 能应答之前,下列环节需同时对齐(资料中的默认端口如下):

端口 服务 作用
127.0.0.1:7863 wb2api 网关 OpenAI 兼容的 /v1/chat/completions
127.0.0.1:7864 Responses 桥(内置) Responses API → chat/completions,供 Codex CLI
127.0.0.1:7865 Anthropic Messages 桥(内置) Anthropic /v1/messages → chat/completions,供 Claude Code / Claude 桌面端 3p
— workbuddy provider 模型选择器路由,由 dsh-llm-workbuddy 提供

进程监护

插件在 apply() 之后异步做首次监管:探测各服务的 health 端点,缺什么就 spawn 什么,并按 intervalMs 定时复查。dispose 时只终止本插件自己拉起的子进程;加载前已在运行的服务只探测、不接管。

网关在无可用账号时 /healthz 可能返回 503(进程活着但上游不可用)。默认 gateway.acceptStatus: [200, 503],避免监管器误判为未启动而重复拉起。

内置桥的原因

codex-cli 0.1xx 起只讲 OpenAI Responses(POST /v1/responses),而 WorkBuddy 网关只实现 Chat Completions。Codex 直连 7863 会得到 /v1/responses 的 404,且加载阶段已无法使用 wire_api = "chat"。内置桥与 codex-chat-bridge 同源, vendored 为 bridge/codex-chat-bridge.mjs,零依赖。

Claude 侧同理:客户端讲 Anthropic Messages,第二条内置桥监听 7865 并完成协议转换。

配置入口

配置位于 profile 的 cordis.yml 中 workbuddy-codex 条目的 config;随包发布的 cordis.patch.yml 含完整默认值。常用键包括:

  • gatewayDir:网关 config.json 所在目录,其中的 api_key 同时用于桥与 provider。
  • provider.enabled / provider.discovery / provider.autoCheckin:是否注册路由、拉取 /v1/models、每日签到。
  • bridge.conversationId:默认 auto;对着 WorkBuddy 网关不可留空,否则上游 400 / 11-128,网关可能禁用账号。
  • bridge.maxPromptTokens:默认 1200000,本地超限回 413,避免上游 prompt_too_long 且无 usage 导致客户端无法压缩上下文。
  • anthropicBridge.*:Anthropic 桥的监听地址、上游与默认模型等。

若未安装 dsh-llm-workbuddy,插件仍监护网关与桥,并在日志中提示 dsh plugin add dsh-llm-workbuddy,不会抛错。

安装与启用

官方安装命令如下(不要用未在文档中出现的 github:owner/repo 形式拼接):

dsh plugin add git+https://github.com/kangjiazhen/workbuddy2everything.git

本地检出时:

dsh plugin add file:/path/to/workbuddy2everything

插件自带 cordis.patch.yml,成为 profile 依赖后会自动写入 workbuddy-codex 条目。

从 dsh-llm-workbuddy 迁移

若 profile 的 package.json 里同时在 dsh.profile.bundles 启用了旧包,应去掉 bundle 里的 dsh-llm-workbuddy,保留 dsh-workbuddy-codex,但 dsh-llm-workbuddy 仍须留在 dependencies(本插件 import 它来挂载 provider):

"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 config --global http.proxy http://127.0.0.1:7890

典型用法

配合 Codex CLI

桥在 7864 提供 Responses API。在 ~/.codex/config.toml 中指向该地址,并设置 wire_api = "responses":

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

experimental_bearer_token 桥不校验,上游认证使用网关 config.json 中的 key;Codex 要求非空即可。之后可正常执行,例如:

codex exec "list the files in this directory"

务必保持 bridge.conversationId 为 auto(或等价有效值)。若账号被网关因非法请求禁用,可按文档通过面板 revive 接口解冻,不必重新登录。

若 Codex 需要图片输入,还需在 ~/.codex/models.json 里为对应模型声明 input_modalities 含 image,否则 Codex 会在本地省略附件,桥收不到图。

配合 Claude Code

export ANTHROPIC_BASE_URL=http://127.0.0.1:7865
export ANTHROPIC_API_KEY=anything
claude

配合 Claude 桌面端(3p)

修改 %LOCALAPPDATA%\Claude-3p\configLibrary\<appliedId>.json(appliedId 见同目录 _meta.json),示例:

{
  "inferenceGatewayBaseUrl": "http://127.0.0.1:7865",
  "inferenceGatewayApiKey": "anything",
  "modelDiscoveryEnabled": true,
  "inferenceProvider": "gateway",
  "inferenceCredentialKind": "static"
}

文档建议不要手写非空的 inferenceModels,否则会绕过 /v1/models 发现;留空并开启 modelDiscoveryEnabled,下拉框才反映网关目录。桥会把非 Anthropic 形态的模型 id 改写为 claude-wb-<hash> 以通过桌面端过滤器,显示名走 display_name。

DSH 内状态

挂载 tools 后会注册 workbuddy_codex_status,汇总 gateway / bridge / anthropicBridge 的探测结果与 pid,便于区分「列表空」与「端口挂了」。

适用场景与注意

适合已经在本地跑 WorkBuddy wb2api、又希望 DSH 模型选择器、Codex、Claude 系客户端共用同一网关与密钥 的开发者。一次安装覆盖 provider 委派、网关监护与两座协议桥,避免手动开四个窗口、重启后 silent failure。

使用前请注意:

  1. 插件以当前 DSH 进程权限运行,会 spawn 网关与桥子进程;安装前应阅读仓库源码与 MIT 许可证,确认路径与命令符合你的环境(默认 cordis.patch.yml 路径偏 Windows,Linux/macOS 需在 cordis.yml 覆盖 gateway.command 等)。
  2. 模型能否调用取决于 WorkBuddy 账号档位,与插件无关;网关返回 11158 model not allowed for user type 属于账号限制。可用 bridge.modelAllowlist 让已知不可达模型在桥侧快速失败,避免网关把拒绝归类为账号故障。
  3. 文档说明上游 WorkBuddy 项目已停止维护并收紧反代检测;插件维持本地链路,不保证上游通道长期可用。
  4. DSH 生态是「一切皆插件」;社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

经过上面的步骤,workbuddy2everything 的价值可以概括为:在 DSH 里用一套监护与内置桥,把 WorkBuddy 网关稳定地暴露给多协议客户端,并与 dsh-llm-workbuddy 的 provider 能力叠加而不重复维护适配器。

  • 目录页:https://www.skillhub.cn/plugins/kangjiazhen/workbuddy2everything
  • 源码与完整说明:https://github.com/kangjiazhen/workbuddy2everything
羽毛球分组比赛记分
小程序二维码

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

Xiaoye