sunpeak 0.14.3 → 0.15.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.
- package/README.md +34 -30
- package/bin/commands/build.mjs +2 -1
- package/bin/commands/dev.mjs +72 -2
- package/dist/chatgpt/{conversation.d.ts → chatgpt-conversation.d.ts} +1 -1
- package/dist/chatgpt/chatgpt-host.d.ts +1 -0
- package/dist/chatgpt/globals.css +618 -6156
- package/dist/chatgpt/index.cjs +11 -8
- package/dist/chatgpt/index.cjs.map +1 -1
- package/dist/chatgpt/index.d.ts +10 -32
- package/dist/chatgpt/index.js +15 -12
- package/dist/chatgpt/index.js.map +1 -1
- package/dist/claude/claude-conversation.d.ts +23 -0
- package/dist/claude/claude-host.d.ts +1 -0
- package/dist/claude/index.cjs +5 -0
- package/dist/claude/index.cjs.map +1 -0
- package/dist/claude/index.d.ts +1 -0
- package/dist/claude/index.js +5 -0
- package/dist/claude/index.js.map +1 -0
- package/dist/{discovery-COZUnY6a.js → discovery-DzV3HLXs.js} +5 -5
- package/dist/{discovery-COZUnY6a.js.map → discovery-DzV3HLXs.js.map} +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/use-app-tools.d.ts +44 -0
- package/dist/hooks/use-update-model-context.d.ts +29 -0
- package/dist/index-B0dxRJvS.cjs +42 -0
- package/dist/index-B0dxRJvS.cjs.map +1 -0
- package/dist/index-Ce_5ZIdJ.js +512 -0
- package/dist/index-Ce_5ZIdJ.js.map +1 -0
- package/dist/index-Cngntkp2.cjs +527 -0
- package/dist/index-Cngntkp2.cjs.map +1 -0
- package/dist/index-CutQgPzR.js +43 -0
- package/dist/index-CutQgPzR.js.map +1 -0
- package/dist/index.cjs +1705 -1647
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2732 -2675
- package/dist/index.js.map +1 -1
- package/dist/lib/default-style-variables.d.ts +2 -0
- package/dist/lib/discovery-cli.js +1 -1
- package/dist/mcp/index.cjs +86 -27
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.d.ts +3 -1
- package/dist/mcp/index.js +85 -26
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -3
- package/dist/mcp/types.d.ts +11 -0
- package/dist/platform/chatgpt/index.cjs +1 -1
- package/dist/platform/chatgpt/index.js +1 -1
- package/dist/platform/index.cjs +3 -0
- package/dist/platform/index.cjs.map +1 -1
- package/dist/platform/index.d.ts +3 -1
- package/dist/platform/index.js +3 -0
- package/dist/platform/index.js.map +1 -1
- package/dist/{protocol-BQCnIrc9.js → protocol-DFbsCx7E.js} +29 -29
- package/dist/{protocol-BQCnIrc9.js.map → protocol-DFbsCx7E.js.map} +1 -1
- package/dist/simulator/host-styles.d.ts +5 -0
- package/dist/simulator/hosts.d.ts +73 -0
- package/dist/{chatgpt → simulator}/iframe-resource.d.ts +27 -3
- package/dist/simulator/index.cjs +39 -0
- package/dist/simulator/index.cjs.map +1 -0
- package/dist/simulator/index.d.ts +18 -0
- package/dist/simulator/index.js +39 -0
- package/dist/simulator/index.js.map +1 -0
- package/dist/{chatgpt → simulator}/mcp-app-host.d.ts +8 -1
- package/dist/simulator/mock-openai-runtime.d.ts +20 -0
- package/dist/{chatgpt → simulator}/simulator-url.d.ts +8 -1
- package/dist/simulator/simulator.d.ts +12 -0
- package/dist/{chatgpt → simulator}/theme-provider.d.ts +3 -1
- package/dist/simulator/use-simulator-state.d.ts +91 -0
- package/dist/simulator-CxrtnguM.js +8764 -0
- package/dist/simulator-CxrtnguM.js.map +1 -0
- package/dist/simulator-DcfQBRXE.cjs +8779 -0
- package/dist/simulator-DcfQBRXE.cjs.map +1 -0
- package/dist/simulator-url-CuLqtnSS.js +48 -0
- package/dist/simulator-url-CuLqtnSS.js.map +1 -0
- package/dist/simulator-url-rgg_KYOg.cjs +47 -0
- package/dist/simulator-url-rgg_KYOg.cjs.map +1 -0
- package/dist/style.css +558 -6143
- package/dist/types/runtime.d.ts +1 -1
- package/dist/{use-app-D7kRAPSG.cjs → use-app-BnoSPiUT.cjs} +2 -1
- package/dist/{use-app-D7kRAPSG.cjs.map → use-app-BnoSPiUT.cjs.map} +1 -1
- package/dist/{use-app-Dvr4LKs2.js → use-app-D_TeaMFG.js} +4 -3
- package/dist/{use-app-Dvr4LKs2.js.map → use-app-D_TeaMFG.js.map} +1 -1
- package/package.json +18 -3
- package/template/.sunpeak/dev.tsx +4 -4
- package/template/.sunpeak/resource-loader.html +1 -1
- package/template/README.md +1 -1
- package/template/node_modules/.bin/nodemon +2 -2
- package/template/node_modules/.bin/playwright +2 -2
- package/template/node_modules/.bin/sunpeak +2 -2
- package/template/node_modules/.bin/tsc +2 -2
- package/template/node_modules/.bin/tsserver +2 -2
- package/template/node_modules/.bin/tsx +2 -2
- package/template/node_modules/.bin/vite +2 -2
- package/template/src/components/avatar.tsx +4 -1
- package/template/src/components/button.tsx +17 -20
- package/template/src/resources/albums/albums-resource.tsx +2 -3
- package/template/src/resources/albums/components/album-card.tsx +4 -2
- package/template/src/resources/albums/components/film-strip.test.tsx +2 -2
- package/template/src/resources/albums/components/film-strip.tsx +2 -2
- package/template/src/resources/albums/components/fullscreen-viewer.tsx +7 -5
- package/template/src/resources/carousel/carousel-resource.tsx +2 -3
- package/template/src/resources/carousel/components/card.test.tsx +3 -2
- package/template/src/resources/carousel/components/card.tsx +8 -4
- package/template/src/resources/map/components/map-view.tsx +1 -1
- package/template/src/resources/map/components/map.tsx +1 -1
- package/template/src/resources/map/components/place-card.tsx +8 -4
- package/template/src/resources/map/components/place-carousel.tsx +1 -1
- package/template/src/resources/map/components/place-inspector.tsx +15 -7
- package/template/src/resources/map/components/place-list.tsx +7 -4
- package/template/src/resources/map/map-resource.tsx +0 -2
- package/template/src/resources/review/review-resource.tsx +61 -27
- package/template/tests/e2e/albums.spec.ts +118 -102
- package/template/tests/e2e/carousel.spec.ts +103 -100
- package/template/tests/e2e/map.spec.ts +220 -181
- package/template/tests/e2e/review.spec.ts +224 -198
- package/dist/_commonjsHelpers-Bc2YnDe1.cjs +0 -8
- package/dist/_commonjsHelpers-Bc2YnDe1.cjs.map +0 -1
- package/dist/_commonjsHelpers-DWwsNxpa.js +0 -9
- package/dist/_commonjsHelpers-DWwsNxpa.js.map +0 -1
- package/dist/index-CJ3jfcjj.js +0 -15131
- package/dist/index-CJ3jfcjj.js.map +0 -1
- package/dist/index-Cdeg96So.cjs +0 -15147
- package/dist/index-Cdeg96So.cjs.map +0 -1
- /package/dist/{chatgpt → simulator}/simple-sidebar.d.ts +0 -0
- /package/dist/{chatgpt/chatgpt-simulator-types.d.ts → simulator/simulator-types.d.ts} +0 -0
package/dist/mcp/index.cjs
CHANGED
|
@@ -5,11 +5,13 @@ const node_url = require("node:url");
|
|
|
5
5
|
const fs = require("node:fs");
|
|
6
6
|
const path = require("node:path");
|
|
7
7
|
const protocol = require("../protocol-CL4_Npj5.cjs");
|
|
8
|
-
const _commonjsHelpers = require("../_commonjsHelpers-Bc2YnDe1.cjs");
|
|
9
8
|
const zod = require("zod");
|
|
10
9
|
const sse_js = require("@modelcontextprotocol/sdk/server/sse.js");
|
|
11
10
|
const FAVICON_BASE64 = "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";
|
|
12
11
|
const FAVICON_BUFFER = Buffer.from(FAVICON_BASE64, "base64");
|
|
12
|
+
function getDefaultExportFromCjs(x2) {
|
|
13
|
+
return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
|
|
14
|
+
}
|
|
13
15
|
var ajv = { exports: {} };
|
|
14
16
|
var core$1 = {};
|
|
15
17
|
var validate = {};
|
|
@@ -6320,7 +6322,7 @@ function requireAjv() {
|
|
|
6320
6322
|
return ajv.exports;
|
|
6321
6323
|
}
|
|
6322
6324
|
var ajvExports = requireAjv();
|
|
6323
|
-
const Ajv = /* @__PURE__ */
|
|
6325
|
+
const Ajv = /* @__PURE__ */ getDefaultExportFromCjs(ajvExports);
|
|
6324
6326
|
var dist = { exports: {} };
|
|
6325
6327
|
var formats = {};
|
|
6326
6328
|
var hasRequiredFormats;
|
|
@@ -6645,7 +6647,7 @@ function requireDist() {
|
|
|
6645
6647
|
return dist.exports;
|
|
6646
6648
|
}
|
|
6647
6649
|
var distExports = requireDist();
|
|
6648
|
-
const _addFormats = /* @__PURE__ */
|
|
6650
|
+
const _addFormats = /* @__PURE__ */ getDefaultExportFromCjs(distExports);
|
|
6649
6651
|
function createDefaultAjvInstance() {
|
|
6650
6652
|
const ajv2 = new Ajv({
|
|
6651
6653
|
strict: false,
|
|
@@ -14201,6 +14203,18 @@ function hk(r, i, o, t) {
|
|
|
14201
14203
|
function ak(r, i, o, t, n) {
|
|
14202
14204
|
r.registerResource(i, o, { mimeType: EI, ...t }, n);
|
|
14203
14205
|
}
|
|
14206
|
+
var C6 = "io.modelcontextprotocol/ui";
|
|
14207
|
+
function pk(r) {
|
|
14208
|
+
if (!r) return;
|
|
14209
|
+
return r.extensions?.[C6];
|
|
14210
|
+
}
|
|
14211
|
+
const LOCAL_DEV_SERVER_URL = "http://localhost:8000";
|
|
14212
|
+
const LOCAL_HMR_WS_URL = "ws://localhost:24678";
|
|
14213
|
+
function needsProdBuild(headers) {
|
|
14214
|
+
const ua = headers["user-agent"];
|
|
14215
|
+
const userAgent = typeof ua === "string" ? ua : Array.isArray(ua) ? ua[0] : "";
|
|
14216
|
+
return /claude/i.test(userAgent ?? "");
|
|
14217
|
+
}
|
|
14204
14218
|
function readResourceHtmlProd(distPath) {
|
|
14205
14219
|
const htmlPath = path.resolve(distPath);
|
|
14206
14220
|
if (!fs.existsSync(htmlPath)) {
|
|
@@ -14213,7 +14227,7 @@ function readResourceHtmlProd(distPath) {
|
|
|
14213
14227
|
function getViteResourceHtml(srcPath) {
|
|
14214
14228
|
const fileName = srcPath.split("/").pop()?.replace(/-resource\.tsx$/, "") ?? "";
|
|
14215
14229
|
const componentName = fileName.split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("") + "Resource";
|
|
14216
|
-
const devServerUrl =
|
|
14230
|
+
const devServerUrl = LOCAL_DEV_SERVER_URL;
|
|
14217
14231
|
const entryParams = new URLSearchParams({ src: srcPath, component: componentName });
|
|
14218
14232
|
const virtualModuleUrl = `${devServerUrl}/@id/virtual:sunpeak-entry?${entryParams.toString()}`;
|
|
14219
14233
|
return `<!DOCTYPE html>
|
|
@@ -14252,38 +14266,44 @@ function getViteResourceHtml(srcPath) {
|
|
|
14252
14266
|
</body>
|
|
14253
14267
|
</html>`;
|
|
14254
14268
|
}
|
|
14255
|
-
function getResourceHtml(simulation, viteMode) {
|
|
14256
|
-
if (viteMode && simulation.srcPath) {
|
|
14269
|
+
function getResourceHtml(simulation, viteMode, prodBuild) {
|
|
14270
|
+
if (viteMode && simulation.srcPath && !prodBuild) {
|
|
14257
14271
|
return getViteResourceHtml(simulation.srcPath);
|
|
14258
14272
|
}
|
|
14259
14273
|
return readResourceHtmlProd(simulation.distPath);
|
|
14260
14274
|
}
|
|
14261
|
-
const DEV_SERVER_URL = "http://localhost:8000";
|
|
14262
|
-
const HMR_WS_URL = "ws://localhost:24678";
|
|
14263
14275
|
function injectViteCSP(existingMeta) {
|
|
14264
14276
|
const meta = existingMeta ?? {};
|
|
14265
14277
|
const ui2 = meta.ui ?? {};
|
|
14266
14278
|
const csp = ui2.csp ?? {};
|
|
14267
14279
|
const existingResourceDomains = csp.resourceDomains ?? [];
|
|
14268
|
-
const resourceDomains = existingResourceDomains.includes(
|
|
14280
|
+
const resourceDomains = existingResourceDomains.includes(LOCAL_DEV_SERVER_URL) ? existingResourceDomains : [...existingResourceDomains, LOCAL_DEV_SERVER_URL];
|
|
14269
14281
|
const existingConnectDomains = csp.connectDomains ?? [];
|
|
14270
|
-
const connectDomains =
|
|
14282
|
+
const connectDomains = [...existingConnectDomains];
|
|
14283
|
+
if (!connectDomains.includes(LOCAL_DEV_SERVER_URL)) connectDomains.push(LOCAL_DEV_SERVER_URL);
|
|
14284
|
+
if (!connectDomains.includes(LOCAL_HMR_WS_URL)) connectDomains.push(LOCAL_HMR_WS_URL);
|
|
14271
14285
|
return {
|
|
14272
14286
|
...meta,
|
|
14273
14287
|
ui: {
|
|
14274
14288
|
...ui2,
|
|
14275
|
-
csp: {
|
|
14276
|
-
...csp,
|
|
14277
|
-
resourceDomains,
|
|
14278
|
-
connectDomains
|
|
14279
|
-
}
|
|
14289
|
+
csp: { ...csp, resourceDomains, connectDomains }
|
|
14280
14290
|
}
|
|
14281
14291
|
};
|
|
14282
14292
|
}
|
|
14283
14293
|
function createAppServer(config, simulations, viteMode) {
|
|
14284
14294
|
const { name = "sunpeak-app", version = "0.1.0" } = config;
|
|
14285
14295
|
const mcpServer = new McpServer(
|
|
14286
|
-
{
|
|
14296
|
+
{
|
|
14297
|
+
name,
|
|
14298
|
+
version,
|
|
14299
|
+
icons: [
|
|
14300
|
+
{
|
|
14301
|
+
src: `data:image/png;base64,${FAVICON_BASE64}`,
|
|
14302
|
+
mimeType: "image/png",
|
|
14303
|
+
sizes: ["128x128"]
|
|
14304
|
+
}
|
|
14305
|
+
]
|
|
14306
|
+
},
|
|
14287
14307
|
{ capabilities: { resources: {}, tools: {} } }
|
|
14288
14308
|
);
|
|
14289
14309
|
const registeredResources = /* @__PURE__ */ new Set();
|
|
@@ -14296,32 +14316,39 @@ function createAppServer(config, simulations, viteMode) {
|
|
|
14296
14316
|
const toolMeta = tool._meta ?? {};
|
|
14297
14317
|
if (!registeredResources.has(uri2)) {
|
|
14298
14318
|
registeredResources.add(uri2);
|
|
14319
|
+
const listMeta = viteMode ? injectViteCSP(resourceMeta) : resourceMeta;
|
|
14320
|
+
console.log(`[MCP] RegisterResource: ${uri2}`);
|
|
14299
14321
|
ak(
|
|
14300
14322
|
mcpServer,
|
|
14301
14323
|
resource.name,
|
|
14302
14324
|
uri2,
|
|
14303
14325
|
{
|
|
14304
14326
|
description: resource.description,
|
|
14305
|
-
_meta:
|
|
14327
|
+
_meta: listMeta
|
|
14306
14328
|
},
|
|
14307
|
-
async () => {
|
|
14308
|
-
|
|
14329
|
+
async (_uri, extra) => {
|
|
14330
|
+
const prodBuild = needsProdBuild(
|
|
14331
|
+
extra?.requestInfo?.headers ?? {}
|
|
14332
|
+
);
|
|
14333
|
+
const readMeta = viteMode && !prodBuild ? injectViteCSP(resourceMeta) : resourceMeta;
|
|
14309
14334
|
let content;
|
|
14310
14335
|
try {
|
|
14311
|
-
content = getResourceHtml(simulation, viteMode);
|
|
14336
|
+
content = getResourceHtml(simulation, viteMode, prodBuild);
|
|
14312
14337
|
} catch (error) {
|
|
14313
14338
|
console.error(`[MCP] ReadResource error for ${uri2}:`, error);
|
|
14314
14339
|
throw error;
|
|
14315
14340
|
}
|
|
14316
14341
|
const sizeKB = (content.length / 1024).toFixed(1);
|
|
14317
|
-
console.log(
|
|
14342
|
+
console.log(
|
|
14343
|
+
`[MCP] ReadResource: ${uri2} → ${sizeKB}KB${prodBuild ? " (prod build)" : " (vite)"}`
|
|
14344
|
+
);
|
|
14318
14345
|
return {
|
|
14319
14346
|
contents: [
|
|
14320
14347
|
{
|
|
14321
14348
|
uri: uri2,
|
|
14322
14349
|
mimeType: EI,
|
|
14323
14350
|
text: content,
|
|
14324
|
-
_meta:
|
|
14351
|
+
_meta: readMeta
|
|
14325
14352
|
}
|
|
14326
14353
|
]
|
|
14327
14354
|
};
|
|
@@ -14335,7 +14362,11 @@ function createAppServer(config, simulations, viteMode) {
|
|
|
14335
14362
|
description: tool.description,
|
|
14336
14363
|
_meta: {
|
|
14337
14364
|
...toolMeta,
|
|
14338
|
-
ui: {
|
|
14365
|
+
ui: {
|
|
14366
|
+
resourceUri: uri2,
|
|
14367
|
+
// Preserve tool visibility from simulation metadata if declared
|
|
14368
|
+
...toolMeta.ui?.visibility ? { visibility: toolMeta.ui.visibility } : {}
|
|
14369
|
+
}
|
|
14339
14370
|
}
|
|
14340
14371
|
},
|
|
14341
14372
|
async (extra) => {
|
|
@@ -14364,16 +14395,24 @@ function createAppServer(config, simulations, viteMode) {
|
|
|
14364
14395
|
);
|
|
14365
14396
|
return mcpServer;
|
|
14366
14397
|
}
|
|
14398
|
+
function isLocalConnection(req) {
|
|
14399
|
+
const addr = req.socket.remoteAddress;
|
|
14400
|
+
return addr === "127.0.0.1" || addr === "::1" || addr === "::ffff:127.0.0.1";
|
|
14401
|
+
}
|
|
14367
14402
|
const sessions = /* @__PURE__ */ new Map();
|
|
14368
14403
|
const ssePath = "/mcp";
|
|
14369
14404
|
const postPath = "/mcp/messages";
|
|
14370
|
-
async function handleSseRequest(res, config, simulations, viteMode) {
|
|
14405
|
+
async function handleSseRequest(req, res, config, simulations, viteMode) {
|
|
14371
14406
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
14372
14407
|
const server = createAppServer(config, simulations, viteMode);
|
|
14373
14408
|
const transport = new sse_js.SSEServerTransport(postPath, res);
|
|
14374
14409
|
const sessionId = transport.sessionId;
|
|
14375
|
-
|
|
14376
|
-
|
|
14410
|
+
const isLocal = isLocalConnection(req);
|
|
14411
|
+
sessions.set(sessionId, { server, transport, isLocal });
|
|
14412
|
+
const origin = isLocal ? "local" : "tunnel";
|
|
14413
|
+
console.log(
|
|
14414
|
+
`[MCP] Session started: ${sessionId.substring(0, 8)}... (${origin}, ${sessions.size} active)`
|
|
14415
|
+
);
|
|
14377
14416
|
transport.onclose = async () => {
|
|
14378
14417
|
if (!sessions.has(sessionId)) return;
|
|
14379
14418
|
sessions.delete(sessionId);
|
|
@@ -14481,7 +14520,7 @@ function runMCPServer(config) {
|
|
|
14481
14520
|
}
|
|
14482
14521
|
if (req.method === "GET" && url.pathname === ssePath) {
|
|
14483
14522
|
console.log(`[HTTP] ${req.method} ${url.pathname}`);
|
|
14484
|
-
await handleSseRequest(res, config, simulations, viteMode);
|
|
14523
|
+
await handleSseRequest(req, res, config, simulations, viteMode);
|
|
14485
14524
|
return;
|
|
14486
14525
|
}
|
|
14487
14526
|
if (req.method === "POST" && url.pathname === postPath) {
|
|
@@ -14527,8 +14566,28 @@ function runMCPServer(config) {
|
|
|
14527
14566
|
};
|
|
14528
14567
|
process.on("SIGTERM", () => void shutdown());
|
|
14529
14568
|
process.on("SIGINT", () => void shutdown());
|
|
14569
|
+
return {
|
|
14570
|
+
invalidateResources() {
|
|
14571
|
+
let notified = 0;
|
|
14572
|
+
for (const [, session] of sessions) {
|
|
14573
|
+
if (!session.isLocal) {
|
|
14574
|
+
session.server.sendResourceListChanged();
|
|
14575
|
+
notified++;
|
|
14576
|
+
}
|
|
14577
|
+
}
|
|
14578
|
+
if (notified > 0) {
|
|
14579
|
+
console.log(`[MCP] Notified ${notified} session(s) of resource changes`);
|
|
14580
|
+
}
|
|
14581
|
+
}
|
|
14582
|
+
};
|
|
14530
14583
|
}
|
|
14584
|
+
exports.EXTENSION_ID = C6;
|
|
14531
14585
|
exports.FAVICON_BASE64 = FAVICON_BASE64;
|
|
14532
14586
|
exports.FAVICON_BUFFER = FAVICON_BUFFER;
|
|
14587
|
+
exports.RESOURCE_MIME_TYPE = EI;
|
|
14588
|
+
exports.RESOURCE_URI_META_KEY = je;
|
|
14589
|
+
exports.getUiCapability = pk;
|
|
14590
|
+
exports.registerAppResource = ak;
|
|
14591
|
+
exports.registerAppTool = hk;
|
|
14533
14592
|
exports.runMCPServer = runMCPServer;
|
|
14534
14593
|
//# sourceMappingURL=index.cjs.map
|