豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

feat: add a skill for detecting memory leaks using take_memory_snapshot tool#1162

Merged
devnook merged 11 commits intomainfrom
feat/memory-skill
Mar 24, 2026
Merged

feat: add a skill for detecting memory leaks using take_memory_snapshot tool#1162
devnook merged 11 commits intomainfrom
feat/memory-skill

Conversation

@devnook
Copy link
Copy Markdown
Contributor

@devnook devnook commented Mar 11, 2026

This PR add a new skill for detecting and removing memory leaks using take_memory_snapshot tool.

Skill was based on authoritative material from own sources:

It can be tested with https://github.com/devnook/mem-leak-example. Example prompt

  • A page running at localhost:3000 has memory issues when you click from home to contact tab and back. Can you fix it?

The skill prefers using comparison tools like memlab instead of custom evaluate_script snippets to avoid directly reading of .heapsnpashot files to save context space and tokens.

Fixes #1056

Copy link
Copy Markdown
Contributor

@natorion natorion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should mlippautz@ also take a look?

Comment thread skills/memory-leak-debugging/SKILL.md
Comment thread skills/memory-leak-debugging/references/common-leaks.md
Comment thread skills/memory-leak-debugging/references/common-leaks.md Outdated
Comment thread skills/memory-leak-debugging/references/common-leaks.md Outdated
Comment thread skills/memory-leak-debugging/SKILL.md
@mlippautz
Copy link
Copy Markdown

This generally looks good and I am curious to actually try it out :)

@Lightning00Blade
Copy link
Copy Markdown
Collaborator

Note: some tooling like Bun provide a way to export this information as Markdown - https://bun.com/docs/project/benchmarking#markdown-output-2

@natorion
Copy link
Copy Markdown
Contributor

Note: some tooling like Bun provide a way to export this information as Markdown - https://bun.com/docs/project/benchmarking#markdown-output-2

Seems like the source for this is at https://github.com/oven-sh/bun/blob/a305e99af5d9dbe74ffabfa5a3c0cfdf815ac71a/src/bun.js/bindings/BunHeapProfiler.cpp#L568. Can we embed that as a pythons script or TS script somehow?

devnook and others added 7 commits March 21, 2026 18:49
…d group (#1159)

Bumps the bundled group with 1 update:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 24.38.0 to 24.39.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/releases">puppeteer's
releases</a>.</em></p>
<blockquote>
<h2>puppeteer-core: v24.39.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.38.0...puppeteer-core-v24.39.0">24.39.0</a>
(2026-03-10)</h2>
<h3>🎉 Features</h3>
<ul>
<li>expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e">5ed7e77</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a">60ace04</a>)</li>
</ul>
<h2>puppeteer: v24.39.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0">24.39.0</a>
(2026-03-10)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.38.0 to 24.39.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md">puppeteer's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0">24.39.0</a>
(2026-03-10)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.38.0 to 24.39.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🎉 Features</h3>
<ul>
<li>expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e">5ed7e77</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a">60ace04</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/cbadc53bb7e699cc6b6ff07946fda4c1d121015e"><code>cbadc53</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14757">#14757</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e"><code>5ed7e77</code></a>
feat: expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a"><code>60ace04</code></a>
fix: roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/4d0851287a3d578a75dd6d941fdf86d016bb493b"><code>4d08512</code></a>
chore(deps-dev): bump <code>@​swc/core</code> from 1.15.17 to 1.15.18 in
/website in the al...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/8b64a281cc4df66feb77f3dfc4178fe04a1e8e72"><code>8b64a28</code></a>
chore(deps): bump the all group with 5 updates (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14755">#14755</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/a5ba71ab242a078b259188f091677386400d4e79"><code>a5ba71a</code></a>
chore: reduce flakiness in touch tests (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14751">#14751</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d3c93afcce23a8d5262922ad603ab69a75313fa1"><code>d3c93af</code></a>
ci: update changelog sections (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14750">#14750</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/bca52c3257f1aff4a100f01a8576102daed47a79"><code>bca52c3</code></a>
ci: only run stale on bug issues (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14749">#14749</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/282f935e34574381c648c07288beb9e4d44f51de"><code>282f935</code></a>
chore(deps): bump svgo from 3.3.2 to 3.3.3 in /website (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14747">#14747</a>)</li>
<li>See full diff in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=puppeteer&package-manager=npm_and_yarn&previous-version=24.38.0&new-version=24.39.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the dev-dependencies group with 4 updates:
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node),
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin),
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
and
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).

Updates `@types/node` from 25.3.5 to 25.4.0
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/eslint-plugin` from 8.56.1 to 8.57.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases"><code>@​typescript-eslint/eslint-plugin</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v8.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md"><code>@​typescript-eslint/eslint-plugin</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/46bf066d3df4af9aa8804a383e0d6d407a8e79f0"><code>46bf066</code></a>
docs(eslint-plugin): document no-unnecessary-condition limitation with
object...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2029c78dcbe11b7e750af588d3c47f1211f02798"><code>2029c78</code></a>
fix(eslint-plugin): [no-base-to-string] fix false positive for toString
with ...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/0f4f101a125487bc07db323288afb86d5247bc31"><code>0f4f101</code></a>
fix(eslint-plugin): [prefer-promise-reject-errors] add allow
`TypeOrValueSpec...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/53f473b7a8c46094623712ba69a627182d049a5b"><code>53f473b</code></a>
fix(typescript-estree): if the template literal is tagged and the text
has an...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2291b81f99670319618192645519a056fdb94cf4"><code>2291b81</code></a>
docs: minor grammar adjustment (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12112">#12112</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/fc5cd09de85600134ca0885ad5cdcedcddcd20ba"><code>fc5cd09</code></a>
fix(eslint-plugin): guard against negative paramIndex in
no-useless-default-a...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/adc2aad848fe1ac8044ba4a8d84daf8bb1939ced"><code>adc2aad</code></a>
fix(eslint-plugin): handle statically analyzable computed keys in
prefer-read...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/85badfffbf38730772afbffaa6d024592752664a"><code>85badff</code></a>
fix(eslint-plugin): [strict-void-return] false positives with overloads
(<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12055">#12055</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.56.1 to 8.57.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases"><code>@​typescript-eslint/parser</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v8.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md"><code>@​typescript-eslint/parser</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>8.57.0 (2026-03-09)</h2>
<p>This was a version bump only for parser to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a09921e2de2e8790e6a803016b825815ca9409d8"><code>a09921e</code></a>
chore: update vitest to 4.x (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12071">#12071</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.56.1 to 8.57.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.57.0 (2026-03-09)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a09921e2de2e8790e6a803016b825815ca9409d8"><code>a09921e</code></a>
chore: update vitest to 4.x (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12071">#12071</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This PR enables an alternative CLI interface for Chrome DevTools MCP.
`chrome-devtools` can be used in shell scripts to automate the Chrome
DevTools MCP session running as a daemon process. Currently, a single
session is shared between all `chrome-devtools` calls. All tools
available by default are included into the CLI.

Examples:

```bash
❯ chrome-devtools navigate_page --url https://example.com
Successfully navigated to https://example.com.
## Pages
1: https://example.com/ [selected]

❯ chrome-devtools lighthouse_audit
## Lighthouse Audit Results
Mode: navigation
Device: desktop
URL: https://example.com/
### Category Scores
- Accessibility: 96 (accessibility)
- Best Practices: 96 (best-practices)
- SEO: 80 (seo)
### Audit Summary
Passed: 30
Failed: 4
Total Timing: 4107.22ms
### Reports
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-l5LRIT/report.json
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-3o6rcM/report.htm
```

```sh
❯ chrome-devtools lighthouse_audit --format=json | jq
{
  "lighthouseResult": {
    "summary": {
      "mode": "navigation",
      "device": "desktop",
      "url": "https://example.com/",
      "scores": [
        {
          "id": "accessibility",
          "title": "Accessibility",
          "score": 0.96
        },
        {
          "id": "best-practices",
          "title": "Best Practices",
          "score": 0.96
        },
        {
          "id": "seo",
          "title": "SEO",
          "score": 0.8
        }
      ],
      "audits": {
        "failed": 4,
        "passed": 30
      },
      "timing": {
        "total": 3754.87
      }
    },
    "reports": [
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-nbLj82/report.json",
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-VTp35b/report.html"
    ]
  }
}
```

To test:

```sh
npm ci
npm run clean
npm run bundle
npm pack
npm i chrome-devtools-mcp-0.18.1.tgz -g # to install globally
```

---------

Co-authored-by: Mathias Bynens <mathias@qiwi.be>
@devnook devnook force-pushed the feat/memory-skill branch from 5762e61 to 3cad505 Compare March 21, 2026 17:50
@devnook devnook changed the title Add a skill for detecting memory leaks using take_memory_snapshot tool feat: add a skill for detecting memory leaks using take_memory_snapshot tool Mar 22, 2026
@devnook
Copy link
Copy Markdown
Contributor Author

devnook commented Mar 22, 2026

Note: some tooling like Bun provide a way to export this information as Markdown - https://bun.com/docs/project/benchmarking#markdown-output-2

Is there an advantage to .md format instead of raw .heapsnaphot files?

@devnook
Copy link
Copy Markdown
Contributor Author

devnook commented Mar 22, 2026

I added the compare_snapshots.js script as a fallback to memlab to compare snapshot and rewrote some of the skills guidance to include remarks from the review. PTAL

@Lightning00Blade
Copy link
Copy Markdown
Collaborator

Is there an advantage to .md format instead of raw .heapsnaphot files?

From the post I am seeing it's ease of use with LLM, as it can directly use the data without needing to do other steps.
Though I have not see a actual benchmark that confirms this.

@devnook devnook requested a review from natorion March 23, 2026 17:59
@devnook
Copy link
Copy Markdown
Contributor Author

devnook commented Mar 23, 2026

Added a possible follow up issue for retaining path: #1224

@devnook devnook added this pull request to the merge queue Mar 24, 2026
Merged via the queue into main with commit d19a235 Mar 24, 2026
67 of 85 checks passed
@devnook devnook deleted the feat/memory-skill branch March 24, 2026 13:13
OrKoN added a commit to mvanhorn/chrome-devtools-mcp that referenced this pull request Apr 1, 2026
…ot tool (ChromeDevTools#1162)

This PR add a new skill for detecting and removing memory leaks using
take_memory_snapshot tool.

Skill was based on authoritative material from own sources:
* https://developer.chrome.com/docs/devtools/memory-problems
* https://web.dev/articles/effectivemanagement
as well as examples of memory leaks from public domain.

It can be tested with https://github.com/devnook/mem-leak-example.
Example prompt
* A page running at localhost:3000 has memory issues when you click from
home to contact tab and back. Can you fix it?

The skill prefers using comparison tools like memlab instead of custom
evaluate_script snippets to avoid directly reading of .heapsnpashot
files to save context space and tokens.

Fixes ChromeDevTools#1056

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Yusheng <113574546+yshngg@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
github-merge-queue bot pushed a commit that referenced this pull request Apr 1, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.21.0](chrome-devtools-mcp-v0.20.3...chrome-devtools-mcp-v0.21.0)
(2026-04-01)


### 🎉 Features

* add a skill for detecting memory leaks using take_memory_snapshot tool
([#1162](#1162))
([d19a235](d19a235))


### 🛠️ Fixes

* **cli:** avoid defaulting to isolated when userDataDir is provided
([#1258](#1258))
([73e1e24](73e1e24))
* list_pages should work after selected page is closed
([#1145](#1145))
([2664455](2664455))
* mark lighthouse and memory as non-read-only
([#1769](#1769))
([bec9dae](bec9dae))
* **telemetry:** record client name
([9a47b65](9a47b65))
* versioning for Claude Code plugin
([#1233](#1233))
([966b86f](966b86f))
* wrap .mcp.json config in mcpServers key
([#1246](#1246))
([c7948cf](c7948cf))


### 📄 Documentation

* Command Code CLI instructions for MCP server
([0a7c0a7](0a7c0a7))
* provide disclaimer about supported browsers
([#1237](#1237))
([8676b72](8676b72))


### 🏗️ Refactor

* set process titles for easier debugging
([#1770](#1770))
([0fe3896](0fe3896))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
wolfib pushed a commit that referenced this pull request Apr 1, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.21.0](chrome-devtools-mcp-v0.20.3...chrome-devtools-mcp-v0.21.0)
(2026-04-01)


### 🎉 Features

* add a skill for detecting memory leaks using take_memory_snapshot tool
([#1162](#1162))
([d19a235](d19a235))


### 🛠️ Fixes

* **cli:** avoid defaulting to isolated when userDataDir is provided
([#1258](#1258))
([73e1e24](73e1e24))
* list_pages should work after selected page is closed
([#1145](#1145))
([2664455](2664455))
* mark lighthouse and memory as non-read-only
([#1769](#1769))
([bec9dae](bec9dae))
* **telemetry:** record client name
([9a47b65](9a47b65))
* versioning for Claude Code plugin
([#1233](#1233))
([966b86f](966b86f))
* wrap .mcp.json config in mcpServers key
([#1246](#1246))
([c7948cf](c7948cf))


### 📄 Documentation

* Command Code CLI instructions for MCP server
([0a7c0a7](0a7c0a7))
* provide disclaimer about supported browsers
([#1237](#1237))
([8676b72](8676b72))


### 🏗️ Refactor

* set process titles for easier debugging
([#1770](#1770))
([0fe3896](0fe3896))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a skill that describes how to debug memory leaks

6 participants