前言¶
DSH(DeepSeek Harness)在处理任务时会生成大量临时脚本和日志文件,如 fix-xxx.ps1、upgrade-xxx.ps1、restart-dsh.log、*.bak 等。事后往往难以判断哪些文件还能用、哪些已经过期、哪些可以安全删除。收纳间就是为了解决这类问题而设计的一个集中管理工具。
插件介绍¶
收纳间是 DSH 的一个插件,由维护者 yuezhiye 开发。它的核心功能是按工作区统一管理临时脚本与日志,提供登记、扫描、执行、清运、回收站和面板等完整流程。插件遵循三条铁律:数据存在工作区目录下、扫描操作不删除任何文件、清理操作只做移动并进入可还原回收站。
目录结构¶
安装后,每个工作区下会生成一个 .dsh-fix/ 目录,结构如下:
<工作区>/
└── .dsh-fix/ # 收纳间
├── registry.json # 登记册:路径/语言/用途/状态/运行次数
├── logs/<脚本名>/ # 执行日志,按时间戳分文件
│ └── 20261018-165530.log
└── trash/<批次>/ # 回收站
├── manifest.json # 每个文件的原路径与体积
└── <搬进来的文件>
核心功能¶
插件提供 8 个工具,支持多语言脚本执行与日志管理。
工作区管理¶
closet_workspaces:列出 DSH 里已登记的工作区,包含标题、路径、会话数和目录是否存在。onlyExisting: true 参数可过滤掉已不存在的目录。
脚本登记¶
closet_register:登记一个脚本,需要提供路径、用途、语言和状态(active/done/obsolete)。此操作只写登记册,不修改文件。
closet_list:列出登记册,并标注文件是否仍然存在。
扫描遗留物¶
closet_scan:扫描工作区,列出疑似遗留物及判定理由。skipTracked: true 可排除已被 git 跟踪的文件。此操作只读,不会删除任何文件。
脚本执行¶
closet_run:按语言执行登记过的脚本,输出写入对应日志文件。支持 PowerShell、Node、Python、批处理和 Shell。
清运与回收站¶
closet_clean:把指定文件移进回收站,附带 manifest.json 记录原路径,随时可还原。已被 git 跟踪的文件会被拒收,确需清运要带 force: true。
closet_trash:查看回收站批次。expire: true 参数才会执行过期清理,默认为预演模式。
日志查看¶
closet_logs:列出某个脚本的执行日志,或读取某份日志的末尾。
多语言支持¶
按扩展名自动识别语言,支持:
| 语言 | 扩展名 | 默认解释器 |
|---|---|---|
| PowerShell | .ps1 .psm1 .psd1 |
pwsh,缺失时退到 powershell.exe |
| Node | .js .mjs .cjs .ts |
node |
| Python | .py |
python,缺失时退到 py -3 |
| 批处理 | .bat .cmd |
cmd.exe /d /c |
| Shell | .sh .bash .zsh |
bash |
解释器路径可在配置中覆盖。
配置¶
配置项写在插件条目的 config 下:
dsh-closet:
enabled: true
dataDir: .dsh-fix # 收纳间目录名,相对工作区
trashRetentionDays: 30 # 回收站保留天数
ignore: [] # 额外忽略的目录名或 glob
maxScanFiles: 5000 # 扫描上限
maxScanDepth: 64 # 扫描最大深度
runTimeoutMs: 120000 # 单次执行超时(毫秒)
maxLogBytes: 2097152 # 单个日志文件上限(字节)
maxCleanBatch: 200 # 单次最多清运多少项
maxCleanBytes: 209715200 # 单次最多清运多少字节
interpreters: {} # 覆盖解释器,键为语言名,值为 argv 数组
面板使用¶
安装后在 设置 → 脚本与日志 面板中:
- 已登记脚本:显示状态、路径、运行次数;文件已被删掉的会标红提示
- 顶部下拉框:自动列出所有已登记的工作区,选择后直接查看该工作区的脚本、扫描结果和日志
- 扫描遗留物:勾选后点「移进回收站」,可批量处理
- 回收站:按批次列出体积与条目,可一键还原
- 执行日志:按脚本分组,点开看最近 200 行
面板接口走 /dsh-closet/api/*,只接受同源请求。
安全设计¶
- 扫描操作永不删除文件,只列出清单和判定理由
- 清理操作只做移动,真正删除只有过期清理一条路,默认 30 天后才允许,且默认只做预演
- 不动版本库里的东西:已被 git 跟踪的文件默认拒收,确需处理要显式带
force: true - 不会越界:只能处理工作区内文件,双重校验路径防止穿越
- 不会扫穿:
node_modules、.git等默认跳过,软链接不跟随 - 不会写坏:
registry.json走原子写流程,文件损坏时先改名留存现场再重建 - 不会拖死:脚本执行有超时保护,超时用进程树强杀
典型用法¶
一个典型回合如下:
用户:这次排查完了,把临时脚本收拾一下
AI :closet_register { path: ".dsh-fix/upgrade-wbc.ps1", purpose: "升级 workbuddy 连接器", status: "done" }
AI :closet_scan → 发现 8 个遗留物(3 个 .bak、2 个日志、3 个临时脚本),附判定理由
用户:前 5 个可以清
AI :closet_clean { paths: [...] } → 已移入回收站批次 20261018-165530
安装与启用¶
通过以下命令安装插件:
dsh plugin add https://github.com/yuezhiye/dsh-closet
安装后插件默认启用,在配置文件中设置 dsh-closet.enabled: true 即可。
适用场景与注意¶
收纳间适合需要在多个工作区中管理临时脚本和日志的场景。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。MIT 许可证允许自由使用和修改。
结尾¶
收纳间为 DSH 提供了一套完整的临时文件管理流程,从登记、扫描到执行和清运,都围绕「不误删、可还原、按工作区隔离」的原则设计。通过面板和命令行工具的结合,可以方便地维护工作区的整洁度。更多信息和源码可查看 GitHub 仓库。