🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

多服切换台 ginkgonine/dsh-server-hub

DeepSeek Harness
ginkgonine19 天前有提交已提供中文文档扫描:未发现敏感能力

DeepSeek Harness Web 的多服务商持久切换器

30.7/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ginkgonine/dsh-server-hub
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 19 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-server-hub(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/10 15:49:55

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 20 处,展示前 20 条)
  • 发起网络请求
    lib/index.js:222
    const response = await fetch(url, {
  • 发起网络请求
    lib/index.js:360
    const response = await fetch(statusUrl, {
  • 发起网络请求
    lib/client.js:389
    const response = await window.fetch(`${OVERVIEW_ROUTE}?${params.toString()}`, {
  • 发起网络请求
    lib/client.js:514
    const response = await window.fetch(`${REMOTE_ROUTE}${suffix}`, {
  • 发起网络请求
    lib/remote/index.js:54
    const catalog = await connections.request(targetId, '/catalog')
  • 发起网络请求
    lib/remote/controller.js:126
    const response = await this.connections.request(record.targetId, '/runs', { method: 'POST', signal,
  • 发起网络请求
    lib/remote/controller.js:136
    await this.connections.request(record.targetId, `/runs/${record.runId}/drain`)
  • 发起网络请求
    lib/remote/controller.js:171
    await this.connections.request(latest.targetId, `/runs/${latest.runId}/drain`)
  • 发起网络请求
    lib/remote/controller.js:319
    const reply = await this.connections.request(record.targetId,
  • 发起网络请求
    lib/remote/controller.js:380
    const response = await this.connections.request(current.targetId, `/runs/${encodeURIComponent(runId)}/interrupt`, { method: 'POST', input: {} })
  • 发起网络请求
    src/client.js:389
    const response = await window.fetch(`${OVERVIEW_ROUTE}?${params.toString()}`, {
  • 发起网络请求
    src/client.js:514
    const response = await window.fetch(`${REMOTE_ROUTE}${suffix}`, {
  • 发起网络请求
    src/index.js:222
    const response = await fetch(url, {
  • 发起网络请求
    src/index.js:360
    const response = await fetch(statusUrl, {
  • 发起网络请求
    src/remote/controller.js:126
    const response = await this.connections.request(record.targetId, '/runs', { method: 'POST', signal,
  • 发起网络请求
    src/remote/controller.js:136
    await this.connections.request(record.targetId, `/runs/${record.runId}/drain`)
  • 发起网络请求
    src/remote/controller.js:171
    await this.connections.request(latest.targetId, `/runs/${latest.runId}/drain`)
  • 发起网络请求
    src/remote/controller.js:319
    const reply = await this.connections.request(record.targetId,
  • 发起网络请求
    src/remote/controller.js:380
    const response = await this.connections.request(current.targetId, `/runs/${encodeURIComponent(runId)}/interrupt`, { method: 'POST', input: {} })
  • 发起网络请求
    src/remote/index.js:54
    const catalog = await connections.request(targetId, '/catalog')
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 多服务商持久切换

README

由 DeepSeek 最新模型翻译生成
🚀 DSH Server Hub 专为 DeepSeek Harness Web 打造的多实例 / 多服务器统一控制台与状态雷达 💡 DSH Server Hub 解决哪些问题? 你在本地并行开发多个项目,或在多台远程 GPU/开发服务器上同时跑 DeepSeek Harness (DSH) 任务时,常常被两件事困扰: 1. 「标签页地狱」:浏览器里开了一整排 DSH 网页,所有 Tab 都千篇一律叫「DeepSeek Harness」,每次找项目或机器都得抓周;切换时还会伴随页面重载与白屏闪烁。 2. 「盲盒式巡检」:离开网页后,你根本不知道哪个实例的 Agent 跑完了、哪台正卡在「等待人工授权/提问」环节,只能隔一会儿挨个切回去肉眼翻查。 DSH Server Hub 把本地运行的所有 DSH 实例,以及通过隧道转发到本机的远程 DSH 节点,全部聚合进同一个原生工作台。自动识别端口、单页无感热切、全矩阵 Agent 状态雷达与全局被动唤醒,让你在一个窗口内从容调度全部算力与会话。 📌 按需安装,轻重随心: * 基础多实例/多服切换(Hub):仅需在本地主控端安装!
展开完整文档(README 剩余 1 节)
🚀 DSH Server Hub

专为 DeepSeek Harness Web 打造的多实例 / 多服务器统一控制台与状态雷达

💡 DSH Server Hub 解决哪些问题?

你在本地并行开发多个项目,或在多台远程 GPU/开发服务器上同时跑 DeepSeek Harness (DSH) 任务时,常常被两件事困扰:

1. 「标签页地狱」:浏览器里开了一整排 DSH 网页,所有 Tab 都千篇一律叫「DeepSeek Harness」,每次找项目或机器都得抓周;切换时还会伴随页面重载与白屏闪烁。
2. 「盲盒式巡检」:离开网页后,你根本不知道哪个实例的 Agent 跑完了、哪台正卡在「等待人工授权/提问」环节,只能隔一会儿挨个切回去肉眼翻查。

DSH Server Hub 把本地运行的所有 DSH 实例,以及通过隧道转发到本机的远程 DSH 节点,全部聚合进同一个原生工作台。自动识别端口、单页无感热切、全矩阵 Agent 状态雷达与全局被动唤醒,让你在一个窗口内从容调度全部算力与会话。

📌 按需安装,轻重随心:
* 基础多实例/多服切换(Hub):仅需在本地主控端安装! 其它本地实例或远端服务器无需任何插件,只要端口在本机处于监听状态,即可立刻享受单页聚合与多标签切换;
* 全景状态雷达与提醒:如果你想在标签栏、浏览器 Tab 和桌面弹窗上实时看到各个实例的 Agent 运行状态(是否正在运行、是否卡在等待授权),只需在对应实例上也安装该插件即可;
* 远程 Agent 协作:主控与远程均安装插件后,选择允许执行的工作区并连接,即可在主控聊天中向其他实例派出任务、接收结果。

🖼️ 界面预览

DSH Server Hub 主界面

浏览器标签页会跟随多服务器 Agent 状态自动变化:

| 工作中 | 等待人工操作 | 已完成 |
| 多个服务器工作中 | 等待人工操作与服务器工作中 | 多个服务器已完成 |

✨ 核心特性

🔍 自动感知,开箱即用 (Zero-Config Auto Discovery)

* 智能本地扫描:原生探测跨平台(Windows / Linux / macOS)的本机 TCP 监听端口,自动识别本机启动的其他 DSH 实例或通过 SSH 隧道映射到本机的实例,免去繁琐配置。
* 灵活补充 & 个性命名:支持手动追加指定端口;支持给每台实例/服务器自定义直观名称(如 本地-电商重构、A100-训练机、4090-测试节点),配置持久化保存于浏览器本地,重启不丢。

⚡ 无缝热切,零白屏闪烁 (Seamless Hot Switching)

* 常驻 Iframe 后台热载:所有实例在后台保持挂载,切换标签时不会主动重新加载,上下文、聊天记录与输入框草稿均可保留。
* 深色模式体验调优:内置平滑过渡与暗色防闪烁机制,彻底告别 iframe 切换时的刺眼白屏。

🧭 全矩阵 Agent 状态雷达 (Status Radar)

各实例的 Agent 动向尽收眼底,一眼看透全局进度:
* 🏃 正在工作:工具调用与推理进行中(Hub 标签显示旋转指示器,提示活跃任务数)
* ❗ 等待确认:Agent 卡在危险操作授权或需要人工输入(琥珀色高亮呼吸,优先提醒)
* ✅ 任务完成:任务闭环结束,状态即时同步
* 💤 空闲 / 离线:清晰区分就绪与连接中断状态

📑 浏览器标签页智能同步 (Smart Browser Tab)

无需切回网页,看一眼浏览器 Tab 标题就能洞察一切:
* 🏃 有任务在跑:浏览器 Tab 标题前缀显示动态旋转字符(⠋ ➔ ⠙ ➔ ⠹ ➔ ⠸...),直观感知后台仍在全力运转;
* ❗ 需要人工介入:只要有任意一个实例卡在等待授权,Tab 标题立刻醒目标注彩色 ❗;
* ✅ 任务圆满完成:有实例产生新的任务完成状态后,自动呈现 ✅ 提示交付。

🔔 全局桌面被动唤醒 (Desktop Notifications)

* 精准桌面弹窗:在需要人工授权或任务结束时,主动推送到系统通知中心,不同事件类型区分弹窗提示。写代码或摸鱼时不再需要频繁肉眼巡检,有事它会自动叫你。
* 全生命周期守护:即使你暂时切出 Hub 面板回到普通聊天窗口,底层的监控器依然在后台静默运行,保证提醒不漏接。

🤝 远程 Agent,跨实例协作 (Remote Agents)

不止是切换页面,还能让不同实例的智能体分工完成任务。
* 一处下达,多端执行:在主控聊天中提出需求,主控智能体把任务派到已连接的远程,在指定工作区独立处理。
* 结果自动回传:执行过程留在远端,完成后把结果送回原主控会话;主控可以继续其他工作,无需反复查询进度。
* 勾选工作区即可开放:远程选择允许使用的已注册工作区并保存,沿用自己的模型与权限配置,无需另填路径或密钥。
* 身份与连接一眼分明:Hub 标签直接显示「主控 / 远程」与连接状态;主控用「远程管理」查看全局,远程用「远控设置」管理自己的工作区和连接。
* 名字直接告诉智能体:给远程实例命名后,名称会同步到连接记录,在新对话中也能按名称派单,无需重复解释端口。
* 回复方式随场景切换:主控「远程管理」提供「单轮回复」开关,适配只接收一轮回复的消息入口;关闭后保留后台执行与自动回报。
* 远程审批,直接聊:远程需要补充信息或申请权限时,先通知主控智能体;主控在原聊天里向你说明并询问,再把允许、拒绝或取消传回远端,原任务继续。可以正常聊天,也可以用 ask,无需打开 Hub。

📐 架构与工作拓扑

┌─────────────────────────────────────────────────────────────────┐
│ 本地工作站 (Windows / macOS / Linux PC) │ │ │ │ DSH 主控 Web ── 侧栏入口: [服务器 Hub] │ │ │ │ │ ├── 聚合标签 [主控本机] [本地项目B] [A100训练机] [测试节点] │ │ │ │ │ └── 常驻监控调度器 (Host + Client Overlay) │ │ │ (每30s自动扫描端口 / 约每1.5s轻量状态轮询) │ │ │ │ │ ├── 127.0.0.1:3001 (本机另一个项目目录跑的 DSH) │ │ │ │ │ ├── 127.0.0.1:3101 (SSH 隧道) ── 远程服务器 A (带插件) │ │ │ │ │ └── 127.0.0.1:3102 (SSH 隧道) ── 远程服务器 B (纯 DSH) │ └─────────────────────────────────────────────────────────────────┘

🚀 极速上手

DSH 版本兼容

Hub 基础功能自 0.2.3 起已按 DSH 0.2.0-rc.2 发布包 的接口适配,同时保留 0.1.5 系列支持。

* 更新 DSH peer 范围,避免新版安装/启动兼容性校验拒绝加载(optional peer 也参与 DSH 校验),无需使用版本豁免。
* Host 使用 agents.list() / agent.status 和 agent/status 跟踪真实生命周期,不再依赖 Web API 投影事件或历史 turn 日志推断状态。
* Web API 请求使用文档相对路径,支持将主控页面部署到带尾部 / 的反向代理子路径;代理仍需把该前缀剥离后转发到 DSH。
* 最新版 layout.selectPanel、Slot 注册和 __ModuleLoader__ 接口仍兼容,保留原有前端加载方式和 v1 状态协议。

运行 npm run check 可验证构建、生命周期/等待状态回归、Slot 注册及根路径/代理子路径请求。接口核对与自动化回归不等同于真实浏览器端到端验收。

🤝 远程智能体快速连接(0.3.0-beta.1)

选工作区 → 连接远程 → 在主控聊天中下达任务。

以主控 3080、远程 3081 为例:

1. 在主控的 Hub 上方选中 「远程 · 3081」,打开 「远控设置」;
2. 点击 「选择可执行工作区」,在远程窗口中勾选工作区并 「保存工作区」;
3. 返回设置面板,点击 「连接远程 :3081」。标签显示 「已连接」 后,即可回到主控聊天派出任务。

例如:

让 3081 分析项目的测试失败原因,完成后把结论汇总给我。

* 主控自动确定:当前主页面所在的实例就是主控。切换 Hub 标签只改变正在查看的实例,不需要另外选择主控。
* 授权随时调整:勾选并保存即可开放工作区;取消全部勾选并保存即可关闭。已连接实例可通过「修改工作区」调整许可,或通过「断开连接」取消连接。
* 两种入口,各司其职:选中主控时显示「远程管理」,集中查看已连接实例与任务记录;选中远程时显示「远控设置」,只管理该实例。

📌 使用条件:主控和远程均需安装插件,远程智能体需要 DSH 0.2 Web。支持同机端口和主控机器上的 SSH 回环转发;两端网页使用相同主机名(如都用 127.0.0.1),并通过根路径打开。

更多用法与故障排查见 远程智能体使用指南。

步骤 1:安装插件

1. 本地主控端(必选)

在作为主控的 DSH 实例上安装,启用 Hub 面板与智能发现:

dsh plugin --profile web add github:ginkgonine/dsh-server-hub
dsh web

2. 被监控端 / 远程(按需安装)

如果希望查看某个实例(本地或远程)的智能体状态,或向它派出远程智能体,在该实例上也执行安装并重启对应的 DSH Web:

dsh plugin --profile web add github:ginkgonine/dsh-server-hub
停止旧进程后重新启动
dsh web

(被 Hub 嵌入时会自动切换为纯后台轻量桥接模式,不产生冗余 UI)

步骤 2:启动更多实例(本机多开 或 远程隧道)

无论是本地多开还是远程映射,只要端口在本地处于监听状态,Hub 都会自动发现:

* 方式 A:本机多实例并行(多项目开发) 在另一个项目目录中,以指定端口启动第二个 DSH:
cd ~/another-project
dsh web --port 3001

* 方式 B:远程服务器映射(多服务器集群) 通过 SSH 将远端 DSH 服务的端口映射到本地的独立端口:将远程服务器 A、B 分别映射到本地 3101 和 3102 端口 ssh -N -L 3101:127.0.0.1:3080 user@server-a.internal ssh -N -L 3102:127.0.0.1:3080 user@server-b.internal

步骤 3:即刻掌控

1. 打开主控 DSH Web 页面,在左侧导航栏点击 「服务器 Hub」;
2. 插件会自动探测到刚才启动或映射的所有本地端口,并生成标签页;
3. 点击 「命名」 为每个实例设置易记别名(如 本地-前端重构、A100-训练);
4. 点击工具栏的 「通知」 授予浏览器通知权限,激活桌面弹窗;
5. 开启高能并行开发!

⚙️ 常用操作与配置

| 操作 | 说明 |
| 切换实例 | 点击顶部标签,即开即切,各实例上下文与草稿均完整保留 |
| 命名实例 | 选中标签后点击「命名」,输入自定义别名(持久化于本地浏览器缓存) |
| 移除实例 | 选中远程标签后点击「移除」,从当前浏览器的 Hub 标签栏隐藏,刷新不会重新出现;不停止服务或断开远控连接 |
| 手动添加端口 | 若使用了特殊端口或未自动列出,在输入框填写端口号并回车即可直连;重新添加被移除的端口即可恢复显示 |
| 桌面通知授权 | 点击工具栏「通知」按钮,浏览器授权后生效,等待操作与任务完成均有专属弹窗 |
| 管理远程 | 选中主控标签,打开「远程管理」,查看已连接实例、允许工作区和任务记录 |
| 配置远控 | 选中远程标签,打开「远控设置」,选择工作区、连接或断开该实例 |
| 返回主控会话 | 从左侧会话列表打开普通对话,后台监控依然在浏览器 Tab 标题与通知中生效 |

更新插件

在主控以及已安装状态桥接的被监控端分别执行:

dsh plugin --profile web update dsh-server-hub

更新后停止旧进程并重新运行 dsh web。如果主控与远端暂时没有同时更新,已有的 v1 状态协议仍可继续通信,但建议最终保持版本一致。

卸载插件

dsh plugin --profile web remove dsh-server-hub

卸载后同样需要重启对应的 DSH Web。远端卸载后仍可在 Hub 中打开,但不再提供智能体状态和通知;主控卸载后 Hub 入口会消失。

🔒 安全与网络设计

* 零会话隐私侵入:状态桥接端只返回约每 1.5 秒轮询一次的轻量聚合状态(当前工作任务数、等待确认数、完成事件序列号等),不传输聊天记录、提示词、工具参数或输出日志。
* 分层访问控制:扫描和状态总览 API 使用 DSH 的登录校验;供主控 Host 轮询的 /api/dsh-server-hub/status 仅接受无浏览器 Origin 的 Loopback GET/HEAD 请求(127.0.0.1 / ::1)。
* 远端权限独立:远程智能体仅使用远程开放的工作区,沿用远程的模型与工具权限;需要审批时,主控智能体在原聊天里询问你,再回传决定。
* 反向代理提醒:不要把状态桥接端点放在会将外部请求转换成 Loopback 来源的本机反向代理后面;如确有需要,应在代理层额外配置身份验证和访问控制。
* 低负载防护:
* 状态响应体最大读取 16 KiB,HTTP 探测超时为 1.2 秒且禁止跟随重定向;
* 端口探测并发数限制为 24,探测范围上限 256 个本机监听端口;
* 手动添加端口上限 64 个,且仍限定为 Loopback HTTP。

⚠️ 已知限制

* 自动扫描发生在主控 DSH 进程所在的机器。如果主控运行在 Linux 服务器上,它无法看到浏览器所在 Windows PC 的本地隧道端口。
* 自动探测仅访问 127.0.0.1 和 ::1 上的 HTTP 服务;仅绑定其他网卡地址、HTTPS 或任意完整 URL 的场景暂不支持。
* 目标 DSH 必须允许 iframe 嵌入。若响应包含 X-Frame-Options: DENY 或严格的 CSP frame-ancestors,需调整代理响应头或采用主控反向代理方案。
* 未安装插件的实例仍可打开和切换,但不提供智能体状态、浏览器标题汇总和桌面通知。
* 桌面通知必须由用户点击「通知」主动授权;若曾拒绝,需要在浏览器站点设置中恢复权限。
* 「已连接」表示已保存派单连接,不代表远程始终在线;智能体运行状态另行显示。
* 中断远程智能体或断开连接,不会自动停止它启动的容器、训练或其他后台进程;这类操作需要单独明确下达。

🛠️ 开发者指南

本项目已包含预构建的发布产物(位于 lib/)。构建过程完全基于标准 ESM 与 DSH 模块规范,不依赖闭源私有工具链。

1. 克隆代码仓库
git clone https://github.com/ginkgonine/dsh-server-hub.git
cd dsh-server-hub

2. 构建与运行测试
npm run build
npm test
npm run check

3. 安装本地源码版本至 DSH
dsh plugin --profile web add .

目录结构

├── src/
│ ├── index.js # Host 端:端口智能发现、极轻状态桥接、常驻监控与受保护 API │ └── client.js # Client 端:Slot 注入、iframe 容器组、状态动效与通知控制 ├── lib/ # 预编译产物目录 ├── cordis.patch.yml # Web profile 插件描述补丁 └── scripts/build.mjs # 轻量构建脚本

📄 开源许可证

本项目基于 MIT 许可证 开源。
预览分享卡片长什么样 ↓ginkgonine/dsh-server-hub
分享 · DeepSeek Harness Hub
ginkgonine/dsh-server-hub

DeepSeek Harness Web 的多服务商持久切换器

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部