给 DeepSeek Harness(DSH)的会话云同步:自部署服务端、端到端加密,多台设备共用同一份会话。
状态:可用(0.1.4)。 整轮同步、单会话推送、底部会话状态条、上传范围开关、Vault 设备台账与工作区映射均可使用;附件同步尚未实现(见 ROADMAP)。
- 多设备同一份会话:一台机器写,另一台接着继续,不用手动搬文件;
- 端到端加密:服务端只存密文、清单与去重后的 blob,不持有明文口令;
- 按会话增量:只传新增事件;上传范围可选,默认可只同步你在意的会话;
- 单会话推送:底栏一键把当前会话推上去,不必等整轮;
- 看得见的状态:顶部气泡看整轮进度,底部状态条看当前会话与远端的差;
- 工作区映射:不同机器的路径可以映射到同一份远端工作区(Vault);
- 全局单写者:同一时间只允许一台设备写,其余设备只拉取,避免互相覆盖。
dsh plugin --profile web add dsh-session-cloudsync要求 DSH >=0.2.1-rc.1 <0.3.0-0(0.2.2-rc.1 已实测)。
要求 Node.js >= 24。服务端是零运行时依赖的 node:http + node:sqlite 单进程,数据放在一个目录里。
方式一:全局安装
npm i -g dscs-server
dscs-server serve --data-dir /var/lib/dscs --host 127.0.0.1 --port 8787方式二:安装脚本(装进独立目录并软链current路径,可选注册 systemd / 计划任务)
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/xfy2412/dsh-session-cloudsync/main/scripts/install.sh | bash -s --
# 带参数示例:--host 0.0.0.0 --port 8787 --user dscs# Windows
irm https://raw.githubusercontent.com/xfy2412/dsh-session-cloudsync/main/scripts/install.ps1 -OutFile install.ps1
.\install.ps1脚本支持 --version、--upgrade、--uninstall、--purge 等,详见 scripts/install.sh --help。
首次启动会打印一次性初始化密钥,并提示打开 http://127.0.0.1:8787/admin;同时写入数据目录的
onboarding-code.json(0600,初始化完成即删除)。按向导设置管理密码、存储配额,可选创建第一台设备。
之后管理台用密码登录;忘记密码执行 dscs-server admin reset(源码运行时是
node packages/server/src/index.ts admin reset),重启后会重新打印初始化密钥。
默认只监听 127.0.0.1,公网部署请放在 TLS 反代后;数据目录含 SQLite 与 blob,升级前先备份。
服务端细节见 packages/server/README.md。开发用 pnpm dev:server 起在
.tmp/dev-data,见下文「开发」。
- 部署服务端,按控制台提示完成初始化,记下设备 token;
- DSH → 设置 → 会话云同步:填服务端地址、设备 token、同步口令;
- 勾选要同步的会话(默认一个都不选),保存;
- 顶部气泡点「立即同步」,之后随时在底部状态条看当前会话与远端差多少。
所有设备必须使用同一个同步口令,服务端地址写法也要一致(没显式配置 salt 时,
盐由 serverUrl 派生,混用 localhost / 127.0.0.1 或省略 // 会派生出不同的密钥)。
口令、地址或 salt 任一不同,拉取都会报 封帧的 keyId 与当前密钥不符。
界面细节与常见状态处理见 docs/guides/OPERATIONS.md。
packages/shared/ 帧处理(多帧 zstd)、端到端加密、线上类型;插件与服务端共用
packages/plugin/ DSH 宿主插件(npm 包 dsh-session-cloudsync)
packages/server/ 自部署服务端:node:http + node:sqlite + blob 目录,零运行时依赖
tests/ 临时 DSH home 的硬约束与夹具(见 tests/README.md)
dev/ 开发控制台与界面原型
docs/
architecture/ 协议、封帧、cwd 与整体设计
sync/ Vault、安全、对账、性能与配置快照
ui/ 界面约定与状态模型
guides/ 操作指引、术语、提示与使用协议
plans/ 里程碑与决策记录
pnpm install
pnpm test # 全部测试(含跨包集成)
pnpm typecheck
pnpm check # 全部 typecheck + test
pnpm run check:server # 服务端/shared:服务端发布门禁
pnpm run check:plugin # 插件/shared:插件发布门禁(不含跨包集成)
pnpm run test:integration # 插件↔服务端跨包集成;不阻塞任一发布
pnpm fixtures # 重新生成夹具的 .zstd 兄弟文件
pnpm dev:server # 在 .tmp/dev-data 起服务端(127.0.0.1:8787)
pnpm dev:dsh # 起隔离的 DSH 开发实例(默认端口 3090)
pnpm dev:panel # 双实例开发面板(默认 http://127.0.0.1:3092)
pnpm dev:console # 起 M0 控制台(127.0.0.1:3091,见 tests/m0/README.md)夹具由官方 @deepseek-ai/dsh-session 校验器验证(packages/shared 的 devDependencies,
版本与 DSH 对齐)。
pnpm dev:dsh 在 .tmp/ 下创建临时 home,不碰真实 ~/.dsh;需要保留已登录状态时:
node scripts/dev-dsh.mjs --credentials <旧 home 的 .credentials.yaml>。
脚本拒绝在 .tmp/ 之外创建实例目录。
双实例调试用 pnpm dev:panel:起一个本地控制台(默认 http://127.0.0.1:3092/),
上方左右两个 iframe 分别是独立的 DSH A/B,下方左右两个控制台显示各自 host stdout
与插件 dev sink。首次启动会自动构建并安装本插件、带起本地同步服务端并给 A/B
预配置 token/口令;面板还提供 导入大会话(形状轨迹生成,约 69k 事件)、
恢复预配置 和勾选式 清理数据。配置快照与选择模型见
docs/sync/CONFIG-SNAPSHOT.md,详见
dev/console/README.md。
- 测试绝不碰真实
~/.dsh:所有临时 home 经tests/helpers/tmp-home.mjs创建,位于.tmp/且被 git 忽略;规则与断言清单见 tests/README.md。 - 仓库文档写我们的选择与中性事实,不评价其他项目。
- docs/README.md:完整文档索引(架构 / 同步 / 界面 / 计划 / 指南)。
- docs/guides/OPERATIONS.md:界面与操作指引(四块界面、状态语义、常见处理)。
- docs/architecture/DESIGN.md:整体设计、拉取落地、写入路径与分叉处理。
- docs/architecture/PROTOCOL.md:设备 API 与插件本地接口。
- docs/sync/VAULT.md:设备台账、workspace/profile 与一次性映射。
- docs/sync/SYNC-SAFETY.md:开放尾、apply journal、阻塞与恢复。
- dev/ui/README.md:设置页 / 首启 / 同步气泡的静态原型。
- tests/README.md:临时 home 与夹具约定。
DSH >=0.2.1-rc.1 <0.3.0-0(0.2.2-rc.1 已实测)。0.2.1 之前缺少本插件依赖的能力
(如 appendPluginRecord),不做兼容。服务端与插件按各自版本独立发布,配套关系见
ROADMAP。
本仓库按目录拆分许可:
packages/server/**:AGPL-3.0-only(全文)。对外提供修改后的服务端时,需按 AGPL §13 向使用者提供对应源码;个人自部署、仅自己使用不受影响。packages/plugin/**、packages/shared/**及其余部分:MIT(全文)。
根目录的 LICENSE 是拆分范围的简短说明;各 package 目录下也各有一份对应全文。