Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This repository uses [changesets](https://github.com/changesets/changesets) to v

## What the release workflow needs

- An `NPM_TOKEN` repository secret: a granular npm access token with read and write permission for the four packages (or, before the first publish, for new packages under the account), with two-factor bypass enabled so it can publish unattended. The workflow exposes it only to the publish step, through `pnpm_config__auth`, which carries the registry URL and the token together.
- An `NPM_TOKEN` repository secret: a granular npm access token with read and write permission for the four packages (or, before the first publish, for new packages under the account and the `@swissspidy` scope), with two-factor bypass enabled so it can publish unattended. The workflow exposes it only to the publish step, through `pnpm_config__auth`, which carries the registry URL and the token together.
- "Allow GitHub Actions to create and approve pull requests" enabled under Settings → Actions → General, so the action can open the "Version Packages" pull request.

Publishing already runs with `id-token: write` and provenance. Once the packages exist on npm, npm's trusted publishing can replace the token: configure this repository and `release.yml` as a trusted publisher on each of the four packages, then drop the secret. A trusted publisher can only be added to a package that already exists, so the first release still has to go out under the token.
Expand Down
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
}
],
"commit": false,
"fixed": [["webmcp-lint", "playwright-webmcp", "webmcp-audit", "eslint-plugin-webmcp"]],
"fixed": [["webmcp-lint", "playwright-webmcp", "webmcp-audit", "@swissspidy/eslint-plugin-webmcp"]],
"linked": [],
"access": "public",
"baseBranch": "main",
Expand Down
12 changes: 0 additions & 12 deletions .changeset/executetool-input-shape.md

This file was deleted.

15 changes: 0 additions & 15 deletions .changeset/fresh-tools-align.md

This file was deleted.

15 changes: 15 additions & 0 deletions .changeset/initial-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
"webmcp-lint": minor
"playwright-webmcp": minor
"webmcp-audit": minor
"@swissspidy/eslint-plugin-webmcp": minor
---

Initial release.

- `webmcp-lint`: the rule engine (tool and page rules, injection scanning, `capability-trifecta`, `tool-shadowing`, `third-party-registration`, and the opt-in `tool-name-style`, `tool-title-missing` and `annotations-explicit`), `lintTools()`, `snapshotFromFrames()`, a `webmcp-lint` CLI, schema-driven smoke checks, tool contracts, coverage, scoring, codegen, docs, and the `webmcp-evals` argument and trajectory matchers.
- `playwright-webmcp`: `test`/`expect` with the `webmcp` fixture (discovery in every frame, `call()`, recording, lint, smoke, contracts, mocks, timeline), the CDP `WebMCP` collector, the `promptApi` fixture on Chromium's Prompt API tool-use protocol, `toolsForAgent()`/`runAgent()`/`toPassEval` for agents you run from Node, and a reporter that writes `tools.json`, `coverage.json` and `TOOLS.md`.
- `webmcp-audit`: a crawler and CLI that lints every page, runs smoke calls, detects cross-page drift, compares with a baseline and scores agent readiness.
- `@swissspidy/eslint-plugin-webmcp`: the tool-scoped rules as ESLint rules for `registerTool()`, `useWebMCP()`, your own wrappers and `<form toolname>` in JSX, plus `valid-event-name` and `no-interpolated-text`; loads in oxlint.

Everything runs against the browser's own WebMCP implementation (`document.modelContext`): Playwright's Chromium with `--enable-features=WebMCP`, or Chrome Beta and Canary.
14 changes: 0 additions & 14 deletions .changeset/injection-surface.md

This file was deleted.

24 changes: 0 additions & 24 deletions .changeset/lint-anywhere.md

This file was deleted.

10 changes: 0 additions & 10 deletions .changeset/require-node-24.md

This file was deleted.

14 changes: 0 additions & 14 deletions .changeset/shadowing-and-provenance.md

This file was deleted.

17 changes: 9 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ jobs:
- run: pnpm run lint

e2e:
# Playwright's Chromium implements WebMCP behind --enable-features=WebMCP, which the
# Playwright configs pass; no other browser is needed.
name: Playwright (Node ${{ matrix.node }})
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -61,12 +63,11 @@ jobs:
examples/*/test-results
retention-days: 7

native:
# The same suites on Google Chrome Beta with WebMCP enabled, so the shim,
# the collector and the CDP domain are checked against the real
# implementation. Chrome Beta moves every week; this job is informational
# until the API ships to stable, so it does not block merges.
name: Native WebMCP (Chrome Beta)
beta:
# The same suites on Google Chrome Beta, one milestone ahead of Playwright's
# Chromium, so API changes show up before they reach the stable build. Chrome
# Beta moves every week; this job is informational and does not block merges.
name: Chrome Beta
runs-on: ubuntu-latest
continue-on-error: true
steps:
Expand All @@ -78,11 +79,11 @@ jobs:
- run: pnpm run build
- run: pnpm exec playwright install --with-deps chrome-beta
- run: /opt/google/chrome-beta/chrome --version
- run: pnpm run test:native
- run: pnpm run test:beta
- uses: actions/upload-artifact@v7
if: failure()
with:
name: playwright-results-native
name: playwright-results-beta
path: |
packages/*/test-results
examples/*/test-results
Expand Down
Loading
Loading