diff --git a/.claude/skills/webperf-core-web-vitals/SKILL.md b/.claude/skills/webperf-core-web-vitals/SKILL.md index 709d9e40..07cf7932 100644 --- a/.claude/skills/webperf-core-web-vitals/SKILL.md +++ b/.claude/skills/webperf-core-web-vitals/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent Core Web Vitals analysis with automated workflows and d license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.claude/skills/webperf-interaction/SKILL.md b/.claude/skills/webperf-interaction/SKILL.md index 9e7ba539..8d48b6c6 100644 --- a/.claude/skills/webperf-interaction/SKILL.md +++ b/.claude/skills/webperf-interaction/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent interaction performance analysis with automated workflo license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.claude/skills/webperf-loading/SKILL.md b/.claude/skills/webperf-loading/SKILL.md index 1fea4de1..3b455e4b 100644 --- a/.claude/skills/webperf-loading/SKILL.md +++ b/.claude/skills/webperf-loading/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent loading performance analysis with automated workflows f license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.claude/skills/webperf-media/SKILL.md b/.claude/skills/webperf-media/SKILL.md index 033076b4..1a73df4a 100644 --- a/.claude/skills/webperf-media/SKILL.md +++ b/.claude/skills/webperf-media/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent media optimization with automated workflows for images, license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.claude/skills/webperf-resources/SKILL.md b/.claude/skills/webperf-resources/SKILL.md index 27cc913f..478923ec 100644 --- a/.claude/skills/webperf-resources/SKILL.md +++ b/.claude/skills/webperf-resources/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent network quality analysis with adaptive loading strategi license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.claude/skills/webperf/SKILL.md b/.claude/skills/webperf/SKILL.md index 23ef4f41..4b14de96 100644 --- a/.claude/skills/webperf/SKILL.md +++ b/.claude/skills/webperf/SKILL.md @@ -4,7 +4,7 @@ description: Web performance measurement and debugging toolkit. Use when the use license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/.github/ISSUE_TEMPLATE/extension-feedback.yml b/.github/ISSUE_TEMPLATE/extension-feedback.yml index 5fc06f07..3ef5a29a 100644 --- a/.github/ISSUE_TEMPLATE/extension-feedback.yml +++ b/.github/ISSUE_TEMPLATE/extension-feedback.yml @@ -49,7 +49,7 @@ body: attributes: label: Extension version description: In chrome://extensions, next to the name. - placeholder: 0.1.1 + placeholder: 0.2.0 validations: required: true - type: input diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ebfbad4..4d65fbb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,16 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +--- + +## [2.1.0] — 2026-10-25 + +One change breaks code or agents that read a result: `getINPDetails()` of INP returns a result object instead of an array, so they need to read `items`. It is listed first under Changed. Issues gain a stable `code`, and `target` when there is one issue per thing. + ### Added - Issues carry a `code`, kebab-case and stable across runs and versions, so a comparison pairs the issues of two runs without reading their message, and a `target` with the URL, selector or name of what the issue is about when there is one issue per thing, such as an image or a CSS property. `snippets/SCHEMA.md` lists the codes of each snippet under Issue codes, and `cli/tests/unit/issue-codes.test.js` fails when the source and the table differ. Every snippet that returns issues carries its codes, and the contract fails on an issue without one. - `npm run eval:mcp`: the same question about a local page with a known answer, asked to an agent with the webperf MCP server, with Chrome DevTools MCP and the webperf skills, and with Chrome DevTools MCP alone, graded on the diagnosis and measured in tokens, turns and time. It runs by hand, not in CI. +- The CLI reaches version 1.5.0 (see [`cli/CHANGELOG.md`](cli/CHANGELOG.md)): `--baseline` pairs the errors of a snippet by their code and target, and the MCP server gives the issue codes of each snippet in its schema resource. - The CLI reaches version 1.4.0 (see [`cli/CHANGELOG.md`](cli/CHANGELOG.md)): `--baseline` compares a page, or a matrix combination by combination, with the `--json` output of an earlier run, with a threshold per metric, the new and fixed errors, warnings when the conditions differ, and `--fail-on-regression` to exit with `1` on a regression. The JSON output carries the conditions of each measurement in `conditions`. - The CLI reaches version 1.3.0 (see [`cli/CHANGELOG.md`](cli/CHANGELOG.md)): `--runs` measures a page several times and reports the median run, and `--matrix` measures several pages on several devices and in several variants, such as with and without the consent cookie, from one JSON file, with a table of the medians. - The CLI reaches version 1.2.0 (see [`cli/CHANGELOG.md`](cli/CHANGELOG.md)): `--header` for pages behind an access proxy, sent only to the origin of the measured URL, `--cpu` and `--network` for CPU and network throttling with the presets of DevTools, and `--own-domains` for the domains of the site that count as first party. @@ -19,11 +26,11 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - LCP-Subparts splits the Resource Load Time into the wait for the server and the download of the resource, in `details.subParts.resourceLoadTime.waiting` and `.download`, from its Resource Timing entry. When the wait is the larger part of the slowest phase, the console recommends the server, CDN and cache instead of compressing the image. The split is missing when another origin hides its timing (no `Timing-Allow-Origin`). ### Changed -- The audit comparison of the extension pairs issues by their code and target, whatever their messages say, and an issue whose severity moves is listed as changed, with both severities, instead of new and resolved. An audit saved before the codes pairs by message as before. The downloaded report carries the `code` and `target` of each issue. +- `getINPDetails()` of INP returns a result object, `{ script, status, count, items }`, like the other functions the snippets expose, instead of an array. `items` holds the 15 slowest interactions as plain data, with the target as a CSS selector instead of the DOM element. Code or agents that read the array need to read `items`. +- The extension, at version 0.2.0: the audit comparison pairs issues by their code and target, whatever their messages say, and an issue whose severity moves is listed as changed, with both severities, instead of new and resolved. An audit saved before the codes pairs by message as before. The downloaded report carries the `code` and `target` of each issue. - The code in the first column of a table, such as an option of the CLI or a property, stays on one line. A table wider than the content column scrolls sideways inside its own box. - CI skips the build and the end-to-end tests on its own when a pull request only changes documentation, instead of waiting for the `skip-e2e` label. Opening a pull request with the label fired two runs and cancelled one, which showed as a failed check. - Examples, CLI commands, the `OWN_DOMAINS` hint of the snippets and the test data use the domains reserved for documentation (`example.com`, `example.net`, `example.org`) instead of real sites. `scripts/example-domains.test.js`, in `npm run test:site`, fails when a real site comes back as an example. -- `getINPDetails()` of INP returns a result object, `{ script, status, count, items }`, like the other functions the snippets expose, instead of an array. `items` holds the 15 slowest interactions as plain data, with the target as a CSS selector instead of the DOM element. Code or agents that read the array need to read `items`. ### Fixed - The generated skills run in the conversation of the agent, not in a forked context (`context: fork`): a forked skill runs in a subagent that does not get the conversation, so it did not know the URL or the open page and answered that it had no page to measure. @@ -202,7 +209,8 @@ A major version: several snippets return different fields or values (listed unde --- -[Unreleased]: https://github.com/nucliweb/webperf-snippets/compare/v2.0.1...HEAD +[Unreleased]: https://github.com/nucliweb/webperf-snippets/compare/v2.1.0...HEAD +[2.1.0]: https://github.com/nucliweb/webperf-snippets/compare/v2.0.1...v2.1.0 [2.0.1]: https://github.com/nucliweb/webperf-snippets/compare/v2.0.0...v2.0.1 [2.0.0]: https://github.com/nucliweb/webperf-snippets/compare/v1.3.0...v2.0.0 [1.3.0]: https://github.com/nucliweb/webperf-snippets/compare/v1.2.0...v1.3.0 diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 536adbd4..27428315 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -8,9 +8,14 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The CL ## [Unreleased] +--- + +## [1.5.0] — 2026-10-25 + ### Changed - The `webperf://schema` resource of the MCP server keeps the rules of the issue codes and leaves out the table of each snippet, which goes in `webperf://schema/{snippet}`. A snippet with issue codes and no section of its own has a resource with its table. - `--baseline` pairs the errors of a snippet by their code and the resource they name (`target`), whatever their messages say; a resource of the page itself compares by its path and query, so a review app on another host matches production. A snippet without codes on one side, as in a baseline of 1.4.0, keeps pairing by message with the figures normalized. The errors in `baseline.errors` carry their `target`. +- The snippets the CLI runs give each issue a stable `code`, and a `target` when there is one issue per thing, as listed under Issue codes in `snippets/SCHEMA.md`. No message changes. --- @@ -172,7 +177,8 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The CL --- -[Unreleased]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.4.0...HEAD +[Unreleased]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.5.0...HEAD +[1.5.0]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.4.0...cli-v1.5.0 [1.4.0]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.3.0...cli-v1.4.0 [1.3.0]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.2.0...cli-v1.3.0 [1.2.0]: https://github.com/nucliweb/webperf-snippets/compare/cli-v1.1.0...cli-v1.2.0 diff --git a/cli/README.md b/cli/README.md index 61201af5..981992f0 100644 --- a/cli/README.md +++ b/cli/README.md @@ -73,7 +73,7 @@ npx webperf-snippets https://example.com --json The JSON output records how the page was measured in `conditions`, so a later run can tell whether it measured the same way: the viewport, the workflow (or the path of the snippet with `--snippet`), the wait and the version of the CLI. ```json -"conditions": { "viewport": "mobile", "workflow": "core-web-vitals", "waitMs": 3000, "cliVersion": "1.4.0" } +"conditions": { "viewport": "mobile", "workflow": "core-web-vitals", "waitMs": 3000, "cliVersion": "1.5.0" } ``` Single snippet: @@ -158,7 +158,7 @@ Without `--report-to` the CLI makes no external calls. With it, the results are "timestamp": "2026-05-06T10:00:00.000Z", "navMs": 1240, "results": [], - "meta": { "viewport": "mobile", "waitMs": 3000, "cli_version": "1.4.0" } + "meta": { "viewport": "mobile", "waitMs": 3000, "cli_version": "1.5.0" } } ``` diff --git a/cli/package.json b/cli/package.json index f86da382..55a7aef4 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "webperf-snippets", - "version": "1.4.0", + "version": "1.5.0", "mcpName": "io.github.nucliweb/webperf-snippets", "description": "Run curated WebPerf Snippets headlessly via Playwright. Diagnose Core Web Vitals beyond what Lighthouse exposes.", "type": "module", diff --git a/cli/server.json b/cli/server.json index 398a5f2c..5090c776 100644 --- a/cli/server.json +++ b/cli/server.json @@ -9,13 +9,13 @@ "source": "github", "subfolder": "cli" }, - "version": "1.4.0", + "version": "1.5.0", "packages": [ { "registryType": "npm", "registryBaseUrl": "https://registry.npmjs.org", "identifier": "webperf-snippets", - "version": "1.4.0", + "version": "1.5.0", "transport": { "type": "stdio" }, diff --git a/content/CLI.mdx b/content/CLI.mdx index 5b510d34..d1413e11 100644 --- a/content/CLI.mdx +++ b/content/CLI.mdx @@ -61,7 +61,7 @@ npx webperf-snippets https://example.com --json The JSON output records how the page was measured in `conditions`, so a later run can tell whether it measured the same way: the viewport, the workflow (or the path of the snippet with `--snippet`), the wait and the version of the CLI. ```json -"conditions": { "viewport": "mobile", "workflow": "core-web-vitals", "waitMs": 3000, "cliVersion": "1.4.0" } +"conditions": { "viewport": "mobile", "workflow": "core-web-vitals", "waitMs": 3000, "cliVersion": "1.5.0" } ``` Run a single snippet by alias or by its own name, in any case. Every snippet of the collection runs this way, with or without its category: @@ -159,7 +159,7 @@ Without `--report-to` the CLI makes no external calls. With it, the results are "timestamp": "2026-05-06T10:00:00.000Z", "navMs": 1240, "results": [], - "meta": { "viewport": "mobile", "waitMs": 3000, "cli_version": "1.4.0" } + "meta": { "viewport": "mobile", "waitMs": 3000, "cli_version": "1.5.0" } } ``` diff --git a/dist/antigravity/webperf-core-web-vitals/SKILL.md b/dist/antigravity/webperf-core-web-vitals/SKILL.md index 6c4f68fb..f2dcc42b 100644 --- a/dist/antigravity/webperf-core-web-vitals/SKILL.md +++ b/dist/antigravity/webperf-core-web-vitals/SKILL.md @@ -11,7 +11,7 @@ tools: license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/dist/antigravity/webperf-interaction/SKILL.md b/dist/antigravity/webperf-interaction/SKILL.md index 318539be..b998896b 100644 --- a/dist/antigravity/webperf-interaction/SKILL.md +++ b/dist/antigravity/webperf-interaction/SKILL.md @@ -11,7 +11,7 @@ tools: license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/dist/antigravity/webperf-loading/SKILL.md b/dist/antigravity/webperf-loading/SKILL.md index 63b53e05..58a8a6a3 100644 --- a/dist/antigravity/webperf-loading/SKILL.md +++ b/dist/antigravity/webperf-loading/SKILL.md @@ -11,7 +11,7 @@ tools: license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/dist/antigravity/webperf-media/SKILL.md b/dist/antigravity/webperf-media/SKILL.md index 33500a3d..7c96efee 100644 --- a/dist/antigravity/webperf-media/SKILL.md +++ b/dist/antigravity/webperf-media/SKILL.md @@ -11,7 +11,7 @@ tools: license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/dist/antigravity/webperf-resources/SKILL.md b/dist/antigravity/webperf-resources/SKILL.md index 2be93f16..44666144 100644 --- a/dist/antigravity/webperf-resources/SKILL.md +++ b/dist/antigravity/webperf-resources/SKILL.md @@ -11,7 +11,7 @@ tools: license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/dist/antigravity/webperf/SKILL.md b/dist/antigravity/webperf/SKILL.md index 3f462fb3..42137ada 100644 --- a/dist/antigravity/webperf/SKILL.md +++ b/dist/antigravity/webperf/SKILL.md @@ -8,7 +8,7 @@ max_turns: 5 license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/extension/manifest.json b/extension/manifest.json index 3bba8711..b459f568 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "WebPerf Snippets", - "version": "0.1.1", + "version": "0.2.0", "description": "Run the WebPerf Snippets on the inspected page from a DevTools panel, and read their results.", "icons": { "16": "icons/icon-16.png", diff --git a/package-lock.json b/package-lock.json index 5727d504..f5c79d36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "webperf-snippets-docs", - "version": "2.0.1", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "webperf-snippets-docs", - "version": "2.0.1", + "version": "2.1.0", "license": "MIT", "workspaces": [ "cli" @@ -30,7 +30,7 @@ }, "cli": { "name": "webperf-snippets", - "version": "1.4.0", + "version": "1.5.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/server": "^2.3.1" diff --git a/package.json b/package.json index 212cb9de..ea5c04e5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "webperf-snippets-docs", "private": true, - "version": "2.0.1", + "version": "2.1.0", "description": "Web Performance Snippets — documentation site", "workspaces": [ "cli" diff --git a/public/llms-full.txt b/public/llms-full.txt index 2ddb28fe..6ea5d743 100644 --- a/public/llms-full.txt +++ b/public/llms-full.txt @@ -2,7 +2,7 @@ Tested JavaScript snippets that measure and debug web performance. Your AI agent runs them for you, or you run them yourself in DevTools. Source: https://webperf-snippets.net -Version: 2.0.1 +Version: 2.1.0 --- diff --git a/public/llms.txt b/public/llms.txt index c2fc8b17..21eedc18 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -2,7 +2,7 @@ > Tested JavaScript snippets that measure and debug web performance. Your AI agent runs them for you, or you run them yourself in DevTools. > Source: https://webperf-snippets.net -> Version: 2.0.1 +> Version: 2.1.0 > Each link points to the Markdown version of a page; the HTML page is at the same URL without .md. --- diff --git a/skills/webperf-core-web-vitals/SKILL.md b/skills/webperf-core-web-vitals/SKILL.md index 709d9e40..07cf7932 100644 --- a/skills/webperf-core-web-vitals/SKILL.md +++ b/skills/webperf-core-web-vitals/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent Core Web Vitals analysis with automated workflows and d license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/skills/webperf-interaction/SKILL.md b/skills/webperf-interaction/SKILL.md index 9e7ba539..8d48b6c6 100644 --- a/skills/webperf-interaction/SKILL.md +++ b/skills/webperf-interaction/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent interaction performance analysis with automated workflo license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/skills/webperf-loading/SKILL.md b/skills/webperf-loading/SKILL.md index 1fea4de1..3b455e4b 100644 --- a/skills/webperf-loading/SKILL.md +++ b/skills/webperf-loading/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent loading performance analysis with automated workflows f license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/skills/webperf-media/SKILL.md b/skills/webperf-media/SKILL.md index 033076b4..1a73df4a 100644 --- a/skills/webperf-media/SKILL.md +++ b/skills/webperf-media/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent media optimization with automated workflows for images, license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/skills/webperf-resources/SKILL.md b/skills/webperf-resources/SKILL.md index 27cc913f..478923ec 100644 --- a/skills/webperf-resources/SKILL.md +++ b/skills/webperf-resources/SKILL.md @@ -4,7 +4,7 @@ description: Intelligent network quality analysis with adaptive loading strategi license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets diff --git a/skills/webperf/SKILL.md b/skills/webperf/SKILL.md index 23ef4f41..4b14de96 100644 --- a/skills/webperf/SKILL.md +++ b/skills/webperf/SKILL.md @@ -4,7 +4,7 @@ description: Web performance measurement and debugging toolkit. Use when the use license: MIT metadata: author: Joan Leon | @nucliweb - version: 2.0.1 + version: 2.1.0 mcp-server: chrome-devtools category: web-performance repository: https://github.com/nucliweb/webperf-snippets