← 返回
未分类

storage-analyzer-windows

【做什么】纯 Windows 只读存储分析 — 扫描 12+ 组目标(含 Installer/ProgramData/回收站)→ 三灯分级(🟢可自动清/🟡需判断/🔴建议卸载)→ 交互式 HTML 报告 + 本地服务一键删。 【何时用】用户抱怨磁盘空间不足、要求清理/分析/查看空间占用、想知道什么东西吃硬盘。 【触发词】磁盘满了/C盘满了/D盘满了/空间不够/清理空间/清理磁盘/清理C盘/占空间/ 存储分析/磁盘分析/看一下存储/电脑空间/storage analysis/disk cleanup/清缓存/ 哪些东西占地方/看下内存/内存满了。 【反触发】用户明确指运行内存/RAM(如"哪个进程吃内存/内存占用高")→ 那是 RAM 不是存储,不触发本 skill。 【纯 Windows·零 macOS·零第三方依赖】Python 3.10+ 标准库即可。 node_name: 存储分析(Windows)
【做什么】纯 Windows 只读存储分析 — 扫描 12+ 组目标(含 Installer/ProgramData/回收站)→ 三灯分级(🟢可自动清/🟡需判断/🔴建议卸载)→ 交互式 HTML 报告 + 本地服务一键删。 【何时用】用户抱怨磁盘空间不足、要求清理/分析/查看空间占用、想知道什么东西吃硬盘。 【触发词】磁盘满了/C盘满了/D盘满了/空间不够/清理空间/清理磁盘/清理C盘/占空间/ 存储分析/磁盘分析/看一下存储/电脑空间/storage analysis/disk cleanup/清缓存/ 哪些东西占地方/看下内存/内存满了。 【反触发】用户明确指运行内存/RAM(如"哪个进程吃内存/内存占用高")→ 那是 RAM 不是存储,不触发本 skill。 【纯 Windows·零 macOS·零第三方依赖】Python 3.10+ 标准库即可。 node_name: 存储分析(Windows)
GARYLOOOOP
未分类 community v1.0.1 2 版本 97435.9 Key: 无需
★ 0
Stars
📥 38
下载
💾 0
安装
2
版本
#latest

概述

Storage Analyzer Windows

纯 Windows 只读存储分析,交互式 HTML 报告 + 一键清理。

阶段谁执行做什么产出
----------------------------
Step 1-2scan.py 脚本只读扫描 12 组目标,算大小%TEMP%\storage_scan.json
Step 3Agent (你)读参考→探查→三灯分级→写 JSON%TEMP%\storage_analysis.json
Step 4server.py 脚本启动本地服务 → 交互式网页http://127.0.0.1:端口/
Step 5Agent (你)用 preview_url 打开 + 对话给摘要浏览器预览 + 文字结论

> 速览:用户说"磁盘满了" → 跑 scan.py --quick(0.3s) 看概况 → 需要详情再跑全量(9s) → 按附录A模板写分析JSON → server.py 启动交互式服务 → 自动用 preview_url 打开 → 给用户一句话摘要。全程只读扫描,交互式网页支持一键清理。


约束规则

铁律

  • 全程只读扫描。 只能跑 os.scandir / shutil.disk_usage / 列目录。
  • 删除命令只展示,不执行。 报告里的清理命令供用户在终端确认后运行。

即使用户在对话里说"帮我删",也要先停下确认,不要直接代跑。

  • 系统目录保护。 C:\Windows 除了 Installer / Temp / SoftwareDistribution

之外不扫描不操作。

  • 回收站警告。 清空回收站前必须明确告知空间释放量。
  • 长路径处理。 Windows 路径 >260 字符时使用 \\?\ 前缀。

⏸️ 确认门

Step 3 完成后,必须暂停,向用户展示:

  1. Top 5 摘要(表格:排名/名称/大小/分级/一句话说明)
  2. 三灯汇总(🟢 X 项约 Y GB / 🟡 X 项约 Y GB / 🔴 X 项约 Y GB)
  3. 问用户:"分级结果如上,是否继续生成报告?还是需要调整?"

用户同意后才进入 Step 4。 如果用户要求调整,只调用户指定的项,不要推翻全部分级。

异常处理

异常场景处理方式
--------------------
Python 未安装提示用户安装 Python 3.10+:winget install python3 或从 python.org 下载。不要用 python3 命令,Windows 上是 pythonpy -3
scan.py 输出为空检查 %TEMP%\storage_scan.json 是否存在且非空。为空则重新扫描并加 2>&1 捕获 stderr 排查错误。
扫描结果全 0(空盘)报告直接给摘要"磁盘基本为空,无需清理"。不跑 Step 3 分析。
某个 target 目录不存在跳过,不给 denied。如 C:\Windows\Installer 在某些精简版 Windows 上不存在。
server.py 端口被占用server.py 使用端口 0(随机),不会冲突。如遇异常,检查防火墙/杀毒软件是否拦截 127.0.0.1 本地回环。仅在用户要求服务模式时使用。
build_report.py 写入桌面失败检查桌面路径是否可写,如被 OneDrive 同步占用则改写到 %USERPROFILE%%TEMP%
浏览器打不开手动复制终端输出的 URL 到浏览器。或用 --no-browser 参数跳过自动打开。
recycle_bin 扫描为空原因:普通用户无权读 C:\$Recycle.Bin。给提示:"回收站大小无法直接读取,请右键桌面回收站查看属性"。
磁盘接近满(<1GB 可用)优先使用 --quick 模式避免扫描写出大量 JSON 占用最后空间。写 analysis JSON 时确认 %TEMP% 有足够空间。
权限拒绝(denied)扫描结果中 denied 标注的目录,在报告中列出并说明"可能遗漏体量"。不要尝试 runas 提权。

执行流程

Step 1 快速扫描(可选,0.5s 内)

python scripts/scan.py --quick > %TEMP%\storage_scan.json

仅扫描一级子目录大小(跳过递归),大文件自动聚合显示。

适用场景:快速判断"有没有大问题"。

Step 2 全量扫描

python scripts/scan.py > %TEMP%\storage_scan.json

扫描 12 组目标(详见 references/windows.md),耗时约 9-15s(SSD)。

读不到的目录标 denied

Step 3 分析与分级

先读 references/windows.md 了解布局规则,再读扫描 JSON。

附录A 的 6 条检查清单逐条执行,按 附录B 的模板写出 analysis JSON。

核心决策规则(详见附录A):

  • 🟢 可自动清理 — 纯缓存/临时文件/可再生,正例:pip Cache,反例:node_modules
  • 🟡 需人工判断 — 含用户数据或需判断成本,正例:WeChat Files,反例:Windows\System32
  • 🔴 建议卸载 — 大应用/重复安装,正例:不再用的 MobileAppEngine,反例:C:\Windows
  • 其他 → 不展示(归蓝色)

Step 4 启动交互式服务并自动打开

使用 PowerShell Start-Process 以独立进程启动(不受 Bash 超时影响):

Start-Process -FilePath "python" -ArgumentList "scripts/server.py","%TEMP%\storage_analysis.json","--no-browser","--port-file","%TEMP%\storage_server_url.txt" -WindowStyle Hidden

启动后:

  1. 等待 2 秒读取 %TEMP%\storage_server_url.txt 获取 URL
  2. 健康检查 GET /health 确认服务正常
  3. Start-Process 在用户默认浏览器中打开 URL(不要用 preview_url,内嵌浏览器无法正确执行交互式功能)
  4. 同时可用 preview_url 在内嵌面板中预览(仅查看,一键清理功能需在真实浏览器中使用)

这是默认模式,交互式网页支持:

  • 🟢 一键清理全部 — 确认面板 + 逐项串行删除 + 进度反馈
  • 🟢 单项移到废纸篓 / 直接删除
  • 🟡 在资源管理器打开 / 安全子路径移废纸篓
  • 🔴 在资源管理器打开(去卸载)
  • 折叠卡片、锚点导航、命令复制

可选:静态报告模式(仅查看,不能操作删除):

python scripts/build_report.py %TEMP%\storage_analysis.json %USERPROFILE%\Desktop\storage-report.html

纯静态只读 HTML 文件,不含删除功能。仅在用户明确要求静态报告时使用。

Step 5 摘要总结

报告打开后,给一段结论先行的摘要:总可释放估算、最该先清的 2-3 项、风险最高的一项。细节让用户看网页。


附录A:分析检查清单

逐条执行,每完成一条在脑中打勾。

  • [ ] 1. 挑 Top 5:按 size_kb 排序全部 groups 条目,取前 5,判定类型标签。

标签按优先级从高到低匹配,命中即停止,后面的不再考虑:

| 优先级 | 标签 | 释义 | 判定依据 |

|--------|------|------|----------|

| 1 | 系统文件 | 操作系统运行依赖的核心文件与组件仓库,误删可能导致系统不稳定、功能异常或无法启动 | C:\Windows 下除 Temp/SoftwareDistribution 外的全部子目录, C:\Boot, EFI 分区, pagefile.sys, hiberfil.sys |

| 2 | 应用程序文件 | 应用程序安装目录下的全部文件(含 exe/dll/资源/配置),删除将导致对应应用无法运行 | C:\Program Files\, C:\Program Files (x86)\, %LOCALAPPDATA%\Programs\* 下的应用目录 |

| 3 | 虚拟机镜像 | 虚拟机/模拟器的磁盘镜像文件,删除将导致虚拟机数据完全丢失且不可恢复 | EmulatorSdk 镜像, WSL vhdx, Hyper-V 虚拟硬盘, VMware .vmdk, VirtualBox .vdi |

| 4 | 应用数据 | 应用产生的不可再生或具有持久价值的用户个人数据,通常位于 AppData 及其子目录 | WPS 模板, 微信聊天记录, 钉钉消息, 邮箱本地数据 |

| 5 | 应用缓存 | 面向最终用户的应用产生的可再生临时文件,删除不影响功能、不丢用户数据 | 浏览器 Cache, 缩略图缓存, 微信/QQ 图片缓存, %TEMP%\*, Office 最近文件索引 |

| 6 | 开发缓存 | 包管理器/构建工具/IDE 产生的可再生中间文件,删除后可通过重新下载或构建恢复 | pip Cache, .npm, .gradle, .m2/repository, Cargo target/, Yarn cache, NuGet packages |

| 7 | 用户文件 | 用户主动创建/编辑/保存的个人文档、工程文件、自建图片等 | Desktop, Documents, Pictures, WorkBuddy\* 项目目录 |

| 8 | 媒体内容 | 从网络下载或应用缓存的消费型音视频文件,常见于 Downloads/Videos/Music 及各 App 离线目录 | Downloads 里的 .mp4/.mkv/.avi, App 离线视频缓存, Music\ |

| 9 | 下载内容 | Downloads 目录下用户通过浏览器/下载器获取后未整理的文件(安装包、压缩包、文档等) | Downloads\.exe, Downloads\.msi, Downloads\*.zip |

| 10 | 回收站 | Windows 回收站内容 | C:\$Recycle.Bin, 各盘符 \$Recycle.Bin |

| 11 | 其他 | 以上均不匹配的兜底分类 | — |

> 互斥规则:按优先级 1→11 依次匹配,命中即停。例如:Downloads 下的安装包优先匹配 9(下载内容),而非 8(媒体内容);%TEMP% 下的编译中间文件优先匹配 6(开发缓存),而非 5(应用缓存)。

  • [ ] 2. 探查神秘大目录:对名称含 UUID/GUID/SSID 的目录、大小 >1GB 的

ProgramData 子目录、不明用途的隐藏目录 → ls 查看内部结构,查出归属。

例:kingsoft/wps_international/addons 实为国际版 WPS 的冗余插件。

  • [ ] 3. 三灯分类(只分"存在清理决策"的项,正常应用/系统文件归蓝色不展示):

🟢 可自动清理 — 纯缓存/临时文件/安装包残留/可再生不丢用户数据

  • ✅ 正例:浏览器 Cache%TEMP%\*--updater 目录pip Cache(开发缓存可再生)、IntelliJ IDEA caches
  • ❌ 反例:node_modules(项目依赖,删了项目跑不了)、AppData\Roaming\Microsoft(Office 设置不可再生)、微信聊天记录(用户数据)
  • 必填 trash_paths[]commands[{label,cmd}]kill_processes[]
  • ⚠️ trash_paths 不能为空,漏了按钮就不出现。

🟡 需人工判断 — 含用户数据或有判断成本

  • ✅ 正例:WeChat Files(聊天记录含重要数据)、Downloads 文件夹(可能有重要文件未整理)、WPS 模板(含自定义)、VMware 虚拟机镜像(大小巨大但可能还在用)
  • ❌ 反例:C:\Windows\Installer 不能手删(用 DISM 清理)、C:\Windows\WinSxS 不能手删(系统组件仓库)、C:\Windows\System32 不能手删
  • 必填 content_profilewhy_manualdisposalrisk
  • 有核实过的安全子路径时 → trash_paths(🟡 只能移废纸篓,永不给 rm)。
  • 目录是 App 内部格式 → open_note 字段说明。
  • ⚠️ 口吻中性如产品说明,不写"我发现/提醒注意"。

🔴 建议卸载(别手删) — 大应用/重复安装/想卸载的项

  • ✅ 正例:不再用的 MobileAppEngine(7.6GB)、EdrawSoft(1.2GB)、Autodesk(2GB+)
  • ❌ 反例:C:\Windows(操作系统本身)、Microsoft Office(如果还在用)、dotnet(系统运行时依赖)、Git(开发必备工具)
  • 必填 why_keepindirect_release(具体卸载步骤,可照做不是空话)、app_paths[]
  • 不给删除按钮,只给"在资源管理器打开(去卸载)"。
  • [ ] 4. 数量检查:green+yellow+red 的总信息量应「一眼能看完」。

如果某级超过 10 项,挑最重要的列,其余合并到 summary。

  • [ ] 5. 大小字段规范:用"约 14 GB""合计约 8.6 GB"格式。

"约"已表示估算,不要再加"(估算)"。

  • [ ] 6. 按附录B模板写出完整 analysis JSON。

tier_stats 的 green/yellow/red 必须是可解析的 GB 数字开头(如"约 27.8 GB")。


附录B:analysis JSON 模板(照此结构写)

{
  "generated_at": "2026-06-03 17:00:00",
  "scan_seconds": 9.3,
  "system": {  /* 从 scan.json 的 system 字段直接复制 */ },
  "top5": [
    {"rank": 1, "tier": "red", "size": "约 7.6 GB", "type": "应用程序文件",
     "name": "MobileAppEngine", "path": "C:\\Program Files\\MobileAppEngine",
     "note": "华为手机助手模拟器,EmulatorSdk 占 7.4 GB"}
  ],
  "green": [
    {
      "name": "WorkBuddy 桌面端更新缓存",
      "path": "C:\\Users\\xxx\\AppData\\Local\\@genieworkbuddy-desktop-updater",
      "size_estimate": "约 450 MB",
      "kill_processes": [],
      "trash_paths": ["C:\\Users\\xxx\\AppData\\Local\\@genieworkbuddy-desktop-updater"],
      "commands": [
        {"label": "PowerShell 移入回收站",
         "cmd": "Remove-Item -Path \"$env:LOCALAPPDATA\\@genieworkbuddy-desktop-updater\" -Recurse -Force"}
      ]
    }
  ],
  "yellow": [
    {
      "name": "WPS 双版本插件/模板",
      "path": "C:\\Users\\xxx\\AppData\\Roaming\\kingsoft",
      "size": "约 4.4 GB",
      "content_profile": "WPS 中文版+国际版数据。wps/addons 2.2GB,wps_international/addons 1.9GB。",
      "why_manual": "涉及两个版本的共用数据,无法自动判断主要用哪版。",
      "disposal": "只用中文版:wps_international/addons 1.9GB 可安全删除。",
      "risk": "删除 wps_international 后国际版 WPS 启动时会重新下载插件。",
      "trash_paths": ["C:\\Users\\xxx\\AppData\\Roaming\\kingsoft\\wps_international"]
    }
  ],
  "red": [
    {
      "name": "MobileAppEngine(华为手机助手)",
      "path": "C:\\Program Files\\MobileAppEngine",
      "size": "约 7.6 GB",
      "why_keep": "7.4GB 为 EmulatorSdk Android 模拟器镜像。如果不用华为手机连电脑可卸载。",
      "indirect_release": "设置→应用→已安装的应用→搜索 MobileAppEngine→卸载。释放约 7.6GB。",
      "app_paths": ["C:\\Program Files\\MobileAppEngine"],
      "auto_reclaim": "否,需手动卸载"
    }
  ],
  "denied": [],
  "summary": {
    "overview": "C 盘仅剩 4.3GB,最大占用是华为手机助手 7.6GB + WPS 数据 4.4GB。可立刻释放约 1.8GB。",
    "tier_stats": {"green": "约 1.8 GB", "yellow": "约 15.0 GB", "red": "约 12.4 GB"},
    "priority": [
      "最优先:清除更新缓存 5 项约 1.8GB,零风险",
      "其次:清理 WPS 国际版插件 1.9GB"
    ],
    "long_term": [
      "启用存储感知:设置→系统→存储→存储感知→开",
      "定期 DISM:DISM /Online /Cleanup-Image /StartComponentCleanup",
      "大文件迁移至 D 盘:D 盘还有 218GB 可用"
    ]
  }
}

注意事项

  • system 字段直接复制 scan.json 的 system,不要改动结构。
  • trash_paths 必须是真实存在的绝对路径数组,不能为空数组。
  • 🟡 项的 trash_paths 只放核实过安全可移的子路径(如旧备份目录),不是整个 path
  • 🟡 项如果没有安全子路径,trash_paths 留空或不写。
  • commands[].cmd 写完整的可执行命令,用户可以直接复制到 PowerShell。

依赖

  • Python 3.10+ (纯标准库,零 pip install)
  • Windows 10 / 11(Windows 7 未测试)

平台状态

  • Windows 10/11:完整实现并实测(扫描/报告/一键删除全验证)。
  • 新增覆盖原版盲区:Installer、ProgramData、回收站、WinSxS、Windows Temp。

与原版 storage-analyzer 的差异

维度原版Windows 版
-----------------------
平台macOS + WindowsWindows only
扫描目标7 组 (Win)12 组 + dev_caches
macOS 代码~150 行0 行
盲区~65 GB已覆盖
--quick 模式
--cache 缓存
健康检查GET /health
长路径处理\\?\ 前缀
回收站查询Windows API
hiberfil/pagefile未检测已检测

长期建议(写入报告 long_term)

  • Windows 自带:cleanmgr(磁盘清理)、存储感知(设置→系统→存储)
  • DISM 清理:DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase
  • 第三方工具:WizTree(免费)、SpaceSniffer(免费)、TreeSize
  • 大文件迁移至 D/E 盘;休眠关闭:powercfg /hibernate off
  • 聊天软件缓存:微信/企微/钉钉定期在 App 内清理

更新日志

v2.0 — Windows-Native 重构 (2026-06-03)

基于原版 storage-analyzer (KKKKhazix/khazix-skills) 的完整逆向分析创建纯 Windows 实现。

修改动机

  • 原版 307 行 scan.py 中 ~150 行是 macOS-only 逻辑,Windows 用户无需携带
  • 原版扫描盲区 ~65GB:Installer(31.5G) / ProgramData(4.7G) / 回收站(3.6G) / WinSxS(11.6G)
  • 3 个 Windows 特有 bug:stdout 缓冲、SHFileOperationW 长路径、后台服务无存活检测

改动清单

类型项目优势
------------------
新增5 个系统级扫描目标(Installer/ProgramData/回收站/WinSxS/Windows Temp)扫描覆盖率从 ~35% 提升到 ~90%
新增--quick 模式(0.2s 一级扫描 + 大文件自动聚合)首轮反馈从 14s 降到 0.2s,用户零等待
新增--cache 24h 缓存 + COMPUTERNAME 自动识别二次扫描 <0.1s,消除重复扫描
新增GET /health 健康检查 + 启动自检服务存活可感知,启动失败立刻报错
新增--min-mb 自定义阈值参数大文件优先,用户可控粒度
新增hiberfil.sys / pagefile.sys 系统文件检测休眠/虚拟内存占用可见,不再遗漏
删减砍掉全部 macOS 代码(~150 行)代码量 -50%,Windows 专精,维护成本降低
修改Frontmatter 四段式结构化(做什么/何时用/触发词/反触发)Agent 触发准确率提升,误触发减少
修改Step 3 6 条可勾选检查清单 + ⏸️ 确认门防止 Agent 跳过用户审查,分级结果必须用户同意
修改9 场景异常处理表边界条件全覆盖(Python 未安装/空扫描/磁盘满/权限拒绝等)
修改11 种标签体系(含优先级链 + 互斥规则 + 正反例)分类准确率提升,名称去歧义(应用本体→应用程序文件)
修改附录 B 内联有效 JSON 模板(替代原版伪 JSON schema)Agent 零推理写分析 JSON,照抄结构即可
优化Quick 模式 46 项→7 项(文件级自动聚合)用户一屏看完,不再被 40 个 .msp 淹没
优化约束规则一章合并(铁律+确认门+异常处理)认知负荷 -60%,规则一次读完
优化Agent/Script 职责对照表一眼知谁负责哪个阶段
修复os.path.isfile()os.path.exists()(pagefile 检测)系统文件不再漏检
修复COMPUTERNAMEsocket.gethostname() fallback缓存文件名不再显示 "unknown"
修复行缓冲 → sys.stdout.reconfigure(line_buffering=True)后台启动输出即时可见
修复\\?\ 长路径前缀 + FOF_NOERRORUI260 字符路径不丢失,错误弹窗抑制

原版 vs Windows 版性能

指标原版Windows 版
-----------------------
Quick 扫描0.2s
全量扫描14.2s9.3s
二次扫描(缓存命中)14.2s<0.1s
扫描覆盖率~35%~90%
Quick 模式 Top 条目(无此模式)7 项(聚合后)
macOS 代码150 行0 行

v2.1 — HTML 空白页修复 (2026-06-05)

修复报告 HTML 在浏览器中显示空白的致命问题。根因:JSON 数据注入 HTML 时,3 个崩溃点会导致整个 注入JSON 中路径含 字符串浏览器提前关闭 <\/script\u2028\u2028\u2029\u2029,彻底消除 JS 解析崩溃build_report.py新增_warnings 注入数据将结构验证警告传入模板,页面也能显示诊断提示report_template.html修复amber→yellow / green_items→green 兼容Agent 写 amber 不再导致数据丢失report_template.html修复逐项字段补全green/yellow/red 每一项缺失的字段自动填安全默认值(如 content_profile → "暂无内容画像"),不再显示 undefined 或空白report_template.html新增mount 函数结构诊断检测 green/yellow/red 全空、缺少 size_estimate、缺少 content_profile 等问题,页面顶部显示警告横幅report_template.html新增build_report 警告透传_warnings 数组中的验证警告也会在页面中显示report_template.html修复catch 块增加调试信息JS 解析失败时不再空白,显示错误详情和原始数据片段server.py修复三重安全转义(同 build_report.py)服务模式下也不会因 / \u2028 崩溃server.py修复amber→yellow 兼容load() 函数自动将 amber 键重命名为 yellow

测试验证

测试场景结果
---------------
标准 JSON(完全匹配附录B模板)✅ 正常渲染
不完美 JSON(amber 代替 yellow + red 缺必填字段)✅ 有警告横幅但正常渲染,数据不丢失
极端最小 JSON(只有 system 字段,无 green/yellow/red)✅ 优雅降级,页面显示警告而非空白
\u2028/\u2029 的 JSON✅ 正确转义为 \u2028/\u2029,不再触发 JS 语法错误

v2.2 — 一键清理绿色项(确认面板 + 串行删除 + 进度反馈) (2026-06-05)

在交互式网页中增加"一键清理"功能:确认面板让用户勾选要清理的绿色项,确认后逐项串行删除并实时显示进度,失败项跳过继续,最后显示结果摘要。

交互流程

点击"一键清理全部 N 项 (约 X GB)" → 弹出确认面板
  → 面板列出所有绿色项(复选框 + 名称 + 路径 + 大小)
  → 用户勾选/取消 → 点击"确认移到废纸篓"或"直接删除"
    → 逐项串行调用 /action API
      → 每完成一项:更新进度条 + 状态标记(✓/✗)
      → 某项失败?跳过继续,记录错误
    → 全部完成:显示结果摘要(成功 N 项 / 失败 M 项 + 失败原因)
  → 用户点"关闭"

改动清单

文件类型项目说明
------------------------
report_template.html新增确认面板 UI(modal)半透明遮罩 + 居中弹窗 + 复选框列表 + 全选/取消全选
report_template.html新增openBatchModal()收集可清理绿色项,构建确认面板列表
report_template.html新增executeBatchClean(mode)async 串行逐项删除,实时更新进度条 + 状态标记
report_template.html新增进度条 + 结果摘要进度条动画 + 成功(绿)/部分成功(黄)/失败(红) 三色结果面板
report_template.html改进绿色区醒目大按钮btn-sm 改为 btn-lg,显示"🗑 一键清理全部 N 项 (约 X GB)"
report_template.html新增逐项状态 CSSbatch-cleaning(清理中)、batch-ok(✓)、batch-fail(✗) 三种卡片状态
report_template.html新增点击遮罩关闭面板点击 modal 外部遮罩区域自动关闭
report_template.html改进"直接删除"选项默认隐藏需手动勾选"显示直接删除选项"才出现,防止误操作
report_template.html新增静态模式提示静态报告模式下点一键清理,提示用户使用 server.py 启动服务模式

关键设计决策

  1. 串行而非并行删除:避免并发请求导致文件锁冲突或服务端过载
  2. 失败跳过而非中止:某项权限不足时跳过继续,最后汇总失败列表
  3. 默认只显示"移到废纸篓":安全可逆;"直接删除"需额外勾选才可见
  4. 确认面板可取消勾选:用户可以精确选择要清理哪些项,而非全有或全无

v2.2.1 — 修复 SHFileOperationW 类型错误 (2026-06-05)

修复"一键清理"全部失败的 bug。根因:_to_wide_null_terminated() 返回 bytesencode("utf-16-le")),但 SHFILEOPSTRUCTW.pFrom 声明为 wintypes.LPCWSTR,ctypes 期望 str 而非 bytes,导致每次移到废纸篓都报错 unicode string or integer address expected instead of bytes instance

修复

  • _to_wide_null_terminated() 返回 str 而非 bytes
  • 注释同步更新:说明 ctypes 会自动将 Python str 转为 UTF-16
  • 移除冗余的 import ctypes 语句(该函数不再需要 ctypes)
  • move_to_trash() 增加错误码 120/124 回退逻辑:系统保护目录(如 C:\Windows\SoftwareDistribution\Download)或含被占用文件的目录无法移到回收站时,自动回退到 hard_delete(),避免清理失败
  • ALLOWED_ROOTS 新增 C:\Program FilesC:\Program Files (x86):修复 🔴 项"在资源管理器打开"时 L7 root boundary 拦截(如 C:\Program Files\Autodesk
  • report_template.html 修复 onclick 属性中 Windows 路径反斜杠丢失:esc(p).replace(/'/g,"\\'") 增加 .replace(/\\/g,'\\\\'),防止 JS 字符串中 \P 被当作无效转义序列吞掉反斜杠(如 C:\ProgramData\Autodesk 变成 C:ProgramDataAutodesk

v2.3 — 设计级修复:JSON 解析方式 + 服务进程分离 (2026-06-05)

修复交互式网页始终显示为"静态模式"(DELETE = null)的根因问题,涉及两个独立 bug。

Bug 1:内联 JSON 赋值导致 JS 解析崩溃

因素旧设计新设计
----------------------
数据注入方式DATA = {json};(直接赋值) 转义
build_report.py简化转义逻辑同上
SKILL.md更新Step 4改用 Start-Process 启动 + 默认浏览器打开

版本历史

共 2 个版本

  • v1.0.1 1. 交互式网页一键清理按钮消失(JSON 当 JS 赋值,解析崩溃致 DELETE 失效) 2. 服务进程 2 分钟后自动退出(Bash 后台超时杀进程) 3. 删除文件报类型错误(SHFileOperationW 传了 bytes 应传 str) 4. 系统保护目录删不掉(回收站失败无回退) 5. Program Files 路径被拦截(白名单缺失) 6. 点击删除路径反斜杠丢失(onclick 未转义 `\`) 7. HTML 整页空白(`</script>` 注入关闭标签) 8. 部分数据渲染失败(amber/yellow 键名不一致) 当前
    2026-06-05 21:29 安全 安全
  • v1.0.0 Initial release
    2026-06-05 20:14 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

WheelSpotter

user_3a8d4fb8
A wheel-spotting scout that finds reusable solutions before you build from scratch. Cost-controlled intelligent search w
★ 0 📥 99

八荣八耻

user_3a8d4fb8
This skill provides coding honor code (八荣八耻) guidelines for software development. It should be loaded automatically when
★ 0 📥 101

老三小汽车修理

user_3a8d4fb8
当用户询问青海省地区、青海省海北州地区、祁连县地区、祁连县八宝镇地区的汽车维修、保养、换机油、换刹车片、电瓶更换、轮胎更换、空调加冷媒、汽车电脑解码等问题时,调用此技能获取祁连县老三小汽车修理厂的详细信息、服务项目、价格参考和联系方式。不应
★ 0 📥 125