dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
为 DeepSeek Harness 单独接入 WorkBuddy 国际版与 Raccoon 两个账号渠道:登录、多账号池、模型开关、积分余额与限流探测。Standalone extraction of dsh-our-free-model v2.5.7.
把 WorkBuddy 国内版(腾讯 · copilot.tencent.com)、WorkBuddy 国际版 (腾讯 · www.workbuddy.ai)与 Raccoon(商汤小浣熊)三个账号渠道单独接入 DSH: 登录、多账号池、模型开关、积分查询与限流探测,全部在一个设置页里完成。
本插件是 dsh-our-free-model@2.5.7中「白嫖模型接入」部分的三渠道抽离版:上游把 13 个渠道打包在一起,本插件
只保留用户指定的这三个(腾讯系国内版 + 国际版,以及 Raccoon),其余全部移除。
能力 · WorkBuddy 国内版 · WorkBuddy 国际版 · Raccoon · 说明 登录 · ✅ 浏览器轮询式 · ✅ 浏览器轮询式 · ✅ 微信扫码 / 短信 · 本地页承载,不依赖官方客户端 多账号池 · ✅ · ✅ · ✅ · 拖拽排序决定选号优先级 凭据静默续期 · ✅ refresh_token · ✅ refresh_token · ✅ refresh_token · 只刷新「本次实际用到」的那个账号 模型开关 · ✅ · ✅ · ✅ · 关闭项仍列出,可随时重新打开 积分余额 · ✅ · ✅ · ✅ · 逐账号查询,失败带原因 一次性奖励 · ❌ · ❌ · ✅ 桌面端登录奖励 3000 分 · 幂等,每号一次 限流探测 · ✅ · ✅ · ✅ · 「测试 / 重测 / 清除限流标记」 图片输入 · ✅ · ✅ · ✅ · 按模型能力投影,超大图自动缩放 系统提示词指纹改写 · ✅ 仅国内版 · ❌ 原样透传 · ❌ 原样透传 · 见下方「国内版的提示词处理」
MiniMax / ZCode / Gemini)
127.0.0.1:8326)如实说明三个渠道的端点情况:国内版上游确实有 checkin-activity-status / daily-checkin;国际版内核里连这两个路径的字面量都不存在;Raccoon 的每日积分 由服务端按日自动发放、无端点。本插件只保留三者都真实可用的积分余额查询 与 Raccoon 的一次性登录奖励。
WorkBuddy 国内版(copilot.tencent.com)会留存请求体里的 messages[0].content。 DSH 注入的系统提示词首句带产品名自述,按你的要求,仅国内版在发送前把它换成 一句语义等价、用词完全不同的说法:
· 内容 原文(命中即替换) · You are an AI agent powered by DeepSeek Harness. 替换为 · Serving as autonomous coding helper operating within this environment.
约束(由单元测试逐词锁死):
options.system,不改会话历史里的 system 消息。实现见 src/channel/prompt-guard.ts,接入点是 buddy-adapter.ts 组装请求体的 那一步。命中大小写/句号变体均可;带 /g 正则的 lastIndex 已复位,重复调用结果稳定。
dsh plugin --profile <profile> add https://github.com/vi0let-dev/dsh-free-channels也可以在 插件 页 → 添加插件 → 安装第三方插件,填入同一个地址:
https://github.com/vi0let-dev/dsh-free-channels固定版本(不跟随分支变动,推荐长期使用):
https://github.com/vi0let-dev/dsh-free-channels#v0.1.0GitHub 源在安装前会先 git ls-remote 预检可达性(默认 5 秒);国内网络若提示 「无法访问 GitHub」,可挂代理后重试。
dsh plugin --profile <profile> add "C:\path\to\dsh-free-channels"插件页里填该目录的绝对路径(也可写成 file:... / link:...)。
⚠️ 这是链接安装:node_modules 里是指向源目录的符号链接,源目录不能移动、 改名或删除,否则插件立即失效;改代码后需重启 DSH 生效。
npm pack # 在插件目录执行,得到 dsh-free-channels-0.1.0.tgz
dsh plugin --profile <profile> add "D:\somewhere\dsh-free-channels-0.1.0.tgz"这类安装会把包解出一份真实副本放进 profile 的 pnpm store,因此源码目录可以删。 但 `.tgz` 本身必须保留:profile 的 package.json 记录的是 file:…/dsh-free-channels-0.1.0.tgz,删掉它之后任何一次 profile 的 pnpm 操作都可能 失败并清掉已安装副本。
dsh-free-channels 已出现且没有 error 标记(新 bundle 默认启用);dsh-our-free-model 冲突两个插件注册同名的 provider 路由(workbuddy、raccoon)。DSH 的 ctx.llm.registerAdapter() 对重复路由会抛 DUPLICATE_ADAPTER,因此:
不要同时启用这两个插件。 若要换成本插件,请先停用 dsh-our-free-model。
本插件对重复注册做了幂等处理(保留已有路由、跳过本次注册并记一条 warn), 所以「同一插件被重启两次」不会炸;但那是同一个插件的场景,跨插件仍会 出现「谁的实现生效不确定」—— 这种不确定性本身就是不该有的。
账号索引与模型开关写在:
$DSH_HOME/dsh-free-channels/state.json不复用上游的 $DSH_HOME/channel-pack/state.json —— 那份文档是同机多 profile 共享的,且采用整体替换写入,两个插件共用会互相抹掉对方不认识的字段。
登录凭据不在这里:它们写在宿主凭据库(.credentials.yaml)的 WORKBUDDY_ACCOUNT_* / RACCOON_ACCOUNT_* ref 下。
可用 DSH_FREE_CHANNELS_STATE_DIR 覆盖状态目录(测试用)。
打开 设置 → 白嫖渠道(settings.section 里的一项)。
⚠️ 如果浏览器拦截了弹窗,请允许本站弹窗后重试。插件不会把设置页导航走。
按钮 · 行为 启用 / 停用 · 只影响自动选号;停用账号仍参与积分查询与凭据续期 测试 · 无条件发一次真实的最小请求,只回答「现在能不能用」,不写任何状态 清除限流标记 · 不发请求,直接清掉该账号的限流标记 新手奖励 · 仅 Raccoon:领取一次性的桌面端登录奖励(幂等) 删除 · 同时清除该账号的凭据(需要重新登录)
并自动换下一个账号重试;
换号对这种情形无效,写标记反而会把整池锁住一小时;
本插件没有 Config(不写 profile 的 cordis.patch.yml)。行为通过环境变量微调:
变量 · 默认 · 作用 DSH_HIDE_MODELS_WITHOUT_ACCOUNT · 1(开) · 设为 0 后,即使没有已登录账号也列出模型 DSH_FREE_CHANNELS_STATE_DIR · — · 覆盖状态目录(测试隔离用)
dsh-free-channels/
├── index.js Host 半边:装配 + 本机 HTTP 路由
├── client.js 浏览器半边:设置页(手写 ModuleLoader bundle)
├── cordis.patch.yml bundle patch(一行 insert)
├── package.json
├── icon.svg
├── locale/{zh,en}.json 插件管理器显示的标题/描述
├── src/channel/ 渠道实现(TypeScript 源码 + 编译产物)
│ ├── product.ts WorkBuddy 产品配置(端点 / UA 分档 / 兜底模型表)
│ ├── buddy.ts WorkBuddy 协议常量与纯解析
│ ├── buddy-oauth.ts external-link-v2 轮询式登录与续期
│ ├── buddy-auth.ts 认证服务(多账号 + 调度器)
│ ├── buddy-adapter.ts WorkBuddy 的 LlmAdapter
│ ├── raccoon*.ts Raccoon 的协议 / 登录页 / 认证 / 适配器 / 积分
│ ├── credits.ts 腾讯系积分余额端点(只读)
│ ├── account-pool.ts 多账号索引、选号、限流标记、模型黑名单
│ ├── account-store.ts 状态文档(原子写)
│ ├── rate-limit.ts 限流判定与重置时刻解析
│ ├── prompt-guard.ts 国内版系统提示词指纹改写(仅 buddy 调用)
│ ├── register.ts 适配器注册的幂等包装
│ ├── rpc.ts 设置页要用的全部业务编排
│ ├── image-budget.ts 图片投影预算
│ ├── message-shape.ts 消息序列化
│ ├── sse.ts SSE 解析与思考链处理
│ ├── openai-compat.ts OpenAI 兼容流消费
│ ├── model-queue.ts 按日额度的时间工具
│ └── ...
├── scripts/build.mjs TypeScript → ESM 编译(类型擦除)
└── test/ 离线测试(48 项)src/channel/*.ts 需要先编译成同目录的 .js(Host 半边由 Node 直接 import(), 它不认识 TypeScript):
npm install --no-save typescript # 或在任意目录装一份
TYPESCRIPT_DIR=<含 node_modules/typescript 的目录> node scripts/build.mjs构建只做类型擦除,不改写 import 路径,因此产物与源码一一对应。仓库已包含 编译后的 .js,正常安装不需要构建。
node test/run.mjs48 个用例,覆盖:请求栅栏、限流判定与重置时刻解析、账号池的选号/限流/黑名单/ 重排/持久化、Raccoon 昵称、模型目录合并、国内版提示词改写、产品配置一致性、 浏览器半身的注册契约与纯函数, 以及 8 项真实 `apply()` 装配断言(三个 provider 注册 / 路由挂载 / /summary / /rpc 分派 / 请求栅栏 / 404 / 卸载后路由被摘掉)。
test/stub-loader.mjs 会把 @deepseek-ai/* 映射到 test/stubs/*(插件目录里 没有 node_modules,否则桩会遮住宿主真正的实现)。
ctx.credentials.set()。插件自己的 state.json 里只有账号 id、昵称、有效期与限流时间戳,没有任何 token。
/api/dsh-free-channels(同源、127.0.0.1)。路由有三道栅栏:回环地址检查、Host 头必须是回环字面量 (挡 DNS-rebinding)、必须带自定义头 x-dsh-free-channels: 1(挡跨站请求)。
官方端点(copilot.tencent.com / www.workbuddy.ai / xiaohuanxiong.com)。