Engine és folyamatmodell — Electron ↔ Go sidecar
Indulási szekvencia
Token-átadás
A portot és tokent soha nem URL query-paraméterben adjuk át a renderernek (ott bekerülne a
böngésző-előzményekbe és a devtools naplóba), hanem preload.js-en keresztül
contextBridge-dzsel. A renderer nodeIntegration: false, contextIsolation: true,
sandbox: true mellett fut.
Életciklus és heartbeat
| Esemény | Viselkedés |
|---|---|
| Engine indul | Megjegyzi a --parent-pid értéket |
| Minden 1 s | Az engine ellenőrzi, él-e a szülőfolyamat |
| A szülő eltűnik | 3 s türelmi idő után graceful leállás: flush → SQLite checkpoint → exit(0) |
Electron will-quit | POST /api/v1/shutdown, majd 5 s után SIGKILL ha még él |
| Engine összeomlik | Electron észleli az exit kódot, max. 3× újraindítja exponenciális backoff-fal |
| Port foglalt | Az engine exit(2)-vel jelez, az Electron új portot keres |
Zombie-védelem: a parent-pid figyelés és a heartbeat együtt. Windowson a pid újrahasznosítható, ezért a parent-pid mellé egy indításkori nonce is megy, amit az Electron a heartbeat végponton visszaigazol.
Miért Go sidecar, nem beágyazott Node/Fastify
| Szempont | Go sidecar | Beágyazott Fastify |
|---|---|---|
| RAM | ~15–20 MB | ~80–150 MB |
| Indulás | < 50 ms | 300–800 ms |
| Team/Enterprise telepítés | Egy statikus fájl / 15 MB image | Node runtime + node_modules |
| Cross-compile | GOOS/GOARCH, 6 target egy paranccsal | Platform-specifikus natív modulok |
| SQLite | modernc.org/sqlite, CGO-mentes | better-sqlite3, natív fordítás minden platformra |
Az engine indítási flag-jei
| Flag | Alapérték | Szerep |
|---|---|---|
--mode | embedded | embedded | daemon | server |
--port | 0 (OS-osztott) | A fő REST/WS API portja 127.0.0.1-en |
--token | — | Bearer token minden REST kérésen; az Electron generálja indulásonként |
--parent-pid | 0 | A figyelt szülőfolyamat PID-je |
--project | — | A projekt gyökér abszolút útvonala (.craftingtable/-lel) |
--mcp-port | 8420 | A HTTP MCP transport fix portja (0 letiltja) |
--mcp-token | — | Bearer token a HTTP MCP transporton; az Electron stabil, perzisztált tokent ad |
Külön alparancs: craftingtable-engine mcp --project <path> — a stdio MCP transport egy
projektre, rövid életű processzként (ezt írja a .mcp.json a stdio változatnál).