@plitzi/sdk-server 0.32.8 → 0.32.10
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/CHANGELOG.md +20 -0
- package/dist/core/services/mcp.js +8 -6
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.js +6 -0
- package/dist/modules/mcp/apps/example/view.tsx +70 -0
- package/dist/modules/mcp/apps/index.js +12 -0
- package/dist/modules/mcp/apps/render/index.js +16 -0
- package/dist/modules/mcp/apps/render/view.tsx +108 -0
- package/dist/modules/mcp/apps/shared/bundle.js +22 -0
- package/dist/modules/mcp/apps/shared/page.js +23 -0
- package/dist/modules/mcp/apps/shared/registerApp.js +27 -0
- package/dist/modules/mcp/apps/shared/resolve.js +5 -0
- package/dist/modules/mcp/apps/shared/shell.ejs +37 -0
- package/dist/modules/mcp/apps/shared/zodEnglishOnly.js +23 -0
- package/dist/modules/mcp/handler.js +3 -6
- package/dist/modules/mcp/resources/register.js +1 -1
- package/dist/modules/mcp/server.js +21 -12
- package/dist/modules/mcp/tools/apply/index.js +1 -1
- package/dist/modules/mcp/tools/render.js +3 -3
- package/dist/modules/mcp/tools/shared/validator/index.js +2 -1
- package/dist/modules/ssr/registerExternalPlugins.js +1 -1
- package/dist/modules/ssr/template.js +1 -1
- package/dist/plugins/compile.js +1 -1
- package/dist/plugins/copy.js +1 -1
- package/dist/plugins/manager.js +1 -1
- package/dist/src/core/requestParser.d.ts +3 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/mcp.d.ts +13 -0
- package/dist/src/modules/mcp/apps/apps.test.d.ts +1 -0
- package/dist/src/modules/mcp/apps/example/index.d.ts +8 -0
- package/dist/src/modules/mcp/apps/example/view.d.ts +1 -0
- package/dist/src/modules/mcp/apps/index.d.ts +8 -0
- package/dist/src/modules/mcp/apps/render/index.d.ts +3 -0
- package/dist/src/modules/mcp/apps/render/view.d.ts +1 -0
- package/dist/src/modules/mcp/apps/shared/bundle.d.ts +1 -0
- package/dist/src/modules/mcp/apps/shared/index.d.ts +2 -0
- package/dist/src/modules/mcp/apps/shared/page.d.ts +2 -0
- package/dist/src/modules/mcp/apps/shared/registerApp.d.ts +5 -0
- package/dist/src/modules/mcp/apps/shared/resolve.d.ts +1 -0
- package/dist/src/modules/mcp/apps/shared/zodEnglishOnly.d.ts +4 -0
- package/dist/src/modules/mcp/e2e/connector.test.d.ts +1 -0
- package/dist/src/modules/mcp/e2e/host.test.d.ts +1 -0
- package/dist/src/modules/mcp/e2e/index.d.ts +6 -0
- package/dist/src/modules/mcp/e2e/mcpEndpoint.d.ts +20 -0
- package/dist/src/modules/mcp/e2e/postMessageChannel.d.ts +22 -0
- package/dist/src/modules/mcp/e2e/renderingHost.d.ts +14 -0
- package/dist/src/modules/mcp/handler.d.ts +9 -5
- package/dist/src/modules/mcp/index.d.ts +1 -0
- package/dist/src/modules/mcp/resources/register.d.ts +1 -1
- package/dist/src/modules/mcp/resources/renderGuide.d.ts +1 -1
- package/dist/src/modules/mcp/server.d.ts +2 -10
- package/dist/src/modules/mcp/tools/apply/index.d.ts +3 -3
- package/dist/src/modules/mcp/tools/operations/index.d.ts +6 -6
- package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +1 -1
- package/dist/src/modules/mcp/tools/operations/schema/settings/patchSettings.d.ts +1 -1
- package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +2 -2
- package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +1 -1
- package/dist/src/modules/mcp/tools/operations/style/variables/deleteStyleVariable.d.ts +1 -1
- package/dist/src/modules/mcp/tools/operations/style/variables/upsertStyleVariable.d.ts +1 -1
- package/dist/src/modules/mcp/tools/preview.d.ts +3 -3
- package/dist/src/modules/mcp/tools/render.d.ts +3 -3
- package/dist/src/modules/mcp/tools/screenshot.d.ts +3 -3
- package/dist/src/modules/mcp/tools/shared/tool.d.ts +4 -7
- package/dist/src/modules/mcp/tools/validate.d.ts +3 -3
- package/dist/src/modules/mcp/types/appTypes.d.ts +13 -0
- package/dist/src/modules/mcp/types/index.d.ts +1 -0
- package/package.json +13 -4
- package/dist/modules/mcp/resources/renderApp.js +0 -174
- package/dist/server.d.ts +0 -1
- package/dist/server.js +0 -107
- package/dist/src/modules/mcp/resources/renderApp.d.ts +0 -3
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
//#region src/modules/mcp/resources/renderApp.ts
|
|
2
|
-
var RENDER_APP_URI = "ui://plitzi/render.html";
|
|
3
|
-
var RENDER_APP_MIME = "text/html;profile=mcp-app";
|
|
4
|
-
var RENDER_APP_CSP = {
|
|
5
|
-
resourceDomains: [
|
|
6
|
-
"*",
|
|
7
|
-
"data:",
|
|
8
|
-
"blob:"
|
|
9
|
-
],
|
|
10
|
-
connectDomains: ["*"]
|
|
11
|
-
};
|
|
12
|
-
var appHtml = (sdkBase, devMode) => {
|
|
13
|
-
const js = `${sdkBase}/sdk-assets/plitzi-sdk.js`;
|
|
14
|
-
const vendor = `${sdkBase}/sdk-assets/${devMode ? "plitzi-sdk-dev-vendor.js" : "plitzi-sdk-vendor.js"}`;
|
|
15
|
-
return `<!doctype html>
|
|
16
|
-
<html lang="en">
|
|
17
|
-
<head>
|
|
18
|
-
<meta charset="utf-8" />
|
|
19
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
20
|
-
<title>Plitzi widget</title>
|
|
21
|
-
<link rel="modulepreload" href="${vendor}" crossorigin />
|
|
22
|
-
<script type="importmap">
|
|
23
|
-
{
|
|
24
|
-
"imports": {
|
|
25
|
-
"react": "${vendor}",
|
|
26
|
-
"react-dom": "${vendor}",
|
|
27
|
-
"react-dom/client": "${vendor}",
|
|
28
|
-
"react/jsx-runtime": "${vendor}",
|
|
29
|
-
"react/compiler-runtime": "${vendor}",
|
|
30
|
-
"@plitzi/plitzi-sdk": "${js}"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
<\/script>
|
|
34
|
-
<link href="${`${sdkBase}/sdk-assets/plitzi-sdk.css`}" rel="stylesheet" />
|
|
35
|
-
<style>
|
|
36
|
-
html,
|
|
37
|
-
body {
|
|
38
|
-
margin: 0;
|
|
39
|
-
}
|
|
40
|
-
#plitzi:empty::after {
|
|
41
|
-
content: 'Rendering…';
|
|
42
|
-
display: block;
|
|
43
|
-
padding: 16px;
|
|
44
|
-
font: 14px system-ui, sans-serif;
|
|
45
|
-
color: #64748b;
|
|
46
|
-
}
|
|
47
|
-
</style>
|
|
48
|
-
</head>
|
|
49
|
-
<body>
|
|
50
|
-
<div id="plitzi" class="plitzi-root-container"></div>
|
|
51
|
-
<script type="module">
|
|
52
|
-
const send = msg => window.parent.postMessage(msg, '*');
|
|
53
|
-
const root = document.getElementById('plitzi');
|
|
54
|
-
let mounted = false;
|
|
55
|
-
|
|
56
|
-
// Replace the 'Rendering…' placeholder with an explicit failure panel — otherwise a tool that returns
|
|
57
|
-
// { rendered:false } (no offlineData) or an SDK that fails to load would leave the iframe stuck forever.
|
|
58
|
-
const showError = (title, details) => {
|
|
59
|
-
mounted = true;
|
|
60
|
-
root.textContent = '';
|
|
61
|
-
const box = document.createElement('div');
|
|
62
|
-
box.setAttribute('style', 'padding:16px;font:13px/1.5 system-ui,sans-serif;color:#b91c1c');
|
|
63
|
-
const h = document.createElement('strong');
|
|
64
|
-
h.textContent = title;
|
|
65
|
-
box.appendChild(h);
|
|
66
|
-
if (details) {
|
|
67
|
-
const pre = document.createElement('pre');
|
|
68
|
-
pre.setAttribute('style', 'margin:8px 0 0;white-space:pre-wrap;color:#7f1d1d;font-size:12px');
|
|
69
|
-
pre.textContent = details;
|
|
70
|
-
box.appendChild(pre);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
root.appendChild(box);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
// The failed-render text is the tool's JSON summary ({ rendered:false, errors:[{path,message,hint}] }).
|
|
77
|
-
const errorText = params => {
|
|
78
|
-
const item = Array.isArray(params && params.content) ? params.content.find(c => c.type === 'text') : undefined;
|
|
79
|
-
if (!item) {
|
|
80
|
-
return '';
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
const parsed = JSON.parse(item.text);
|
|
85
|
-
if (Array.isArray(parsed.errors)) {
|
|
86
|
-
return parsed.errors
|
|
87
|
-
.map(e => '• ' + (e.path ? e.path + ': ' : '') + e.message + (e.hint ? ' — ' + e.hint : ''))
|
|
88
|
-
.join('\\n');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return item.text;
|
|
92
|
-
} catch {
|
|
93
|
-
return item.text;
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
const mount = async params => {
|
|
98
|
-
if (mounted) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const offlineData = params && params.structuredContent && params.structuredContent.offlineData;
|
|
103
|
-
if (!offlineData) {
|
|
104
|
-
showError('Render failed', errorText(params) || 'The tool returned no widget data.');
|
|
105
|
-
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
mounted = true;
|
|
110
|
-
try {
|
|
111
|
-
const { render } = await import('@plitzi/plitzi-sdk');
|
|
112
|
-
render('plitzi', { offlineData, offlineMode: true, environment: 'main', renderMode: 'raw' }, {}, false, false);
|
|
113
|
-
} catch (err) {
|
|
114
|
-
showError('SDK failed to load', String((err && err.message) || err));
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
window.addEventListener('message', event => {
|
|
119
|
-
const msg = event.data;
|
|
120
|
-
if (!msg || msg.jsonrpc !== '2.0') {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Reply to the initialize result: the host withholds tool data until it gets our 'initialized' notification.
|
|
125
|
-
if (msg.id === 1 && 'result' in msg) {
|
|
126
|
-
send({ jsonrpc: '2.0', method: 'ui/notifications/initialized', params: {} });
|
|
127
|
-
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (msg.method === 'ui/notifications/tool-result') {
|
|
132
|
-
void mount(msg.params);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// Start the handshake immediately — nothing external blocks it, so the iframe is 'ready' at once.
|
|
137
|
-
send({
|
|
138
|
-
jsonrpc: '2.0',
|
|
139
|
-
id: 1,
|
|
140
|
-
method: 'ui/initialize',
|
|
141
|
-
params: {
|
|
142
|
-
protocolVersion: '2025-06-18',
|
|
143
|
-
appInfo: { name: 'Plitzi Widget', version: '1.0.0' },
|
|
144
|
-
appCapabilities: { availableDisplayModes: ['inline'] }
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
<\/script>
|
|
148
|
-
</body>
|
|
149
|
-
</html>`;
|
|
150
|
-
};
|
|
151
|
-
var appCache = /* @__PURE__ */ new Map();
|
|
152
|
-
var getAppHtml = (sdkBase, devMode) => {
|
|
153
|
-
const key = `${devMode ? "dev" : "prod"}|${sdkBase}`;
|
|
154
|
-
let html = appCache.get(key);
|
|
155
|
-
if (!html) {
|
|
156
|
-
html = appHtml(sdkBase, devMode);
|
|
157
|
-
appCache.set(key, html);
|
|
158
|
-
}
|
|
159
|
-
return html;
|
|
160
|
-
};
|
|
161
|
-
var registerRenderApp = (server, sdkBase, devMode) => {
|
|
162
|
-
const html = getAppHtml(sdkBase, devMode);
|
|
163
|
-
server.registerResource("plitzi-render-app", RENDER_APP_URI, {
|
|
164
|
-
description: "Interactive view that renders a plitzi_render widget with the Plitzi SDK (client-side).",
|
|
165
|
-
mimeType: RENDER_APP_MIME,
|
|
166
|
-
_meta: { ui: { csp: RENDER_APP_CSP } }
|
|
167
|
-
}, () => ({ contents: [{
|
|
168
|
-
uri: RENDER_APP_URI,
|
|
169
|
-
mimeType: RENDER_APP_MIME,
|
|
170
|
-
text: html
|
|
171
|
-
}] }));
|
|
172
|
-
};
|
|
173
|
-
//#endregion
|
|
174
|
-
export { RENDER_APP_URI, registerRenderApp };
|
package/dist/server.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {}
|
package/dist/server.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { createSSRServer } from "./core/server/ssrServer.js";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { readFileSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
//#region src/standalone/server.ts
|
|
6
|
-
var PORT = parseInt(process.env.SSR_PORT ?? "3002", 10);
|
|
7
|
-
var HOST = process.env.SSR_HOST ?? "0.0.0.0";
|
|
8
|
-
var spacePath = () => path.resolve(__dirname, "schemas/basic", "space.json");
|
|
9
|
-
var stylePath = () => path.resolve(__dirname, "schemas/basic", "style.json");
|
|
10
|
-
var readSchema = () => JSON.parse(readFileSync(spacePath(), "utf-8")).schema;
|
|
11
|
-
var readStyle = () => JSON.parse(readFileSync(stylePath(), "utf-8"));
|
|
12
|
-
var getOfflineData = () => {
|
|
13
|
-
const offlineData = {
|
|
14
|
-
schema: readSchema(),
|
|
15
|
-
style: readStyle()
|
|
16
|
-
};
|
|
17
|
-
console.warn("[SSR] getOfflineData: using stub adapter — returning spaceId=1");
|
|
18
|
-
return Promise.resolve(offlineData);
|
|
19
|
-
};
|
|
20
|
-
var getSpaceId = () => Promise.resolve(1);
|
|
21
|
-
var getSchema = () => Promise.resolve(readSchema());
|
|
22
|
-
var getStyle = () => Promise.resolve(readStyle());
|
|
23
|
-
var saveSchema = (_spaceId, _environment, schema) => {
|
|
24
|
-
writeFileSync(spacePath(), JSON.stringify({ schema }, null, 2));
|
|
25
|
-
return Promise.resolve();
|
|
26
|
-
};
|
|
27
|
-
var saveStyle = (_spaceId, _environment, style) => {
|
|
28
|
-
writeFileSync(stylePath(), JSON.stringify(style, null, 2));
|
|
29
|
-
return Promise.resolve();
|
|
30
|
-
};
|
|
31
|
-
var getSpaceDeployment = () => {
|
|
32
|
-
console.warn("[SSR] getSpaceDeployment: using stub adapter — returning spaceId=1");
|
|
33
|
-
return Promise.resolve({
|
|
34
|
-
spaceId: 1,
|
|
35
|
-
environment: "main",
|
|
36
|
-
revision: 0,
|
|
37
|
-
pluginNames: [
|
|
38
|
-
"serverInfo",
|
|
39
|
-
"clientInfo",
|
|
40
|
-
"sharedInfo"
|
|
41
|
-
]
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
var getRscData = async (_req, _spaceId, _environment, _revision, user, ids) => {
|
|
45
|
-
const all = {
|
|
46
|
-
"rsc-server": {
|
|
47
|
-
message: "Hello from the Node.js SSR server!",
|
|
48
|
-
renderedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
49
|
-
nodeVersion: process.version,
|
|
50
|
-
uptime: Math.round(process.uptime()),
|
|
51
|
-
authenticated: !!user,
|
|
52
|
-
userId: user?.id ?? null
|
|
53
|
-
},
|
|
54
|
-
"rsc-shared": {
|
|
55
|
-
serverTimestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
56
|
-
nodeVersion: process.version
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
return { serverData: ids?.length ? Object.fromEntries(ids.filter((id) => id in all).map((id) => [id, all[id]])) : all };
|
|
60
|
-
};
|
|
61
|
-
var __filename = fileURLToPath(import.meta.url);
|
|
62
|
-
var __dirname = path.dirname(__filename);
|
|
63
|
-
var saveOfflineData = (_spaceId, _environment, data) => {
|
|
64
|
-
writeFileSync(spacePath(), JSON.stringify({ schema: data.schema }, null, 2));
|
|
65
|
-
writeFileSync(stylePath(), JSON.stringify(data.style, null, 2));
|
|
66
|
-
return Promise.resolve();
|
|
67
|
-
};
|
|
68
|
-
var adapters = {
|
|
69
|
-
getOfflineData,
|
|
70
|
-
getSpaceDeployment,
|
|
71
|
-
getRscData,
|
|
72
|
-
saveOfflineData,
|
|
73
|
-
getSpaceId,
|
|
74
|
-
getSchema,
|
|
75
|
-
getStyle,
|
|
76
|
-
saveSchema,
|
|
77
|
-
saveStyle
|
|
78
|
-
};
|
|
79
|
-
createSSRServer({
|
|
80
|
-
port: PORT,
|
|
81
|
-
host: HOST,
|
|
82
|
-
frameOptions: "SAMEORIGIN",
|
|
83
|
-
devMode: false,
|
|
84
|
-
static: { "/sdk-assets": path.resolve(process.cwd(), "../sdk/dist") },
|
|
85
|
-
httpVersion: 1,
|
|
86
|
-
mcpAi: { enabled: true },
|
|
87
|
-
plugins: {
|
|
88
|
-
serverInfo: {
|
|
89
|
-
js: path.resolve(__dirname, "plugins/ServerInfo.tsx"),
|
|
90
|
-
action: "compile",
|
|
91
|
-
props: { var1: "value1" }
|
|
92
|
-
},
|
|
93
|
-
clientInfo: {
|
|
94
|
-
js: path.resolve(__dirname, "plugins/ClientInfo.tsx"),
|
|
95
|
-
action: "compile",
|
|
96
|
-
props: { var2: "value2" }
|
|
97
|
-
},
|
|
98
|
-
sharedInfo: {
|
|
99
|
-
js: path.resolve(__dirname, "plugins/SharedInfo.tsx"),
|
|
100
|
-
action: "compile",
|
|
101
|
-
props: { var3: "value3" }
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
adapters
|
|
105
|
-
}).listen(PORT, HOST);
|
|
106
|
-
//#endregion
|
|
107
|
-
export {};
|