← 返回列表
未验证
让同一局域网内的 AI 互相发现并交换消息
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/20 · 已提供中文文档
LAN P2P Collaboration Plugin.局域网内协同插件
综合分
28
GitHub 分
28
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Rellopn/dsh-p2p-lan该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
@rellopn/dsh-p2p-lan
npm version
License: MIT
面向 DeepSeek Harness (DSH) 的局域网 P2P AI 对 AI 协作消息传递:同一本地网络中不同机器上的 AI 能够相互发现并交换纯文本消息(可选带附件),无需中心服务器。
一个单一的双面插件——宿主包(dsh.bundle)提供 P2P 节点和工具,而同一包的 dsh.client 声明提供浏览器网关面板。一次 dsh plugin add 即可安装全部内容。
功能特性
- 自动发现——UDP 组播信标发现,并在组播被阻止时提供手动对等节点回退(manualPeers)
- 首次接触即互相配对——开启 autoAccept 后,单向的 manualPeers 条目会变为双向链接:你的第一条消息会携带你的地址,对方会自动将你添加为 knownPeers 条目(无需第二方配置)
- 能力路由——将消息发送给任何声明了匹配标签的在线节点(send_to_capability)
- 广播——向每个对等节点发送一条消息,并带有防风暴保护(广播永不自动回复;它们会落入人工网关)
- 带人工网关的 LLM 自动回复——通过设置中从 dsh 已配置的 LLM 里选定的 provider/model 起草回复;网关偏向可配置(lenient / standard / strict),当路由缺失时降级为对所有内容都进行网关审核
- 带后台投递的异步等待——p2p_send_and_wait 会短暂等待;如果对等节点在推导出的快速窗口内(总超时的一半,上限为 10 秒)未回复,它会返回 pending,并将等待挂起到后台——最终回复(或总超时)会自动投递回你的会话,因此你可以在此期间继续工作
- 浏览器网关面板——侧边栏入口带待处理徽标、协作抽屉(从右侧滑入,不遮挡工作区)、批准/编辑/拒绝,以及完整的双语(zh/en)设置面板(热重载、可折叠分区、动效)
- 附件——内容寻址的 blob 存储,按哈希索引并去重(每个附件最大 100 MiB)
- 按项目会话——每个(项目,同事)对对应一个对话,命名为 🤝 来自 的协作
- 可靠性——传输确认、id 去重、带退避的重试、带 AI/人工已读跟踪的发件箱/收件箱、死信 + send-failed
安装
dsh plugin --profile web add @rellopn/dsh-p2p-lan
或者,在不发布的情况下,从本地 tarball 安装:
dsh plugin --profile web add ./rellopn-dsh-p2p-lan-0.1.0-rc.6.tgz
快速开始
该 bundle 的 cordis.patch.yml 挂载了两部分。nodeName 和 port 是可选的——留空/未设置时,插件会生成一个主机作用域的随机名称(例如 desktop-8f2a),并且如果请求的端口被占用(一台机器上运行多个 dsh),会自动顺延到下一个空闲端口:
- id: p2p-lan
name: '@rellopn/dsh-p2p-lan'
config:
nodeName: 'backend-a' # optional; default = hostname + 4 random chars (LAN-unique per machine)
capabilities: ['rpc', 'export'] # optional: what this node can answer
provider: deepseek-official # LLM route for auto-replies; empty = gate everything
model: deepseek-v4-flash # model id
persona: 'backend developer' # optional role hint for reply drafting
配置
所有键都由 zod schema 校验,并从浏览器设置面板热重载。
| 键 | 默认值 | 含义 |
|---|---|---|
| nodeName | ''(自动) | LAN 内唯一的节点名称;为空时生成一次 hostname- 并持久化(重复项会被拒绝) |
| advertisedHost | ''(自动) | 向对等节点通告的主机地址;为空时自动检测 LAN 地址。WSL2:通过端口转发暴露节点时,设置你的 Windows 主机的 LAN IP |
| capabilities | [] | 用于 send_to_capability 路由的能力标签 |
| autoDiscover | true | UDP 多播发现 |
| manualPeers | [] | 多播被阻止时的 [{ name, host, port }] 回退 |
| autoAccept | true | 首次接触时自动添加此前未知的对等节点(发送方携带其可达地址),因此单侧的 manualPeers 条目无需配置另一侧即可成为双向链接 |
| knownPeers | [] | 首次接触时自动学习并在本地持久化的 [{ name, host, port }] 对等节点(与 manualPeers 分开保存;不受 manualPeers 协调影响) |
| port | 53420 | 请求的 WebSocket 监听端口;被占用时插件会绑定下一个空闲端口(port→port+199)并通告真实端口。热重载自身关闭的服务器会先等待其结束,因此端口不会漂移。设置面板会显示实际使用的端口 |
| sensitivity | 'standard' | 门控偏向:lenient / standard / strict |
| waitTimeoutSec | 60 | 发送并等待的总超时时间,以秒为单位。快速窗口(在等待挂起到后台之前)由此推导:总时间的一半,上限为 10 秒 |
| provider | '' | 用于起草回复的 LLM 提供方——在设置面板中从 dsh 已配置的 LLM 中选择(为空则退化为全部门控) |
| model | '' | 用于起草回复的 LLM 模型(随其提供方自动选择) |
| persona | '' | 注入到起草提示中的角色提示 |
| projects | [] | [{ name, path, broadcast }] 按项目进行会话路由 |
| debug | false | 设置面板显示插件版本、实时计数器以及最后原始线缆 JSON 帧(入/出) |
WSL2 / 禁用广播的网络
在阻止多播/广播的网络中(公司 VLAN、WSL2、docker 桥接网络),自动发现无法工作:你必须为每位同事手动配置一个单向的 manualPeers 条目。在 autoAccept 开启(默认)的情况下,当你第一次给同事发消息时,你的节点会发送其可达地址,而他们会自动将你添加为 knownPeers 条目——因此你不再需要手动配置双方;对等关系从单个条目变为双向。(关闭 autoAccept 则要求双方完全手动配置。)
对于运行在 WSL2 内部的 dsh(NAT,自己的 172.x 网络):
1. 将其暴露为入站:在 Windows 主机上,将一个端口转发到 WSL 并允许其通过防火墙(每次 WSL 启动执行一次,WSL IP 会变化):
run in Windows (admin PowerShell); find the WSL IP with wsl hostname -I
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=53420 connectaddress= connectport=53420
keep the WSL IP current: wsl hostname -I
或者在 %UserProfile%\.wslconfig 中启用 networkingMode=mirrored(Win11 22H2+),它会自动将 WSL 端口和多播镜像到 Windows 主机上。
2. 用 manualPeers 配置一侧(回复是新的出站连接);在 autoAccept 开启的情况下,第一条消息会使配对变为双向,因此只需要一个节点拥有该条目——但要保持它通告的地址可达:
- 在远程对等端上:{ name: 'wsl-node', host: '', port: 53420 }
- WSL 节点使用 knownPeers 中的地址进行回复,该地址是从远程端的第一条消息中学到的;如果 WSL 节点先发送,则设置 advertisedHost(步骤 2b),以便携带其可达地址。
3. 使用附带的模拟进行验证(docker 桥接已经阻止多播,即它是一个带有端口代理中继的广播禁用网络):
powershell
pwsh docker/run-wsl-sim.ps1 # docker: recv )会替换
node_modules 中的文件,但 Node 会在进程中缓存已导入的 ESM 模块,因此新的宿主代码只会在下次启动 dsh 时加载。浏览器客户端在每次页面加载时都会重新获取,所以刷新一下就够了。简而言之:升级后重启 dsh 宿主进程 + 刷新浏览器标签页。
注意: lib/typert.host.js、lib/typert.remote-client.js 和 lib/typert.remote-client.d.ts 是已检入的生成产物。上游 Typert 生成器无法解析此仓库中的 @Remote(协议包是外部依赖),因此在 src/plugin.ts 中添加/移除 @Remote 方法后,请手动同步这三个文件(参见 scripts/gen-typert.mjs)。
有关面向 AI 编码助手的完整仓库指南,请参阅 AGENTS.md。
状态
已发布为 @rellopn/dsh-p2p-lan@0.1.0-rc.29。已通过 docker/e2e 矩阵(13 个场景,全部通过)以及针对已发布包的 discover 和 manual-msg compose 套件完成端到端验证;单元测试套件 93 个测试全部通过。
许可证
基于 MIT 许可证发布。扫码进群