sunpeak 0.20.47 → 0.20.49

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 (50) hide show
  1. package/bin/commands/inspect.mjs +76 -10
  2. package/bin/lib/inspect/inspect-config.d.mts +8 -0
  3. package/bin/lib/inspect/inspect-config.mjs +9 -0
  4. package/bin/lib/inspect/inspect-server.d.mts +2 -0
  5. package/bin/lib/test/test-config.d.mts +6 -0
  6. package/bin/lib/test/test-config.mjs +11 -0
  7. package/bin/sunpeak.js +1 -0
  8. package/dist/chatgpt/index.cjs +1 -1
  9. package/dist/chatgpt/index.js +1 -1
  10. package/dist/claude/index.cjs +1 -1
  11. package/dist/claude/index.js +1 -1
  12. package/dist/host/chatgpt/index.cjs +1 -1
  13. package/dist/host/chatgpt/index.js +1 -1
  14. package/dist/index.cjs +3 -3
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +3 -3
  17. package/dist/index.js.map +1 -1
  18. package/dist/inspector/index.cjs +1 -1
  19. package/dist/inspector/index.js +1 -1
  20. package/dist/{inspector-Chhc2GNO.cjs → inspector-BGnxpdOn.cjs} +2 -2
  21. package/dist/{inspector-Chhc2GNO.cjs.map → inspector-BGnxpdOn.cjs.map} +1 -1
  22. package/dist/{inspector-BSha-CAW.js → inspector-DvduUVNG.js} +2 -2
  23. package/dist/{inspector-BSha-CAW.js.map → inspector-DvduUVNG.js.map} +1 -1
  24. package/dist/mcp/index.cjs +1 -1
  25. package/dist/mcp/index.cjs.map +1 -1
  26. package/dist/mcp/index.js +1 -1
  27. package/dist/mcp/index.js.map +1 -1
  28. package/dist/{use-app-CtKy52kw.js → use-app-CmrLc3wz.js} +2 -2
  29. package/dist/{use-app-CtKy52kw.js.map → use-app-CmrLc3wz.js.map} +1 -1
  30. package/dist/{use-app-xaiN0HAd.cjs → use-app-fizR-zbu.cjs} +2 -2
  31. package/dist/{use-app-xaiN0HAd.cjs.map → use-app-fizR-zbu.cjs.map} +1 -1
  32. package/package.json +2 -2
  33. package/template/dist/albums/albums.json +1 -1
  34. package/template/dist/carousel/carousel.json +1 -1
  35. package/template/dist/map/map.json +1 -1
  36. package/template/dist/review/review.json +1 -1
  37. package/template/node_modules/.vite/deps/_metadata.json +3 -3
  38. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js +1 -1
  39. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js.map +1 -1
  40. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js +1 -1
  41. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js.map +1 -1
  42. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js +1 -1
  43. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js.map +1 -1
  44. package/template/node_modules/.vite-mcp/deps/_metadata.json +22 -22
  45. package/template/tests/e2e/visual.spec.ts-snapshots/albums-dark-chatgpt-linux.png +0 -0
  46. package/template/tests/e2e/visual.spec.ts-snapshots/albums-dark-claude-linux.png +0 -0
  47. package/template/tests/e2e/visual.spec.ts-snapshots/albums-fullscreen-chatgpt-linux.png +0 -0
  48. package/template/tests/e2e/visual.spec.ts-snapshots/albums-fullscreen-claude-linux.png +0 -0
  49. package/template/tests/e2e/visual.spec.ts-snapshots/albums-light-chatgpt-linux.png +0 -0
  50. package/template/tests/e2e/visual.spec.ts-snapshots/albums-light-claude-linux.png +0 -0
@@ -44,6 +44,7 @@ function parseArgs(args) {
44
44
  name: undefined,
45
45
  env: undefined,
46
46
  cwd: undefined,
47
+ headers: undefined,
47
48
  };
48
49
 
49
50
  for (let i = 0; i < args.length; i++) {
@@ -66,6 +67,10 @@ function parseArgs(args) {
66
67
  }
67
68
  } else if (arg === '--cwd' && i + 1 < args.length) {
68
69
  opts.cwd = args[++i];
70
+ } else if ((arg === '--header' || arg === '-H') && i + 1 < args.length) {
71
+ opts.headers = opts.headers || {};
72
+ const [name, value] = parseHttpHeader(args[++i]);
73
+ setHttpHeader(opts.headers, name, value);
69
74
  } else if (arg === '--help' || arg === '-h') {
70
75
  printHelp();
71
76
  process.exit(0);
@@ -89,16 +94,52 @@ Options:
89
94
  --name <string> App name in inspector chrome
90
95
  --env <KEY=VALUE> Environment variable for stdio servers (repeatable)
91
96
  --cwd <path> Working directory for stdio servers
97
+ --header, -H <Name: value> HTTP header for HTTP MCP servers (repeatable)
92
98
  --help, -h Show this help
93
99
 
94
100
  Examples:
95
101
  sunpeak inspect --server http://localhost:8000/mcp
102
+ sunpeak inspect --server http://localhost:8000/mcp -H "Authorization: Bearer $TOKEN"
96
103
  sunpeak inspect --server "python my_server.py"
97
104
  sunpeak inspect --server "python server.py" --env API_KEY=sk-123 --cwd ./backend
98
105
  sunpeak inspect --server http://localhost:8000/mcp --simulations tests/simulations
99
106
  `);
100
107
  }
101
108
 
109
+ function setHttpHeader(headers, name, value) {
110
+ const lowerName = name.toLowerCase();
111
+ for (const existingName of Object.keys(headers)) {
112
+ if (existingName.toLowerCase() === lowerName) {
113
+ delete headers[existingName];
114
+ }
115
+ }
116
+ headers[name] = value;
117
+ }
118
+
119
+ function parseHttpHeader(raw) {
120
+ if (typeof raw !== 'string') {
121
+ throw new Error('Invalid --header value. Expected "Name: value".');
122
+ }
123
+ const separator = raw.indexOf(':');
124
+ if (separator <= 0) {
125
+ throw new Error('Invalid --header value. Expected "Name: value".');
126
+ }
127
+
128
+ const name = raw.slice(0, separator).trim();
129
+ const value = raw.slice(separator + 1).trim();
130
+ if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) {
131
+ throw new Error(`Invalid HTTP header name: ${name || '(empty)'}`);
132
+ }
133
+ if (/[\u0000-\u001f\u007f]/.test(value)) {
134
+ throw new Error(`Invalid HTTP header value for ${name}: control characters are not allowed`);
135
+ }
136
+ return [name, value];
137
+ }
138
+
139
+ function hasAuthorizationHeader(headers) {
140
+ return Object.keys(headers || {}).some((name) => name.toLowerCase() === 'authorization');
141
+ }
142
+
102
143
  /**
103
144
  * Create an in-memory OAuth client provider for the inspector.
104
145
  * The provider stores tokens, client info, and code verifier in memory.
@@ -503,6 +544,9 @@ function isAuthError(err) {
503
544
  // StreamableHTTPError includes a status code in its message.
504
545
  // Check for the specific "401" HTTP status pattern, not substring matches.
505
546
  const msg = err.message || '';
547
+ if (/"statusCode"\s*:\s*401\b/.test(msg)) return true;
548
+ if (/\bstatus(?:Code)?\s*[:=]\s*401\b/i.test(msg)) return true;
549
+ if (/\bHTTP\s+401\b/i.test(msg)) return true;
506
550
  if (msg.includes('invalid_token')) return true;
507
551
 
508
552
  // Connection errors (ECONNREFUSED, ETIMEDOUT, etc.) are never auth errors.
@@ -693,11 +737,15 @@ async function assertHttpServerUrlAllowed(
693
737
 
694
738
  async function resolveHttpRedirectsForMcp(
695
739
  serverArg,
696
- { enforcePublicHttpUrl = false, fetchFn = fetch, lookupFn = dnsLookup } = {}
740
+ { enforcePublicHttpUrl = false, fetchFn = fetch, lookupFn = dnsLookup, requestInit } = {}
697
741
  ) {
698
742
  if (!enforcePublicHttpUrl) {
699
743
  try {
700
- const probeResponse = await fetchFn(serverArg, { method: 'HEAD', redirect: 'follow' });
744
+ const probeResponse = await fetchFn(serverArg, {
745
+ ...(requestInit ?? {}),
746
+ method: 'HEAD',
747
+ redirect: 'follow',
748
+ });
701
749
  await probeResponse.body?.cancel?.();
702
750
  return probeResponse.url && probeResponse.url !== serverArg ? probeResponse.url : serverArg;
703
751
  } catch {
@@ -710,7 +758,11 @@ async function resolveHttpRedirectsForMcp(
710
758
  for (let i = 0; i < maxRedirects; i++) {
711
759
  let probeResponse;
712
760
  try {
713
- probeResponse = await fetchFn(currentUrl, { method: 'HEAD', redirect: 'manual' });
761
+ probeResponse = await fetchFn(currentUrl, {
762
+ ...(requestInit ?? {}),
763
+ method: 'HEAD',
764
+ redirect: 'manual',
765
+ });
714
766
  } catch {
715
767
  return currentUrl;
716
768
  }
@@ -733,7 +785,7 @@ async function resolveHttpRedirectsForMcp(
733
785
  /**
734
786
  * Create an MCP client connection.
735
787
  * @param {string} serverArg - URL or command string
736
- * @param {{ type?: 'none' | 'bearer' | 'oauth', bearerToken?: string, authProvider?: import('@modelcontextprotocol/sdk/client/auth.js').OAuthClientProvider, env?: Record<string, string>, cwd?: string, enforcePublicHttpUrl?: boolean }} [authConfig]
788
+ * @param {{ type?: 'none' | 'bearer' | 'oauth', bearerToken?: string, authProvider?: import('@modelcontextprotocol/sdk/client/auth.js').OAuthClientProvider, headers?: Record<string, string>, env?: Record<string, string>, cwd?: string, enforcePublicHttpUrl?: boolean }} [authConfig]
737
789
  * @returns {Promise<{ client: import('@modelcontextprotocol/sdk/client/index.js').Client, transport: import('@modelcontextprotocol/sdk/types.js').Transport, serverUrl?: string, stderrOutput?: string[] }>}
738
790
  */
739
791
  async function createMcpConnection(serverArg, authConfig) {
@@ -749,10 +801,18 @@ async function createMcpConnection(serverArg, authConfig) {
749
801
  const { StreamableHTTPClientTransport } =
750
802
  await import('@modelcontextprotocol/sdk/client/streamableHttp.js');
751
803
 
804
+ const requestHeaders = { ...(authConfig?.headers ?? {}) };
805
+ if (authConfig?.type === 'bearer' && authConfig.bearerToken) {
806
+ requestHeaders.Authorization = `Bearer ${authConfig.bearerToken}`;
807
+ }
808
+
752
809
  // Follow redirects (e.g. /mcp → /mcp/) before creating the transport.
753
810
  // The MCP SDK transport doesn't follow redirects on its own.
754
811
  const finalUrl = await resolveHttpRedirectsForMcp(serverArg, {
755
812
  enforcePublicHttpUrl: !!authConfig?.enforcePublicHttpUrl,
813
+ ...(Object.keys(requestHeaders).length > 0
814
+ ? { requestInit: { headers: requestHeaders } }
815
+ : {}),
756
816
  });
757
817
 
758
818
  if (authConfig?.enforcePublicHttpUrl) {
@@ -763,11 +823,6 @@ async function createMcpConnection(serverArg, authConfig) {
763
823
  if (authConfig?.enforcePublicHttpUrl) {
764
824
  transportOpts.requestInit = { redirect: 'manual' };
765
825
  }
766
-
767
- const requestHeaders = {};
768
- if (authConfig?.type === 'bearer' && authConfig.bearerToken) {
769
- requestHeaders.Authorization = `Bearer ${authConfig.bearerToken}`;
770
- }
771
826
  if (Object.keys(requestHeaders).length > 0) {
772
827
  transportOpts.requestInit = {
773
828
  ...(transportOpts.requestInit ?? {}),
@@ -2907,6 +2962,9 @@ export const _securityTestExports = {
2907
2962
  normalizeModelId,
2908
2963
  normalizeModelProviderModelId,
2909
2964
  quoteSecurityInteractiveArg,
2965
+ parseHttpHeader,
2966
+ hasAuthorizationHeader,
2967
+ isAuthError,
2910
2968
  readRequestBody,
2911
2969
  resolveHttpRedirectsForMcp,
2912
2970
  shouldAllowPrivateServerUrls,
@@ -2970,6 +3028,7 @@ function readRequestBody(req, { maxBytes = Infinity } = {}) {
2970
3028
  * @param {object} [opts.viteCssConfig] - Vite css config override (e.g., lightningcss customAtRules)
2971
3029
  * @param {Record<string, string>} [opts.env] - Extra environment variables for stdio server processes
2972
3030
  * @param {string} [opts.cwd] - Working directory for stdio server processes
3031
+ * @param {Record<string, string>} [opts.headers] - Extra HTTP headers for HTTP MCP server requests
2973
3032
  */
2974
3033
  export async function inspectServer(opts) {
2975
3034
  const {
@@ -2990,6 +3049,7 @@ export async function inspectServer(opts) {
2990
3049
  viteCssConfig,
2991
3050
  env: serverEnv,
2992
3051
  cwd: serverCwd,
3052
+ headers: serverHeaders,
2993
3053
  } = opts;
2994
3054
 
2995
3055
  // Load favicon from sunpeak package for the inspector UI.
@@ -3017,6 +3077,7 @@ export async function inspectServer(opts) {
3017
3077
  const connectionOpts = {};
3018
3078
  if (serverEnv) connectionOpts.env = serverEnv;
3019
3079
  if (serverCwd) connectionOpts.cwd = serverCwd;
3080
+ if (serverHeaders) connectionOpts.headers = serverHeaders;
3020
3081
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
3021
3082
  try {
3022
3083
  mcpConnection = await createMcpConnection(resolvedServerUrl, connectionOpts);
@@ -3029,7 +3090,11 @@ export async function inspectServer(opts) {
3029
3090
  }
3030
3091
 
3031
3092
  // If the server requires OAuth, negotiate it and retry once.
3032
- if (isAuthError(err) && resolvedServerUrl.startsWith('http')) {
3093
+ if (
3094
+ isAuthError(err) &&
3095
+ resolvedServerUrl.startsWith('http') &&
3096
+ !hasAuthorizationHeader(connectionOpts.headers)
3097
+ ) {
3033
3098
  console.log('Server requires authentication. Negotiating OAuth...');
3034
3099
  try {
3035
3100
  const authProvider = await negotiateOAuth(resolvedServerUrl);
@@ -3416,5 +3481,6 @@ export async function inspect(args) {
3416
3481
  name: opts.name,
3417
3482
  env: opts.env,
3418
3483
  cwd: opts.cwd,
3484
+ headers: opts.headers,
3419
3485
  });
3420
3486
  }
@@ -15,6 +15,14 @@ export interface InspectConfigOptions {
15
15
  use?: Record<string, unknown>;
16
16
  /** Visual regression testing configuration */
17
17
  visual?: VisualConfig;
18
+ /** HTTP headers for HTTP MCP server requests */
19
+ headers?: Record<string, string>;
20
+ /** Server startup timeout in ms */
21
+ timeout?: number;
22
+ /** Environment variables for stdio servers */
23
+ env?: Record<string, string>;
24
+ /** Working directory for stdio servers */
25
+ cwd?: string;
18
26
  }
19
27
 
20
28
  /**
@@ -30,6 +30,7 @@ import { resolveSunpeakBin } from '../resolve-bin.mjs';
30
30
  * @param {number} [options.timeout] - Server startup timeout in ms (default: 60000)
31
31
  * @param {Record<string, string>} [options.env] - Environment variables for stdio servers
32
32
  * @param {string} [options.cwd] - Working directory for stdio servers
33
+ * @param {Record<string, string>} [options.headers] - HTTP headers for HTTP MCP server requests
33
34
  * @returns {import('@playwright/test').PlaywrightTestConfig}
34
35
  */
35
36
  export function defineInspectConfig(options) {
@@ -44,6 +45,7 @@ export function defineInspectConfig(options) {
44
45
  timeout,
45
46
  env,
46
47
  cwd,
48
+ headers,
47
49
  } = options;
48
50
 
49
51
  if (!server) {
@@ -65,6 +67,9 @@ export function defineInspectConfig(options) {
65
67
  })
66
68
  : []),
67
69
  ...(cwd ? [cwd.includes(' ') ? `--cwd "${cwd}"` : `--cwd ${cwd}`] : []),
70
+ ...(headers
71
+ ? Object.entries(headers).map(([k, v]) => `--header ${shellQuote(`${k}: ${v}`)}`)
72
+ : []),
68
73
  ...(simulationsDir ? [`--simulations ${simulationsDir}`] : []),
69
74
  `--port ${port}`,
70
75
  ...(name ? [`--name "${name}"`] : []),
@@ -83,3 +88,7 @@ export function defineInspectConfig(options) {
83
88
  },
84
89
  });
85
90
  }
91
+
92
+ function shellQuote(value) {
93
+ return `'${String(value).replace(/'/g, "'\\''")}'`;
94
+ }
@@ -29,4 +29,6 @@ export function inspectServer(opts: {
29
29
  env?: Record<string, string>;
30
30
  /** Working directory for stdio server processes. */
31
31
  cwd?: string;
32
+ /** HTTP headers for HTTP MCP server requests. */
33
+ headers?: Record<string, string>;
32
34
  }): Promise<void>;
@@ -12,6 +12,10 @@ export interface ServerConfig {
12
12
  url?: string;
13
13
  /** Environment variables for the server process. */
14
14
  env?: Record<string, string>;
15
+ /** Working directory for the server process. */
16
+ cwd?: string;
17
+ /** HTTP headers for HTTP MCP server requests. */
18
+ headers?: Record<string, string>;
15
19
  }
16
20
 
17
21
  /**
@@ -55,6 +59,8 @@ export interface TestConfigOptions {
55
59
  use?: Record<string, unknown>;
56
60
  /** Visual regression testing configuration. */
57
61
  visual?: VisualConfig;
62
+ /** Server startup timeout in ms. */
63
+ timeout?: number;
58
64
  }
59
65
 
60
66
  /**
@@ -28,6 +28,7 @@ import { resolveSunpeakBin } from '../resolve-bin.mjs';
28
28
  * @param {string} [options.server.url] - HTTP server URL (alternative to command)
29
29
  * @param {Record<string, string>} [options.server.env] - Environment variables
30
30
  * @param {string} [options.server.cwd] - Working directory for the server process
31
+ * @param {Record<string, string>} [options.server.headers] - HTTP headers for HTTP MCP server requests
31
32
  * @param {string[]} [options.hosts] - Host shells to test (default: ['chatgpt', 'claude'])
32
33
  * @param {string} [options.testDir] - Test directory
33
34
  * @param {string} [options.simulationsDir] - Simulations directory for mock data
@@ -126,6 +127,12 @@ function buildInspectCommand({ server, port, sandboxPort, simulationsDir }) {
126
127
  parts.push(server.cwd.includes(' ') ? `--cwd "${server.cwd}"` : `--cwd ${server.cwd}`);
127
128
  }
128
129
 
130
+ if (server.headers) {
131
+ for (const [key, value] of Object.entries(server.headers)) {
132
+ parts.push(`--header ${shellQuote(`${key}: ${value}`)}`);
133
+ }
134
+ }
135
+
129
136
  if (simulationsDir) {
130
137
  parts.push(`--simulations ${simulationsDir}`);
131
138
  }
@@ -134,3 +141,7 @@ function buildInspectCommand({ server, port, sandboxPort, simulationsDir }) {
134
141
 
135
142
  return parts.join(' ');
136
143
  }
144
+
145
+ function shellQuote(value) {
146
+ return `'${String(value).replace(/'/g, "'\\''")}'`;
147
+ }
package/bin/sunpeak.js CHANGED
@@ -131,6 +131,7 @@ Inspector (works with any MCP server):
131
131
  sunpeak inspect Inspect any MCP server in the inspector
132
132
  --server, -s <url|cmd> MCP server URL or stdio command (required)
133
133
  --simulations <dir> Simulation JSON directory
134
+ --header, -H <header> HTTP header for HTTP MCP servers (repeatable)
134
135
 
135
136
  sunpeak --version Show version number
136
137
  Resources: ${resources.join(', ')} (comma/space separated)
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../chunk-Cek0wNdY.cjs");
3
- const require_inspector = require("../inspector-Chhc2GNO.cjs");
3
+ const require_inspector = require("../inspector-BGnxpdOn.cjs");
4
4
  const require_inspector_url = require("../inspector-url-BxScdDag.cjs");
5
5
  const require_discovery = require("../discovery-31_n0zcu.cjs");
6
6
  //#region src/chatgpt/index.ts
@@ -1,5 +1,5 @@
1
1
  import { Ct as __exportAll } from "../protocol-bhrz2H_E.js";
2
- import { _ as extractResourceCSP, f as ThemeProvider, g as IframeResource, p as useThemeContext, r as resolveServerToolResult, t as Inspector, v as McpAppHost, y as SCREEN_WIDTHS } from "../inspector-BSha-CAW.js";
2
+ import { _ as extractResourceCSP, f as ThemeProvider, g as IframeResource, p as useThemeContext, r as resolveServerToolResult, t as Inspector, v as McpAppHost, y as SCREEN_WIDTHS } from "../inspector-DvduUVNG.js";
3
3
  import { t as createInspectorUrl } from "../inspector-url-xUMGbWis.js";
4
4
  import { c as toPascalCase, i as findResourceKey, n as extractSimulationKey, r as findResourceDirs, s as getComponentName, t as extractResourceKey } from "../discovery-DOVner--.js";
5
5
  //#region src/chatgpt/index.ts
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../chunk-Cek0wNdY.cjs");
3
- const require_inspector = require("../inspector-Chhc2GNO.cjs");
3
+ const require_inspector = require("../inspector-BGnxpdOn.cjs");
4
4
  exports.Inspector = require_inspector.Inspector;
@@ -1,2 +1,2 @@
1
- import { t as Inspector } from "../inspector-BSha-CAW.js";
1
+ import { t as Inspector } from "../inspector-DvduUVNG.js";
2
2
  export { Inspector };
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.cjs");
3
- const require_use_app = require("../../use-app-xaiN0HAd.cjs");
3
+ const require_use_app = require("../../use-app-fizR-zbu.cjs");
4
4
  let react = require("react");
5
5
  //#region src/host/chatgpt/openai-types.ts
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { t as useApp } from "../../use-app-CtKy52kw.js";
1
+ import { t as useApp } from "../../use-app-CmrLc3wz.js";
2
2
  import { useCallback } from "react";
3
3
  //#region src/host/chatgpt/openai-types.ts
4
4
  /**
package/dist/index.cjs CHANGED
@@ -1,15 +1,15 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.cjs");
3
3
  const require_protocol = require("./protocol-Cafvpf0x.cjs");
4
- const require_use_app = require("./use-app-xaiN0HAd.cjs");
5
- const require_inspector = require("./inspector-Chhc2GNO.cjs");
4
+ const require_use_app = require("./use-app-fizR-zbu.cjs");
5
+ const require_inspector = require("./inspector-BGnxpdOn.cjs");
6
6
  const require_host_index = require("./host/index.cjs");
7
7
  const require_inspector_index = require("./inspector/index.cjs");
8
8
  const require_chatgpt_index = require("./chatgpt/index.cjs");
9
9
  let react = require("react");
10
10
  react = require_chunk.__toESM(react, 1);
11
11
  let react_jsx_runtime = require("react/jsx-runtime");
12
- //#region ../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.7.2_@modelcontextprotocol+sdk@1.29.0_zod@4.4.3__react-_f5b843da9146ebea748e10ad8dfce46a/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js
12
+ //#region ../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.7.3_@modelcontextprotocol+sdk@1.29.0_zod@4.4.3__react-_198afb8973c94867da191e43eebfe140/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js
13
13
  ((K) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(K, { get: (Q, X) => (typeof require < "u" ? require : Q)[X] }) : K)(function(K) {
14
14
  if (typeof require < "u") return require.apply(this, arguments);
15
15
  throw Error("Dynamic require of \"" + K + "\" is not supported");