中转站接入 bilibiliUID1480494301/dsh-relayhub-bridge
DeepSeek 客户端用动态口令把模型接入自建中转站并分插件记账
30/100
综合分
0
GitHub 星标
—
npm 周下载
5/5
用户评分
数据截至 2026/10/5 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/bilibiliUID1480494301/dsh-relayhub-bridge.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 9 处,展示前 9 条)
- 发起网络请求lib/client.js:351
response = await fetch(url, { - 发起网络请求lib/client.js:490
fetch(root + '/v1/toip/join', { - 发起网络请求lib/client.js:512
fetch('/api/relayhub/adopt', { - 发起网络请求lib/client.js:651
fetch(root + path, { - 发起网络请求lib/protocol.js:320
response = await fetch(url, { method, headers, body, signal, redirect: 'error' }) - 发起网络请求lib/usage.js:33
const response = await fetch(`${root}/v1/usage`, { - 发起网络请求lib/models.js:55
const response = await fetch(`${root}/v1/models`, { - 发起网络请求lib/api.js:118
const upstreamRes = await fetch(target, { - 发起网络请求lib/turn.js:81
response = await fetch(url, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis给这个插件打分已有 2 票↓
用户评分
当前均分 5 · 共 2 票 · 综合分 30
功能亮点
- 动态口令接入中转站
- 分插件记账
DeepSeek Harness 插件:用 TOIP 动态口令接入中转站,在站侧按插件统计日志。
README
由 DeepSeek 最新模型翻译生成dsh-relayhub-bridge
一个 DeepSeek Harness 插件,用 TOIP 动态密码把 Harness 连到 relay-hub 站点——一个自托管的 LLM 中转/网关(pip install hubrelay),并让站点为每个插件单独记一份日志。
它能做什么
1. 用一个 URL 加一个滚动的 6 位验证码加入站点。 网关上不用命令行,不用配对窗口,也不用找管理员要一次性验证码。这个验证码是 RFC 6238 TOTP 值,每 30 秒滚动一次。
2. 变成一个服务商。 它注册 relayhub 服务商路由,于是加入的站点里的模型就会像其他服务商一样出现在 Harness 中。
3. 给自己的流量打标签,方便按插件记账。 每个请求都带上 X-DSH-Plugin-Id,站点就会在全局请求日志之外,额外写入 pluginlogs/dsh-relayhub-bridge/<date>.jsonl。这样你就能知道「这个插件干了什么」,不用去翻原始 API 日志。
环境要求
- DeepSeek Harness 0.2.0-rc.2 或更新版本,且属于 0.2.x 系列。
展开完整文档(README 剩余 1 节)
dsh-relayhub-bridge
一个 DeepSeek Harness 插件,用 TOIP 动态密码把 Harness 连到 relay-hub 站点——一个自托管的 LLM 中转/网关(pip install hubrelay),并让站点为每个插件单独记一份日志。
它能做什么
1. 用一个 URL 加一个滚动的 6 位验证码加入站点。 网关上不用命令行,不用配对窗口,也不用找管理员要一次性验证码。这个验证码是 RFC 6238 TOTP 值,每 30 秒滚动一次。
2. 变成一个服务商。 它注册 relayhub 服务商路由,于是加入的站点里的模型就会像其他服务商一样出现在 Harness 中。
3. 给自己的流量打标签,方便按插件记账。 每个请求都带上 X-DSH-Plugin-Id,站点就会在全局请求日志之外,额外写入 pluginlogs/dsh-relayhub-bridge/<date>.jsonl。这样你就能知道「这个插件干了什么」,不用去翻原始 API 日志。
环境要求
- DeepSeek Harness 0.2.0-rc.2 或更新版本,且属于 0.2.x 系列。
verifiedAgainst: 0.2.0-rc.2(本插件开发和测试所用的确切构建版本;它声明的 peer 范围是 @deepseek-ai/cordis ~4.0.4、 @deepseek-ai/schemastery ~3.18.4)。
本插件是针对 0.2.x 插件契约编写的(ctx.llm.registerAdapter / registerConfigurableProviders、dsh.bundle.patch)。
Harness 还在开发者预览阶段,插件 API 可能变化;升到 0.3.x 可能需要这里同步发一个匹配版本。如果你需要稳定,就锁定 Harness 版本。
- 一个运行 hubrelay ≥ 0.3.0 的 relay-hub 站点(TOIP 在 0.3.0 加入)。
本仓库的跨实现测试套件跑在 verifiedAgainst: hubrelay 0.3.1 上。
- Node.js ≥ 18(插件用到 fetch、AbortSignal.timeout 和 node:dgram)。
声明的服务(inject)
export const inject = ['llm']
llm 是本插件用来注册 relayhub 的服务商注册表。除此之外不需要别的,尤其是本插件不依赖任何 Harness 内部包——只依赖 @deepseek-ai/cordis 和 @deepseek-ai/schemastery,两者都是可选 peer。这是有意为之:内部包无法从配置档的 node_modules 里解析,依赖它们正是插件升级时挂掉的原因。
安装
<profile> 是你的 Harness 配置档名称——比如 desktop、web
dsh plugin --profile <profile> add dsh-relayhub-bridge
具体例子
dsh plugin --profile desktop add dsh-relayhub-bridge
dsh plugin --profile web add dsh-relayhub-bridge
或者直接从本仓库安装(不走注册表):
bash
dsh plugin --profile <profile> add github:bilibiliUID1480494301/dsh-relayhub-bridge
从本地检出安装(必须用绝对路径): bash
dsh plugin --profile <profile> add /absolute/path/to/dsh-relayhub-bridge
确认已经装上: bash
node scripts/check-package.cjs # 打包契约,19 项检查
node --test test/ # 21 项协议测试
用法
1. 在站点上操作(只需一次) bash hubrelay toip station --name lab-hub # 打印一个代码 + otpauth:// URI hubrelay toip ticket --name dsh-laptop --plugins dsh-relayhub-bridge
-> 打印一个注册密钥(rhe_…),只显示这一次
2. 从插件操作
设置 → relay-hub,整个流程都能在界面上完成:粘贴站点地址,点 Check station 确认对方提供 TOIP,粘贴当前的 6 位代码(或一张注册票据),然后按 Join station。页面随后会显示你连的是哪个站点、注册了多少个模型,还有一个 Disconnect 操作,用来清掉已存的 token。
底层上,这个页面执行的就是同一套 join,并把结果(baseURL、apiKey、stationID、models)写进本插件的设置命名空间——服务商读的也是这个命名空间——所以不用再手动配别的东西。
同样的 join 也能用代码调: js // enrollment (first contact) const joined = await bridge.join({ stationURL: 'http://192.168.1.10:8799', ticket: 'rhe_…', name: 'dsh-laptop', })
// rejoin: the rolling code from the station console or a TOTP app
const again = await bridge.join({
stationURL: 'http://192.168.1.10:8799',
code: '123456',
})
bridge 就是插件暴露在 Cordis 上下文里的对象,名字叫 relayhubBridge。join 返回的正是服务商需要的东西: js { root: 'http://192.168.1.10:8799', baseURL: 'http://192.168.1.10:8799/v1', // always ends in /v1 apiKey: 'rht_…', // session token — treat as a credential stationID: 'rst_…',
models: [{ id: 'deepseek-v4-pro', contextWindow: 1000000 }],
}
把 baseURL、apiKey、stationID 和 models 存进插件配置(Harness 的模型设置页改的就是这几个值),然后选一个模型。
为什么 baseURL 总是以 /v1 结尾: Harness 的 Messages 适配器只在路径末尾不是 /v1 时才补上 /v1,所以 /v1 是唯一没有歧义的写法。插件给你的永远是这一种。
3. 自动找站点(局域网) js const stations = await bridge.discover({ timeoutMs: 3000 })
// [{ name: 'lab-hub', url: 'http://192.168.1.10:8799', toipEnabled: true, models: 3 }]
它广播的探测包是 RELAYHUB-DISCOVER-v2,站点回应的也是这个,回复里带着 TOIP 能力块——所以一次广播就能同时拿到地址,以及能不能用代码加入。广播过不了子网;站点在远端的话,直接给 URL。
站点上的按插件日志桥接就位后,中转站会保留按插件分开的视图: bash hubrelay toip logs list # every plugin with logs hubrelay toip logs show dsh-relayhub-bridge # enrollment events + summary + recent calls
也可以打开中转站的管理控制台 → 插件 / Plugins。
日志行只含元数据——模型、协议、状态、token 计数、延迟、IP。提示词与补全文本两边都从不写入。
安全说明
- 会话 token 是真正的凭据。 它会写进配置,本插件从不记录它。中转站只存它的 SHA-256。
- 本插件从不计算注册密钥,也永远不需要 TOTP 种子:它接受 30 秒过期的滚动口令。如果你为了省事确实留了种子,请像对待密码一样对待它。
- 口令和 token 走明文 HTTP 过网,这与 relay-hub 配对码的残余风险相同。面对不可信网络,请在前面加 TLS。
- 吊销:在中转站执行 hubrelay toip revoke <name>(同时收回会话 token)。想轮换中转站密钥又不打扰在线会话:hubrelay toip station --force。
如何验证
- node --test test/ —— 21 个测试,覆盖 RFC 6238 SHA-1 向量(证明口令与中转站逐字节一致)、窗口容差、base32 手输容差、URL 规范化、baseURL 规则、真实 HTTP 接入与错误路径,以及失败分类。
- node scripts/check-package.cjs —— Harness 插件打包契约:dsh- 前缀、 dsh-plugin 关键字、ESM、相对且不越界的 dsh.bundle.patch、发布条目,以及不依赖 harness 内部包。
许可证
MIT
dsh-relayhub-bridge 中文
一个 DeepSeek Harness 插件:用 TOIP 动态口令把 Harness 接到 relay-hub 中转站(自托管大模型中转站,pip install hubrelay),并让中转站按插件分开记日志。
它做什么
1. 一个网址 + 一枚滚动 6 位口令就能接入。 不需要在网关执行 pair begin,不需要开配对窗口,不需要找人要一次性配对码。口令是 RFC 6238 TOTP,每 30 秒滚动一次。
2. 变成一个 provider。 它注册 relayhub provider 路由,接入后中转站的模型会像其他 provider 一样出现在 Harness 里。
3. 给自己的流量打标签,实现按插件分账。 每个请求带 X-DSH-Plugin-Id,于是中转站会在全局请求日志之外,另写 pluginlogs/dsh-relayhub-bridge/<日期>.jsonl。想知道「这个插件整体干了什么」就不必去翻原始 API 日志了。
兼容性
- DeepSeek Harness 0.2.0-rc.2 及以上、0.2.x 线内。
本插件按 0.2.x 的插件契约编写(ctx.llm.registerAdapter / registerConfigurableProviders、dsh.bundle.patch)。
Harness 处于开发者预览期,插件 API 可能变更;升到 0.3.x 可能需要对应的新版本。
需要稳定的话请锁住 Harness 版本。
- 中转站需 hubrelay ≥ 0.3.0(TOIP 是 0.3.0 加入的)。
- Node.js ≥ 18(用到 fetch、AbortSignal.timeout、node:dgram)。
声明的服务(inject) js
export const inject = ['llm']
llm 是 provider 注册表,本插件用它注册 relayhub。除此之外不需要别的服务;特别地,本插件不依赖任何 Harness 内部包——只用 @deepseek-ai/cordis 与 @deepseek-ai/schemastery,且都是可选 peer。这是刻意的:内部包在 profile 的 node_modules 里解析不到,依赖内部实现正是插件「一升级就坏」的原因。
安装bash
<profile> 是你的 Harness profile 名,例如 desktop、web
dsh plugin --profile <profile> add dsh-relayhub-bridge
可直接复制的例子
dsh plugin --profile desktop add dsh-relayhub-bridge
dsh plugin --profile web add dsh-relayhub-bridge
也可以直接从本仓库安装(不经过 npm registry): bash
dsh plugin --profile <profile> add github:bilibiliUID1480494301/dsh-relayhub-bridge
从本地目录安装(路径必须绝对): bash
dsh plugin --profile <profile> add /absolute/path/to/dsh-relayhub-bridge
自检: bash
node scripts/check-package.cjs # 打包契约,19 项检查
node --test test/ # 21 个协议测试
用法
1. 中转站侧(一次性) bash hubrelay toip station --name lab-hub # 打印当前口令与 otpauth:// 链接 hubrelay toip ticket --name dsh-laptop --plugins dsh-relayhub-bridge
-> 打印登记口令(rhe_…),只显示这一次
2. 插件侧
设置页 → relay-hub 里可以走完整个流程:填中转站地址 → 点 Check station 确认该站支持 TOIP → 填入当前 6 位口令(或一枚登记口令)→ 点 Join station。
页面随后显示你在哪个站、注册进了几个模型,并提供 Disconnect 清掉已存的令牌。
这个页面做的就是同一套接入,并把结果(baseURL / apiKey / stationID / models)写进本插件的 settings 命名空间——也就是 provider 读取的那一份,所以不需要再手工配任何东西。
同样的接入也可以用代码调: js // 首接:用登记口令 const joined = await bridge.join({ stationURL: 'http://192.168.1.10:8799', ticket: 'rhe_…', name: 'dsh-laptop', })
// 重接:用滚动口令(控制台或验证器 App 读到的 6 位) const again = await bridge.join({ stationURL: 'http://192.168.1.10:8799', code: '123456', })
bridge 是插件挂在 Cordis 上下文上的对象,名字是 relayhubBridge。接入结果正好就是 provider 需要的四样东西:baseURL、apiKey、stationID、models (baseURL 一定以 /v1 结尾,理由见英文部分)。
设置页会自动把它们写进配置;用代码调的话,自己把这四样填进插件配置即可。
3. 局域网自动发现 js const stations = await bridge.discover({ timeoutMs: 3000 })
广播的是中转站会应答的 RELAYHUB-DISCOVER-v2 探测包,应答里带 TOIP 能力块,所以一次广播同时拿到「地址」与「能不能用口令接入」。广播不跨网段;远端站点请直接填网址。
中转站上的插件日志 bash hubrelay toip logs list # 列出所有有日志的插件 hubrelay toip logs show dsh-relayhub-bridge # 接入事件 + 汇总 + 最近调用
或打开中转站管理控制台的 插件 / Plugins 页。
日志行只有元数据:模型、协议、状态、token 数、延迟、IP。两侧都不写 prompt/completion 文本。
安全须知
- 会话令牌是真凭证:它只进配置,本插件从不把它写进日志。中转站只存它的 SHA-256。
- 本插件不保存口令种子,也从不自己算登记口令:它接受的是 30 秒后就过期的滚动口令。如果你为了省事存了种子,请像对待密码一样对待它。
- 明文 HTTP 下口令与令牌可被同网段看到——与 relay-hub 配对码相同的残余风险。
不可信网络请在前面加 TLS。
- 吊销:在中转站执行 hubrelay toip revoke <名称>(会一并收回会话令牌)。
轮换站点种子而不打扰在线会话:hubrelay toip station --force。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
bilibiliUID1480494301/dsh-relayhub-bridge
用动态口令把模型接入自建中转站并分插件记账
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目