@plitzi/sdk-server 0.32.9 → 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.
Files changed (70) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/core/services/mcp.js +8 -6
  3. package/dist/mcp.d.ts +2 -0
  4. package/dist/mcp.js +6 -0
  5. package/dist/modules/mcp/apps/example/view.tsx +70 -0
  6. package/dist/modules/mcp/apps/index.js +12 -0
  7. package/dist/modules/mcp/apps/render/index.js +16 -0
  8. package/dist/modules/mcp/apps/render/view.tsx +108 -0
  9. package/dist/modules/mcp/apps/shared/bundle.js +22 -0
  10. package/dist/modules/mcp/apps/shared/page.js +23 -0
  11. package/dist/modules/mcp/apps/shared/registerApp.js +27 -0
  12. package/dist/modules/mcp/apps/shared/resolve.js +5 -0
  13. package/dist/modules/mcp/apps/shared/shell.ejs +37 -0
  14. package/dist/modules/mcp/apps/shared/zodEnglishOnly.js +23 -0
  15. package/dist/modules/mcp/handler.js +3 -6
  16. package/dist/modules/mcp/resources/register.js +1 -1
  17. package/dist/modules/mcp/server.js +21 -12
  18. package/dist/modules/mcp/tools/apply/index.js +1 -1
  19. package/dist/modules/mcp/tools/render.js +3 -3
  20. package/dist/modules/ssr/registerExternalPlugins.js +1 -1
  21. package/dist/modules/ssr/template.js +1 -1
  22. package/dist/plugins/compile.js +1 -1
  23. package/dist/plugins/copy.js +1 -1
  24. package/dist/plugins/manager.js +1 -1
  25. package/dist/src/core/requestParser.d.ts +3 -0
  26. package/dist/src/index.d.ts +1 -1
  27. package/dist/src/mcp.d.ts +13 -0
  28. package/dist/src/modules/mcp/apps/apps.test.d.ts +1 -0
  29. package/dist/src/modules/mcp/apps/example/index.d.ts +8 -0
  30. package/dist/src/modules/mcp/apps/example/view.d.ts +1 -0
  31. package/dist/src/modules/mcp/apps/index.d.ts +8 -0
  32. package/dist/src/modules/mcp/apps/render/index.d.ts +3 -0
  33. package/dist/src/modules/mcp/apps/render/view.d.ts +1 -0
  34. package/dist/src/modules/mcp/apps/shared/bundle.d.ts +1 -0
  35. package/dist/src/modules/mcp/apps/shared/index.d.ts +2 -0
  36. package/dist/src/modules/mcp/apps/shared/page.d.ts +2 -0
  37. package/dist/src/modules/mcp/apps/shared/registerApp.d.ts +5 -0
  38. package/dist/src/modules/mcp/apps/shared/resolve.d.ts +1 -0
  39. package/dist/src/modules/mcp/apps/shared/zodEnglishOnly.d.ts +4 -0
  40. package/dist/src/modules/mcp/e2e/connector.test.d.ts +1 -0
  41. package/dist/src/modules/mcp/e2e/host.test.d.ts +1 -0
  42. package/dist/src/modules/mcp/e2e/index.d.ts +6 -0
  43. package/dist/src/modules/mcp/e2e/mcpEndpoint.d.ts +20 -0
  44. package/dist/src/modules/mcp/e2e/postMessageChannel.d.ts +22 -0
  45. package/dist/src/modules/mcp/e2e/renderingHost.d.ts +14 -0
  46. package/dist/src/modules/mcp/handler.d.ts +9 -5
  47. package/dist/src/modules/mcp/index.d.ts +1 -0
  48. package/dist/src/modules/mcp/resources/register.d.ts +1 -1
  49. package/dist/src/modules/mcp/resources/renderGuide.d.ts +1 -1
  50. package/dist/src/modules/mcp/server.d.ts +2 -10
  51. package/dist/src/modules/mcp/tools/apply/index.d.ts +3 -3
  52. package/dist/src/modules/mcp/tools/operations/index.d.ts +6 -6
  53. package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +1 -1
  54. package/dist/src/modules/mcp/tools/operations/schema/settings/patchSettings.d.ts +1 -1
  55. package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +2 -2
  56. package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +1 -1
  57. package/dist/src/modules/mcp/tools/operations/style/variables/deleteStyleVariable.d.ts +1 -1
  58. package/dist/src/modules/mcp/tools/operations/style/variables/upsertStyleVariable.d.ts +1 -1
  59. package/dist/src/modules/mcp/tools/preview.d.ts +3 -3
  60. package/dist/src/modules/mcp/tools/render.d.ts +3 -3
  61. package/dist/src/modules/mcp/tools/screenshot.d.ts +3 -3
  62. package/dist/src/modules/mcp/tools/shared/tool.d.ts +4 -7
  63. package/dist/src/modules/mcp/tools/validate.d.ts +3 -3
  64. package/dist/src/modules/mcp/types/appTypes.d.ts +13 -0
  65. package/dist/src/modules/mcp/types/index.d.ts +1 -0
  66. package/package.json +13 -4
  67. package/dist/modules/mcp/resources/renderApp.js +0 -182
  68. package/dist/server.d.ts +0 -1
  69. package/dist/server.js +0 -107
  70. package/dist/src/modules/mcp/resources/renderApp.d.ts +0 -3
@@ -1,182 +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 RENDER_APP_META = {
13
- ui: { csp: RENDER_APP_CSP },
14
- "openai/widgetCSP": {
15
- resource_domains: RENDER_APP_CSP.resourceDomains,
16
- connect_domains: RENDER_APP_CSP.connectDomains
17
- }
18
- };
19
- var appHtml = (sdkBase, devMode) => {
20
- const js = `${sdkBase}/sdk-assets/plitzi-sdk.js`;
21
- const vendor = `${sdkBase}/sdk-assets/${devMode ? "plitzi-sdk-dev-vendor.js" : "plitzi-sdk-vendor.js"}`;
22
- return `<!doctype html>
23
- <html lang="en">
24
- <head>
25
- <meta charset="utf-8" />
26
- <meta name="viewport" content="width=device-width, initial-scale=1" />
27
- <title>Plitzi widget</title>
28
- <link rel="modulepreload" href="${vendor}" crossorigin />
29
- <script type="importmap">
30
- {
31
- "imports": {
32
- "react": "${vendor}",
33
- "react-dom": "${vendor}",
34
- "react-dom/client": "${vendor}",
35
- "react/jsx-runtime": "${vendor}",
36
- "react/compiler-runtime": "${vendor}",
37
- "@plitzi/plitzi-sdk": "${js}"
38
- }
39
- }
40
- <\/script>
41
- <link href="${`${sdkBase}/sdk-assets/plitzi-sdk.css`}" rel="stylesheet" />
42
- <style>
43
- html,
44
- body {
45
- margin: 0;
46
- }
47
- #plitzi:empty::after {
48
- content: 'Rendering…';
49
- display: block;
50
- padding: 16px;
51
- font: 14px system-ui, sans-serif;
52
- color: #64748b;
53
- }
54
- </style>
55
- </head>
56
- <body>
57
- <div id="plitzi" class="plitzi-root-container"></div>
58
- <script type="module">
59
- const send = msg => window.parent.postMessage(msg, '*');
60
- const root = document.getElementById('plitzi');
61
- let mounted = false;
62
-
63
- // Replace the 'Rendering…' placeholder with an explicit failure panel — otherwise a tool that returns
64
- // { rendered:false } (no offlineData) or an SDK that fails to load would leave the iframe stuck forever.
65
- const showError = (title, details) => {
66
- mounted = true;
67
- root.textContent = '';
68
- const box = document.createElement('div');
69
- box.setAttribute('style', 'padding:16px;font:13px/1.5 system-ui,sans-serif;color:#b91c1c');
70
- const h = document.createElement('strong');
71
- h.textContent = title;
72
- box.appendChild(h);
73
- if (details) {
74
- const pre = document.createElement('pre');
75
- pre.setAttribute('style', 'margin:8px 0 0;white-space:pre-wrap;color:#7f1d1d;font-size:12px');
76
- pre.textContent = details;
77
- box.appendChild(pre);
78
- }
79
-
80
- root.appendChild(box);
81
- };
82
-
83
- // The failed-render text is the tool's JSON summary ({ rendered:false, errors:[{path,message,hint}] }).
84
- const errorText = params => {
85
- const item = Array.isArray(params && params.content) ? params.content.find(c => c.type === 'text') : undefined;
86
- if (!item) {
87
- return '';
88
- }
89
-
90
- try {
91
- const parsed = JSON.parse(item.text);
92
- if (Array.isArray(parsed.errors)) {
93
- return parsed.errors
94
- .map(e => '• ' + (e.path ? e.path + ': ' : '') + e.message + (e.hint ? ' — ' + e.hint : ''))
95
- .join('\\n');
96
- }
97
-
98
- return item.text;
99
- } catch {
100
- return item.text;
101
- }
102
- };
103
-
104
- const mount = async params => {
105
- if (mounted) {
106
- return;
107
- }
108
-
109
- const offlineData = params && params.structuredContent && params.structuredContent.offlineData;
110
- if (!offlineData) {
111
- showError('Render failed', errorText(params) || 'The tool returned no widget data.');
112
-
113
- return;
114
- }
115
-
116
- mounted = true;
117
- try {
118
- const { render } = await import('@plitzi/plitzi-sdk');
119
- render('plitzi', { offlineData, offlineMode: true, environment: 'main', renderMode: 'raw' }, {}, false, false);
120
- } catch (err) {
121
- showError('SDK failed to load', String((err && err.message) || err));
122
- }
123
- };
124
-
125
- window.addEventListener('message', event => {
126
- const msg = event.data;
127
- if (!msg || msg.jsonrpc !== '2.0') {
128
- return;
129
- }
130
-
131
- // Reply to the initialize result: the host withholds tool data until it gets our 'initialized' notification.
132
- if (msg.id === 1 && 'result' in msg) {
133
- send({ jsonrpc: '2.0', method: 'ui/notifications/initialized', params: {} });
134
-
135
- return;
136
- }
137
-
138
- if (msg.method === 'ui/notifications/tool-result') {
139
- void mount(msg.params);
140
- }
141
- });
142
-
143
- // Start the handshake immediately — nothing external blocks it, so the iframe is 'ready' at once.
144
- send({
145
- jsonrpc: '2.0',
146
- id: 1,
147
- method: 'ui/initialize',
148
- params: {
149
- protocolVersion: '2025-06-18',
150
- appInfo: { name: 'Plitzi Widget', version: '1.0.0' },
151
- appCapabilities: { availableDisplayModes: ['inline'] }
152
- }
153
- });
154
- <\/script>
155
- </body>
156
- </html>`;
157
- };
158
- var appCache = /* @__PURE__ */ new Map();
159
- var getAppHtml = (sdkBase, devMode) => {
160
- const key = `${devMode ? "dev" : "prod"}|${sdkBase}`;
161
- let html = appCache.get(key);
162
- if (!html) {
163
- html = appHtml(sdkBase, devMode);
164
- appCache.set(key, html);
165
- }
166
- return html;
167
- };
168
- var registerRenderApp = (server, sdkBase, devMode) => {
169
- const html = getAppHtml(sdkBase, devMode);
170
- server.registerResource("plitzi-render-app", RENDER_APP_URI, {
171
- description: "Interactive view that renders a plitzi_render widget with the Plitzi SDK (client-side).",
172
- mimeType: RENDER_APP_MIME,
173
- _meta: RENDER_APP_META
174
- }, () => ({ contents: [{
175
- uri: RENDER_APP_URI,
176
- mimeType: RENDER_APP_MIME,
177
- text: html,
178
- _meta: RENDER_APP_META
179
- }] }));
180
- };
181
- //#endregion
182
- 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 {};
@@ -1,3 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
2
- export declare const RENDER_APP_URI = "ui://plitzi/render.html";
3
- export declare const registerRenderApp: (server: McpServer, sdkBase: string, devMode: boolean) => void;