@mcp-use/inspector 0.6.1 → 0.7.0-canary.4

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 (63) hide show
  1. package/dist/cli.js +297 -20
  2. package/dist/client/assets/__vite-browser-external-CHS79mP1.js +8 -0
  3. package/dist/client/assets/browser-DMU1DNWH.js +38211 -0
  4. package/dist/client/assets/chunk-VL2OQCWN-BSt8dT5C.js +6475 -0
  5. package/dist/client/assets/display-YIYC6WJE-BffT78jn.js +44742 -0
  6. package/dist/client/assets/embeddings-DTFNzTmk.js +21 -0
  7. package/dist/client/assets/index-B1pgTXiT.js +94617 -0
  8. package/dist/client/assets/index-BANvZe0e.js +17535 -0
  9. package/dist/client/assets/index-BqRMxNFR.js +10699 -0
  10. package/dist/client/assets/index-DSsmOzZI.js +5371 -0
  11. package/dist/client/assets/index-DX0TIfSM.js +102 -0
  12. package/dist/client/assets/index-Dz-Y_VJx.js +1780 -0
  13. package/dist/client/assets/index-kVFYovMy.css +5752 -0
  14. package/dist/client/assets/path-QsnVvLoj.js +62 -0
  15. package/dist/client/assets/transport-wrapper-browser-ChPHVnHg.js +165 -0
  16. package/dist/client/assets/winston-BAYefLfc.js +12326 -0
  17. package/dist/client/index.html +3 -3
  18. package/dist/server/{chunk-WYBXXYSP.js → chunk-26WTIZ4S.js} +1 -1
  19. package/dist/server/{chunk-PYGYQT2G.js → chunk-6ZFXPXO4.js} +6 -6
  20. package/dist/server/chunk-CVECQ7BJ.js +78 -0
  21. package/dist/server/{chunk-DGUMOD7P.js → chunk-KW44WB52.js} +94 -11
  22. package/dist/server/chunk-PKBMQBKP.js +7 -0
  23. package/dist/server/{chunk-37X7HLUV.js → chunk-V5FEV5SU.js} +89 -14
  24. package/dist/server/{chunk-555LGZ3I.js → chunk-XU7SXB3C.js} +133 -10
  25. package/dist/server/cli.js +6 -4
  26. package/dist/server/index.js +7 -5
  27. package/dist/server/middleware.d.ts +5 -1
  28. package/dist/server/middleware.d.ts.map +1 -1
  29. package/dist/server/middleware.js +7 -5
  30. package/dist/server/rpc-log-bus.d.ts +17 -0
  31. package/dist/server/rpc-log-bus.d.ts.map +1 -0
  32. package/dist/server/rpc-log-bus.js +7 -0
  33. package/dist/server/server.js +6 -4
  34. package/dist/server/shared-routes.d.ts.map +1 -1
  35. package/dist/server/shared-routes.js +4 -2
  36. package/dist/server/shared-static.js +3 -2
  37. package/dist/server/shared-utils-browser.d.ts +2 -1
  38. package/dist/server/shared-utils-browser.d.ts.map +1 -1
  39. package/dist/server/shared-utils-browser.js +2 -1
  40. package/dist/server/shared-utils.d.ts +4 -1
  41. package/dist/server/shared-utils.d.ts.map +1 -1
  42. package/dist/server/shared-utils.js +2 -1
  43. package/dist/server/transport-wrapper.d.ts +6 -0
  44. package/dist/server/transport-wrapper.d.ts.map +1 -0
  45. package/dist/server/transport-wrapper.js +68 -0
  46. package/dist/server/utils.js +1 -0
  47. package/package.json +12 -3
  48. package/dist/client/assets/__vite-browser-external-DFygW7-s.js +0 -1
  49. package/dist/client/assets/chunk-VL2OQCWN-iRVOQjqe.js +0 -8
  50. package/dist/client/assets/display-LIYVTGEU-D2dm8q2H.js +0 -30
  51. package/dist/client/assets/embeddings-Dcyp0Vlp.js +0 -1
  52. package/dist/client/assets/index-6zrNEwtM.js +0 -4
  53. package/dist/client/assets/index-CAnbiFOL.css +0 -1
  54. package/dist/client/assets/index-CB1s6Wr6.js +0 -146
  55. package/dist/client/assets/index-CoMldIFv.js +0 -2
  56. package/dist/client/assets/index-DRz5BQNA.js +0 -1
  57. package/dist/client/assets/index-DUf1336L.js +0 -1559
  58. package/dist/client/assets/index-DmIKR5St.js +0 -1
  59. package/dist/client/assets/index-DpUpZFq2.js +0 -25
  60. package/dist/client/assets/index-DzegZXPW.js +0 -40
  61. package/dist/client/assets/langfuse-C4HKZ3NL-vCtAvQQV.js +0 -564
  62. package/dist/client/assets/path-C9FudP8b.js +0 -1
  63. package/dist/client/assets/winston-BVJ8PyEn.js +0 -37
package/dist/cli.js CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2
5
 
3
6
  // src/server/cli.ts
4
7
  import { serve } from "@hono/node-server";
@@ -324,7 +327,16 @@ function generateWidgetContainerHtml(basePath, toolId) {
324
327
  `;
325
328
  }
326
329
  function generateWidgetContentHtml(widgetData) {
327
- const { serverId, uri, toolInput, toolOutput, resourceData, toolId } = widgetData;
330
+ const {
331
+ serverId,
332
+ uri,
333
+ toolInput,
334
+ toolOutput,
335
+ resourceData,
336
+ toolId,
337
+ devServerBaseUrl,
338
+ theme
339
+ } = widgetData;
328
340
  console.log("[Widget Content] Using pre-fetched resource for:", {
329
341
  serverId,
330
342
  uri
@@ -355,23 +367,31 @@ function generateWidgetContentHtml(widgetData) {
355
367
  const safeToolOutput = JSON.stringify(toolOutput ?? null).replace(/</g, "\\u003c").replace(/>/g, "\\u003e");
356
368
  const safeToolId = JSON.stringify(toolId);
357
369
  const safeWidgetStateKey = JSON.stringify(widgetStateKey);
370
+ const safeTheme = JSON.stringify(theme === "dark" ? "dark" : "light");
358
371
  const apiScript = `
359
372
  <script>
360
373
  (function() {
361
374
  'use strict';
362
375
 
363
376
  // Change URL to "/" for React Router compatibility
364
- if (window.location.pathname !== '/') {
377
+ // Skip if running in Inspector dev-widget proxy to prevent redirecting iframe to Inspector home
378
+ if (window.location.pathname !== '/' && !window.location.pathname.includes('/dev-widget/')) {
365
379
  history.replaceState(null, '', '/');
366
380
  }
367
381
 
382
+ // Inject MCP widget utilities for Image component and file access
383
+ window.__mcpPublicUrl = ${devServerBaseUrl ? `"${devServerBaseUrl}/mcp-use/public"` : '""'};
384
+ window.__getFile = function(filename) {
385
+ return ${devServerBaseUrl ? `"${devServerBaseUrl}/mcp-use/widgets/"` : '""'} + filename;
386
+ };
387
+
368
388
  const openaiAPI = {
369
389
  toolInput: ${safeToolInput},
370
390
  toolOutput: ${safeToolOutput},
371
391
  toolResponseMetadata: null,
372
392
  displayMode: 'inline',
373
393
  maxHeight: 600,
374
- theme: 'dark',
394
+ theme: ${safeTheme},
375
395
  locale: 'en-US',
376
396
  safeArea: { insets: { top: 0, bottom: 0, left: 0, right: 0 } },
377
397
  userAgent: {},
@@ -444,6 +464,20 @@ function generateWidgetContentHtml(widgetData) {
444
464
  return this.sendFollowupTurn(prompt);
445
465
  },
446
466
 
467
+ async notifyIntrinsicHeight(height) {
468
+ console.log('[OpenAI Widget] notifyIntrinsicHeight called with:', height);
469
+ if (typeof height !== 'number' || height < 0) {
470
+ console.error('[OpenAI Widget] Invalid height value:', height);
471
+ throw new Error('Height must be a non-negative number');
472
+ }
473
+ const message = {
474
+ type: 'openai:notifyIntrinsicHeight',
475
+ height
476
+ };
477
+ console.log('[OpenAI Widget] Sending postMessage to parent:', message);
478
+ window.parent.postMessage(message, '*');
479
+ },
480
+
447
481
  openExternal(payload) {
448
482
  const href = typeof payload === 'string' ? payload : payload?.href;
449
483
  if (href) {
@@ -488,6 +522,18 @@ function generateWidgetContentHtml(widgetData) {
488
522
  } catch (err) {}
489
523
  }, 0);
490
524
 
525
+ // Listen for widget state requests from inspector
526
+ window.addEventListener('message', (event) => {
527
+ if (event.data?.type === 'mcp-inspector:getWidgetState') {
528
+ window.parent.postMessage({
529
+ type: 'mcp-inspector:widgetStateResponse',
530
+ toolId: event.data.toolId,
531
+ state: openaiAPI.widgetState
532
+ }, '*');
533
+ return;
534
+ }
535
+ });
536
+
491
537
  // Listen for globals changes from parent (for displayMode, theme, etc.)
492
538
  window.addEventListener('message', (event) => {
493
539
  // Handle new general globalsChanged message
@@ -614,34 +660,58 @@ function generateWidgetContentHtml(widgetData) {
614
660
  console.log("[Widget Content] Generated HTML length:", modifiedHtml.length);
615
661
  return { html: modifiedHtml };
616
662
  }
617
- function getWidgetSecurityHeaders(widgetCSP) {
663
+ function getWidgetSecurityHeaders(widgetCSP, devServerBaseUrl) {
618
664
  const trustedCdns = [
619
665
  "https://persistent.oaistatic.com",
620
666
  "https://*.oaistatic.com",
621
667
  "https://unpkg.com",
622
668
  "https://cdn.jsdelivr.net",
623
669
  "https://cdnjs.cloudflare.com",
624
- "https://cdn.skypack.dev"
670
+ "https://cdn.skypack.dev",
671
+ "https://*.openai.com"
625
672
  ];
626
- const allResourceDomains = [...trustedCdns];
673
+ const prodResourceDomains = [...trustedCdns];
627
674
  if (widgetCSP?.resource_domains) {
628
- allResourceDomains.push(...widgetCSP.resource_domains);
675
+ prodResourceDomains.push(...widgetCSP.resource_domains);
676
+ }
677
+ const prodResourceDomainsStr = prodResourceDomains.join(" ");
678
+ let devServerOrigin = null;
679
+ const allResourceDomains = [...prodResourceDomains];
680
+ if (devServerBaseUrl) {
681
+ try {
682
+ devServerOrigin = new URL(devServerBaseUrl).origin;
683
+ allResourceDomains.push(devServerOrigin);
684
+ } catch (e) {
685
+ console.warn(`[CSP] Invalid devServerBaseUrl: ${devServerBaseUrl}`);
686
+ }
629
687
  }
630
688
  const resourceDomainsStr = allResourceDomains.join(" ");
689
+ let imgSrc = "'self' data: https: blob:";
690
+ if (devServerOrigin) {
691
+ imgSrc = `'self' data: https: blob: ${devServerOrigin}`;
692
+ }
693
+ let mediaSrc = "'self' data: https: blob:";
694
+ if (devServerOrigin) {
695
+ mediaSrc = `'self' data: https: blob: ${devServerOrigin}`;
696
+ }
697
+ let fontSrc = `'self' data: ${resourceDomainsStr}`;
698
+ if (devServerOrigin) {
699
+ fontSrc = `'self' data: https: http: ${resourceDomainsStr}`;
700
+ }
631
701
  let connectSrc = "'self' https: wss: ws:";
632
702
  if (widgetCSP?.connect_domains && widgetCSP.connect_domains.length > 0) {
633
703
  connectSrc = `'self' ${widgetCSP.connect_domains.join(" ")} https: wss: ws:`;
634
704
  }
635
- return {
705
+ const headers = {
636
706
  "Content-Security-Policy": [
637
707
  "default-src 'self'",
638
708
  `script-src 'self' 'unsafe-inline' 'unsafe-eval' ${resourceDomainsStr}`,
639
709
  "worker-src 'self' blob:",
640
710
  "child-src 'self' blob:",
641
711
  `style-src 'self' 'unsafe-inline' ${resourceDomainsStr}`,
642
- "img-src 'self' data: https: blob:",
643
- "media-src 'self' data: https: blob:",
644
- `font-src 'self' data: ${resourceDomainsStr}`,
712
+ `img-src ${imgSrc}`,
713
+ `media-src ${mediaSrc}`,
714
+ `font-src ${fontSrc}`,
645
715
  `connect-src ${connectSrc}`,
646
716
  "frame-ancestors 'self'"
647
717
  ].join("; "),
@@ -651,6 +721,22 @@ function getWidgetSecurityHeaders(widgetCSP) {
651
721
  Pragma: "no-cache",
652
722
  Expires: "0"
653
723
  };
724
+ if (devServerOrigin) {
725
+ const prodConnectSrc = "'self' https: wss: ws:";
726
+ headers["Content-Security-Policy-Report-Only"] = [
727
+ "default-src 'self'",
728
+ `script-src 'self' 'unsafe-inline' 'unsafe-eval' ${prodResourceDomainsStr}`,
729
+ "worker-src 'self' blob:",
730
+ "child-src 'self' blob:",
731
+ `style-src 'self' 'unsafe-inline' ${prodResourceDomainsStr}`,
732
+ "img-src 'self' data: https: blob:",
733
+ "media-src 'self' data: https: blob:",
734
+ `font-src 'self' data: ${prodResourceDomainsStr}`,
735
+ `connect-src ${prodConnectSrc}`,
736
+ "frame-ancestors 'self'"
737
+ ].join("; ");
738
+ }
739
+ return headers;
654
740
  }
655
741
 
656
742
  // src/server/utils.ts
@@ -699,6 +785,77 @@ function formatErrorResponse(error, context) {
699
785
  };
700
786
  }
701
787
 
788
+ // src/server/rpc-log-bus.ts
789
+ var SimpleEventEmitter = class {
790
+ constructor() {
791
+ __publicField(this, "listeners", /* @__PURE__ */ new Map());
792
+ }
793
+ on(event, listener) {
794
+ if (!this.listeners.has(event)) {
795
+ this.listeners.set(event, /* @__PURE__ */ new Set());
796
+ }
797
+ this.listeners.get(event).add(listener);
798
+ }
799
+ off(event, listener) {
800
+ this.listeners.get(event)?.delete(listener);
801
+ }
802
+ emit(event, ...args2) {
803
+ this.listeners.get(event)?.forEach((listener) => {
804
+ try {
805
+ listener(...args2);
806
+ } catch (e) {
807
+ console.error("Error in event listener:", e);
808
+ }
809
+ });
810
+ }
811
+ };
812
+ var RpcLogBus = class {
813
+ constructor() {
814
+ __publicField(this, "emitter", new SimpleEventEmitter());
815
+ __publicField(this, "bufferByServer", /* @__PURE__ */ new Map());
816
+ }
817
+ publish(event) {
818
+ const buffer = this.bufferByServer.get(event.serverId) ?? [];
819
+ buffer.push(event);
820
+ if (buffer.length > 1e3) {
821
+ buffer.shift();
822
+ }
823
+ this.bufferByServer.set(event.serverId, buffer);
824
+ this.emitter.emit("event", event);
825
+ }
826
+ subscribe(serverIds, listener) {
827
+ const filter = new Set(serverIds);
828
+ const handler = (event) => {
829
+ if (filter.size === 0 || filter.has(event.serverId)) listener(event);
830
+ };
831
+ this.emitter.on("event", handler);
832
+ return () => this.emitter.off("event", handler);
833
+ }
834
+ getBuffer(serverIds, limit) {
835
+ const filter = new Set(serverIds);
836
+ const all = [];
837
+ for (const [serverId, buf] of this.bufferByServer.entries()) {
838
+ if (filter.size > 0 && !filter.has(serverId)) continue;
839
+ all.push(...buf);
840
+ }
841
+ all.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
842
+ if (limit === 0) return [];
843
+ if (!Number.isFinite(limit) || limit < 0) return all;
844
+ return all.slice(0, limit);
845
+ }
846
+ clear(serverIds) {
847
+ if (serverIds && serverIds.length > 0) {
848
+ const filter = new Set(serverIds);
849
+ for (const serverId of filter) {
850
+ this.bufferByServer.delete(serverId);
851
+ }
852
+ } else {
853
+ this.bufferByServer.clear();
854
+ }
855
+ }
856
+ };
857
+ var rpcLogBus = new RpcLogBus();
858
+
702
859
  // src/server/shared-routes.ts
703
860
  function registerInspectorRoutes(app2, config) {
704
861
  app2.get("/inspector/health", (c) => {
@@ -904,8 +1061,10 @@ function registerInspectorRoutes(app2, config) {
904
1061
  }
905
1062
  );
906
1063
  html = html.replace(
907
- /(src|href)="\/mcp-use\/widgets\//g,
908
- `$1="${proxyBase}/mcp-use/widgets/`
1064
+ /(src|href)="(\/mcp-use\/widgets\/[^"]+)"/g,
1065
+ (_match, attr, path) => {
1066
+ return `${attr}="${widgetData.devServerBaseUrl}${path}"`;
1067
+ }
909
1068
  );
910
1069
  html = html.replace(/(src|href)="\.\/([^"]+)"/g, (match, attr, path) => {
911
1070
  if (path.match(/\.(js|css|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/i)) {
@@ -913,14 +1072,45 @@ function registerInspectorRoutes(app2, config) {
913
1072
  }
914
1073
  return match;
915
1074
  });
916
- const host = c.req.header("host") || "localhost:3000";
917
- const protocol = c.req.header("x-forwarded-proto") || (c.req.url.startsWith("https") ? "https" : "http");
918
- const wsProtocol = protocol === "https" ? "wss" : "ws";
919
- html = html.replace(/__vite_ws__:\s*["']([^"']+)["']/g, () => {
920
- const proxyWsUrl = `${wsProtocol}://${host}/inspector/api/dev-widget/${toolId}/__vite_hmr`;
921
- return `__vite_ws__: "${proxyWsUrl}"`;
1075
+ if (widgetData.devServerBaseUrl) {
1076
+ const devServerUrl = new URL(widgetData.devServerBaseUrl);
1077
+ const wsProtocol = devServerUrl.protocol === "https:" ? "wss" : "ws";
1078
+ const wsHost = devServerUrl.host;
1079
+ const directWsUrl = `${wsProtocol}://${wsHost}/mcp-use/widgets/`;
1080
+ const baseTag = `<base href="${widgetData.devServerBaseUrl}/mcp-use/widgets/${widgetName}/">`;
1081
+ const cspWarningScript = `
1082
+ <script>
1083
+ // Listen for CSP violations (from Report-Only policy)
1084
+ document.addEventListener('securitypolicyviolation', (e) => {
1085
+ // Only warn about report-only violations (not enforced ones)
1086
+ if (e.disposition === 'report') {
1087
+ console.warn(
1088
+ '%c\u26A0\uFE0F CSP Warning: Resource would be blocked in production',
1089
+ 'color: orange; font-weight: bold',
1090
+ '\\n Blocked URL:', e.blockedURI,
1091
+ '\\n Directive:', e.violatedDirective,
1092
+ '\\n Policy:', e.originalPolicy,
1093
+ '\\n\\n\u2139\uFE0F To fix: Add this domain to your widget\\'s CSP configuration in appsSdkMetadata[\\'openai/widgetCSP\\']'
1094
+ );
1095
+ }
922
1096
  });
923
- const headers = getWidgetSecurityHeaders(widgetData.widgetCSP);
1097
+ </script>`;
1098
+ const viteConfigScript = `
1099
+ <script>
1100
+ // Configure Vite HMR to connect directly to dev server
1101
+ window.__vite_ws_url__ = "${directWsUrl}";
1102
+ </script>`;
1103
+ html = html.replace(/<head>/i, `<head>
1104
+ ${baseTag}`);
1105
+ html = html.replace(
1106
+ /<script/,
1107
+ cspWarningScript + viteConfigScript + "\n <script"
1108
+ );
1109
+ }
1110
+ const headers = getWidgetSecurityHeaders(
1111
+ widgetData.widgetCSP,
1112
+ widgetData.devServerBaseUrl
1113
+ );
924
1114
  Object.entries(headers).forEach(([key, value]) => {
925
1115
  c.header(key, value);
926
1116
  });
@@ -1027,6 +1217,93 @@ function registerInspectorRoutes(app2, config) {
1027
1217
  return c.json({ success: false });
1028
1218
  }
1029
1219
  });
1220
+ app2.post("/inspector/api/rpc/log", async (c) => {
1221
+ try {
1222
+ const event = await c.req.json();
1223
+ rpcLogBus.publish(event);
1224
+ return c.json({ success: true });
1225
+ } catch (error) {
1226
+ console.error("[RPC Log] Error receiving RPC event:", error);
1227
+ return c.json({ success: false });
1228
+ }
1229
+ });
1230
+ app2.delete("/inspector/api/rpc/log", async (c) => {
1231
+ try {
1232
+ const url = new URL(c.req.url);
1233
+ const serverIdsParam = url.searchParams.get("serverIds");
1234
+ const serverIds = serverIdsParam ? serverIdsParam.split(",").filter(Boolean) : void 0;
1235
+ rpcLogBus.clear(serverIds);
1236
+ return c.json({ success: true });
1237
+ } catch (error) {
1238
+ console.error("[RPC Log] Error clearing RPC log:", error);
1239
+ return c.json({ success: false });
1240
+ }
1241
+ });
1242
+ app2.get("/inspector/api/rpc/stream", async (c) => {
1243
+ const url = new URL(c.req.url);
1244
+ const replay = parseInt(url.searchParams.get("replay") || "3", 10);
1245
+ const serverIdsParam = url.searchParams.get("serverIds");
1246
+ const serverIds = serverIdsParam ? serverIdsParam.split(",").filter(Boolean) : [];
1247
+ const encoder = new TextEncoder();
1248
+ const stream = new ReadableStream({
1249
+ start(controller) {
1250
+ const send = (data) => {
1251
+ try {
1252
+ controller.enqueue(
1253
+ encoder.encode(`data: ${JSON.stringify(data)}
1254
+
1255
+ `)
1256
+ );
1257
+ } catch {
1258
+ }
1259
+ };
1260
+ try {
1261
+ const recent = rpcLogBus.getBuffer(
1262
+ serverIds,
1263
+ isNaN(replay) ? 3 : replay
1264
+ );
1265
+ for (const evt of recent) {
1266
+ send({ type: "rpc", ...evt });
1267
+ }
1268
+ } catch {
1269
+ }
1270
+ const unsubscribe = rpcLogBus.subscribe(
1271
+ serverIds,
1272
+ (evt) => {
1273
+ send({ type: "rpc", ...evt });
1274
+ }
1275
+ );
1276
+ const keepalive = setInterval(() => {
1277
+ try {
1278
+ controller.enqueue(encoder.encode(`: keepalive ${Date.now()}
1279
+
1280
+ `));
1281
+ } catch {
1282
+ }
1283
+ }, 15e3);
1284
+ c.req.raw.signal?.addEventListener("abort", () => {
1285
+ try {
1286
+ clearInterval(keepalive);
1287
+ unsubscribe();
1288
+ } catch {
1289
+ }
1290
+ try {
1291
+ controller.close();
1292
+ } catch {
1293
+ }
1294
+ });
1295
+ }
1296
+ });
1297
+ return new Response(stream, {
1298
+ headers: {
1299
+ "Content-Type": "text/event-stream",
1300
+ "Cache-Control": "no-cache",
1301
+ Connection: "keep-alive",
1302
+ "Access-Control-Allow-Origin": "*",
1303
+ "Access-Control-Expose-Headers": "*"
1304
+ }
1305
+ });
1306
+ });
1030
1307
  }
1031
1308
 
1032
1309
  // src/server/shared-static.ts
@@ -0,0 +1,8 @@
1
+ const __viteBrowserExternal = {};
2
+ const os = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3
+ __proto__: null,
4
+ default: __viteBrowserExternal
5
+ }, Symbol.toStringTag, { value: "Module" }));
6
+ export {
7
+ os as o
8
+ };