@plitzi/sdk-server 0.32.6 → 0.32.7

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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # @plitzi/sdk-server
2
2
 
3
+ ## 0.32.7
4
+
5
+ ### Patch Changes
6
+
7
+ - v0.32.7
8
+ - Updated dependencies
9
+ - @plitzi/plitzi-sdk@0.32.7
10
+ - @plitzi/sdk-schema@0.32.7
11
+ - @plitzi/sdk-shared@0.32.7
12
+
3
13
  ## 0.32.6
4
14
 
5
15
  ### Patch Changes
@@ -48,6 +48,7 @@ var toolResponseFromResult = (result) => {
48
48
  });
49
49
  return {
50
50
  content,
51
+ data: result.structuredContent,
51
52
  isError: result.isError ? true : void 0
52
53
  };
53
54
  };
@@ -25,23 +25,41 @@ var serveMcp = async (raw, res, server) => {
25
25
  res.end();
26
26
  return;
27
27
  }
28
+ if (raw.url?.startsWith("/.well-known/")) {
29
+ res.writeHead(404);
30
+ res.end();
31
+ return;
32
+ }
33
+ if (raw.method !== "POST") {
34
+ res.writeHead(405, {
35
+ "Content-Type": "application/json",
36
+ Allow: "POST, OPTIONS"
37
+ });
38
+ res.end(JSON.stringify({
39
+ jsonrpc: "2.0",
40
+ error: {
41
+ code: -32e3,
42
+ message: "Method not allowed; this MCP endpoint accepts JSON-RPC over POST only."
43
+ },
44
+ id: null
45
+ }));
46
+ return;
47
+ }
28
48
  const transport = new StreamableHTTPServerTransport({
29
49
  sessionIdGenerator: void 0,
30
50
  enableJsonResponse: true
31
51
  });
32
52
  await server.connect(transport);
33
53
  try {
34
- if (raw.method === "POST") {
35
- let body = raw.body;
36
- if (body === void 0) try {
37
- body = await readMcpBody(raw);
38
- } catch {
39
- res.writeHead(400, { "Content-Type": "application/json" });
40
- res.end(JSON.stringify({ error: "Invalid JSON body" }));
41
- return;
42
- }
43
- await transport.handleRequest(raw, res, body);
44
- } else await transport.handleRequest(raw, res);
54
+ let body = raw.body;
55
+ if (body === void 0) try {
56
+ body = await readMcpBody(raw);
57
+ } catch {
58
+ res.writeHead(400, { "Content-Type": "application/json" });
59
+ res.end(JSON.stringify({ error: "Invalid JSON body" }));
60
+ return;
61
+ }
62
+ await transport.handleRequest(raw, res, body);
45
63
  } finally {
46
64
  await transport.close();
47
65
  }
@@ -4,6 +4,32 @@ var cloneSpace = (space) => ({
4
4
  style: structuredClone(space.style),
5
5
  ...space.catalog ? { catalog: space.catalog } : {}
6
6
  });
7
+ var emptySpace = () => ({
8
+ schema: {
9
+ flat: {},
10
+ definition: {
11
+ name: "",
12
+ permanentUrl: ""
13
+ },
14
+ variables: [],
15
+ settings: { customCss: "" },
16
+ pages: [],
17
+ pageFolders: []
18
+ },
19
+ style: {
20
+ platform: {
21
+ desktop: {},
22
+ tablet: {},
23
+ mobile: {}
24
+ },
25
+ theme: {
26
+ default: "system",
27
+ schemes: ["light", "dark"]
28
+ },
29
+ variables: {},
30
+ cache: ""
31
+ }
32
+ });
7
33
  var slugify = (value) => value.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "";
8
34
  /** A value when it is a string, otherwise undefined — for the many attributes typed as `unknown` that are strings
9
35
  * in practice (name, slug, subType, dom id…). */
@@ -259,4 +285,4 @@ var generateObjectId = () => {
259
285
  return `${Math.floor(Date.now() / 1e3).toString(16).padStart(8, "0")}${Array.from({ length: 16 }, () => Math.floor(Math.random() * 16).toString(16)).join("")}`;
260
286
  };
261
287
  //#endregion
262
- export { cloneSpace, descendantCount, descendantIds, elementById, elementRefOf, emptySpaceMessage, findElementByRef, findFolderByRef, findPageByRef, folderAncestorIds, generateObjectId, getPageElements, indexAddElement, indexAddPage, indexInvalidateDetails, indexReRefElement, indexReRefPage, indexRemoveElements, indexRemovePage, isPageElement, nameOf, orderedChildren, pageFoldersOf, pageRefOf, pageRefOfElement, resolveRef, routeParamNames, slugRouteParams, slugify, sortFolders, spaceIndex, strOr, unauthorizedSpaceMessage };
288
+ export { cloneSpace, descendantCount, descendantIds, elementById, elementRefOf, emptySpace, emptySpaceMessage, findElementByRef, findFolderByRef, findPageByRef, folderAncestorIds, generateObjectId, getPageElements, indexAddElement, indexAddPage, indexInvalidateDetails, indexReRefElement, indexReRefPage, indexRemoveElements, indexRemovePage, isPageElement, nameOf, orderedChildren, pageFoldersOf, pageRefOf, pageRefOfElement, resolveRef, routeParamNames, slugRouteParams, slugify, sortFolders, spaceIndex, strOr, unauthorizedSpaceMessage };
@@ -1,4 +1,4 @@
1
- import { emptySpaceMessage, unauthorizedSpaceMessage } from "./helpers/space.js";
1
+ import { emptySpace, emptySpaceMessage, unauthorizedSpaceMessage } from "./helpers/space.js";
2
2
  import { serverInstructions } from "./helpers/guide.js";
3
3
  import { createMcpLog } from "./helpers/log.js";
4
4
  import { registerResources } from "./resources/register.js";
@@ -41,7 +41,7 @@ var createMcpServer = ({ adapters, getSpaceId, preview, screenshot, logger }) =>
41
41
  const getSpace = () => spacePromise ??= loadSpace();
42
42
  const server = new McpServer({
43
43
  name: "plitzi-mcp",
44
- version: "0.32.6"
44
+ version: "0.32.7"
45
45
  }, { instructions: serverInstructions });
46
46
  registerResources(server, getSpace, MCP_ENV, log);
47
47
  const toolContext = async () => ({
@@ -52,6 +52,13 @@ var createMcpServer = ({ adapters, getSpaceId, preview, screenshot, logger }) =>
52
52
  preview,
53
53
  screenshot
54
54
  });
55
+ const spacelessContext = () => ({
56
+ space: emptySpace(),
57
+ env: MCP_ENV,
58
+ persisters,
59
+ preview,
60
+ screenshot
61
+ });
55
62
  for (const tool of tools) {
56
63
  if (tool.requires === "screenshot" && !screenshot) continue;
57
64
  server.registerTool(tool.name, {
@@ -61,7 +68,7 @@ var createMcpServer = ({ adapters, getSpaceId, preview, screenshot, logger }) =>
61
68
  }, async (args) => {
62
69
  const start = performance.now();
63
70
  try {
64
- const result = await tool.execute(args, await toolContext());
71
+ const result = await tool.execute(args, tool.spaceless ? spacelessContext() : await toolContext());
65
72
  log.toolCall(tool.name, args, performance.now() - start);
66
73
  return isCallToolResult(result) ? result : asText(result);
67
74
  } catch (error) {
@@ -4,6 +4,7 @@ import { validateOperations } from "./shared/validator/index.js";
4
4
  import { apply, applyShape, applyTool } from "./apply/index.js";
5
5
  import { previewTool } from "./preview.js";
6
6
  import { read, readShape, readTool } from "./read.js";
7
+ import { renderTool } from "./render.js";
7
8
  import { screenshotTool } from "./screenshot.js";
8
9
  import { search, searchShape, searchTool } from "./search.js";
9
10
  import { validate, validateShape, validateTool } from "./validate.js";
@@ -15,6 +16,7 @@ var tools = [
15
16
  validateTool,
16
17
  searchTool,
17
18
  readTool,
19
+ renderTool,
18
20
  previewTool,
19
21
  screenshotTool
20
22
  ];
@@ -0,0 +1,114 @@
1
+ import { emptySpace } from "../helpers/space.js";
2
+ import { operations } from "./operations/index.js";
3
+ import { applyOperations } from "./apply/dispatch.js";
4
+ import { defineTool } from "./shared/tool.js";
5
+ import { validateOperations } from "./shared/validator/index.js";
6
+ import { auditResources } from "./shared/validator/audit.js";
7
+ import { validateSchema } from "@plitzi/sdk-schema";
8
+ import { generateCache } from "@plitzi/sdk-style";
9
+ //#region src/modules/mcp/tools/render.ts
10
+ var HOST_PAGE_REF = "render";
11
+ var seedSpace = () => {
12
+ const space = emptySpace();
13
+ space.schema.definition.name = "Widget";
14
+ space.schema.flat[HOST_PAGE_REF] = {
15
+ id: HOST_PAGE_REF,
16
+ idRef: HOST_PAGE_REF,
17
+ attributes: {
18
+ slug: "",
19
+ name: "Render",
20
+ default: true
21
+ },
22
+ definition: {
23
+ rootId: HOST_PAGE_REF,
24
+ label: "Page",
25
+ type: "page",
26
+ items: [],
27
+ styleSelectors: { base: "" }
28
+ }
29
+ };
30
+ space.schema.pages = [HOST_PAGE_REF];
31
+ return space;
32
+ };
33
+ var noWarnings = (warnings) => warnings.length > 0 ? warnings : void 0;
34
+ var renderShape = { operations };
35
+ var render = (input) => {
36
+ const space = seedSpace();
37
+ const validation = validateOperations(space, input.operations);
38
+ if (!validation.valid) return {
39
+ rendered: false,
40
+ errors: validation.errors,
41
+ warnings: noWarnings(validation.warnings)
42
+ };
43
+ const outcome = applyOperations(space, "main", input.operations);
44
+ if (outcome.errors.length > 0) return {
45
+ rendered: false,
46
+ errors: outcome.errors,
47
+ warnings: noWarnings(validation.warnings)
48
+ };
49
+ const integrity = validateSchema(space.schema);
50
+ if (!integrity.valid) return {
51
+ rendered: false,
52
+ errors: integrity.errors.map((error) => ({
53
+ path: error.elementId ? `schema.${error.elementId}` : "schema",
54
+ message: error.message,
55
+ hint: "The authored widget is structurally inconsistent (broken parent/child link or a cycle)."
56
+ })),
57
+ warnings: noWarnings(validation.warnings)
58
+ };
59
+ const audit = auditResources(space, input.operations);
60
+ const warnings = [...validation.warnings, ...audit.warnings];
61
+ if (audit.errors.length > 0) return {
62
+ rendered: false,
63
+ errors: audit.errors,
64
+ warnings: noWarnings(warnings)
65
+ };
66
+ space.style.cache = generateCache(space.style);
67
+ return {
68
+ rendered: true,
69
+ rootRef: HOST_PAGE_REF,
70
+ elementCount: Object.keys(space.schema.flat).length - 1,
71
+ offlineData: {
72
+ schema: space.schema,
73
+ style: space.style
74
+ },
75
+ warnings: noWarnings(warnings)
76
+ };
77
+ };
78
+ var toRenderResult = (res) => {
79
+ if (!res.rendered) return { content: [{
80
+ type: "text",
81
+ text: JSON.stringify({
82
+ rendered: false,
83
+ errors: res.errors,
84
+ warnings: res.warnings
85
+ })
86
+ }] };
87
+ const summary = {
88
+ rendered: true,
89
+ rootRef: res.rootRef,
90
+ elementCount: res.elementCount,
91
+ warnings: res.warnings
92
+ };
93
+ return {
94
+ content: [{
95
+ type: "text",
96
+ text: JSON.stringify(summary)
97
+ }],
98
+ structuredContent: {
99
+ ...summary,
100
+ offlineData: res.offlineData
101
+ }
102
+ };
103
+ };
104
+ var renderTool = defineTool({
105
+ name: "plitzi_render",
106
+ title: "Render widget",
107
+ description: "Render a small self-contained UI widget the user can SEE, with the Plitzi SDK offline (no backend). Reach for it in two cases: (1) the user asks you to create/design/build/show a piece of UI (a card, hero, form, button, banner, pricing table…); (2) you are answering a content question and a visual layout communicates better than prose — render the ANSWER as a widget (a recipe as a card, a comparison as a table, steps as a checklist, a profile, a menu). Prefer showing it over a long text answer whenever the content is naturally visual. You author the widget as operations targeting the pre-seeded host page `pageRef: \"render\"` (same vocabulary as plitzi_apply: upsertElement, upsertDefinition, …). Returns a compact summary; the rendered widget is shown to the user. To edit an existing space page instead, use plitzi_preview.",
108
+ inputShape: renderShape,
109
+ access: "read",
110
+ spaceless: true,
111
+ run: (input) => toRenderResult(render(input))
112
+ });
113
+ //#endregion
114
+ export { render, renderShape, renderTool };
@@ -20,6 +20,7 @@ var defineTool = (spec) => ({
20
20
  inputShape: spec.inputShape,
21
21
  access: spec.access,
22
22
  requires: spec.requires,
23
+ spaceless: spec.spaceless,
23
24
  execute: (args, ctx) => spec.run(z.object(spec.inputShape).parse(args), ctx)
24
25
  });
25
26
  //#endregion
@@ -9,6 +9,7 @@ export interface Space {
9
9
  catalog?: ComponentCatalog;
10
10
  }
11
11
  export declare const cloneSpace: (space: Space) => Space;
12
+ export declare const emptySpace: () => Space;
12
13
  export declare const slugify: (value: string) => string;
13
14
  /** A value when it is a string, otherwise undefined — for the many attributes typed as `unknown` that are strings
14
15
  * in practice (name, slug, subType, dom id…). */
@@ -4,6 +4,7 @@ export { validate, validateShape } from './validate';
4
4
  export { search, searchShape } from './search';
5
5
  export { read, readShape } from './read';
6
6
  export { previewShape } from './preview';
7
+ export { render, renderShape } from './render';
7
8
  export { screenshotShape } from './screenshot';
8
9
  export { applyOperations } from './apply/dispatch';
9
10
  export { validateOperations } from './shared/validator';
@@ -0,0 +1,434 @@
1
+ import { Operation } from './operations';
2
+ import { OfflineDataRaw } from '@plitzi/sdk-shared';
3
+ export declare const renderShape: {
4
+ operations: import('zod').ZodArray<import('zod').ZodDiscriminatedUnion<[import('zod').ZodObject<{
5
+ type: import('zod').ZodLiteral<"upsertElement">;
6
+ pageRef: import('zod').ZodString;
7
+ element: import('zod').ZodType<import('./operations').ElementInput, unknown, import('zod/v4/core').$ZodTypeInternals<import('./operations').ElementInput, unknown>>;
8
+ parentRef: import('zod').ZodOptional<import('zod').ZodString>;
9
+ position: import('zod').ZodOptional<import('zod').ZodEnum<{
10
+ inside: "inside";
11
+ before: "before";
12
+ after: "after";
13
+ }>>;
14
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
15
+ type: import('zod').ZodLiteral<"patchElement">;
16
+ pageRef: import('zod').ZodString;
17
+ ref: import('zod').ZodString;
18
+ idRef: import('zod').ZodOptional<import('zod').ZodString>;
19
+ label: import('zod').ZodOptional<import('zod').ZodString>;
20
+ subType: import('zod').ZodOptional<import('zod').ZodString>;
21
+ props: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
22
+ style: import('zod').ZodOptional<import('zod').ZodObject<{
23
+ base: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodString>>;
24
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodArray<import('zod').ZodString>>>;
25
+ }, import('zod/v4/core').$strip>>;
26
+ initialState: import('zod').ZodOptional<import('zod').ZodObject<{
27
+ styleVariant: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodArray<import('zod').ZodString>]>>>>;
28
+ visibility: import('zod').ZodOptional<import('zod').ZodBoolean>;
29
+ }, import('zod/v4/core').$strip>>;
30
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
31
+ type: import('zod').ZodLiteral<"deleteElement">;
32
+ pageRef: import('zod').ZodString;
33
+ ref: import('zod').ZodString;
34
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
35
+ type: import('zod').ZodLiteral<"moveElement">;
36
+ pageRef: import('zod').ZodString;
37
+ ref: import('zod').ZodString;
38
+ toParentRef: import('zod').ZodString;
39
+ position: import('zod').ZodEnum<{
40
+ inside: "inside";
41
+ before: "before";
42
+ after: "after";
43
+ }>;
44
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
45
+ type: import('zod').ZodLiteral<"upsertPage">;
46
+ ref: import('zod').ZodString;
47
+ label: import('zod').ZodOptional<import('zod').ZodString>;
48
+ slug: import('zod').ZodOptional<import('zod').ZodString>;
49
+ folder: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
50
+ default: import('zod').ZodOptional<import('zod').ZodBoolean>;
51
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
52
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
53
+ type: import('zod').ZodLiteral<"deletePage">;
54
+ ref: import('zod').ZodString;
55
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
56
+ type: import('zod').ZodLiteral<"upsertFolder">;
57
+ ref: import('zod').ZodString;
58
+ name: import('zod').ZodOptional<import('zod').ZodString>;
59
+ slug: import('zod').ZodOptional<import('zod').ZodString>;
60
+ parentId: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
61
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
62
+ type: import('zod').ZodLiteral<"deleteFolder">;
63
+ ref: import('zod').ZodString;
64
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
65
+ type: import('zod').ZodLiteral<"upsertVariable">;
66
+ name: import('zod').ZodString;
67
+ variableType: import('zod').ZodString;
68
+ value: import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>;
69
+ category: import('zod').ZodOptional<import('zod').ZodString>;
70
+ subValues: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodObject<{
71
+ when: import('zod').ZodUnknown;
72
+ value: import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>;
73
+ }, import('zod/v4/core').$strip>>>;
74
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
75
+ type: import('zod').ZodLiteral<"deleteVariable">;
76
+ name: import('zod').ZodString;
77
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
78
+ type: import('zod').ZodLiteral<"upsertBinding">;
79
+ pageRef: import('zod').ZodString;
80
+ ref: import('zod').ZodString;
81
+ category: import('zod').ZodEnum<{
82
+ attributes: "attributes";
83
+ style: "style";
84
+ initialState: "initialState";
85
+ }>;
86
+ binding: import('zod').ZodObject<{
87
+ to: import('zod').ZodString;
88
+ source: import('zod').ZodString;
89
+ id: import('zod').ZodOptional<import('zod').ZodString>;
90
+ transformers: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodObject<{
91
+ action: import('zod').ZodString;
92
+ params: import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodString>;
93
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
94
+ }, import('zod/v4/core').$strip>>>;
95
+ when: import('zod').ZodOptional<import('zod').ZodType<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown, import('zod/v4/core').$ZodTypeInternals<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown>>>;
96
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
97
+ }, import('zod/v4/core').$strip>;
98
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
99
+ type: import('zod').ZodLiteral<"patchBinding">;
100
+ pageRef: import('zod').ZodString;
101
+ ref: import('zod').ZodString;
102
+ category: import('zod').ZodEnum<{
103
+ attributes: "attributes";
104
+ style: "style";
105
+ initialState: "initialState";
106
+ }>;
107
+ to: import('zod').ZodString;
108
+ id: import('zod').ZodOptional<import('zod').ZodString>;
109
+ source: import('zod').ZodOptional<import('zod').ZodString>;
110
+ transformers: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodObject<{
111
+ action: import('zod').ZodString;
112
+ params: import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodString>;
113
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
114
+ }, import('zod/v4/core').$strip>>>;
115
+ when: import('zod').ZodOptional<import('zod').ZodType<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown, import('zod/v4/core').$ZodTypeInternals<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown>>>;
116
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
117
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
118
+ type: import('zod').ZodLiteral<"deleteBinding">;
119
+ pageRef: import('zod').ZodString;
120
+ ref: import('zod').ZodString;
121
+ category: import('zod').ZodEnum<{
122
+ attributes: "attributes";
123
+ style: "style";
124
+ initialState: "initialState";
125
+ }>;
126
+ to: import('zod').ZodString;
127
+ id: import('zod').ZodOptional<import('zod').ZodString>;
128
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
129
+ type: import('zod').ZodLiteral<"upsertInteractionFlow">;
130
+ pageRef: import('zod').ZodString;
131
+ ref: import('zod').ZodString;
132
+ flowId: import('zod').ZodOptional<import('zod').ZodString>;
133
+ nodes: import('zod').ZodArray<import('zod').ZodObject<{
134
+ id: import('zod').ZodOptional<import('zod').ZodString>;
135
+ title: import('zod').ZodString;
136
+ nodeType: import('zod').ZodEnum<{
137
+ trigger: "trigger";
138
+ globalCallback: "globalCallback";
139
+ callback: "callback";
140
+ utility: "utility";
141
+ }>;
142
+ action: import('zod').ZodString;
143
+ params: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
144
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
145
+ when: import('zod').ZodOptional<import('zod').ZodType<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown, import('zod/v4/core').$ZodTypeInternals<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown>>>;
146
+ elementId: import('zod').ZodOptional<import('zod').ZodString>;
147
+ preview: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
148
+ }, import('zod/v4/core').$strip>>;
149
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
150
+ type: import('zod').ZodLiteral<"patchInteractionNode">;
151
+ pageRef: import('zod').ZodString;
152
+ ref: import('zod').ZodString;
153
+ nodeId: import('zod').ZodString;
154
+ title: import('zod').ZodOptional<import('zod').ZodString>;
155
+ action: import('zod').ZodOptional<import('zod').ZodString>;
156
+ params: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
157
+ enabled: import('zod').ZodOptional<import('zod').ZodBoolean>;
158
+ when: import('zod').ZodOptional<import('zod').ZodType<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown, import('zod/v4/core').$ZodTypeInternals<import('@plitzi/plitzi-ui/components/QueryBuilder').RuleGroup, unknown>>>;
159
+ elementId: import('zod').ZodOptional<import('zod').ZodString>;
160
+ preview: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
161
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
162
+ type: import('zod').ZodLiteral<"deleteInteraction">;
163
+ pageRef: import('zod').ZodString;
164
+ ref: import('zod').ZodString;
165
+ flowId: import('zod').ZodOptional<import('zod').ZodString>;
166
+ nodeId: import('zod').ZodOptional<import('zod').ZodString>;
167
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
168
+ type: import('zod').ZodLiteral<"patchSettings">;
169
+ customCss: import('zod').ZodOptional<import('zod').ZodString>;
170
+ keepState: import('zod').ZodOptional<import('zod').ZodBoolean>;
171
+ stateStorage: import('zod').ZodOptional<import('zod').ZodEnum<{
172
+ localStorage: "localStorage";
173
+ sessionStorage: "sessionStorage";
174
+ }>>;
175
+ userProvider: import('zod').ZodOptional<import('zod').ZodEnum<{
176
+ "": "";
177
+ custom: "custom";
178
+ basic: "basic";
179
+ auth0: "auth0";
180
+ }>>;
181
+ auth0Domain: import('zod').ZodOptional<import('zod').ZodString>;
182
+ auth0ClientId: import('zod').ZodOptional<import('zod').ZodString>;
183
+ tokenStorage: import('zod').ZodOptional<import('zod').ZodEnum<{
184
+ "": "";
185
+ localStorage: "localStorage";
186
+ sessionStorage: "sessionStorage";
187
+ }>>;
188
+ loginUrl: import('zod').ZodOptional<import('zod').ZodString>;
189
+ userUrl: import('zod').ZodOptional<import('zod').ZodString>;
190
+ refreshUrl: import('zod').ZodOptional<import('zod').ZodString>;
191
+ logoutUrl: import('zod').ZodOptional<import('zod').ZodString>;
192
+ detailsPath: import('zod').ZodOptional<import('zod').ZodString>;
193
+ tokenPath: import('zod').ZodOptional<import('zod').ZodString>;
194
+ expirationTimePath: import('zod').ZodOptional<import('zod').ZodString>;
195
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
196
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
197
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
198
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
199
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
200
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
201
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
202
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
203
+ }, import('zod/v4/core').$strip>>>;
204
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
205
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
206
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
207
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
208
+ }, import('zod/v4/core').$strip>>>;
209
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
210
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
211
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
212
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
213
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
214
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
215
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
216
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
217
+ }, import('zod/v4/core').$strip>>>;
218
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
219
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
220
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
221
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
222
+ }, import('zod/v4/core').$strip>>>;
223
+ }, import('zod/v4/core').$strip>>>;
224
+ type: import('zod').ZodLiteral<"upsertDefinition">;
225
+ ref: import('zod').ZodString;
226
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
227
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
228
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
229
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
230
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
231
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
232
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
233
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
234
+ }, import('zod/v4/core').$strip>>>;
235
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
236
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
237
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
238
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
239
+ }, import('zod/v4/core').$strip>>>;
240
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
241
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
242
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
243
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
244
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
245
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
246
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
247
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
248
+ }, import('zod/v4/core').$strip>>>;
249
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
250
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
251
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
252
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
253
+ }, import('zod/v4/core').$strip>>>;
254
+ }, import('zod/v4/core').$strip>>>;
255
+ type: import('zod').ZodLiteral<"patchDefinition">;
256
+ ref: import('zod').ZodString;
257
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
258
+ type: import('zod').ZodLiteral<"deleteDefinition">;
259
+ ref: import('zod').ZodString;
260
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
261
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
262
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
263
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
264
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
265
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
266
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
267
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
268
+ }, import('zod/v4/core').$strip>>>;
269
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
270
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
271
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
272
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
273
+ }, import('zod/v4/core').$strip>>>;
274
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
275
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
276
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
277
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
278
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
279
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
280
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
281
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
282
+ }, import('zod/v4/core').$strip>>>;
283
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
284
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
285
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
286
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
287
+ }, import('zod/v4/core').$strip>>>;
288
+ }, import('zod/v4/core').$strip>>>;
289
+ type: import('zod').ZodLiteral<"upsertGlobalStyle">;
290
+ componentType: import('zod').ZodString;
291
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
292
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
293
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
294
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
295
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
296
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
297
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
298
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
299
+ }, import('zod/v4/core').$strip>>>;
300
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
301
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
302
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
303
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
304
+ }, import('zod/v4/core').$strip>>>;
305
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
306
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
307
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
308
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
309
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
310
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
311
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
312
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
313
+ }, import('zod/v4/core').$strip>>>;
314
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
315
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
316
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
317
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
318
+ }, import('zod/v4/core').$strip>>>;
319
+ }, import('zod/v4/core').$strip>>>;
320
+ type: import('zod').ZodLiteral<"patchGlobalStyle">;
321
+ componentType: import('zod').ZodString;
322
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
323
+ type: import('zod').ZodLiteral<"deleteGlobalStyle">;
324
+ componentType: import('zod').ZodString;
325
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
326
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
327
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
328
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
329
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
330
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
331
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
332
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
333
+ }, import('zod/v4/core').$strip>>>;
334
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
335
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
336
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
337
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
338
+ }, import('zod/v4/core').$strip>>>;
339
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
340
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
341
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
342
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
343
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
344
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
345
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
346
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
347
+ }, import('zod/v4/core').$strip>>>;
348
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
349
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
350
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
351
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
352
+ }, import('zod/v4/core').$strip>>>;
353
+ }, import('zod/v4/core').$strip>>>;
354
+ type: import('zod').ZodLiteral<"upsertIdStyle">;
355
+ targetId: import('zod').ZodString;
356
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
357
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
358
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
359
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
360
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
361
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
362
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
363
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
364
+ }, import('zod/v4/core').$strip>>>;
365
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
366
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
367
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
368
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
369
+ }, import('zod/v4/core').$strip>>>;
370
+ slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
371
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
372
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
373
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
374
+ states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
375
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
376
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
377
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
378
+ }, import('zod/v4/core').$strip>>>;
379
+ variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
380
+ desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
381
+ tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
382
+ mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
383
+ }, import('zod/v4/core').$strip>>>;
384
+ }, import('zod/v4/core').$strip>>>;
385
+ type: import('zod').ZodLiteral<"patchIdStyle">;
386
+ targetId: import('zod').ZodString;
387
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
388
+ type: import('zod').ZodLiteral<"deleteIdStyle">;
389
+ targetId: import('zod').ZodString;
390
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
391
+ type: import('zod').ZodLiteral<"upsertStyleVariable">;
392
+ category: import('zod').ZodEnum<{
393
+ color: "color";
394
+ custom: "custom";
395
+ spacing: "spacing";
396
+ shadow: "shadow";
397
+ }>;
398
+ name: import('zod').ZodString;
399
+ value: import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodObject<{
400
+ light: import('zod').ZodOptional<import('zod').ZodString>;
401
+ dark: import('zod').ZodOptional<import('zod').ZodString>;
402
+ default: import('zod').ZodOptional<import('zod').ZodString>;
403
+ }, import('zod/v4/core').$strip>]>;
404
+ }, import('zod/v4/core').$strip>, import('zod').ZodObject<{
405
+ type: import('zod').ZodLiteral<"deleteStyleVariable">;
406
+ category: import('zod').ZodEnum<{
407
+ color: "color";
408
+ custom: "custom";
409
+ spacing: "spacing";
410
+ shadow: "shadow";
411
+ }>;
412
+ name: import('zod').ZodString;
413
+ }, import('zod/v4/core').$strip>], "type">>;
414
+ };
415
+ export type RenderInput = {
416
+ operations: Operation[];
417
+ };
418
+ export type RenderResponse = {
419
+ rendered: false;
420
+ errors: {
421
+ path: string;
422
+ message: string;
423
+ hint?: string;
424
+ }[];
425
+ warnings?: string[];
426
+ } | {
427
+ rendered: true;
428
+ rootRef: string;
429
+ elementCount: number;
430
+ offlineData: OfflineDataRaw;
431
+ warnings?: string[];
432
+ };
433
+ export declare const render: (input: RenderInput) => RenderResponse;
434
+ export declare const renderTool: import('.').ToolDef;
@@ -0,0 +1 @@
1
+ export {};
@@ -31,6 +31,9 @@ export interface ToolSpec<Shape extends ZodRawShape> {
31
31
  access: 'read' | 'write';
32
32
  /** A host capability this tool needs; hosts that did not wire it skip registering the tool. */
33
33
  requires?: ToolRequires;
34
+ /** The tool operates on no space (plitzi_render authors a throwaway one), so the host must NOT resolve a spaceId
35
+ * or load a space for it — that keeps it callable with no auth, on the public surface. */
36
+ spaceless?: boolean;
34
37
  run: (input: z.infer<ZodObject<Shape>>, ctx: ToolContext) => unknown;
35
38
  }
36
39
  /** What the registry holds and the hosts register from: the same metadata plus a type-erased `execute` that
@@ -42,6 +45,7 @@ export interface ToolDef {
42
45
  inputShape: ZodRawShape;
43
46
  access: 'read' | 'write';
44
47
  requires?: ToolRequires;
48
+ spaceless?: boolean;
45
49
  execute: (args: unknown, ctx: ToolContext) => unknown;
46
50
  }
47
51
  /** Author a tool: give it its metadata, its input shape and a typed `run`. The returned descriptor parses the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plitzi/sdk-server",
3
- "version": "0.32.6",
3
+ "version": "0.32.7",
4
4
  "license": "AGPL-3.0",
5
5
  "files": [
6
6
  "dist"
@@ -23,9 +23,9 @@
23
23
  "sideEffects": false,
24
24
  "dependencies": {
25
25
  "@modelcontextprotocol/sdk": "^1.29.0",
26
- "@plitzi/plitzi-sdk": "0.32.6",
27
- "@plitzi/sdk-schema": "0.32.6",
28
- "@plitzi/sdk-shared": "0.32.6",
26
+ "@plitzi/plitzi-sdk": "0.32.7",
27
+ "@plitzi/sdk-schema": "0.32.7",
28
+ "@plitzi/sdk-shared": "0.32.7",
29
29
  "ejs": "^6.0.1",
30
30
  "esbuild": "^0.28.1",
31
31
  "zod": "^4.4.3"