skybridge 0.0.0-dev.f381d90 → 0.0.0-dev.f38d432

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.
Files changed (165) hide show
  1. package/README.md +8 -8
  2. package/dist/cli/header.js +1 -1
  3. package/dist/cli/header.js.map +1 -1
  4. package/dist/cli/tunnel-control-server.d.ts +9 -0
  5. package/dist/cli/tunnel-control-server.js +31 -0
  6. package/dist/cli/tunnel-control-server.js.map +1 -0
  7. package/dist/cli/tunnel-control-server.test.js +39 -0
  8. package/dist/cli/tunnel-control-server.test.js.map +1 -0
  9. package/dist/cli/tunnel-handler.d.ts +3 -0
  10. package/dist/cli/tunnel-handler.js +48 -0
  11. package/dist/cli/tunnel-handler.js.map +1 -0
  12. package/dist/cli/tunnel-handler.test.js +105 -0
  13. package/dist/cli/tunnel-handler.test.js.map +1 -0
  14. package/dist/cli/tunnel.d.ts +57 -0
  15. package/dist/cli/tunnel.js +154 -0
  16. package/dist/cli/tunnel.js.map +1 -0
  17. package/dist/cli/tunnel.test.js +190 -0
  18. package/dist/cli/tunnel.test.js.map +1 -0
  19. package/dist/cli/use-nodemon.js +2 -2
  20. package/dist/cli/use-nodemon.js.map +1 -1
  21. package/dist/cli/use-tunnel.d.ts +12 -5
  22. package/dist/cli/use-tunnel.js +102 -63
  23. package/dist/cli/use-tunnel.js.map +1 -1
  24. package/dist/cli/use-typescript-check.d.ts +1 -0
  25. package/dist/cli/use-typescript-check.js +41 -6
  26. package/dist/cli/use-typescript-check.js.map +1 -1
  27. package/dist/commands/build.js +28 -7
  28. package/dist/commands/build.js.map +1 -1
  29. package/dist/commands/dev.d.ts +1 -0
  30. package/dist/commands/dev.js +32 -3
  31. package/dist/commands/dev.js.map +1 -1
  32. package/dist/commands/start.js +7 -10
  33. package/dist/commands/start.js.map +1 -1
  34. package/dist/server/asset-base-url-transform-plugin.js +1 -1
  35. package/dist/server/asset-base-url-transform-plugin.js.map +1 -1
  36. package/dist/server/asset-base-url-transform-plugin.test.js +29 -0
  37. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -1
  38. package/dist/server/content-helpers.d.ts +27 -0
  39. package/dist/server/content-helpers.js +46 -0
  40. package/dist/server/content-helpers.js.map +1 -0
  41. package/dist/server/content-helpers.test.d.ts +1 -0
  42. package/dist/server/content-helpers.test.js +70 -0
  43. package/dist/server/content-helpers.test.js.map +1 -0
  44. package/dist/server/express.js +21 -3
  45. package/dist/server/express.js.map +1 -1
  46. package/dist/server/express.test.js +98 -2
  47. package/dist/server/express.test.js.map +1 -1
  48. package/dist/server/index.d.ts +4 -3
  49. package/dist/server/index.js +3 -2
  50. package/dist/server/index.js.map +1 -1
  51. package/dist/server/inferUtilityTypes.d.ts +6 -6
  52. package/dist/server/middleware.test.js +12 -9
  53. package/dist/server/middleware.test.js.map +1 -1
  54. package/dist/server/server.d.ts +95 -72
  55. package/dist/server/server.js +208 -74
  56. package/dist/server/server.js.map +1 -1
  57. package/dist/server/templateHelper.d.ts +5 -5
  58. package/dist/server/templates/development.hbs +2 -2
  59. package/dist/server/templates/production.hbs +1 -1
  60. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  61. package/dist/server/tunnel-proxy-router.js +110 -0
  62. package/dist/server/tunnel-proxy-router.js.map +1 -0
  63. package/dist/server/tunnel-proxy-router.test.d.ts +1 -0
  64. package/dist/server/tunnel-proxy-router.test.js +229 -0
  65. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  66. package/dist/server/viewsDevServer.d.ts +14 -0
  67. package/dist/server/viewsDevServer.js +45 -0
  68. package/dist/server/viewsDevServer.js.map +1 -0
  69. package/dist/test/utils.d.ts +13 -21
  70. package/dist/test/utils.js +42 -37
  71. package/dist/test/utils.js.map +1 -1
  72. package/dist/test/view.test.d.ts +1 -0
  73. package/dist/test/view.test.js +523 -0
  74. package/dist/test/view.test.js.map +1 -0
  75. package/dist/web/bridges/apps-sdk/adaptor.d.ts +5 -3
  76. package/dist/web/bridges/apps-sdk/adaptor.js +32 -14
  77. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -1
  78. package/dist/web/bridges/apps-sdk/types.d.ts +10 -5
  79. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  80. package/dist/web/bridges/mcp-app/adaptor.d.ts +12 -6
  81. package/dist/web/bridges/mcp-app/adaptor.js +30 -24
  82. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -1
  83. package/dist/web/bridges/types.d.ts +14 -8
  84. package/dist/web/components/modal-provider.js +1 -1
  85. package/dist/web/components/modal-provider.js.map +1 -1
  86. package/dist/web/create-store.js +9 -9
  87. package/dist/web/create-store.js.map +1 -1
  88. package/dist/web/create-store.test.js +14 -16
  89. package/dist/web/create-store.test.js.map +1 -1
  90. package/dist/web/data-llm.d.ts +1 -1
  91. package/dist/web/data-llm.js +3 -3
  92. package/dist/web/data-llm.js.map +1 -1
  93. package/dist/web/data-llm.test.js +22 -22
  94. package/dist/web/data-llm.test.js.map +1 -1
  95. package/dist/web/generate-helpers.d.ts +20 -18
  96. package/dist/web/generate-helpers.js +20 -18
  97. package/dist/web/generate-helpers.js.map +1 -1
  98. package/dist/web/generate-helpers.test-d.js +26 -26
  99. package/dist/web/generate-helpers.test-d.js.map +1 -1
  100. package/dist/web/helpers/state.d.ts +2 -2
  101. package/dist/web/helpers/state.js +11 -11
  102. package/dist/web/helpers/state.js.map +1 -1
  103. package/dist/web/helpers/state.test.js +9 -9
  104. package/dist/web/helpers/state.test.js.map +1 -1
  105. package/dist/web/hooks/index.d.ts +1 -1
  106. package/dist/web/hooks/index.js +1 -1
  107. package/dist/web/hooks/index.js.map +1 -1
  108. package/dist/web/hooks/use-files.d.ts +2 -1
  109. package/dist/web/hooks/use-files.js +1 -0
  110. package/dist/web/hooks/use-files.js.map +1 -1
  111. package/dist/web/hooks/use-files.test.js +22 -2
  112. package/dist/web/hooks/use-files.test.js.map +1 -1
  113. package/dist/web/hooks/use-request-modal.d.ts +1 -1
  114. package/dist/web/hooks/use-request-modal.js +4 -4
  115. package/dist/web/hooks/use-request-modal.js.map +1 -1
  116. package/dist/web/hooks/use-request-modal.test.js +1 -1
  117. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  118. package/dist/web/hooks/use-view-state.d.ts +4 -0
  119. package/dist/web/hooks/use-view-state.js +32 -0
  120. package/dist/web/hooks/use-view-state.js.map +1 -0
  121. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  122. package/dist/web/hooks/{use-widget-state.test.js → use-view-state.test.js} +17 -17
  123. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  124. package/dist/web/index.d.ts +1 -2
  125. package/dist/web/index.js +1 -2
  126. package/dist/web/index.js.map +1 -1
  127. package/dist/web/mount-view.d.ts +1 -0
  128. package/dist/web/{mount-widget.js → mount-view.js} +2 -2
  129. package/dist/web/mount-view.js.map +1 -0
  130. package/dist/web/plugin/plugin.d.ts +4 -1
  131. package/dist/web/plugin/plugin.js +134 -25
  132. package/dist/web/plugin/plugin.js.map +1 -1
  133. package/dist/web/plugin/scan-views.d.ts +16 -0
  134. package/dist/web/plugin/scan-views.js +88 -0
  135. package/dist/web/plugin/scan-views.js.map +1 -0
  136. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  137. package/dist/web/plugin/scan-views.test.js +99 -0
  138. package/dist/web/plugin/scan-views.test.js.map +1 -0
  139. package/dist/web/plugin/validate-view.d.ts +1 -0
  140. package/dist/web/plugin/validate-view.js +9 -0
  141. package/dist/web/plugin/validate-view.js.map +1 -0
  142. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  143. package/dist/web/plugin/validate-view.test.js +24 -0
  144. package/dist/web/plugin/validate-view.test.js.map +1 -0
  145. package/package.json +22 -16
  146. package/tsconfig.base.json +2 -0
  147. package/dist/server/widgetsDevServer.d.ts +0 -13
  148. package/dist/server/widgetsDevServer.js +0 -52
  149. package/dist/server/widgetsDevServer.js.map +0 -1
  150. package/dist/test/widget.test.js +0 -303
  151. package/dist/test/widget.test.js.map +0 -1
  152. package/dist/web/hooks/use-widget-state.d.ts +0 -4
  153. package/dist/web/hooks/use-widget-state.js +0 -32
  154. package/dist/web/hooks/use-widget-state.js.map +0 -1
  155. package/dist/web/hooks/use-widget-state.test.js.map +0 -1
  156. package/dist/web/mount-widget.d.ts +0 -1
  157. package/dist/web/mount-widget.js.map +0 -1
  158. package/dist/web/plugin/validate-widget.d.ts +0 -5
  159. package/dist/web/plugin/validate-widget.js +0 -27
  160. package/dist/web/plugin/validate-widget.js.map +0 -1
  161. package/dist/web/plugin/validate-widget.test.js +0 -42
  162. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  163. /package/dist/{test/widget.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  164. /package/dist/{web/hooks/use-widget-state.test.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  165. /package/dist/{web/plugin/validate-widget.test.d.ts → cli/tunnel.test.d.ts} +0 -0
@@ -2,7 +2,8 @@ import crypto from "node:crypto";
2
2
  import { readFileSync } from "node:fs";
3
3
  import http from "node:http";
4
4
  import path from "node:path";
5
- import { McpServer as McpServerBase, } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { Server as SdkServer, } from "@modelcontextprotocol/sdk/server/index.js";
6
+ import { McpServer as McpServerBase } from "@modelcontextprotocol/sdk/server/mcp.js";
6
7
  import { mergeWith, union } from "es-toolkit";
7
8
  import { createApp } from "./express.js";
8
9
  import { createMiddlewareEntry } from "./metric.js";
@@ -15,12 +16,33 @@ const mergeWithUnion = (target, source) => {
15
16
  }
16
17
  });
17
18
  };
18
- export class McpServer extends McpServerBase {
19
+ export function normalizeContent(content) {
20
+ if (content === undefined) {
21
+ return [];
22
+ }
23
+ if (typeof content === "string") {
24
+ return [{ type: "text", text: content }];
25
+ }
26
+ if (Array.isArray(content)) {
27
+ return content;
28
+ }
29
+ return [content];
30
+ }
31
+ const McpServerBaseOmitted = McpServerBase;
32
+ export class McpServer extends McpServerBaseOmitted {
19
33
  express;
20
34
  customMiddleware = [];
21
35
  customErrorMiddleware = [];
22
36
  mcpMiddlewareEntries = [];
23
37
  mcpMiddlewareApplied = false;
38
+ claimedViews = new Map();
39
+ serverInfo;
40
+ serverOptions;
41
+ constructor(serverInfo, options) {
42
+ super(serverInfo, options);
43
+ this.serverInfo = serverInfo;
44
+ this.serverOptions = options;
45
+ }
24
46
  use(pathOrHandler, ...handlers) {
25
47
  if (typeof pathOrHandler === "string") {
26
48
  this.customMiddleware.push({
@@ -83,7 +105,6 @@ export class McpServer extends McpServerBase {
83
105
  return;
84
106
  }
85
107
  const { requestHandlers, notificationHandlers } = getHandlerMaps(this.server);
86
- // Wrap existing handlers and proxy future .set() for lazy SDK registration
87
108
  const instrumentMap = (map, isNotification) => {
88
109
  for (const [method, handler] of map) {
89
110
  map.set(method, buildMiddlewareChain(method, isNotification, handler, entries));
@@ -96,7 +117,26 @@ export class McpServer extends McpServerBase {
96
117
  }
97
118
  async connect(transport) {
98
119
  this.applyMcpMiddleware();
99
- return super.connect(transport);
120
+ return McpServerBase.prototype.connect.call(this, transport);
121
+ }
122
+ /**
123
+ * Per-request stateless connect. The SDK's `Protocol` only allows one
124
+ * transport per instance, so we can't reuse this `McpServer` across
125
+ * concurrent requests. The SDK's idiomatic fix is a `() => McpServer`
126
+ * factory, but that would break Skybridge's singleton API — so instead
127
+ * we build a fresh underlying `Server` per request and share the main
128
+ * server's handler maps by reference. The cast is unavoidable: there's
129
+ * no public API to inject handler maps. `getHandlerMaps` validates the
130
+ * read side and fails fast on SDK field renames.
131
+ */
132
+ async connectStatelessTransport(transport) {
133
+ this.applyMcpMiddleware();
134
+ const { requestHandlers, notificationHandlers } = getHandlerMaps(this.server);
135
+ const fresh = new SdkServer(this.serverInfo, this.serverOptions);
136
+ const target = fresh;
137
+ target._requestHandlers = requestHandlers;
138
+ target._notificationHandlers = notificationHandlers;
139
+ await fresh.connect(transport);
100
140
  }
101
141
  async run() {
102
142
  this.applyMcpMiddleware();
@@ -110,7 +150,7 @@ export class McpServer extends McpServerBase {
110
150
  });
111
151
  }
112
152
  httpServer.on("request", this.express);
113
- return new Promise((resolve, reject) => {
153
+ await new Promise((resolve, reject) => {
114
154
  httpServer.on("error", (error) => {
115
155
  console.error("Failed to start server:", error);
116
156
  reject(error);
@@ -120,101 +160,136 @@ export class McpServer extends McpServerBase {
120
160
  resolve();
121
161
  });
122
162
  });
123
- }
124
- registerWidget(name, resourceConfig, toolConfig, toolCallback) {
125
- const userMeta = resourceConfig._meta;
126
- const toolMeta = {
127
- ...toolConfig._meta,
163
+ const shutdown = () => {
164
+ // Drop both handlers so a second signal falls through to Node's default
165
+ // (force-quit on a second Ctrl+C while drain is hanging).
166
+ process.off("SIGTERM", shutdown);
167
+ process.off("SIGINT", shutdown);
168
+ httpServer.close(() => process.exit(0));
169
+ // Force exit if connections don't drain in time so the port is still
170
+ // released promptly (e.g. for nodemon restarts).
171
+ setTimeout(() => process.exit(0), 3000).unref();
128
172
  };
129
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("apps-sdk")) {
130
- const widgetConfig = {
173
+ process.on("SIGTERM", shutdown);
174
+ process.on("SIGINT", shutdown);
175
+ }
176
+ enforceOneToolPerView(component, toolName) {
177
+ const existingTool = this.claimedViews.get(component);
178
+ if (existingTool) {
179
+ throw new Error(`skybridge: view "${component}" is already used by tool "${existingTool}". Tool "${toolName}" cannot also reference it — each view backs exactly one tool.`);
180
+ }
181
+ this.claimedViews.set(component, toolName);
182
+ }
183
+ registerViewResources(toolName, view, toolMeta) {
184
+ const hosts = view.hosts ?? ["apps-sdk", "mcp-app"];
185
+ // Append a content-derived version param so hosts (e.g. ChatGPT) bust
186
+ // their cache when the bundle changes, but keep the URI stable across
187
+ // `tools/list` calls when the bundle hasn't changed.
188
+ const versionParam = this.computeViewVersionParam(view.component);
189
+ if (hosts.includes("apps-sdk")) {
190
+ const viewResource = {
131
191
  hostType: "apps-sdk",
132
- uri: `ui://widgets/apps-sdk/${name}.html`,
192
+ uri: `ui://views/apps-sdk/${view.component}.html${versionParam}`,
133
193
  mimeType: "text/html+skybridge",
134
194
  buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
135
- const userUi = userMeta?.ui;
136
- const userCsp = userUi?.csp;
137
195
  const defaults = {
138
196
  "openai/widgetCSP": {
139
197
  resource_domains: resourceDomains,
140
198
  connect_domains: connectDomains,
141
199
  },
142
200
  "openai/widgetDomain": domain,
143
- "openai/widgetDescription": resourceConfig.description,
201
+ "openai/widgetDescription": view.description,
144
202
  };
145
- const fromUi = {
203
+ const fromView = {
146
204
  "openai/widgetCSP": {
147
- resource_domains: userCsp?.resourceDomains,
148
- connect_domains: userCsp?.connectDomains,
149
- frame_domains: userCsp?.frameDomains,
150
- redirect_domains: userCsp?.redirectDomains,
205
+ resource_domains: view.csp?.resourceDomains,
206
+ connect_domains: view.csp?.connectDomains,
207
+ frame_domains: view.csp?.frameDomains,
208
+ redirect_domains: view.csp?.redirectDomains,
151
209
  },
152
- "openai/widgetDomain": userUi?.domain,
153
- "openai/widgetPrefersBorder": userUi?.prefersBorder,
210
+ "openai/widgetDomain": view.domain,
211
+ "openai/widgetPrefersBorder": view.prefersBorder,
154
212
  };
155
- const directOpenaiKeys = Object.fromEntries(Object.entries(userMeta ?? {}).filter(([key]) => key.startsWith("openai/")));
156
- return mergeWithUnion(mergeWithUnion(mergeWithUnion(defaults, fromUi), directOpenaiKeys), { "openai/widgetDomain": overrides.domain });
213
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
214
+ "openai/widgetDomain": overrides.domain,
215
+ });
216
+ if (view._meta) {
217
+ return { ...base, ...view._meta };
218
+ }
219
+ return base;
157
220
  },
158
221
  };
159
- this.registerWidgetResource({
160
- name,
161
- widgetConfig,
162
- resourceConfig,
222
+ this.registerViewResource({
223
+ name: toolName,
224
+ viewResource,
225
+ view,
163
226
  });
164
- toolMeta["openai/outputTemplate"] = widgetConfig.uri;
227
+ toolMeta["openai/outputTemplate"] = viewResource.uri;
165
228
  }
166
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("mcp-app")) {
167
- const widgetConfig = {
229
+ if (hosts.includes("mcp-app")) {
230
+ const viewResource = {
168
231
  hostType: "mcp-app",
169
- uri: `ui://widgets/ext-apps/${name}.html`,
232
+ uri: `ui://views/ext-apps/${view.component}.html${versionParam}`,
170
233
  mimeType: "text/html;profile=mcp-app",
171
- buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
234
+ buildContentMeta: ({ resourceDomains, connectDomains, domain, baseUriDomains }, overrides) => {
172
235
  const defaults = {
173
236
  ui: {
174
237
  csp: {
175
238
  resourceDomains,
176
239
  connectDomains,
240
+ baseUriDomains,
177
241
  },
178
242
  domain,
179
243
  },
180
244
  };
181
- return mergeWithUnion(defaults, {
182
- ui: { ...userMeta?.ui, ...overrides },
245
+ const fromView = {
246
+ ui: {
247
+ ...(view.description && { description: view.description }),
248
+ ...(view.prefersBorder !== undefined && {
249
+ prefersBorder: view.prefersBorder,
250
+ }),
251
+ ...(view.domain && { domain: view.domain }),
252
+ csp: {
253
+ ...(view.csp?.resourceDomains && {
254
+ resourceDomains: view.csp.resourceDomains,
255
+ }),
256
+ ...(view.csp?.connectDomains && {
257
+ connectDomains: view.csp.connectDomains,
258
+ }),
259
+ ...(view.csp?.frameDomains && {
260
+ frameDomains: view.csp.frameDomains,
261
+ }),
262
+ ...(view.csp?.baseUriDomains && {
263
+ baseUriDomains: view.csp.baseUriDomains,
264
+ }),
265
+ ...(view.csp?.redirectDomains && {
266
+ redirectDomains: view.csp.redirectDomains,
267
+ }),
268
+ },
269
+ },
270
+ };
271
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
272
+ ui: overrides,
183
273
  });
274
+ if (view._meta) {
275
+ return { ...base, ...view._meta };
276
+ }
277
+ return base;
184
278
  },
185
279
  };
186
- this.registerWidgetResource({
187
- name,
188
- widgetConfig,
189
- resourceConfig,
280
+ this.registerViewResource({
281
+ name: toolName,
282
+ viewResource,
283
+ view,
190
284
  });
191
285
  // @ts-expect-error - For backwards compatibility with Claude current implementation of the specs
192
- toolMeta["ui/resourceUri"] = widgetConfig.uri;
193
- toolMeta.ui = { resourceUri: widgetConfig.uri };
286
+ toolMeta["ui/resourceUri"] = viewResource.uri;
287
+ toolMeta.ui = { resourceUri: viewResource.uri };
194
288
  }
195
- const wrappedToolCallback = async (args, extra) => {
196
- const result = await toolCallback(args, extra);
197
- return {
198
- ...result,
199
- _meta: {
200
- ...result._meta,
201
- viewUUID: crypto.randomUUID(),
202
- },
203
- };
204
- };
205
- this.registerTool(name, {
206
- ...toolConfig,
207
- _meta: toolMeta,
208
- }, wrappedToolCallback);
209
- return this;
210
- }
211
- registerTool(name, config, cb) {
212
- super.registerTool(name, config, cb);
213
- return this;
214
289
  }
215
- registerWidgetResource({ name, widgetConfig, resourceConfig, }) {
216
- const { hostType, uri: widgetUri, mimeType, buildContentMeta, } = widgetConfig;
217
- this.registerResource(name, widgetUri, { ...resourceConfig, _meta: resourceConfig._meta }, async (uri, extra) => {
290
+ registerViewResource({ name, viewResource, view, }) {
291
+ const { hostType, uri: viewUri, mimeType, buildContentMeta } = viewResource;
292
+ this.registerResource(name, viewUri, { description: view.description }, async (uri, extra) => {
218
293
  const isProduction = process.env.NODE_ENV === "production";
219
294
  const isClaude = extra?.requestInfo?.headers?.["user-agent"] === "Claude-User";
220
295
  const headers = extra?.requestInfo?.headers || {};
@@ -247,13 +322,13 @@ export class McpServer extends McpServerBase {
247
322
  ? templateHelper.renderProduction({
248
323
  hostType,
249
324
  serverUrl,
250
- widgetFile: this.lookupDistFileWithIndexFallback(`src/widgets/${name}`),
251
- styleFile: this.lookupDistFile("style.css"),
325
+ viewFile: this.lookupViewFile(view.component),
326
+ styleFile: this.lookupDistFile("style.css") ?? "",
252
327
  })
253
328
  : templateHelper.renderDevelopment({
254
329
  hostType,
255
330
  serverUrl,
256
- widgetName: name,
331
+ viewName: view.component,
257
332
  });
258
333
  const connectDomains = [serverUrl];
259
334
  if (!isProduction) {
@@ -264,7 +339,10 @@ export class McpServer extends McpServerBase {
264
339
  let contentMetaOverrides = {};
265
340
  if (isClaude) {
266
341
  const pathname = extra?.requestInfo?.url?.pathname ?? "";
267
- const url = `${serverUrl}${pathname}`;
342
+ const rawUrl = header("x-alpic-forwarded-url") ?? `${serverUrl}${pathname}`;
343
+ // Strip a lone trailing slash so the hash matches the connector URL
344
+ // as registered with Claude (which has no trailing slash on bare origins).
345
+ const url = rawUrl.endsWith("/") ? rawUrl.slice(0, -1) : rawUrl;
268
346
  const hash = crypto
269
347
  .createHash("sha256")
270
348
  .update(url)
@@ -285,18 +363,74 @@ export class McpServer extends McpServerBase {
285
363
  };
286
364
  });
287
365
  }
288
- lookupDistFile(key) {
366
+ wrapHandler(cb, { attachViewUUID }) {
367
+ return async (args, extra) => {
368
+ const result = await cb(args, extra);
369
+ return {
370
+ ...result,
371
+ content: normalizeContent(result.content),
372
+ ...(attachViewUUID && {
373
+ _meta: {
374
+ ...result._meta,
375
+ viewUUID: crypto.randomUUID(),
376
+ },
377
+ }),
378
+ };
379
+ };
380
+ }
381
+ computeViewVersionParam(viewName) {
382
+ if (process.env.NODE_ENV !== "production") {
383
+ return "";
384
+ }
385
+ try {
386
+ const viewFile = this.lookupViewFile(viewName);
387
+ const styleFile = this.lookupDistFile("style.css") ?? "";
388
+ const hash = crypto
389
+ .createHash("sha256")
390
+ .update(viewFile)
391
+ .update("\0")
392
+ .update(styleFile)
393
+ .digest("hex")
394
+ .slice(0, 8);
395
+ return `?v=${hash}`;
396
+ }
397
+ catch {
398
+ return "";
399
+ }
400
+ }
401
+ lookupViewFile(viewName) {
289
402
  const manifest = this.readManifest();
290
- return manifest[key]?.file;
403
+ for (const entry of Object.values(manifest)) {
404
+ if (entry?.isEntry && entry.name === viewName && entry.file) {
405
+ return entry.file;
406
+ }
407
+ }
408
+ throw new Error(`View "${viewName}" not found in Vite manifest. Did the build complete successfully? Look for an entry with name "${viewName}" in dist/assets/.vite/manifest.json.`);
291
409
  }
292
- lookupDistFileWithIndexFallback(basePath) {
410
+ lookupDistFile(key) {
293
411
  const manifest = this.readManifest();
294
- const flatFileKey = `${basePath}.tsx`;
295
- const indexFileKey = `${basePath}/index.tsx`;
296
- return manifest[flatFileKey]?.file ?? manifest[indexFileKey]?.file;
412
+ return manifest[key]?.file;
297
413
  }
298
414
  readManifest() {
299
415
  return JSON.parse(readFileSync(path.join(process.cwd(), "dist", "assets", ".vite", "manifest.json"), "utf-8"));
300
416
  }
417
+ registerTool(...args) {
418
+ const baseFn = McpServerBase.prototype.registerTool;
419
+ if (typeof args[0] === "string") {
420
+ baseFn.call(this, args[0], args[1], args[2]);
421
+ return this;
422
+ }
423
+ const config = args[0];
424
+ const cb = args[1];
425
+ const { name, view, _meta: userToolMeta, ...toolFields } = config;
426
+ const toolMeta = { ...userToolMeta };
427
+ if (view) {
428
+ this.enforceOneToolPerView(view.component, name);
429
+ this.registerViewResources(name, view, toolMeta);
430
+ }
431
+ const wrappedCb = this.wrapHandler(cb, { attachViewUUID: Boolean(view) });
432
+ baseFn.call(this, name, { ...toolFields, _meta: toolMeta }, wrappedCb);
433
+ return this;
434
+ }
301
435
  }
302
436
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import type { WidgetHostType } from "./server.js";
1
+ import type { ViewHostType } from "./server.js";
2
2
  declare class TemplateHelper {
3
3
  private templateCache;
4
4
  private loadTemplate;
5
5
  renderProduction(data: {
6
- hostType: WidgetHostType;
6
+ hostType: ViewHostType;
7
7
  serverUrl: string;
8
- widgetFile: string;
8
+ viewFile: string;
9
9
  styleFile: string;
10
10
  }): string;
11
11
  renderDevelopment(data: {
12
- hostType: WidgetHostType;
12
+ hostType: ViewHostType;
13
13
  serverUrl: string;
14
- widgetName: string;
14
+ viewName: string;
15
15
  }): string;
16
16
  }
17
17
  export declare const templateHelper: TemplateHelper;
@@ -7,6 +7,6 @@
7
7
  </script>
8
8
  <script type="module" src="{{serverUrl}}/@vite/client"></script>
9
9
  <div id="root"></div>
10
- <script type="module" id="dev-widget-entry">
11
- import('{{serverUrl}}/src/widgets/{{widgetName}}');
10
+ <script type="module" id="dev-view-entry">
11
+ import('{{serverUrl}}/_skybridge/view/{{viewName}}');
12
12
  </script>
@@ -1,6 +1,6 @@
1
1
  <script type="module">window.skybridge = { hostType: "{{hostType}}", serverUrl: "{{serverUrl}}" };</script>
2
2
  <div id="root"></div>
3
3
  <script type="module">
4
- import('{{serverUrl}}/assets/{{widgetFile}}');
4
+ import('{{serverUrl}}/assets/{{viewFile}}');
5
5
  </script>
6
6
  <link rel="stylesheet" crossorigin href="{{serverUrl}}/assets/{{styleFile}}" />
@@ -0,0 +1,7 @@
1
+ import { type Router } from "express";
2
+ /**
3
+ * Builds an Express router that forwards `/__skybridge/tunnel` (POST/DELETE)
4
+ * and `/__skybridge/tunnel/events` (GET, SSE) to the cli's loopback control
5
+ * server. The `/__skybridge/` prefix avoids colliding with user-defined routes.
6
+ */
7
+ export declare function createTunnelProxyRouter(controlPort: number): Router;
@@ -0,0 +1,110 @@
1
+ import express, {} from "express";
2
+ /**
3
+ * Builds an Express router that forwards `/__skybridge/tunnel` (POST/DELETE)
4
+ * and `/__skybridge/tunnel/events` (GET, SSE) to the cli's loopback control
5
+ * server. The `/__skybridge/` prefix avoids colliding with user-defined routes.
6
+ */
7
+ export function createTunnelProxyRouter(controlPort) {
8
+ const router = express.Router();
9
+ const upstream = `http://127.0.0.1:${controlPort}/__skybridge/tunnel`;
10
+ const forwardJson = async (method, res) => {
11
+ try {
12
+ const upstreamRes = await fetch(upstream, { method });
13
+ const body = await upstreamRes.text();
14
+ res
15
+ .status(upstreamRes.status)
16
+ .type(upstreamRes.headers.get("content-type") ?? "application/json")
17
+ .send(body);
18
+ }
19
+ catch (err) {
20
+ res.status(502).json({
21
+ status: "error",
22
+ message: err instanceof Error ? err.message : "Tunnel control unavailable",
23
+ });
24
+ }
25
+ };
26
+ router.post("/__skybridge/tunnel", (_req, res) => {
27
+ void forwardJson("POST", res);
28
+ });
29
+ router.delete("/__skybridge/tunnel", (_req, res) => {
30
+ void forwardJson("DELETE", res);
31
+ });
32
+ router.get("/__skybridge/tunnel/events", async (req, res) => {
33
+ // Abort the upstream fetch when the client disconnects (or when the dev
34
+ // server shuts down and destroys the response).
35
+ const controller = new AbortController();
36
+ const onClose = () => controller.abort();
37
+ req.on("close", onClose);
38
+ let upstreamRes;
39
+ try {
40
+ upstreamRes = await fetch(`${upstream}/events`, {
41
+ signal: controller.signal,
42
+ });
43
+ }
44
+ catch (err) {
45
+ req.off("close", onClose);
46
+ if (!res.headersSent) {
47
+ res.status(502).json({
48
+ status: "error",
49
+ message: err instanceof Error ? err.message : "Tunnel control unavailable",
50
+ });
51
+ }
52
+ return;
53
+ }
54
+ const upstreamBody = upstreamRes.body;
55
+ if (!upstreamRes.ok || !upstreamBody) {
56
+ req.off("close", onClose);
57
+ res.status(upstreamRes.status).end();
58
+ return;
59
+ }
60
+ res.setHeader("Content-Type", upstreamRes.headers.get("content-type") ?? "text/event-stream");
61
+ res.setHeader("Cache-Control", "no-cache, no-transform");
62
+ res.setHeader("Connection", "keep-alive");
63
+ res.flushHeaders?.();
64
+ const reader = upstreamBody.getReader();
65
+ try {
66
+ while (true) {
67
+ const { value, done } = await reader.read();
68
+ if (done) {
69
+ break;
70
+ }
71
+ if (!res.write(value)) {
72
+ // Race "drain" against "close": Node does not emit "drain" on a
73
+ // destroyed socket, so without the close listener this hangs
74
+ // forever when the client disconnects under backpressure, leaking
75
+ // the upstream fetch and TunnelManager listeners.
76
+ await new Promise((resolve) => {
77
+ const onDrain = () => {
78
+ res.off("close", onClose);
79
+ resolve();
80
+ };
81
+ const onClose = () => {
82
+ res.off("drain", onDrain);
83
+ resolve();
84
+ };
85
+ res.once("drain", onDrain);
86
+ res.once("close", onClose);
87
+ });
88
+ }
89
+ }
90
+ }
91
+ catch {
92
+ // upstream aborted (typically because the client disconnected) —
93
+ // fall through to end()
94
+ }
95
+ finally {
96
+ req.off("close", onClose);
97
+ // Release the reader so the upstream stream's lifecycle isn't held by
98
+ // a lingering lock on the clean-done path.
99
+ try {
100
+ await reader.cancel();
101
+ }
102
+ catch {
103
+ // ignore — the reader may already be closed
104
+ }
105
+ res.end();
106
+ }
107
+ });
108
+ return router;
109
+ }
110
+ //# sourceMappingURL=tunnel-proxy-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-proxy-router.js","sourceRoot":"","sources":["../../src/server/tunnel-proxy-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};