@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.
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CHANGELOG.md +55 -0
- package/dist/core/plugin-bridge-server.d.ts +45 -4
- package/dist/core/plugin-bridge-server.d.ts.map +1 -1
- package/dist/core/plugin-bridge-server.js +367 -142
- package/dist/core/plugin-bridge-server.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/local-plugin-only.d.ts.map +1 -1
- package/dist/local-plugin-only.js +41 -13
- package/dist/local-plugin-only.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "figma-mcp-bridge",
|
|
3
|
-
"version": "1.7.
|
|
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.
|
|
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:
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"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"}
|