figma-console-mcp 1.39.1 β 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -8
- package/dist/cloudflare/core/design-system-extraction-tools.js +611 -0
- package/dist/cloudflare/core/extraction/analyzer.js +161 -0
- package/dist/cloudflare/core/extraction/architecture.js +159 -0
- package/dist/cloudflare/core/extraction/component-inventory.js +485 -0
- package/dist/cloudflare/core/extraction/detectors.js +148 -0
- package/dist/cloudflare/core/extraction/scaffolder.js +614 -0
- package/dist/cloudflare/core/extraction/storybook-preset.js +349 -0
- package/dist/cloudflare/core/extraction/token-extractor.js +759 -0
- package/dist/cloudflare/core/extraction/types.js +14 -0
- package/dist/cloudflare/core/extraction/verifier.js +137 -0
- package/dist/cloudflare/core/extraction/walker.js +118 -0
- package/dist/cloudflare/core/tokens/formatters/css-vars.js +7 -0
- package/dist/cloudflare/core/tokens/formatters/scss.js +6 -0
- package/dist/cloudflare/core/tokens/formatters/tailwind-v4.js +6 -0
- package/dist/cloudflare/core/tokens-tools.js +1 -1
- package/dist/cloudflare/core/write-tools.js +1 -1
- package/dist/cloudflare/index.js +7 -7
- package/dist/core/design-system-extraction-tools.d.ts +18 -0
- package/dist/core/design-system-extraction-tools.d.ts.map +1 -0
- package/dist/core/design-system-extraction-tools.js +612 -0
- package/dist/core/design-system-extraction-tools.js.map +1 -0
- package/dist/core/extraction/analyzer.d.ts +16 -0
- package/dist/core/extraction/analyzer.d.ts.map +1 -0
- package/dist/core/extraction/analyzer.js +162 -0
- package/dist/core/extraction/analyzer.js.map +1 -0
- package/dist/core/extraction/architecture.d.ts +46 -0
- package/dist/core/extraction/architecture.d.ts.map +1 -0
- package/dist/core/extraction/architecture.js +160 -0
- package/dist/core/extraction/architecture.js.map +1 -0
- package/dist/core/extraction/component-inventory.d.ts +24 -0
- package/dist/core/extraction/component-inventory.d.ts.map +1 -0
- package/dist/core/extraction/component-inventory.js +486 -0
- package/dist/core/extraction/component-inventory.js.map +1 -0
- package/dist/core/extraction/detectors.d.ts +18 -0
- package/dist/core/extraction/detectors.d.ts.map +1 -0
- package/dist/core/extraction/detectors.js +149 -0
- package/dist/core/extraction/detectors.js.map +1 -0
- package/dist/core/extraction/scaffolder.d.ts +44 -0
- package/dist/core/extraction/scaffolder.d.ts.map +1 -0
- package/dist/core/extraction/scaffolder.js +615 -0
- package/dist/core/extraction/scaffolder.js.map +1 -0
- package/dist/core/extraction/storybook-preset.d.ts +34 -0
- package/dist/core/extraction/storybook-preset.d.ts.map +1 -0
- package/dist/core/extraction/storybook-preset.js +350 -0
- package/dist/core/extraction/storybook-preset.js.map +1 -0
- package/dist/core/extraction/token-extractor.d.ts +141 -0
- package/dist/core/extraction/token-extractor.d.ts.map +1 -0
- package/dist/core/extraction/token-extractor.js +760 -0
- package/dist/core/extraction/token-extractor.js.map +1 -0
- package/dist/core/extraction/types.d.ts +183 -0
- package/dist/core/extraction/types.d.ts.map +1 -0
- package/dist/core/extraction/types.js +15 -0
- package/dist/core/extraction/types.js.map +1 -0
- package/dist/core/extraction/verifier.d.ts +23 -0
- package/dist/core/extraction/verifier.d.ts.map +1 -0
- package/dist/core/extraction/verifier.js +138 -0
- package/dist/core/extraction/verifier.js.map +1 -0
- package/dist/core/extraction/walker.d.ts +40 -0
- package/dist/core/extraction/walker.d.ts.map +1 -0
- package/dist/core/extraction/walker.js +119 -0
- package/dist/core/extraction/walker.js.map +1 -0
- package/dist/core/tokens/config.d.ts +8 -8
- package/dist/core/tokens/formatters/css-vars.js +7 -0
- package/dist/core/tokens/formatters/css-vars.js.map +1 -1
- package/dist/core/tokens/formatters/scss.js +6 -0
- package/dist/core/tokens/formatters/scss.js.map +1 -1
- package/dist/core/tokens/formatters/tailwind-v4.js +6 -0
- package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -1
- package/dist/core/tokens/schemas.d.ts +18 -18
- package/dist/core/tokens-tools.js +1 -1
- package/dist/core/write-tools.js +1 -1
- package/dist/core/write-tools.js.map +1 -1
- package/dist/local.d.ts.map +1 -1
- package/dist/local.js +8 -0
- package/dist/local.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,13 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
> **Your design system as an API.** Model Context Protocol server that bridges design and developmentβgiving AI assistants complete access to Figma for **extraction**, **creation**, **debugging**, and **bidirectional token sync**.
|
|
10
10
|
|
|
11
|
-
>
|
|
11
|
+
> **π Design System Extraction (v1.40.0):** Turn a production codebase into a design system. Seven new `figma_ds_*` tools (Local Mode) scan one or more app codebases β framework, styling-method, and vendor-layer detection; a usage-ranked component inventory classified vendored / wrapped / pure-vendor / bespoke; variant inference from real call sites; duplicate detection; and an architecture pass that separates a UI kit from a design system (`FollowButton` is really a `Button` β and here are the missing generic primitives). Then they mine the app's de-facto styling into DTCG tokens with per-token provenance β multi-mode CSS custom properties (`.dark`, `[data-theme]`, and friends), SCSS variables, Tailwind config values, shadcn HSL triples, Tailwind utility-class frequency mining valued from the app's own theme, and frequency-promoted raw values β scaffold the design-system package with token/typography/iconography showcase pages, wire a fresh Storybook workshop to the app's real theme layers and fonts, deep-extract components for porting with CSF3 story scaffolds, gate the result behind deterministic fidelity evals, and persist porting progress across sessions. The extracted `tokens/tokens.json` imports straight into Figma variables via `figma_import_tokens` β a full code β design system β Figma round-trip. Also fixes the token formatters quoting CSS functional expressions like `cubic-bezier(...)` (a quoted easing silently kills transitions β affects `figma_export_tokens` output too). Server-only β no plugin re-import needed. [See what's new β](CHANGELOG.md#1400---2026-08-16)
|
|
12
12
|
|
|
13
13
|
## What is this?
|
|
14
14
|
|
|
15
15
|
Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
|
|
16
16
|
|
|
17
17
|
- **π¨ Design system extraction** - Pull variables, components, and styles
|
|
18
|
+
- **𧬠Codebase β design system extraction** - Scan a production codebase, mine its de-facto styling into DTCG tokens with per-token provenance, scaffold a design-system package with a wired Storybook workshop, and gate it with deterministic fidelity evals β then round-trip the tokens into Figma variables (Local Mode)
|
|
18
19
|
- **π Bidirectional token sync** - Export Figma variables to DTCG JSON (legacy or 2025.10 dialect) + 9 more formats; push code-side edits back to Figma with full apply β creates, renames, alias re-targeting, and replace-gated deletes. Replaces Style Dictionary and Tokens Studio's export pipeline.
|
|
19
20
|
- **πΈ Visual debugging** - Take screenshots for context
|
|
20
21
|
- **βοΈ Design creation** - Create UI components, frames, and layouts directly in Figma β including one-call component-set creation from a variant axes matrix
|
|
@@ -58,7 +59,7 @@ Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
|
|
|
58
59
|
| Requires Node.js | Yes | **No** | No |
|
|
59
60
|
| **Total tools available** | **114** | **101** | **9** |
|
|
60
61
|
|
|
61
|
-
> **Bottom line:** Remote SSE is **read-only** with 9 tools. **Cloud Mode** unlocks write access (101 tools) from web AI clients without Node.js. NPX/Local Git gives the full
|
|
62
|
+
> **Bottom line:** Remote SSE is **read-only** with 9 tools. **Cloud Mode** unlocks write access (101 tools) from web AI clients without Node.js. NPX/Local Git gives the full 121 tools with real-time monitoring.
|
|
62
63
|
|
|
63
64
|
---
|
|
64
65
|
|
|
@@ -66,7 +67,7 @@ Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
|
|
|
66
67
|
|
|
67
68
|
**Best for:** Designers who want full AI-assisted design capabilities.
|
|
68
69
|
|
|
69
|
-
**What you get:** All
|
|
70
|
+
**What you get:** All 121 tools including design creation, variable management, and component instantiation.
|
|
70
71
|
|
|
71
72
|
#### Prerequisites
|
|
72
73
|
|
|
@@ -163,7 +164,7 @@ Create a simple frame with a blue background
|
|
|
163
164
|
|
|
164
165
|
**Best for:** Developers who want to modify source code or contribute to the project.
|
|
165
166
|
|
|
166
|
-
**What you get:** Same
|
|
167
|
+
**What you get:** Same 121 tools as NPX, plus full source code access.
|
|
167
168
|
|
|
168
169
|
#### Quick Setup
|
|
169
170
|
|
|
@@ -324,7 +325,7 @@ AI Client β Cloud MCP Server β Durable Object Relay β Desktop Bridge Plugi
|
|
|
324
325
|
| **Automatic updates** | β
(`@latest`) | β
| Manual (`git pull`) | β
|
|
|
325
326
|
| **Source code access** | β | β | β
| β |
|
|
326
327
|
|
|
327
|
-
> **Key insight:** Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full
|
|
328
|
+
> **Key insight:** Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full 121 tools.
|
|
328
329
|
|
|
329
330
|
**π [Complete Feature Comparison](docs/mode-comparison.md)**
|
|
330
331
|
|
|
@@ -452,6 +453,18 @@ When you first use design system tools:
|
|
|
452
453
|
- `figma_export_tokens` - **Export Figma variables to design token files in your codebase.** Canonical DTCG JSON (legacy hex dialect by default, or DTCG 2025.10 object colors/dimensions via `dtcgDialect: "2025"`) plus CSS, Tailwind v4/v3, SCSS, TS, JSON, Style Dictionary, and Tokens Studio formats. Diff-aware merge against existing source files (only writes what changed). `tokens.config.json` autodiscovery means zero-arg calls after first setup. Scopes and codeSyntax metadata round-trip via `$extensions`. Replaces Style Dictionary and Tokens Studio's export pipeline for popular styling methods.
|
|
453
454
|
- `figma_import_tokens` - **Push code-side token edits back to Figma with a full apply phase.** Diffs against current Figma state, then applies value updates, **creates** missing collections/variables, applies **renames**, writes real **alias** (`VARIABLE_ALIAS`) references, and β only under `strategy: "replace"` β deletes Figma-only variables. Round-trip safe β Figma variable IDs preserved in DTCG `$extensions["figma-console-mcp"]` so renames on either side don't create duplicates. Accepts both DTCG dialects. Dry-run strategy for safe previews. In Cloud Mode, pass tokens inline via `payload` or `files` (no local filesystem access).
|
|
454
455
|
|
|
456
|
+
### 𧬠Design System Extraction (Local Mode only)
|
|
457
|
+
|
|
458
|
+
Turn a production codebase into a design system: analyze β extract tokens β scaffold β port components β verify. Local Mode only β these tools read and write your local filesystem, so they are never registered in Cloud Mode.
|
|
459
|
+
|
|
460
|
+
- `figma_ds_analyze` - **Scan one or more production app codebases** β framework/styling/vendor-layer detection; a usage-ranked component inventory classified vendored / wrapped / pure-vendor / bespoke, with prop contracts, variant inference from real call sites, and duplicate detection; iconography + typography capture; and architecture classification (atomic levels, specializations like `FollowButton` β `Button`, missing generic primitives β the "UI kit vs design system" analysis)
|
|
461
|
+
- `figma_ds_extract_tokens` - **Mine the app's styling into DTCG tokens.** Declared intent first β multi-mode CSS custom properties (`.dark` / `[data-theme]` and other conventions), SCSS variables, Tailwind config values, shadcn HSL triples β plus Tailwind utility-class frequency mining valued from the app's own theme, and frequency-promoted recurring raw values. Every token carries provenance (source file:line, confidence, frequency) in `$extensions`; the output imports straight into Figma variables via `figma_import_tokens`
|
|
462
|
+
- `figma_ds_scaffold` - Generate the design-system package β package skeleton, token files via the shared formatter engine, token/typography/iconography showcase docs pages, framework peer deps, and a workflow README
|
|
463
|
+
- `figma_ds_setup_storybook` - Wire a freshly-initialized Storybook workshop to the extraction β a preview stylesheet carrying the source app's `@theme` mapping, custom `@utility` definitions, `@layer base`, and `@font-face` rules; self-hosted font copying; config patches (Tailwind vite plugin, automatic JSX runtime); and a theme toolbar built from the extracted modes
|
|
464
|
+
- `figma_ds_extract_component` - Deep-extract one component for porting β source, prop contract, observed call-site variants, style touchpoints, and a ready-to-adapt CSF3 story scaffold
|
|
465
|
+
- `figma_ds_verify` - **Deterministic fidelity evals** β DTCG parse + alias integrity, quoted-CSS-expression scan, workshop `var()` resolution, structure + porting coverage, and Figma round-trip readiness
|
|
466
|
+
- `figma_ds_status` - Read or record porting progress, persisted across sessions
|
|
467
|
+
|
|
455
468
|
### π§ Variable Management (Local Mode + Cloud Mode)
|
|
456
469
|
- `figma_create_variable_collection` - Create new variable collections with modes
|
|
457
470
|
- `figma_create_variable` - Create COLOR, FLOAT, STRING, or BOOLEAN variables
|
|
@@ -686,7 +699,7 @@ The **Figma Desktop Bridge** plugin is the recommended way to connect Figma to t
|
|
|
686
699
|
- The MCP server communicates via **WebSocket** through the Desktop Bridge plugin
|
|
687
700
|
- The server tries port 9223 first, then automatically falls back through ports 9224β9232 if needed
|
|
688
701
|
- The plugin scans all ports in the range and connects to every active server it finds
|
|
689
|
-
- All
|
|
702
|
+
- All 121 tools work through the WebSocket transport
|
|
690
703
|
|
|
691
704
|
**Multiple files:** The WebSocket server supports multiple simultaneous plugin connections β one per open Figma file. Each connection is tracked by file key with independent state (selection, document changes, console logs).
|
|
692
705
|
|
|
@@ -827,9 +840,10 @@ The architecture supports adding new apps with minimal boilerplate β each app
|
|
|
827
840
|
|
|
828
841
|
## π€οΈ Roadmap
|
|
829
842
|
|
|
830
|
-
**Current Status:** v1.
|
|
843
|
+
**Current Status:** v1.40.0 (Stable) - Production-ready. Latest: design system extraction from production codebases β seven Local-Mode `figma_ds_*` tools that scan one or more apps (framework/styling/vendor detection, usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke, variant inference from real call sites, duplicate detection, and an architecture pass separating UI-kit specializations from the missing generic primitives), mine the de-facto styling into DTCG tokens with per-token provenance (multi-mode CSS custom properties, SCSS, Tailwind config, shadcn HSL triples, utility-class frequency mining valued from the app's own theme), scaffold the design-system package with showcase docs pages, wire a fresh Storybook workshop to the app's real theme layers and fonts, deep-extract components for porting with CSF3 story scaffolds, verify with deterministic fidelity evals, and persist porting progress across sessions β the extracted tokens import straight into Figma variables via `figma_import_tokens`. On top of v1.39.1's fix for a plugin-update banner that could never be cleared β an older server instance nagging a newer plugin to re-import, which only ever installs the same or a newer plugin. On top of v1.39.0's multi-file execution β `figma_execute_across_files` runs one script against several Desktop Bridge-connected files concurrently (four files x 2s of work in ~3s, not ~8s), and `figma_execute` takes an optional `fileKey` to target a single file without moving the active file or releasing target lock; targeting must be explicit (`fileKeys` or `allFiles: true`), so nothing fans out to files you did not name. From community PR #107 by @Wolfr. Ships with a relay fix: `handleResult()` in the plugin's ui.html rebuilt each response field by field and silently dropped `resultAnalysis` and `fileContext`, so the `resultAnalysis.warning` check that `figma_execute`'s own description tells callers to perform has never been possible (re-import `manifest.json` for those two fields; everything else works without it). On top of v1.38.2's connection-stability fix β the server's own orphan reaper was terminating healthy MCP servers because its liveness probe used an IPv4 literal while the server binds the IPv6 loopback, which turned every kill-safety gate into a rubber stamp; this was the cause of recurring "Server disconnected" errors across all MCP clients. Alongside v1.38.1's fix for the shared-library variable tools, which had silently reported zero collections since v1.29.0 and reported failed imports as successes. On top of v1.38.0's ongoing component changelogs in generated docs β `figma_generate_component_doc` takes an opt-in `history` parameter that pulls per-component **design history** from Figma version history (each version diffed and scoped to that component, so renames, added properties, and token bindings show up as rows) alongside **code history** from `git log` on the component's source files, rendered as a `## History` section with design, code, and release-note tables. Prefers labeled versions, falls back to auto-saves when a file has none, and is off by default so existing calls are unchanged (server-only, no plugin re-import). On top of v1.37.x's design-system health audit for every client β `figma_audit_design_system_report` runs the dashboard's deterministic six-category scoring engine and returns the report as data with per-finding remediation, live-first fileKey-verified data (source disclosed), chunked per-category drill-down, and a 5-minute cache (server-only, no plugin re-import). On top of v1.36.0's target lock for multi-file parallel work β β `figma_navigate` takes a `lock: true` flag that pins the active file so an AI agent can work in one file while you work in another without commands routing to the wrong file. On top of v1.35.0's Figma Slots write support β create, inspect, populate, and reset Slots (GA at Config 2026) via 5 new tools (`figma_create_slot`, `figma_get_slots`, `figma_append_to_slot`, `figma_reset_slot`, `figma_add_slot_property`), live-validated against the GA Plugin API and based on community PR #77. On top of v1.34.0's Bidirectional Token Sync v2 + DTCG 2025.10 β `figma_import_tokens` applies the complete diff plan (creates missing collections/variables, applies renames, writes real `VARIABLE_ALIAS` references, and deletes only under explicit `replace`), `figma_export_tokens` speaks the DTCG 2025.10 dialect on request (legacy default byte-identical), variable scopes/codeSyntax round-trip via `$extensions`, `figma_setup_design_tokens` accepts alias values via DTCG brace references, and `figma_create_component_set` builds a full variant set from an axes matrix in one call. On top of the v1.33.x line: version-handshake fix (re-import banner only fires when plugin files actually changed), security dependency sweep, and the v1.33.0 connection UX overhaul (honest status pill derived from live connection state, `/health` auto-discovery with self-healing reconnect) + a 33-fix full-codebase audit (lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes, bridge-first screenshots). Built on WCAG-accurate accessibility auditing (line height below 1.5Γ is no longer mis-flagged as a failure; readability hints decoupled from conformance checks and scoped to multi-line text; code-side WCAG 1.4.12 check), a self-healing Desktop Bridge connection (zombie-process reaper + auto-reconnect watchdog β fixes the recurring "not connected until restart" bug), native variable binding on fills/strokes + typography control in the write tools, shared-library inspection (key-based component resolution + library variable read/import without Enterprise plan), 10-format token export pipeline (DTCG, CSS, Tailwind v4, Tailwind v3, SCSS, TS module, JSON flat/nested, Style Dictionary v3, Tokens Studio), bidirectional Figmaβcode token sync, version history & time-series awareness, FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, **121 tools** (Local) / **101 tools** (Cloud) / **9 tools** (Remote read-only), Comments API, cross-MCP identity disambiguation, and MCP Apps.
|
|
831
844
|
|
|
832
845
|
**Recent Releases:**
|
|
846
|
+
- [x] **v1.40.0** - Design System Extraction. Seven new Local-Mode-only tools that turn a production codebase into a design system, plus the supporting extraction engine. `figma_ds_analyze` scans one or more app codebases: framework/styling/vendor-layer detection (React/Next/Angular/Web Components; Tailwind v3/v4, CSS Modules, SCSS, Emotion, styled-components; shadcn/ui, Radix, MUI, Chakraβ¦), a usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke with prop contracts, variant inference from real call sites, duplicate detection, iconography + typography capture, and an architecture classification separating a UI kit from a design system (atomic levels, specializations like FollowButton β Button, missing generic primitives). `figma_ds_extract_tokens` mines de-facto styling into DTCG tokens β multi-mode CSS custom properties across `.dark`/`[data-theme]` conventions, SCSS variables, Tailwind config values, shadcn HSL triples, Tailwind utility-class frequency mining valued from the app's own theme, frequency-promoted raw values β with per-token provenance in `$extensions`, importable straight into Figma variables via `figma_import_tokens`. `figma_ds_scaffold` generates the package (token files via the shared formatters, token/typography/iconography showcase pages); `figma_ds_setup_storybook` wires a fresh Storybook workshop to the app's real theme layers and fonts; `figma_ds_extract_component` produces per-component porting manifests with CSF3 story scaffolds; `figma_ds_verify` gates the result with deterministic fidelity evals plus Figma round-trip readiness; `figma_ds_status` persists porting progress across sessions. Also fixes the CSS/SCSS/Tailwind v4 formatters quoting CSS functional expressions (a quoted `cubic-bezier(...)` silently kills transitions β affects `figma_export_tokens` too). Server-only, no plugin re-import.
|
|
833
847
|
- [x] **v1.39.1** - Plugin update banner could never be cleared. `computePluginUpdateAvailable()` was a bare inequality with no direction check, so a server whose bundled plugin copy was OLDER than the connected plugin still told the user to re-import β which only ever installs the same or a newer plugin. Not an edge case: the 9223β9232 port range keeps several server instances alive, `BUNDLED_PLUGIN_VERSION` is parsed once at module load, and every server left running from before an upgrade nags a correctly-updated plugin. Reproduced live with four leftover v1.38.2 servers against a freshly re-imported 1.39.0 plugin. Now flags only when the bundled copy is genuinely newer. Server-only, no plugin re-import. 1452 tests.
|
|
834
848
|
- [x] **v1.39.0** - Multi-file execution. New `figma_execute_across_files` runs one script against several Desktop Bridge-connected files concurrently, with per-file error isolation and independent timeouts (verified live: four files Γ 2s of work in ~3.0s, all dispatches within 5ms β versus ~8s serialized). `figma_execute` gained an optional `fileKey` to target a single non-active file without moving the active file or releasing target lock. Targeting is deliberately explicit β `fileKeys` or `allFiles: true`, no fan-out-to-everything default β because this runs arbitrary code in files you may be actively editing, including one pinned by target lock. The transport was already concurrent (`sendCommand` has always taken a target file key, and every hop is request-id keyed); only the tool layer was missing. Community PR #107 by @Wolfr. Also fixes a Desktop Bridge relay bug that silently dropped `resultAnalysis` and `fileContext` from every `figma_execute` response since they were introduced β making the `resultAnalysis.warning` check the tool's own description tells callers to perform impossible β guarded now by a test that reads the real plugin files. **Re-import `manifest.json`** for those two fields; the rest works without it, and mixed plugin versions degrade cleanly. 52 suites / 1443 tests.
|
|
835
849
|
- [x] **v1.38.2** - Connection stability: the orphan reaper was terminating healthy MCP servers, the cause of recurring "Server disconnected" errors across every MCP client (reproduced in both Claude Code and Claude Desktop; unrelated to the Desktop Bridge plugin). The reaper probes a sibling's `/health` before deciding it is dead, but requested `127.0.0.1` while the WebSocket server binds `localhost` β resolved to the IPv6 loopback on dual-stack macOS, with nothing on IPv4 β so the probe reported "nothing responding" for healthy servers and every kill-safety gate built on it became a rubber stamp, including the one written to spare siblings after the machine sleeps. Three supporting defects: port files written non-atomically (a reader landing mid-rewrite got a parse error that both cleanup paths treated as "corrupt, delete it", stranding a healthy server), an orphan path that terminated fileless port-holders without probing at all, and a heartbeat that gave up permanently once its own file went missing. Fixes: probe `localhost`, atomic temp+rename writes, never delete on a parse failure, health-probe before the orphan kill in both paths, and self-healing re-advertisement guarded by in-process port ownership. **Fully restart MCP clients after upgrading** β older running builds keep the broken probe and still terminate healthy siblings. Server-only, no plugin re-import. 1422 tests (7 new regressions, each verified to fail pre-fix).
|
|
@@ -872,7 +886,7 @@ The architecture supports adding new apps with minimal boilerplate β each app
|
|
|
872
886
|
- [ ] **Component template library** - Common UI pattern generation
|
|
873
887
|
- [ ] **Visual regression testing** - Screenshot diff capabilities
|
|
874
888
|
|
|
875
|
-
**π [Full Roadmap](
|
|
889
|
+
**π [Full Roadmap](.notes/ROADMAP.md)**
|
|
876
890
|
|
|
877
891
|
---
|
|
878
892
|
|