@imenam/mcp-design 1.0.9 → 1.0.10

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/README.md CHANGED
@@ -81,6 +81,15 @@ Exemple d'entrée générée :
81
81
 
82
82
  La résolution est assurée par le paquet partagé [`@imenam/mcp-gui-interface`](https://www.npmjs.com/package/@imenam/mcp-gui-interface), qui documente la règle en détail.
83
83
 
84
+ ### Exposition réseau
85
+
86
+ La GUI écoute sur `127.0.0.1` uniquement, en mode proxy comme en mode `APP_PORT` : elle n'est pas joignable directement depuis une autre machine. Pour y accéder à distance, passez par le [proxy central](https://github.com/imenam/proxy-setup) ou le gateway manager, qui relaient vers `localhost:<port>`.
87
+
88
+ Chaque requête traverse la garde de [`@imenam/mcp-gui-interface`](https://www.npmjs.com/package/@imenam/mcp-gui-interface) (`honoGuiGuard`), qui répond `403` :
89
+
90
+ - à tout en-tête `Host` autre que `localhost`, `127.0.0.1` ou `::1` (protection contre le DNS rebinding) ;
91
+ - aux modifications (méthodes autres que `GET`, `HEAD`, `OPTIONS`) venues d'un autre site, d'après `Sec-Fetch-Site` ou, à défaut, `Origin` (sont admis : la machine elle-même, le proxy de `PROXY_URL`).
92
+
84
93
  Un design est un simple fichier JSON dans `<data>/designs/<id>.json` — lisible, diffable, versionnable.
85
94
 
86
95
  ---
@@ -313,6 +322,7 @@ La suite comprend :
313
322
 
314
323
  - des tests unitaires du store, de la fabrique d'éléments, du moteur de diff et de l'export ;
315
324
  - des tests des outils MCP appelés directement ;
325
+ - des tests d'exposition réseau (`test/network-exposure.test.ts`) qui lancent le worker GUI en mode `APP_PORT` et vérifient l'écoute sur `127.0.0.1` seul, le refus d'un `Host` étranger et des modifications cross-site, et l'acceptation des requêtes relayées par le proxy ;
316
326
  - une suite de bout en bout (`test/e2e.test.ts`) qui lance un vrai serveur MCP sur stdio, attend l'enregistrement de son worker auprès du proxy, puis vérifie l'aller-retour complet agent → GUI → agent.
317
327
 
318
328
  La suite de bout en bout a besoin du proxy (`http://localhost:3000`, ou `E2E_PROXY_URL`). S'il est absent, elle est ignorée plutôt qu'en échec.
@@ -2,7 +2,7 @@ import { serve } from "@hono/node-server";
2
2
  import { serveStatic } from "@hono/node-server/serve-static";
3
3
  import { Hono } from "hono";
4
4
  import { streamSSE } from "hono/streaming";
5
- import { ProxyClient, createLogger, setupLogging } from "@imenam/mcp-gui-interface";
5
+ import { GUI_LISTEN_HOST, ProxyClient, createLogger, honoGuiGuard, setupLogging } from "@imenam/mcp-gui-interface";
6
6
  import path from "path";
7
7
  import fs from "fs";
8
8
  import { fileURLToPath } from "url";
@@ -77,6 +77,7 @@ const parentCheckInterval = setInterval(() => {
77
77
  }
78
78
  }, 2000);
79
79
  const app = new Hono();
80
+ app.use("*", honoGuiGuard());
80
81
  let proxyClient = null;
81
82
  const sseControllers = new Set();
82
83
  const pendingRequests = new Map();
@@ -301,7 +302,7 @@ app.get("/*", (c, next) => {
301
302
  * l'utilisateur doit ouvrir : via le proxy, ou directement en localhost.
302
303
  */
303
304
  function listen(port, publicUrl, isProxied) {
304
- const serverInstance = serve({ fetch: app.fetch, port, hostname: "0.0.0.0" }, (info) => {
305
+ const serverInstance = serve({ fetch: app.fetch, port, hostname: GUI_LISTEN_HOST }, (info) => {
305
306
  logger.info(`Design canvas server listening on port ${info.port}`);
306
307
  safeSend(IPCMessageSchema.parse({
307
308
  type: "READY",
@@ -1 +1 @@
1
- export declare const APP_VERSION = "1.0.9";
1
+ export declare const APP_VERSION = "1.0.10";
@@ -1,2 +1,2 @@
1
1
  // Auto-generated version file - do not edit manually
2
- export const APP_VERSION = '1.0.9';
2
+ export const APP_VERSION = '1.0.10';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imenam/mcp-design",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "main": "dist/src/index.js",
5
5
  "directories": {
6
6
  "test": "test"
@@ -45,7 +45,7 @@
45
45
  ],
46
46
  "dependencies": {
47
47
  "@hono/node-server": "^2.1.1",
48
- "@imenam/mcp-gui-interface": "^1.0.12",
48
+ "@imenam/mcp-gui-interface": "^1.0.14",
49
49
  "@modelcontextprotocol/sdk": "^1.30.0",
50
50
  "@resvg/resvg-js": "^2.6.2",
51
51
  "dotenv": "^17.4.2",