dsh-attachment-cache:浏览、清理与迁移 DSH 附件持久化存储

前言

在 DeepSeek Harness(DSH)里,你发给对话的每一张图、每一个文件,以及工具返回的附件,都会落到本机 ~/.dsh/attachments/v1 下,以内容寻址的方式持久保存。Harness 本身不会回收这些对象:没有垃圾回收、没有保留策略、退出 dsh 也不会动这个目录,容量只会增长。几段带 TIFF、PDF 或截图的对话,就可能占去数 GB。

更棘手的是,DSH 默认界面不会告诉你「哪段对话占用了哪些字节」,也不会说明手动删文件会破坏什么。dsh-attachment-cache(社区目录分类:记忆)是维护者 junecattle 提供的侧边栏插件,专门面向 ~/.dsh/attachments 的浏览、有说明的删除,以及整库迁移。

这是什么

dsh-attachment-cache 是 DeepSeek Harness 的 web profile 侧边栏面板:展示 ~/.dsh/attachments 里按对话归类的库存,支持在删除前说明影响、批量选择与无引用对象清扫,并可在 Windows 上把存储迁到另一块盘而不丢旧对话引用。插件只读会话日志以建立 digest 与对话的映射,不修改 session 日志,也不调用 DSH 附件服务的内部 API。

存储布局(摘自项目说明):规范化图片在 objects/<sha256>;文件在 file-objects/<sha256>,另有 files/<sha256>/<name> 硬链接作为展示名。可再生的派生缓存在 ~/.dsh/cache/attachments(请求用图片),与持久化 store 分开处理。

核心功能

按对话清点

每个已存对象都会映射回引用它的对话,按类别(图片、文档、其他)分组,并以所属消息作为组标题。面板支持搜索(文件名、扩展名、对话标题)和扩展名过滤(逗号分隔后缀,例如 tif,pdf)。

删之前先说明

选中一行会说明文件是什么、被多少对话共享,以及删除后具体会坏什么。附件是内容寻址的,同一对象可服务多段对话。删除经确认对话框后,通过 POST /delete 执行,且不可恢复(无回收站)。

删除对象 影响
图片 object 所有用过该图的对话里该图不再渲染;文本与工具输出仍在
文件 object 原文件无法在后继轮次再下载或再读;files/ 下对应别名一并消失
仅 files/<sha>/<name> 别名 只影响该展示名;object 仍可供其他名称使用
~/.dsh/cache/attachments 无永久损失;请求图片可按需再生
无引用 object 无会话指向,删除无功能影响

批量与无引用清扫

支持按组「全选本组」、按当前筛选「全选当前」或逐条点选后一次确认删除。「无引用」页单独列出已无任何会话引用的对象,便于安全回收空间。

派生缓存清理

~/.dsh/cache/attachments 可随时清空;项目将其标为可再生意,与 attachments/v1 的持久对象区分开。

存储迁移(Windows)

逻辑路径仍为 ~/.dsh/attachments/v1,实际字节可放到其他 NTFS 本地卷,通过目录联接(junction)对 DSH 透明;引用是内容哈希而非路径,旧对话仍可解析。

典型步骤:

  1. 面板中「存储位置 → 选择目标文件夹」(例如 D:\dsh-attachments)。
  2. 选择模式:移动(校验 digest 后删旧副本并建 junction)、保留副本(旧目录改名为 v1.backup-<timestamp>)、或切换(指向已有 store,不复制)。
  3. 后台显示进度(files / bytes / phase),面板可关闭再开。
  4. 还原 可把数据拷回、去掉 junction、恢复普通目录。

说明:联接在 Windows 11 + Node 22+ 上测试;store 须在本地 NTFS 卷。派生缓存仍留在 C:。目标盘不可用时,附件读取会失败,面板会报告而非静默。备份工具若不跟随重解析点,可能看到空目录。

安装与启用

要求(资料原文):DeepSeek Harness ≥ 0.2.1,web profile;Node ≥ 20(会话日志解压依赖 zlib.zstdDecompress)。浏览与删除跨平台;存储迁移面向 Windows 11。

安装命令:

dsh plugin --profile web add github:junecattle/dsh-attachment-cache

重启 DSH 后,打开 Settings → Plugins,启用 Attachment cache manager,再点击侧边栏的归档图标。后续更新使用同一条 add 命令。

启用前请自行查看仓库源码与 MIT 许可证。插件以当前 dsh 进程权限读写 ~/.dsh 下文件;预览经本机 DSH 已认证的 localhost 路由提供,资料称不向外上传。

典型用法:面板区域

区域 作用
标签页 全部、图片、文档、其他、无引用,各带实时计数
搜索 / 扩展名过滤 见上文
全选当前 选中当前可见项(含折叠组)
展开全部 / 收起全部 展开或折叠所有对话卡片
存储位置 打开迁移对话框
重新扫描 重读 store 与会话日志
删除选中 确认后删除选中对象

悬停文件可见大小、digest、共享次数及删除后果;点击可在详情区固定并预览 PNG/JPEG/GIF/WebP。

会话日志路径(只读):~/.dsh/sessions/<workspace>/<session>/session.v4.jsonl.zstd(zstd 多帧),用于把 sha256:<digest> 映射到对话。Host 路由挂在 /attachment-cache-manager,由宿主连接围栏保护。

适用场景与注意

适合长期使用 DSH、频繁贴图或传 PDF、又需要看清磁盘占用并按对话清理的开发者。也适合 Windows 用户把 attachments/v1 从系统盘迁到大容量盘,同时保留历史对话里的附件引用。

不适合指望「装完自动限流」的场景:Harness 仍不会自带 GC,本插件是显式管理工具,删除永久且需你理解共享 object 的影响。

隐私与边界:资料写明一切本地处理。插件不写入会话日志,DSH 升级不应通过该插件破坏 store;但若你手动改目录或使用不识别 junction 的备份策略,仍需自担风险。

结尾

dsh-attachment-cache 把 ~/.dsh/attachments 从「只增不减的黑盒」变成可清点、可说明后果地删减、并在 Windows 上可迁移的库存面板,分类落在社区目录的「记忆」维度,与 DSH「一切皆插件」的生态一致;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

  • 目录页:https://www.skillhub.cn/plugins/junecattle/dsh-attachment-cache
  • 仓库:https://github.com/junecattle/dsh-attachment-cache
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye