workbuddy2everything:把本地 WorkBuddy 網關變成多客戶端共用的模型後端

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

小夜