收纳间:DSH 临时脚本与日志管理器

前言

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 仓库。

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

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

Xiaoye