@foldkit/devtools-mcp 0.22.0 → 0.23.0-canary.24f1c43eaaf7

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.
@@ -24,13 +24,5 @@ export type WebSocketClient = Readonly<{
24
24
  sendRequest: (request: typeof Request.Type, maybeRuntimeId: Option.Option<string>) => Effect.Effect<typeof Response.Type, Cause.TimeoutError | Error>;
25
25
  close: Effect.Effect<void>;
26
26
  }>;
27
- /**
28
- * Construct a WebSocket client that maintains its connection to the Foldkit
29
- * Vite plugin's DevTools relay in the background. The Effect succeeds
30
- * immediately with a client whose connection state evolves over time. The
31
- * initial connect is retried with exponential backoff; later disconnects
32
- * reconnect via the same loop. `sendRequest` fails with a clear "not
33
- * connected" error while no relay is reachable.
34
- */
35
- export declare const connectWebSocketClient: (url: string) => Effect.Effect<WebSocketClient>;
27
+ export declare const connectWebSocketClient: <Services>(resolveUrl: Effect.Effect<string, never, Services>) => Effect.Effect<WebSocketClient, never, Services>;
36
28
  //# sourceMappingURL=webSocketClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketClient.d.ts","sourceRoot":"","sources":["../src/webSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EAIV,MAAM,EAIN,MAAM,EAKP,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAA;AAgBlC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,WAAW,EAAE,CACX,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,EAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAClC,MAAM,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAA;IACpE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAC,CAAA;AAqDF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAC5B,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,eAAe,CAuH5B,CAAA"}
1
+ {"version":3,"file":"webSocketClient.d.ts","sourceRoot":"","sources":["../src/webSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EAIV,MAAM,EAIN,MAAM,EAKP,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAA;AAgBlC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,WAAW,EAAE,CACX,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,EAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAClC,MAAM,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAA;IACpE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAC,CAAA;AA2DF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cACjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KACjD,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAoI7C,CAAA"}
@@ -7,6 +7,11 @@ const MAX_RECONNECT_DELAY = Duration.seconds(30);
7
7
  const encodeRequestFrameToJson = Schema.encodeUnknownSync(Schema.fromJsonString(RequestFrame));
8
8
  const generateRequestId = () => `req-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
9
9
  const reconnectSchedule = Schedule.exponential(INITIAL_RECONNECT_DELAY).pipe(Schedule.modifyDelay(({ duration }) => Effect.succeed(Duration.min(duration, MAX_RECONNECT_DELAY))));
10
+ const relayUrlForLog = (url) => {
11
+ const parsed = new URL(url);
12
+ parsed.search = '';
13
+ return parsed.toString();
14
+ };
10
15
  const attemptOpen = (url) => Effect.callback(resume => {
11
16
  const socket = new WebSocket(url);
12
17
  let settled = false;
@@ -46,15 +51,7 @@ const waitForClose = (socket) => Effect.callback(resume => {
46
51
  });
47
52
  }
48
53
  });
49
- /**
50
- * Construct a WebSocket client that maintains its connection to the Foldkit
51
- * Vite plugin's DevTools relay in the background. The Effect succeeds
52
- * immediately with a client whose connection state evolves over time. The
53
- * initial connect is retried with exponential backoff; later disconnects
54
- * reconnect via the same loop. `sendRequest` fails with a clear "not
55
- * connected" error while no relay is reachable.
56
- */
57
- export const connectWebSocketClient = (url) => Effect.gen(function* () {
54
+ export const connectWebSocketClient = (resolveUrl) => Effect.gen(function* () {
58
55
  const pendingResponsesRef = yield* Ref.make(HashMap.empty());
59
56
  const currentSocketRef = yield* Ref.make(Option.none());
60
57
  const isManuallyClosedRef = yield* Ref.make(false);
@@ -67,10 +64,10 @@ export const connectWebSocketClient = (url) => Effect.gen(function* () {
67
64
  console.error(`[foldkit-devtools-mcp] socket error: ${error.message}`);
68
65
  });
69
66
  };
70
- const openWithBackoff = pipe(attemptOpen(url), Effect.tapError(error => Console.error(`[foldkit-devtools-mcp] connect attempt failed: ${error.message}`)), Effect.retry(reconnectSchedule), Effect.orDie);
67
+ const openWithBackoff = pipe(resolveUrl, Effect.flatMap(url => attemptOpen(url).pipe(Effect.map(socket => ({ socket, url })), Effect.tapError(error => Console.error(`[foldkit-devtools-mcp] connect attempt to ${relayUrlForLog(url)} failed: ${error.message}`)))), Effect.retry(reconnectSchedule), Effect.orDie);
71
68
  const maintainConnection = Effect.gen(function* () {
72
- const socket = yield* openWithBackoff;
73
- yield* Console.error(`[foldkit-devtools-mcp] connected to ${url}`);
69
+ const { socket, url } = yield* openWithBackoff;
70
+ yield* Console.error(`[foldkit-devtools-mcp] connected to ${relayUrlForLog(url)}`);
74
71
  attachMessageHandler(socket);
75
72
  yield* Ref.set(currentSocketRef, Option.some(socket));
76
73
  yield* waitForClose(socket);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foldkit/devtools-mcp",
3
- "version": "0.22.0",
3
+ "version": "0.23.0-canary.24f1c43eaaf7",
4
4
  "description": "MCP server exposing Foldkit DevTools to AI agents (Claude Code, Cursor, etc.)",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",
@@ -16,21 +16,25 @@
16
16
  }
17
17
  },
18
18
  "peerDependencies": {
19
- "effect": "4.0.0-rc.116",
20
- "foldkit": ">=0.161.0"
19
+ "effect": "4.0.0-rc.117",
20
+ "foldkit": "0.164.0-canary.24f1c43eaaf7"
21
21
  },
22
22
  "dependencies": {
23
23
  "@modelcontextprotocol/sdk": "1.29.0",
24
24
  "ws": "^8.21.3"
25
25
  },
26
26
  "devDependencies": {
27
- "@types/node": "^26.4.0",
27
+ "@effect/platform-node": "4.0.0-rc.117",
28
+ "@types/node": "26.4.0",
28
29
  "@types/ws": "^8.18.1",
29
- "effect": "4.0.0-rc.116",
30
+ "effect": "4.0.0-rc.117",
30
31
  "rimraf": "^6.1.3",
31
- "rolldown": "^1.2.6",
32
+ "rolldown": "^1.2.11",
32
33
  "typescript": "^7.0.2",
33
- "foldkit": "0.163.0"
34
+ "vite": "^8.3.1",
35
+ "vitest": "^4.1.11",
36
+ "@foldkit/vite-plugin": "0.25.0-canary.24f1c43eaaf7",
37
+ "foldkit": "0.164.0-canary.24f1c43eaaf7"
34
38
  },
35
39
  "files": [
36
40
  "dist"
@@ -61,6 +65,7 @@
61
65
  "build": "pnpm run clean && tsc -b && pnpm run bundle",
62
66
  "bundle": "rolldown -c rolldown.config.ts",
63
67
  "watch": "tsc -b --watch",
64
- "typecheck": "tsc -b --noEmit"
68
+ "typecheck": "tsc -b --noEmit && tsc -p tsconfig.test.json",
69
+ "test": "vitest run"
65
70
  }
66
71
  }