dsh-auto-sync

DSH PLUGIN通知与集成

仓库 wwwangzilin/dsh-auto-sync

通知与集成 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

dsh-auto-sync 是 wwwangzilin 维护的 通知与集成 类 DSH 可安装插件, 仓库为 wwwangzilin/dsh-auto-sync,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-auto-sync 是通知与集成类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类通知与集成 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-18 创建于 2026-10-17
README 16.8 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:wwwangzilin/dsh-auto-sync
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

通知与集成
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

存储通知GitHub 集成

上游标签

backupdeepseek-harnessdshdsh-plugingitsync

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在通知与集成场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-auto-sync当前 L5 · 运行验证通过 低风险 0 未标注 有
treg L3 · 安装规范通过 低风险 4,976 未标注 无
dsh-purge 未做沙盒验证 未标注 3,412 未标注 有
dsh-im L5 · 运行验证通过 低风险 1,837 0.1.7-rc.2 等 10 个 有
dsh-aurabot-qq 未做沙盒验证 未标注 633 未标注 有
dsh-dafeiyu L5 · 运行验证通过 低风险 425 0.1.7-rc.2 等 10 个 有

仓库档案

通知与集成
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方wwwangzilin仓库 dsh-auto-sync · 默认分支 main
分类通知与集成notify
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-17 · 2026-10-18最后推送 2026-10-18
本站收录2026-10-30首次进入本站目录的时间

README 全文

16.8 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-auto-sync

English | 中文

DeepSeek Harness 插件,将 DSH home 目录自动纳入版本控制并推送到用户自有的 git 远端。

插件把 DSH 写入 home 的内容作为工作树管理:会话记录、记忆文件、设置、profile 插件及其依赖树,另可镜像指定的项目目录。目标远端由用户指定;插件不连接本项目运营的任何服务器,也不携带任何凭据。


目录

  • 备份范围
  • 设计约束
  • 工作原理
  • 环境要求
  • 安装
  • 首次运行
  • /dsh-sync 命令
  • 设置页
  • 配置
  • 备份线
  • 恢复
  • 安全模型
  • 运行行为
  • 排错
  • 开发
  • 许可

备份范围

状态 典型位置
会话记录 /sessions/**
记忆文件 /memories/**、/memory/**
配置 /settings.yaml
Profile 插件 /profiles//
项目工作 用户指定的目录(可选)

凭据文件 /.credentials.yaml 默认被排除,见安全模型。

设计约束

  1. 存储位置由用户控制。 远端为普通 git 仓库:私有 GitHub 或 GitLab 仓库、内网服务器、NAS 上的裸仓库。
  2. 失败必须可见。 停止工作却没有提示的备份工具比没有备份更糟。每次运行的结果都会记录;备份线超过 48 小时未成功会在 DSH 日志中报告。

工作原理

插件经 profile 的 bundle 层注册,运行在宿主进程中。它只负责调度:热备份线在进程内完成小规模提交,完整快照以分离进程运行,避免应用退出截断快照。

┌──────────────────────────────┐
turn/end ───────▶│  热备份线(进程内)           │──▶ 分支  dsh-hot
定时 ───────────▶│  复制 → 提交 → 推送           │
└──────────────────────────────┘

┌──────────────────────────────┐
定时 ───────────▶│  cold-sync.mjs(分离进程)    │──▶ 分支  dsh-snapshot
关闭 ───────────▶│  镜像 → 提交 → 推送           │
└──────────────────────────────┘
│
└───────────────▶ workspace-sync.mjs
分支  dsh-workspace

每条备份线独占一个分支和一份独立的 git 工作区副本,因此任意两条线不会争用同一个 index——这是并发备份产生 index.lock: File exists 的原因。退出时的快照不会与热备份提交冲突。

配置按以下优先级读取:

  1. profile 补丁中 Cordis 条目的 config;
  2. /sync-plugin/config.json;
  3. 内置默认值。

配置文件已声明的键优先于补丁层:插件管理器会重写 profile 补丁,而配置文件由用户维护。


环境要求

组件 版本 说明
DeepSeek Harness >= 0.2.0-rc.2 声明为可选 peer,不阻止更高版本
Node.js ^22.19 \|\| >= 24 随 DSH 安装提供
git 2.30+ 须在 PATH 中,启动时探测

目录镜像、加锁与进程管理均由 Node 内置模块实现,不调用平台特化工具。


安装

从桌面应用安装

  1. 在侧栏打开插件页。
  2. 选择添加插件,填入本目录的绝对路径。
  3. 启用 dsh-auto-sync 组合包。
  4. 重启 DeepSeek Harness。

从命令行安装

dsh plugin --profile desktop add link:/path/to/dsh-auto-sync

首次运行

首次启动且无配置时,插件写入一份带说明的模板到 /sync-plugin/config.json,并记录一条警告:在设置 remote 之前备份处于暂停状态。

设置远端有两种方式。

命令方式(无需重启):

/dsh-sync setup git@github.com:you/dsh-backup.git

编辑配置文件后重启:

{
"remote": "git@github.com:you/dsh-backup.git"
}

下次启动时,插件初始化仓库、为每条启用的备份线创建分支与工作区副本,并开始备份。


/dsh-sync 命令

需要 profile 提供 commands 服务(Web 与桌面 profile 提供,headless 与 ACP profile 不提供)。

命令 行为
/dsh-sync 报告远端、各备份线及上次成功时间
/dsh-sync setup [地址] 设置远端并执行首次初始化
/dsh-sync remote <地址> 仅修改远端,不改动分支
/dsh-sync lines 列出备份线及其分支
/dsh-sync workspace <路径> 启用项目线并指定目录
/dsh-sync workspace off 关闭项目线
/dsh-sync run 立即安排一次快照
/dsh-sync doctor 诊断 git、仓库、分支与工作区副本

命令产生的修改均写回配置文件,结果可 diff。

界面语言

命令输出与首次引导支持中文与英文,取值顺序为:配置中的 locale → 环境变量 DSH_AUTO_SYNC_LOCALE → DSH 界面语言(宿主提供时)→ 默认 en。日志信息固定为英文,便于在 issue 中引用。


设置页

桌面版与 Web 版的「设置 → 插件」提供自动备份页签,与斜杠命令读写同一份配置文件:

  • 填写或修改远端地址;首次配置保存后立即执行初始化,无需重启;
  • 查看各备份线的分支、启用状态、上次成功时间与最后一次错误;
  • 指定同时备份的项目目录,清空即关闭项目线;
  • 手动触发一次快照。

实现分为两部分:

部分 文件 职责
Host lib/api.mjs 在 webServer 上注册路由并校验、持久化
Client lib/client.js 浏览器脚本,注册 settings.plugins.tab 页签

客户端为无构建步骤的原生浏览器脚本,经 window.__ModuleLoader__.load 加载并复用宿主提供的 React。

接口

路由 方法 作用
/api/dsh-auto-sync/status GET 配置、各线状态、git 可用性
/api/dsh-auto-sync/config POST 校验并保存远端、语言、间隔、项目目录
/api/dsh-auto-sync/snapshot POST 立即安排快照(未配置远端时返回 409)

接口只处理页面使用的字段,其余键原样保留。写操作要求 Origin 与 Host 同源,不一致返回 403。

不提供 webServer 的 profile 不注册这些路由,插件其余功能不受影响。


配置

配置文件位于 /sync-plugin/config.json。

顶层键

键 类型 默认值 说明
remote string "" 备份远端地址,必填。支持 SSH 与 HTTPS。
remoteName string "origin" origin 已指向其他仓库时使用的远端名。
worktree string -backup 各备份线工作区副本的父目录,须位于 home 之外。
locale string "zh" 命令与引导语言:zh 或 en。
exclude string[] 见下文 追加到 home .gitignore 的忽略规则。
userName string "dsh-auto-sync" git 未配置身份时使用的提交者名称。
userEmail string "dsh-auto-sync@localhost" 同上,邮箱。
home string $DSH_HOME 或 ~/.dsh 覆盖 home 目录;显式 --home 优先于环境变量。

默认忽略规则:

.credentials.yaml
**/node_modules/
*.log
.DS_Store
Thumbs.db
sync-plugin/.sync-status.json
memory/memory.db-shm
memory/memory.db-wal

备份线键

每条线均接受 enabled 与 branch。

lines.hot

键 默认值 说明
paths [".sync-status.json"] 每轮对话后提交的文件,相对 home;解析到 home 之外的路径会被拒绝。
debounceMs 30000 最后一轮对话结束后的静默期。
intervalMs 900000 无条件刷新间隔,保证长时间工具调用期间状态仍能落盘。

lines.snapshot

键 默认值 说明
intervalMs 86400000 完整快照间隔。
profile "desktop" 纳入依赖树的 profile。
includeNodeModules true 在快照中重新纳入该 profile 的 node_modules。
files 清单文件列表 与依赖树一同镜像的 profile 文件。

lines.workspace

键 默认值 说明
enabled false 未设置 source 时该线保持空闲。
source "" 要镜像的项目目录绝对路径。
exclude [".git", "node_modules", "dist", "build", "target", ".cache"] 递归时跳过的目录或文件;设置后完全取代默认值。

示例

{
"remote": "git@github.com:you/dsh-backup.git",
"worktree": "/home/you/.dsh-backup",
"locale": "zh",
"lines": {
"hot": {
"intervalMs": 900000,
"paths": [".sync-status.json"]
},
"snapshot": {
"intervalMs": 43200000,
"profile": "desktop",
"includeNodeModules": true
},
"workspace": {
"enabled": true,
"source": "/home/you/projects/app",
"exclude": [".git", "node_modules", "dist"]
}
}
}

备份线

hot → dsh-hot

频繁变化的小文件。文件复制进该线的工作区副本后提交并推送。默认在对话轮结束后 30 秒触发,并有 15 分钟下限,保证长时间工具调用期间状态仍能落盘。

snapshot → dsh-snapshot

home 的完整镜像,附带所配置 profile 的依赖清单与依赖树。link: 依赖按清单条目记录,克隆后由包管理器恢复;已发布依赖固化进分支。

运行时机:每日一次、退出时一次,以及启动时发现上次快照早于间隔的补跑。重复重启会重置倒计时,补跑避免了该问题。

workspace → dsh-workspace

镜像指定的项目目录,使代码与其描述状态一同版本化。默认关闭。构建产物与依赖缓存被排除,排除列表可配置。

release → GitHub Release 资产

完整备份的另一种形态:将 home 打包为 tar.gz 并作为 release 资产发布。

两种完整备份并存的原因:

snapshot(分支) release(资产)
存储 每个版本进入 git 历史 每个版本一个压缩包
成本 每次提交涉及数万文件 单个压缩文件
恢复 git checkout 下载解压,无需插件
长期保留 历史持续增长 保留最近 N 份

日常增量使用 snapshot,长期归档与灾难恢复使用 release。

以 3.4 GB 的 home 实测(排除依赖),归档体积约 369 MiB。

"release": {
"enabled": true,
"repo": "",
"tagPrefix": "dsh-backup-",
"keep": 5,
"intervalMs": 604800000,
"includeNodeModules": false,
"includeSecrets": false,
"partSizeBytes": 1500000000
}
  • repo 为空时由 git 远端推导为 owner/name。
  • 超过 partSizeBytes 时分割为 .part000、.part001 等,并生成记录各部分 sha256 的 manifest.json。
  • keep 限制保留数量;超出时优先删除较早的 tag,且仅考虑带本线 tagPrefix 的 tag。
  • .credentials.yaml 默认排除;includeSecrets: true 会将其打入归档,在公开仓库上等同于泄露密钥。

上传前可先预演:

node release-backup.mjs --dry-run

输出归档体积、分片数与目标仓库。

传输在 GitHub CLI 存在时使用 gh,否则使用 REST API 加 token。该顺序是必要的:在 TLS 中间人代理环境下,Node 的 fetch 会因 UNABLE_TO_VERIFY_LEAF_SIGNATURE 失败,而 gh 使用独立的信任链。REST 路径的 token 依次取自 DSH_AUTO_SYNC_GITHUB_TOKEN、GITHUB_TOKEN、gh auth token。


恢复

恢复整个 home:

git clone <远端地址> ~/.dsh
cd ~/.dsh
git checkout dsh-snapshot
dsh plugin --profile desktop install

恢复单个文件:

git show dsh-snapshot:sessions/2026-01-01/....jsonl > restored.jsonl

恢复项目:

git clone --branch dsh-workspace <远端地址> project

git log dsh-snapshot -- <路径> 给出单个文件的修订历史。


安全模型

默认排除凭据。 首次运行时插件把 .credentials.yaml 及以上规则写入 home 的 .gitignore。该文件保存服务商 API Key,不应推送。

接管而非覆盖已有仓库。 home 已是带远端的 git 仓库时,其历史与远端配置原样保留;插件只新增分支与工作区副本,不重写、变基或强推历史,也不修改已指向其他位置的远端。

从不强推。 推送被拒绝时合并远端顶端并重试一次,冲突以本地快照为准。历史只增不改。

配置无法导出 home 之外的文件。 lines.hot.paths 相对 home 解析,越界即拒绝。

对会话失败开放。 备份错误不会进入会话事件链;失败通过状态文件与日志上报,对话照常进行。


运行行为

并发

每条线独占工作区副本与 index。快照脚本获取锁文件,重叠触发(定时器、启动补跑、退出钩子)串行执行。超过一小时的锁视为废弃。

失败处理

情况 行为
git 缺失 启动检查报告;备份暂停
remote 未设置 写入模板;备份暂停并告警
推送被拒绝 合并远端顶端后重试一次;不强推
工作区副本缺失 报告;重启 DSH 后重建
工作区副本检出了其他分支 拒绝接管,避免两个分支共用一份快照
提交身份缺失 回退到配置的 userName / userEmail

可观测性

/sync-plugin/status.json 按线记录上次成功时间与最后一次错误:

{
"version": 1,
"updatedAt": "2026-01-01T00:00:00.000Z",
"lines": {
"hot": { "lastSuccessAt": "2026-01-01T00:00:00.000Z" },
"snapshot": { "lastSuccessAt": "2026-01-01T00:00:00.000Z" },
"workspace": { "lastError": "push failed", "lastErrorAt": "2026-01-01T00:00:00.000Z" }
}
}

超过 48 小时未成功的备份线在启动时报告到 DSH 日志。


排错

备份暂停,remote 为空。
在 /sync-plugin/config.json 中设置 remote 后重启 DSH,或执行 /dsh-sync setup <地址>。

推送报 could not read Username。
插件运行环境没有终端,git 无法交互输入。配置免口令 SSH key,或预先保存凭据到 credential helper。

出现 index.lock: File exists。
本插件按设计避免同一 index 上的并发。出现该错误说明上一个 DSH 进程未正常退出,删除对应工作区副本 .git 目录下的陈旧锁文件。

快照线未运行。
确认 lines.snapshot.enabled,检查 status.json。常见原因为 PATH 中缺少 git,启动时会报告。

工作区副本因检出其他分支被拒绝。
插件不会接管检出了其他分支的目录。将 worktree 指向其他位置,或删除该陈旧目录。

中文命令输出未生效。
确认 locale 为 "zh",或设置 DSH_AUTO_SYNC_LOCALE=zh。


开发

仓库无运行时依赖。测试在系统临时目录中创建一次性仓库,并对推送到远端的内容断言,包含反向用例:密钥、日志与构建产物不得出现在任何分支。

node tests/e2e.mjs           # 初始化、热提交、快照、推送
node tests/verify-remote.mjs # 对远端实际内容断言
node tests/edge.mjs          # 项目线、接管已有仓库、未配置启动、路径逃逸
node tests/onboard.mjs       # 远端校验、引导消息、命令、中英文一致性
node tests/api.mjs           # 设置页接口:校验、持久化、跨站拦截
node tests/client.mjs        # 客户端脚本:模块工厂、页签注册
路径 职责
index.js 插件入口:调度、热备份线、生命周期
cold-sync.mjs 分离进程中的快照线
workspace-sync.mjs 项目镜像线
release-backup.mjs Release 归档线
lib/config.mjs 默认值、分层、首次运行模板
lib/setup.mjs 仓库初始化、接管、忽略规则、工作区副本
lib/onboard.mjs 首次引导与 /dsh-sync 命令
lib/i18n.mjs 中英文案
lib/api.mjs 设置页 Host 端路由
lib/client.js 设置页浏览器端
lib/git.mjs git 封装
lib/copy.mjs 跨平台目录镜像
lib/status.mjs 状态上报
lib/exec.mjs 进程辅助

许可

MIT,见 LICENSE。

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-auto-sync 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:wwwangzilin/dsh-auto-sync` 即可。

dsh-auto-sync 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-auto-sync 安全吗?

低风险。

dsh-auto-sync 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-auto-sync 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

通知与集成
按星标排序,可作替代方案

treg

treg

Treg 是面向 Agent 工具的 OpenRouter,聚合 60 个提供商的 2896 个端点,按调用计费,统一令牌访问,无需注册各供

L3 · 安装规范通过 4,976 星

dsh-purge

dsh-purge

dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚

未标注验证等级 3,412 星

dsh-im

dsh-im

将IM机器人接入DeepSeek Harness,支持飞书、微信、钉钉等九种渠道,通过扫码或凭据配置,统一管理多机器人连接。

L5 · 运行验证通过 1,837 星

dsh-aurabot-qq

dsh-aurabot-qq

让 DeepSeek Harness 里的 AI 以「大肥鱼」人格住进 QQ,通过 OneBot v11 网关聊天、发表情语音、写空间日记并

未标注验证等级 633 星

dsh-dafeiyu

dsh-dafeiyu

DSH 大肥鱼是一款由 DeepSeek Harness 真实工作状态驱动的桌面伴侣插件,以始终置顶的透明窗口实时展示 Agent 的思考、

L5 · 运行验证通过 425 星

dsh-trading

dsh-trading

L3 · 安装规范通过 235 星

wwwangzilin 的其它插件

2 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。