DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

vi0let-dev /

vi0let-dev/dsh-free-channels

Verified

为 DeepSeek Harness 单独接入 WorkBuddy 国内版 / 国际版与 Raccoon 三个账号渠道:登录、多账号池、模型开关、积分余额与限流探测;国内版额外做系统提示词指纹改写。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@eb097b44

dsh-free-channels — WorkBuddy 国内版 / 国际版 + Raccoon for DeepSeek Harness

dsh-free-channels

把 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 分 幂等,每号一次
限流探测 ✅ ✅ ✅ 「测试 / 重测 / 清除限流标记」
图片输入 ✅ ✅ ✅ 按模型能力投影,超大图自动缩放
系统提示词指纹改写 ✅ 仅国内版 ❌ 原样透传 ❌ 原样透传 见下方「国内版的提示词处理」

刻意不包含(与上游的差异)

  • 其余 10 个渠道(CodeArts / LobsterAI / Qoder / Qoder CN / TRAE / Cline / Loomy / MiniMax / ZCode / Gemini)
  • 匿名免费车道、EAC 协付渠道、Kilo 免费车道
  • 本地 OpenAI 兼容网关(上游的 127.0.0.1:8326)
  • 用量徽标、Token 账本、数据看板、运行日志页
  • 公告推送、自更新器、热重载
  • 「锁定永久积分」选号策略、供应商拖拽排序
  • 每日签到(一键领积分):按你的要求已整体移除,未随国内版恢复。 如实说明三个渠道的端点情况:国内版上游确实有 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.

约束(由单元测试逐词锁死):

  • 替换句与原句零单词重叠(原句 9 个词一个都不出现);
  • 替换句自身无重复单词;
  • 只替换这一句,提示词的其余部分(工具约定、行为准则)逐字保留;
  • 国际版与 Raccoon 原样透传,不做任何改写;
  • 只改发往上游的 options.system,不改会话历史里的 system 消息。

实现见 src/channel/prompt-guard.ts,接入点是 buddy-adapter.ts 组装请求体的 那一步。命中大小写/句号变体均可;带 /g 正则的 lastIndex 已复位,重复调用结果稳定。


安装

方式一:从 GitHub 安装(推荐)

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.0

GitHub 源在安装前会先 git ls-remote 预检可达性(默认 5 秒);国内网络若提示 「无法访问 GitHub」,可挂代理后重试。

方式二:从本地目录安装(开发调试用)

dsh plugin --profile <profile> add "C:\path\to\dsh-free-channels"

插件页里填该目录的绝对路径(也可写成 file:... / link:...)。

⚠️ 这是链接安装:node_modules 里是指向源目录的符号链接,源目录不能移动、 改名或删除,否则插件立即失效;改代码后需重启 DSH 生效。

方式三:从 .tgz 安装(分发用,装完可删源码)

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 操作都可能 失败并清掉已安装副本。

装完之后

  1. 插件页确认 dsh-free-channels 已出现且没有 error 标记(新 bundle 默认启用);
  2. 刷新页面(浏览器半身随新 bundle 加载,不刷新看不到设置页);
  3. 打开 设置 → 白嫖渠道,点「添加账号」登录。

⚠️ 与 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 里的一项)。

添加账号

  1. 点「添加账号」,插件会返回一个登录地址并立即打开新窗口;
  2. WorkBuddy:在打开的页面完成登录,插件后台轮询到 token 后自动把账号加入池;
  3. Raccoon:在打开的本地页面里选「微信扫码」或「短信登录」;
  4. 页面会每 1.5 秒询问一次登录状态,成功后自动刷新账号列表。

⚠️ 如果浏览器拦截了弹窗,请允许本站弹窗后重试。插件不会把设置页导航走。

账号操作

按钮 行为
启用 / 停用 只影响自动选号;停用账号仍参与积分查询与凭据续期
测试 无条件发一次真实的最小请求,只回答「现在能不能用」,不写任何状态
清除限流标记 不发请求,直接清掉该账号的限流标记
新手奖励 仅 Raccoon:领取一次性的桌面端登录奖励(幂等)
删除 同时清除该账号的凭据(需要重新登录)

模型开关

  • 关闭的模型从模型选择器消失,但仍列在设置页(否则用户再也无法重新打开);
  • 「全部打开 / 全部关闭」作用于该渠道的全部模型;
  • 支持搜索。

限流行为

  • 撞到额度限流(业务码 6004 / HTTP 429)→ 给该账号的该模型写一个解禁时刻, 并自动换下一个账号重试;
  • 撞到「模型饱和」(业务码 14003)→ 不写标记、不换号,只建议换模型: 换号对这种情形无效,写标记反而会把整池锁住一小时;
  • 限流标记只接受更晚的解禁时刻(防止一次短兜底覆盖掉服务端给的真值)。

配置

本插件没有 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/                       离线测试(49 项)

构建

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.mjs

49 个用例,覆盖:请求栅栏、限流判定与重置时刻解析、账号池的选号/限流/黑名单/ 重排/持久化、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)。
  • 日志不含内容:只记事件与错误,不记消息正文、不记 token。

详见 AUDIT.md。


已知限制(未验证项,务必先读)

以下内容在本机无法验证,需要真实 DSH 与真实账号才能确认:

  1. slot 渲染:settings.section 的注册参数与 props 形状取自实时 inspection (DSH 0.2.1-rc.3),但「页面是否真的渲染出来、布局是否如预期」未验证。
  2. 真实登录流程:WorkBuddy 的轮询式登录与 Raccoon 的扫码/短信登录都依赖 上游接口;本插件只做了静态与离线验证,没有用真实账号跑通。
  3. 凭据续期:refresh_token 的轮换行为由上游决定,未做端到端验证。
  4. 图片投影:缩放后的字节预算与上游网关的实际限制是否匹配,未验证。
  5. @deepseek-ai/* 契约:三个宿主包的导入符号取自 app.asar 的导出表; 测试用的是桩(test/stubs/),不构成「与宿主 API 一致」的证明。
  6. 卸载残留:ctx.effect 的清理函数已按规范返回,但「卸载后是否真的无残留」 需要真机验证。

许可

MIT。src/channel/** 的实现抽离自 MIT 许可的 dsh-our-free-model (其渠道包又来自 dsh-codearts-auth)。 详见 LICENSE。

—/ 5

No ratings yet

Verified DSH bundle

Commit eb097b44bd53

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout