@atezer/figma-mcp-bridge 1.7.27 → 1.7.29

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "figma-mcp-bridge",
3
- "version": "1.7.25",
3
+ "version": "1.7.28",
4
4
  "description": "Figma tasarım verilerini 46 MCP aracı ile AI asistanlarına açar. 19 uzman skill, 8 komut. REST API token gerektirmez, Zero Trust mimarisi.",
5
5
  "author": {
6
6
  "name": "Abdussamed Tezer",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "figma-mcp-bridge",
3
- "version": "1.7.25",
3
+ "version": "1.7.28",
4
4
  "description": "Figma tasarim verilerini genis figma_* MCP araclari ile AI asistanlarina acar. Ayrintili liste: docs/TOOLS.md. REST API token gerektirmez (plugin-only), Zero Trust mimarisi.",
5
5
  "author": {
6
6
  "name": "Abdussamed Tezer"
package/CHANGELOG.md CHANGED
@@ -12,6 +12,55 @@ Bu dosya [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/) biçimine uygu
12
12
 
13
13
  Bu changelog'a ekleme öncesi sürümlerin tam ayrıntıları için `git log` kullanılabilir.
14
14
 
15
+ ## [1.7.29] - 2026-04-13
16
+
17
+ ### Smart Port Auto-Increment — Coexistence Fix
18
+
19
+ Birden fazla F-MCP bridge instance (Claude Desktop + Claude Code worktree) artik birbirini oldurmuyor. Yeni instance mevcut bridge'in sagligini kontrol eder ve uygun porta otomatik gecer.
20
+
21
+ **Kor Degisiklik:**
22
+ - `GET /status` endpoint: Client sayisi, uptime, versiyon dondurur — yeni instance'lar saglik kontrolu yapabilir
23
+ - `tryListenWithAutoIncrement()`: Port 5454'ten baslayip 5470'e kadar otomatik deneme
24
+ - Saglikli bridge (clients > 0) → ATLA, sonraki porta gec
25
+ - Yeni baslamis bridge (uptime < 30s) → ATLA (race condition onleme)
26
+ - Stale bridge (0 client, uptime >= 30s) → TAKEOVER (mevcut davranis)
27
+ - Eski versiyon bridge (/status yok) → ATLA (guvenli taraf)
28
+ - Baska servis (non-FMCP) → ATLA
29
+ - `probeStatus()`: Mevcut bridge'in client sayisi ve uptime bilgisini sorgular
30
+ - `sendShutdownRequest()`: Callback tabanli shutdown helper
31
+ - `createBridgeHttpServer()`: HTTP server factory — kod tekrari onlendi
32
+ - `setupBridgeOnServer()`: WebSocket/heartbeat setup — kod tekrari onlendi
33
+
34
+ **figma_get_status Iyilestirmeleri:**
35
+ - `preferredPort`, `autoIncremented` alanlari eklendi
36
+ - `portHint`: Otomatik port gecisi bilgisi gosterir
37
+
38
+ **figma_plugin_diagnostics Iyilestirmeleri:**
39
+ - `preferredPort`, `actualPort`, `autoIncremented` alanlari eklendi
40
+
41
+ **tryListenAsync Timeout:**
42
+ - 5000ms → 30000ms (17 port taramasi icin yeterli sure)
43
+
44
+ **Canli Test Sonuclari:**
45
+ - Port 5454 (Claude Desktop, eski versiyon) → ATLANDI (bilinmeyen saglik)
46
+ - Port 5455 (Claude Code, yeni versiyon) → BAGLANDI, 2 plugin aktif
47
+ - `figma_execute` port 5455 uzerinden basarili (36ms)
48
+ - `GET /status` endpoint: `{"clients":2,"uptime":33,"version":"1.7.29"}` dondu
49
+ - Her iki bridge ayni anda calisir — coexistence dogrulandi
50
+
51
+ **Plugin UI:** Degisiklik gerekmez — zaten 5454-5470 portlarini tarar (`scanOtherPorts()`).
52
+
53
+ ## [1.7.28] - 2026-04-11
54
+
55
+ ### figma_execute Savunmaci Enrichment Fix
56
+
57
+ v1.7.27 canli testinde tespit edilen enrichment kaybi duzeltildi. 6/6 test GECTI.
58
+
59
+ - `categorizeExecuteError()` null-safety: `(message ?? "").toLowerCase()`
60
+ - figma_execute handler'indaki 3 code path'e (success, plugin-error, catch) ic try-catch — `safeToolHandler` dis catch'ine kacan hatalar artik enrichment kaybetmez
61
+ - `.claude-plugin/plugin.json` ve `.cursor-plugin/plugin.json` versiyon senkronizasyonu
62
+ - Canli test sonuclari: errorCategory (SYNTAX/RUNTIME/TIMEOUT), `_metrics` (durationMs, timeoutMs), hint (Turkce cozum onerisi), safeSerialize (`{__figmaNode:true}`)
63
+
15
64
  ## [1.7.27] - 2026-04-11
16
65
 
17
66
  ### figma_execute Hatasiz Calisma — Kok Neden Analizi ve Cozum
@@ -46,6 +95,12 @@ Bu changelog'a ekleme öncesi sürümlerin tam ayrıntıları için `git log` ku
46
95
  - PreToolUse hook: 6 maddelik kontrol listesi (font, sayfa reset, return formati, timeout, findAll, DS)
47
96
  - `PluginExecuteResult` tipi genisletildi: errorCategory, hint, executionMs, resultAnalysis, _metrics
48
97
 
98
+ **Savunmaci Enrichment Fix (canli test sonrasi):**
99
+ - `categorizeExecuteError()` null-safety: `(message ?? "").toLowerCase()`
100
+ - figma_execute handler'indaki 3 code path'e (success, plugin-error, catch) ic try-catch eklendi — `safeToolHandler` dis catch'ine kacan hatalar artik enrichment kaybetmez
101
+ - `.claude-plugin/plugin.json` versiyon senkronizasyonu (1.7.25 → 1.7.27)
102
+ - 6/6 canli test GECTI: errorCategory (SYNTAX/RUNTIME/TIMEOUT), _metrics, hint, safeSerialize
103
+
49
104
  ## [1.7.26] - 2026-04-11
50
105
 
51
106
  ### Performans ve Stabilite Optimizasyonu
@@ -6,9 +6,14 @@
6
6
  * (e.g. Figma Desktop + FigJam browser + Figma browser — all on one port).
7
7
  * Each connected plugin identifies itself with a fileKey; requests are routed accordingly.
8
8
  *
9
- * Port strategy: graceful takeover. If the configured port is busy with another
10
- * F-MCP instance, the server sends a /shutdown request to the old bridge and
11
- * retries after it exits. Stale ports get one automatic retry after a short delay.
9
+ * Port strategy: smart auto-increment with coexistence.
10
+ * - If the preferred port (default 5454) is occupied by a HEALTHY F-MCP bridge
11
+ * (active clients), the server skips to the next port (5455, 5456, …).
12
+ * - If the port is occupied by a STALE F-MCP bridge (0 clients, uptime ≥ 30s),
13
+ * the server sends a /shutdown request and takes over.
14
+ * - If the port is occupied by a non-F-MCP service or unresponsive process,
15
+ * the server skips to the next port.
16
+ * - The Figma plugin scans all ports 5454–5470 automatically.
12
17
  */
13
18
  import { type WebSocket } from "ws";
14
19
  export interface BridgeRequest {
@@ -79,12 +84,14 @@ export declare class PluginBridgeServer {
79
84
  port: number;
80
85
  error?: string;
81
86
  }>;
82
- /** Async listen attempt — resolves when port binds successfully or fails. */
87
+ /** Async listen attempt — resolves when port binds successfully or all ports exhausted. */
83
88
  private tryListenAsync;
84
89
  /** Internal resolve callback for async listen flow. */
85
90
  private _listenResolve;
86
91
  /** Currently listening port (or preferred port if not yet listening). */
87
92
  getPort(): number;
93
+ /** User/config preferred port before auto-increment fallback. */
94
+ getPreferredPort(): number;
88
95
  /** Whether WebSocket server is actively listening. */
89
96
  isListening(): boolean;
90
97
  private generateClientId;
@@ -98,11 +105,45 @@ export declare class PluginBridgeServer {
98
105
  * Returns "fmcp" | "other" | "dead".
99
106
  */
100
107
  private probePort;
108
+ /**
109
+ * Probe a live F-MCP bridge's /status endpoint to get its health info.
110
+ * Returns { clients, uptime } or { -1, -1 } if the endpoint is unavailable
111
+ * (e.g. older bridge version without /status).
112
+ */
113
+ private probeStatus;
114
+ /**
115
+ * Send a POST /shutdown to an old F-MCP bridge. Calls onAccepted if the bridge
116
+ * responds with 200, or onRefused otherwise. On error/timeout, assumes the bridge
117
+ * may have already exited and calls onAccepted.
118
+ */
119
+ private sendShutdownRequest;
101
120
  /**
102
121
  * Send a POST /shutdown to an old F-MCP bridge on the given port,
103
122
  * wait for it to exit, then retry binding to the same port.
123
+ * @deprecated Legacy method — kept for backward compatibility. New code uses sendShutdownRequest + tryListenWithAutoIncrement.
104
124
  */
105
125
  private requestShutdownAndRetry;
126
+ /** Create an HTTP server with /shutdown, /status, and default F-MCP marker endpoints. */
127
+ private createBridgeHttpServer;
128
+ /**
129
+ * Set up WebSocket server, heartbeat, client handling on a successfully bound HTTP server.
130
+ * Called from both tryListenFixed and tryListenWithAutoIncrement on bind success.
131
+ */
132
+ private setupBridgeOnServer;
133
+ /**
134
+ * Try to bind starting from `port`, auto-incrementing through the valid range.
135
+ * - Healthy F-MCP bridges (active clients) are skipped.
136
+ * - Stale F-MCP bridges (0 clients, uptime ≥ 30s) are taken over.
137
+ * - Freshly started bridges (0 clients, uptime < 30s) are skipped.
138
+ * - Unknown/old-version bridges and non-F-MCP services are skipped.
139
+ *
140
+ * `_listenResolve` is called exactly once: on success or when all ports are exhausted.
141
+ */
142
+ private tryListenWithAutoIncrement;
143
+ /**
144
+ * @deprecated Legacy method — new startup uses tryListenWithAutoIncrement().
145
+ * Kept for backward compatibility with requestShutdownAndRetry retry path.
146
+ */
106
147
  private tryListenFixed;
107
148
  /**
108
149
  * Send a request to a plugin and wait for the response.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAerD,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAWD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAK;IAE5B,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAmC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,UAAU,CAAS;IAE3B,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ7D,6DAA6D;IAC7D,OAAO,CAAC,oBAAoB;IAO5B,gFAAgF;IAChF,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,IAAI,CAAS;IAErB,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAAuB;IAEzC,KAAK,IAAI,IAAI;IAUb,qDAAqD;IACrD,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,mJAAmJ;IAC7I,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAS3F,2FAA2F;IAC3F,OAAO,CAAC,cAAc;IAuBtB,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAA6C;IAEnE,yEAAyE;IACzE,OAAO,IAAI,MAAM;IAIjB,iEAAiE;IACjE,gBAAgB,IAAI,MAAM;IAI1B,sDAAsD;IACtD,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAcjB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAoBnB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IA0C/B,yFAAyF;IACzF,OAAO,CAAC,sBAAsB;IAmC9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyJ3B;;;;;;;;OAQG;IACH,OAAO,CAAC,0BAA0B;IAqHlC;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2DtB;;;;OAIG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiD1G,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAWtC,kBAAkB,IAAI,iBAAiB,EAAE;IAezC,oBAAoB,IAAI,MAAM;IAQ9B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,gBAAgB;IAYxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAatC,mBAAmB,IAAI,IAAI;IAY3B,iBAAiB,IAAI,kBAAkB,GAAG,IAAI;IAI9C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAcxE,IAAI,IAAI,IAAI;CAoBZ"}