sunpeak 0.18.9 → 0.18.13
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.
- package/README.md +12 -0
- package/bin/commands/inspect.mjs +4 -1
- package/bin/commands/start.mjs +2 -1
- package/bin/lib/sandbox-server.mjs +12 -1
- package/dist/chatgpt/index.cjs +1 -1
- package/dist/chatgpt/index.js +1 -1
- package/dist/claude/index.cjs +1 -1
- package/dist/claude/index.js +1 -1
- package/dist/host/chatgpt/index.cjs +1 -1
- package/dist/host/chatgpt/index.js +1 -1
- package/dist/index.cjs +93 -93
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +54 -54
- package/dist/index.js.map +1 -1
- package/dist/inspector/hosts.d.ts +12 -0
- package/dist/inspector/index.cjs +1 -1
- package/dist/inspector/index.js +1 -1
- package/dist/{inspector-CTMccsz9.cjs → inspector-8nPV2A-z.cjs} +93 -51
- package/dist/inspector-8nPV2A-z.cjs.map +1 -0
- package/dist/{inspector-DkS75JCk.js → inspector-Cdo5BK2D.js} +92 -50
- package/dist/inspector-Cdo5BK2D.js.map +1 -0
- package/dist/mcp/index.cjs +69 -62
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +63 -56
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/production-server.d.ts +12 -0
- package/dist/{protocol-DJmRaBzO.js → protocol-BfAACnv0.js} +14 -9
- package/dist/{protocol-DJmRaBzO.js.map → protocol-BfAACnv0.js.map} +1 -1
- package/dist/{protocol-jbxhzcnS.cjs → protocol-C7kTcBr_.cjs} +14 -9
- package/dist/{protocol-jbxhzcnS.cjs.map → protocol-C7kTcBr_.cjs.map} +1 -1
- package/dist/style.css +36 -1
- package/dist/{use-app-BNbz1uzj.js → use-app-CfP9VypY.js} +107 -56
- package/dist/use-app-CfP9VypY.js.map +1 -0
- package/dist/{use-app-Dqh20JPP.cjs → use-app-CzcYw1Kz.cjs} +165 -114
- package/dist/use-app-CzcYw1Kz.cjs.map +1 -0
- package/package.json +3 -3
- package/template/README.md +12 -0
- package/template/dist/albums/albums.html +16 -15
- package/template/dist/albums/albums.json +1 -1
- package/template/dist/carousel/carousel.html +20 -19
- package/template/dist/carousel/carousel.json +1 -1
- package/template/dist/map/map.html +7 -6
- package/template/dist/map/map.json +1 -1
- package/template/dist/review/review.html +6 -5
- package/template/dist/review/review.json +1 -1
- package/template/node_modules/.vite/deps/_metadata.json +3 -3
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js +49 -49
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js.map +1 -1
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js +49 -49
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js.map +1 -1
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js +89 -89
- package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js.map +1 -1
- package/template/node_modules/.vite-mcp/deps/_metadata.json +24 -24
- package/template/node_modules/.vite-mcp/deps/{protocol-CTflwIfG.js → protocol-B_qKkui_.js} +14 -9
- package/template/node_modules/.vite-mcp/deps/protocol-B_qKkui_.js.map +1 -0
- package/template/src/resources/carousel/carousel.test.tsx +16 -2
- package/template/src/resources/carousel/carousel.tsx +42 -14
- package/template/src/resources/carousel/components/carousel.tsx +20 -0
- package/template/src/resources/carousel/components/index.ts +1 -0
- package/template/src/resources/carousel/components/place-detail.tsx +153 -0
- package/template/tests/e2e/carousel.spec.ts +125 -0
- package/template/tests/live/carousel.spec.ts +2 -2
- package/template/tests/simulations/show-carousel.json +54 -5
- package/dist/inspector-CTMccsz9.cjs.map +0 -1
- package/dist/inspector-DkS75JCk.js.map +0 -1
- package/dist/use-app-BNbz1uzj.js.map +0 -1
- package/dist/use-app-Dqh20JPP.cjs.map +0 -1
- package/template/node_modules/.vite-mcp/deps/protocol-CTflwIfG.js.map +0 -1
package/README.md
CHANGED
|
@@ -230,6 +230,18 @@ Install the `create-sunpeak-app` skill to give your coding agent (Claude Code, C
|
|
|
230
230
|
npx skills add Sunpeak-AI/sunpeak@create-sunpeak-app
|
|
231
231
|
```
|
|
232
232
|
|
|
233
|
+
## Troubleshooting
|
|
234
|
+
|
|
235
|
+
If your app doesn't render in ChatGPT or Claude:
|
|
236
|
+
|
|
237
|
+
1. **Check your tunnel** is running and pointing to the correct port
|
|
238
|
+
2. **Restart `sunpeak dev`** to clear stale connections
|
|
239
|
+
3. **Refresh or re-add the MCP server** in the host's settings (Settings > MCP Servers)
|
|
240
|
+
4. **Hard refresh** the host page (`Cmd+Shift+R` / `Ctrl+Shift+R`)
|
|
241
|
+
5. **Open a new chat** in the host (cached iframes persist per-conversation)
|
|
242
|
+
|
|
243
|
+
Full guide: [sunpeak.ai/docs/guides/troubleshooting](https://sunpeak.ai/docs/guides/troubleshooting)
|
|
244
|
+
|
|
233
245
|
## Resources
|
|
234
246
|
|
|
235
247
|
- [MCP Apps Documentation](https://sunpeak.ai/docs/mcp-apps/introduction)
|
package/bin/commands/inspect.mjs
CHANGED
|
@@ -1144,10 +1144,13 @@ export async function inspectServer(opts) {
|
|
|
1144
1144
|
server.printUrls();
|
|
1145
1145
|
server.bindCLIShortcuts({ print: true });
|
|
1146
1146
|
|
|
1147
|
+
// Print troubleshooting link (dimmed)
|
|
1148
|
+
console.log('\n \x1b[2mApp not loading? \u2192 https://sunpeak.ai/docs/guides/troubleshooting\x1b[0m');
|
|
1149
|
+
|
|
1147
1150
|
// Print star-begging message unless suppressed
|
|
1148
1151
|
if (!noBegging) {
|
|
1149
1152
|
// #FFB800 in 24-bit ANSI color
|
|
1150
|
-
console.log('\n\
|
|
1153
|
+
console.log('\n\x1b[38;2;255;184;0m\u2b50\ufe0f \u2192 \u2764\ufe0f https://github.com/Sunpeak-AI/sunpeak\x1b[0m\n');
|
|
1151
1154
|
}
|
|
1152
1155
|
|
|
1153
1156
|
// Cleanup on exit
|
package/bin/commands/start.mjs
CHANGED
|
@@ -44,6 +44,7 @@ export async function start(projectRoot = process.cwd(), args = []) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
const jsonLogs = args.includes('--json-logs');
|
|
47
|
+
const sse = args.includes('--sse');
|
|
47
48
|
|
|
48
49
|
// Import production server from sunpeak
|
|
49
50
|
const isTemplate = projectRoot.endsWith('/template') || projectRoot.endsWith('\\template');
|
|
@@ -191,7 +192,7 @@ export async function start(projectRoot = process.cwd(), args = []) {
|
|
|
191
192
|
console.log(`\nStarting ${name} v${version} on ${host}:${port}...`);
|
|
192
193
|
|
|
193
194
|
startProductionHttpServer(
|
|
194
|
-
{ name, version, serverInfo: serverConfig, tools, resources, auth },
|
|
195
|
+
{ name, version, serverInfo: serverConfig, tools, resources, auth, ...(sse ? { enableJsonResponse: false } : {}) },
|
|
195
196
|
{ port, host }
|
|
196
197
|
);
|
|
197
198
|
}
|
|
@@ -208,6 +208,7 @@ iframe { border: none; width: 100%; height: 100%; display: block; }
|
|
|
208
208
|
});
|
|
209
209
|
|
|
210
210
|
function createInnerFrame(params) {
|
|
211
|
+
clearInterval(readyInterval);
|
|
211
212
|
if (innerFrame) innerFrame.remove();
|
|
212
213
|
|
|
213
214
|
innerFrame = document.createElement('iframe');
|
|
@@ -226,6 +227,7 @@ iframe { border: none; width: 100%; height: 100%; display: block; }
|
|
|
226
227
|
}
|
|
227
228
|
|
|
228
229
|
function createInnerFrameWithSrc(params) {
|
|
230
|
+
clearInterval(readyInterval);
|
|
229
231
|
if (innerFrame) innerFrame.remove();
|
|
230
232
|
|
|
231
233
|
innerFrame = document.createElement('iframe');
|
|
@@ -296,7 +298,15 @@ iframe { border: none; width: 100%; height: 100%; display: block; }
|
|
|
296
298
|
'e.source.postMessage({jsonrpc:"2.0",method:"sunpeak/fence-ack",params:{fenceId:fid}},"*");' +
|
|
297
299
|
'});}});';
|
|
298
300
|
|
|
299
|
-
// Signal readiness to the host
|
|
301
|
+
// Signal readiness to the host. Retry every 200ms in case the host's
|
|
302
|
+
// PostMessage listener isn't attached yet (srcdoc race with React refs).
|
|
303
|
+
var readyInterval = setInterval(function() {
|
|
304
|
+
window.parent.postMessage({
|
|
305
|
+
jsonrpc: '2.0',
|
|
306
|
+
method: 'ui/notifications/sandbox-proxy-ready',
|
|
307
|
+
params: {}
|
|
308
|
+
}, '*');
|
|
309
|
+
}, 200);
|
|
300
310
|
setTimeout(function() {
|
|
301
311
|
window.parent.postMessage({
|
|
302
312
|
jsonrpc: '2.0',
|
|
@@ -304,6 +314,7 @@ iframe { border: none; width: 100%; height: 100%; display: block; }
|
|
|
304
314
|
params: {}
|
|
305
315
|
}, '*');
|
|
306
316
|
}, 0);
|
|
317
|
+
setTimeout(function() { clearInterval(readyInterval); }, 10000);
|
|
307
318
|
})();
|
|
308
319
|
</script>
|
|
309
320
|
</body>
|
package/dist/chatgpt/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../chunk-9hOWP6kD.cjs");
|
|
3
|
-
const require_inspector = require("../inspector-
|
|
3
|
+
const require_inspector = require("../inspector-8nPV2A-z.cjs");
|
|
4
4
|
const require_inspector_url = require("../inspector-url-C3LTKgXt.cjs");
|
|
5
5
|
const require_discovery = require("../discovery-Clu4uHp1.cjs");
|
|
6
6
|
//#region src/chatgpt/index.ts
|
package/dist/chatgpt/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as __exportAll } from "../chunk-D6g4UhsZ.js";
|
|
2
|
-
import { _ as McpAppHost, d as ThemeProvider, f as useThemeContext, g as extractResourceCSP, h as IframeResource, n as resolveServerToolResult, t as Inspector, v as SCREEN_WIDTHS } from "../inspector-
|
|
2
|
+
import { _ as McpAppHost, d as ThemeProvider, f as useThemeContext, g as extractResourceCSP, h as IframeResource, n as resolveServerToolResult, t as Inspector, v as SCREEN_WIDTHS } from "../inspector-Cdo5BK2D.js";
|
|
3
3
|
import { t as createInspectorUrl } from "../inspector-url-CyQcuBI9.js";
|
|
4
4
|
import { c as toPascalCase, i as findResourceKey, n as extractSimulationKey, r as findResourceDirs, s as getComponentName, t as extractResourceKey } from "../discovery-Cgoegt62.js";
|
|
5
5
|
//#region src/chatgpt/index.ts
|
package/dist/claude/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../chunk-9hOWP6kD.cjs");
|
|
3
|
-
const require_inspector = require("../inspector-
|
|
3
|
+
const require_inspector = require("../inspector-8nPV2A-z.cjs");
|
|
4
4
|
exports.Inspector = require_inspector.Inspector;
|
package/dist/claude/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Inspector } from "../inspector-
|
|
1
|
+
import { t as Inspector } from "../inspector-Cdo5BK2D.js";
|
|
2
2
|
export { Inspector };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-9hOWP6kD.cjs");
|
|
3
|
-
const require_use_app = require("../../use-app-
|
|
3
|
+
const require_use_app = require("../../use-app-CzcYw1Kz.cjs");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
//#region src/host/chatgpt/openai-types.ts
|
|
6
6
|
/**
|
package/dist/index.cjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("./chunk-9hOWP6kD.cjs");
|
|
3
|
-
const require_protocol = require("./protocol-
|
|
4
|
-
const require_use_app = require("./use-app-
|
|
5
|
-
const require_inspector = require("./inspector-
|
|
3
|
+
const require_protocol = require("./protocol-C7kTcBr_.cjs");
|
|
4
|
+
const require_use_app = require("./use-app-CzcYw1Kz.cjs");
|
|
5
|
+
const require_inspector = require("./inspector-8nPV2A-z.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);
|
|
11
11
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
-
//#region ../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.3.
|
|
13
|
-
var
|
|
12
|
+
//#region ../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.3.2_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6__react-_38e5f6c50a4ca9cf3f1dffc73a60c951/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js
|
|
13
|
+
var h = require_protocol.union([require_protocol.literal("light"), require_protocol.literal("dark")]).describe("Color theme preference for the host environment."), j = require_protocol.union([
|
|
14
14
|
require_protocol.literal("inline"),
|
|
15
15
|
require_protocol.literal("fullscreen"),
|
|
16
16
|
require_protocol.literal("pip")
|
|
@@ -121,7 +121,7 @@ require_protocol.object({
|
|
|
121
121
|
method: require_protocol.literal("ui/notifications/sandbox-proxy-ready"),
|
|
122
122
|
params: require_protocol.object({})
|
|
123
123
|
});
|
|
124
|
-
var
|
|
124
|
+
var V$1 = require_protocol.object({
|
|
125
125
|
connectDomains: require_protocol.array(require_protocol.string()).optional().describe(`Origins for network requests (fetch/XHR/WebSocket).
|
|
126
126
|
|
|
127
127
|
- Maps to CSP \`connect-src\` directive
|
|
@@ -129,7 +129,7 @@ var P$1 = require_protocol.object({
|
|
|
129
129
|
resourceDomains: require_protocol.array(require_protocol.string()).optional().describe("Origins for static resources (images, scripts, stylesheets, fonts, media).\n\n- Maps to CSP `img-src`, `script-src`, `style-src`, `font-src`, `media-src` directives\n- Wildcard subdomains supported: `https://*.example.com`\n- Empty or omitted → no network resources (secure default)"),
|
|
130
130
|
frameDomains: require_protocol.array(require_protocol.string()).optional().describe("Origins for nested iframes.\n\n- Maps to CSP `frame-src` directive\n- Empty or omitted → no nested iframes allowed (`frame-src 'none'`)"),
|
|
131
131
|
baseUriDomains: require_protocol.array(require_protocol.string()).optional().describe("Allowed base URIs for the document.\n\n- Maps to CSP `base-uri` directive\n- Empty or omitted → only same origin allowed (`base-uri 'self'`)")
|
|
132
|
-
}),
|
|
132
|
+
}), P$1 = require_protocol.object({
|
|
133
133
|
camera: require_protocol.object({}).optional().describe("Request camera access.\n\nMaps to Permission Policy `camera` feature."),
|
|
134
134
|
microphone: require_protocol.object({}).optional().describe("Request microphone access.\n\nMaps to Permission Policy `microphone` feature."),
|
|
135
135
|
geolocation: require_protocol.object({}).optional().describe("Request geolocation access.\n\nMaps to Permission Policy `geolocation` feature."),
|
|
@@ -154,16 +154,16 @@ require_protocol.object({
|
|
|
154
154
|
method: require_protocol.literal("ui/notifications/tool-cancelled"),
|
|
155
155
|
params: require_protocol.object({ reason: require_protocol.string().optional().describe("Optional reason for the cancellation (e.g., \"user action\", \"timeout\").") })
|
|
156
156
|
});
|
|
157
|
-
var
|
|
157
|
+
var m$1 = require_protocol.object({ fonts: require_protocol.string().optional() }), c$1 = require_protocol.object({
|
|
158
158
|
variables: qJ.optional().describe("CSS variables for theming the app."),
|
|
159
|
-
css:
|
|
159
|
+
css: m$1.optional().describe("CSS blocks that apps can inject.")
|
|
160
160
|
});
|
|
161
161
|
require_protocol.object({
|
|
162
162
|
method: require_protocol.literal("ui/resource-teardown"),
|
|
163
163
|
params: require_protocol.object({})
|
|
164
164
|
});
|
|
165
165
|
require_protocol.record(require_protocol.string(), require_protocol.unknown());
|
|
166
|
-
var
|
|
166
|
+
var U$1 = require_protocol.object({
|
|
167
167
|
text: require_protocol.object({}).optional().describe("Host supports text content blocks."),
|
|
168
168
|
image: require_protocol.object({}).optional().describe("Host supports image content blocks."),
|
|
169
169
|
audio: require_protocol.object({}).optional().describe("Host supports audio content blocks."),
|
|
@@ -175,7 +175,7 @@ require_protocol.object({
|
|
|
175
175
|
method: require_protocol.literal("ui/notifications/request-teardown"),
|
|
176
176
|
params: require_protocol.object({}).optional()
|
|
177
177
|
});
|
|
178
|
-
var
|
|
178
|
+
var r$2 = require_protocol.object({
|
|
179
179
|
experimental: require_protocol.object({}).optional().describe("Experimental features (structure TBD)."),
|
|
180
180
|
openLinks: require_protocol.object({}).optional().describe("Host supports opening external URLs."),
|
|
181
181
|
downloadFile: require_protocol.object({}).optional().describe("Host supports file downloads via ui/download-file."),
|
|
@@ -183,23 +183,23 @@ var l = require_protocol.object({
|
|
|
183
183
|
serverResources: require_protocol.object({ listChanged: require_protocol.boolean().optional().describe("Host supports resources/list_changed notifications.") }).optional().describe("Host can proxy resource reads to the MCP server."),
|
|
184
184
|
logging: require_protocol.object({}).optional().describe("Host accepts log messages."),
|
|
185
185
|
sandbox: require_protocol.object({
|
|
186
|
-
permissions:
|
|
187
|
-
csp:
|
|
186
|
+
permissions: P$1.optional().describe("Permissions granted by the host (camera, microphone, geolocation)."),
|
|
187
|
+
csp: V$1.optional().describe("CSP domains approved by the host.")
|
|
188
188
|
}).optional().describe("Sandbox configuration applied by the host."),
|
|
189
|
-
updateModelContext:
|
|
190
|
-
message:
|
|
191
|
-
}),
|
|
189
|
+
updateModelContext: U$1.optional().describe("Host accepts context updates (ui/update-model-context) to be included in the model's context for future turns."),
|
|
190
|
+
message: U$1.optional().describe("Host supports receiving content messages (ui/message) from the view.")
|
|
191
|
+
}), l$1 = require_protocol.object({
|
|
192
192
|
experimental: require_protocol.object({}).optional().describe("Experimental features (structure TBD)."),
|
|
193
193
|
tools: require_protocol.object({ listChanged: require_protocol.boolean().optional().describe("App supports tools/list_changed notifications.") }).optional().describe("App exposes MCP-style tools that the host can call."),
|
|
194
|
-
availableDisplayModes: require_protocol.array(
|
|
194
|
+
availableDisplayModes: require_protocol.array(j).optional().describe("Display modes the app supports.")
|
|
195
195
|
});
|
|
196
196
|
require_protocol.object({
|
|
197
197
|
method: require_protocol.literal("ui/notifications/initialized"),
|
|
198
198
|
params: require_protocol.object({}).optional()
|
|
199
199
|
});
|
|
200
200
|
require_protocol.object({
|
|
201
|
-
csp:
|
|
202
|
-
permissions:
|
|
201
|
+
csp: V$1.optional().describe("Content Security Policy configuration for UI resources."),
|
|
202
|
+
permissions: P$1.optional().describe("Sandbox permissions requested by the UI resource."),
|
|
203
203
|
domain: require_protocol.string().optional().describe(`Dedicated origin for view sandbox.
|
|
204
204
|
|
|
205
205
|
Useful when views need stable, dedicated origins for OAuth callbacks, CORS policies, or API key allowlists.
|
|
@@ -219,13 +219,13 @@ Boolean requesting whether a visible border and background is provided by the ho
|
|
|
219
219
|
});
|
|
220
220
|
require_protocol.object({
|
|
221
221
|
method: require_protocol.literal("ui/request-display-mode"),
|
|
222
|
-
params: require_protocol.object({ mode:
|
|
222
|
+
params: require_protocol.object({ mode: j.describe("The display mode being requested.") })
|
|
223
223
|
});
|
|
224
|
-
require_protocol.object({ mode:
|
|
225
|
-
var
|
|
224
|
+
require_protocol.object({ mode: j.describe("The display mode that was actually set. May differ from requested if not supported.") }).passthrough();
|
|
225
|
+
var i$1 = require_protocol.union([require_protocol.literal("model"), require_protocol.literal("app")]).describe("Tool visibility scope - who can access the tool.");
|
|
226
226
|
require_protocol.object({
|
|
227
227
|
resourceUri: require_protocol.string().optional(),
|
|
228
|
-
visibility: require_protocol.array(
|
|
228
|
+
visibility: require_protocol.array(i$1).optional().describe(`Who can access this tool. Default: ["model", "app"]
|
|
229
229
|
- "model": Tool visible to and callable by the agent
|
|
230
230
|
- "app": Tool callable by the app from this server only`)
|
|
231
231
|
});
|
|
@@ -246,23 +246,23 @@ require_protocol.object({
|
|
|
246
246
|
params: require_protocol.object({
|
|
247
247
|
html: require_protocol.string().describe("HTML content to load into the inner iframe."),
|
|
248
248
|
sandbox: require_protocol.string().optional().describe("Optional override for the inner iframe's sandbox attribute."),
|
|
249
|
-
csp:
|
|
250
|
-
permissions:
|
|
249
|
+
csp: V$1.optional().describe("CSP configuration from resource metadata."),
|
|
250
|
+
permissions: P$1.optional().describe("Sandbox permissions from resource metadata.")
|
|
251
251
|
})
|
|
252
252
|
});
|
|
253
253
|
require_protocol.object({
|
|
254
254
|
method: require_protocol.literal("ui/notifications/tool-result"),
|
|
255
255
|
params: require_protocol.CallToolResultSchema.describe("Standard MCP tool execution result.")
|
|
256
256
|
});
|
|
257
|
-
var
|
|
257
|
+
var C$1 = require_protocol.object({
|
|
258
258
|
toolInfo: require_protocol.object({
|
|
259
259
|
id: require_protocol.RequestIdSchema.optional().describe("JSON-RPC id of the tools/call request."),
|
|
260
260
|
tool: require_protocol.ToolSchema.describe("Tool definition including name, inputSchema, etc.")
|
|
261
261
|
}).optional().describe("Metadata of the tool call that instantiated this App."),
|
|
262
|
-
theme:
|
|
263
|
-
styles:
|
|
264
|
-
displayMode:
|
|
265
|
-
availableDisplayModes: require_protocol.array(
|
|
262
|
+
theme: h.optional().describe("Current color theme preference."),
|
|
263
|
+
styles: c$1.optional().describe("Style configuration for theming the app."),
|
|
264
|
+
displayMode: j.optional().describe("How the UI is currently displayed."),
|
|
265
|
+
availableDisplayModes: require_protocol.array(j).optional().describe("Display modes the host supports."),
|
|
266
266
|
containerDimensions: require_protocol.union([require_protocol.object({ height: require_protocol.number().describe("Fixed container height in pixels.") }), require_protocol.object({ maxHeight: require_protocol.union([require_protocol.number(), require_protocol._undefined()]).optional().describe("Maximum container height in pixels.") })]).and(require_protocol.union([require_protocol.object({ width: require_protocol.number().describe("Fixed container width in pixels.") }), require_protocol.object({ maxWidth: require_protocol.union([require_protocol.number(), require_protocol._undefined()]).optional().describe("Maximum container width in pixels.") })])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other
|
|
267
267
|
container holding the app. Specify either width or maxWidth, and either height or maxHeight.`),
|
|
268
268
|
locale: require_protocol.string().optional().describe("User's language and region preference in BCP 47 format."),
|
|
@@ -286,7 +286,7 @@ container holding the app. Specify either width or maxWidth, and either height o
|
|
|
286
286
|
}).passthrough();
|
|
287
287
|
require_protocol.object({
|
|
288
288
|
method: require_protocol.literal("ui/notifications/host-context-changed"),
|
|
289
|
-
params:
|
|
289
|
+
params: C$1.describe("Partial context update containing only changed fields.")
|
|
290
290
|
});
|
|
291
291
|
require_protocol.object({
|
|
292
292
|
method: require_protocol.literal("ui/update-model-context"),
|
|
@@ -299,29 +299,29 @@ require_protocol.object({
|
|
|
299
299
|
method: require_protocol.literal("ui/initialize"),
|
|
300
300
|
params: require_protocol.object({
|
|
301
301
|
appInfo: require_protocol.ImplementationSchema.describe("App identification (name and version)."),
|
|
302
|
-
appCapabilities:
|
|
302
|
+
appCapabilities: l$1.describe("Features and capabilities this app provides."),
|
|
303
303
|
protocolVersion: require_protocol.string().describe("Protocol version this app supports.")
|
|
304
304
|
})
|
|
305
305
|
});
|
|
306
306
|
require_protocol.object({
|
|
307
307
|
protocolVersion: require_protocol.string().describe("Negotiated protocol version string (e.g., \"2025-11-21\")."),
|
|
308
308
|
hostInfo: require_protocol.ImplementationSchema.describe("Host application identification and version."),
|
|
309
|
-
hostCapabilities:
|
|
310
|
-
hostContext:
|
|
309
|
+
hostCapabilities: r$2.describe("Features and capabilities provided by the host."),
|
|
310
|
+
hostContext: C$1.describe("Rich context about the host environment.")
|
|
311
311
|
}).passthrough();
|
|
312
|
-
function
|
|
312
|
+
function _$1() {
|
|
313
313
|
let K = document.documentElement.getAttribute("data-theme");
|
|
314
314
|
if (K === "dark" || K === "light") return K;
|
|
315
315
|
return document.documentElement.classList.contains("dark") ? "dark" : "light";
|
|
316
316
|
}
|
|
317
|
-
function
|
|
317
|
+
function O$1(K) {
|
|
318
318
|
let Q = document.documentElement;
|
|
319
319
|
Q.setAttribute("data-theme", K), Q.style.colorScheme = K;
|
|
320
320
|
}
|
|
321
|
-
function
|
|
321
|
+
function q$1(K, Q = document.documentElement) {
|
|
322
322
|
for (let [X, Y] of Object.entries(K)) if (Y !== void 0) Q.style.setProperty(X, Y);
|
|
323
323
|
}
|
|
324
|
-
function
|
|
324
|
+
function D$1(K) {
|
|
325
325
|
if (document.getElementById("__mcp-host-fonts")) return;
|
|
326
326
|
let X = document.createElement("style");
|
|
327
327
|
X.id = "__mcp-host-fonts", X.textContent = K, document.head.appendChild(X);
|
|
@@ -333,10 +333,10 @@ function eK(K, Q) {
|
|
|
333
333
|
}, [K, Q]);
|
|
334
334
|
}
|
|
335
335
|
function XQ() {
|
|
336
|
-
let [K, Q] = (0, react.useState)(
|
|
336
|
+
let [K, Q] = (0, react.useState)(_$1);
|
|
337
337
|
return (0, react.useEffect)(() => {
|
|
338
338
|
let X = new MutationObserver(() => {
|
|
339
|
-
Q(
|
|
339
|
+
Q(_$1());
|
|
340
340
|
});
|
|
341
341
|
return X.observe(document.documentElement, {
|
|
342
342
|
attributes: !0,
|
|
@@ -351,14 +351,14 @@ function rJ(K, Q) {
|
|
|
351
351
|
let X = (0, react.useRef)(!1);
|
|
352
352
|
(0, react.useEffect)(() => {
|
|
353
353
|
if (X.current) return;
|
|
354
|
-
if (Q?.theme)
|
|
355
|
-
if (Q?.styles?.variables)
|
|
354
|
+
if (Q?.theme) O$1(Q.theme);
|
|
355
|
+
if (Q?.styles?.variables) q$1(Q.styles.variables);
|
|
356
356
|
if (Q?.theme || Q?.styles?.variables) X.current = !0;
|
|
357
357
|
}, [Q]), (0, react.useEffect)(() => {
|
|
358
358
|
if (!K) return;
|
|
359
359
|
K.onhostcontextchanged = (Y) => {
|
|
360
|
-
if (Y.theme)
|
|
361
|
-
if (Y.styles?.variables)
|
|
360
|
+
if (Y.theme) O$1(Y.theme);
|
|
361
|
+
if (Y.styles?.variables) q$1(Y.styles.variables);
|
|
362
362
|
};
|
|
363
363
|
}, [K]);
|
|
364
364
|
}
|
|
@@ -366,15 +366,15 @@ function lJ(K, Q) {
|
|
|
366
366
|
let X = (0, react.useRef)(!1);
|
|
367
367
|
(0, react.useEffect)(() => {
|
|
368
368
|
if (X.current) return;
|
|
369
|
-
if (Q?.styles?.css?.fonts)
|
|
369
|
+
if (Q?.styles?.css?.fonts) D$1(Q.styles.css.fonts), X.current = !0;
|
|
370
370
|
}, [Q]), (0, react.useEffect)(() => {
|
|
371
371
|
if (!K) return;
|
|
372
372
|
K.onhostcontextchanged = (Y) => {
|
|
373
|
-
if (Y.styles?.css?.fonts)
|
|
373
|
+
if (Y.styles?.css?.fonts) D$1(Y.styles.css.fonts);
|
|
374
374
|
};
|
|
375
375
|
}, [K]);
|
|
376
376
|
}
|
|
377
|
-
function GQ(K, Q) {
|
|
377
|
+
function GQ$1(K, Q) {
|
|
378
378
|
rJ(K, Q), lJ(K, Q);
|
|
379
379
|
}
|
|
380
380
|
//#endregion
|
|
@@ -394,8 +394,8 @@ var registries$1 = /* @__PURE__ */ new WeakMap();
|
|
|
394
394
|
* Host-provided variables override defaults since they're applied after.
|
|
395
395
|
*/
|
|
396
396
|
function applyStyles(variables) {
|
|
397
|
-
require_use_app.
|
|
398
|
-
if (variables) require_use_app.
|
|
397
|
+
require_use_app.FQ(require_inspector.DEFAULT_STYLE_VARIABLES);
|
|
398
|
+
if (variables) require_use_app.FQ(variables);
|
|
399
399
|
}
|
|
400
400
|
function getRegistry$1(app) {
|
|
401
401
|
let subs = registries$1.get(app);
|
|
@@ -403,15 +403,15 @@ function getRegistry$1(app) {
|
|
|
403
403
|
subs = /* @__PURE__ */ new Set();
|
|
404
404
|
registries$1.set(app, subs);
|
|
405
405
|
const ctx = app.getHostContext();
|
|
406
|
-
if (ctx?.theme) require_use_app.
|
|
406
|
+
if (ctx?.theme) require_use_app.AQ(ctx.theme);
|
|
407
407
|
applyStyles(ctx?.styles?.variables);
|
|
408
|
-
if (ctx?.styles?.css?.fonts) require_use_app.
|
|
408
|
+
if (ctx?.styles?.css?.fonts) require_use_app.PQ(ctx.styles.css.fonts);
|
|
409
409
|
let debounceTimer = null;
|
|
410
410
|
app.onhostcontextchanged = () => {
|
|
411
411
|
const ctx = app.getHostContext();
|
|
412
|
-
if (ctx?.theme) require_use_app.
|
|
412
|
+
if (ctx?.theme) require_use_app.AQ(ctx.theme);
|
|
413
413
|
applyStyles(ctx?.styles?.variables);
|
|
414
|
-
if (ctx?.styles?.css?.fonts) require_use_app.
|
|
414
|
+
if (ctx?.styles?.css?.fonts) require_use_app.PQ(ctx.styles.css.fonts);
|
|
415
415
|
if (debounceTimer) clearTimeout(debounceTimer);
|
|
416
416
|
debounceTimer = setTimeout(() => {
|
|
417
417
|
debounceTimer = null;
|
|
@@ -3207,64 +3207,64 @@ var prefersReducedMotion = createMediaQueryFn("(prefers-reduced-motion: reduce)"
|
|
|
3207
3207
|
var isPrimarilyTouchDevice = createMediaQueryFn("(pointer: coarse)");
|
|
3208
3208
|
var isHoverAvailable = createMediaQueryFn("(hover: hover)");
|
|
3209
3209
|
//#endregion
|
|
3210
|
-
exports.App = require_use_app.
|
|
3210
|
+
exports.App = require_use_app.kQ;
|
|
3211
3211
|
exports.AppProvider = require_use_app.AppProvider;
|
|
3212
|
-
exports.DOWNLOAD_FILE_METHOD = require_use_app.
|
|
3213
|
-
exports.HOST_CONTEXT_CHANGED_METHOD = require_use_app.
|
|
3214
|
-
exports.INITIALIZED_METHOD = require_use_app.
|
|
3215
|
-
exports.INITIALIZE_METHOD = require_use_app.
|
|
3216
|
-
exports.LATEST_PROTOCOL_VERSION = require_use_app.
|
|
3217
|
-
exports.MESSAGE_METHOD = require_use_app.
|
|
3218
|
-
exports.McpUiAppCapabilitiesSchema = require_use_app.
|
|
3219
|
-
exports.McpUiDisplayModeSchema = require_use_app.
|
|
3220
|
-
exports.McpUiDownloadFileRequestSchema = require_use_app.
|
|
3212
|
+
exports.DOWNLOAD_FILE_METHOD = require_use_app.u;
|
|
3213
|
+
exports.HOST_CONTEXT_CHANGED_METHOD = require_use_app.c;
|
|
3214
|
+
exports.INITIALIZED_METHOD = require_use_app.o;
|
|
3215
|
+
exports.INITIALIZE_METHOD = require_use_app.a;
|
|
3216
|
+
exports.LATEST_PROTOCOL_VERSION = require_use_app.E;
|
|
3217
|
+
exports.MESSAGE_METHOD = require_use_app.f;
|
|
3218
|
+
exports.McpUiAppCapabilitiesSchema = require_use_app.x;
|
|
3219
|
+
exports.McpUiDisplayModeSchema = require_use_app.D;
|
|
3220
|
+
exports.McpUiDownloadFileRequestSchema = require_use_app.LQ;
|
|
3221
3221
|
exports.McpUiDownloadFileResultSchema = require_use_app._;
|
|
3222
|
-
exports.McpUiHostCapabilitiesSchema = require_use_app.
|
|
3222
|
+
exports.McpUiHostCapabilitiesSchema = require_use_app.C;
|
|
3223
3223
|
exports.McpUiHostContextChangedNotificationSchema = require_use_app.R;
|
|
3224
3224
|
exports.McpUiHostContextSchema = require_use_app.T;
|
|
3225
|
-
exports.McpUiHostCssSchema = require_use_app.
|
|
3226
|
-
exports.McpUiHostStylesSchema = require_use_app.
|
|
3227
|
-
exports.McpUiInitializeRequestSchema = require_use_app.
|
|
3225
|
+
exports.McpUiHostCssSchema = require_use_app.b;
|
|
3226
|
+
exports.McpUiHostStylesSchema = require_use_app.k;
|
|
3227
|
+
exports.McpUiInitializeRequestSchema = require_use_app.IQ;
|
|
3228
3228
|
exports.McpUiInitializeResultSchema = require_use_app.U;
|
|
3229
|
-
exports.McpUiInitializedNotificationSchema = require_use_app.
|
|
3230
|
-
exports.McpUiMessageRequestSchema = require_use_app.
|
|
3229
|
+
exports.McpUiInitializedNotificationSchema = require_use_app.NQ;
|
|
3230
|
+
exports.McpUiMessageRequestSchema = require_use_app.BQ;
|
|
3231
3231
|
exports.McpUiMessageResultSchema = require_use_app.O;
|
|
3232
|
-
exports.McpUiOpenLinkRequestSchema = require_use_app.
|
|
3232
|
+
exports.McpUiOpenLinkRequestSchema = require_use_app.JQ;
|
|
3233
3233
|
exports.McpUiOpenLinkResultSchema = require_use_app.B;
|
|
3234
|
-
exports.McpUiRequestDisplayModeRequestSchema = require_use_app.
|
|
3234
|
+
exports.McpUiRequestDisplayModeRequestSchema = require_use_app.EQ;
|
|
3235
3235
|
exports.McpUiRequestDisplayModeResultSchema = require_use_app.P;
|
|
3236
3236
|
exports.McpUiRequestTeardownNotificationSchema = require_use_app.WQ;
|
|
3237
3237
|
exports.McpUiResourceCspSchema = require_use_app.G;
|
|
3238
|
-
exports.McpUiResourceMetaSchema = require_use_app.
|
|
3238
|
+
exports.McpUiResourceMetaSchema = require_use_app.jQ;
|
|
3239
3239
|
exports.McpUiResourcePermissionsSchema = require_use_app.V;
|
|
3240
3240
|
exports.McpUiResourceTeardownRequestSchema = require_use_app.F;
|
|
3241
|
-
exports.McpUiResourceTeardownResultSchema = require_use_app.
|
|
3242
|
-
exports.McpUiSizeChangedNotificationSchema = require_use_app.
|
|
3241
|
+
exports.McpUiResourceTeardownResultSchema = require_use_app.VQ;
|
|
3242
|
+
exports.McpUiSizeChangedNotificationSchema = require_use_app.GQ;
|
|
3243
3243
|
exports.McpUiSupportedContentBlockModalitiesSchema = require_use_app.L;
|
|
3244
|
-
exports.McpUiThemeSchema = require_use_app.
|
|
3244
|
+
exports.McpUiThemeSchema = require_use_app.v;
|
|
3245
3245
|
exports.McpUiToolCancelledNotificationSchema = require_use_app.A;
|
|
3246
3246
|
exports.McpUiToolInputNotificationSchema = require_use_app.I;
|
|
3247
3247
|
exports.McpUiToolInputPartialNotificationSchema = require_use_app.w;
|
|
3248
|
-
exports.McpUiToolMetaSchema = require_use_app.
|
|
3248
|
+
exports.McpUiToolMetaSchema = require_use_app.zQ;
|
|
3249
3249
|
exports.McpUiToolResultNotificationSchema = require_use_app.q;
|
|
3250
|
-
exports.McpUiToolVisibilitySchema = require_use_app.
|
|
3251
|
-
exports.McpUiUpdateModelContextRequestSchema = require_use_app.
|
|
3252
|
-
exports.OPEN_LINK_METHOD = require_use_app.
|
|
3250
|
+
exports.McpUiToolVisibilitySchema = require_use_app.g;
|
|
3251
|
+
exports.McpUiUpdateModelContextRequestSchema = require_use_app.OQ;
|
|
3252
|
+
exports.OPEN_LINK_METHOD = require_use_app.y;
|
|
3253
3253
|
exports.PostMessageTransport = require_use_app.K;
|
|
3254
|
-
exports.REQUEST_DISPLAY_MODE_METHOD = require_use_app.
|
|
3255
|
-
exports.REQUEST_TEARDOWN_METHOD = require_use_app.
|
|
3256
|
-
exports.RESOURCE_MIME_TYPE = require_use_app.
|
|
3257
|
-
exports.RESOURCE_TEARDOWN_METHOD = require_use_app.
|
|
3258
|
-
exports.RESOURCE_URI_META_KEY = require_use_app.
|
|
3259
|
-
exports.SIZE_CHANGED_METHOD = require_use_app.
|
|
3254
|
+
exports.REQUEST_DISPLAY_MODE_METHOD = require_use_app.s;
|
|
3255
|
+
exports.REQUEST_TEARDOWN_METHOD = require_use_app.p;
|
|
3256
|
+
exports.RESOURCE_MIME_TYPE = require_use_app.UX;
|
|
3257
|
+
exports.RESOURCE_TEARDOWN_METHOD = require_use_app.n;
|
|
3258
|
+
exports.RESOURCE_URI_META_KEY = require_use_app.RX;
|
|
3259
|
+
exports.SIZE_CHANGED_METHOD = require_use_app.m;
|
|
3260
3260
|
exports.SafeArea = SafeArea;
|
|
3261
|
-
exports.TOOL_CANCELLED_METHOD = require_use_app.
|
|
3262
|
-
exports.TOOL_INPUT_METHOD = require_use_app.
|
|
3261
|
+
exports.TOOL_CANCELLED_METHOD = require_use_app.r;
|
|
3262
|
+
exports.TOOL_INPUT_METHOD = require_use_app.i;
|
|
3263
3263
|
exports.TOOL_INPUT_PARTIAL_METHOD = require_use_app.z;
|
|
3264
|
-
exports.TOOL_RESULT_METHOD = require_use_app.
|
|
3265
|
-
exports.applyDocumentTheme = require_use_app.
|
|
3266
|
-
exports.applyHostFonts = require_use_app.
|
|
3267
|
-
exports.applyHostStyleVariables = require_use_app.
|
|
3264
|
+
exports.TOOL_RESULT_METHOD = require_use_app.l;
|
|
3265
|
+
exports.applyDocumentTheme = require_use_app.AQ;
|
|
3266
|
+
exports.applyHostFonts = require_use_app.PQ;
|
|
3267
|
+
exports.applyHostStyleVariables = require_use_app.FQ;
|
|
3268
3268
|
Object.defineProperty(exports, "chatgpt", {
|
|
3269
3269
|
enumerable: true,
|
|
3270
3270
|
get: function() {
|
|
@@ -3273,7 +3273,7 @@ Object.defineProperty(exports, "chatgpt", {
|
|
|
3273
3273
|
});
|
|
3274
3274
|
exports.cn = cn;
|
|
3275
3275
|
exports.detectHost = require_host_index.detectHost;
|
|
3276
|
-
exports.getDocumentTheme = require_use_app.
|
|
3276
|
+
exports.getDocumentTheme = require_use_app.wQ;
|
|
3277
3277
|
Object.defineProperty(exports, "inspector", {
|
|
3278
3278
|
enumerable: true,
|
|
3279
3279
|
get: function() {
|
|
@@ -3298,7 +3298,7 @@ exports.useHostContext = useHostContext;
|
|
|
3298
3298
|
exports.useHostFonts = lJ;
|
|
3299
3299
|
exports.useHostInfo = useHostInfo;
|
|
3300
3300
|
exports.useHostStyleVariables = rJ;
|
|
3301
|
-
exports.useHostStyles = GQ;
|
|
3301
|
+
exports.useHostStyles = GQ$1;
|
|
3302
3302
|
exports.useIsMobile = useIsMobile;
|
|
3303
3303
|
exports.useListServerResources = useListServerResources;
|
|
3304
3304
|
exports.useLocale = useLocale;
|