DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-memory-webdav-sync

Y

dsh-memory-webdav-sync

Manifest valid

Bidirectionally sync DSH's memory files to any WebDAV server (with settings interface)

UI (client)hasBundlePatchMachine translated

dsh-memory-webdav-sync

给 DeepSeek Harness(DSH) 用的记忆同步插件:把工作目录里的记忆文件(Markdown / 文本) 双向同步到任意标准 WebDAV 服务器,让多台机器共享同一份记忆。


功能一览

功能说明
双向同步本地改动推送到 WebDAV;服务器上的改动拉回本地
后台运行,不打扰对话会话开始时拉取一次;写完文件后延迟几秒推送;中途的检查在后台进行
冲突保护两边都改过同一个文件时,先把本地那份另存为 文件名.conflict-时间戳,不会静默丢改动
只同步文本默认 .md / .txt / .json / .yaml / .yml;图片可选开启
删除安全本地删除不会删除服务器上的文件(避免一次误删清空远端)
传得完整上传先写临时文件、校验大小后才改名成正式文件;下载不完整就丢弃。半截文件永远不会冒充你的记忆
凭据不外传插件自身的配置与状态文件永远不会被同步出去
图形化配置在 DSH 设置里填写,不需要手改 JSON
无额外依赖只用系统自带的 curl,无需安装客户端套件

它解决什么问题

DSH 不会自动把上一次会话读给模型。"记忆"靠两样东西:

  1. 工作目录里的一份文本档案(例如 index.md 作为入口,下面再分目录)
  2. 你的一句触发语(例如「读一下记忆」),让助手去读它

只有一台电脑时这没问题。多台电脑就会分叉:一台改了记忆,另一台不知道。

本插件在后台做双向同步,因此换机器不需要额外操作 —— 开工时它会先把服务器上的最新记忆拉下来。

环境要求

项要求
DSH已安装 DSH 桌面版(已在 macOS 上实测;Windows / Linux 未经实测)
WebDAV 服务器支持 PROPFIND / GET / PUT / MKCOL,认证方式为 Basic Auth
服务器返回的 href必须是路径形式(例如 /dsh/a.md);返回完整 URL 的服务端暂不支持
网络能访问你的 WebDAV 地址(局域网地址或公网域名均可)
系统需要系统自带 curl(macOS / Linux 默认自带;Windows 10 及以上也自带)

安装

桌面版不能用命令行安装。 DSH 官方规定 desktop profile 由桌面应用自身管理, dsh plugin 命令会拒绝它;「添加本地插件」按钮在 DSH 里也不存在。 下面四种方式任选一种。

方式一:macOS 一键脚本(推荐)

⚠️ 仅适用于 macOS。 Windows / Linux 请用方式二或方式四。

  1. 在本仓库页面点 Code → Download ZIP,解压(不需要 Git,也不需要账号)
  2. 进入解压出来的文件夹,双击 install.command (首次双击若被系统拦下:右键 →「打开」)
  3. 脚本会:把插件登记到 DSH 的 profile → 复制插件文件 → 缺少运行依赖时用 DSH 自带的包管理器补上
  4. 完全退出 DSH(⌘Q),再重新打开

脚本只做安装,不会改动插件以外的任何东西;它在动手前会自动备份 profile 的配置文件。

方式二:插件市场(所有平台)

  1. 打开 DSH → 设置 → 插件市场
  2. 搜索 memory-webdav-sync(或「记忆同步」)→ 点安装
  3. 按提示刷新或重启 DSH

如果没有搜到,说明本插件尚未进入市场收录表,请用方式一或方式四。

方式三:命令行(仅适用于 web 等非桌面 profile)

dsh plugin --profile web add github:YerenChina/dsh-memory-webdav-sync

方式四:手工安装(任何平台)

  1. 把本目录复制到 <DSH 配置目录>/profiles/<profile 名>/node_modules/dsh-memory-webdav-sync/
  2. 在该 profile 的 package.json 中登记两处:
{
  "dependencies": { "dsh-memory-webdav-sync": "file:/本插件的绝对路径" },
  "dsh": { "profile": { "bundles": ["……原有项……", "dsh-memory-webdav-sync"] } }
}
  1. 重启 DSH

若该目录下没有 node_modules(例如从 ZIP 解压得到),插件运行所需的 @deepseek-ai/schemastery 需要另行安装:在该目录里执行 pnpm install --prod。

服务器侧准备

  1. 启用 WebDAV 服务(群晖等 NAS 的 WebDAV Server 套件、Nextcloud,或自建 Apache / Nginx)
  2. 建一个用于存放记忆的目录(例如 /dsh),稍后填进配置的 remotePath
  3. 确保所用账号对该目录有读写权限

配置

安装完成后重启 DSH,打开 插件配置 → 记忆同步,填写 WebDAV 地址、账号、密码、远程路径并保存。

也可以改用配置文件:把 memory-sync.example.json 复制成工作目录下的 .memory-sync.json 并填好。 优先级:设置界面 > 配置文件 > 默认值。

配置不会随代码仓库同步,因此每台机器都要填一次(填同一份内容即可共享记忆)。

字段默认说明
url—WebDAV 服务器地址,例如 https://example.com:5006
localRoot空要同步的本地目录;留空 = 自动识别当前 DSH 工作区
user—WebDAV 账号
password—WebDAV 密码;留空保存 = 不修改已保存的密码
remotePath/dsh服务器上存放记忆的目录
includeExt.md .txt .json .yaml .yml参与同步的文件类型
syncAssetsfalse是否同步图片(体积可能较大)
debounceMs3000写完文件后延迟多久推送(毫秒);越大越省请求
pullIntervalMs60000两次自动拉取之间的最小间隔(毫秒);会话开始那次不受此限制
listTimeoutSec8列目录的超时(秒);它发生在对话开始前,不宜过长
conflictBackuptrue两边都改过时,覆盖前把本地那份另存为 xxx.conflict-时间戳
mirrorDeletionsfalse⚠️ 以本地为准:推送时删掉"我们同步过、但本地已经没了"的远端文件与空目录(改名/移动/删除场景)。只删本插件同步过的文件,别人放在服务器上的文件绝不碰
verbosefalse输出调试日志

另有三个只在配置文件里可用的项:excludeDirs(额外要排除的目录)、timeoutSec(传输超时,默认 20 秒)。

关于「删除远端多余文件」(mirrorDeletions)

默认关闭。原因是这个插件默认是"补齐式"同步:服务器上有、本地没有的文件会被下载下来 —— 这带来了一个副作用:你在本地把文件改名/移动/删除后,服务器上那份还在,下一轮拉取又把它下载回来。

打开 mirrorDeletions 后,推送时会以本地为准:把"以前同步过、现在本地已经没有了"的远端文件删掉, 并把这些文件留下的空目录一并清掉(文件删了却留一堆空文件夹,服务器会越来越乱)。 两条安全护栏:

  1. 只删同步状态里记录过的文件(即这个插件自己传上去的)—— 你手动放在服务器上的文件永远不会被删;
  2. 删除失败(比如 404)也算成功;真的失败会在日志里报出来。

如果你会经常改文件名、挪目录(比如整理笔记结构),建议打开它;如果只是往里写文件,保持默认即可。

哪些文件不会同步

  • 以 . 或 _ 开头的目录一律不同步(.git、.build、.obsidian、_draft 等版本控制、 缓存与草稿目录不必逐个列)。此规则只作用于目录:以 _ 开头的文件(如 _template-规格表.md)照常同步。
  • 构建产物目录 dist / build 不同步。
  • 同名目录 node_modules、inbox、.mnt 不同步。
  • 插件自身的配置与状态文件(.memory-sync.json、.memory-sync-state.json)永不参与同步。

同步时机

时机动作
会话开始拉取(等待完成后才开始,确保用到最新记忆)
每轮对话前后台拉取(不阻塞对话;pullIntervalMs 内只拉一次)
工具调用结束后等待 debounceMs → 推送(期间的多次改动合并为一次)

多台机器与冲突

同步按时间戳判断,不做自动合并:

情况处理
服务器上有新版本、本地没动拉取并覆盖本地
本地有改动、服务器没动保留本地,稍后推送
两边都改了同一个文件以服务器版本为准,同时把本地版本另存为 xxx.conflict-时间戳

使用建议:同一时间只在一台机器上编辑记忆,其余机器开工时会自动拉到最新版本。

兼容的 WebDAV 服务

本插件使用标准 WebDAV,不绑定任何厂商:

服务端是否可用
群晖 / 威联通等 NAS 的 WebDAV Server✅
Nextcloud / ownCloud✅
坚果云(WebDAV)✅
Apache mod_dav / Nginx + WebDAV 模块(自建)✅
Windows IIS WebDAV⚠️ 通常不可用(href 返回完整 URL)

排查

先把 verbose 打开,同步细节会写入日志。

现象可能原因
插件已加载但不传输未读到配置:确认设置已保存,或 .memory-sync.json 在正确目录
401账号或密码错误;账号对该目录无权限
404remotePath 不存在 —— 请先在服务器上建好目录
一直超时地址不通:先用浏览器打开该 WebDAV 地址确认
密码正确但仍报 401部分 NAS(如群晖)有自动封锁:多次认证失败会封禁来源 IP,需在控制台将其移出封锁列表

安全

  • .memory-sync.json 内含明文密码,已在 .gitignore 中排除 —— 请勿提交或外发
  • 建议在服务器上单独建一个账号,只授予记忆目录的读写权限
  • 建议使用 HTTPS 的 WebDAV 地址,避免明文传输
  • 本插件不会把配置与状态文件同步到服务器

开发与自检

客户端设置卡片源码位于 src/client/index.js,需打包为 DSH 的 lazy-CJS 格式(产物 lib/client.js 已提交, 使用者无需构建):

pnpm install
pnpm run build                  # 生成 lib/client.js
bash scripts/sync-to-profile.sh # 同步到已安装的 profile 副本

自检(修改同步逻辑前建议先跑):

node test/smoke.mjs            # 86 项离线自检:进程内假 WebDAV + 真实 apply(),无需网络与密码
node test/real-pull-check.mjs  # 对真实服务器做只读拉取校验(读取 DSH 设置里的配置)

test/smoke.mjs 中的假 WebDAV 刻意照抄主流 NAS 的真实响应格式(<D:response> 带 xmlns 属性、 属性元素使用 lp1: 前缀、href 采用 URI 编码),并支持 MOVE / Depth: 0 / 「故意只存前 N 字节」, 用来钉住「原子上传」与「完整性校验」。

推送前的隐私闸门(仓库里不许出现开发文档 / 配置 / 私人信息):

bash scripts/install-hooks.sh    # 装 pre-push 钩子(装一次即可,之后每次推送自动跑)
bash scripts/privacy-check.sh    # 手动跑一遍:查跟踪的文件 + 全部历史
bash scripts/privacy-check.sh selftest   # 确认闸门本身没失灵

诊断用环境变量:

变量作用
DSH_MEMORY_SYNC_DEBUG=1输出详细诊断日志
DSH_MEMORY_SYNC_CARD=0禁用设置卡片(卡片异常时用于保证 DSH 仍能启动)

插件机制与维护细节见上级目录的 DEVELOPMENT.md(维护手册:坑与决策)与 TECH.md(插件机制、构建与发布)。

许可

MIT

Comments

Loading…

Similar plugins

dsh-memory

by joyiok

DSH plugin: shared persistent memory store across all sessions, with memory_* tools and a Web sidebar panel

Manifest valid

★ 0

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-memory

by CuteSamurai24

Small file memory for DeepSeek Harness. The model writes markdown, the host injects it.

Tools & CapabilitiesManifest valid

★ 0

MIT

JavaScript

Aug 18, 2026

dsh plugin --profile web add dsh-md-memory

by lovezi0

把 WorkBuddy 的文件式记忆系统移植进 [DeepSeek Harness](https://www.deepseek.com/harness/) —— 为 Harness 提供**跨会话持久化、人类可直接编辑的 Markdown 记忆**。

Memory & ContextManifest valid

★ 4

↓ 902/wk

MIT

JavaScript

Sep 30, 2026

dsh plugin --profile web add dsh-memory-palace

by SiriusWJ

DSH 简化版记忆插件:SQLite 条目化记忆(标题/重要程度/来源/内容,增删改查)+ 日历与到点提醒(月视图+时间轴+待执行/已完成双tab),对话面板记忆 tab 与设置二级菜单,中英双语自动跟随。

Sessions & MessagesMemory & ContextManifest valid

★ 2

BSD-3-Clause

JavaScript

Sep 15, 2026

dsh plugin --profile web add dsh-lite-memory

by liu-zhengdong

把 Markdown 记忆目录接入 DSH:每轮常驻索引,正文按需读取

Manifest valid

★ 0

MIT

TypeScript

Oct 10, 2026

dsh plugin --profile web add dsh-simple-memory

by xjhao-heim

DeepSeek Harness 插件:工作区级任务记忆,把做过的任务存成记忆卡,下次会话不必重新分析一遍。

Manifest valid

★ 0

JavaScript

Oct 10, 2026

dsh plugin --profile web add dsh-task-memory