把 DSH 的下载、产物、缓存与临时文件重定向到用户指定目录(自动挑剩余空间最大的非 C 盘),向每个会话注入路径纪律提示词,并自带 disk_guard 工具做状态查看与清理——防止 C 盘被撑爆。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:kaka-crypto/dsh-disk-guard
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
把 DSH 生态的下载产物与缓存/临时文件从 C 盘重定向到用户指定目录(默认自动挑剩余空间最大的非 C 盘), 并向每个会话注入路径纪律提示词,让 agent 每次运行都遵守,防止 C 盘爆炸。
它做什么
| 能力 | 说明 |
|---|---|
| 指定下载目录 | downloadDir:下载/导出/安装包/产物/大文件统一落盘处 |
| 指定缓存目录 | cacheDir(临时 <cacheDir>/tmp、npm 缓存 <cacheDir>/npm) |
| 环境重定向 | 把 TMP/TEMP/TMPDIR → 临时目录、npm_config_cache → npm 缓存(对子进程 bash/pwsh 生效) |
| 持久化继承 | 同步追加进 $DSH_HOME/.env(dsh-launch-environment 的 user-env 层,每次启动自动继承) |
| 提示词注入 | 每个会话首条用户消息前自动插入"路径纪律"块(见下文【提示词】) |
| 自带工具 | disk_guard:status 看配置/盘剩余/目录体积;clean 清理过期缓存;set 改目录即时生效 |
| C 盘体检 | DSH home 落在 C 盘时启动告警,附一键迁移脚本 |
| 智能默认 | 不配目录时自动选剩余空间最大的非 C 盘(≥5GB),只有 C 盘时退避到 home 旁并告警 |
快速安装(推荐,一条命令)
# 在插件包目录(含 package.json 的那层)执行:
powershell -ExecutionPolicy Bypass -File scripts\install.ps1
# 可选参数:
# -ProfileDir <profile目录> 默认 $DSH_HOME\profiles\web
# -DownloadDir <目录> 指定下载目录(缺省自动挑盘)
# -CacheDir <目录> 指定缓存目录(缺省自动挑盘)
# -SkipPnpmInstall 跳过 pnpm install(你手动装时用)
安装脚本会:拷贝插件到 <profile>/vendor/dsh-disk-guard → 生成 $DSH_HOME/disk-guard.yaml
(以后改目录就改这个文件)→ 把它接进 profile 的 package.json(依赖 + bundles)→ pnpm install
→ 把 SKILL.md 装进 $DSH_HOME/skills/disk-guard/。
最后一步:重启 DSH(web GUI 或 headless)。 启动日志出现
[dsh-disk-guard] 就绪 ── 下载=E:\dsh\downloads | 缓存=E:\dsh\cache | 临时=E:\dsh\cache\tmp | home=E:\dsh-home
即安装成功;之后每个会话第一条用户消息前都会出现【磁盘守护 · 路径纪律】提示词。
手动安装(不想用脚本时)
- 构建:
cd dsh-disk-guard && npm install --no-save esbuild && node build.mjs(产出lib/index.js) - 拷贝整个目录到
<profile>/vendor/dsh-disk-guard - 编辑
<profile>/package.json:dependencies 加"dsh-disk-guard": "file:vendor\\dsh-disk-guard";dsh.profile.bundles数组加"dsh-disk-guard" - 在 profile 目录执行
pnpm install - 可选:生成
$DSH_HOME/disk-guard.yaml(参考config.example.yaml),并在<profile>/vendor/dsh-disk-guard/cordis.patch.yml的 config 里加一行configFile: '~/.dsh/disk-guard.yaml'(注意:patch 里的~指向用户主目录,不是 DSH home) - 重启 DSH
配置
三处可配,优先级:外置 configFile > patch 行 config > 默认值。
- 外置 YAML(推荐,唯一推荐用户常改的文件):
$DSH_HOME/disk-guard.yaml
downloadDir: 'E:\\dsh\\downloads'
cacheDir: 'E:\\dsh\\cache'
# tempDir: '' # 默认 <cacheDir>/tmp
# npmCacheDir: '' # 默认 <cacheDir>/npm
# redirectEnv: true # 设置 TMP/TEMP/TMPDIR/npm_config_cache
# writeUserEnvFile: true # 同步追加 $DSH_HOME/.env
# injectPrompt: true # 会话注入提示词
# cleanupOnBoot: false # 启动清理过期临时文件
# maxAgeDays: 7
# warnC: true
- patch 行 config:
cordis.patch.yml里本插件的config:段(重装会被脚本覆盖)。 - 自动兜底:什么都不配 → 挑剩余空间最大的非 C 盘(如
E:\dsh\downloads、E:\dsh\cache)。
路径支持 ~(用户主目录)与 %VAR% 展开;相对路径以 DSH home 为基准。
工具:disk_guard
会话中随时可用(也可直接命令行调):
disk_guard {action:"status"}:下载/缓存/临时/npm 目录 + 各盘剩余空间 + 目录体积 + home 是否在 C 盘disk_guard {action:"clean", scope:"temp"|"npm"|"all"}:清理超过olderThanDays(默认 maxAgeDays)的文件scope:"downloads"需要force:true(下载产物属用户数据,二次确认)- 清理只发生在插件自己管理的目录内,绝不动目录外任何文件
disk_guard {action:"set", downloadDir:"E:\\dsh\\dl", cacheDir:"E:\\dsh\\cache"}:写入外置 configFile 并即时生效(需已配置 configFile)
提示词(你要的那段)
插件在每个会话首条用户消息前自动注入(占位符替换为实际路径);想整体自定义,把文本存到
$DSH_HOME/disk-guard-prompt.md 即可。
【磁盘守护 dsh-disk-guard · 路径纪律】(本条为插件注入,请严格遵守)
1. 下载目录(默认下载/导出/安装包/产物/大文件保存处):<downloadDir>
2. 缓存目录:<cacheDir>
- 临时文件:<tempDir>
- npm 等包缓存:<npmCacheDir>
3. 红线:禁止把任何大文件、下载、缓存或临时文件写到 C 盘
(包括 %TEMP%、C:\Users\*\Temp、C:\Windows\Temp、用户目录、桌面、文档)。
4. 用户说"下载/存到/缓存"却没给路径时,一律按第 1、2 条执行;
中间产物与临时文件放临时目录,用完后随手清理。
5. 需要看磁盘占用/清理过期缓存时,调用工具 disk_guard(status / clean),不要瞎猜。
不装插件也能用的独立提示词(粘贴到任意 agent 会话开头即可,首次运行会让 agent 向你确认目录):
【磁盘纪律】你运行在 Windows 上,必须遵守以下路径规则(首次执行先向用户确认下载目录与缓存目录,
并把确认结果写进工作区 .dsh-disk-policy.yaml 供以后复用):
1. 所有下载、导出、安装包、产物、大文件保存到用户指定的下载目录(推荐非 C 盘,如 E:\dsh\downloads)。
2. 所有临时文件、缓存、中间产物放用户指定的缓存目录(如 E:\dsh\cache\tmp),用后即清。
3. 禁止向 C 盘写入任何大文件/缓存/临时文件(%TEMP%、C:\Users\*\Temp、C:\Windows\Temp、桌面、文档、用户目录)。
4. 用户未指定路径时默认走 1、2 条;被问磁盘占用时给出目录清单与实际占用,不要凭空回答。
5. 每次会话结束前检查:是否有本可删的大临时文件残留,有就清理并汇报。
迁移:DSH home 在 C 盘
若 $DSH_HOME 未设置,DSH 会把会话/附件/任务板/皮肤缓存全写到 C:\Users\<user>\.dsh。
运行:
powershell -ExecutionPolicy Bypass -File scripts\migrate-c-drive.ps1 -MoveData -DeleteOld
脚本会:选一个非 C 盘(默认 <最大盘>:\dsh-home)→ setx DSH_HOME <新家> → 用 robocopy 把旧
~/.dsh 内容拷过去 → 校验后(-DeleteOld)删除 C 盘旧数据。先退出 DSH 再迁移;不确定时只加
-MoveData 不删旧,确认无误再补 -DeleteOld。
卸载
- 编辑
<profile>/package.json:删依赖与 bundles 里的dsh-disk-guard <profile>下pnpm install- 删除
<profile>/vendor/dsh-disk-guard、$DSH_HOME/disk-guard.yaml、$DSH_HOME/skills/disk-guard - 想还原环境变量:删掉
$DSH_HOME/.env里 dsh-disk-guard 追加的那几行
设计说明(为什么这么写)
- 运行期零第三方依赖:yaml 构建时打进 bundle,源码只用 Node 内置 API。
- 路径解析确定化:
~/%VAR%展开、相对路径锚定 DSH home,避免不同启动方式结果不一致。 - 清理有边界:
removeOldFiles只接受插件自己解析出的目录,删除仅限超过阈值天数的文件。 - 注入一次、不刷屏:按会话 id 去重,只在首条用户消息前注入,子代理会话跳过。
- 失败不阻断:插件任何一步出错只记日志,不影响 DSH 其他功能。
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 33572
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 5130
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1136
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
gitroomhq/postiz-agent#dsh-postiz★ 514
通过 MCP 将 DeepSeek Harness 连接到 Postiz:列出已连接的社交媒体渠道、获取各平台发帖规则,并向 X、LinkedIn、Instagram、Facebook、Threads、TikTok、YouTube、Reddit、Bluesky、Mastodon、Discord、Slack、Telegram 等平台排期、存草稿或发布帖子;附带 postiz 工作流技能。
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 508
面向 DeepSeek Harness 的本地 IMAP 发票下载、OCR 识别、归档与 Excel 报销汇总。
anysearch-team/anysearch-dsh★ 459
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。