dsh-cache-cleaner:把 DSH 临时缓存迁出系统盘并按白名单清理

前言

DeepSeek Harness(DSH)在会话与工作区变更过程中会在系统临时目录下产生 dsh-workspace-changes-* 一类缓存。默认落在 %TEMP% 或系统盘上时,长时间使用容易挤占系统盘空间;手动删临时文件又容易误伤 captures、会话日志或凭据。社区插件 dsh-cache-cleaner(维护者 strikesuitzero,分类 admin-security)把宿主进程的 TEMP/TMP 重定向到可配置根目录,仅按严格白名单清理临时对象,并支持归档会话与工作区 temp/archive 子目录的管理。插件双语(中/英),MIT 许可。

下面介绍它的定位、能力与安装配置方式。事实以 GitHub 仓库 README 为准;生态目录见 SkillHub 插件页。DSH 社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-cache-cleaner 是 DSH 的缓存与磁盘管理插件:将 DeepSeek Harness 临时缓存迁到可配置目录,用 allowlist 做清理,并管理归档会话以及工作区临时/归档文件夹。可通过设置面板、CLI 或 7 个 agent 工具操作。当前 package 版本为 0.5.0(以仓库 package.json 为准)。

核心功能

缓存重定向

插件将宿主进程的 TEMP/TMP(因而 os.tmpdir() 及子进程)指向 <cacheRoot>/temp,新会话快照不再默认落在系统盘。

默认 cacheRoot:Windows 为 %LOCALAPPDATA%\dsh-cache-cleaner;其他系统为 $XDG_CACHE_HOME/dsh-cache-cleaner 或 ~/.cache/dsh-cache-cleaner。可通过配置改到有剩余空间的盘符。

白名单清理与双门槛

仅删除匹配 dsh-workspace-changes-*/objects/<2 hex>/tmp_obj_<6 chars> 的文件。captures/、sha1 对象、锁文件、会话、配置与凭据不会被触碰。

清理有两道门:按 mode 预设的天数(默认 normal 为 14 天)与配额(超 50 GiB 时按最旧优先删至约 80%)。遗留的 %TEMP%/dsh-workspace-changes-* 目录可单独处理,自动清理时最短保留 24 小时(autoCleanLegacy 默认关闭)。

归档会话与工作区根

可列出归档会话、预览删除计划,再删除会话及(可选)附件与会话投影缓存;删除走宿主注册表 API,进行中的会话会被拒绝。

可汇报并在显式启用后清理所配置的 workspace temp/archive 根目录下的直接子项;kind: archive 的删除需打开 manageArchives。

设置面板与 Agent 工具

设置里增加 缓存清理 / Cache cleaner 区块(概览、缓存、工作区、归档会话、清理选项);面板先渲染,后台扫描完成后填充数据。界面语言随 DSH UI;各 agent 工具描述含中英文。

7 个工具:cache_status、cache_clean、cache_ownership、conversation_list、conversation_delete、workspace_status、workspace_clean。

安全模型(使用前宜知晓)

  • 仅白名单匹配项可删;不跟随或删除符号链接与 junction。
  • CLI 与工具默认 dry-run;真正执行需 --apply / apply:true,且通常需 confirm:true。归档根另需 manageArchives:true 与 includeArchives:true。
  • cacheRoot 须有插件写入的 .dsh-cache-cleaner.json 标记(--init 或插件初始化),误配根目录不会被扫。
  • 工作区根必须严格落在 workspaceBases 内;卷根、用户主目录、DSH_HOME 与缓存根会被拒绝。
  • 单次删除失败记为 skipped 并继续其余批次。

临时目录与会话的归属在部分场景下按创建时间窗口 推断(confidence: "time-window"),并非宿主持久化存储的所有权。

安装与启用

仓库发布后,可从 GitHub 安装;bundle patch 声明插件行,宿主在下次重启或插件禁用/启用重载后加载。

# from GitHub (once the repository is published)
dsh plugin add github:strikesuitzero/dsh-cache-cleaner

# or from a local checkout
dsh plugin add file:D:/path/to/dsh-cache-cleaner

本地路径示例以 README 为准,按实际 checkout 位置替换 file: 路径。

配置

键均可选。可在 profile 的 cordis.patch.yml 里编辑插件条目的 config;设置 → Plugins → cache cleaner 也会持久化部分清理选项。

Key 默认 含义
cacheRoot 见上文 重定向临时目录与报告的根路径
redirectTemp true 是否重定向宿主 TEMP/TMP
autoClean true 是否定时清理(启动延迟 + 间隔 + 空闲 debounce)
autoCleanLegacy false 自动清理是否包含遗留 %TEMP%/dsh-workspace-changes-*
startupDelaySeconds 60 首次自动清理前延迟(秒)
intervalHours 6 计划扫描间隔(UI 有 1/3/7/15/30 天等预设)
idleQuietMinutes 10 Agent 空闲这么久后额外跑一次
mode normal safe(30 天 / 50 GiB)、normal(14 天 / 50 GiB)、aggressive(1 天 / 30 GiB)
retainDays null 覆盖 mode 的年龄门槛
quotaBytes null 覆盖 mode 的配额门槛
workspaceBases [] 工作区根必须严格位于其内的目录列表
workspaceRoots [] [{path, kind: temp\|archive, retainDays, auto}],只看直接子项
manageArchives false 是否允许删除 kind: archive 根下的内容

profile 覆盖示例:

- id: dsh-cache-cleaner
  config:
    cacheRoot: 'D:\\Cache\\dsh-cache-cleaner'
    workspaceBases: ['D:/work/project']
    workspaceRoots:
      - { path: 'D:/work/project/_tmp', kind: temp, retainDays: 7, auto: true }
      - { path: 'D:/work/project/_archive', kind: archive, retainDays: 30, auto: false }

典型用法

CLI

先初始化根标记,再 dry-run,确认后 --apply:

node bin/dsh-cache-clean.mjs --init                 # write the root marker
node bin/dsh-cache-clean.mjs                        # dry-run
node bin/dsh-cache-clean.mjs --apply                # clean
node bin/dsh-cache-clean.mjs --status --json
node bin/dsh-cache-clean.mjs --ownership
node bin/dsh-cache-clean.mjs --conversations
node bin/dsh-cache-clean.mjs --delete-archived all --apply --confirm
node bin/dsh-cache-clean.mjs --workspace-status
node bin/dsh-cache-clean.mjs --workspace-clean --apply --confirm

宿主未运行时若需改离线注册表,须加 --offline-registry;CLI 会在改动 workspace.json 前写入带时间戳的 .bak-<ms>,无该标志则拒绝。

日常维护路径

  1. 在设置面板查看缓存与工作区概览,按需调整 mode 或 cacheRoot。
  2. 用 cache_status 或 --status --json 看重定向状态、体积与定时器。
  3. 清理前先用默认 dry-run 或 cache_clean 无 apply,再带 confirm 执行。
  4. 删归档会话前用 conversation_list / --conversations 核对,再 --delete-archived。

仓库提供 smoke 测试(如 node test/smoke-v4.mjs,116 assertions),使用假宿主服务与 fixture,不触碰真实会话与缓存。

适用场景与注意

适合需要把 DSH 临时缓存迁到大容量盘、又想用白名单与 dry-run 控制清理风险的开发者或运维向用户。归档与会话清理适合定期整理历史会话、释放附件与投影缓存占用的场景。

插件以当前 DSH 宿主进程权限运行,安装前应自行审阅 源码与 LICENSE。设置面板经 /api/cache-cleaner.api 与宿主通信,未授权 HTTP 探测会得到 401;应在已登录浏览器的 DSH 设置中验证。若系统“删除”实际移入回收站,报告可能提示未观察到预期释放在用空间。

结尾

dsh-cache-cleaner 把临时缓存迁出系统盘、用 allowlist 与双门槛做可控清理,并补齐归档会话与工作区 temp/archive 的管理入口。需要详情与 issue 时打开 GitHub;在生态目录检索可用 SkillHub 插件页。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye