@atezer/figma-mcp-bridge 1.6.4 → 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 +14 -0
- package/README.md +23 -5
- package/dist/core/plugin-bridge-server.d.ts +4 -0
- package/dist/core/plugin-bridge-server.d.ts.map +1 -1
- package/dist/core/plugin-bridge-server.js +36 -1
- package/dist/core/plugin-bridge-server.js.map +1 -1
- package/dist/local-plugin-only.js +1 -1
- package/dist/local.js +1 -1
- package/f-mcp-plugin/code.js +3 -3
- package/f-mcp-plugin/ui.html +340 -16
- package/package.json +1 -1
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
|
@@ -19,14 +19,16 @@ Her şey **bilgisayarınızda** kalır. Tasarım verileriniz internete gönderil
|
|
|
19
19
|
## Öne çıkan özellikler
|
|
20
20
|
|
|
21
21
|
- **46 araç** — okuma, yazma, export, variable yönetimi, bileşen arama ve daha fazlası
|
|
22
|
-
- **Figma API token tüketmez
|
|
22
|
+
- **Figma API token tüketmez\*** — Varsayılan olarak plugin üzerinden çalışır, Figma API kotanızı kullanmaz
|
|
23
23
|
- **Veri güvenliği** — Tasarım verisi sadece kendi bilgisayarınızda kalır (Zero Trust)
|
|
24
24
|
- **Çoklu dosya** — Aynı anda birden fazla Figma/FigJam dosyası ile çalışabilirsiniz
|
|
25
25
|
- **Çoklu AI aracı** — Claude ve Cursor aynı anda kullanılabilir (farklı portlarda)
|
|
26
26
|
- **SVG/PNG export** — Vektörel veya bitmap, toplu export (1-50 node)
|
|
27
|
-
- **REST API desteği** —
|
|
27
|
+
- **REST API desteği** — İsteğe bağlı token ile yorum okuma, versiyon geçmişi, görsel export
|
|
28
28
|
- **Figma Desktop + Tarayıcı** — Her ikisinde de çalışır
|
|
29
29
|
|
|
30
|
+
> \* **REST API isteğe bağlıdır.** Temel araçlar (okuma, yazma, export, variable) token olmadan plugin üzerinden çalışır. Yorum okuma, versiyon geçmişi gibi ek özellikler için Figma API token'ı ekleyebilirsiniz — plugin'deki Advanced panelinden girin, kalan API limitinizi plugin üzerinde takip edin.
|
|
31
|
+
|
|
30
32
|
## Hızlı başlangıç (3 adım)
|
|
31
33
|
|
|
32
34
|
### 1. Node.js kurun
|
|
@@ -163,7 +165,7 @@ Detaylı sorun giderme: [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
|
|
|
163
165
|
|
|
164
166
|
| Bilgi | Kaynak |
|
|
165
167
|
|-------|--------|
|
|
166
|
-
| Güncel sürüm | **1.
|
|
168
|
+
| Güncel sürüm | **1.7.0** ([package.json](package.json)) |
|
|
167
169
|
| Değişiklik geçmişi | [CHANGELOG.md](CHANGELOG.md) |
|
|
168
170
|
| GitHub sürümleri | [Releases](https://github.com/atezer/FMCP/releases) |
|
|
169
171
|
| npm paketi | [@atezer/figma-mcp-bridge](https://www.npmjs.com/package/@atezer/figma-mcp-bridge) |
|
|
@@ -196,9 +198,25 @@ Detaylı sorun giderme: [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
|
|
|
196
198
|
- **KVKK / GDPR uyumlu** mimari
|
|
197
199
|
- Detay: [PRIVACY.md](PRIVACY.md)
|
|
198
200
|
|
|
199
|
-
## Kurumsal kullanım
|
|
201
|
+
## Kurumsal kullanım (Tüm şirkette tek seferde)
|
|
202
|
+
|
|
203
|
+
Plugin'i herkesin tek tek yüklemesi gerekmez. Figma Organization hesabınız varsa plugin'i **private plugin** olarak yayınlayabilirsiniz:
|
|
204
|
+
|
|
205
|
+
**Publish plugin** → **Publish to** → **Organizasyon adınız (Private)** seçin.
|
|
206
|
+
|
|
207
|
+
Yayınladıktan sonra:
|
|
208
|
+
- Tüm ekip üyeleri **Plugins** menüsünden tek tıkla erişir
|
|
209
|
+
- Kimsenin "manifest import" yapmasına gerek kalmaz
|
|
210
|
+
- Plugin güncellemelerini merkezden yönetirsiniz
|
|
211
|
+
- Review süreci yok (private plugin) — yayınladıktan hemen sonra kullanılabilir
|
|
212
|
+
|
|
213
|
+
**Gereksinimler:**
|
|
214
|
+
- Figma **Organization** veya **Enterprise** planı
|
|
215
|
+
- Yayınlama: Figma → Plugins → Publish → **Publish to** kısmında organizasyonunuzu seçin
|
|
216
|
+
|
|
217
|
+
> Her kullanıcının kendi bilgisayarında sadece AI aracı config'ini (Claude/Cursor) ayarlaması yeterli. Plugin zaten şirketin Figma'sında hazır olur.
|
|
200
218
|
|
|
201
|
-
|
|
219
|
+
Kurumsal özellikler (audit log, air-gap, org plugin detayı): [ENTERPRISE.md](docs/ENTERPRISE.md)
|
|
202
220
|
|
|
203
221
|
## Lisans
|
|
204
222
|
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"plugin-bridge-server.d.ts","sourceRoot":"","sources":["../../src/core/plugin-bridge-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
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.
|
|
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
package/f-mcp-plugin/code.js
CHANGED
|
@@ -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:
|
|
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(
|
|
223
|
-
var height = Math.max(72, Math.min(
|
|
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));
|
package/f-mcp-plugin/ui.html
CHANGED
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
html, body {
|
|
13
|
-
width:
|
|
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:
|
|
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:
|
|
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
|
-
<
|
|
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>
|
|
@@ -232,14 +240,28 @@
|
|
|
232
240
|
</div>
|
|
233
241
|
<div id="token-status" style="font-size:10px;color:rgba(255,255,255,0.35);margin-top:3px;display:none;"></div>
|
|
234
242
|
<div id="token-expiry-info" style="font-size:9px;color:rgba(255,255,255,0.3);margin-top:2px;display:none;"></div>
|
|
243
|
+
<div id="token-expiry-note" style="font-size:8px;color:rgba(255,255,255,0.2);margin-top:1px;display:none;">Figma'daki token suresiyle eslestiginden emin olun</div>
|
|
235
244
|
<div id="rate-limit-bar" style="display:none;margin-top:4px;">
|
|
236
|
-
<div style="display:flex;justify-content:space-between;font-size:9px;color:rgba(255,255,255,0.4);">
|
|
237
|
-
<span>API Limit</span>
|
|
245
|
+
<div style="display:flex;justify-content:space-between;align-items:center;font-size:9px;color:rgba(255,255,255,0.4);">
|
|
246
|
+
<span style="display:flex;align-items:center;gap:3px;">API Limit <span id="rate-limit-info" onclick="var t=document.getElementById('rate-limit-tip');if(t)t.style.display=t.style.display==='block'?'none':'block';" style="cursor:pointer;display:inline-flex;align-items:center;justify-content:center;width:11px;height:11px;border-radius:50%;border:1px solid rgba(255,255,255,0.25);font-size:7px;color:rgba(255,255,255,0.4);user-select:none;">i</span></span>
|
|
238
247
|
<span id="rate-limit-text">—</span>
|
|
239
248
|
</div>
|
|
249
|
+
<div id="rate-limit-tip" style="display:none;font-size:8px;color:rgba(255,255,255,0.35);margin-top:3px;padding:4px 6px;background:rgba(255,255,255,0.05);border-radius:3px;line-height:1.5;">
|
|
250
|
+
<div style="margin-bottom:3px;color:rgba(255,255,255,0.5);">Limiti ne tuketir?</div>
|
|
251
|
+
<div>○ Yorum okuma/yazma</div>
|
|
252
|
+
<div>○ Versiyon gecmisi</div>
|
|
253
|
+
<div>○ Gorsel export (REST ile)</div>
|
|
254
|
+
<div>○ Dosya bilgisi (REST ile)</div>
|
|
255
|
+
<div style="margin-top:3px;color:rgba(255,255,255,0.5);">Limiti tuketmeyen (sinirsiz):</div>
|
|
256
|
+
<div>● Dosya okuma, yazma, silme</div>
|
|
257
|
+
<div>● Variable/token yonetimi</div>
|
|
258
|
+
<div>● Bilesen arama, export (plugin)</div>
|
|
259
|
+
<div>● Screenshot, frame olusturma</div>
|
|
260
|
+
</div>
|
|
240
261
|
<div style="height:3px;background:rgba(255,255,255,0.08);border-radius:2px;overflow:hidden;margin-top:2px;">
|
|
241
262
|
<div id="rate-limit-fill" style="height:100%;background:#4ecdc4;border-radius:2px;transition:width 0.3s;width:100%;"></div>
|
|
242
263
|
</div>
|
|
264
|
+
<div id="rate-limit-note" style="font-size:8px;color:rgba(255,255,255,0.2);margin-top:2px;display:none;">REST API cagrisi sonrasi guncellenir</div>
|
|
243
265
|
<div id="rate-limit-warning" style="display:none;font-size:9px;margin-top:2px;font-weight:600;"></div>
|
|
244
266
|
</div>
|
|
245
267
|
</div>
|
|
@@ -264,9 +286,11 @@
|
|
|
264
286
|
function updateStatus(state, isActive, isError) {
|
|
265
287
|
const dot = document.getElementById('status-dot');
|
|
266
288
|
const stateText = document.getElementById('status-state');
|
|
289
|
+
const infoBtn = document.getElementById('status-info-btn');
|
|
267
290
|
|
|
268
291
|
dot.className = 'status-indicator ' + (isError ? 'error' : (isActive ? 'active' : 'loading'));
|
|
269
292
|
stateText.textContent = state;
|
|
293
|
+
if (infoBtn) infoBtn.style.display = isActive ? 'inline-block' : 'none';
|
|
270
294
|
requestUiResize();
|
|
271
295
|
}
|
|
272
296
|
|
|
@@ -281,7 +305,7 @@
|
|
|
281
305
|
var bodyStyle = window.getComputedStyle(document.body);
|
|
282
306
|
var padX = (parseFloat(bodyStyle.paddingLeft) || 0) + (parseFloat(bodyStyle.paddingRight) || 0);
|
|
283
307
|
var padY = (parseFloat(bodyStyle.paddingTop) || 0) + (parseFloat(bodyStyle.paddingBottom) || 0);
|
|
284
|
-
var width = Math.
|
|
308
|
+
var width = Math.min(300, Math.max(200, Math.ceil(root.scrollWidth + padX + 6)));
|
|
285
309
|
var height = Math.ceil(Math.max(root.scrollHeight, rect.height) + padY + 6);
|
|
286
310
|
parent.postMessage({ pluginMessage: { type: 'RESIZE_UI', width: width, height: height } }, '*');
|
|
287
311
|
});
|
|
@@ -581,6 +605,18 @@
|
|
|
581
605
|
.catch(function(err) { return { success: false, error: err.message || String(err) }; });
|
|
582
606
|
};
|
|
583
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
|
+
|
|
584
620
|
// Set component instance properties (TEXT, BOOLEAN, INSTANCE_SWAP, VARIANT)
|
|
585
621
|
// This is the correct way to update component instances vs direct text node editing
|
|
586
622
|
window.setInstanceProperties = (nodeId, properties) => {
|
|
@@ -638,6 +674,10 @@
|
|
|
638
674
|
} else {
|
|
639
675
|
updateTokenUI(true, null, expiresAt);
|
|
640
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'; }
|
|
641
681
|
}
|
|
642
682
|
console.log('[F-MCP] Token restored from clientStorage' + (isExpired ? ' (EXPIRED)' : '') + (expiresAt ? ' expires: ' + new Date(expiresAt).toLocaleDateString() : ''));
|
|
643
683
|
}
|
|
@@ -655,9 +695,10 @@
|
|
|
655
695
|
window.__figmaVariablesData = msg.data;
|
|
656
696
|
window.__figmaVariablesReady = true;
|
|
657
697
|
if (mcpConnectedPort) {
|
|
658
|
-
|
|
698
|
+
var _cn = mcpConnections.get(mcpConnectedPort);
|
|
699
|
+
updateStatus('Ready', true, false);
|
|
659
700
|
} else {
|
|
660
|
-
updateStatus('
|
|
701
|
+
updateStatus('Ready', true, false);
|
|
661
702
|
}
|
|
662
703
|
console.log('[F-MCP ATezer Bridge] Active - ' + (msg.data.variables?.length || 0) + ' vars');
|
|
663
704
|
break;
|
|
@@ -776,6 +817,9 @@
|
|
|
776
817
|
case 'CAPTURE_SCREENSHOT_RESULT':
|
|
777
818
|
handleResult('CAPTURE_SCREENSHOT', 'image');
|
|
778
819
|
break;
|
|
820
|
+
case 'BATCH_EXPORT_NODES_RESULT':
|
|
821
|
+
handleResult('BATCH_EXPORT_NODES', null);
|
|
822
|
+
break;
|
|
779
823
|
case 'SET_INSTANCE_PROPERTIES_RESULT':
|
|
780
824
|
handleResult('SET_INSTANCE_PROPERTIES', 'instance');
|
|
781
825
|
break;
|
|
@@ -885,6 +929,11 @@
|
|
|
885
929
|
var candidatePorts = [];
|
|
886
930
|
var candidatePortIndex = 0;
|
|
887
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
|
+
|
|
888
937
|
/** Port alanı elle değiştirilince manualPortLocked=true olur; bu kilit 5454–5470 taramasını durdurur. */
|
|
889
938
|
function unlockAutoPortScan() {
|
|
890
939
|
manualPortLocked = false;
|
|
@@ -974,13 +1023,22 @@
|
|
|
974
1023
|
fillEl.style.animation = 'none';
|
|
975
1024
|
}
|
|
976
1025
|
}
|
|
1026
|
+
// Hide "no data" note when real data exists
|
|
1027
|
+
var noteEl = document.getElementById('rate-limit-note');
|
|
1028
|
+
if (noteEl) noteEl.style.display = 'none';
|
|
977
1029
|
} else if (barEl) {
|
|
978
1030
|
barEl.style.display = hasToken ? 'block' : 'none';
|
|
979
1031
|
if (textEl) textEl.textContent = '—';
|
|
980
1032
|
if (fillEl) { fillEl.style.width = '100%'; fillEl.style.animation = 'none'; }
|
|
981
1033
|
var warnEl2 = document.getElementById('rate-limit-warning');
|
|
982
1034
|
if (warnEl2) warnEl2.style.display = 'none';
|
|
1035
|
+
// Show "no data" note when token exists but no rate limit data
|
|
1036
|
+
var noteEl2 = document.getElementById('rate-limit-note');
|
|
1037
|
+
if (noteEl2) noteEl2.style.display = hasToken ? 'block' : 'none';
|
|
983
1038
|
}
|
|
1039
|
+
// Token expiry note
|
|
1040
|
+
var expiryNoteEl = document.getElementById('token-expiry-note');
|
|
1041
|
+
if (expiryNoteEl) expiryNoteEl.style.display = (hasToken && expiresAt > 0) ? 'block' : 'none';
|
|
984
1042
|
requestUiResize();
|
|
985
1043
|
}
|
|
986
1044
|
|
|
@@ -1009,6 +1067,11 @@
|
|
|
1009
1067
|
mcpBridgeWs.send(JSON.stringify({ type: 'setToken', token: token }));
|
|
1010
1068
|
}
|
|
1011
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'; }
|
|
1012
1075
|
} else {
|
|
1013
1076
|
updateTokenUI(false, null, 0);
|
|
1014
1077
|
}
|
|
@@ -1016,7 +1079,9 @@
|
|
|
1016
1079
|
}
|
|
1017
1080
|
if (clearBtn) {
|
|
1018
1081
|
clearBtn.addEventListener('click', function() {
|
|
1019
|
-
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'; }
|
|
1020
1085
|
__tokenExpiresAt = 0;
|
|
1021
1086
|
// Delete from Figma clientStorage
|
|
1022
1087
|
parent.postMessage({ pluginMessage: { type: 'DELETE_TOKEN' } }, '*');
|
|
@@ -1226,8 +1291,8 @@
|
|
|
1226
1291
|
candidatePorts = [mcpConnectedPort];
|
|
1227
1292
|
candidatePortIndex = 0;
|
|
1228
1293
|
}
|
|
1229
|
-
console.log('[F-MCP ATezer Bridge] Handshake OK — bridge v' + (msg.bridgeVersion || '?') + ' on port ' + mcpConnectedPort);
|
|
1230
|
-
updateStatus('
|
|
1294
|
+
console.log('[F-MCP ATezer Bridge] Handshake OK — bridge v' + (msg.bridgeVersion || '?') + ' on port ' + mcpConnectedPort + ' (' + (msg.clientName || 'MCP') + ')');
|
|
1295
|
+
updateStatus('Ready', true, false);
|
|
1231
1296
|
// Resend restored token to bridge after handshake
|
|
1232
1297
|
if (window.__pendingRestoreToken && currentWs && currentWs.readyState === 1) {
|
|
1233
1298
|
currentWs.send(JSON.stringify({ type: 'setToken', token: window.__pendingRestoreToken }));
|
|
@@ -1238,6 +1303,19 @@
|
|
|
1238
1303
|
if (!window.__pendingRestoreToken && tokenInput && tokenInput.value && currentWs && currentWs.readyState === 1) {
|
|
1239
1304
|
currentWs.send(JSON.stringify({ type: 'setToken', token: tokenInput.value.trim() }));
|
|
1240
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
|
+
}
|
|
1241
1319
|
return;
|
|
1242
1320
|
}
|
|
1243
1321
|
if (msg.type === 'tokenStatus') {
|
|
@@ -1368,6 +1446,9 @@
|
|
|
1368
1446
|
if (method === 'captureScreenshot') {
|
|
1369
1447
|
return window.captureScreenshot(params.nodeId, params.options);
|
|
1370
1448
|
}
|
|
1449
|
+
if (method === 'batchExportNodes') {
|
|
1450
|
+
return window.batchExportNodes(params.nodeIds, params.format, params.scale, params.svgOutlineText, params.svgIncludeId, params.svgSimplifyStroke);
|
|
1451
|
+
}
|
|
1371
1452
|
if (method === 'setInstanceProperties') {
|
|
1372
1453
|
return window.setInstanceProperties(params.nodeId, params.properties);
|
|
1373
1454
|
}
|
|
@@ -1418,6 +1499,8 @@
|
|
|
1418
1499
|
};
|
|
1419
1500
|
mcpBridgeWs.onclose = function() {
|
|
1420
1501
|
stopKeepAlive();
|
|
1502
|
+
// Adım 3: Bağlantıyı Map'ten sil
|
|
1503
|
+
if (mcpConnectedPort) mcpConnections.delete(mcpConnectedPort);
|
|
1421
1504
|
if (mcpBridgeWs !== currentWs) return;
|
|
1422
1505
|
mcpBridgeWs = null;
|
|
1423
1506
|
mcpConnecting = false;
|
|
@@ -1441,6 +1524,247 @@
|
|
|
1441
1524
|
}
|
|
1442
1525
|
}
|
|
1443
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
|
+
|
|
1444
1768
|
if (typeof document !== 'undefined' && document.addEventListener) {
|
|
1445
1769
|
document.addEventListener('visibilitychange', function() {
|
|
1446
1770
|
if (!document.hidden && (!mcpBridgeWs || mcpBridgeWs.readyState > 1)) {
|
package/package.json
CHANGED