skybridge 0.0.0-dev.b25e944 → 0.0.0-dev.b27efff

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 (146) 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/use-messages.d.ts +3 -0
  5. package/dist/cli/use-messages.js +11 -0
  6. package/dist/cli/use-messages.js.map +1 -0
  7. package/dist/cli/use-nodemon.d.ts +2 -2
  8. package/dist/cli/use-nodemon.js +8 -24
  9. package/dist/cli/use-nodemon.js.map +1 -1
  10. package/dist/cli/use-tunnel.d.ts +13 -7
  11. package/dist/cli/use-tunnel.js +35 -39
  12. package/dist/cli/use-tunnel.js.map +1 -1
  13. package/dist/commands/build.js +28 -7
  14. package/dist/commands/build.js.map +1 -1
  15. package/dist/commands/dev.d.ts +1 -0
  16. package/dist/commands/dev.js +10 -5
  17. package/dist/commands/dev.js.map +1 -1
  18. package/dist/commands/start.js +7 -10
  19. package/dist/commands/start.js.map +1 -1
  20. package/dist/server/content-helpers.d.ts +27 -0
  21. package/dist/server/content-helpers.js +46 -0
  22. package/dist/server/content-helpers.js.map +1 -0
  23. package/dist/server/content-helpers.test.js +70 -0
  24. package/dist/server/content-helpers.test.js.map +1 -0
  25. package/dist/server/express.d.ts +1 -1
  26. package/dist/server/express.js +3 -3
  27. package/dist/server/express.js.map +1 -1
  28. package/dist/server/express.test.js +39 -2
  29. package/dist/server/express.test.js.map +1 -1
  30. package/dist/server/index.d.ts +4 -3
  31. package/dist/server/index.js +3 -2
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/inferUtilityTypes.d.ts +6 -6
  34. package/dist/server/metric.d.ts +6 -5
  35. package/dist/server/metric.js +20 -6
  36. package/dist/server/metric.js.map +1 -1
  37. package/dist/server/middleware.test.js +12 -9
  38. package/dist/server/middleware.test.js.map +1 -1
  39. package/dist/server/server.d.ts +95 -72
  40. package/dist/server/server.js +195 -63
  41. package/dist/server/server.js.map +1 -1
  42. package/dist/server/templateHelper.d.ts +5 -5
  43. package/dist/server/templates/development.hbs +2 -2
  44. package/dist/server/templates/production.hbs +1 -1
  45. package/dist/server/viewsDevServer.d.ts +14 -0
  46. package/dist/server/viewsDevServer.js +45 -0
  47. package/dist/server/viewsDevServer.js.map +1 -0
  48. package/dist/test/utils.d.ts +13 -21
  49. package/dist/test/utils.js +42 -37
  50. package/dist/test/utils.js.map +1 -1
  51. package/dist/test/view.test.js +523 -0
  52. package/dist/test/view.test.js.map +1 -0
  53. package/dist/version.d.ts +1 -0
  54. package/dist/version.js +5 -0
  55. package/dist/version.js.map +1 -0
  56. package/dist/web/bridges/apps-sdk/adaptor.d.ts +5 -3
  57. package/dist/web/bridges/apps-sdk/adaptor.js +32 -14
  58. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -1
  59. package/dist/web/bridges/apps-sdk/types.d.ts +10 -5
  60. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  61. package/dist/web/bridges/mcp-app/adaptor.d.ts +15 -5
  62. package/dist/web/bridges/mcp-app/adaptor.js +106 -22
  63. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -1
  64. package/dist/web/bridges/types.d.ts +14 -8
  65. package/dist/web/components/modal-provider.js +2 -2
  66. package/dist/web/components/modal-provider.js.map +1 -1
  67. package/dist/web/create-store.js +17 -3
  68. package/dist/web/create-store.js.map +1 -1
  69. package/dist/web/create-store.test.js +14 -16
  70. package/dist/web/create-store.test.js.map +1 -1
  71. package/dist/web/data-llm.d.ts +1 -1
  72. package/dist/web/data-llm.js +3 -3
  73. package/dist/web/data-llm.js.map +1 -1
  74. package/dist/web/data-llm.test.js +22 -22
  75. package/dist/web/data-llm.test.js.map +1 -1
  76. package/dist/web/generate-helpers.d.ts +20 -18
  77. package/dist/web/generate-helpers.js +20 -18
  78. package/dist/web/generate-helpers.js.map +1 -1
  79. package/dist/web/generate-helpers.test-d.js +26 -26
  80. package/dist/web/generate-helpers.test-d.js.map +1 -1
  81. package/dist/web/helpers/state.d.ts +2 -2
  82. package/dist/web/helpers/state.js +11 -11
  83. package/dist/web/helpers/state.js.map +1 -1
  84. package/dist/web/helpers/state.test.js +9 -9
  85. package/dist/web/helpers/state.test.js.map +1 -1
  86. package/dist/web/hooks/index.d.ts +1 -1
  87. package/dist/web/hooks/index.js +1 -1
  88. package/dist/web/hooks/index.js.map +1 -1
  89. package/dist/web/hooks/use-files.d.ts +2 -1
  90. package/dist/web/hooks/use-files.js +1 -0
  91. package/dist/web/hooks/use-files.js.map +1 -1
  92. package/dist/web/hooks/use-files.test.js +22 -2
  93. package/dist/web/hooks/use-files.test.js.map +1 -1
  94. package/dist/web/hooks/use-request-modal.d.ts +1 -1
  95. package/dist/web/hooks/use-request-modal.js +4 -4
  96. package/dist/web/hooks/use-request-modal.js.map +1 -1
  97. package/dist/web/hooks/use-request-modal.test.js +1 -1
  98. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  99. package/dist/web/hooks/use-view-state.d.ts +4 -0
  100. package/dist/web/hooks/use-view-state.js +32 -0
  101. package/dist/web/hooks/use-view-state.js.map +1 -0
  102. package/dist/web/hooks/use-view-state.test.js +177 -0
  103. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  104. package/dist/web/index.d.ts +1 -2
  105. package/dist/web/index.js +1 -2
  106. package/dist/web/index.js.map +1 -1
  107. package/dist/web/mount-view.d.ts +1 -0
  108. package/dist/web/{mount-widget.js → mount-view.js} +2 -2
  109. package/dist/web/mount-view.js.map +1 -0
  110. package/dist/web/plugin/plugin.d.ts +4 -1
  111. package/dist/web/plugin/plugin.js +112 -25
  112. package/dist/web/plugin/plugin.js.map +1 -1
  113. package/dist/web/plugin/scan-views.d.ts +8 -0
  114. package/dist/web/plugin/scan-views.js +70 -0
  115. package/dist/web/plugin/scan-views.js.map +1 -0
  116. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  117. package/dist/web/plugin/scan-views.test.js +67 -0
  118. package/dist/web/plugin/scan-views.test.js.map +1 -0
  119. package/dist/web/plugin/validate-view.d.ts +1 -0
  120. package/dist/web/plugin/validate-view.js +9 -0
  121. package/dist/web/plugin/validate-view.js.map +1 -0
  122. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  123. package/dist/web/plugin/validate-view.test.js +24 -0
  124. package/dist/web/plugin/validate-view.test.js.map +1 -0
  125. package/package.json +15 -8
  126. package/tsconfig.base.json +2 -0
  127. package/dist/server/widgetsDevServer.d.ts +0 -13
  128. package/dist/server/widgetsDevServer.js +0 -52
  129. package/dist/server/widgetsDevServer.js.map +0 -1
  130. package/dist/test/widget.test.js +0 -263
  131. package/dist/test/widget.test.js.map +0 -1
  132. package/dist/web/hooks/use-widget-state.d.ts +0 -4
  133. package/dist/web/hooks/use-widget-state.js +0 -32
  134. package/dist/web/hooks/use-widget-state.js.map +0 -1
  135. package/dist/web/hooks/use-widget-state.test.js +0 -64
  136. package/dist/web/hooks/use-widget-state.test.js.map +0 -1
  137. package/dist/web/mount-widget.d.ts +0 -1
  138. package/dist/web/mount-widget.js.map +0 -1
  139. package/dist/web/plugin/validate-widget.d.ts +0 -5
  140. package/dist/web/plugin/validate-widget.js +0 -27
  141. package/dist/web/plugin/validate-widget.js.map +0 -1
  142. package/dist/web/plugin/validate-widget.test.js +0 -42
  143. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  144. /package/dist/{test/widget.test.d.ts → server/content-helpers.test.d.ts} +0 -0
  145. /package/dist/{web/hooks/use-widget-state.test.d.ts → test/view.test.d.ts} +0 -0
  146. /package/dist/web/{plugin/validate-widget.test.d.ts → hooks/use-view-state.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();
@@ -121,90 +161,123 @@ export class McpServer extends McpServerBase {
121
161
  });
122
162
  });
123
163
  }
124
- registerWidget(name, resourceConfig, toolConfig, toolCallback) {
125
- const userMeta = resourceConfig._meta;
126
- const toolMeta = {
127
- ...toolConfig._meta,
128
- };
129
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("apps-sdk")) {
130
- const widgetConfig = {
164
+ enforceOneToolPerView(component, toolName) {
165
+ const existingTool = this.claimedViews.get(component);
166
+ if (existingTool) {
167
+ throw new Error(`skybridge: view "${component}" is already used by tool "${existingTool}". Tool "${toolName}" cannot also reference it — each view backs exactly one tool.`);
168
+ }
169
+ this.claimedViews.set(component, toolName);
170
+ }
171
+ registerViewResources(toolName, view, toolMeta) {
172
+ const hosts = view.hosts ?? ["apps-sdk", "mcp-app"];
173
+ // Append a content-derived version param so hosts (e.g. ChatGPT) bust
174
+ // their cache when the bundle changes, but keep the URI stable across
175
+ // `tools/list` calls when the bundle hasn't changed.
176
+ const versionParam = this.computeViewVersionParam(view.component);
177
+ if (hosts.includes("apps-sdk")) {
178
+ const viewResource = {
131
179
  hostType: "apps-sdk",
132
- uri: `ui://widgets/apps-sdk/${name}.html`,
180
+ uri: `ui://views/apps-sdk/${view.component}.html${versionParam}`,
133
181
  mimeType: "text/html+skybridge",
134
182
  buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
135
- const userUi = userMeta?.ui;
136
- const userCsp = userUi?.csp;
137
183
  const defaults = {
138
184
  "openai/widgetCSP": {
139
185
  resource_domains: resourceDomains,
140
186
  connect_domains: connectDomains,
141
187
  },
142
188
  "openai/widgetDomain": domain,
143
- "openai/widgetDescription": resourceConfig.description,
189
+ "openai/widgetDescription": view.description,
144
190
  };
145
- const fromUi = {
191
+ const fromView = {
146
192
  "openai/widgetCSP": {
147
- resource_domains: userCsp?.resourceDomains,
148
- connect_domains: userCsp?.connectDomains,
149
- frame_domains: userCsp?.frameDomains,
150
- redirect_domains: userCsp?.redirectDomains,
193
+ resource_domains: view.csp?.resourceDomains,
194
+ connect_domains: view.csp?.connectDomains,
195
+ frame_domains: view.csp?.frameDomains,
196
+ redirect_domains: view.csp?.redirectDomains,
151
197
  },
152
- "openai/widgetDomain": userUi?.domain,
153
- "openai/widgetPrefersBorder": userUi?.prefersBorder,
198
+ "openai/widgetDomain": view.domain,
199
+ "openai/widgetPrefersBorder": view.prefersBorder,
154
200
  };
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 });
201
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
202
+ "openai/widgetDomain": overrides.domain,
203
+ });
204
+ if (view._meta) {
205
+ return { ...base, ...view._meta };
206
+ }
207
+ return base;
157
208
  },
158
209
  };
159
- this.registerWidgetResource({
160
- name,
161
- widgetConfig,
162
- resourceConfig,
210
+ this.registerViewResource({
211
+ name: toolName,
212
+ viewResource,
213
+ view,
163
214
  });
164
- toolMeta["openai/outputTemplate"] = widgetConfig.uri;
215
+ toolMeta["openai/outputTemplate"] = viewResource.uri;
165
216
  }
166
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("mcp-app")) {
167
- const widgetConfig = {
217
+ if (hosts.includes("mcp-app")) {
218
+ const viewResource = {
168
219
  hostType: "mcp-app",
169
- uri: `ui://widgets/ext-apps/${name}.html`,
220
+ uri: `ui://views/ext-apps/${view.component}.html${versionParam}`,
170
221
  mimeType: "text/html;profile=mcp-app",
171
- buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
222
+ buildContentMeta: ({ resourceDomains, connectDomains, domain, baseUriDomains }, overrides) => {
172
223
  const defaults = {
173
224
  ui: {
174
225
  csp: {
175
226
  resourceDomains,
176
227
  connectDomains,
228
+ baseUriDomains,
177
229
  },
178
230
  domain,
179
231
  },
180
232
  };
181
- return mergeWithUnion(defaults, {
182
- ui: { ...userMeta?.ui, ...overrides },
233
+ const fromView = {
234
+ ui: {
235
+ ...(view.description && { description: view.description }),
236
+ ...(view.prefersBorder !== undefined && {
237
+ prefersBorder: view.prefersBorder,
238
+ }),
239
+ ...(view.domain && { domain: view.domain }),
240
+ csp: {
241
+ ...(view.csp?.resourceDomains && {
242
+ resourceDomains: view.csp.resourceDomains,
243
+ }),
244
+ ...(view.csp?.connectDomains && {
245
+ connectDomains: view.csp.connectDomains,
246
+ }),
247
+ ...(view.csp?.frameDomains && {
248
+ frameDomains: view.csp.frameDomains,
249
+ }),
250
+ ...(view.csp?.baseUriDomains && {
251
+ baseUriDomains: view.csp.baseUriDomains,
252
+ }),
253
+ ...(view.csp?.redirectDomains && {
254
+ redirectDomains: view.csp.redirectDomains,
255
+ }),
256
+ },
257
+ },
258
+ };
259
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
260
+ ui: overrides,
183
261
  });
262
+ if (view._meta) {
263
+ return { ...base, ...view._meta };
264
+ }
265
+ return base;
184
266
  },
185
267
  };
186
- this.registerWidgetResource({
187
- name,
188
- widgetConfig,
189
- resourceConfig,
268
+ this.registerViewResource({
269
+ name: toolName,
270
+ viewResource,
271
+ view,
190
272
  });
191
273
  // @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 };
274
+ toolMeta["ui/resourceUri"] = viewResource.uri;
275
+ toolMeta.ui = { resourceUri: viewResource.uri };
194
276
  }
195
- this.registerTool(name, {
196
- ...toolConfig,
197
- _meta: toolMeta,
198
- }, toolCallback);
199
- return this;
200
277
  }
201
- registerTool(name, config, cb) {
202
- super.registerTool(name, config, cb);
203
- return this;
204
- }
205
- registerWidgetResource({ name, widgetConfig, resourceConfig, }) {
206
- const { hostType, uri: widgetUri, mimeType, buildContentMeta, } = widgetConfig;
207
- this.registerResource(name, widgetUri, { ...resourceConfig, _meta: resourceConfig._meta }, async (uri, extra) => {
278
+ registerViewResource({ name, viewResource, view, }) {
279
+ const { hostType, uri: viewUri, mimeType, buildContentMeta } = viewResource;
280
+ this.registerResource(name, viewUri, { description: view.description }, async (uri, extra) => {
208
281
  const isProduction = process.env.NODE_ENV === "production";
209
282
  const isClaude = extra?.requestInfo?.headers?.["user-agent"] === "Claude-User";
210
283
  const headers = extra?.requestInfo?.headers || {};
@@ -237,13 +310,13 @@ export class McpServer extends McpServerBase {
237
310
  ? templateHelper.renderProduction({
238
311
  hostType,
239
312
  serverUrl,
240
- widgetFile: this.lookupDistFileWithIndexFallback(`src/widgets/${name}`),
241
- styleFile: this.lookupDistFile("style.css"),
313
+ viewFile: this.lookupViewFile(view.component),
314
+ styleFile: this.lookupDistFile("style.css") ?? "",
242
315
  })
243
316
  : templateHelper.renderDevelopment({
244
317
  hostType,
245
318
  serverUrl,
246
- widgetName: name,
319
+ viewName: view.component,
247
320
  });
248
321
  const connectDomains = [serverUrl];
249
322
  if (!isProduction) {
@@ -254,7 +327,10 @@ export class McpServer extends McpServerBase {
254
327
  let contentMetaOverrides = {};
255
328
  if (isClaude) {
256
329
  const pathname = extra?.requestInfo?.url?.pathname ?? "";
257
- const url = `${serverUrl}${pathname}`;
330
+ const rawUrl = header("x-alpic-forwarded-url") ?? `${serverUrl}${pathname}`;
331
+ // Strip a lone trailing slash so the hash matches the connector URL
332
+ // as registered with Claude (which has no trailing slash on bare origins).
333
+ const url = rawUrl.endsWith("/") ? rawUrl.slice(0, -1) : rawUrl;
258
334
  const hash = crypto
259
335
  .createHash("sha256")
260
336
  .update(url)
@@ -275,18 +351,74 @@ export class McpServer extends McpServerBase {
275
351
  };
276
352
  });
277
353
  }
278
- lookupDistFile(key) {
354
+ wrapHandler(cb, { attachViewUUID }) {
355
+ return async (args, extra) => {
356
+ const result = await cb(args, extra);
357
+ return {
358
+ ...result,
359
+ content: normalizeContent(result.content),
360
+ ...(attachViewUUID && {
361
+ _meta: {
362
+ ...result._meta,
363
+ viewUUID: crypto.randomUUID(),
364
+ },
365
+ }),
366
+ };
367
+ };
368
+ }
369
+ computeViewVersionParam(viewName) {
370
+ if (process.env.NODE_ENV !== "production") {
371
+ return "";
372
+ }
373
+ try {
374
+ const viewFile = this.lookupViewFile(viewName);
375
+ const styleFile = this.lookupDistFile("style.css") ?? "";
376
+ const hash = crypto
377
+ .createHash("sha256")
378
+ .update(viewFile)
379
+ .update("\0")
380
+ .update(styleFile)
381
+ .digest("hex")
382
+ .slice(0, 8);
383
+ return `?v=${hash}`;
384
+ }
385
+ catch {
386
+ return "";
387
+ }
388
+ }
389
+ lookupViewFile(viewName) {
279
390
  const manifest = this.readManifest();
280
- return manifest[key]?.file;
391
+ for (const entry of Object.values(manifest)) {
392
+ if (entry?.isEntry && entry.name === viewName && entry.file) {
393
+ return entry.file;
394
+ }
395
+ }
396
+ 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.`);
281
397
  }
282
- lookupDistFileWithIndexFallback(basePath) {
398
+ lookupDistFile(key) {
283
399
  const manifest = this.readManifest();
284
- const flatFileKey = `${basePath}.tsx`;
285
- const indexFileKey = `${basePath}/index.tsx`;
286
- return manifest[flatFileKey]?.file ?? manifest[indexFileKey]?.file;
400
+ return manifest[key]?.file;
287
401
  }
288
402
  readManifest() {
289
403
  return JSON.parse(readFileSync(path.join(process.cwd(), "dist", "assets", ".vite", "manifest.json"), "utf-8"));
290
404
  }
405
+ registerTool(...args) {
406
+ const baseFn = McpServerBase.prototype.registerTool;
407
+ if (typeof args[0] === "string") {
408
+ baseFn.call(this, args[0], args[1], args[2]);
409
+ return this;
410
+ }
411
+ const config = args[0];
412
+ const cb = args[1];
413
+ const { name, view, _meta: userToolMeta, ...toolFields } = config;
414
+ const toolMeta = { ...userToolMeta };
415
+ if (view) {
416
+ this.enforceOneToolPerView(view.component, name);
417
+ this.registerViewResources(name, view, toolMeta);
418
+ }
419
+ const wrappedCb = this.wrapHandler(cb, { attachViewUUID: Boolean(view) });
420
+ baseFn.call(this, name, { ...toolFields, _meta: toolMeta }, wrappedCb);
421
+ return this;
422
+ }
291
423
  }
292
424
  //# 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,14 @@
1
+ import type http from "node:http";
2
+ import { type Router } from "express";
3
+ /**
4
+ * Vite dev-server middleware for view assets.
5
+ *
6
+ * MUST be mounted at the Express app root so Vite can intercept
7
+ * `/@vite/client`, `/@react-refresh`, and `/_skybridge/view/...` imports:
8
+ *
9
+ * const app = express();
10
+ * if (env.NODE_ENV !== "production") {
11
+ * app.use(await viewsDevServer(httpServer));
12
+ * }
13
+ */
14
+ export declare const viewsDevServer: (httpServer: http.Server) => Promise<Router>;
@@ -0,0 +1,45 @@
1
+ import path from "node:path";
2
+ import cors from "cors";
3
+ import express, {} from "express";
4
+ import { assetBaseUrlTransformPlugin } from "./asset-base-url-transform-plugin.js";
5
+ /**
6
+ * Vite dev-server middleware for view assets.
7
+ *
8
+ * MUST be mounted at the Express app root so Vite can intercept
9
+ * `/@vite/client`, `/@react-refresh`, and `/_skybridge/view/...` imports:
10
+ *
11
+ * const app = express();
12
+ * if (env.NODE_ENV !== "production") {
13
+ * app.use(await viewsDevServer(httpServer));
14
+ * }
15
+ */
16
+ export const viewsDevServer = async (httpServer) => {
17
+ const router = express.Router();
18
+ const { createServer, loadConfigFromFile } = await import("vite");
19
+ const root = process.cwd();
20
+ const configFile = path.join(root, "vite.config.ts");
21
+ const configResult = await loadConfigFromFile({ command: "serve", mode: "development" }, configFile, root);
22
+ const { build, preview, plugins: userPlugins = [], ...devConfig } = configResult?.config || {};
23
+ const vite = await createServer({
24
+ ...devConfig,
25
+ // Pass `false` so Vite skips re-resolving a config file — we already
26
+ // loaded and spread the user's config above.
27
+ configFile: false,
28
+ appType: "custom",
29
+ server: {
30
+ allowedHosts: true,
31
+ middlewareMode: true,
32
+ hmr: {
33
+ server: httpServer,
34
+ },
35
+ },
36
+ root,
37
+ // optimizeDeps is set by the skybridge Vite plugin (entries + include)
38
+ // so it can derive the view glob from `viewsDir`.
39
+ plugins: [...userPlugins, assetBaseUrlTransformPlugin()],
40
+ });
41
+ router.use(cors());
42
+ router.use("/", vite.middlewares);
43
+ return router;
44
+ };
45
+ //# sourceMappingURL=viewsDevServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewsDevServer.js","sourceRoot":"","sources":["../../src/server/viewsDevServer.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,EAAE,EAAe,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAuB,EACN,EAAE;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC3C,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EACzC,UAAU,EACV,IAAI,CACL,CAAC;IAEF,MAAM,EACJ,KAAK,EACL,OAAO,EACP,OAAO,EAAE,WAAW,GAAG,EAAE,EACzB,GAAG,SAAS,EACb,GAAG,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;QAC9B,GAAG,SAAS;QACZ,qEAAqE;QACrE,6CAA6C;QAC7C,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,GAAG,EAAE;gBACH,MAAM,EAAE,UAAU;aACnB;SACF;QACD,IAAI;QACJ,uEAAuE;QACvE,kDAAkD;QAClD,OAAO,EAAE,CAAC,GAAG,WAAW,EAAE,2BAA2B,EAAE,CAAC;KACzD,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -1,15 +1,12 @@
1
1
  import { type MockInstance } from "vitest";
2
2
  import { McpServer } from "../server/server.js";
3
- /**
4
- * Creates a real McpServer instance for testing
5
- */
6
3
  export declare function createMockMcpServer(): {
7
4
  server: McpServer;
8
5
  mockRegisterResource: MockInstance<McpServer["registerResource"]>;
9
- mockRegisterTool: MockInstance<McpServer["registerTool"]>;
6
+ mockRegisterTool: MockInstance;
10
7
  };
11
8
  export declare function createTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
12
- "search-voyage": import("../server/server.js").ToolDef<{
9
+ "search-trip": import("../server/server.js").ToolDef<{
13
10
  destination: string;
14
11
  departureDate?: string | undefined;
15
12
  maxPrice?: number | undefined;
@@ -30,9 +27,9 @@ export declare function createTestServer(): McpServer<Record<never, import("../s
30
27
  images: string[];
31
28
  }, unknown>;
32
29
  } & {
33
- "no-input-widget": import("../server/server.js").ToolDef<{}, {}, unknown>;
30
+ "no-input-view": import("../server/server.js").ToolDef<{}, {}, unknown>;
34
31
  } & {
35
- "inferred-output-widget": import("../server/server.js").ToolDef<{
32
+ "inferred-output-view": import("../server/server.js").ToolDef<{
36
33
  query: string;
37
34
  }, {
38
35
  inferredResults: {
@@ -60,7 +57,7 @@ export declare function createTestServer(): McpServer<Record<never, import("../s
60
57
  fetchedAt: string;
61
58
  }, unknown>;
62
59
  } & {
63
- "widget-with-metadata": import("../server/server.js").ToolDef<{
60
+ "view-with-metadata": import("../server/server.js").ToolDef<{
64
61
  resourceId: string;
65
62
  }, {
66
63
  data: {
@@ -82,7 +79,7 @@ export declare function createTestServer(): McpServer<Record<never, import("../s
82
79
  source: string;
83
80
  }>;
84
81
  } & {
85
- "widget-with-mixed-returns": import("../server/server.js").ToolDef<{
82
+ "view-with-mixed-returns": import("../server/server.js").ToolDef<{
86
83
  shouldSucceed: boolean;
87
84
  }, {
88
85
  error: string;
@@ -96,7 +93,7 @@ export declare function createTestServer(): McpServer<Record<never, import("../s
96
93
  }>;
97
94
  }>;
98
95
  export declare function createMinimalTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
99
- "search-voyage": import("../server/server.js").ToolDef<{
96
+ "search-trip": import("../server/server.js").ToolDef<{
100
97
  destination: string;
101
98
  }, {
102
99
  results: {
@@ -105,7 +102,7 @@ export declare function createMinimalTestServer(): McpServer<Record<never, impor
105
102
  }, unknown>;
106
103
  }>;
107
104
  export declare function createInterfaceTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
108
- "interface-widget": import("../server/server.js").ToolDef<{
105
+ "interface-view": import("../server/server.js").ToolDef<{
109
106
  id: string;
110
107
  }, {
111
108
  itemName: string;
@@ -115,21 +112,16 @@ export declare function createInterfaceTestServer(): McpServer<Record<never, imp
115
112
  version: number;
116
113
  }>;
117
114
  }>;
118
- /**
119
- * Mock extra parameter for resource callback
120
- */
121
- export declare function createMockExtra(host: string): {
115
+ export declare function createMockExtra(host: string, options?: {
116
+ headers?: Record<string, string | string[]>;
117
+ url?: URL | string;
118
+ }): {
122
119
  requestInfo: {
120
+ url?: string | URL | undefined;
123
121
  headers: {
124
122
  host: string;
125
123
  };
126
124
  };
127
125
  };
128
- /**
129
- * Sets up environment variables for testing
130
- */
131
126
  export declare function setTestEnv(env: Record<string, string>): void;
132
- /**
133
- * Resets environment variables
134
- */
135
127
  export declare function resetTestEnv(): void;