X Twitter Poster
通过连接已登录 Chrome 浏览器,自动发送 X 推文,支持跨平台快捷键。
Windows 下自动管理下载路径,防止占用 C 盘,记录下载日志。
openclaw skills install @nihaoljx/download-guard命令、参数、文件名以原文为准
下载位置透明 · 文件好管理 · 减少 C 盘垃圾 · 路径不可用时宁可阻止也不走 C 盘
Platform: Windows (PowerShell 5.1+)
DOWNLOAD_ROOT 不可用,则阻止执行 —— 永不静默降级到 C 盘curl / wget / Invoke-WebRequest / requests.get / urllib.requestnpm install -g(非本地 npm install,不带 -g)pnpm add -g(v5.4)bun install -g(v5.4)pip install(不在活跃虚拟环境中 —— 首先检查 VIRTUAL_ENV 环境变量)uv pip install(v5.4 —— 同样适用虚拟环境规则)conda install / conda create / conda env updatecargo install(v5.4 —— 安装至 ~/.cargo/bin)go install(v5.4 —— 安装至 $GOPATH/bin)git clonehuggingface-cli download / modelscope download / ollama pulldocker pullwinget install / choco install / scoop install.py .js .ts .json .md 等)grep)npm install(写入当前目录的 node_modules)pip install -e .(可编辑安装)EXEMPT_PATHS 列表中$configPath = "$env:USERPROFILE\.workbuddy\skills\download-guard\config.md"
$content = Get-Content $configPath -Raw -ErrorAction SilentlyContinue
$setupDone = $content -match "SETUP_DONE:\s*true"
$downloadRoot = if ($content -match "DOWNLOAD_ROOT:\s*(.+)") { $Matches[1].Trim() } else { "" }如果 SETUP_DONE != true 或 DOWNLOAD_ROOT 为空 → 执行 首次设置。
配置完整性检查(v5.4):读取后需验证:
DOWNLOAD_ROOT 值非空且以盘符开头(如 D:\、F:\)SETUP_DONE 为 true 或 false(不能损坏)| 命令 | 类型 | 动作 |
|---|---|---|
| curl/wget/git clone/模型下载 | C(安全) | 进入步骤 2 |
pip install(非虚拟环境) | B2 | 检查 site-packages 位置 |
pip install --user(v5.4) | B2+ | 若 site-packages 在 C: 上 → 警告,并建议使用虚拟环境 |
npm install -g / pnpm add -g | B1 | 检查 prefix + PATH + 空格问题 |
cargo install / go install(v5.4) | B3 | 检查二进制目录是否在 PATH 中 |
| 修改 npm prefix / conda 环境 | B | 执行 PATH 关联性检查 |
类型 A = 缓存(可移动),类型 B = 安装目录(必须同步 PATH),类型 C = 文件存储(安全)。
详细说明请参见 [reference.md](reference.md)
下载前检查 DOWNLOAD_ROOT 中是否已存在同名文件:
$today = Get-Date -Format "yyyy-MM-dd"
$existing = Get-ChildItem "$downloadRoot\$today" -Recurse -Filter "*$FileNamePart*" -ErrorAction SilentlyContinue若发现 → 提示用户:
⚠️ 已存在相似文件:{path} ({size})。是否重新下载?[y/N]
DOWNLOAD_ROOT\YYYY-MM-DD\{sanitized-task-name}\{sanitized-task-name} 规则:
- 使用任务描述或包名,小写,空格替换为短横线
- 最大 40 字符,不含特殊字符
- 若无明确任务名称,使用 general
- 示例:F:\AI-Downloads\2026-05-26\install-pandas\
scripts/check-space.ps1** —— 新增功能包括:- 盘符是否存在检查(若盘符缺失 → 退出码 2 = 阻止,不降级到 C 盘)
- 路径可写性测试(创建并删除临时文件)
- 自动创建下载目录(如不存在)
- 任一检查失败 → 阻止执行,并显示清晰错误信息
- 与目标磁盘剩余空间对比
- 若大小 > 可用空间的 50% → 警告:此下载({X}GB)将占用 {Y}% 的可用空间于 {drive}:
- 若大小 > 剩余空间 → 阻止
[DOWNLOAD GUARD] 准备下载
文件 : {filename}
大小 : {已知大小 / 未知}
写入至 : {DOWNLOAD_ROOT}\{YYYY-MM-DD}\{task-name}\
目标盘 : {X} GB 可用 [{OK/WARN/BLOCK}]
C 盘 : {X} GB 可用 [{OK/WARN}]
路径可用 : [{OK / DRIVE_MISSING / NOT_WRITABLE}]
继续执行...| check-space 退出码 | 含义 | 动作 |
|---|---|---|
| 0 | 正常或警告 | 继续 |
| 1 | 空间过低 | 阻止,建议清理 |
| 2(v5.4) | 路径不可用 | 阻止 —— 永不降级到 C: |
Test-Path "{expected_path}"
(Get-Item "{expected_path}").Lengthscripts/log-download.ps1(含自动清理)[DOWNLOAD GUARD] 完成
文件 : {filename} ({size})
位置 : {full path}
已记录 : download-log.md若验证失败 → 警告:⚠️ 下载文件未在预期路径找到,请手动检查。
当 Agent 写入 config.md 时,必须满足以下要求:
DOWNLOAD_ROOT 和 SETUP_DONE 存在且有效DOWNLOAD_ROOT 前,保留旧值作为注释: # PREVIOUS: DOWNLOAD_ROOT: E:\old-path
DOWNLOAD_ROOT: F:\new-pathDOWNLOAD_ROOT 为空、SETUP_DONE 非 true 或 false),应提示用户重新配置markdown
Skill: download-guard
Version: 5.4.0
Chunk: 2/2
Get-PSDrive -PSProvider FileSystem |
Where-Object { $_.Free -gt 0 } |
Sort-Object Free -Descending |
ForEach-Object {
$tag = if ($_.Name -eq "C") { " [SYSTEM - NOT recommended]" } else { "" }
" {0}: {1} GB free{2}" -f $_.Name, [math]::Round($_.Free/1GB,1), $tag
}显示用户推荐的默认路径(空间最大的非 C 盘):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Download Guard · 首次配置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
磁盘扫描结果:
F: 132 GB 可用 ← 推荐(空间最大)
E: 97 GB 可用
D: 39 GB 可用
C: 58 GB 可用 [系统盘 - 不推荐]
推荐:F:\AI-Downloads
确认?或输入其他路径:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━{letter}:\AI-Downloads,完整路径 → 直接使用)SETUP_DONE: false → true,DOWNLOAD_ROOT: → 用户选择scan-tool-cache.ps1━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Download Guard · 环境就绪
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
下载目录 : {DOWNLOAD_ROOT}
可用空间 : {X} GB [{OK/WARN}]
路径可写 : {YES/NO}
C 盘 : {X} GB [{OK/WARN}]
npm cache : {path} [{OK/WARN}]
pip cache : {path} [{OK/WARN}]
npm prefix : {path} [IN PATH: {YES/NO}]
日志 : ~/.workbuddy/download-log.md
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如有 [WARN],说"帮我修复"即可。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━(详见执行协议中的步骤 2–4)
每天第一次触发时输出环境报告。实现方式:
# 在临时文件中记录上次报告日期
$lastReportFile = "$env:TEMP\download-guard-last-report.txt"
$today = Get-Date -Format "yyyy-MM-dd"
$lastReport = if (Test-Path $lastReportFile) { Get-Content $lastReportFile -Raw } else { "" }
if ($lastReport -ne $today) {
# 今日首次触发 — 显示环境报告
Set-Content -Path $lastReportFile -Value $today -Force
# ... 输出报告 ...
}报告格式:
[DOWNLOAD GUARD] 今日首次 · 环境快报
下载目录 : {DOWNLOAD_ROOT} ({X} GB 可用)
路径可用 : {OK / DRIVE_MISSING / NOT_WRITABLE}
C 盘 : {X} GB 可用 [{OK/WARN}]
工具缓存 : {all OK / N items on C: [WARN]}
日志条数 : {N} 条若路径不可用 → 立即提示用户更新配置或重新连接磁盘。
| 场景 | 行动 |
|---|---|
| 首次设置 | 必须询问 |
| 每日下载 | 不询问,仅告知 |
| 目标磁盘空间 < MIN_FREE_GB | 必须告知 — 建议切换 |
| DOWNLOAD_ROOT 所在磁盘丢失(v5.4) | 必须告知 — 阻塞直到修复 |
| DOWNLOAD_ROOT 不可写(v5.4) | 必须告知 — 阻塞直到修复 |
| 发现 C 盘缓存 | 必须告知 — 提供迁移选项 |
| 新磁盘出现 | 可选择告知 — 可选提醒 |
| 用户问“去哪儿?” | 回答 — 显示当前配置 |
规则:仅在环境变化时提示。日常操作 = 仅告知。
规则(v5.4):路径不可用 = 始终阻塞,绝不静默降级至 C 盘。
| 条件 | 动作 |
|---|---|
条目超过 LOG_RETENTION_DAYS 天 | 自动归档 |
归档文件总大小超过 LOG_ARCHIVE_MAX_MB | 删除最旧的归档 |
| 日志文件大于 5MB | 触发归档轮换 |
归档命名:~/.workbuddy/download-log-archive-{YYYY-MM-DD}.md
将 LOG_RETENTION_DAYS: 0 设置为禁用清理。
| 用户输入 | 动作 |
|---|---|
| "下载了什么" / "下载日志" / "download log" | 显示最近 20 条日志 |
| "缓存在哪" / "扫描缓存" / "scan cache" | 运行 scan-tool-cache.ps1 |
| "迁移缓存" / "migrate cache" | 运行 migrate-cache.ps1 |
| "磁盘空间" / "disk space" | 运行 check-space.ps1 |
| "刚才下的在哪" / "where's my download" | 显示最近一条日志的下载路径 |
| "下载到哪" / "根目录在哪" | 显示 DOWNLOAD_ROOT |
| "npm 用不了" / "command not found" | 检查 npm prefix 是否在 PATH 中 |
| "帮我修复" / "fix warnings" | 自动修复所有 [WARN] 项 |
| "修改下载目录" / "change download dir" | 更新 config.md 中的 DOWNLOAD_ROOT |
| "清理日志" / "clean log" | 触发日志归档清理 |
| "检查路径" / "check path"(v5.4) | 验证 DOWNLOAD_ROOT 是否存在、可写、磁盘健康 |
| "重置配置" / "reset config"(v5.4) | 设置 SETUP_DONE: false,重新运行设置流程 |
| "download guard version" / "下载版本"(v5.4) | 显示当前版本:5.4.0 |
| "卸载 download guard" / "uninstall download guard" | 显示清理说明(日志文件、归档、配置文件) |
关于路径类型、PATH 修复模板、配置参数、脚本说明及已知限制的完整信息,请参阅 [reference.md](reference.md)。
已收录 1 个 Skill