@atezer/figma-mcp-bridge 1.6.5 → 1.7.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/CHANGELOG.md CHANGED
@@ -12,6 +12,20 @@ Bu dosya [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/) bicimine uygun
12
12
 
13
13
  Bu changelog'a ekleme oncesi surumlerin tam ayrintilari icin `git log` kullanilabilir.
14
14
 
15
+ ## [1.7.0] - 2026-04-03
16
+
17
+ ### Coklu Port + Otomatik AI Araci Tespiti (YENi)
18
+
19
+ - **Plugin coklu port baglantisi:** 5454-5470 arasini periyodik tarar (10s), bulunan tum bridge'lere sessizce baglanir.
20
+ - **AI araci otomatik tespiti:** Bridge parent process'ten (Claude, Cursor, Claude Code, Windsurf) veya `FIGMA_MCP_CLIENT_NAME` env var'dan otomatik tespit. Welcome mesajinda `clientName` gonderilir.
21
+ - **Port gecis UI:** ◀▶ ok tuslariyla bagli portlar arasi gecis. Status bar'da "Ready" + aktif port etiketi.
22
+ - **(i) info paneli:** Tiklaninca bagli portlar listesi acilir (● aktif ○ digerleri).
23
+ - **"Otomatik tara" butonu kaldirildi:** Coklu port bunu otomatik yapar.
24
+ - **SVG/PNG export duzeltmesi:** `batchExportNodes` handler + result case eklendi (timeout sorunu cozuldu).
25
+ - **Token disabled:** Token girildikten sonra input + sure secici disabled (sadece sil + yeniden ekle).
26
+ - **Responsive layout:** Icerik tasma onlendi, sabit genislik sadece yukseklik dinamik.
27
+ - **Plugin max height:** 420→700 (icerik kesilmez).
28
+
15
29
  ## [1.6.3] - 2026-04-03
16
30
 
17
31
  ### Dokumantasyon temizligi
package/README.md CHANGED
@@ -165,7 +165,7 @@ Detaylı sorun giderme: [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
165
165
 
166
166
  | Bilgi | Kaynak |
167
167
  |-------|--------|
168
- | Güncel sürüm | **1.6.5** ([package.json](package.json)) |
168
+ | Güncel sürüm | **1.7.0** ([package.json](package.json)) |
169
169
  | Değişiklik geçmişi | [CHANGELOG.md](CHANGELOG.md) |
170
170
  | GitHub sürümleri | [Releases](https://github.com/atezer/FMCP/releases) |
171
171
  | npm paketi | [@atezer/figma-mcp-bridge](https://www.npmjs.com/package/@atezer/figma-mcp-bridge) |
@@ -56,11 +56,15 @@ export declare class PluginBridgeServer {
56
56
  private clientIdCounter;
57
57
  /** Figma REST API token (in-memory only, never written to disk). */
58
58
  private figmaRestToken;
59
+ /** AI client name detected from parent process (Claude, Cursor, etc.) */
60
+ private readonly clientName;
59
61
  /** User/config preferred port (before clamp and fallback). */
60
62
  private readonly preferredPort;
61
63
  constructor(port: number, options?: {
62
64
  auditLogPath?: string;
63
65
  });
66
+ /** Detect AI client name by env vars and process tree. */
67
+ private detectClientName;
64
68
  private port;
65
69
  /** Last error message when bridge could not bind (port conflict, etc.) */
66
70
  private startError;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAUrD,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,CAA+C;IACrE,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAK;IAE5B,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAmC;IAEzD,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAM7D,OAAO,CAAC,IAAI,CAAS;IAErB,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAAuB;IAEzC,KAAK,IAAI,IAAI;IASb,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,6EAA6E;IAC7E,OAAO,CAAC,cAAc;IAsBtB,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAA6C;IAEnE,yEAAyE;IACzE,OAAO,IAAI,MAAM;IAIjB,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,OAAO,CAAC,cAAc;IAkNtB;;;;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"}
1
+ {"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAWrD,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,CAA+C;IACrE,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAK;IAE5B,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAmC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ7D,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,IAAI,CAAS;IAErB,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAAuB;IAEzC,KAAK,IAAI,IAAI;IASb,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,6EAA6E;IAC7E,OAAO,CAAC,cAAc;IAsBtB,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAA6C;IAEnE,yEAAyE;IACzE,OAAO,IAAI,MAAM;IAIjB,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,OAAO,CAAC,cAAc;IAmNtB;;;;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"}
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { WebSocketServer } from "ws";
14
14
  import { createServer, get as httpGet } from "http";
15
+ import { execSync } from "child_process";
15
16
  import { logger } from "./logger.js";
16
17
  import { auditTool, auditPlugin } from "./audit-log.js";
17
18
  const HEARTBEAT_INTERVAL_MS = 3000;
@@ -37,6 +38,39 @@ export class PluginBridgeServer {
37
38
  this.preferredPort = clamped;
38
39
  this.port = clamped;
39
40
  this.auditLogPath = options?.auditLogPath;
41
+ this.clientName = this.detectClientName();
42
+ }
43
+ /** Detect AI client name by env vars and process tree. */
44
+ detectClientName() {
45
+ // 1. Explicit env var (highest priority)
46
+ if (process.env.FIGMA_MCP_CLIENT_NAME)
47
+ return process.env.FIGMA_MCP_CLIENT_NAME;
48
+ // 2. Claude Code env detection
49
+ if (process.env.CLAUDECODE === "1")
50
+ return "Claude Code";
51
+ // 3. Cursor env detection
52
+ if (process.env.CURSOR_TRACE_ID || process.env.VSCODE_PID) {
53
+ if (process.env.CURSOR_TRACE_ID)
54
+ return "Cursor";
55
+ }
56
+ // 4. Walk up process tree (max 5 levels)
57
+ try {
58
+ let pid = process.ppid;
59
+ for (let i = 0; i < 5 && pid > 1; i++) {
60
+ const line = execSync(`ps -p ${pid} -o ppid=,comm=`, { timeout: 1000 }).toString().trim();
61
+ const comm = line.replace(/^\s*\d+\s+/, "");
62
+ const ppidMatch = line.match(/^\s*(\d+)/);
63
+ if (/[Cc]ursor/i.test(comm))
64
+ return "Cursor";
65
+ if (/[Cc]laude/i.test(comm))
66
+ return "Claude";
67
+ if (/[Ww]indsurf/i.test(comm))
68
+ return "Windsurf";
69
+ pid = ppidMatch ? parseInt(ppidMatch[1], 10) : 0;
70
+ }
71
+ }
72
+ catch { /* ignore */ }
73
+ return "MCP";
40
74
  }
41
75
  start() {
42
76
  if (this.wss) {
@@ -247,10 +281,11 @@ export class PluginBridgeServer {
247
281
  logger.info({ clientId, fileKey: incomingFileKey, fileName: incomingFileName }, "Plugin bridge: client registered (fileKey=%s, fileName=%s)", incomingFileKey, incomingFileName);
248
282
  ws.send(JSON.stringify({
249
283
  type: "welcome",
250
- bridgeVersion: "1.6.5",
284
+ bridgeVersion: "1.7.0",
251
285
  port: this.port,
252
286
  clientId,
253
287
  multiClient: true,
288
+ clientName: this.clientName,
254
289
  }));
255
290
  return;
256
291
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-bridge-server.js","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-bridge-server.js","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"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"}
@@ -89,7 +89,7 @@ export async function main() {
89
89
  bridge.start();
90
90
  const server = new McpServer({
91
91
  name: "F-MCP ATezer Bridge (Plugin-only)",
92
- version: "1.6.5",
92
+ version: "1.7.0",
93
93
  });
94
94
  // ---- figma_list_connected_files (multi-client discovery) ----
95
95
  server.registerTool("figma_list_connected_files", {
package/dist/local.js CHANGED
@@ -48,7 +48,7 @@ class LocalFigmaMCP {
48
48
  this.variablesCache = new Map();
49
49
  this.server = new McpServer({
50
50
  name: "F-MCP ATezer (Local)",
51
- version: "1.6.5",
51
+ version: "1.7.0",
52
52
  });
53
53
  }
54
54
  /**
@@ -20,7 +20,7 @@ console.error = function() { _pushLog('error', arguments); _origError.apply(cons
20
20
  console.log('🌉 [F-MCP ATezer Bridge] Plugin loaded and ready');
21
21
 
22
22
  // Start compact; UI asks for dynamic resize based on content.
23
- figma.showUI(__html__, { width: 280, height: 96, visible: true, themeColors: true });
23
+ figma.showUI(__html__, { width: 200, height: 96, visible: true, themeColors: true });
24
24
 
25
25
  // Send file identity to UI so it can include it in the WebSocket handshake
26
26
  figma.ui.postMessage({
@@ -219,8 +219,8 @@ figma.ui.onmessage = async (msg) => {
219
219
  try {
220
220
  var requestedWidth = Number(msg.width);
221
221
  var requestedHeight = Number(msg.height);
222
- var width = Math.max(220, Math.min(520, Math.round(isNaN(requestedWidth) ? 280 : requestedWidth)));
223
- var height = Math.max(72, Math.min(420, Math.round(isNaN(requestedHeight) ? 96 : requestedHeight)));
222
+ var width = Math.max(200, Math.min(520, Math.round(isNaN(requestedWidth) ? 200 : requestedWidth)));
223
+ var height = Math.max(72, Math.min(700, Math.round(isNaN(requestedHeight) ? 96 : requestedHeight)));
224
224
  figma.ui.resize(width, height);
225
225
  } catch (error) {
226
226
  console.warn('🌉 [F-MCP ATezer Bridge] UI resize failed:', error && error.message ? error.message : String(error));
@@ -10,9 +10,10 @@
10
10
  }
11
11
 
12
12
  html, body {
13
- width: auto;
13
+ width: 100%;
14
14
  height: auto;
15
- overflow: hidden;
15
+ overflow-x: hidden;
16
+ overflow-y: auto;
16
17
  }
17
18
 
18
19
  body {
@@ -20,7 +21,8 @@
20
21
  font-size: 11px;
21
22
  background: var(--figma-color-bg, #2c2c2c);
22
23
  color: var(--figma-color-text, rgba(255, 255, 255, 0.9));
23
- width: auto;
24
+ width: 100%;
25
+ max-width: 100%;
24
26
  height: auto;
25
27
  padding: 8px;
26
28
  user-select: none;
@@ -30,11 +32,9 @@
30
32
  display: flex;
31
33
  flex-direction: column;
32
34
  gap: 8px;
33
- width: max-content;
34
- max-width: 100%;
35
+ width: 100%;
35
36
  min-height: 0;
36
37
  overflow: visible;
37
- padding-right: 2px;
38
38
  }
39
39
 
40
40
  .bridge-status {
@@ -202,8 +202,12 @@
202
202
  <div class="status-text">
203
203
  <span class="label">MCP</span>
204
204
  <span class="state" id="status-state">connecting</span>
205
+ <span id="status-info-btn" onclick="var p=document.getElementById('connections-panel');if(p){p.style.display=p.style.display==='block'?'none':'block';requestUiResize();}" style="display:none;cursor:pointer;margin-left:4px;font-size:9px;width:13px;height:13px;border-radius:50%;border:1px solid rgba(255,255,255,0.25);color:rgba(255,255,255,0.4);text-align:center;line-height:13px;user-select:none;">i</span>
205
206
  </div>
206
207
  </div>
208
+ <div id="connections-panel" style="display:none;padding:6px 10px;background:rgba(255,255,255,0.04);border-radius:5px;font-size:9px;color:rgba(255,255,255,0.4);line-height:1.6;">
209
+ <div id="connections-panel-list">—</div>
210
+ </div>
207
211
  <div class="advanced-wrap">
208
212
  <button id="advanced-toggle" class="advanced-toggle" type="button">Advanced</button>
209
213
  <span id="advanced-state" class="advanced-state">auto port</span>
@@ -217,11 +221,15 @@
217
221
  <label for="mcp-port">Port</label>
218
222
  <input type="number" id="mcp-port" min="5454" max="5470" value="5454" aria-label="MCP bridge port (auto fallback 5454-5470)" title="Elle değiştirirseniz tek porta kilitlenir; Otomatik tara veya Advanced'ı kapatın." />
219
223
  </div>
220
- <button type="button" id="auto-port-reset" class="auto-port-reset" title="Tek porta kilitlenmeyi kaldırır; 5454–5470 yeniden taranır (Claude config portu ile eşleşmeli)." aria-label="5454 ile 5470 arası otomatik port taraması">Otomatik tara</button>
224
+ <div id="port-switcher" style="display:flex;align-items:center;gap:4px;margin-top:4px;">
225
+ <button type="button" id="port-prev" onclick="switchActivePort(-1)" style="font-size:10px;padding:1px 5px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:3px;color:rgba(255,255,255,0.5);cursor:pointer;">◀</button>
226
+ <span id="port-label" style="font-size:10px;color:rgba(255,255,255,0.4);flex:1;text-align:center;">—</span>
227
+ <button type="button" id="port-next" onclick="switchActivePort(1)" style="font-size:10px;padding:1px 5px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:3px;color:rgba(255,255,255,0.5);cursor:pointer;">▶</button>
228
+ </div>
221
229
  <div class="api-token-section" style="margin-top:8px;border-top:1px solid rgba(255,255,255,0.08);padding-top:8px;">
222
230
  <div style="display:flex;align-items:center;gap:6px;">
223
231
  <label for="figma-token" style="font-size:11px;color:rgba(255,255,255,0.5);white-space:nowrap;">API Token</label>
224
- <input type="password" id="figma-token" placeholder="figd_..." style="flex:1;font-size:11px;padding:3px 6px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:4px;color:#fff;outline:none;" aria-label="Figma REST API token" />
232
+ <input type="password" id="figma-token" placeholder="figd_..." style="flex:1;min-width:0;font-size:11px;padding:3px 6px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:4px;color:#fff;outline:none;" aria-label="Figma REST API token" />
225
233
  <select id="token-expiry" style="font-size:10px;padding:2px 3px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:3px;color:rgba(255,255,255,0.6);outline:none;" title="Token süresi (Figma'da seçtiğiniz süre)">
226
234
  <option value="90">90g</option>
227
235
  <option value="30">30g</option>
@@ -278,9 +286,11 @@
278
286
  function updateStatus(state, isActive, isError) {
279
287
  const dot = document.getElementById('status-dot');
280
288
  const stateText = document.getElementById('status-state');
289
+ const infoBtn = document.getElementById('status-info-btn');
281
290
 
282
291
  dot.className = 'status-indicator ' + (isError ? 'error' : (isActive ? 'active' : 'loading'));
283
292
  stateText.textContent = state;
293
+ if (infoBtn) infoBtn.style.display = isActive ? 'inline-block' : 'none';
284
294
  requestUiResize();
285
295
  }
286
296
 
@@ -295,7 +305,7 @@
295
305
  var bodyStyle = window.getComputedStyle(document.body);
296
306
  var padX = (parseFloat(bodyStyle.paddingLeft) || 0) + (parseFloat(bodyStyle.paddingRight) || 0);
297
307
  var padY = (parseFloat(bodyStyle.paddingTop) || 0) + (parseFloat(bodyStyle.paddingBottom) || 0);
298
- var width = Math.ceil(Math.max(root.scrollWidth, rect.width) + padX + 6);
308
+ var width = Math.min(300, Math.max(200, Math.ceil(root.scrollWidth + padX + 6)));
299
309
  var height = Math.ceil(Math.max(root.scrollHeight, rect.height) + padY + 6);
300
310
  parent.postMessage({ pluginMessage: { type: 'RESIZE_UI', width: width, height: height } }, '*');
301
311
  });
@@ -595,6 +605,18 @@
595
605
  .catch(function(err) { return { success: false, error: err.message || String(err) }; });
596
606
  };
597
607
 
608
+ // Batch export nodes as SVG/PNG/JPG/PDF with base64
609
+ window.batchExportNodes = (nodeIds, format, scale, svgOutlineText, svgIncludeId, svgSimplifyStroke) => {
610
+ return window.sendPluginCommand('BATCH_EXPORT_NODES', {
611
+ nodeIds: nodeIds,
612
+ format: format || 'PNG',
613
+ scale: scale || 2,
614
+ svgOutlineText: svgOutlineText,
615
+ svgIncludeId: svgIncludeId,
616
+ svgSimplifyStroke: svgSimplifyStroke
617
+ }, 60000).then(function(r) { return r && r.data ? r.data : r; });
618
+ };
619
+
598
620
  // Set component instance properties (TEXT, BOOLEAN, INSTANCE_SWAP, VARIANT)
599
621
  // This is the correct way to update component instances vs direct text node editing
600
622
  window.setInstanceProperties = (nodeId, properties) => {
@@ -652,6 +674,10 @@
652
674
  } else {
653
675
  updateTokenUI(true, null, expiresAt);
654
676
  window.__pendingRestoreToken = msg.token;
677
+ // Restored token — disable input
678
+ if (tokenEl) { tokenEl.disabled = true; tokenEl.style.opacity = '0.5'; }
679
+ var expSel2 = document.getElementById('token-expiry');
680
+ if (expSel2) { expSel2.disabled = true; expSel2.style.opacity = '0.5'; }
655
681
  }
656
682
  console.log('[F-MCP] Token restored from clientStorage' + (isExpired ? ' (EXPIRED)' : '') + (expiresAt ? ' expires: ' + new Date(expiresAt).toLocaleDateString() : ''));
657
683
  }
@@ -669,9 +695,10 @@
669
695
  window.__figmaVariablesData = msg.data;
670
696
  window.__figmaVariablesReady = true;
671
697
  if (mcpConnectedPort) {
672
- updateStatus('ready (:' + mcpConnectedPort + ')', true, false);
698
+ var _cn = mcpConnections.get(mcpConnectedPort);
699
+ updateStatus('Ready', true, false);
673
700
  } else {
674
- updateStatus('ready', true, false);
701
+ updateStatus('Ready', true, false);
675
702
  }
676
703
  console.log('[F-MCP ATezer Bridge] Active - ' + (msg.data.variables?.length || 0) + ' vars');
677
704
  break;
@@ -790,6 +817,9 @@
790
817
  case 'CAPTURE_SCREENSHOT_RESULT':
791
818
  handleResult('CAPTURE_SCREENSHOT', 'image');
792
819
  break;
820
+ case 'BATCH_EXPORT_NODES_RESULT':
821
+ handleResult('BATCH_EXPORT_NODES', null);
822
+ break;
793
823
  case 'SET_INSTANCE_PROPERTIES_RESULT':
794
824
  handleResult('SET_INSTANCE_PROPERTIES', 'instance');
795
825
  break;
@@ -899,6 +929,11 @@
899
929
  var candidatePorts = [];
900
930
  var candidatePortIndex = 0;
901
931
 
932
+ // Multi-port connection tracking (Adım 2: tanım, henüz kullanılmaz)
933
+ // ConnectionState: { ws, port, clientName, status, handshakeTimer, keepaliveTimer }
934
+ var mcpConnections = new Map();
935
+ var mcpActivePort = null;
936
+
902
937
  /** Port alanı elle değiştirilince manualPortLocked=true olur; bu kilit 5454–5470 taramasını durdurur. */
903
938
  function unlockAutoPortScan() {
904
939
  manualPortLocked = false;
@@ -1032,6 +1067,11 @@
1032
1067
  mcpBridgeWs.send(JSON.stringify({ type: 'setToken', token: token }));
1033
1068
  }
1034
1069
  updateTokenUI(true, null, expiresAt);
1070
+ // Token girildi — input ve süre seçici disabled
1071
+ el.disabled = true;
1072
+ el.style.opacity = '0.5';
1073
+ var expSel = document.getElementById('token-expiry');
1074
+ if (expSel) { expSel.disabled = true; expSel.style.opacity = '0.5'; }
1035
1075
  } else {
1036
1076
  updateTokenUI(false, null, 0);
1037
1077
  }
@@ -1039,7 +1079,9 @@
1039
1079
  }
1040
1080
  if (clearBtn) {
1041
1081
  clearBtn.addEventListener('click', function() {
1042
- if (el) el.value = '';
1082
+ if (el) { el.value = ''; el.disabled = false; el.style.opacity = '1'; }
1083
+ var expSel = document.getElementById('token-expiry');
1084
+ if (expSel) { expSel.disabled = false; expSel.style.opacity = '1'; }
1043
1085
  __tokenExpiresAt = 0;
1044
1086
  // Delete from Figma clientStorage
1045
1087
  parent.postMessage({ pluginMessage: { type: 'DELETE_TOKEN' } }, '*');
@@ -1249,8 +1291,8 @@
1249
1291
  candidatePorts = [mcpConnectedPort];
1250
1292
  candidatePortIndex = 0;
1251
1293
  }
1252
- console.log('[F-MCP ATezer Bridge] Handshake OK — bridge v' + (msg.bridgeVersion || '?') + ' on port ' + mcpConnectedPort);
1253
- updateStatus('ready (:' + mcpConnectedPort + ')', true, false);
1294
+ console.log('[F-MCP ATezer Bridge] Handshake OK — bridge v' + (msg.bridgeVersion || '?') + ' on port ' + mcpConnectedPort + ' (' + (msg.clientName || 'MCP') + ')');
1295
+ updateStatus('Ready', true, false);
1254
1296
  // Resend restored token to bridge after handshake
1255
1297
  if (window.__pendingRestoreToken && currentWs && currentWs.readyState === 1) {
1256
1298
  currentWs.send(JSON.stringify({ type: 'setToken', token: window.__pendingRestoreToken }));
@@ -1261,6 +1303,19 @@
1261
1303
  if (!window.__pendingRestoreToken && tokenInput && tokenInput.value && currentWs && currentWs.readyState === 1) {
1262
1304
  currentWs.send(JSON.stringify({ type: 'setToken', token: tokenInput.value.trim() }));
1263
1305
  }
1306
+ // Adım 3: Bağlantıyı connections Map'e kaydet (gözlemci, hiçbir fonksiyon okumaz)
1307
+ mcpConnections.set(mcpConnectedPort, {
1308
+ ws: currentWs,
1309
+ port: mcpConnectedPort,
1310
+ clientName: msg.clientName || 'MCP',
1311
+ status: 'ready'
1312
+ });
1313
+ mcpActivePort = mcpConnectedPort;
1314
+ // Adım 4: Ana bağlantı hazır — diğer portları da tara (ilk + periyodik)
1315
+ setTimeout(function() { if (typeof scanOtherPorts === 'function') scanOtherPorts(); }, 500);
1316
+ if (!extraPortScanTimer) {
1317
+ extraPortScanTimer = setInterval(function() { if (typeof scanOtherPorts === 'function') scanOtherPorts(); }, 10000);
1318
+ }
1264
1319
  return;
1265
1320
  }
1266
1321
  if (msg.type === 'tokenStatus') {
@@ -1391,6 +1446,9 @@
1391
1446
  if (method === 'captureScreenshot') {
1392
1447
  return window.captureScreenshot(params.nodeId, params.options);
1393
1448
  }
1449
+ if (method === 'batchExportNodes') {
1450
+ return window.batchExportNodes(params.nodeIds, params.format, params.scale, params.svgOutlineText, params.svgIncludeId, params.svgSimplifyStroke);
1451
+ }
1394
1452
  if (method === 'setInstanceProperties') {
1395
1453
  return window.setInstanceProperties(params.nodeId, params.properties);
1396
1454
  }
@@ -1441,6 +1499,8 @@
1441
1499
  };
1442
1500
  mcpBridgeWs.onclose = function() {
1443
1501
  stopKeepAlive();
1502
+ // Adım 3: Bağlantıyı Map'ten sil
1503
+ if (mcpConnectedPort) mcpConnections.delete(mcpConnectedPort);
1444
1504
  if (mcpBridgeWs !== currentWs) return;
1445
1505
  mcpBridgeWs = null;
1446
1506
  mcpConnecting = false;
@@ -1464,6 +1524,247 @@
1464
1524
  }
1465
1525
  }
1466
1526
 
1527
+ // ---- Adım 4: Ek portlara bağlantı (mevcut connectMcpBridge DEĞİŞMEZ) ----
1528
+
1529
+ var extraPortScanTimer = null;
1530
+
1531
+ /**
1532
+ * Ek porta bağlan — connectMcpBridge'in basitleştirilmiş kopyası.
1533
+ * Kendi ws/closure/timer'ına sahip. Mevcut mcpBridgeWs'e DOKUNMAZ.
1534
+ * Başarısız olursa sessizce kapanır (retry yok).
1535
+ */
1536
+ function connectToExtraPort(port, host) {
1537
+ if (mcpConnections.has(port)) return; // zaten bağlı
1538
+ if (port === mcpConnectedPort) return; // ana bağlantı bunu yönetiyor
1539
+ var url = 'ws://' + (host || getMcpBridgeHost()) + ':' + port;
1540
+ var handshakeOk = false;
1541
+ var handshakeTimer = null;
1542
+ var keepaliveTimer = null;
1543
+ try {
1544
+ var ws = new WebSocket(url);
1545
+
1546
+ ws.onopen = function() {
1547
+ ws.send(JSON.stringify({
1548
+ type: 'ready',
1549
+ fileKey: window.__figmaFileKey || null,
1550
+ fileName: window.__figmaFileName || null
1551
+ }));
1552
+ handshakeTimer = setTimeout(function() {
1553
+ if (!handshakeOk) { try { ws.close(); } catch(e) {} }
1554
+ }, 3000);
1555
+ };
1556
+
1557
+ ws.onmessage = function(event) {
1558
+ try {
1559
+ var msg = JSON.parse(event.data);
1560
+
1561
+ if (msg.type === 'welcome') {
1562
+ handshakeOk = true;
1563
+ if (handshakeTimer) { clearTimeout(handshakeTimer); handshakeTimer = null; }
1564
+ var connPort = msg.port || port;
1565
+ mcpConnections.set(connPort, {
1566
+ ws: ws,
1567
+ port: connPort,
1568
+ clientName: msg.clientName || 'MCP',
1569
+ status: 'ready'
1570
+ });
1571
+ // Token gönder (per-connection)
1572
+ var tokenInput = document.getElementById('figma-token');
1573
+ if (tokenInput && tokenInput.value && ws.readyState === 1) {
1574
+ ws.send(JSON.stringify({ type: 'setToken', token: tokenInput.value.trim() }));
1575
+ }
1576
+ // Keepalive başlat
1577
+ keepaliveTimer = setInterval(function() {
1578
+ if (ws.readyState === 1) {
1579
+ try { ws.send(JSON.stringify({ type: 'keepalive' })); } catch(e) {}
1580
+ }
1581
+ }, 5000);
1582
+ console.log('[F-MCP] Extra port connected: ' + connPort + ' (' + (msg.clientName || 'MCP') + ')');
1583
+ return;
1584
+ }
1585
+
1586
+ if (msg.type === 'ping') {
1587
+ if (ws.readyState === 1) {
1588
+ try { ws.send(JSON.stringify({ type: 'pong' })); } catch(e) {}
1589
+ }
1590
+ return;
1591
+ }
1592
+
1593
+ if (msg.type === 'tokenStatus') return; // UI güncelleme sadece ana bağlantıda
1594
+
1595
+ // Request handler — wsRef olarak BU bağlantının ws'ini kullan
1596
+ if (!msg.id || !msg.method) return;
1597
+ var id = msg.id;
1598
+ var method = msg.method;
1599
+ var params = msg.params || {};
1600
+ // run() fonksiyonu ana onmessage ile AYNI — window.* fonksiyonlarını çağırır
1601
+ var run = function() {
1602
+ if (method === 'getVariablesFromPluginUI') return window.refreshVariables().then(function(r) { if (r && r.success === false) return r; if (!window.__figmaVariablesData) return { success: false, error: 'Variables not loaded' }; return { success: true, variables: window.__figmaVariablesData.variables, variableCollections: window.__figmaVariablesData.variableCollections }; });
1603
+ if (method === 'getComponentFromPluginUI' || method === 'getComponentByNodeId') return window.requestComponentData(params.nodeId).then(function(d) { return { success: true, component: d }; });
1604
+ if (method === 'getVariables') { if (!window.__figmaVariablesReady || !window.__figmaVariablesData) return { success: false, error: 'Variables not loaded' }; return { success: true, timestamp: Date.now(), variables: window.__figmaVariablesData.variables, variableCollections: window.__figmaVariablesData.variableCollections }; }
1605
+ if (method === 'executeCodeViaUI') return window.executeCode(params.code, params.timeout);
1606
+ if (method === 'updateVariable') return window.updateVariable(params.variableId, params.modeId, params.value);
1607
+ if (method === 'createVariable') return window.createVariable(params.name, params.collectionId, params.resolvedType, params.options);
1608
+ if (method === 'createVariableCollection') return window.createVariableCollection(params.name, params.options);
1609
+ if (method === 'deleteVariable') return window.deleteVariable(params.variableId);
1610
+ if (method === 'deleteVariableCollection') return window.deleteVariableCollection(params.collectionId);
1611
+ if (method === 'renameVariable') return window.renameVariable(params.variableId, params.newName);
1612
+ if (method === 'addMode') return window.addMode(params.collectionId, params.modeName);
1613
+ if (method === 'renameMode') return window.renameMode(params.collectionId, params.modeId, params.newName);
1614
+ if (method === 'refreshVariables') return window.refreshVariables();
1615
+ if (method === 'getLocalComponents') return window.getLocalComponents(params.currentPageOnly, params.limit);
1616
+ if (method === 'searchLibraryAssets') return window.searchLibraryAssets(params.query, params.assetTypes, params.limit, params.currentPageOnly);
1617
+ if (method === 'instantiateComponent') return window.instantiateComponent(params.componentKey, params.options);
1618
+ if (method === 'setNodeDescription') return window.setNodeDescription(params.nodeId, params.description, params.descriptionMarkdown);
1619
+ if (method === 'captureScreenshot') return window.captureScreenshot(params.nodeId, params.options);
1620
+ if (method === 'batchExportNodes') return window.batchExportNodes(params.nodeIds, params.format, params.scale, params.svgOutlineText, params.svgIncludeId, params.svgSimplifyStroke);
1621
+ if (method === 'setInstanceProperties') return window.setInstanceProperties(params.nodeId, params.properties);
1622
+ if (method === 'getDocumentStructure') return window.getDocumentStructure(params.depth, params.verbosity, params.includeLayout, params.includeVisual, params.includeTypography, params.includeCodeReady, params.outputHint);
1623
+ if (method === 'getNodeContext') return window.getNodeContext(params.nodeId, params.depth, params.verbosity, params.includeLayout, params.includeVisual, params.includeTypography, params.includeCodeReady, params.outputHint);
1624
+ if (method === 'getLocalStyles') return window.getLocalStyles(params.verbosity);
1625
+ if (method === 'getConsoleLogs') return window.getConsoleLogs(params.limit);
1626
+ if (method === 'clearConsole') return window.clearConsole();
1627
+ if (method === 'batchCreateVariables') return window.batchCreateVariables(params.items);
1628
+ if (method === 'batchUpdateVariables') return window.batchUpdateVariables(params.items);
1629
+ if (method === 'setupDesignTokens') return window.setupDesignTokens(params);
1630
+ if (method === 'arrangeComponentSet') return window.arrangeComponentSet(params.nodeIds);
1631
+ if (method === 'addComponentProperty') return window.addComponentProperty(params.nodeId, params.propertyName, params.type, params.defaultValue, params.options);
1632
+ if (method === 'editComponentProperty') return window.editComponentProperty(params.nodeId, params.propertyName, params.newValue);
1633
+ if (method === 'deleteComponentProperty') return window.deleteComponentProperty(params.nodeId, params.propertyName);
1634
+ if (method === 'resizeNode') return window.resizeNode(params.nodeId, params.width, params.height, params.withConstraints);
1635
+ if (method === 'moveNode') return window.moveNode(params.nodeId, params.x, params.y);
1636
+ if (method === 'setNodeFills') return window.setNodeFills(params.nodeId, params.fills);
1637
+ if (method === 'setNodeStrokes') return window.setNodeStrokes(params.nodeId, params.strokes, params.strokeWeight);
1638
+ if (method === 'setNodeOpacity') return window.setNodeOpacity(params.nodeId, params.opacity);
1639
+ if (method === 'setNodeCornerRadius') return window.setNodeCornerRadius(params.nodeId, params.radius);
1640
+ if (method === 'cloneNode') return window.cloneNode(params.nodeId);
1641
+ if (method === 'deleteNode') return window.deleteNode(params.nodeId);
1642
+ if (method === 'renameNode') return window.renameNode(params.nodeId, params.newName);
1643
+ if (method === 'setTextContent') return window.setTextContent(params.nodeId, params.text, params.options);
1644
+ if (method === 'createChildNode') return window.createChildNode(params.parentId, params.nodeType, params.properties);
1645
+ return { success: false, error: 'Unknown method: ' + method };
1646
+ };
1647
+ // wsRef = BU bağlantının ws'i (closure ile güvenli)
1648
+ var wsRef = ws;
1649
+ Promise.resolve(run()).then(function(result) {
1650
+ if (wsRef && wsRef.readyState === 1) {
1651
+ try { wsRef.send(JSON.stringify({ id: id, result: result })); } catch (_) {}
1652
+ }
1653
+ }).catch(function(err) {
1654
+ if (wsRef && wsRef.readyState === 1) {
1655
+ try { wsRef.send(JSON.stringify({ id: id, error: err.message || String(err) })); } catch (_) {}
1656
+ }
1657
+ });
1658
+ } catch (e) {
1659
+ if (ws && ws.readyState === 1 && msg && msg.id) {
1660
+ try { ws.send(JSON.stringify({ id: msg.id, error: e.message || String(e) })); } catch (_) {}
1661
+ }
1662
+ }
1663
+ };
1664
+
1665
+ ws.onclose = function() {
1666
+ if (keepaliveTimer) { clearInterval(keepaliveTimer); keepaliveTimer = null; }
1667
+ if (handshakeTimer) { clearTimeout(handshakeTimer); handshakeTimer = null; }
1668
+ mcpConnections.delete(port);
1669
+ console.log('[F-MCP] Extra port disconnected: ' + port);
1670
+ };
1671
+
1672
+ ws.onerror = function() {
1673
+ // Sessiz — ek port bulunamadı, normal durum
1674
+ };
1675
+
1676
+ // 1.5s içinde bağlanamazsa kapat
1677
+ setTimeout(function() {
1678
+ if (ws.readyState === 0) { try { ws.close(); } catch(e) {} }
1679
+ }, 1500);
1680
+ } catch (e) {
1681
+ // Bağlantı hatası — sessiz
1682
+ }
1683
+ }
1684
+
1685
+ /**
1686
+ * Diğer portları tara — ana bağlantı başarılı olduktan sonra çağrılır.
1687
+ * Mevcut bağlantı dışındaki portlara connectToExtraPort ile bağlanır.
1688
+ */
1689
+ function scanOtherPorts() {
1690
+ var host = getMcpBridgeHost();
1691
+ for (var p = MCP_PORT_MIN; p <= MCP_PORT_MAX; p++) {
1692
+ if (p !== mcpConnectedPort && !mcpConnections.has(p)) {
1693
+ connectToExtraPort(p, host);
1694
+ }
1695
+ }
1696
+ // Port label güncelle (tarama sonrası)
1697
+ setTimeout(updatePortLabel, 2000);
1698
+ }
1699
+
1700
+ /**
1701
+ * Bağlı portlar arasında geçiş — ◀▶ butonları ile.
1702
+ * mcpBridgeWs aktif porta çevrilir (mevcut fonksiyonlar uyumlu kalır).
1703
+ */
1704
+ function switchActivePort(direction) {
1705
+ var ports = [];
1706
+ mcpConnections.forEach(function(conn, port) {
1707
+ if (conn.status === 'ready' && conn.ws && conn.ws.readyState === 1) {
1708
+ ports.push({ port: port, clientName: conn.clientName });
1709
+ }
1710
+ });
1711
+ if (ports.length <= 1) return;
1712
+ ports.sort(function(a, b) { return a.port - b.port; });
1713
+ var currentIdx = -1;
1714
+ for (var i = 0; i < ports.length; i++) {
1715
+ if (ports[i].port === mcpActivePort) { currentIdx = i; break; }
1716
+ }
1717
+ var nextIdx = (currentIdx + direction + ports.length) % ports.length;
1718
+ mcpActivePort = ports[nextIdx].port;
1719
+ // Geriye uyumluluk: mcpBridgeWs aktif bağlantıya çevir
1720
+ var activeConn = mcpConnections.get(mcpActivePort);
1721
+ if (activeConn && activeConn.ws) {
1722
+ mcpBridgeWs = activeConn.ws;
1723
+ mcpConnectedPort = mcpActivePort;
1724
+ }
1725
+ updatePortLabel();
1726
+ updateStatus('Ready', true, false);
1727
+ }
1728
+
1729
+ /**
1730
+ * Port label güncelle — bağlı port sayısı ve aktif port bilgisi.
1731
+ */
1732
+ function updatePortLabel() {
1733
+ var label = document.getElementById('port-label');
1734
+ if (!label) return;
1735
+ var ports = [];
1736
+ mcpConnections.forEach(function(conn, port) {
1737
+ if (conn.status === 'ready' && conn.ws && conn.ws.readyState === 1) {
1738
+ ports.push({ port: port, clientName: conn.clientName });
1739
+ }
1740
+ });
1741
+ if (ports.length === 0) {
1742
+ label.textContent = '—';
1743
+ label.style.color = 'rgba(255,255,255,0.3)';
1744
+ } else if (ports.length === 1) {
1745
+ label.textContent = ports[0].port + ' (' + ports[0].clientName + ')';
1746
+ label.style.color = 'rgba(78,205,196,0.8)';
1747
+ } else {
1748
+ var active = ports.find(function(p) { return p.port === mcpActivePort; });
1749
+ var name = active ? active.clientName : ports[0].clientName;
1750
+ label.textContent = (mcpActivePort || ports[0].port) + ' (' + name + ')';
1751
+ label.style.color = 'rgba(78,205,196,0.8)';
1752
+ }
1753
+ // Bağlı portlar listesini info panelinde güncelle
1754
+ var portsList = document.getElementById('connections-panel-list');
1755
+ if (portsList) {
1756
+ if (ports.length === 0) {
1757
+ portsList.innerHTML = '<div>—</div>';
1758
+ } else {
1759
+ portsList.innerHTML = ports.map(function(p) {
1760
+ var isActive = p.port === mcpActivePort;
1761
+ return '<div>' + (isActive ? '● ' : '○ ') + p.port + ' (' + p.clientName + ')' + (isActive ? ' ← aktif' : '') + '</div>';
1762
+ }).join('');
1763
+ }
1764
+ }
1765
+ requestUiResize();
1766
+ }
1767
+
1467
1768
  if (typeof document !== 'undefined' && document.addEventListener) {
1468
1769
  document.addEventListener('visibilitychange', function() {
1469
1770
  if (!document.hidden && (!mcpBridgeWs || mcpBridgeWs.readyState > 1)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atezer/figma-mcp-bridge",
3
- "version": "1.6.5",
3
+ "version": "1.7.0",
4
4
  "description": "F-MCP ATezer: MCP server and Figma plugin bridge for Claude/Cursor. No REST token required.",
5
5
  "type": "module",
6
6
  "main": "dist/local.js",