@plitzi/sdk-server 0.32.3 → 0.32.5

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 (416) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/adapters/jsonAdapters.js +6 -1
  3. package/dist/core/createServer.js +8 -44
  4. package/dist/core/health.js +15 -0
  5. package/dist/core/http/dispatcher.js +29 -0
  6. package/dist/core/http/securityHeaders.js +15 -0
  7. package/dist/core/http/stages/authRoutes.js +41 -0
  8. package/dist/core/http/stages/health.js +12 -0
  9. package/dist/core/http/stages/middlewares.js +16 -0
  10. package/dist/core/http/stages/pluginAssets.js +20 -0
  11. package/dist/core/http/stages/static.js +30 -0
  12. package/dist/core/server/baseServer.js +29 -0
  13. package/dist/core/server/mcpServer.js +29 -0
  14. package/dist/core/server/ssrServer.js +54 -0
  15. package/dist/core/services/mcp.js +22 -0
  16. package/dist/core/services/preview.js +37 -0
  17. package/dist/core/services/registry.js +30 -0
  18. package/dist/core/services/resolve.js +12 -0
  19. package/dist/core/services/rsc.js +11 -0
  20. package/dist/core/services/ssr.js +13 -0
  21. package/dist/core/transports.js +9 -9
  22. package/dist/helpers/buildServerInfo.js +11 -11
  23. package/dist/index.js +19 -6
  24. package/dist/modules/ai/AIEngine.js +4 -4
  25. package/dist/modules/ai/toolkit.js +58 -0
  26. package/dist/modules/mcp/constants.js +4 -0
  27. package/dist/modules/mcp/handler.js +15 -21
  28. package/dist/modules/mcp/helpers/computeVersion.js +16 -0
  29. package/dist/modules/mcp/helpers/guide.js +130 -0
  30. package/dist/modules/mcp/helpers/opResult.js +18 -0
  31. package/dist/modules/mcp/helpers/space.js +137 -0
  32. package/dist/modules/mcp/previewClient.js +31 -0
  33. package/dist/modules/mcp/resources/canonical.js +45 -0
  34. package/dist/modules/mcp/resources/core.js +14 -0
  35. package/dist/modules/mcp/resources/envelope.js +14 -0
  36. package/dist/modules/mcp/resources/primer.js +25 -0
  37. package/dist/modules/mcp/resources/register.js +142 -0
  38. package/dist/modules/mcp/resources/router.js +25 -0
  39. package/dist/modules/mcp/resources/schema.js +33 -0
  40. package/dist/modules/mcp/resources/style.js +27 -0
  41. package/dist/modules/mcp/screenshotClient.js +47 -0
  42. package/dist/modules/mcp/server.js +52 -20
  43. package/dist/modules/mcp/tools/apply/dispatch.js +83 -0
  44. package/dist/modules/mcp/tools/apply/index.js +121 -0
  45. package/dist/modules/mcp/tools/apply/writeResult.js +36 -0
  46. package/dist/modules/mcp/tools/index.js +20 -148
  47. package/dist/modules/mcp/tools/operations/index.js +30 -0
  48. package/dist/modules/mcp/tools/operations/schema/deleteElement.js +25 -0
  49. package/dist/modules/mcp/tools/operations/schema/deleteFolder.js +30 -0
  50. package/dist/modules/mcp/tools/operations/schema/deletePage.js +22 -0
  51. package/dist/modules/mcp/tools/operations/schema/deleteVariable.js +18 -0
  52. package/dist/modules/mcp/tools/operations/schema/moveElement.js +39 -0
  53. package/dist/modules/mcp/tools/operations/schema/operations.js +25 -0
  54. package/dist/modules/mcp/tools/operations/schema/patchElement.js +46 -0
  55. package/dist/modules/mcp/tools/operations/schema/registry.js +55 -0
  56. package/dist/modules/mcp/tools/operations/schema/shared.js +27 -0
  57. package/dist/modules/mcp/tools/operations/schema/translator.js +148 -0
  58. package/dist/modules/mcp/tools/operations/schema/upsertElement.js +59 -0
  59. package/dist/modules/mcp/tools/operations/schema/upsertFolder.js +49 -0
  60. package/dist/modules/mcp/tools/operations/schema/upsertPage.js +64 -0
  61. package/dist/modules/mcp/tools/operations/schema/upsertVariable.js +42 -0
  62. package/dist/modules/mcp/tools/operations/schema/write.js +44 -0
  63. package/dist/modules/mcp/tools/operations/style/cssCatalog.js +132 -0
  64. package/dist/modules/mcp/tools/operations/style/deleteDefinition.js +20 -0
  65. package/dist/modules/mcp/tools/operations/style/deleteGlobalStyle.js +20 -0
  66. package/dist/modules/mcp/tools/operations/style/deleteStyleVariable.js +21 -0
  67. package/dist/modules/mcp/tools/operations/style/operations.js +21 -0
  68. package/dist/modules/mcp/tools/operations/style/patchDefinition.js +27 -0
  69. package/dist/modules/mcp/tools/operations/style/patchGlobalStyle.js +27 -0
  70. package/dist/modules/mcp/tools/operations/style/shared.js +59 -0
  71. package/dist/modules/mcp/tools/operations/style/translator.js +77 -0
  72. package/dist/modules/mcp/tools/operations/style/upsertDefinition.js +23 -0
  73. package/dist/modules/mcp/tools/operations/style/upsertGlobalStyle.js +23 -0
  74. package/dist/modules/mcp/tools/operations/style/upsertStyleVariable.js +22 -0
  75. package/dist/modules/mcp/tools/operations/style/write.js +100 -0
  76. package/dist/modules/mcp/tools/preview.js +37 -0
  77. package/dist/modules/mcp/tools/read.js +33 -0
  78. package/dist/modules/mcp/tools/screenshot.js +83 -0
  79. package/dist/modules/mcp/tools/search.js +108 -0
  80. package/dist/modules/mcp/tools/shared/tool.js +26 -0
  81. package/dist/modules/mcp/tools/shared/validator.js +262 -0
  82. package/dist/modules/mcp/tools/validate.js +19 -0
  83. package/dist/modules/ssr/buildBody.js +2 -2
  84. package/dist/modules/ssr/handler.js +6 -4
  85. package/dist/modules/ssr/prepareRender.js +5 -5
  86. package/dist/modules/ssr/preview.js +106 -0
  87. package/dist/modules/ssr/registerExternalPlugins.js +1 -1
  88. package/dist/modules/ssr/streamBody.js +3 -3
  89. package/dist/modules/ssr/template.js +1 -1
  90. package/dist/plugins/compile.js +1 -1
  91. package/dist/plugins/copy.js +1 -1
  92. package/dist/plugins/manager.js +1 -1
  93. package/dist/server.js +34 -9
  94. package/dist/src/core/createServer.d.ts +5 -1
  95. package/dist/src/core/health.d.ts +10 -0
  96. package/dist/src/core/http/dispatcher.d.ts +7 -0
  97. package/dist/src/core/http/securityHeaders.d.ts +2 -0
  98. package/dist/src/core/http/stages/authRoutes.d.ts +4 -0
  99. package/dist/src/core/http/stages/health.d.ts +2 -0
  100. package/dist/src/core/http/stages/middlewares.d.ts +2 -0
  101. package/dist/src/core/http/stages/pluginAssets.d.ts +2 -0
  102. package/dist/src/core/http/stages/static.d.ts +5 -0
  103. package/dist/src/core/http/types.d.ts +19 -0
  104. package/dist/src/core/server/baseServer.d.ts +9 -0
  105. package/dist/src/core/server/mcpServer.d.ts +2 -0
  106. package/dist/src/core/server/ssrServer.d.ts +2 -0
  107. package/dist/src/core/services/mcp.d.ts +3 -0
  108. package/dist/src/core/services/preview.d.ts +2 -0
  109. package/dist/src/core/services/registry.d.ts +4 -0
  110. package/dist/src/core/services/resolve.d.ts +3 -0
  111. package/dist/src/core/services/rsc.d.ts +2 -0
  112. package/dist/src/core/services/ssr.d.ts +3 -0
  113. package/dist/src/core/transports.d.ts +2 -2
  114. package/dist/src/index.d.ts +12 -3
  115. package/dist/src/modules/ai/index.d.ts +1 -0
  116. package/dist/src/modules/ai/toolkit.d.ts +17 -0
  117. package/dist/src/modules/mcp/constants.d.ts +1 -0
  118. package/dist/src/modules/mcp/handler.d.ts +6 -3
  119. package/dist/src/modules/mcp/helpers/computeVersion.d.ts +1 -0
  120. package/dist/src/modules/mcp/helpers/guide.d.ts +2 -0
  121. package/dist/src/modules/mcp/helpers/index.d.ts +4 -0
  122. package/dist/src/modules/mcp/helpers/opResult.d.ts +13 -0
  123. package/dist/src/modules/mcp/helpers/space.d.ts +49 -0
  124. package/dist/src/modules/mcp/index.d.ts +12 -5
  125. package/dist/src/modules/mcp/previewClient.d.ts +13 -0
  126. package/dist/src/modules/mcp/resources/canonical.d.ts +7 -0
  127. package/dist/src/modules/mcp/resources/core.d.ts +5 -0
  128. package/dist/src/modules/mcp/resources/envelope.d.ts +10 -0
  129. package/dist/src/modules/mcp/resources/index.d.ts +8 -10
  130. package/dist/src/modules/mcp/resources/primer.d.ts +6 -0
  131. package/dist/src/modules/mcp/resources/register.d.ts +6 -0
  132. package/dist/src/modules/mcp/resources/router.d.ts +6 -0
  133. package/dist/src/modules/mcp/resources/schema.d.ts +5 -0
  134. package/dist/src/modules/mcp/resources/style.d.ts +5 -0
  135. package/dist/src/modules/mcp/screenshotClient.d.ts +13 -0
  136. package/dist/src/modules/mcp/server.d.ts +18 -3
  137. package/dist/src/modules/mcp/tools/apply/dispatch.d.ts +6 -0
  138. package/dist/src/modules/mcp/tools/apply/index.d.ts +231 -0
  139. package/dist/src/modules/mcp/tools/apply/writeResult.d.ts +8 -0
  140. package/dist/src/modules/mcp/tools/index.d.ts +17 -6
  141. package/dist/src/modules/mcp/tools/operations/index.d.ts +449 -0
  142. package/dist/src/modules/mcp/tools/operations/schema/deleteElement.d.ts +10 -0
  143. package/dist/src/modules/mcp/tools/operations/schema/deleteFolder.d.ts +9 -0
  144. package/dist/src/modules/mcp/tools/operations/schema/deletePage.d.ts +9 -0
  145. package/dist/src/modules/mcp/tools/operations/schema/deleteVariable.d.ts +9 -0
  146. package/dist/src/modules/mcp/tools/operations/schema/index.d.ts +14 -0
  147. package/dist/src/modules/mcp/tools/operations/schema/moveElement.d.ts +16 -0
  148. package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +79 -0
  149. package/dist/src/modules/mcp/tools/operations/schema/patchElement.d.ts +17 -0
  150. package/dist/src/modules/mcp/tools/operations/schema/registry.d.ts +22 -0
  151. package/dist/src/modules/mcp/tools/operations/schema/shared.d.ts +24 -0
  152. package/dist/src/modules/mcp/tools/operations/schema/translator.d.ts +9 -0
  153. package/dist/src/modules/mcp/tools/operations/schema/upsertElement.d.ts +16 -0
  154. package/dist/src/modules/mcp/tools/operations/schema/upsertFolder.d.ts +12 -0
  155. package/dist/src/modules/mcp/tools/operations/schema/upsertPage.d.ts +13 -0
  156. package/dist/src/modules/mcp/tools/operations/schema/upsertVariable.d.ts +16 -0
  157. package/dist/src/modules/mcp/tools/operations/schema/write.d.ts +12 -0
  158. package/dist/src/modules/mcp/tools/operations/style/cssCatalog.d.ts +10 -0
  159. package/dist/src/modules/mcp/tools/operations/style/deleteDefinition.d.ts +9 -0
  160. package/dist/src/modules/mcp/tools/operations/style/deleteGlobalStyle.d.ts +9 -0
  161. package/dist/src/modules/mcp/tools/operations/style/deleteStyleVariable.d.ts +15 -0
  162. package/dist/src/modules/mcp/tools/operations/style/index.d.ts +12 -0
  163. package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +163 -0
  164. package/dist/src/modules/mcp/tools/operations/style/patchDefinition.d.ts +37 -0
  165. package/dist/src/modules/mcp/tools/operations/style/patchGlobalStyle.d.ts +37 -0
  166. package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +115 -0
  167. package/dist/src/modules/mcp/tools/operations/style/translator.d.ts +9 -0
  168. package/dist/src/modules/mcp/tools/operations/style/upsertDefinition.d.ts +37 -0
  169. package/dist/src/modules/mcp/tools/operations/style/upsertGlobalStyle.d.ts +37 -0
  170. package/dist/src/modules/mcp/tools/operations/style/upsertStyleVariable.d.ts +20 -0
  171. package/dist/src/modules/mcp/tools/operations/style/write.d.ts +17 -0
  172. package/dist/src/modules/mcp/tools/preview.d.ts +226 -0
  173. package/dist/src/modules/mcp/tools/read.d.ts +8 -0
  174. package/dist/src/modules/mcp/tools/screenshot.d.ts +231 -0
  175. package/dist/src/modules/mcp/tools/search.d.ts +15 -0
  176. package/dist/src/modules/mcp/tools/shared/tool.d.ts +50 -0
  177. package/dist/src/modules/mcp/tools/shared/validator.d.ts +4 -0
  178. package/dist/src/modules/mcp/tools/validate.d.ts +228 -0
  179. package/dist/src/modules/mcp/types/aiSchema.d.ts +126 -0
  180. package/dist/src/modules/mcp/types/index.d.ts +4 -0
  181. package/dist/src/modules/mcp/types/previewTypes.d.ts +25 -0
  182. package/dist/src/modules/mcp/types/screenshotTypes.d.ts +29 -0
  183. package/dist/src/modules/mcp/types/toolTypes.d.ts +138 -0
  184. package/dist/src/modules/ssr/buildBody.d.ts +2 -2
  185. package/dist/src/modules/ssr/prepareRender.d.ts +2 -2
  186. package/dist/src/modules/ssr/preview.d.ts +16 -0
  187. package/dist/src/modules/ssr/streamBody.d.ts +2 -2
  188. package/package.json +10 -10
  189. package/dist/_virtual/_rolldown/runtime.js +0 -13
  190. package/dist/core/requestHandler.js +0 -126
  191. package/dist/modules/mcp/helpers.js +0 -75
  192. package/dist/modules/mcp/resources/glossary/binding.js +0 -73
  193. package/dist/modules/mcp/resources/glossary/collection.js +0 -76
  194. package/dist/modules/mcp/resources/glossary/displayMode.js +0 -50
  195. package/dist/modules/mcp/resources/glossary/element.js +0 -68
  196. package/dist/modules/mcp/resources/glossary/environment.js +0 -48
  197. package/dist/modules/mcp/resources/glossary/interaction.js +0 -62
  198. package/dist/modules/mcp/resources/glossary/page.js +0 -70
  199. package/dist/modules/mcp/resources/glossary/plugin.js +0 -96
  200. package/dist/modules/mcp/resources/glossary/resource.js +0 -75
  201. package/dist/modules/mcp/resources/glossary/schema.js +0 -69
  202. package/dist/modules/mcp/resources/glossary/schemaVariable.js +0 -60
  203. package/dist/modules/mcp/resources/glossary/segment.js +0 -59
  204. package/dist/modules/mcp/resources/glossary/space.js +0 -73
  205. package/dist/modules/mcp/resources/glossary/style.js +0 -81
  206. package/dist/modules/mcp/resources/glossary/styleSelector.js +0 -77
  207. package/dist/modules/mcp/resources/glossary/styleVariable.js +0 -72
  208. package/dist/modules/mcp/resources/index.js +0 -71
  209. package/dist/modules/mcp/resources/workflows/data.js +0 -49
  210. package/dist/modules/mcp/resources/workflows/elements.js +0 -53
  211. package/dist/modules/mcp/resources/workflows/segments.js +0 -55
  212. package/dist/modules/mcp/resources/workflows/styles.js +0 -91
  213. package/dist/modules/mcp/tools/collections/createCollection.js +0 -25
  214. package/dist/modules/mcp/tools/collections/createCollectionRecord.js +0 -27
  215. package/dist/modules/mcp/tools/collections/deleteCollection.js +0 -16
  216. package/dist/modules/mcp/tools/collections/deleteCollectionRecord.js +0 -16
  217. package/dist/modules/mcp/tools/collections/getCollection.js +0 -21
  218. package/dist/modules/mcp/tools/collections/getCollectionRecord.js +0 -25
  219. package/dist/modules/mcp/tools/collections/getCollectionRecords.js +0 -29
  220. package/dist/modules/mcp/tools/collections/getCollections.js +0 -19
  221. package/dist/modules/mcp/tools/collections/updateCollection.js +0 -28
  222. package/dist/modules/mcp/tools/collections/updateCollectionRecord.js +0 -31
  223. package/dist/modules/mcp/tools/docs/listResources.js +0 -16
  224. package/dist/modules/mcp/tools/docs/readResource.js +0 -23
  225. package/dist/modules/mcp/tools/plugins/addPlugin.js +0 -24
  226. package/dist/modules/mcp/tools/plugins/listPlugins.js +0 -20
  227. package/dist/modules/mcp/tools/plugins/removePlugin.js +0 -16
  228. package/dist/modules/mcp/tools/plugins/updatePlugin.js +0 -23
  229. package/dist/modules/mcp/tools/resources/addResource.js +0 -33
  230. package/dist/modules/mcp/tools/resources/getResource.js +0 -29
  231. package/dist/modules/mcp/tools/resources/getResources.js +0 -27
  232. package/dist/modules/mcp/tools/resources/moveResource.js +0 -30
  233. package/dist/modules/mcp/tools/resources/removeResource.js +0 -19
  234. package/dist/modules/mcp/tools/segment/createSegment.js +0 -27
  235. package/dist/modules/mcp/tools/segment/deleteSegment.js +0 -16
  236. package/dist/modules/mcp/tools/segment/getSegment.js +0 -19
  237. package/dist/modules/mcp/tools/segment/getSegments.js +0 -27
  238. package/dist/modules/mcp/tools/segment/schema/elements/createSegmentElement.js +0 -24
  239. package/dist/modules/mcp/tools/segment/schema/elements/deleteSegmentElement.js +0 -19
  240. package/dist/modules/mcp/tools/segment/schema/elements/moveSegmentElement.js +0 -28
  241. package/dist/modules/mcp/tools/segment/schema/elements/updateSegmentElement.js +0 -23
  242. package/dist/modules/mcp/tools/segment/schema/variables/createSegmentVariable.js +0 -41
  243. package/dist/modules/mcp/tools/segment/schema/variables/deleteSegmentVariable.js +0 -19
  244. package/dist/modules/mcp/tools/segment/schema/variables/updateSegmentVariable.js +0 -41
  245. package/dist/modules/mcp/tools/segment/style/variables/createSegmentStyleVariable.js +0 -34
  246. package/dist/modules/mcp/tools/segment/style/variables/deleteSegmentStyleVariable.js +0 -21
  247. package/dist/modules/mcp/tools/segment/style/variables/updateSegmentStyleVariable.js +0 -34
  248. package/dist/modules/mcp/tools/segment/updateSegment.js +0 -30
  249. package/dist/modules/mcp/tools/space/schema/applyPreview.js +0 -33
  250. package/dist/modules/mcp/tools/space/schema/elements/cloneElement.js +0 -34
  251. package/dist/modules/mcp/tools/space/schema/elements/createElement.js +0 -50
  252. package/dist/modules/mcp/tools/space/schema/elements/deleteElement.js +0 -16
  253. package/dist/modules/mcp/tools/space/schema/elements/getElement.js +0 -17
  254. package/dist/modules/mcp/tools/space/schema/elements/getElements.js +0 -21
  255. package/dist/modules/mcp/tools/space/schema/elements/listElements.js +0 -28
  256. package/dist/modules/mcp/tools/space/schema/elements/moveElement.js +0 -27
  257. package/dist/modules/mcp/tools/space/schema/elements/updateElement.js +0 -49
  258. package/dist/modules/mcp/tools/space/schema/getSpaceSettings.js +0 -46
  259. package/dist/modules/mcp/tools/space/schema/pageFolders/createPageFolder.js +0 -24
  260. package/dist/modules/mcp/tools/space/schema/pageFolders/deletePageFolder.js +0 -16
  261. package/dist/modules/mcp/tools/space/schema/pageFolders/getPageFolder.js +0 -17
  262. package/dist/modules/mcp/tools/space/schema/pageFolders/getPageFolders.js +0 -17
  263. package/dist/modules/mcp/tools/space/schema/pageFolders/updatePageFolder.js +0 -28
  264. package/dist/modules/mcp/tools/space/schema/pages/createPage.js +0 -37
  265. package/dist/modules/mcp/tools/space/schema/pages/deletePage.js +0 -16
  266. package/dist/modules/mcp/tools/space/schema/pages/getPage.js +0 -28
  267. package/dist/modules/mcp/tools/space/schema/pages/getPageBySlug.js +0 -17
  268. package/dist/modules/mcp/tools/space/schema/pages/getPages.js +0 -17
  269. package/dist/modules/mcp/tools/space/schema/pages/updatePage.js +0 -25
  270. package/dist/modules/mcp/tools/space/schema/schemas.js +0 -53
  271. package/dist/modules/mcp/tools/space/schema/updateSpaceSettings.js +0 -23
  272. package/dist/modules/mcp/tools/space/schema/variables/createVariable.js +0 -38
  273. package/dist/modules/mcp/tools/space/schema/variables/deleteVariable.js +0 -16
  274. package/dist/modules/mcp/tools/space/schema/variables/getVariable.js +0 -17
  275. package/dist/modules/mcp/tools/space/schema/variables/getVariables.js +0 -17
  276. package/dist/modules/mcp/tools/space/schema/variables/updateVariable.js +0 -38
  277. package/dist/modules/mcp/tools/space/style/selectors/createStyleSelector.js +0 -37
  278. package/dist/modules/mcp/tools/space/style/selectors/deleteStyleSelector.js +0 -24
  279. package/dist/modules/mcp/tools/space/style/selectors/getStyleSelectors.js +0 -20
  280. package/dist/modules/mcp/tools/space/style/selectors/updateStyleSelector.js +0 -37
  281. package/dist/modules/mcp/tools/space/style/variables/createStyleVariable.js +0 -33
  282. package/dist/modules/mcp/tools/space/style/variables/deleteStyleVariable.js +0 -20
  283. package/dist/modules/mcp/tools/space/style/variables/getStyleVariable.js +0 -19
  284. package/dist/modules/mcp/tools/space/style/variables/getStyleVariables.js +0 -16
  285. package/dist/modules/mcp/tools/space/style/variables/updateStyleVariable.js +0 -33
  286. package/dist/package.js +0 -77
  287. package/dist/package.json.d.ts +0 -67
  288. package/dist/src/core/requestHandler.d.ts +0 -5
  289. package/dist/src/modules/mcp/helpers.d.ts +0 -9
  290. package/dist/src/modules/mcp/resources/glossary/binding.d.ts +0 -7
  291. package/dist/src/modules/mcp/resources/glossary/collection.d.ts +0 -7
  292. package/dist/src/modules/mcp/resources/glossary/displayMode.d.ts +0 -7
  293. package/dist/src/modules/mcp/resources/glossary/element.d.ts +0 -7
  294. package/dist/src/modules/mcp/resources/glossary/environment.d.ts +0 -7
  295. package/dist/src/modules/mcp/resources/glossary/interaction.d.ts +0 -7
  296. package/dist/src/modules/mcp/resources/glossary/page.d.ts +0 -7
  297. package/dist/src/modules/mcp/resources/glossary/plugin.d.ts +0 -7
  298. package/dist/src/modules/mcp/resources/glossary/resource.d.ts +0 -7
  299. package/dist/src/modules/mcp/resources/glossary/schema.d.ts +0 -7
  300. package/dist/src/modules/mcp/resources/glossary/schemaVariable.d.ts +0 -7
  301. package/dist/src/modules/mcp/resources/glossary/segment.d.ts +0 -7
  302. package/dist/src/modules/mcp/resources/glossary/space.d.ts +0 -7
  303. package/dist/src/modules/mcp/resources/glossary/style.d.ts +0 -7
  304. package/dist/src/modules/mcp/resources/glossary/styleSelector.d.ts +0 -7
  305. package/dist/src/modules/mcp/resources/glossary/styleVariable.d.ts +0 -7
  306. package/dist/src/modules/mcp/resources/workflows/data.d.ts +0 -7
  307. package/dist/src/modules/mcp/resources/workflows/elements.d.ts +0 -7
  308. package/dist/src/modules/mcp/resources/workflows/segments.d.ts +0 -7
  309. package/dist/src/modules/mcp/resources/workflows/styles.d.ts +0 -7
  310. package/dist/src/modules/mcp/tools/collections/createCollection.d.ts +0 -3
  311. package/dist/src/modules/mcp/tools/collections/createCollectionRecord.d.ts +0 -3
  312. package/dist/src/modules/mcp/tools/collections/deleteCollection.d.ts +0 -3
  313. package/dist/src/modules/mcp/tools/collections/deleteCollectionRecord.d.ts +0 -3
  314. package/dist/src/modules/mcp/tools/collections/getCollection.d.ts +0 -3
  315. package/dist/src/modules/mcp/tools/collections/getCollectionRecord.d.ts +0 -3
  316. package/dist/src/modules/mcp/tools/collections/getCollectionRecords.d.ts +0 -3
  317. package/dist/src/modules/mcp/tools/collections/getCollections.d.ts +0 -3
  318. package/dist/src/modules/mcp/tools/collections/index.d.ts +0 -10
  319. package/dist/src/modules/mcp/tools/collections/updateCollection.d.ts +0 -3
  320. package/dist/src/modules/mcp/tools/collections/updateCollectionRecord.d.ts +0 -3
  321. package/dist/src/modules/mcp/tools/docs/index.d.ts +0 -2
  322. package/dist/src/modules/mcp/tools/docs/listResources.d.ts +0 -3
  323. package/dist/src/modules/mcp/tools/docs/readResource.d.ts +0 -3
  324. package/dist/src/modules/mcp/tools/plugins/addPlugin.d.ts +0 -3
  325. package/dist/src/modules/mcp/tools/plugins/index.d.ts +0 -5
  326. package/dist/src/modules/mcp/tools/plugins/listPlugins.d.ts +0 -3
  327. package/dist/src/modules/mcp/tools/plugins/removePlugin.d.ts +0 -3
  328. package/dist/src/modules/mcp/tools/plugins/updatePlugin.d.ts +0 -3
  329. package/dist/src/modules/mcp/tools/resources/addResource.d.ts +0 -3
  330. package/dist/src/modules/mcp/tools/resources/getResource.d.ts +0 -3
  331. package/dist/src/modules/mcp/tools/resources/getResources.d.ts +0 -3
  332. package/dist/src/modules/mcp/tools/resources/index.d.ts +0 -6
  333. package/dist/src/modules/mcp/tools/resources/moveResource.d.ts +0 -3
  334. package/dist/src/modules/mcp/tools/resources/removeResource.d.ts +0 -3
  335. package/dist/src/modules/mcp/tools/resources/resources.test.d.ts +0 -1
  336. package/dist/src/modules/mcp/tools/segment/createSegment.d.ts +0 -3
  337. package/dist/src/modules/mcp/tools/segment/deleteSegment.d.ts +0 -3
  338. package/dist/src/modules/mcp/tools/segment/getSegment.d.ts +0 -3
  339. package/dist/src/modules/mcp/tools/segment/getSegments.d.ts +0 -3
  340. package/dist/src/modules/mcp/tools/segment/index.d.ts +0 -8
  341. package/dist/src/modules/mcp/tools/segment/schema/elements/createSegmentElement.d.ts +0 -3
  342. package/dist/src/modules/mcp/tools/segment/schema/elements/deleteSegmentElement.d.ts +0 -3
  343. package/dist/src/modules/mcp/tools/segment/schema/elements/index.d.ts +0 -5
  344. package/dist/src/modules/mcp/tools/segment/schema/elements/moveSegmentElement.d.ts +0 -3
  345. package/dist/src/modules/mcp/tools/segment/schema/elements/segmentElements.test.d.ts +0 -1
  346. package/dist/src/modules/mcp/tools/segment/schema/elements/updateSegmentElement.d.ts +0 -3
  347. package/dist/src/modules/mcp/tools/segment/schema/index.d.ts +0 -2
  348. package/dist/src/modules/mcp/tools/segment/schema/variables/createSegmentVariable.d.ts +0 -3
  349. package/dist/src/modules/mcp/tools/segment/schema/variables/deleteSegmentVariable.d.ts +0 -3
  350. package/dist/src/modules/mcp/tools/segment/schema/variables/index.d.ts +0 -4
  351. package/dist/src/modules/mcp/tools/segment/schema/variables/segmentVariables.test.d.ts +0 -1
  352. package/dist/src/modules/mcp/tools/segment/schema/variables/updateSegmentVariable.d.ts +0 -3
  353. package/dist/src/modules/mcp/tools/segment/segment.test.d.ts +0 -1
  354. package/dist/src/modules/mcp/tools/segment/style/index.d.ts +0 -1
  355. package/dist/src/modules/mcp/tools/segment/style/variables/createSegmentStyleVariable.d.ts +0 -3
  356. package/dist/src/modules/mcp/tools/segment/style/variables/deleteSegmentStyleVariable.d.ts +0 -3
  357. package/dist/src/modules/mcp/tools/segment/style/variables/index.d.ts +0 -4
  358. package/dist/src/modules/mcp/tools/segment/style/variables/segmentStyleVariables.test.d.ts +0 -1
  359. package/dist/src/modules/mcp/tools/segment/style/variables/updateSegmentStyleVariable.d.ts +0 -3
  360. package/dist/src/modules/mcp/tools/segment/updateSegment.d.ts +0 -3
  361. package/dist/src/modules/mcp/tools/space/index.d.ts +0 -2
  362. package/dist/src/modules/mcp/tools/space/schema/applyPreview.d.ts +0 -3
  363. package/dist/src/modules/mcp/tools/space/schema/elements/cloneElement.d.ts +0 -3
  364. package/dist/src/modules/mcp/tools/space/schema/elements/createElement.d.ts +0 -3
  365. package/dist/src/modules/mcp/tools/space/schema/elements/deleteElement.d.ts +0 -3
  366. package/dist/src/modules/mcp/tools/space/schema/elements/elements.test.d.ts +0 -1
  367. package/dist/src/modules/mcp/tools/space/schema/elements/getElement.d.ts +0 -3
  368. package/dist/src/modules/mcp/tools/space/schema/elements/getElements.d.ts +0 -3
  369. package/dist/src/modules/mcp/tools/space/schema/elements/index.d.ts +0 -9
  370. package/dist/src/modules/mcp/tools/space/schema/elements/listElements.d.ts +0 -3
  371. package/dist/src/modules/mcp/tools/space/schema/elements/moveElement.d.ts +0 -3
  372. package/dist/src/modules/mcp/tools/space/schema/elements/updateElement.d.ts +0 -3
  373. package/dist/src/modules/mcp/tools/space/schema/getSpaceSettings.d.ts +0 -3
  374. package/dist/src/modules/mcp/tools/space/schema/index.d.ts +0 -8
  375. package/dist/src/modules/mcp/tools/space/schema/pageFolders/createPageFolder.d.ts +0 -3
  376. package/dist/src/modules/mcp/tools/space/schema/pageFolders/deletePageFolder.d.ts +0 -3
  377. package/dist/src/modules/mcp/tools/space/schema/pageFolders/getPageFolder.d.ts +0 -3
  378. package/dist/src/modules/mcp/tools/space/schema/pageFolders/getPageFolders.d.ts +0 -3
  379. package/dist/src/modules/mcp/tools/space/schema/pageFolders/index.d.ts +0 -6
  380. package/dist/src/modules/mcp/tools/space/schema/pageFolders/pageFolders.test.d.ts +0 -1
  381. package/dist/src/modules/mcp/tools/space/schema/pageFolders/updatePageFolder.d.ts +0 -3
  382. package/dist/src/modules/mcp/tools/space/schema/pages/createPage.d.ts +0 -3
  383. package/dist/src/modules/mcp/tools/space/schema/pages/deletePage.d.ts +0 -3
  384. package/dist/src/modules/mcp/tools/space/schema/pages/getPage.d.ts +0 -3
  385. package/dist/src/modules/mcp/tools/space/schema/pages/getPageBySlug.d.ts +0 -3
  386. package/dist/src/modules/mcp/tools/space/schema/pages/getPages.d.ts +0 -3
  387. package/dist/src/modules/mcp/tools/space/schema/pages/index.d.ts +0 -7
  388. package/dist/src/modules/mcp/tools/space/schema/pages/pages.test.d.ts +0 -1
  389. package/dist/src/modules/mcp/tools/space/schema/pages/updatePage.d.ts +0 -3
  390. package/dist/src/modules/mcp/tools/space/schema/schemas.d.ts +0 -66
  391. package/dist/src/modules/mcp/tools/space/schema/updateSpaceSettings.d.ts +0 -3
  392. package/dist/src/modules/mcp/tools/space/schema/variables/createVariable.d.ts +0 -3
  393. package/dist/src/modules/mcp/tools/space/schema/variables/deleteVariable.d.ts +0 -3
  394. package/dist/src/modules/mcp/tools/space/schema/variables/getVariable.d.ts +0 -3
  395. package/dist/src/modules/mcp/tools/space/schema/variables/getVariables.d.ts +0 -3
  396. package/dist/src/modules/mcp/tools/space/schema/variables/index.d.ts +0 -6
  397. package/dist/src/modules/mcp/tools/space/schema/variables/updateVariable.d.ts +0 -3
  398. package/dist/src/modules/mcp/tools/space/schema/variables/variables.test.d.ts +0 -1
  399. package/dist/src/modules/mcp/tools/space/space.test.d.ts +0 -1
  400. package/dist/src/modules/mcp/tools/space/style/index.d.ts +0 -2
  401. package/dist/src/modules/mcp/tools/space/style/selectors/createStyleSelector.d.ts +0 -3
  402. package/dist/src/modules/mcp/tools/space/style/selectors/deleteStyleSelector.d.ts +0 -3
  403. package/dist/src/modules/mcp/tools/space/style/selectors/getStyleSelectors.d.ts +0 -3
  404. package/dist/src/modules/mcp/tools/space/style/selectors/index.d.ts +0 -5
  405. package/dist/src/modules/mcp/tools/space/style/selectors/styleSelectors.test.d.ts +0 -1
  406. package/dist/src/modules/mcp/tools/space/style/selectors/updateStyleSelector.d.ts +0 -3
  407. package/dist/src/modules/mcp/tools/space/style/variables/createStyleVariable.d.ts +0 -3
  408. package/dist/src/modules/mcp/tools/space/style/variables/deleteStyleVariable.d.ts +0 -3
  409. package/dist/src/modules/mcp/tools/space/style/variables/getStyleVariable.d.ts +0 -3
  410. package/dist/src/modules/mcp/tools/space/style/variables/getStyleVariables.d.ts +0 -3
  411. package/dist/src/modules/mcp/tools/space/style/variables/index.d.ts +0 -6
  412. package/dist/src/modules/mcp/tools/space/style/variables/styleVariables.test.d.ts +0 -1
  413. package/dist/src/modules/mcp/tools/space/style/variables/updateStyleVariable.d.ts +0 -3
  414. /package/dist/src/{modules/mcp/helpers.test.d.ts → core/server/mcpServer.test.d.ts} +0 -0
  415. /package/dist/src/modules/{mcp/tools/collections/collections.test.d.ts → ai/toolkit.test.d.ts} +0 -0
  416. /package/dist/src/modules/mcp/{tools/plugins/plugins.test.d.ts → mcp.test.d.ts} +0 -0
@@ -0,0 +1,262 @@
1
+ import { findFolderByRef, findPageByRef, folderAncestorIds, getPageElements, pageFoldersOf, pageRefOf, resolveRef, routeParamNames, slugRouteParams } from "../../helpers/space.js";
2
+ import { expandShorthand, isCssProperty, suggestCssProperty } from "../operations/style/cssCatalog.js";
3
+ import { buildTypeRegistry } from "../operations/schema/registry.js";
4
+ //#region src/modules/mcp/tools/shared/validator.ts
5
+ var REF_RE = /^[a-zA-Z0-9._-]+$/;
6
+ var MAX_OPS = 100;
7
+ var STYLE_CATEGORIES = [
8
+ "color",
9
+ "spacing",
10
+ "shadow",
11
+ "custom"
12
+ ];
13
+ var VAR_REF = /\{\{\s*([A-Za-z_][\w.-]*)\s*\}\}/g;
14
+ var CSS_VAR = /var\(\s*--([A-Za-z_][\w-]*)\s*\)/g;
15
+ var RAW_CODE_TYPES = /* @__PURE__ */ new Set([
16
+ "blockJsx",
17
+ "blockHtml",
18
+ "custom"
19
+ ]);
20
+ var warnOnce = (ctx, message) => {
21
+ if (!ctx.warned.has(message)) {
22
+ ctx.warned.add(message);
23
+ ctx.warnings.push(message);
24
+ }
25
+ };
26
+ var checkVarRefs = (text, path, ctx) => {
27
+ for (const match of text.matchAll(VAR_REF)) {
28
+ const name = match[1];
29
+ if (!ctx.schemaVars.has(name)) warnOnce(ctx, `Unknown variable {{${name}}} at ${path}: not a space schema variable or a page route param. Read plitzi://schema-variables, or use a route param from the page skeleton (routeParams).`);
30
+ }
31
+ };
32
+ var checkStyleVarRefs = (text, path, ctx) => {
33
+ for (const match of text.matchAll(CSS_VAR)) {
34
+ const name = match[1];
35
+ if (!ctx.styleVars.has(name)) {
36
+ const tokens = [...ctx.styleVars];
37
+ warnOnce(ctx, `Unknown style variable var(--${name}) at ${path}: not a design token in this space. ${tokens.length > 0 ? `Available tokens: ${tokens.slice(0, 30).join(", ")}${tokens.length > 30 ? ", …" : ""}.` : "Read plitzi://style-variables for the valid token names."}`);
38
+ }
39
+ }
40
+ };
41
+ var checkTypeProps = (type, props, path, ctx) => {
42
+ if (!props || RAW_CODE_TYPES.has(type)) return;
43
+ const known = ctx.typeProps.get(type);
44
+ if (!known || known.size === 0) return;
45
+ for (const key of Object.keys(props)) {
46
+ if (key === "subType" || known.has(key)) continue;
47
+ warnOnce(ctx, `Type "${type}" has no observed prop "${key}" at ${path} (observed: ${[...known].sort().join(", ")}). It may still be valid — verify against plitzi://types.`);
48
+ }
49
+ };
50
+ var checkRef = (ref, path, ctx) => {
51
+ if (!ref || ref.trim().length === 0) {
52
+ ctx.errors.push({
53
+ path,
54
+ message: "Ref must not be empty",
55
+ hint: "Use a semantic name like \"hero.title\""
56
+ });
57
+ return;
58
+ }
59
+ if (!REF_RE.test(ref)) ctx.errors.push({
60
+ path,
61
+ message: `Ref "${ref}" has invalid characters`,
62
+ hint: "Allowed characters: letters, numbers, dot, hyphen, underscore"
63
+ });
64
+ };
65
+ var checkCss = (css, path, ctx) => {
66
+ if (!css) return;
67
+ const declared = {};
68
+ for (const [key, value] of Object.entries(css)) if (value !== null) declared[key] = value;
69
+ for (const [key, value] of Object.entries(expandShorthand(declared))) {
70
+ if (!isCssProperty(key)) {
71
+ const suggestion = suggestCssProperty(key);
72
+ ctx.errors.push({
73
+ path: `${path}.${key}`,
74
+ message: `Unknown CSS property "${key}"`,
75
+ hint: suggestion ? `Use the kebab-case key "${suggestion}"` : "Read plitzi://css-properties for the valid property keys"
76
+ });
77
+ }
78
+ if (typeof value === "string") {
79
+ checkStyleVarRefs(value, `${path}.${key}`, ctx);
80
+ checkVarRefs(value, `${path}.${key}`, ctx);
81
+ }
82
+ }
83
+ };
84
+ var checkSlotCss = (slot, path, ctx) => {
85
+ checkCss(slot.desktop, `${path}.desktop`, ctx);
86
+ checkCss(slot.tablet, `${path}.tablet`, ctx);
87
+ checkCss(slot.mobile, `${path}.mobile`, ctx);
88
+ for (const [state, dm] of Object.entries(slot.states ?? {})) {
89
+ checkCss(dm.desktop, `${path}.states.${state}.desktop`, ctx);
90
+ checkCss(dm.tablet, `${path}.states.${state}.tablet`, ctx);
91
+ checkCss(dm.mobile, `${path}.states.${state}.mobile`, ctx);
92
+ }
93
+ for (const [name, dm] of Object.entries(slot.variants ?? {})) {
94
+ checkCss(dm.desktop, `${path}.variants.${name}.desktop`, ctx);
95
+ checkCss(dm.tablet, `${path}.variants.${name}.tablet`, ctx);
96
+ checkCss(dm.mobile, `${path}.variants.${name}.mobile`, ctx);
97
+ }
98
+ };
99
+ var checkElementProps = (element, path, ctx) => {
100
+ if (!element.props || RAW_CODE_TYPES.has(element.type)) return;
101
+ for (const [key, value] of Object.entries(element.props)) if (typeof value === "string") checkVarRefs(value, `${path}.props.${key}`, ctx);
102
+ checkTypeProps(element.type, element.props, path, ctx);
103
+ };
104
+ var checkElementInput = (element, path, ctx, seen) => {
105
+ checkRef(element.ref, `${path}.ref`, ctx);
106
+ if (seen.has(element.ref)) ctx.errors.push({
107
+ path: `${path}.ref`,
108
+ message: `Duplicate ref "${element.ref}" in this batch`,
109
+ hint: "Use a unique ref"
110
+ });
111
+ seen.add(element.ref);
112
+ if (!element.type) ctx.errors.push({
113
+ path: `${path}.type`,
114
+ message: "Element type is required",
115
+ hint: "Read plitzi://types for known types"
116
+ });
117
+ else if (!ctx.knownTypes.has(element.type)) ctx.warnings.push(`Type "${element.type}" was not seen in this space; ensure a plugin provides it (${path}.type).`);
118
+ checkElementProps(element, path, ctx);
119
+ element.children?.forEach((child, i) => checkElementInput(child, `${path}.children[${i}]`, ctx, seen));
120
+ };
121
+ var batchDeclaredVars = (ops) => {
122
+ const names = [];
123
+ for (const op of ops) if (op.type === "upsertVariable") names.push(op.name);
124
+ else if (op.type === "upsertPage" && typeof op.slug === "string") names.push(...slugRouteParams(op.slug));
125
+ return names;
126
+ };
127
+ var batchDeclaredPages = (ops) => {
128
+ const refs = /* @__PURE__ */ new Set();
129
+ for (const op of ops) if (op.type === "upsertPage") refs.add(op.ref);
130
+ return refs;
131
+ };
132
+ var batchDeclaredFolders = (ops) => {
133
+ const refs = /* @__PURE__ */ new Set();
134
+ for (const op of ops) if (op.type === "upsertFolder") refs.add(op.ref);
135
+ return refs;
136
+ };
137
+ var validateOperations = (space, ops) => {
138
+ const registry = buildTypeRegistry(space.schema);
139
+ const batchPages = batchDeclaredPages(ops);
140
+ const batchFolders = batchDeclaredFolders(ops);
141
+ const folderRefs = () => pageFoldersOf(space.schema).map((f) => f.id);
142
+ const ctx = {
143
+ errors: [],
144
+ warnings: [],
145
+ warned: /* @__PURE__ */ new Set(),
146
+ knownTypes: new Set(Object.keys(registry.types)),
147
+ typeProps: new Map(Object.entries(registry.types).map(([type, info]) => [type, new Set(Object.keys(info.props))])),
148
+ schemaVars: /* @__PURE__ */ new Set([
149
+ ...space.schema.variables.map((v) => v.name),
150
+ ...routeParamNames(space.schema),
151
+ ...batchDeclaredVars(ops)
152
+ ]),
153
+ styleVars: new Set(Object.values(space.style.variables).flatMap((group) => Object.keys(group)))
154
+ };
155
+ if (ops.length > MAX_OPS) ctx.errors.push({
156
+ path: "operations",
157
+ message: `Batch has ${ops.length} operations (max ${MAX_OPS})`,
158
+ hint: `Split into batches of at most ${MAX_OPS}`
159
+ });
160
+ ops.forEach((op, i) => {
161
+ const base = `operations[${i}]`;
162
+ if ((op.type === "upsertElement" || op.type === "patchElement" || op.type === "deleteElement" || op.type === "moveElement") && op.pageRef) {
163
+ if (!findPageByRef(space.schema, op.pageRef) && !batchPages.has(op.pageRef)) {
164
+ const validRefs = getPageElements(space.schema).map(pageRefOf);
165
+ ctx.errors.push({
166
+ path: `${base}.pageRef`,
167
+ message: `Page "${op.pageRef}" does not exist`,
168
+ hint: "Use an existing page ref, or create it with upsertPage earlier in the same batch",
169
+ validValues: validRefs
170
+ });
171
+ }
172
+ }
173
+ switch (op.type) {
174
+ case "upsertElement":
175
+ checkElementInput(op.element, `${base}.element`, ctx, /* @__PURE__ */ new Set());
176
+ break;
177
+ case "patchElement": {
178
+ checkRef(op.ref, `${base}.ref`, ctx);
179
+ const page = findPageByRef(space.schema, op.pageRef);
180
+ const target = page ? resolveRef(space.schema, page, op.ref) : void 0;
181
+ if (op.props) {
182
+ for (const [key, value] of Object.entries(op.props)) if (typeof value === "string") checkVarRefs(value, `${base}.props.${key}`, ctx);
183
+ if (target && target.id !== page?.id) checkTypeProps(target.definition.type, op.props, base, ctx);
184
+ }
185
+ break;
186
+ }
187
+ case "upsertDefinition":
188
+ case "patchDefinition": {
189
+ const { type, ref, slots, ...slot } = op;
190
+ checkRef(ref, `${base}.ref`, ctx);
191
+ checkSlotCss(slot, base, ctx);
192
+ for (const [slotName, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${base}.slots.${slotName}`, ctx);
193
+ break;
194
+ }
195
+ case "upsertGlobalStyle":
196
+ case "patchGlobalStyle": {
197
+ const { type, componentType, slots, ...slot } = op;
198
+ checkRef(componentType, `${base}.componentType`, ctx);
199
+ checkSlotCss(slot, base, ctx);
200
+ for (const [slotName, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${base}.slots.${slotName}`, ctx);
201
+ break;
202
+ }
203
+ case "deleteGlobalStyle":
204
+ checkRef(op.componentType, `${base}.componentType`, ctx);
205
+ break;
206
+ case "upsertPage":
207
+ checkRef(op.ref, `${base}.ref`, ctx);
208
+ if (typeof op.folder === "string" && op.folder !== "") {
209
+ if (!findFolderByRef(space.schema, op.folder) && !batchFolders.has(op.folder)) ctx.errors.push({
210
+ path: `${base}.folder`,
211
+ message: `Folder "${op.folder}" does not exist`,
212
+ hint: "Create it with upsertFolder earlier in the same batch, or read plitzi://folders for valid refs",
213
+ validValues: folderRefs()
214
+ });
215
+ }
216
+ break;
217
+ case "upsertFolder":
218
+ checkRef(op.ref, `${base}.ref`, ctx);
219
+ if (typeof op.parentId === "string") {
220
+ checkRef(op.parentId, `${base}.parentId`, ctx);
221
+ const parent = findFolderByRef(space.schema, op.parentId);
222
+ if (!parent && !batchFolders.has(op.parentId)) ctx.errors.push({
223
+ path: `${base}.parentId`,
224
+ message: `Parent folder "${op.parentId}" does not exist`,
225
+ hint: "Create the parent with upsertFolder first, or read plitzi://folders for valid refs",
226
+ validValues: folderRefs()
227
+ });
228
+ const selfId = findFolderByRef(space.schema, op.ref)?.id ?? op.ref;
229
+ if ((parent?.id ?? op.parentId) === selfId || parent && folderAncestorIds(pageFoldersOf(space.schema), parent.id).includes(selfId)) ctx.errors.push({
230
+ path: `${base}.parentId`,
231
+ message: `Folder "${op.ref}" cannot be nested under itself or one of its descendants`,
232
+ hint: "Choose a parent that is not this folder or below it"
233
+ });
234
+ }
235
+ break;
236
+ case "deleteDefinition":
237
+ case "deleteFolder":
238
+ case "deletePage":
239
+ case "upsertVariable":
240
+ case "deleteVariable":
241
+ checkRef("ref" in op ? op.ref : op.name, `${base}.${"ref" in op ? "ref" : "name"}`, ctx);
242
+ break;
243
+ case "upsertStyleVariable":
244
+ case "deleteStyleVariable":
245
+ if (!STYLE_CATEGORIES.includes(op.category)) ctx.errors.push({
246
+ path: `${base}.category`,
247
+ message: `Unknown style-variable category "${op.category}"`,
248
+ hint: "Use one of the valid categories",
249
+ validValues: STYLE_CATEGORIES
250
+ });
251
+ break;
252
+ default: break;
253
+ }
254
+ });
255
+ return {
256
+ valid: ctx.errors.length === 0,
257
+ errors: ctx.errors,
258
+ warnings: ctx.warnings
259
+ };
260
+ };
261
+ //#endregion
262
+ export { validateOperations };
@@ -0,0 +1,19 @@
1
+ import { environment, operations } from "./operations/index.js";
2
+ import { defineTool } from "./shared/tool.js";
3
+ import { validateOperations } from "./shared/validator.js";
4
+ //#region src/modules/mcp/tools/validate.ts
5
+ var validateShape = {
6
+ environment,
7
+ operations
8
+ };
9
+ var validate = (input, space) => validateOperations(space, input.operations);
10
+ var validateTool = defineTool({
11
+ name: "plitzi_validate",
12
+ title: "Validate",
13
+ description: "Check a batch of operations without executing them. Returns teachable errors and warnings.",
14
+ inputShape: validateShape,
15
+ access: "read",
16
+ run: (input, ctx) => validate(input, ctx.space)
17
+ });
18
+ //#endregion
19
+ export { validate, validateShape, validateTool };
@@ -3,8 +3,8 @@ import { prepareRender } from "./prepareRender.js";
3
3
  import { renderToString } from "react-dom/server";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/modules/ssr/buildBody.tsx
6
- var buildBody = async (req, config, spaceId, environment, revision, renderFn, pluginManager, offlineDataCache, metrics) => {
7
- const prep = await prepareRender(req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics);
6
+ var buildBody = async (req, config, spaceId, environment, revision, renderFn, pluginManager, offlineDataCache, metrics, offlineDataOverride) => {
7
+ const prep = await prepareRender(req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics, offlineDataOverride);
8
8
  const result = {};
9
9
  const reactStart = metrics ? performance.now() : 0;
10
10
  const html = renderToString(/* @__PURE__ */ jsx(Component, {
@@ -1,6 +1,7 @@
1
1
  import { buildHtmlCacheKey } from "../../helpers/cache/keys.js";
2
- import { applySSRResult } from "./applySSRResult.js";
3
2
  import { buildBody } from "./buildBody.js";
3
+ import { takeDraftOverride } from "./preview.js";
4
+ import { applySSRResult } from "./applySSRResult.js";
4
5
  import { streamBody } from "./streamBody.js";
5
6
  import { RequestMetrics } from "../../helpers/metrics.js";
6
7
  //#region src/modules/ssr/handler.tsx
@@ -8,7 +9,8 @@ var renderSSR = async (req, res, config, renderFn, pluginManager, caches) => {
8
9
  const { environment = "main", spaceId = 1, revision = 0 } = req.ctx.spaceDeployment || {};
9
10
  const devMode = config.devMode ?? false;
10
11
  res.setHeader("Content-Type", "text/html; charset=utf-8");
11
- const htmlCache = environment !== "main" ? caches.html : void 0;
12
+ const offlineDataOverride = await takeDraftOverride(req, config);
13
+ const htmlCache = environment !== "main" && !offlineDataOverride ? caches.html : void 0;
12
14
  const cacheKey = htmlCache ? buildHtmlCacheKey(req.ctx.user?.token, spaceId, environment, revision, req) : void 0;
13
15
  if (htmlCache && cacheKey) {
14
16
  const cached = htmlCache.get(cacheKey);
@@ -22,10 +24,10 @@ var renderSSR = async (req, res, config, renderFn, pluginManager, caches) => {
22
24
  const metrics = devMode ? new RequestMetrics() : void 0;
23
25
  if (cacheKey) res.setHeader("X-Cache", "MISS");
24
26
  if (config.streaming) {
25
- await streamBody(req, res, config, spaceId, environment, revision, renderFn, pluginManager, caches.offlineData, htmlCache, cacheKey, metrics);
27
+ await streamBody(req, res, config, spaceId, environment, revision, renderFn, pluginManager, caches.offlineData, htmlCache, cacheKey, metrics, offlineDataOverride);
26
28
  return;
27
29
  }
28
- const { body, result } = await buildBody(req, config, spaceId, environment, revision, renderFn, pluginManager, caches.offlineData, metrics);
30
+ const { body, result } = await buildBody(req, config, spaceId, environment, revision, renderFn, pluginManager, caches.offlineData, metrics, offlineDataOverride);
29
31
  if (metrics) {
30
32
  res.setHeader("Server-Timing", metrics.toServerTimingHeader());
31
33
  metrics.log(`${req.method} ${req.path}`);
@@ -1,16 +1,16 @@
1
- import { buildOfflineDataCacheKey } from "../../helpers/cache/keys.js";
2
1
  import { loadPluginComponents } from "./loadPluginComponents.js";
3
2
  import { registerExternalPlugins } from "./registerExternalPlugins.js";
4
3
  import { buildServerInfo } from "../../helpers/buildServerInfo.js";
4
+ import { buildOfflineDataCacheKey } from "../../helpers/cache/keys.js";
5
5
  import { escapeJson } from "../../helpers/escapeJson.js";
6
6
  import { readCookie } from "../../helpers/readCookie.js";
7
7
  //#region src/modules/ssr/prepareRender.tsx
8
- var prepareRender = async (req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics) => {
8
+ var prepareRender = async (req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics, offlineDataOverride) => {
9
9
  const m = (name, fn) => metrics ? metrics.measure(name, fn) : Promise.resolve(fn());
10
10
  const offlineCacheKey = environment !== "main" ? buildOfflineDataCacheKey(spaceId, environment, revision) : void 0;
11
- const cachedOfflineStr = offlineCacheKey ? offlineDataCache?.get(offlineCacheKey) : void 0;
12
- const [offlineData, server] = await Promise.all([cachedOfflineStr ? JSON.parse(cachedOfflineStr) : m("schema", () => config.adapters.getOfflineData(spaceId, environment, revision)), m("rsc", () => buildServerInfo(req, config))]);
13
- if (!cachedOfflineStr && offlineCacheKey && offlineData !== void 0) offlineDataCache?.set(offlineCacheKey, JSON.stringify(offlineData));
11
+ const cachedOfflineStr = offlineDataOverride === void 0 && offlineCacheKey ? offlineDataCache?.get(offlineCacheKey) : void 0;
12
+ const [offlineData, server] = await Promise.all([offlineDataOverride !== void 0 ? Promise.resolve(offlineDataOverride) : cachedOfflineStr ? JSON.parse(cachedOfflineStr) : m("schema", () => config.adapters.getOfflineData(spaceId, environment, revision)), m("rsc", () => buildServerInfo(req, config))]);
13
+ if (offlineDataOverride === void 0 && !cachedOfflineStr && offlineCacheKey && offlineData !== void 0) offlineDataCache?.set(offlineCacheKey, JSON.stringify(offlineData));
14
14
  const v = config.assetVersion ? `?v=${config.assetVersion}` : "";
15
15
  const sdkDevToolsStylePath = `/sdk-assets/plitzi-sdk-devtools.css${v}`;
16
16
  const debugCookie = readCookie(req.headers.cookie, "plitzi_debug");
@@ -0,0 +1,106 @@
1
+ import { computeVersion } from "../mcp/helpers/computeVersion.js";
2
+ import { cloneSpace, findPageByRef, getPageElements } from "../mcp/helpers/space.js";
3
+ import { applyOperations } from "../mcp/tools/apply/dispatch.js";
4
+ import { validateOperations } from "../mcp/tools/shared/validator.js";
5
+ import { PREVIEW_TOKEN_PARAM } from "../mcp/constants.js";
6
+ import { buildBody } from "./buildBody.js";
7
+ import { randomUUID } from "node:crypto";
8
+ //#region src/modules/ssr/preview.ts
9
+ /** In-memory one-shot draft store — the default when the consumer injects none. Fine for a single replica;
10
+ * a multi-replica deployment must inject a shared store so a preview URL resolves on any replica. */
11
+ var createMemoryDraftStore = () => {
12
+ const store = /* @__PURE__ */ new Map();
13
+ return {
14
+ put(token, data, ttlMs) {
15
+ store.set(token, {
16
+ data,
17
+ expiresAt: Date.now() + ttlMs
18
+ });
19
+ },
20
+ take(token) {
21
+ const hit = store.get(token);
22
+ if (!hit) return;
23
+ store.delete(token);
24
+ return hit.expiresAt > Date.now() ? hit.data : void 0;
25
+ }
26
+ };
27
+ };
28
+ /** Consume the draft override for a render, if the request carries a valid preview token. Returns undefined on
29
+ * a normal request (renders persisted state) or when the token is unknown/expired (one-shot / TTL). */
30
+ var takeDraftOverride = async (req, config) => {
31
+ const token = req.query[PREVIEW_TOKEN_PARAM];
32
+ if (!token || !config.draftStore) return;
33
+ return config.draftStore.take(token);
34
+ };
35
+ var resolvePagePath = (schema, pageRef) => {
36
+ const pages = getPageElements(schema);
37
+ const page = pageRef ? findPageByRef(schema, pageRef) : pages.find((p) => p.attributes.default) ?? pages[0];
38
+ const slug = page && typeof page.attributes.slug === "string" ? page.attributes.slug : "";
39
+ return slug.startsWith("/") ? slug : `/${slug}`;
40
+ };
41
+ var syntheticRequest = (pagePath) => ({
42
+ method: "GET",
43
+ path: pagePath,
44
+ search: "",
45
+ url: pagePath,
46
+ hostname: "localhost",
47
+ protocol: "https",
48
+ headers: {},
49
+ query: {},
50
+ ctx: {}
51
+ });
52
+ /** Build a preview of a page: apply any unsaved `operations` to a clone (never persisted), render the resulting
53
+ * draft to full HTML via the SSR pipeline, and stash the draft under a one-shot token so a browser can fetch
54
+ * the exact same render at `?__pt=<token>` (for screenshots). With no operations it previews persisted state. */
55
+ var createPreview = async (body, config, renderFn, pluginManager, caches) => {
56
+ const env = body.env ?? "main";
57
+ const revision = 0;
58
+ const offlineData = await config.adapters.getOfflineData(body.spaceId, env, revision);
59
+ if (!offlineData) return {
60
+ ok: false,
61
+ error: "NO_DATA",
62
+ message: `No offline data for space ${body.spaceId} (${env}).`
63
+ };
64
+ let draftOffline = offlineData;
65
+ if (body.operations && body.operations.length > 0) {
66
+ const draft = cloneSpace({
67
+ schema: offlineData.schema,
68
+ style: offlineData.style
69
+ });
70
+ const validation = validateOperations(draft, body.operations);
71
+ if (!validation.valid) return {
72
+ ok: false,
73
+ error: "INVALID_OPERATIONS",
74
+ message: "The operations did not validate.",
75
+ errors: validation.errors
76
+ };
77
+ const outcome = applyOperations(draft, env, body.operations);
78
+ if (outcome.errors.length > 0) return {
79
+ ok: false,
80
+ error: "APPLY_FAILED",
81
+ message: "The operations could not be applied.",
82
+ errors: outcome.errors
83
+ };
84
+ draftOffline = {
85
+ ...offlineData,
86
+ schema: draft.schema,
87
+ style: draft.style
88
+ };
89
+ }
90
+ const pagePath = resolvePagePath(draftOffline.schema, body.pageRef);
91
+ const { body: html } = await buildBody(syntheticRequest(pagePath), config, body.spaceId, env, revision, renderFn, pluginManager, caches.offlineData, void 0, draftOffline);
92
+ let token;
93
+ if (config.draftStore) {
94
+ token = randomUUID();
95
+ await config.draftStore.put(token, draftOffline, config.preview?.ttlMs ?? 6e4);
96
+ }
97
+ return {
98
+ ok: true,
99
+ token,
100
+ pagePath,
101
+ html: html ?? "",
102
+ stateVersion: computeVersion(draftOffline)
103
+ };
104
+ };
105
+ //#endregion
106
+ export { PREVIEW_TOKEN_PARAM, createMemoryDraftStore, createPreview, takeDraftOverride };
@@ -1,6 +1,6 @@
1
- import path from "node:path";
2
1
  import crypto from "node:crypto";
3
2
  import fs from "node:fs/promises";
3
+ import path from "node:path";
4
4
  //#region src/modules/ssr/registerExternalPlugins.ts
5
5
  var MANIFEST_TTL_MS = 600 * 1e3;
6
6
  var manifestCache = /* @__PURE__ */ new Map();
@@ -1,13 +1,13 @@
1
- import { applySSRResult } from "./applySSRResult.js";
2
1
  import Component from "./Component.js";
3
2
  import { prepareRender } from "./prepareRender.js";
3
+ import { applySSRResult } from "./applySSRResult.js";
4
4
  import { renderToPipeableStream } from "react-dom/server";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  import { Writable } from "node:stream";
7
7
  //#region src/modules/ssr/streamBody.tsx
8
8
  var SSR_SENTINEL = "<!--SSR_CONTENT-->";
9
- var streamBody = async (req, res, config, spaceId, environment, revision, renderFn, pluginManager, offlineDataCache, htmlCache, cacheKey, metrics) => {
10
- const prep = await prepareRender(req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics);
9
+ var streamBody = async (req, res, config, spaceId, environment, revision, renderFn, pluginManager, offlineDataCache, htmlCache, cacheKey, metrics, offlineDataOverride) => {
10
+ const prep = await prepareRender(req, config, spaceId, environment, revision, pluginManager, offlineDataCache, metrics, offlineDataOverride);
11
11
  const templateStart = metrics ? performance.now() : 0;
12
12
  const fullTemplate = renderFn({
13
13
  ...prep.templateParams,
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
2
  import fs from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
4
  import ejs from "ejs";
5
5
  //#region src/modules/ssr/template.ts
6
6
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -1,5 +1,5 @@
1
- import path from "node:path";
2
1
  import fs from "node:fs/promises";
2
+ import path from "node:path";
3
3
  import esbuild from "esbuild";
4
4
  //#region src/plugins/compile.ts
5
5
  var EXTERNAL = [
@@ -1,5 +1,5 @@
1
- import path from "node:path";
2
1
  import fs from "node:fs/promises";
2
+ import path from "node:path";
3
3
  //#region src/plugins/copy.ts
4
4
  var copyPlugin = async (src, destDir, filename) => {
5
5
  const dest = path.join(destDir, filename);
@@ -1,8 +1,8 @@
1
1
  import { compilePlugin } from "./compile.js";
2
2
  import { copyPlugin } from "./copy.js";
3
3
  import { detectAction, isComponentSource } from "./detect.js";
4
- import path from "node:path";
5
4
  import fs from "node:fs/promises";
5
+ import path from "node:path";
6
6
  //#region src/plugins/manager.ts
7
7
  var META_FILE = "meta.json";
8
8
  var DEFAULT_TTL_MS = 10080 * 60 * 1e3;
package/dist/server.js CHANGED
@@ -1,20 +1,33 @@
1
- import { createSSRServer } from "./core/createServer.js";
1
+ import { createSSRServer } from "./core/server/ssrServer.js";
2
2
  import path from "node:path";
3
+ import { readFileSync, writeFileSync } from "node:fs";
3
4
  import { fileURLToPath } from "node:url";
4
- import { readFileSync } from "node:fs";
5
5
  //#region src/standalone/server.ts
6
6
  var PORT = parseInt(process.env.SSR_PORT ?? "3002", 10);
7
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"));
8
12
  var getOfflineData = () => {
9
- const fileSchema = JSON.parse(readFileSync(path.resolve(__dirname, "schemas/basic", "space.json"), "utf-8"));
10
- const style = JSON.parse(readFileSync(path.resolve(__dirname, "schemas/basic", "style.json"), "utf-8"));
11
13
  const offlineData = {
12
- schema: fileSchema.schema,
13
- style
14
+ schema: readSchema(),
15
+ style: readStyle()
14
16
  };
15
17
  console.warn("[SSR] getOfflineData: using stub adapter — returning spaceId=1");
16
18
  return Promise.resolve(offlineData);
17
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
+ };
18
31
  var getSpaceDeployment = () => {
19
32
  console.warn("[SSR] getSpaceDeployment: using stub adapter — returning spaceId=1");
20
33
  return Promise.resolve({
@@ -45,13 +58,24 @@ var getRscData = async (_req, _spaceId, _environment, _revision, user, ids) => {
45
58
  };
46
59
  return { serverData: ids?.length ? Object.fromEntries(ids.filter((id) => id in all).map((id) => [id, all[id]])) : all };
47
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
+ };
48
68
  var adapters = {
49
69
  getOfflineData,
50
70
  getSpaceDeployment,
51
- getRscData
71
+ getRscData,
72
+ saveOfflineData,
73
+ getSpaceId,
74
+ getSchema,
75
+ getStyle,
76
+ saveSchema,
77
+ saveStyle
52
78
  };
53
- var __filename = fileURLToPath(import.meta.url);
54
- var __dirname = path.dirname(__filename);
55
79
  createSSRServer({
56
80
  port: PORT,
57
81
  host: HOST,
@@ -59,6 +83,7 @@ createSSRServer({
59
83
  devMode: false,
60
84
  static: { "/sdk-assets": path.resolve(process.cwd(), "../sdk/dist") },
61
85
  httpVersion: 1,
86
+ mcpAi: { enabled: true },
62
87
  plugins: {
63
88
  serverInfo: {
64
89
  js: path.resolve(__dirname, "plugins/ServerInfo.tsx"),
@@ -1,2 +1,6 @@
1
1
  import { SSRServer, SSRServerConfig } from '@plitzi/sdk-shared';
2
- export declare const createSSRServer: (config: SSRServerConfig) => SSRServer;
2
+ export { createSSRServer } from './server/ssrServer';
3
+ export { createMCPServer } from './server/mcpServer';
4
+ export { resolveServices } from './services/resolve';
5
+ export type { ResolvedServices } from './services/resolve';
6
+ export declare const createServer: (config: SSRServerConfig) => SSRServer;
@@ -0,0 +1,10 @@
1
+ export type HealthCheckApp = {
2
+ get: (path: string, handler: (...args: any[]) => void) => void;
3
+ };
4
+ export interface HealthIdentity {
5
+ role: string;
6
+ name?: string;
7
+ version?: string;
8
+ }
9
+ export declare const buildHealthPayload: (identity?: Partial<HealthIdentity>) => Record<string, unknown>;
10
+ export declare const registerHealthCheck: (app: HealthCheckApp, identity: HealthIdentity) => void;
@@ -0,0 +1,7 @@
1
+ import { BaseContext, Stage } from './types';
2
+ import { RawResponse } from '../../helpers/buildResponseHelpers';
3
+ import { Handler } from '../transports';
4
+ import { SSRRequest, SSRResponseHelpers } from '@plitzi/sdk-shared';
5
+ import { IncomingMessage } from 'node:http';
6
+ export type BuildContext<C extends BaseContext> = (raw: IncomingMessage, rawRes: RawResponse, req: SSRRequest, res: SSRResponseHelpers) => C;
7
+ export declare const makeHandler: <C extends BaseContext>(label: string, buildContext: BuildContext<C>, stages: Stage<C>[]) => Handler;
@@ -0,0 +1,2 @@
1
+ import { SSRResponseHelpers, SSRServerConfig } from '@plitzi/sdk-shared';
2
+ export declare const applySecurityHeaders: (res: SSRResponseHelpers, config: SSRServerConfig, port: number) => void;
@@ -0,0 +1,4 @@
1
+ import { Stage } from '../types';
2
+ export declare const loginStage: Stage;
3
+ export declare const logoutStage: Stage;
4
+ export declare const authRoutesStages: Stage[];
@@ -0,0 +1,2 @@
1
+ import { Stage } from '../types';
2
+ export declare const healthStage: Stage;
@@ -0,0 +1,2 @@
1
+ import { Stage } from '../types';
2
+ export declare const middlewaresStage: Stage;
@@ -0,0 +1,2 @@
1
+ import { SSRContext, Stage } from '../types';
2
+ export declare const pluginAssetsStage: Stage<SSRContext>;
@@ -0,0 +1,5 @@
1
+ import { Stage } from '../types';
2
+ export declare const builtinPublicStage: Stage;
3
+ export declare const publicDirStage: Stage;
4
+ export declare const wellKnownStage: Stage;
5
+ export declare const configStaticStage: Stage;