dsh-workbuddy-meter:WorkBuddy 400 修复与 OFM 积分用量计量

前言

在 DeepSeek Harness(DSH)里走 dsh-our-free-model(OFM)的 WorkBuddy / CodeBuddy 通道时,不少人会先被一条 400 拦住:Illegal API invocation from an unapproved channel,业务码常见为 11128。报错文案像在说「渠道未批准」,按域名、请求头、账号去排查往往对不上。与此同时,OFM 自带的 token-ledger.json 只记 token,上游 SSE 里返回的 credit(积分)字段在解析时被丢掉,很难按真实消耗做账。

社区插件 dsh-workbuddy-meter(维护者 balongTTY,GitHub 仓库 balongTTY/dsh-workbuddy-meter,SkillHub 分类 admin-security)把两件事放在同一个包里:对 system prompt 里命中风控的关键词做无损中和,并在 DSH Web UI 里展示 buddy / workbuddy 通道的 token 与积分用量。下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

dsh-workbuddy-meter 是 DSH 插件(当前资料版本 1.0.1,MIT 许可证,Node 要求 ^22.19.0 或 >=24.0.0)。它依赖已安装并登录 WorkBuddy / CodeBuddy 账号的 dsh-our-free-model(OFM);数据来自 OFM 的 channel-pack,未装 OFM 或未登录时面板为空是预期行为,而非插件单独故障。

插件由 Host 半身(index.js:采集、聚合、HTTP 路由、启动时补丁自愈)与 Client 半身(client.js:侧边栏「用量」入口与主面板)组成,并通过极小钩子改写 OFM 的 pack.js(补丁逻辑集中在 src/patch-engine.mjs,关键词处理在 src/lexicon.mjs)。

核心功能一:修复 unapproved channel(code 11128)

报错长什么样

典型中文提示:

buddy: 请求被拦截,请重新发送 Illegal API invocation from an unapproved channel

或英文原文 Illegal API invocation from an unapproved channel,HTTP 400,业务码 11128(有时为 11140,同属一类校验失败)。README 还列出相关情形:例如 workbuddy: 请求被安全策略拦截... first message is not system prompt(首条消息不是 system 角色),以及 11133 integer_below_min_value(max_tokens 过小,与关键词风控无关)。

真实原因(与文案不一致)

维护者实测结论是:与渠道、域名、客户端身份、请求头、API Key 等无关,而是上游对 system prompt 做关键词内容风控——当散文语境中出现词组 DeepSeek Harness(完整词对、大小写敏感)时会被拒。短 system prompt(约小于 1KB)即使含关键词也可能放行,大请求体(例如真实 DSH 形状:316 tools、effort=max、max_tokens=128000)更容易稳定触发,因此表现为「时好时坏」。

可用同一 token 做对比验证:含 DeepSeek Harness 的 system 失败,改成 You are an AI agent. 则成功。

无损绕过思路

在 DeepSeek 与 Harness 之间插入零宽空格 \u200B,语义对模型几乎不变,但字符串匹配不再命中:

// 改前
"You are an AI agent powered by DeepSeek Harness."
// 改后
"You are an AI agent powered by DeepSeek\u200B Harness."

路径里不能插入零宽字符(例如 D:\10_COD\DeepSeek Harness\resources\...),否则工具调用会拿到坏路径。匹配需跳过路径语境,README 给出的正则示例为:

/(?<![\\/])(DeepSeek)[ \u00A0]+(Harness)(?![\\/])/gi

装好插件后,面板底部「关键词风控中和」卡片提供四个开关,修改后即时生效,无需重启(总开关关闭则完全不改动出站请求):

开关 默认 作用
总开关 开 关闭后恢复原始请求
中和身份关键词 开 零宽空格替换散文中的词组
补首条 system 开 首条非 system 时注入保底 system
隐藏品牌词 关 更激进地打散 DeepSeek

上游策略变化后,可将总开关关掉即可恢复未打钩行为。开关状态保存在 ~/.dsh/workbuddy-meter/lexicon.json。

不想装插件时,也可在出站前对 messages 做同样的字符串替换(README 提供 neutralize 示例),挂在 JSON.stringify 之前。

核心功能二:积分与 token 用量面板

OFM 通道账本在 ~/.dsh/channel-pack/token-ledger.json,只记 token。WorkBuddy / CodeBuddy 的 SSE 最后一帧 usage 中除 token 外还有 credit 字段;本插件通过补丁把该字段接出,并逐请求写入 ~/.dsh/workbuddy-meter/usage-<YYYY-MM-DD>.jsonl(UTC+8 分天、append-only),另有 balance.json(账号积分余额快照)、patch-state.json(补丁版本与时间等)。

面板能力(据 README)包括:今日 / 7 天 / 30 天切换、实测单价、缓存命中率与冷热对比、模型性价比排行、号池与单账号「还能用多久 / 多少 token」、测速与限速倒计时、账号池可视化与本地昵称编辑等。侧边栏注入点为 @deepseek-ai/dsh-client-ui-sidebar-right,package.json 中 dsh.client.immediately 为 true。

buddy/ 对应 CodeBuddy 国内版,workbuddy/ 对应 WorkBuddy 国际版。

补丁与自愈

插件需在 OFM channel-pack/pack.js 插入两处极小钩子:一处用于 meter 采集(usage.credit),一处为 globalThis.__wbLexicon?.rewrite?.(messages) 关键词中和。因 pluginManager 装卸任意插件时会跑 pnpm 并可能把 OFM 从 tarball 重新解包,补丁会被冲掉;Host 启动约 1.5s / 1.8s 后会自检并自动重打(selfHealed: true),且不会改变你在面板里选的开关。

命令行可用 scripts/patch-ofm.mjs(dry-run / --apply / --revert / --check)与 scripts/patch-keyword-bypass.mjs 手动预览或落盘;README 说明即使不手动打,启动后也会自愈,手动执行是为了当场看到改动内容。

注意:补丁改的是已加载的 pack.js;README 写明新装补丁后需要重启 DSH 一次才生效(之后开关类改动无需重启)。

安装与启用

本插件不是独立程序,请先确认 DSH 桌面版可用、OFM 已安装且至少登录一个 WorkBuddy / CodeBuddy 账号,并用 node --version 核对 Node 版本。README 在 Windows 11 + DSH 0.2.1-rc.2 上做过实测;Windows / macOS / Linux 均可(纯 Node + 浏览器侧 UI)。

资料中未给出形如 dsh plugin add github:... 的一行 CLI;官方 README 推荐两种方式。

方式 A:通过 DSH agent 安装(推荐)

在 DSH 中对 agent 说明(将路径换成你本机上的仓库目录):

把这个目录装成插件:<本仓库的绝对路径>

agent 会调用 pluginManager/installBundle,数秒内完成,README 称此方式不用重启(与下文补丁生效所需的「重启一次」是不同步骤)。

方式 B:pluginManager RPC

从 DSH 运行时上下文或窗口标题读取 http://127.0.0.1:<端口>,向下列端点 POST(需有效认证 cookie,细节见仓库 CONTRACT.md):

POST http://127.0.0.1:<端口>/api/pluginManager/installBundle
Content-Type: application/json
Cookie: dsh-auth-<...>=v1.<...>.<...>

{"type":"client-request","rpcId":"install-1","method":"pluginManager/installBundle",
 "payload":{"args":{"spec":"<本仓库绝对路径>","options":{"saveExact":true,"enabled":true}}}}

装完后的步骤

  1. 可选:在仓库目录执行补丁脚本预览或落盘:
cd <本仓库>
node scripts/patch-ofm.mjs              # 预览
node scripts/patch-ofm.mjs --apply      # 落盘
node scripts/patch-ofm.mjs --check      # 退出码 0 表示补丁在位

node scripts/patch-keyword-bypass.mjs
node scripts/patch-keyword-bypass.mjs --apply
node scripts/patch-keyword-bypass.mjs --check
  1. 重启 DSH 一次,使对 pack.js 的修改进入已加载模块。

  2. 打开侧边栏「用量」:应能看到时间范围切换、积分消耗、底部「已打补丁 OFM x.y.z」及「关键词风控中和」卡片。若显示未打补丁,可点面板「打补丁」或重新执行上述脚本。

社区目录页(与 DeepSeek / 幻方无官方从属关系):skillhub.cn/plugins/balongTTY/dsh-workbuddy-meter。

适用场景与注意

适合谁:已在 DSH 中使用 OFM 的 WorkBuddy / CodeBuddy,需要排查或绕过 11128 类 400,并希望按上游返回的 credit 与缓存命中情况做本地用量统计的开发者。

不适合或需知悉:

  • 未安装 OFM 或未登录账号时,面板无数据。
  • code 6004 usage exceeds frequency limit 为上游限流,需换账号或等待;EMPTY_RESPONSE 等可能与 max_tokens 过小有关,README 建议推理场景 max_tokens ≥ 4096。
  • 关键词中和是针对当前已观测策略的应急手段;上游不再拦截时应关闭总开关。
  • 插件以 当前 DSH 进程权限运行,并会修改 OFM 的 pack.js;安装前请阅读 源码与许可证,自行评估是否符合你的安全与合规要求。SkillHub 为社区插件目录,安装来源与维护责任在插件作者与使用者之间。

结尾

dsh-workbuddy-meter 把 WorkBuddy / CodeBuddy 上误导性的 unapproved channel 400 与 OFM 积分计量缺口拆开处理:前者用可开关的提示词无损中和与首条 system 兜底,后者用补丁采集 usage.credit 并在 Web UI 汇总。若你正被 11128 卡住,或需要在本地看清 buddy / workbuddy 的真实积分消耗,可从目录页或 GitHub 获取插件并按 README 完成安装、一次性重启与面板验证。

  • 目录页:https://www.skillhub.cn/plugins/balongTTY/dsh-workbuddy-meter
  • GitHub:https://github.com/balongTTY/dsh-workbuddy-meter
羽毛球分组比赛记分
小程序二维码

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

Xiaoye