DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

Shengyis /

Shengyis/dsh-ownsync

Verified

把自己的 Git 服务器当作 DSH 的会话同步通道: 手动上传/下载, 跨电脑接着聊.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@e5617dca

dsh-ownsync

把 DeepSeek Harness(DSH)的工作区登记、会话和聊天附件同步到你自己的 Git 服务器, 换台电脑接着用。

界面只有三个按钮:上传、下载、检查更新。没有自动同步、没有分支、没有合并。

它怎么工作

服务器上就是一个普通的空仓库:

git init --bare /srv/git/dsh-sync.git

每次「上传」会:

  1. 扫描本机数据目录里的三类内容(见下);
  2. 把文件写进本地同步仓库 .ownsync/repo.git;
  3. 生成一个只含当前内容的根提交,推到 main。

所以服务器上的 main 是一份可以直接 git clone 下来的快照,仓库体积等于当前内容, 不会随着上传次数膨胀。

每次「下载」会:

  1. 取回 main;
  2. 按文件写回本机(覆盖前先把原件存到 .ownsync/backup/);
  3. 记录本机基线版本。

服务器是唯一权威:服务器有什么,本机就变成什么。

同步什么

类别 内容
工作区 storages/workspace.json:全部工作区、标题、顺序、会话归属、归档状态
会话 sessions/** 下每个会话的最高代际日志
聊天附件 attachments/** 中被上述会话日志引用到的文件

不同步:项目文件夹里的代码文档、settings.yaml、cordis.patch.yml、插件清单、 凭据、缓存、日志、AGENTS.md、skills/。

只有 header、没有任何事件的空白会话也不参与同步。

界面

侧栏左下角(头像上方)是一张卡片:

┌──────────────────────────────┐
│ ● 已同步                      │
│ 本机        v12               │
│ 服务器      v12               │
│ 上次同步    2026-11-08 12:30  │
│ [ 上传 ] [ 下载 ] [ 检查更新 ] │
└──────────────────────────────┘
  ⟳ 同步                     ← 点它打开设置弹层
  • 上传 / 下载:按当前状态自动启用或禁用,禁用时悬停会说明原因;
  • 检查更新:任何状态都能按,立刻向服务器 fetch 一次版本;
  • 同步:打开设置弹层(仓库地址、分支、两个刷新间隔)。

状态与按钮

状态 含义 可用按钮
未填写仓库地址 还没配置同步仓库 无
尚未检查服务器 还没连过服务器 无(先点「检查更新」)
无法连接服务器:… 地址、网络或认证问题 无
服务器上还没有内容,建议上传 服务器是空仓库(首次使用) 上传
本机尚未下载 本机还没有服务器基线 下载
有会话待写回本机 有会话被宿主占用,等重启后写回 下载
本机有 N 处未上传改动 本机内容比服务器新 上传
服务器版本较新,建议下载 另一台电脑传过更新 下载
本机版本较新,建议上传 本机有内容还没传 上传
本机与服务器内容不同 两边版本号相同但内容不同 上传 / 下载
已同步 两边一致 无

两个刷新间隔

设置弹层里可以改,单位秒,范围 1–600:

设置 默认 行为
本机状态刷新间隔 5 秒 读版本、pending、改动数,纯本地扫描,不联网
服务器自动检查间隔 10 秒 每次 git fetch,只刷新版本状态

两个间隔都保存在本机浏览器里(不参与同步);页面在后台或正在上传/下载时会跳过自动检查。 自动检查不抢焦点、不打断输入。

使用前提

  • 同一时间只有一台电脑在改内容;
  • 换电脑之前,先在原来那台点「上传」;
  • 到新电脑先点「下载」,再开始用。

按这个顺序用,就不会出现两份都改过、需要合并的情况。

插件调用的是系统 PATH 里的 git(Windows 上是 Git for Windows,DSH 不自带)。 如果点上传/下载时提示「这台电脑上找不到 git 命令」,安装 Git for Windows 后 完全退出并重新打开 DSH 即可,消息里会列出当前 PATH 方便排查。

安装

插件发布在 npm(或你们自己的 registry)上,直接在 DSH 里装:

  1. 打开 DSH → 设置 → 插件;
  2. 输入包名 dsh-ownsync,点安装;
  3. 完全退出 DSH 再打开。

等价的命令行安装:

# Web 端
dsh plugin --profile web add dsh-ownsync

# Windows 桌面端
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-ownsync

升级时指定版本,例如 dsh-ownsync@1.1.0,装完同样要完全退出再打开。

如果 DSH 用的不是公共 npm,需要先在 profile 的 .npmrc 里配置 registry, 或在安装命令后加 --registry <地址>。

第一次使用

1. 准备服务器

在服务器上建一个空仓库:

git init --bare /srv/git/dsh-sync.git

不要设置 receive.denyNonFastForwards:每次上传都是一次强制推送。

2. 配好 git 凭据

插件不弹任何登录窗口,先把这台电脑的 git 访问打通:

  • SSH:ssh-keygen 生成密钥,把公钥加到服务器,ssh -T user@host 能通;
  • HTTPS:在终端执行一次 git ls-remote <仓库地址>,按提示输入账号与访问令牌, 交给系统 Git 凭据管理器保存。

3. 填仓库地址

打开 DSH,点侧栏左下「同步」,填入仓库地址(例如 ssh://git@backup.example.com:2222/srv/git/dsh-sync.git),点「保存」。

4. 第一次上传(在已经有内容的那台电脑)

点「检查更新」。因为服务器还是空仓库,状态会显示**「服务器上还没有内容,建议上传」**, 此时只有「上传」可用;点一下就在服务器上建出 v1。

5. 在新电脑第一次下载

装好插件、填同一个地址,点「检查更新」→ 状态变成「服务器版本较新,建议下载」→ 点「下载」。

  • 覆盖前会把本机原件备份到 .ownsync/backup/;
  • 下载完成后完全退出 DSH 再打开,新会话才会出现在侧栏;
  • 如果目标会话正被占用,会走「切空白会话 + 提示重启」的流程。

6. 之后

  • 换电脑前:在原机器点「上传」;
  • 到新机器:点「检查更新」,再点「下载」;
  • 同一时间只在一台电脑上改内容。

安全边界

  • 下载会覆盖本机:覆盖前把原件存到 <数据目录>/.ownsync/backup/<时间>/files/…, 需要时可以手工拷回;
  • 一次删掉多个文件要确认:上传时如果发现本机少了 3 个以上(或超过一半)上次同步过的 文件,会先让你确认,并把服务器上的旧版本备份到本机;
  • 本机有未上传改动时下载要确认:确认后以服务器为准; (DSH 打开会话时追加的 session/end-seed 标记不算改动);
  • 上传是「比较交换」:如果服务器在你上次下载之后被改过,上传会被拒绝并提示先下载, 不会覆盖别人的内容;
  • 服务器只是传输通道,不是备份:真正的备份责任在本机的数据目录和 .ownsync/backup。

已知限制

  • 下载写回会话后需要重启 DSH 才能看到:DSH 页面显示的是打开会话时读到的内容, 宿主进程重启才会重新读盘;下载结果只提示"重启后可见",不提供按钮;
  • 会话被占用时下载会引导重启:写入权归活着的 Agent,切走界面不一定释放,只有进程退出 才释放。遇到被占用的会话时,插件会切到空白会话并提示重启;重启后自动补写并尽量跳回原会话, 没抢到时机就停在「有会话待写回本机」,再点一次「下载」即可;
  • 插件无法自动重启 DSH:桌面端的宿主是 Electron 以纯 Node 模式拉起的子进程,没有 Electron API,也没有可用的 CLI 重启命令,所以「重启 DSH」按钮只能给出手动指引;
  • 会话正在生成时上传会被拒绝:等这轮回复结束再点;
  • 会话日志只追加,所以下载时如果发现服务器版本比本机长,会通过宿主接口追加而不是整体替换;
  • 单文件上限 256 MiB(会话和附件),超过的附件会被跳过并列在上传结果里。

致谢

本插件基于 chatsync 插件(https://github.com/dpskk2/dsh-chatsync)修改而来:同步范围、 会话日志的处理方式、宿主写入接口等思路都来自 chatsync,ownsync 在这之上删掉了不需要的部分 (托管平台 API、分支合并、自动同步等),改成面向自建 Git 服务器的手动同步。

如果你需要的是 GitHub / Gitee 等代码托管平台的同步(自动同步、平台侧历史、多分支等), 请优先使用 chatsync,那才是它为这些场景做的。

目录

lib/
  index.js            插件入口(挂接口、启动补写、注册页面)
  engine.js           上传 / 下载 / 状态 / 待写回补写
  scope.js            同步范围(三类内容)
  snapshot.js         本机快照与清单
  apply.js            把远端快照写回本机
  sessions.js         会话日志解析、校验、内容指纹
  session-path.js     会话 id 与代际
  session-transfer.js 经宿主接口写入会话
  recovery.js         覆盖前的原件备份
  host-restart.js     尝试重启宿主(Electron / 手动降级)
  git-repo.js         裸仓库、写树、CAS 推送
  git.js              git 子进程封装
  git-failure.js      git 错误归类
  config.js           ownsync.json
  http/               接口、来源校验
src/client/           浏览器端源码(拼接成 lib/client.js)
tests/                node:test 回归(不碰真实数据目录)

开发

npm test              # 全部测试
npm run build:client  # 修改 src/client 后重新生成 lib/client.js
npm run check:client  # 只检查产物是否最新

发布新版本(维护者)

npm run build:client -- --check
npm test
npm pack --dry-run          # 确认包里只有 lib/、locale/、cordis.patch.yml、README、LICENSE
npm version patch           # 或 minor / major
npm publish --access public # 私有 registry 用 --registry <地址>

发布后,其他人在 DSH 插件界面输入 dsh-ownsync 即可安装;升级时安装命令里指定版本。

—/ 5

No ratings yet

Verified DSH bundle

Commit e5617dca9705

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout