dsh-msp

DSH PLUGIN浏览器与联网

仓库 hxh230802/dsh-msp

浏览器与联网 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

把本机 MSP 网络上每个节点的工具暴露给 DeepSeek Harness(ESP32 / 桌面应用 / 任何 MSP 节点)

一句话选型结论

按资料字段整理

dsh-msp 是浏览器与联网类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类浏览器与联网 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-28 创建于 2026-10-26
README 12.4 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:hxh230802/dsh-msp#v0.1.3
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注

上游标签

deepseekdeepseek-harnessdsh-pluginesp32mcpmspnotificationsplugin

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在浏览器与联网场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-msp当前 L5 · 运行验证通过 低风险 0 未标注 有
dsh-our-free-model L3 · 安装规范通过 低风险 8,796 未标注 有
dsh-web L3 · 安装规范通过 低风险 8,549 未标注 无
BrowserSkill L4 · 沙盒安装通过 低风险 8,456 未标注 有
dsh-pocket L5 · 运行验证通过 低风险 1,656 0.2.0-rc.2 等 12 个 有
Browser4 L4 · 沙盒安装通过 中风险 1,152 未标注 有

仓库档案

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方hxh230802仓库 dsh-msp · 默认分支 master
分类浏览器与联网network
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-26 · 2026-10-28最后推送 2026-10-28
本站收录2026-10-30首次进入本站目录的时间

README 全文

12.4 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-msp

把本机 MSP 网络上每个节点的工具暴露成 DeepSeek Harness 工具,agent 直接调用。

English | 中文

agent ──(DSH tool)──> dsh-msp ──(MSP/TCP, 每节点一条连接)──> gateway / notchpeninsula / …
└─(MCP/WS)─> ESP32

装

dsh plugin --profile  add /path/to/dsh-msp --ignore-workspace-root-check

# 按 tag 固定版本(除了作者本人,建议都这么装:跟分支装意味着任何提交都算已发布)
dsh plugin --profile  add github:hxh230802/dsh-msp#v0.1.1 --ignore-workspace-root-check
dsh --profile  --dump-config | grep -A8 'id: dsh-msp'   # 确认配置树里有这行

host 侧插件,改完要重启 GUI 才生效(刷新页面不算)。卸载:
dsh plugin --profile remove dsh-msp。

配

cordis.patch.yml(装成 profile 依赖后自动并进配置树):

- insert:
- id: dsh-msp
name: dsh-msp
config:
nodesDir: ~/.msp/nodes
includeNodes: []        # 非空 = 只连这些节点(白名单)
excludeNodes: []        # 黑名单,例如 [test.node1, demo_signals]
toolPrefix: msp_
discoveryMs: 3000       # 发现目录扫描间隔
callTimeoutMs: 30000
retryMs: 3000           # 单节点断开后的重拨间隔
staleAfterMs: 30000     # 租约:超过这么久没续租的声明视为已死
maxPeers: 16
verbose: false

行为

  • 每个节点一条连接:按发现目录里的租约跟踪所有新鲜节点(> staleAfterMs 未续租
    的声明直接忽略——这就是 MSP 的"崩溃自动消失")。
  • 工具名 = msp_<节点>_<工具>:节点 id 归一化成 [a-z0-9_];若工具名本身已带
    该前缀则不重复拼(notchpeninsula_hellomsp_echo → msp_notchpeninsula_hellomsp_echo)。
  • 断开 ≠ 摘除:socket 断了工具仍在(否则模型手里的工具名会跳变),调用返回
    「未连接」;只有租约过期(节点真的没了)才摘掉那组工具。
  • 清单跟随:节点推 MANIFEST_UPDATE(设备上线/掉线、工具增删)时按名字 diff,
    不重启会话。
  • 错误即值 → 抛错:MSP 的 ToolResult(error=...) 在 DSH 侧表现为 throw。
  • 零依赖:MSP 客户端在 lib/msp.js 里自带,不引 npm 包。
  • 每个进程一个唯一 node id:插件以 dsh-msp-<8hex> 加入网络,启动时随机生成。
    不能写死 dsh-msp——对端的连接表按 node id 为键(connections[peer_id] = conn),
    握手去重还按 id 比较决定方向,两个进程报同一个 id 在对端眼里就是"同一个 peer 的两条
    连接",后连的踢掉先连的,两边都抖。两个 DSH 窗口、两个 profile、或同机再跑一个 DSH
    都会撞上。需要稳定身份(比如对端按 id 做白名单)时在配置里写 nodeId。

界面(client 半端)

装好并重启后,左侧栏会出现一个 MSP 图标,点开是一整页:

区块 内容
节点/工具关系图 中心是本插件,外围每个 CIRCLE 是一个 MSP 节点;圆的大小随工具数增长,圈内数字是工具数。连线的含义见下节
权限与工具 每个节点一行:状态点、地址、启用/禁用按钮、该节点宣告的工具(含参数名,hover 看描述)。点"已启用"→ 断开该节点并摘掉它的工具
通知开关 三个独立开关:有操作等我确认 / 模型在问我问题 / 任务完成(仅长任务)
最近调用 时间 / 节点 / 工具名 / 耗时或错误,来自 host 侧记录的最后 40 条
发现目录 声明文件里的全部节点与租约年龄(含过期未清理的)

连线是怎么来的

MSP 没有 gossip:HELLO 只交换能力清单,协议里没有"你的邻居是谁"这种查询,一个节点永远只看得见自己的边。所以图里每条线都要标明出处:

线 含义 依据
实线(蓝) 我们连上了它 自己的连接表 —— 事实
绿线 两个对端彼此相连 对端自报(它的 ping/status 之类工具回了一个 peers 列表)
虚线(灰) 两个对端很可能相连 推断:同一个发现目录、且都连上了我们

最后一种是猜的,所以画成虚线。探测本身很便宜但要节流(topologyProbeMs,默认 30 秒),
而且只使用名字看起来只读(ping / status / info / health / peers / topology)
且没有必填参数的工具。

数据通路:host 注册四条路由,页面每 2 秒轮询一次。

GET  /msp/state   → { ok, peers[], calls[], discovered[], policy, notify, graph }
GET  /msp/graph   → { ok, nodes[], edges[], stats }   只看拓扑,每条边带出处
POST /msp/node    → { nodeId, enabled }   改权限,立刻重连/断开
POST /msp/notify  → { key, enabled }      或 { approval|question|turnEnd: boolean }  开关通知

通知开关(用户可关)

三个场景各一个开关,面板上直接点:

开关 触发事件 说明
有操作等我确认 approval/asked 审批被挂起时弹
模型在问我问题 tools/pre-execute 且工具是 ask_user_question 弹问题原文
任务完成 turn/end 仅本轮 ≥ turnEndMinMs(默认 20s)时弹,避免刷屏

优先级:面板里点过的选择 > cordis.patch.yml 里的 notifyOn* 默认值。
选择落在 ~/.dsh/dsh-msp/notify.json,重启后保持——否则每次重启都把用户关掉的
提醒又打开,开关就没意义了。文件缺失/损坏时退回默认值,不会拖垮插件启动。

通知走的是 MSP 的 notify:host 直接调节点,不经过模型、不烧 token、不占回合。

为什么是「公告 + 投递」两条通道

MSP 的 signal 是公告(我已经做了 X),工具是命令(请你做 X)。对端宣告的
信号 notify.toast.raised 描述是"系统通知到达"——过去式的观察事件,往里面
publish 等于谎报"一条 toast 已经到了",而且接收方没有匹配 handler 时会静默丢弃
(协议如此,不向未授权对端回错)。

所以拆成两段,各用对的通道:

通道 机制 语义 谁在用
公告 publish("dsh.attention.requested") 发完即忘、广播、可多方订阅 手机推送、灯、日志、另一个 agent
投递 callTool("notify") 1:1、要结果、真的弹窗 用户
signalPath: dsh.attention.requested
useSignal: true    # 只公告:useTool: false
useTool: true      # 只投递:useSignal: false

公告失败不拖累投递(反之亦然):信号是旁路,弹窗才是目的。

图标是内联 base64,不是运行期读文件。lib/icon.js 里存着 64×64 PNG 的 base64
(11.9KB),assets/ 下保留同名 PNG 作为源图。这样做的原因:运行期读盘引入一整套
失败面——包被复制/挂载到别处、相对路径算错、Windows 上 new URL().pathname 给出
/F:/... 前导斜杠(这个坑踩过一次,图标会静默变成 null)。

notifyIcon: true                    # 默认:用内联 base64
notifyIconPath: C:/path/to/x.png    # 覆盖:才去读文件,读不到自动退回内置图
# notifyIcon: false                 # 完全不带图标

/msp/state 的 notifyIcon 会告诉你图标从哪来:{ok, source: "embedded"|"file"|"disabled", chars}。

原图(源文件):assets/notify-icon-64.png。MCP content 块里
annotations.role = "icon" 的 image 块会被对端当成通知图标(对端回报
"icon": "内联图(N 字符)" 即表示收到了)。换图两种方式:

notifyIcon: true
notifyIconPath: C:/path/to/your.png   # 绝对路径覆盖内置图
# 或者 notifyIcon: false 完全不带图

节流默认 3 秒(同标题),节点没连上时自动找别的有 notify 能力的节点。

浏览器半端是手写的 CJS bundle(lib/client.js,window.__ModuleLoader__.load 包装,
react 由宿主 require 提供),不需要构建工具链。

自带工具

工具 作用
msp_status 每个节点的连接状态、端点、已暴露的工具;发现目录里的全部节点(含租约年龄);通知开关、钩子计数、图标状态、长任务状态
msp_call_wait 调一个工具并等它完成:先等完成信号,信号不来则轮询状态工具兜底;窗口到期返回 pending 句柄

长任务(msp_call_wait)

模型看到的是同步调用,麻烦的部分在 host 里:

msp_call_wait {node:"gd3", tool:"add_task", args:{urls:[...]}, waitMs:25000}
→ {status:"completed", via:"signal", taskId:"tsk_…", result:{files:[…]}}     ← 窗口内完成

→ {status:"pending", taskId:"tsk_…"}                                          ← 到期未完成

三层,按优先级:

层 作用 为什么需要
完成信号(task.completed 等) 快路径,毫秒级返回 订阅的意义所在
轮询状态工具(get_task) 兜底 信号没有保留语义、可能未授权(发布方用 grant_sub 卡收件人)、断线期间的会丢
窗口后转后台观察 卡片继续活着 长下载不能卡住一个回合

因为轮询始终并行在跑,"不知道哪条信号代表完成"是性能问题,不是正确性问题——最坏只是慢几秒。

绑定怎么学到:节点的 manifest 本来就列出了信号路径,插件全部订上,再用启动工具返回的句柄去匹配观测到的 payload——第一次出现的、含该句柄的事件即确认映射,然后缓存到 ~/.dsh/dsh-msp/bindings.json。命名启发(completed / failed)给第一次尝试做先验。节点作者什么都不用声明。

窗口到期后继续在后台观察;完成时追加一条记录(msp_status 可见)并复用通知通道弹一下。

注意:gd3 这类节点没有进度信号(只有 task.added / status / completed / failed / removed),所以进度不会流进对话——面板能看到,模型看到的是最终结果。

自测(不需要 DSH)

npm test                      # 单元自测:host 路由(假 req/res)+ client bundle(mock 模块加载器)
node scripts/smoke.mjs        # 假 ctx 驱动插件,对着真实 MSP 网络跑「发现→连接→注册→调用」
node scripts/probe-peers.mjs  # 只探测:逐个连上新节点,打印它们的工具/信号/能力,不注册
node scripts/call-peer.mjs   '{...}'   # 命令行直接调某节点的一个工具

已知边界

  • 只做 request-reply(工具调用),不订阅 MSP 广播——MSP 的 signal 被忽略,
    所以 notify.*、media.track.changed 这类信号不会推进模型上下文。
  • 工具 schema 变化但名字不变时不会重注册(避免打断会话);节点重连才会拿到新 schema。
  • 无鉴权:MSP 本机自组网的信任模型是"传输可达即信任",跨机请自行加隔离。

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-msp 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:hxh230802/dsh-msp#v0.1.3` 即可。

dsh-msp 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-msp 安全吗?

低风险。

dsh-msp 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-msp 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

浏览器与联网
按星标排序,可作替代方案

dsh-our-free-model

dsh-our-free-model

在 DeepSeek Harness 中装上这个 DSH plugin,无需登录、注册或填 API Key,即可直接调用 DeepSeek

L3 · 安装规范通过 8,796 星

dsh-web

dsh-web

侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。

L3 · 安装规范通过 8,549 星

BrowserSkill

BrowserSkill

BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edg

L4 · 沙盒安装通过 8,456 星

dsh-pocket

dsh-pocket

DSH Pocket 让 DeepSeek Harness 装进口袋:电脑跑 dsh web,手机扫码即实时同步访问(局域网+公网),人在外

L5 · 运行验证通过 1,656 星

Browser4

Browser4

L4 · 沙盒安装通过 1,152 星

agentrq

agentrq

L4 · 沙盒安装通过 1,140 星

hxh230802 的其它插件

4 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。