skybridge 0.0.0-dev.f025fa9 → 0.0.0-dev.f03017e

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 (126) hide show
  1. package/README.md +8 -4
  2. package/dist/cli/header.js +1 -1
  3. package/dist/cli/header.js.map +1 -1
  4. package/dist/cli/types.d.ts +5 -0
  5. package/dist/cli/types.js +2 -0
  6. package/dist/cli/types.js.map +1 -0
  7. package/dist/cli/use-messages.d.ts +3 -0
  8. package/dist/cli/use-messages.js +11 -0
  9. package/dist/cli/use-messages.js.map +1 -0
  10. package/dist/cli/use-nodemon.d.ts +2 -7
  11. package/dist/cli/use-nodemon.js +8 -20
  12. package/dist/cli/use-nodemon.js.map +1 -1
  13. package/dist/cli/use-tunnel.d.ts +14 -0
  14. package/dist/cli/use-tunnel.js +97 -0
  15. package/dist/cli/use-tunnel.js.map +1 -0
  16. package/dist/commands/build.js +27 -6
  17. package/dist/commands/build.js.map +1 -1
  18. package/dist/commands/dev.d.ts +2 -0
  19. package/dist/commands/dev.js +15 -2
  20. package/dist/commands/dev.js.map +1 -1
  21. package/dist/commands/start.js +7 -10
  22. package/dist/commands/start.js.map +1 -1
  23. package/dist/server/asset-base-url-transform-plugin.d.ts +5 -6
  24. package/dist/server/asset-base-url-transform-plugin.js +8 -9
  25. package/dist/server/asset-base-url-transform-plugin.js.map +1 -1
  26. package/dist/server/asset-base-url-transform-plugin.test.js +12 -13
  27. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -1
  28. package/dist/server/content-helpers.d.ts +27 -0
  29. package/dist/server/content-helpers.js +46 -0
  30. package/dist/server/content-helpers.js.map +1 -0
  31. package/dist/server/content-helpers.test.js +70 -0
  32. package/dist/server/content-helpers.test.js.map +1 -0
  33. package/dist/server/express.d.ts +6 -2
  34. package/dist/server/express.js +25 -20
  35. package/dist/server/express.js.map +1 -1
  36. package/dist/server/express.test.js +211 -2
  37. package/dist/server/express.test.js.map +1 -1
  38. package/dist/server/index.d.ts +4 -3
  39. package/dist/server/index.js +3 -2
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/server/metric.d.ts +14 -0
  42. package/dist/server/metric.js +62 -0
  43. package/dist/server/metric.js.map +1 -0
  44. package/dist/server/middleware.test.js +115 -5
  45. package/dist/server/middleware.test.js.map +1 -1
  46. package/dist/server/server.d.ts +98 -73
  47. package/dist/server/server.js +190 -65
  48. package/dist/server/server.js.map +1 -1
  49. package/dist/server/templateHelper.d.ts +5 -5
  50. package/dist/server/templates/development.hbs +2 -2
  51. package/dist/server/templates/production.hbs +1 -1
  52. package/dist/server/viewsDevServer.d.ts +14 -0
  53. package/dist/server/viewsDevServer.js +45 -0
  54. package/dist/server/viewsDevServer.js.map +1 -0
  55. package/dist/test/utils.d.ts +13 -21
  56. package/dist/test/utils.js +42 -37
  57. package/dist/test/utils.js.map +1 -1
  58. package/dist/test/view.test.js +454 -0
  59. package/dist/test/view.test.js.map +1 -0
  60. package/dist/version.d.ts +1 -0
  61. package/dist/version.js +5 -0
  62. package/dist/version.js.map +1 -0
  63. package/dist/web/bridges/apps-sdk/adaptor.d.ts +4 -2
  64. package/dist/web/bridges/apps-sdk/adaptor.js +24 -12
  65. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -1
  66. package/dist/web/bridges/apps-sdk/types.d.ts +10 -5
  67. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  68. package/dist/web/bridges/mcp-app/adaptor.d.ts +10 -0
  69. package/dist/web/bridges/mcp-app/adaptor.js +84 -0
  70. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -1
  71. package/dist/web/bridges/types.d.ts +10 -3
  72. package/dist/web/components/modal-provider.js +2 -4
  73. package/dist/web/components/modal-provider.js.map +1 -1
  74. package/dist/web/create-store.js +15 -1
  75. package/dist/web/create-store.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 +20 -20
  80. package/dist/web/generate-helpers.test-d.js.map +1 -1
  81. package/dist/web/hooks/use-files.d.ts +2 -1
  82. package/dist/web/hooks/use-files.js +1 -0
  83. package/dist/web/hooks/use-files.js.map +1 -1
  84. package/dist/web/hooks/use-files.test.js +22 -2
  85. package/dist/web/hooks/use-files.test.js.map +1 -1
  86. package/dist/web/hooks/use-request-modal.test.js +5 -1
  87. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  88. package/dist/web/hooks/use-user.js +18 -2
  89. package/dist/web/hooks/use-user.js.map +1 -1
  90. package/dist/web/hooks/use-user.test.js +28 -0
  91. package/dist/web/hooks/use-user.test.js.map +1 -1
  92. package/dist/web/hooks/use-widget-state.test.js +114 -1
  93. package/dist/web/hooks/use-widget-state.test.js.map +1 -1
  94. package/dist/web/index.d.ts +1 -0
  95. package/dist/web/index.js.map +1 -1
  96. package/dist/web/plugin/plugin.d.ts +4 -1
  97. package/dist/web/plugin/plugin.js +112 -25
  98. package/dist/web/plugin/plugin.js.map +1 -1
  99. package/dist/web/plugin/scan-views.d.ts +8 -0
  100. package/dist/web/plugin/scan-views.js +70 -0
  101. package/dist/web/plugin/scan-views.js.map +1 -0
  102. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  103. package/dist/web/plugin/scan-views.test.js +67 -0
  104. package/dist/web/plugin/scan-views.test.js.map +1 -0
  105. package/dist/web/plugin/transform-data-llm.js +1 -1
  106. package/dist/web/plugin/transform-data-llm.js.map +1 -1
  107. package/dist/web/plugin/validate-view.d.ts +1 -0
  108. package/dist/web/plugin/validate-view.js +9 -0
  109. package/dist/web/plugin/validate-view.js.map +1 -0
  110. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  111. package/dist/web/plugin/validate-view.test.js +24 -0
  112. package/dist/web/plugin/validate-view.test.js.map +1 -0
  113. package/package.json +19 -15
  114. package/tsconfig.base.json +5 -0
  115. package/dist/server/widgetsDevServer.d.ts +0 -13
  116. package/dist/server/widgetsDevServer.js +0 -57
  117. package/dist/server/widgetsDevServer.js.map +0 -1
  118. package/dist/test/widget.test.js +0 -263
  119. package/dist/test/widget.test.js.map +0 -1
  120. package/dist/web/plugin/validate-widget.d.ts +0 -5
  121. package/dist/web/plugin/validate-widget.js +0 -27
  122. package/dist/web/plugin/validate-widget.js.map +0 -1
  123. package/dist/web/plugin/validate-widget.test.js +0 -42
  124. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  125. /package/dist/{test/widget.test.d.ts → server/content-helpers.test.d.ts} +0 -0
  126. /package/dist/{web/plugin/validate-widget.test.d.ts → test/view.test.d.ts} +0 -0
@@ -2,9 +2,11 @@ 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";
9
+ import { createMiddlewareEntry } from "./metric.js";
8
10
  import { buildMiddlewareChain, getHandlerMaps } from "./middleware.js";
9
11
  import { templateHelper } from "./templateHelper.js";
10
12
  const mergeWithUnion = (target, source) => {
@@ -14,11 +16,33 @@ const mergeWithUnion = (target, source) => {
14
16
  }
15
17
  });
16
18
  };
17
- 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 {
18
33
  express;
19
34
  customMiddleware = [];
35
+ customErrorMiddleware = [];
20
36
  mcpMiddlewareEntries = [];
21
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
+ }
22
46
  use(pathOrHandler, ...handlers) {
23
47
  if (typeof pathOrHandler === "string") {
24
48
  this.customMiddleware.push({
@@ -33,6 +57,17 @@ export class McpServer extends McpServerBase {
33
57
  }
34
58
  return this;
35
59
  }
60
+ useOnError(pathOrHandler, ...handlers) {
61
+ if (typeof pathOrHandler === "string") {
62
+ this.customErrorMiddleware.push({ path: pathOrHandler, handlers });
63
+ }
64
+ else {
65
+ this.customErrorMiddleware.push({
66
+ handlers: [pathOrHandler, ...handlers],
67
+ });
68
+ }
69
+ return this;
70
+ }
36
71
  mcpMiddleware(filterOrHandler,
37
72
  // biome-ignore lint/suspicious/noExplicitAny: overloads narrow the handler type at call sites; implementation must accept all variants
38
73
  maybeHandler) {
@@ -62,12 +97,14 @@ export class McpServer extends McpServerBase {
62
97
  return;
63
98
  }
64
99
  this.mcpMiddlewareApplied = true;
65
- if (this.mcpMiddlewareEntries.length === 0) {
100
+ const monitoringEntry = createMiddlewareEntry();
101
+ const entries = monitoringEntry
102
+ ? [monitoringEntry, ...this.mcpMiddlewareEntries]
103
+ : this.mcpMiddlewareEntries;
104
+ if (entries.length === 0) {
66
105
  return;
67
106
  }
68
107
  const { requestHandlers, notificationHandlers } = getHandlerMaps(this.server);
69
- const entries = this.mcpMiddlewareEntries;
70
- // Wrap existing handlers and proxy future .set() for lazy SDK registration
71
108
  const instrumentMap = (map, isNotification) => {
72
109
  for (const [method, handler] of map) {
73
110
  map.set(method, buildMiddlewareChain(method, isNotification, handler, entries));
@@ -80,7 +117,26 @@ export class McpServer extends McpServerBase {
80
117
  }
81
118
  async connect(transport) {
82
119
  this.applyMcpMiddleware();
83
- 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);
84
140
  }
85
141
  async run() {
86
142
  this.applyMcpMiddleware();
@@ -90,6 +146,7 @@ export class McpServer extends McpServerBase {
90
146
  mcpServer: this,
91
147
  httpServer,
92
148
  customMiddleware: this.customMiddleware,
149
+ errorMiddleware: this.customErrorMiddleware,
93
150
  });
94
151
  }
95
152
  httpServer.on("request", this.express);
@@ -104,90 +161,119 @@ export class McpServer extends McpServerBase {
104
161
  });
105
162
  });
106
163
  }
107
- registerWidget(name, resourceConfig, toolConfig, toolCallback) {
108
- const userMeta = resourceConfig._meta;
109
- const toolMeta = {
110
- ...toolConfig._meta,
111
- };
112
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("apps-sdk")) {
113
- 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
+ if (hosts.includes("apps-sdk")) {
174
+ const viewResource = {
114
175
  hostType: "apps-sdk",
115
- uri: `ui://widgets/apps-sdk/${name}.html`,
176
+ uri: `ui://widgets/apps-sdk/${view.component}.html`,
116
177
  mimeType: "text/html+skybridge",
117
178
  buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
118
- const userUi = userMeta?.ui;
119
- const userCsp = userUi?.csp;
120
179
  const defaults = {
121
180
  "openai/widgetCSP": {
122
181
  resource_domains: resourceDomains,
123
182
  connect_domains: connectDomains,
124
183
  },
125
184
  "openai/widgetDomain": domain,
126
- "openai/widgetDescription": resourceConfig.description,
185
+ "openai/widgetDescription": view.description,
127
186
  };
128
- const fromUi = {
187
+ const fromView = {
129
188
  "openai/widgetCSP": {
130
- resource_domains: userCsp?.resourceDomains,
131
- connect_domains: userCsp?.connectDomains,
132
- frame_domains: userCsp?.frameDomains,
133
- redirect_domains: userCsp?.redirectDomains,
189
+ resource_domains: view.csp?.resourceDomains,
190
+ connect_domains: view.csp?.connectDomains,
191
+ frame_domains: view.csp?.frameDomains,
192
+ redirect_domains: view.csp?.redirectDomains,
134
193
  },
135
- "openai/widgetDomain": userUi?.domain,
136
- "openai/widgetPrefersBorder": userUi?.prefersBorder,
194
+ "openai/widgetDomain": view.domain,
195
+ "openai/widgetPrefersBorder": view.prefersBorder,
137
196
  };
138
- const directOpenaiKeys = Object.fromEntries(Object.entries(userMeta ?? {}).filter(([key]) => key.startsWith("openai/")));
139
- return mergeWithUnion(mergeWithUnion(mergeWithUnion(defaults, fromUi), directOpenaiKeys), { "openai/widgetDomain": overrides.domain });
197
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
198
+ "openai/widgetDomain": overrides.domain,
199
+ });
200
+ if (view._meta) {
201
+ return { ...base, ...view._meta };
202
+ }
203
+ return base;
140
204
  },
141
205
  };
142
- this.registerWidgetResource({
143
- name,
144
- widgetConfig,
145
- resourceConfig,
206
+ this.registerViewResource({
207
+ name: toolName,
208
+ viewResource,
209
+ view,
146
210
  });
147
- toolMeta["openai/outputTemplate"] = widgetConfig.uri;
211
+ toolMeta["openai/outputTemplate"] = viewResource.uri;
148
212
  }
149
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("mcp-app")) {
150
- const widgetConfig = {
213
+ if (hosts.includes("mcp-app")) {
214
+ const viewResource = {
151
215
  hostType: "mcp-app",
152
- uri: `ui://widgets/ext-apps/${name}.html`,
216
+ uri: `ui://widgets/ext-apps/${view.component}.html`,
153
217
  mimeType: "text/html;profile=mcp-app",
154
- buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
218
+ buildContentMeta: ({ resourceDomains, connectDomains, domain, baseUriDomains }, overrides) => {
155
219
  const defaults = {
156
220
  ui: {
157
221
  csp: {
158
222
  resourceDomains,
159
223
  connectDomains,
224
+ baseUriDomains,
160
225
  },
161
226
  domain,
162
227
  },
163
228
  };
164
- return mergeWithUnion(defaults, {
165
- ui: { ...userMeta?.ui, ...overrides },
229
+ const fromView = {
230
+ ui: {
231
+ ...(view.description && { description: view.description }),
232
+ ...(view.prefersBorder !== undefined && {
233
+ prefersBorder: view.prefersBorder,
234
+ }),
235
+ ...(view.domain && { domain: view.domain }),
236
+ csp: {
237
+ ...(view.csp?.resourceDomains && {
238
+ resourceDomains: view.csp.resourceDomains,
239
+ }),
240
+ ...(view.csp?.connectDomains && {
241
+ connectDomains: view.csp.connectDomains,
242
+ }),
243
+ ...(view.csp?.frameDomains && {
244
+ frameDomains: view.csp.frameDomains,
245
+ }),
246
+ ...(view.csp?.baseUriDomains && {
247
+ baseUriDomains: view.csp.baseUriDomains,
248
+ }),
249
+ ...(view.csp?.redirectDomains && {
250
+ redirectDomains: view.csp.redirectDomains,
251
+ }),
252
+ },
253
+ },
254
+ };
255
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
256
+ ui: overrides,
166
257
  });
258
+ if (view._meta) {
259
+ return { ...base, ...view._meta };
260
+ }
261
+ return base;
167
262
  },
168
263
  };
169
- this.registerWidgetResource({
170
- name,
171
- widgetConfig,
172
- resourceConfig,
264
+ this.registerViewResource({
265
+ name: toolName,
266
+ viewResource,
267
+ view,
173
268
  });
174
269
  // @ts-expect-error - For backwards compatibility with Claude current implementation of the specs
175
- toolMeta["ui/resourceUri"] = widgetConfig.uri;
176
- toolMeta.ui = { resourceUri: widgetConfig.uri };
270
+ toolMeta["ui/resourceUri"] = viewResource.uri;
271
+ toolMeta.ui = { resourceUri: viewResource.uri };
177
272
  }
178
- this.registerTool(name, {
179
- ...toolConfig,
180
- _meta: toolMeta,
181
- }, toolCallback);
182
- return this;
183
273
  }
184
- registerTool(name, config, cb) {
185
- super.registerTool(name, config, cb);
186
- return this;
187
- }
188
- registerWidgetResource({ name, widgetConfig, resourceConfig, }) {
189
- const { hostType, uri: widgetUri, mimeType, buildContentMeta, } = widgetConfig;
190
- this.registerResource(name, widgetUri, { ...resourceConfig, _meta: resourceConfig._meta }, async (uri, extra) => {
274
+ registerViewResource({ name, viewResource, view, }) {
275
+ const { hostType, uri: viewUri, mimeType, buildContentMeta } = viewResource;
276
+ this.registerResource(name, viewUri, { description: view.description }, async (uri, extra) => {
191
277
  const isProduction = process.env.NODE_ENV === "production";
192
278
  const isClaude = extra?.requestInfo?.headers?.["user-agent"] === "Claude-User";
193
279
  const headers = extra?.requestInfo?.headers || {};
@@ -220,13 +306,13 @@ export class McpServer extends McpServerBase {
220
306
  ? templateHelper.renderProduction({
221
307
  hostType,
222
308
  serverUrl,
223
- widgetFile: this.lookupDistFileWithIndexFallback(`src/widgets/${name}`),
224
- styleFile: this.lookupDistFile("style.css"),
309
+ viewFile: this.lookupViewFile(view.component),
310
+ styleFile: this.lookupDistFile("style.css") ?? "",
225
311
  })
226
312
  : templateHelper.renderDevelopment({
227
313
  hostType,
228
314
  serverUrl,
229
- widgetName: name,
315
+ viewName: view.component,
230
316
  });
231
317
  const connectDomains = [serverUrl];
232
318
  if (!isProduction) {
@@ -237,7 +323,10 @@ export class McpServer extends McpServerBase {
237
323
  let contentMetaOverrides = {};
238
324
  if (isClaude) {
239
325
  const pathname = extra?.requestInfo?.url?.pathname ?? "";
240
- const url = `${serverUrl}${pathname}`;
326
+ const rawUrl = header("x-alpic-forwarded-url") ?? `${serverUrl}${pathname}`;
327
+ // Strip a lone trailing slash so the hash matches the connector URL
328
+ // as registered with Claude (which has no trailing slash on bare origins).
329
+ const url = rawUrl.endsWith("/") ? rawUrl.slice(0, -1) : rawUrl;
241
330
  const hash = crypto
242
331
  .createHash("sha256")
243
332
  .update(url)
@@ -258,18 +347,54 @@ export class McpServer extends McpServerBase {
258
347
  };
259
348
  });
260
349
  }
261
- lookupDistFile(key) {
350
+ wrapHandler(cb, { attachViewUUID }) {
351
+ return async (args, extra) => {
352
+ const result = await cb(args, extra);
353
+ return {
354
+ ...result,
355
+ content: normalizeContent(result.content),
356
+ ...(attachViewUUID && {
357
+ _meta: {
358
+ ...result._meta,
359
+ viewUUID: crypto.randomUUID(),
360
+ },
361
+ }),
362
+ };
363
+ };
364
+ }
365
+ lookupViewFile(viewName) {
262
366
  const manifest = this.readManifest();
263
- return manifest[key]?.file;
367
+ for (const entry of Object.values(manifest)) {
368
+ if (entry?.isEntry && entry.name === viewName && entry.file) {
369
+ return entry.file;
370
+ }
371
+ }
372
+ 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.`);
264
373
  }
265
- lookupDistFileWithIndexFallback(basePath) {
374
+ lookupDistFile(key) {
266
375
  const manifest = this.readManifest();
267
- const flatFileKey = `${basePath}.tsx`;
268
- const indexFileKey = `${basePath}/index.tsx`;
269
- return manifest[flatFileKey]?.file ?? manifest[indexFileKey]?.file;
376
+ return manifest[key]?.file;
270
377
  }
271
378
  readManifest() {
272
379
  return JSON.parse(readFileSync(path.join(process.cwd(), "dist", "assets", ".vite", "manifest.json"), "utf-8"));
273
380
  }
381
+ registerTool(...args) {
382
+ const baseFn = McpServerBase.prototype.registerTool;
383
+ if (typeof args[0] === "string") {
384
+ baseFn.call(this, args[0], args[1], args[2]);
385
+ return this;
386
+ }
387
+ const config = args[0];
388
+ const cb = args[1];
389
+ const { name, view, _meta: userToolMeta, ...toolFields } = config;
390
+ const toolMeta = { ...userToolMeta };
391
+ if (view) {
392
+ this.enforceOneToolPerView(view.component, name);
393
+ this.registerViewResources(name, view, toolMeta);
394
+ }
395
+ const wrappedCb = this.wrapHandler(cb, { attachViewUUID: Boolean(view) });
396
+ baseFn.call(this, name, { ...toolFields, _meta: toolMeta }, wrappedCb);
397
+ return this;
398
+ }
274
399
  }
275
400
  //# 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;