dsh-chat:让 DSH 会话可分享、可直播、可本地验证的去中心化社交插件

前言

在 DSH 里跑智能体,对话往往只停在本机:想给同事看一段完整上下文、想边聊边让人围观、想在局域网里对等设备互通,常见做法是截屏、导出文件或自建服务。数据一旦出网,边界和同意机制很难和 Host 里的会话状态对齐。

dsh-chat 是维护者 z8313568 提交的 DSH 客户端类插件,定位是「面向 DSH 的去中心化 AI 社交与创作网络」——发现、好友、分享、直播、节点共建。当前实现范围对应产品规划 V2.0 的阶段 0 + 阶段 1 核心骨架:能安装、能跑、能被外部进程验证。一句话概括 README 里的目标:让每一次 AI 对话,都可以被分享、讨论和复现;默认情况下,装好后字节不会离开本机,直到你在界面上对某条会话显式开启分享或直播。

目录页:skillhub.cn/plugins/z8313568/dsh-chat。源码与说明:github.com/z8313568/dsh-chat(MIT,package 版本 0.1.0)。peer 依赖声明 DSH >=0.2.0-rc.2 <0.3.0,Node >=22.19。

这是什么

dsh-chat 在 DSH 内提供 Host 半体(节点身份、网络、RPC)与 Web 客户端(界面与槽位注入)。传输层通过可替换的 NodeTransport 接口实现,当前为 LanTransport:RFC6455 WebSocket、UDP 信标发现、邀请码、双向 Ed25519 握手;上层不绑死 libp2p/WebRTC,便于按规划「先实测再选型」。

诚实边界写在仓库 docs/plan-coverage.md:尚未实现群聊、离线消息托管、UDP 传输层(TCP 打洞受同时打开限制)、IPFS/内容寻址分发、区块链存证等。NAT 穿透、跨运营商时延、企业防火墙等场景 README 标明本次未在真实环境全量验证,并指向 docs/network-testing.md 的矩阵与设备实验方法。

核心功能(当前版本已核实部分)

会话分享

在会话页使用「分享会话」,依次选访问范围、外发粒度、内容类型;必须看过预览才能发布。分享对象包含:内容哈希 id(对除 id 与 sig 外字段哈希)、Merkle 根、作者 Ed25519 签名、访问策略,以及 disclosure 说明表(写明包含与不包含什么)。校验时完整性与真实性分开结论,与规划 §6.4 一致——哈希只能证一致,不能证内容一定真实。

会话直播

主播侧:开播 / 暂停 / 恢复 / 结束 / 发布回放。观众侧:按 seq 补拉、去重、检测空洞。直播事件带签名,类型与规划 §7.4 对齐(如 session_started、message_added、artifact_published、stream_paused 等)。暂停不等于结束;事件序号仅由主播推进,观众聊天走独立通道,不污染事实序列。

节点、隐私与出站控制

  • 首次启动生成 Ed25519 身份,私钥写入 ~/.dsh/dsh-chat/identity.json(权限 0600),不上传、不进外发结构。
  • 授权为「会话 × 内容类型 × 范围 × 有效期」四元组,默认拒绝,不跨进程继承;分享/开播前须预览,Host 会拒绝无 previewed 的 RPC。
  • 出站脱敏对齐官方 dsh-session-telemetry 的 waterfall:任一规则出错则 fail-closed 扣下整条记录。
  • 「一键暂停所有贡献」:撤销全部授权并结束所有直播间。

节点网络与中继

  • 私聊端到端加密(X25519 + AES-GCM),中继在协议层无法解开;明文私聊被拒转。
  • 打洞:交换候选并双方同时拨号;全锥/受限锥可打通,对称 NAT 跳过并标注类型。
  • 多中继按「手动指定 > 目标亲和 > 本地成功率 > 负载」打分;他人证明不压过本地实测。可达性采用分层取证,入站实证为唯一判据,不依赖「比对公网 IP」。
  • 直播观众间分发:已收数据的观众可帮同房间转发;README 给出发布者上行在特定可达假设下的实测降幅(如全员可达约 -80%)。

插件目录(规划 §4)

本地可验证清单与四维评分(功能 / 易用 / 稳定 / 文档)。从文件系统安装的插件在目录中标记 verified: false;聚合结果带 sybilResistance: 'none'。

安装与启用

资料中的安装路径是:在本地准备好 dsh-chat 源码目录后构建,再通过 DSH 的 plugin_manager 装入 bundle(不要手改 profile 的 package.json 或 cordis.patch.yml,install_bundle 会处理补丁)。

先在源码目录执行依赖安装与构建(生成 lib/,Host ESM + Client CJS):

npm install
npm run build

将下面命令里的路径换成你的 dsh-chat 绝对路径,安装或重装到 profile(README 示例为 desktop):

plugin_manager { action: "install_bundle", target: "/绝对路径/dsh-chat" }

插件自身的 cordis.patch.yml 仅插入加载项,例如:

- insert:
    - id: dsh-chat
      name: dsh-chat

Host 半体代码改动后必须重启 DSH;仅 install_bundle 不会重载已缓存的 Node ESM 模块。改 src/client/** 一般刷新页面即可(Client HMR 按指纹替换)。改 cordis.patch.yml 的 config 约 1 秒热重载,但 README 注明本版未导出 Config schema,Plugins 设置页不会出现表单,配置只能走补丁且改后需重启 DSH。

卸载:

plugin_manager { action: "set_bundle", target: "dsh-chat", enabled: false }

~/.dsh/dsh-chat/ 不会自动删除(含身份私钥),需自行备份后清理。

配置示例

在 cordis.patch.yml 对应条目下增加 config:(默认值见 src/host/config.js):

- insert:
    - id: dsh-chat
      name: dsh-chat
      config:
        identity:
          nickname: 我的节点
        privacy:
          defaultSharingMode: disabled     # disabled | minimal | standard | full
          redaction:
            keywords: ["内部代号"]
            patterns: ["SECRET-\\d+"]
        discovery:
          enabled: true
          beaconPort: 47899
        listen:
          host: 127.0.0.1                  # 改为局域网地址才会向局域网广播
          port: 0

贡献相关默认值(节选,完整说明见 docs/contribution-defaults.md):

contribution:
  mode: auto                      # off | auto | on
  swarm:
    enabled: true
    minRoomSize: 4
    maxServees: 4
    maxServeBytesPerMinute: 33554432
  maxCacheBytes: 536870912
  onlyOnPower: true
  onlyOnUnmetered: true
  monthlyUploadBudgetBytes: 21474836480

规划 §9.2 要求基础功能不以贡献为前提;本项目区分「已在看的直播 swarm 分发(默认开)」与「对陌生人中继(默认 auto,受可达性、计费网络、电源与预算等约束)」。

典型用法与验证

  1. 安装 bundle 并重启 DSH 后,在会话界面按需使用分享或直播流程(分享前完成预览与策略选择)。
  2. 局域网发现:将 listen.host 改为局域网地址并配置 discovery.beaconPort(默认 47899),按 README 与网络文档在可控环境内测试。
  3. 装好并重启后,可用独立进程验证节点被发现与握手:
node scripts/verify-live-node.mjs

README 称外部独立进程可在约 8ms 内被发现、完成双向 Ed25519 握手并交换签名信封;详细输出见 docs/verification.md。

开发自检:

npm test          # README:314 项测试
npm run doctor    # 插件加载与 boot 阶段排查
cat ~/.dsh/dsh-chat/boot.json   # apply / rpc-mounted / apply-completed 等 phase

网络专项(源码目录内):

npm run test:network
npm run lab -- probe --seconds 20

适用场景与注意

适合谁:需要在 DSH 内做会话级分享/直播、局域网节点互通,且愿意接受「阶段 0+1 骨架」与文档列出的未实现项的开发者或内网试点用户。

权限与安全:插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,理解身份密钥位置与分享/直播的显式同意模型。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

加载失败:Cordis 硬依赖可能导致静默不加载;界面若显示无法访问 Host 半体,按 README 查 boot.json 与 npm run doctor。禁用再启用不能替代重启来加载新 Host 代码。

测试与星标:GitHub 公开星标为 0;README 自述 314 项测试通过及网络子集结果,以仓库当前 CI/本地 npm test 为准。

结尾

dsh-chat 把「本地默认不出网、显式同意才外发、分享/直播可校验、节点可替换传输层」收进一个可安装的 DSH 插件,适合作为去中心化 AI 社交网络的第一个可验证骨架。进一步的产品覆盖、中继与打洞设计见仓库 docs/;安装与问题排查以 README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜