Files
Oleg Isonen dde30ffb54 feat: Improve MCP authoring, compact output, and agent onboarding (#5883)
## Summary

This improves how agents discover, author, inspect, and verify Webstudio
projects while reducing unnecessary MCP context usage.

## What changed

- Adds an **Agents** section to Project Settings with ready-to-run setup
commands and client configuration for Claude Code, Codex, Cursor, and VS
Code.
- Makes large list and schema responses compact and paginated by
default, with **verbose** available when complete records or diagnostics
are needed.
- Applies consistent compact output to assets, instances, styles, design
tokens, CLI schemas, and project-session metadata.
- Returns actionable expression warnings for props, resources, and
Collection bindings, including unknown variables and risky render-time
mutation resources.
- Improves Collection expression guidance so agents can bind array items
with the correct scoped variables.
- Reports rendered audit outcomes explicitly as complete, partial,
confirmation-required, or failed.
- Expands runtime output schemas so MCP clients can validate responses
reliably.
- Strengthens the packaged CLI smoke workflow with a realistic
seven-page stdio MCP scenario.

## Architecture

- Consolidates `project-build` from 65 file-oriented entrypoints to 11
architecture-owned surfaces.
- Separates the core model, contracts, runtime authoring, transfer,
state, project sessions, MCP, visual tooling, persistence codecs, and
authenticated server services.
- Isolates Node-only JSX evaluation from browser-safe transfer utilities
and authenticated server modules.
- Keeps persistence codecs independent from authenticated database
services, preventing unrelated module initialization.
- Defines shared instance-path types once and reuses them across runtime
modules.
- Preserves Immer initialization through explicit package side-effect
metadata.
- Adds package tests that prevent a return to source-file entrypoints or
generic exposure of Node-only surfaces.

## Validation

- Full repository checks, tests, typechecks, generated-file checks, and
fixtures
- All 163 Builder test files and 2,141 tests
- All 71 project-build test files and 1,794 tests
- Lint and package-boundary validation
- Full packed CLI release smoke test, including install, preview, agent
setup, seven-page stdio MCP workflow, rendered audit, and structured
commands
2026-07-15 18:11:28 +02:00
..
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00
2026-07-12 11:27:58 +02:00

Builder e2e

Fast local reruns

Use the full command for CI-like validation:

pnpm e2e:builder

For local test authoring, keep the e2e backend and Builder dev server running and rerun only the matching test. This avoids rebuilding Builder and avoids restarting Docker for every edit.

Terminal 1:

pnpm e2e:builder:dev:backend

Terminal 2:

pnpm dev

Terminal 3:

E2E_TEST_FILTER="Builder can copy, duplicate, and delete a page" pnpm e2e:builder:dev

E2E_TEST_FILTER is a substring match against the test name. It is not a regular expression. If the filter matches no tests, the runner fails and prints the available test names before starting Docker or building Builder.

Use E2E_TEST_FILTERS for a newline-separated list of exact or substring matches. Each entry is matched against both the test name and <suite> › <test>.

E2E_TEST_FILTERS='Builder can insert through the engine bridge
Builder-created data variables and resources persist' pnpm e2e:builder

CI shards the full e2e suite by file name tags such as pages-actions.[shard-3].e2e.ts. Use E2E_TEST_SHARD=shard-3 to run one shard. The goal is to keep all coverage while preventing one long serial e2e command from hitting the command timeout.

When adding a new e2e file, include one shard tag in the filename:

my-workflow.[shard-1].e2e.ts
my-workflow.[shard-2].e2e.ts
my-workflow.[shard-3].e2e.ts

If one workflow file grows too slow, split it by scenario into files with the same base name and different shard tags:

large-workflow.[shard-1].e2e.ts
large-workflow.[shard-2].e2e.ts
large-workflow.[shard-3].e2e.ts

Choose the shard by current CI timing, not by feature ownership. Put new or expensive files into the fastest shard, and rebalance later by renaming files. CI retries a failed shard once because a single shard rerun is cheap enough to absorb occasional browser/backend flakes.

pnpm e2e:builder:dev defaults to E2E_BUILDER_URL=https://127.0.0.1:3000, so it runs against the already-running Vite dev server instead of building and serving the production bundle. Override E2E_BUILDER_URL when the dev server is running on another port. The E2E harness maps wstd.dev and project subdomains to loopback for Chromium when this URL is loopback, so focused local runs do not require machine-level host-file edits.

The dev backend uses E2E_DB_BOOTSTRAP=if-empty and keeps Docker containers running. The e2e runner still resets test data before each run.

When you need a clean backend:

E2E_SKIP_CLEANUP=false pnpm e2e:builder