- Home
- Plugins
- Tools & Capabilities
- dsh-workspace-tidy
dsh-workspace-tidy
dengwei84/dsh-workspace-tidy
Workspace tidy-up plugin: moves stray temp files, render leftovers and generated scripts into a hidden .dsh folder at the end of each turn, keeping the workspace root clean without blocking or deleting anything.
Install
dsh plugin --profile web add github:dengwei84/dsh-workspace-tidyREADME
dsh-workspace-tidy
把工作区里生成的过程文件(脚本、临时文件、渲染残留)统一收进一个隐藏目录
.dsh\,保持工作区根目录干净。只移动、不删除,每次移动都写日志,可回滚。
工作方式
插件是 Host-only bundle,没有界面,安装后自动运行:
| 时机 | 触发事件 | 收什么 |
|---|---|---|
| 每轮回复结束 | agent/turn-stopping | 临时残留:*.tmp、*.log、*.bak、*.orig、~$*、.dsh-*、.dsh-office-* |
| 会话结束 | session/disposed | 上面全部 + 生成的脚本(*.py、*.ps1、*.sh、*.bat、*.cmd) |
| 会话创建 / 插件启动 / 每 10 分钟 | session/created、apply、interval | 上面全部;脚本只收 12 小时前的旧文件 |
| 任意时机 | 目录 | __pycache__\、.pytest_cache\ 整目录移入 .dsh\tmp\cache\ |
收纳位置:
.dsh\
├─ office\ .dsh-office-* 渲染残留
├─ tmp\ 临时文件、日志、日志备份
│ ├─ scripts\ 生成的脚本
│ └─ cache\ __pycache__ 等缓存目录
└─ tidy-log.jsonl 每次移动的 JSONL 记录
保护措施:
- 只处理 120 秒内没有写入的文件,正在写的文件不会被搬走。
- 根目录的目录不会被碰(
.dsh-office-*、__pycache__除外)。 - 符号链接跳过;
AGENTS.md、README.md、清理DSH临时文件.ps1、修复-DSH插件更新.ps1永不移动。 - 目标重名自动加
-2、-3,不覆盖已有文件。 - 默认
dryRun: false;改成true只记日志不落盘。
安装
从 GitHub 安装:
pnpm dsh plugin --profile <profile> add github:dengwei84/dsh-workspace-tidy
也可以装好后在插件市场里搜索「工作区自动整理」。
本地开发时用目录安装(链接形式,改完 index.js 在插件管理里关再开一次即可生效):
# 或在会话里让代理调用 plugin_manager install_bundle,target 传包目录的绝对路径
pnpm dsh plugin --profile <profile> add "D:\AI\DeepSeek\_过程\04-脚本工具\dsh-workspace-tidy"
卸载:
pnpm dsh plugin --profile <profile> remove dsh-workspace-tidy
验证
node "D:\AI\DeepSeek\_过程\04-脚本工具\dsh-workspace-tidy\test\verify.mjs"
脚本在临时目录里造 a.tmp、b.py、.dsh-office-t\ 和一个受保护脚本,手动触发
turn-stopping 与 session/disposed,检查三条事件各自收什么、日志是否 UTF-8、
路径是否绝对。预期输出 turn kept .py: yes、disposed .py moved: yes、
keep file kept: yes。
包内文件:
package.json:dsh.bundle.patch指向cordis.patch.ymlcordis.patch.yml:insert 一个 id 为workspace-tidy的 rowindex.js:插件本体locale\{en,zh}.json、icon.svg:插件列表里的名称、说明与图标
配置
在 profile 的 cordis.patch.yml 里给这个 row 加 config,或安装时由调用方传入:
- insert:
- id: workspace-tidy
name: '@local/dsh-workspace-tidy'
config:
target: .dsh
minAgeSeconds: 120
scriptMinAgeHours: 12
intervalMinutes: 10
dryRun: false
| 键 | 默认 | 说明 |
|---|---|---|
target | .dsh | 收纳目录,相对工作区根目录 |
junkPatterns | 见上表 | 每轮收的临时文件 glob |
officeDirs | .dsh-office-* | 整目录收的渲染残留 |
cacheDirs | __pycache__、.pytest_cache | 整目录收的缓存 |
scriptPatterns | .py/.ps1/.sh/.bat/.cmd | 会话结束才收的脚本 glob |
keep | AGENTS.md、README.md、清理DSH临时文件.ps1、修复-DSH插件更新.ps1 | 永不移动的文件名 |
minAgeSeconds | 120 | 文件至少静置多久才收 |
scriptMinAgeHours | 12 | 启动扫描时脚本至少多旧才收 |
dryRun | false | 只记录不移动 |
maxEntries | 500 | 每轮最多检查的根目录条目 |
intervalMinutes | 10 | 活跃会话的周期扫描间隔,0 关闭 |
回滚
.dsh\tidy-log.jsonl 每行是一次移动:
{"at":"2026-11-13T06:00:00.000Z","mode":"turn","root":"D:\\AI\\DeepSeek","dryRun":false,
"moves":[{"from":"D:\\AI\\DeepSeek\\out.tmp","to":"D:\\AI\\DeepSeek\\.dsh\\tmp\\out.tmp"}]}
把所有 to 移回 from 即可恢复;某一行只想撤销一部分时按 moves 逐条处理。
$lines = Get-Content ".dsh\tidy-log.jsonl" | ForEach-Object { $_ | ConvertFrom-Json }
foreach ($line in $lines) {
foreach ($m in $line.moves) {
if (Test-Path -LiteralPath $m.to) { Move-Item -LiteralPath $m.to -Destination $m.from -Force }
}
}
边界
- 不删除任何文件;清理
.dsh\由用户或收尾脚本决定。 - 不处理工作区外的路径;只扫描会话工作区根目录第一层。
- 与 Windows 计划任务
DSH-DeepSeek-Process-Tidy作用重叠,安装插件后应-Unregister该任务,避免两边同时搬同一批文件。
发布
想进 DSH 插件市场(dshmarket)看 PUBLISH.md:市场没有上传入口,
收录方式是公开仓库 + 向 awesome-dsh-plugin
提一个 data/plugins/<owner>__<repo>.yml(模板见 market-entry.yml)。
License
MIT,见 LICENSE。
Related plugins
archify (deepseek-harness)
tt-a1i/archify
WeKnora (dsh-weknora)
tencent/weknora
next-ai-draw-io (dsh-plugin)
dayuanjiang/next-ai-draw-io
weknora
tencent/weknora