用途
该技能用于审计 JavaScript、浏览器或 Node.js 中的内存泄漏。它基于 Chrome DevTools MCP,通过复现内存增长、采集堆快照并分析泄漏,同时避免将原始堆产物直接加载到对话上下文中。
主要能力
- 根据输入分派不同动作:
- 空输入:询问泄漏症状、目标 URL/应用以及复现步骤。
- 浏览器内存泄漏:围绕重复交互采集基线、目标和最终快照。
- Node.js 内存泄漏:优先使用运行时原生堆快照或 memlab 兼容产物,再分析摘要。
- 请求读取原始 .heapsnapshot:拒绝直接读取,改用 memlab 或有界分析命令。
- 游离 DOM 节点:视为可疑,但不自动判定为错误;在修改有意缓存前先询问。
- 修复验证:重复相同的交互循环,比较快照或 memlab 输出。
核心原则
- 绝不直接读取原始 .heapsnapshot 文件,因为它们过大且容易处理不当。
- 隔离泄漏来源:客户端浏览器状态、服务端 Node.js 还是测试框架状态。
- 通过重复相同的用户交互循环来放大疑似泄漏。
- 使用有界分析输出,而非原始快照内容。
浏览器工作流
- 导航到目标页面并达到稳定基线状态。
- 使用 take_memory_snapshot 将基线堆快照采集到版本控制之外的文件路径。
- 重复执行疑似交互,通常为 10 次。
- 采集目标堆快照。
- 尽可能回退交互,例如关闭模态框或离开页面。
- 采集最终堆快照。
- 使用 memlab 或其他有界工具分析快照。
- 将保留链映射回源代码,并提出最小修复方案。
- 修复后重复相同工作流进行验证。
常见泄漏模式
- 未从长生命周期对象上移除的事件监听器。
- 被变量、缓存、闭包或监听器保留的游离 DOM 节点。
- 意外的全局变量或 window 挂载。
- 闭包在不再需要后仍保留大对象。
- 无界的数组、映射或应用缓存。
参考文件索引
- references/common-leaks.md:常见浏览器和 JavaScript 泄漏模式;在将保留链映射到可能修复时阅读。
- references/memlab.md:有界堆快照分析命令;在快照文件可用时阅读。
- references/provenance.md:上游来源、提交、许可证和改编说明;在修改此技能或审计来源前阅读。
关键规则
- 绝不将原始 .heapsnapshot 文件读入上下文。
- 尽可能采集基线、目标和最终快照。
- 在分析前重复疑似交互以放大泄漏。
- 在用户确认游离 DOM 节点并非有意缓存前,将其视为可疑。
- 通过重复相同的快照工作流验证修复。
规范词汇
- 堆快照:保存为外部产物的浏览器或 Node.js 内存图。
- 基线快照:疑似泄漏操作之前的快照。
- 目标快照:重复疑似泄漏操作之后的快照。
- 最终快照:尽可能回退操作之后的快照。
- 保留链:显示对象为何仍可到达的分析输出。
验证契约
在声明技能更改完成前,运行 uv run wagents validate、uv run python skills/skill-creator/scripts/audit.py skills/chrome-devtools-memory-leak-debugging 以及 uv run wagents package chrome-devtools-memory-leak-debugging --dry-run。
适用场景
适用于浏览器端内存增长排查、Node.js 内存泄漏分析、游离 DOM 节点审计以及修复后的回归验证。
限制
该技能不直接读取原始 .heapsnapshot 文件;对游离 DOM 节点不自动判定为错误;具体收费、价格、平台支持等信息暂未提供。