Vai al contenuto principale
L

dsh-collab

lhenlihai-hub/dsh-collab

Minimal room-based real-time code collaboration plugin for DeepSeek Harness. Install it, enter a room number and password, then collaborate with Yjs.

Installazione

dsh plugin --profile web add github:lhenlihai-hub/dsh-collab

README

dsh-collab

English | 中文

DeepSeek Harness (dsh) 插件:极低门槛的多人代码协作。

用户只需要安装插件,打开 dsh 右侧的 👥 面板,输入同一个房间号 + 信任密码,就能开始一起编辑同一个代码缓冲。

  • 不需要注册账号。
  • 不需要用户部署任何服务器。
  • 插件自动启动本地协作服务。
  • 默认连接方式会自动尝试公共中继和本机服务。
  • 实时协同使用 Yjs(CRDT)
  • 内置最基础的 commit 快照工作记录
  • 支持一键卸载

这是刻意保持简单的 MVP/框架:一个房间、一个共享代码缓冲、内存态历史。后续可以加多文件、多项目、持久化。

功能

  • 🔢 房间号 + 密码:创建房间后把房间号和密码发给同伴即可加入。
  • 👤 随机身份:不注册、不登录,自动生成随机中文名和颜色,可修改。
  • ⚡ Yjs 实时协同:多人同时编辑,自动合并冲突。
  • 📦 基础 commit:编辑者可以提交当前快照,附上说明。
  • 📋 工作记录:自动记录创建房间、加入、离开、提交等事件。
  • 🧹 一键卸载:面板底部可以直接卸载插件并提示重启。
  • 🌍 内置公共中继配置:用户不需要自己部署;项目维护方只需部署一次公共 relay。

安装

每个参与者只需要在自己的 dsh 中安装同一个插件:

# 从源码目录本地安装
cd dsh-collab
npm install
npm run build
dsh plugin --profile web add link:$(pwd)

# 或发布到 npm/GitHub 后
dsh plugin --profile web add dsh-collab

装完重启 dsh web,右侧会出现 👥 入口。

使用

  1. 创始人打开 👥 面板。
  2. 输入一个房间号(例如 1024)和你想设置的信任密码
  3. 点击 创建房间
  4. 把“房间号 + 密码”告诉同伴。
  5. 同伴在各自 dsh 的 👥 面板中填入同样的房间号、密码,点击 加入房间
  6. 进入后即可实时编辑;编辑者可以填写提交说明并点击 提交 留下快照。

服务器地址默认保持 auto 即可。它会自动尝试公共中继,失败时回退到本机/局域网服务。高级用户也可以手动填写其他 relay 地址。

不填密码的人以只读身份加入;填错密码会被拒绝。

一键卸载

打开 👥 面板,拉到底部,点击 一键卸载插件 并确认。

插件会调用 dsh 官方插件管理命令移除自己,然后提示重启 dsh web。也可以手动执行:

dsh plugin --profile web remove dsh-collab

用户零部署说明

插件自身已经包含完整的协作服务:

  • 本机服务:每个安装插件的 dsh 都会自动启动 ws://0.0.0.0:47823/relay
  • 公共中继:客户端默认还会尝试项目维护的公共中继地址。这个中继只需要项目维护方部署一次,普通用户不需要做任何部署。
  • 自建 relay(可选,仅高级用户):仓库提供 server/relay-server.mjs,项目维护方或高级用户可以部署到任意公网服务器。

发布到 GitHub/npm 前,请把 src/client/app.tsx 中的 PUBLIC_RELAY_URL 改成你实际部署的公共 relay 地址。未部署时 auto 会自动回退到本机/局域网服务。

因此普通用户的完整路径就是:安装插件 → 重启 dsh → 输入房间号/密码 → 协作。

开发

npm install
npm run build      # 产出 lib/index.js(宿主半侧)+ lib/client.js(浏览器半侧)
npm run typecheck  # 类型检查
npm run relay      # 启动独立公共 relay(可选)

结构

src/
├── index.ts          # dsh 宿主半侧:本地 relay + 配置/卸载路由
├── collab-server.ts  # 房间/密码/Yjs 同步/commit/工作记录
├── uninstall.ts      # 一键卸载实现
└── client/
    ├── index.tsx     # dsh 浏览器半侧入口
    ├── app.tsx       # 房间面板 + 编辑器 + 提交历史 + 工作记录 + 卸载
    └── styles.ts
server/
├── relay-server.ts   # 独立公共 relay 源码
└── relay-server.mjs  # 构建后可直接运行的公共 relay
cordis.patch.yml      # dsh 插件 bundle patch

工作原理

  • 宿主半侧是标准 Cordis 插件,inject: ['webServer', 'appExit']
  • 插件启动一个绑定 0.0.0.0 的 WebSocket relay,路径为 /relay
  • 浏览器半侧默认以 auto 方式连接:公共中继优先,本机地址回退。
  • 房间内通过 Yjs update 做实时协同。
  • commit 消息会把当前代码快照存入内存并广播给所有成员。
  • event 消息形成工作记录。
  • /collab/uninstall 仅允许本机访问,并调用官方 dsh CLI 移除插件。

安全说明

  • 当前是信任密码模型,密码通过 WebSocket 明文传输,适合可信局域网或测试环境。
  • 公共 relay 上,房间密码就是唯一的编辑凭证;请使用足够随机的密码。
  • 公网正式使用建议启用 TLS(wss),并考虑后续增加持久化和更完整的账户体系。

开源协议

MIT

Plugin correlati