@plitzi/sdk-server 0.32.24 → 0.33.0

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 (512) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +326 -162
  3. package/dist/adapters/authAdapters.d.ts +21 -0
  4. package/dist/adapters/authAdapters.js +12 -0
  5. package/dist/adapters/jsonAdapters.d.ts +15 -0
  6. package/dist/adapters/jsonAdapters.js +9 -4
  7. package/dist/core/auth/api.d.ts +148 -0
  8. package/dist/core/auth/api.js +286 -0
  9. package/dist/core/auth/authorize.d.ts +96 -0
  10. package/dist/core/auth/authorize.js +92 -0
  11. package/dist/core/auth/createAuth.d.ts +165 -0
  12. package/dist/core/auth/createAuth.js +105 -0
  13. package/dist/core/auth/credentials.d.ts +29 -0
  14. package/dist/core/auth/credentials.js +48 -0
  15. package/dist/core/auth/domains.d.ts +41 -0
  16. package/dist/core/auth/domains.js +78 -0
  17. package/dist/core/auth/identity.d.ts +108 -0
  18. package/dist/core/auth/identity.js +164 -0
  19. package/dist/core/auth/oauth/client.d.ts +5 -0
  20. package/dist/core/auth/oauth/client.js +47 -0
  21. package/dist/core/auth/oauth/index.d.ts +78 -0
  22. package/dist/core/auth/oauth/index.js +113 -0
  23. package/dist/core/auth/oauth/providers/github.d.ts +2 -0
  24. package/dist/core/auth/oauth/providers/github.js +48 -0
  25. package/dist/core/auth/oauth/providers/google.d.ts +2 -0
  26. package/dist/core/auth/oauth/providers/google.js +30 -0
  27. package/dist/core/auth/oauth/state.d.ts +23 -0
  28. package/dist/core/auth/oauth/state.js +55 -0
  29. package/dist/core/auth/oauth/types.d.ts +51 -0
  30. package/dist/core/auth/oauth/types.js +13 -0
  31. package/dist/core/auth/routes.d.ts +50 -0
  32. package/dist/core/auth/routes.js +129 -0
  33. package/dist/core/auth/session.d.ts +128 -0
  34. package/dist/core/auth/session.js +165 -0
  35. package/dist/core/auth/spaceTokens.d.ts +137 -0
  36. package/dist/core/auth/spaceTokens.js +212 -0
  37. package/dist/core/auth/tokens.d.ts +151 -0
  38. package/dist/core/auth/tokens.js +221 -0
  39. package/dist/core/createServer.d.ts +29 -0
  40. package/dist/core/createServer.js +28 -14
  41. package/dist/core/handlers/authMiddleware.d.ts +27 -0
  42. package/dist/core/handlers/authMiddleware.js +38 -0
  43. package/dist/core/handlers/authRouteHandlers.d.ts +46 -0
  44. package/dist/core/handlers/authRouteHandlers.js +75 -0
  45. package/dist/core/handlers/types.d.ts +37 -0
  46. package/dist/{src/core → core}/http/dispatcher.d.ts +2 -2
  47. package/dist/core/http/dispatcher.js +8 -6
  48. package/dist/core/http/navigation.d.ts +11 -0
  49. package/dist/core/http/navigation.js +16 -0
  50. package/dist/core/http/securityHeaders.js +6 -4
  51. package/dist/core/http/stages/authApi.d.ts +17 -0
  52. package/dist/core/http/stages/authApi.js +66 -0
  53. package/dist/core/http/stages/authRoutes.js +40 -11
  54. package/dist/core/http/stages/exchangeRoute.d.ts +15 -0
  55. package/dist/core/http/stages/exchangeRoute.js +67 -0
  56. package/dist/core/http/stages/health.d.ts +11 -0
  57. package/dist/core/http/stages/health.js +25 -3
  58. package/dist/core/http/stages/middlewares.d.ts +2 -0
  59. package/dist/core/http/stages/static.d.ts +13 -0
  60. package/dist/core/http/stages/static.js +21 -6
  61. package/dist/core/http/types.d.ts +35 -0
  62. package/dist/{modules/mcp/constants.js → core/previewToken.js} +1 -1
  63. package/dist/core/sdkAssets.d.ts +16 -0
  64. package/dist/core/sdkAssets.js +46 -0
  65. package/dist/core/server/baseServer.js +40 -5
  66. package/dist/core/server/pageServer.d.ts +7 -0
  67. package/dist/core/server/pageServer.js +13 -17
  68. package/dist/core/services/action.d.ts +9 -0
  69. package/dist/core/services/action.js +21 -0
  70. package/dist/core/services/registry.d.ts +3 -0
  71. package/dist/core/services/registry.js +9 -19
  72. package/dist/{src/core → core}/services/resolve.d.ts +1 -0
  73. package/dist/core/services/resolve.js +6 -4
  74. package/dist/core/services/rsc.js +3 -2
  75. package/dist/core/staticFiles.js +1 -1
  76. package/dist/{src/core → core}/transports.d.ts +3 -0
  77. package/dist/core/transports.js +7 -6
  78. package/dist/handlers.d.ts +58 -0
  79. package/dist/handlers.js +3 -0
  80. package/dist/{src/helpers → helpers}/buildResponseHelpers.d.ts +2 -1
  81. package/dist/helpers/buildResponseHelpers.js +13 -4
  82. package/dist/helpers/buildServerInfo.d.ts +3 -0
  83. package/dist/helpers/buildServerInfo.js +25 -3
  84. package/dist/{src/helpers → helpers}/cache/keys.d.ts +5 -1
  85. package/dist/helpers/cache/keys.js +1 -1
  86. package/dist/helpers/compress.d.ts +18 -0
  87. package/dist/helpers/compress.js +47 -11
  88. package/dist/helpers/offlineDataLoader.d.ts +11 -0
  89. package/dist/helpers/offlineDataLoader.js +15 -0
  90. package/dist/helpers/resolveDebugMode.d.ts +10 -0
  91. package/dist/helpers/resolveDebugMode.js +13 -0
  92. package/dist/index.d.ts +16 -2
  93. package/dist/index.js +9 -20
  94. package/dist/kernel.d.ts +41 -0
  95. package/dist/kernel.js +22 -0
  96. package/dist/middlewares/spaceDeployment.d.ts +2 -0
  97. package/dist/middlewares/spaceDeployment.js +2 -1
  98. package/dist/modules/actions/handler.d.ts +11 -0
  99. package/dist/modules/actions/handler.js +77 -0
  100. package/dist/modules/connectors/engine.d.ts +42 -0
  101. package/dist/modules/connectors/engine.js +221 -0
  102. package/dist/modules/connectors/getByPath.d.ts +8 -0
  103. package/dist/modules/connectors/getByPath.js +21 -0
  104. package/dist/modules/connectors/index.d.ts +7 -0
  105. package/dist/modules/connectors/projection.d.ts +18 -0
  106. package/dist/modules/connectors/projection.js +108 -0
  107. package/dist/modules/connectors/resolver.d.ts +18 -0
  108. package/dist/modules/connectors/resolver.js +68 -0
  109. package/dist/modules/connectors/types.d.ts +19 -0
  110. package/dist/{src/modules → modules}/rsc/handler.d.ts +2 -2
  111. package/dist/modules/rsc/handler.js +54 -2
  112. package/dist/modules/rsc/resolveRscData.d.ts +35 -0
  113. package/dist/modules/rsc/resolveRscData.js +74 -0
  114. package/dist/{src/modules → modules}/ssr/Component.d.ts +4 -1
  115. package/dist/modules/ssr/Component.js +10 -3
  116. package/dist/modules/ssr/buildBody.d.ts +9 -0
  117. package/dist/modules/ssr/handler.d.ts +4 -0
  118. package/dist/modules/ssr/handler.js +18 -1
  119. package/dist/{src/modules → modules}/ssr/loadPluginComponents.d.ts +5 -2
  120. package/dist/modules/ssr/loadPluginComponents.js +20 -2
  121. package/dist/{src/modules → modules}/ssr/prepareRender.d.ts +2 -2
  122. package/dist/modules/ssr/prepareRender.js +24 -7
  123. package/dist/modules/ssr/preview.d.ts +10 -0
  124. package/dist/modules/ssr/preview.js +5 -78
  125. package/dist/modules/ssr/registerExternalPlugins.js +1 -1
  126. package/dist/modules/ssr/streamBody.d.ts +5 -0
  127. package/dist/modules/ssr/streamBody.js +1 -1
  128. package/dist/modules/ssr/template.d.ts +2 -0
  129. package/dist/modules/ssr/template.js +1 -1
  130. package/dist/plugins/compile.js +1 -1
  131. package/dist/plugins/manager.js +12 -8
  132. package/dist/ssr.d.ts +15 -0
  133. package/dist/ssr.js +4 -0
  134. package/package.json +29 -25
  135. package/dist/.gitkeep +0 -0
  136. package/dist/core/server/mcpServer.js +0 -29
  137. package/dist/core/services/mcp.js +0 -27
  138. package/dist/core/services/oauth.js +0 -116
  139. package/dist/core/services/preview.js +0 -37
  140. package/dist/core/services/proxy.js +0 -12
  141. package/dist/mcp.d.ts +0 -2
  142. package/dist/mcp.js +0 -7
  143. package/dist/modules/ai/AIEngine.js +0 -120
  144. package/dist/modules/ai/toolkit.js +0 -59
  145. package/dist/modules/mcp/apps/example/view/index.tsx +0 -70
  146. package/dist/modules/mcp/apps/index.js +0 -16
  147. package/dist/modules/mcp/apps/render/index.js +0 -17
  148. package/dist/modules/mcp/apps/render/styles.js +0 -54
  149. package/dist/modules/mcp/apps/render/view/heldBatch.ts +0 -107
  150. package/dist/modules/mcp/apps/render/view/index.tsx +0 -314
  151. package/dist/modules/mcp/apps/render/view/streamProgress.ts +0 -137
  152. package/dist/modules/mcp/apps/shared/assets.js +0 -10
  153. package/dist/modules/mcp/apps/shared/bundle.js +0 -23
  154. package/dist/modules/mcp/apps/shared/page.js +0 -34
  155. package/dist/modules/mcp/apps/shared/registerApp.js +0 -43
  156. package/dist/modules/mcp/apps/shared/resolve.js +0 -5
  157. package/dist/modules/mcp/apps/shared/shell.ejs +0 -59
  158. package/dist/modules/mcp/apps/shared/zodEnglishOnly.js +0 -23
  159. package/dist/modules/mcp/catalogs/builtinCallbacks.js +0 -204
  160. package/dist/modules/mcp/catalogs/builtinComponents.js +0 -170
  161. package/dist/modules/mcp/catalogs/builtinElementCallbacks.js +0 -50
  162. package/dist/modules/mcp/catalogs/builtinTransformers.js +0 -148
  163. package/dist/modules/mcp/catalogs/builtinUtilities.js +0 -90
  164. package/dist/modules/mcp/catalogs/cssCatalog/border.js +0 -30
  165. package/dist/modules/mcp/catalogs/cssCatalog/box.js +0 -31
  166. package/dist/modules/mcp/catalogs/cssCatalog/helpers.js +0 -185
  167. package/dist/modules/mcp/catalogs/cssCatalog/index.js +0 -131
  168. package/dist/modules/mcp/catalogs/cssCatalog/layout.js +0 -98
  169. package/dist/modules/mcp/catalogs/cssCatalog/visual.js +0 -144
  170. package/dist/modules/mcp/catalogs/observed.js +0 -90
  171. package/dist/modules/mcp/catalogs/paramSpec.js +0 -69
  172. package/dist/modules/mcp/catalogs/registry.js +0 -89
  173. package/dist/modules/mcp/handler.js +0 -83
  174. package/dist/modules/mcp/helpers/agentPrompt.js +0 -104
  175. package/dist/modules/mcp/helpers/computeVersion.js +0 -16
  176. package/dist/modules/mcp/helpers/guide.js +0 -467
  177. package/dist/modules/mcp/helpers/interactions.js +0 -123
  178. package/dist/modules/mcp/helpers/log.js +0 -64
  179. package/dist/modules/mcp/helpers/opResult.js +0 -18
  180. package/dist/modules/mcp/helpers/space.js +0 -300
  181. package/dist/modules/mcp/helpers/uris.js +0 -44
  182. package/dist/modules/mcp/previewClient.js +0 -31
  183. package/dist/modules/mcp/proxy/config.js +0 -46
  184. package/dist/modules/mcp/proxy/fetch.js +0 -91
  185. package/dist/modules/mcp/proxy/grant.js +0 -65
  186. package/dist/modules/mcp/proxy/guard.js +0 -38
  187. package/dist/modules/mcp/proxy/handler.js +0 -68
  188. package/dist/modules/mcp/proxy/rewrite.js +0 -72
  189. package/dist/modules/mcp/proxy/sign.js +0 -15
  190. package/dist/modules/mcp/proxy/types.js +0 -9
  191. package/dist/modules/mcp/resources/canonical.js +0 -30
  192. package/dist/modules/mcp/resources/core.js +0 -18
  193. package/dist/modules/mcp/resources/envelope.js +0 -14
  194. package/dist/modules/mcp/resources/primer.js +0 -31
  195. package/dist/modules/mcp/resources/register.js +0 -190
  196. package/dist/modules/mcp/resources/renderGuide.js +0 -451
  197. package/dist/modules/mcp/resources/router.js +0 -37
  198. package/dist/modules/mcp/resources/schema.js +0 -43
  199. package/dist/modules/mcp/resources/style.js +0 -34
  200. package/dist/modules/mcp/screenshotClient.js +0 -47
  201. package/dist/modules/mcp/server.js +0 -113
  202. package/dist/modules/mcp/tools/apply/dispatch.js +0 -105
  203. package/dist/modules/mcp/tools/apply/index.js +0 -150
  204. package/dist/modules/mcp/tools/apply/writeResult.js +0 -37
  205. package/dist/modules/mcp/tools/index.js +0 -24
  206. package/dist/modules/mcp/tools/operations/index.js +0 -45
  207. package/dist/modules/mcp/tools/operations/schema/bindings/deleteBinding.js +0 -32
  208. package/dist/modules/mcp/tools/operations/schema/bindings/patchBinding.js +0 -36
  209. package/dist/modules/mcp/tools/operations/schema/bindings/upsertBinding.js +0 -47
  210. package/dist/modules/mcp/tools/operations/schema/elements/deleteElement.js +0 -29
  211. package/dist/modules/mcp/tools/operations/schema/elements/moveElement.js +0 -41
  212. package/dist/modules/mcp/tools/operations/schema/elements/patchElement.js +0 -58
  213. package/dist/modules/mcp/tools/operations/schema/elements/repeatElement.js +0 -148
  214. package/dist/modules/mcp/tools/operations/schema/elements/upsertElement.js +0 -65
  215. package/dist/modules/mcp/tools/operations/schema/folders/deleteFolder.js +0 -30
  216. package/dist/modules/mcp/tools/operations/schema/folders/upsertFolder.js +0 -49
  217. package/dist/modules/mcp/tools/operations/schema/interactions/deleteInteraction.js +0 -52
  218. package/dist/modules/mcp/tools/operations/schema/interactions/patchInteractionNode.js +0 -47
  219. package/dist/modules/mcp/tools/operations/schema/interactions/upsertInteractionFlow.js +0 -44
  220. package/dist/modules/mcp/tools/operations/schema/operations.js +0 -41
  221. package/dist/modules/mcp/tools/operations/schema/pages/deletePage.js +0 -25
  222. package/dist/modules/mcp/tools/operations/schema/pages/upsertPage.js +0 -75
  223. package/dist/modules/mcp/tools/operations/schema/settings/patchSettings.js +0 -45
  224. package/dist/modules/mcp/tools/operations/schema/shared.js +0 -122
  225. package/dist/modules/mcp/tools/operations/schema/translator.js +0 -215
  226. package/dist/modules/mcp/tools/operations/schema/variables/deleteVariable.js +0 -18
  227. package/dist/modules/mcp/tools/operations/schema/variables/upsertVariable.js +0 -42
  228. package/dist/modules/mcp/tools/operations/schema/write.js +0 -109
  229. package/dist/modules/mcp/tools/operations/schemaIds.js +0 -54
  230. package/dist/modules/mcp/tools/operations/style/definitions/deleteDefinition.js +0 -21
  231. package/dist/modules/mcp/tools/operations/style/definitions/patchDefinition.js +0 -28
  232. package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinition.js +0 -24
  233. package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinitions.js +0 -40
  234. package/dist/modules/mcp/tools/operations/style/globalStyles/deleteGlobalStyle.js +0 -21
  235. package/dist/modules/mcp/tools/operations/style/globalStyles/patchGlobalStyle.js +0 -28
  236. package/dist/modules/mcp/tools/operations/style/globalStyles/upsertGlobalStyle.js +0 -24
  237. package/dist/modules/mcp/tools/operations/style/idStyles/deleteIdStyle.js +0 -21
  238. package/dist/modules/mcp/tools/operations/style/idStyles/patchIdStyle.js +0 -28
  239. package/dist/modules/mcp/tools/operations/style/idStyles/upsertIdStyle.js +0 -24
  240. package/dist/modules/mcp/tools/operations/style/operations.js +0 -29
  241. package/dist/modules/mcp/tools/operations/style/shared.js +0 -59
  242. package/dist/modules/mcp/tools/operations/style/translator.js +0 -101
  243. package/dist/modules/mcp/tools/operations/style/variables/deleteStyleVariable.js +0 -21
  244. package/dist/modules/mcp/tools/operations/style/variables/upsertStyleVariable.js +0 -22
  245. package/dist/modules/mcp/tools/operations/style/write.js +0 -108
  246. package/dist/modules/mcp/tools/preview.js +0 -37
  247. package/dist/modules/mcp/tools/read.js +0 -51
  248. package/dist/modules/mcp/tools/render.js +0 -184
  249. package/dist/modules/mcp/tools/screenshot.js +0 -83
  250. package/dist/modules/mcp/tools/search.js +0 -115
  251. package/dist/modules/mcp/tools/shared/expandOperations.js +0 -44
  252. package/dist/modules/mcp/tools/shared/tool.js +0 -33
  253. package/dist/modules/mcp/tools/shared/validator/audit.js +0 -124
  254. package/dist/modules/mcp/tools/shared/validator/batch.js +0 -39
  255. package/dist/modules/mcp/tools/shared/validator/bindings.js +0 -70
  256. package/dist/modules/mcp/tools/shared/validator/context.js +0 -35
  257. package/dist/modules/mcp/tools/shared/validator/css.js +0 -39
  258. package/dist/modules/mcp/tools/shared/validator/elements.js +0 -68
  259. package/dist/modules/mcp/tools/shared/validator/index.js +0 -246
  260. package/dist/modules/mcp/tools/shared/validator/interactions.js +0 -103
  261. package/dist/modules/mcp/tools/shared/validator/refs.js +0 -28
  262. package/dist/modules/mcp/tools/validate.js +0 -47
  263. package/dist/modules/oauth/authorize.js +0 -177
  264. package/dist/modules/oauth/challenge.js +0 -33
  265. package/dist/modules/oauth/consentPage.js +0 -118
  266. package/dist/modules/oauth/metadata.js +0 -69
  267. package/dist/modules/oauth/params.js +0 -5
  268. package/dist/modules/oauth/pkce.js +0 -15
  269. package/dist/modules/oauth/records.js +0 -46
  270. package/dist/modules/oauth/register.js +0 -55
  271. package/dist/modules/oauth/respond.js +0 -44
  272. package/dist/modules/oauth/token.js +0 -100
  273. package/dist/public/.gitkeep +0 -0
  274. package/dist/src/adapters/jsonAdapters.d.ts +0 -7
  275. package/dist/src/core/createServer.d.ts +0 -14
  276. package/dist/src/core/http/stages/health.d.ts +0 -2
  277. package/dist/src/core/http/stages/middlewares.d.ts +0 -2
  278. package/dist/src/core/http/stages/static.d.ts +0 -5
  279. package/dist/src/core/http/types.d.ts +0 -22
  280. package/dist/src/core/server/mcpServer.d.ts +0 -2
  281. package/dist/src/core/server/pageServer.d.ts +0 -10
  282. package/dist/src/core/services/mcp.d.ts +0 -3
  283. package/dist/src/core/services/oauth.d.ts +0 -18
  284. package/dist/src/core/services/preview.d.ts +0 -2
  285. package/dist/src/core/services/proxy.d.ts +0 -2
  286. package/dist/src/core/services/registry.d.ts +0 -4
  287. package/dist/src/helpers/buildServerInfo.d.ts +0 -2
  288. package/dist/src/helpers/compress.d.ts +0 -3
  289. package/dist/src/index.d.ts +0 -15
  290. package/dist/src/mcp.d.ts +0 -14
  291. package/dist/src/middlewares/spaceDeployment.d.ts +0 -2
  292. package/dist/src/modules/ai/AIEngine.d.ts +0 -20
  293. package/dist/src/modules/ai/index.d.ts +0 -4
  294. package/dist/src/modules/ai/toolkit.d.ts +0 -17
  295. package/dist/src/modules/mcp/apps/example/index.d.ts +0 -8
  296. package/dist/src/modules/mcp/apps/index.d.ts +0 -11
  297. package/dist/src/modules/mcp/apps/render/index.d.ts +0 -4
  298. package/dist/src/modules/mcp/apps/render/styles.d.ts +0 -10
  299. package/dist/src/modules/mcp/apps/shared/assets.d.ts +0 -10
  300. package/dist/src/modules/mcp/apps/shared/bundle.d.ts +0 -4
  301. package/dist/src/modules/mcp/apps/shared/index.d.ts +0 -3
  302. package/dist/src/modules/mcp/apps/shared/page.d.ts +0 -2
  303. package/dist/src/modules/mcp/apps/shared/registerApp.d.ts +0 -5
  304. package/dist/src/modules/mcp/apps/shared/resolve.d.ts +0 -1
  305. package/dist/src/modules/mcp/apps/shared/zodEnglishOnly.d.ts +0 -4
  306. package/dist/src/modules/mcp/catalogs/builtinCallbacks.d.ts +0 -23
  307. package/dist/src/modules/mcp/catalogs/builtinComponents.d.ts +0 -4
  308. package/dist/src/modules/mcp/catalogs/builtinElementCallbacks.d.ts +0 -20
  309. package/dist/src/modules/mcp/catalogs/builtinTransformers.d.ts +0 -28
  310. package/dist/src/modules/mcp/catalogs/builtinUtilities.d.ts +0 -18
  311. package/dist/src/modules/mcp/catalogs/cssCatalog/border.d.ts +0 -4
  312. package/dist/src/modules/mcp/catalogs/cssCatalog/box.d.ts +0 -4
  313. package/dist/src/modules/mcp/catalogs/cssCatalog/helpers.d.ts +0 -34
  314. package/dist/src/modules/mcp/catalogs/cssCatalog/index.d.ts +0 -19
  315. package/dist/src/modules/mcp/catalogs/cssCatalog/layout.d.ts +0 -9
  316. package/dist/src/modules/mcp/catalogs/cssCatalog/visual.d.ts +0 -8
  317. package/dist/src/modules/mcp/catalogs/index.d.ts +0 -9
  318. package/dist/src/modules/mcp/catalogs/observed.d.ts +0 -48
  319. package/dist/src/modules/mcp/catalogs/paramSpec.d.ts +0 -42
  320. package/dist/src/modules/mcp/catalogs/registry.d.ts +0 -35
  321. package/dist/src/modules/mcp/e2e/index.d.ts +0 -6
  322. package/dist/src/modules/mcp/e2e/mcpEndpoint.d.ts +0 -27
  323. package/dist/src/modules/mcp/e2e/postMessageChannel.d.ts +0 -22
  324. package/dist/src/modules/mcp/e2e/renderingHost.d.ts +0 -34
  325. package/dist/src/modules/mcp/handler.d.ts +0 -22
  326. package/dist/src/modules/mcp/helpers/agentPrompt.d.ts +0 -4
  327. package/dist/src/modules/mcp/helpers/computeVersion.d.ts +0 -1
  328. package/dist/src/modules/mcp/helpers/guide.d.ts +0 -4
  329. package/dist/src/modules/mcp/helpers/index.d.ts +0 -8
  330. package/dist/src/modules/mcp/helpers/interactions.d.ts +0 -30
  331. package/dist/src/modules/mcp/helpers/log.d.ts +0 -8
  332. package/dist/src/modules/mcp/helpers/opResult.d.ts +0 -13
  333. package/dist/src/modules/mcp/helpers/space.d.ts +0 -115
  334. package/dist/src/modules/mcp/helpers/uris.d.ts +0 -28
  335. package/dist/src/modules/mcp/index.d.ts +0 -13
  336. package/dist/src/modules/mcp/previewClient.d.ts +0 -13
  337. package/dist/src/modules/mcp/proxy/config.d.ts +0 -17
  338. package/dist/src/modules/mcp/proxy/fetch.d.ts +0 -18
  339. package/dist/src/modules/mcp/proxy/grant.d.ts +0 -23
  340. package/dist/src/modules/mcp/proxy/guard.d.ts +0 -6
  341. package/dist/src/modules/mcp/proxy/handler.d.ts +0 -8
  342. package/dist/src/modules/mcp/proxy/index.d.ts +0 -7
  343. package/dist/src/modules/mcp/proxy/rewrite.d.ts +0 -13
  344. package/dist/src/modules/mcp/proxy/sign.d.ts +0 -6
  345. package/dist/src/modules/mcp/proxy/types.d.ts +0 -45
  346. package/dist/src/modules/mcp/resources/canonical.d.ts +0 -6
  347. package/dist/src/modules/mcp/resources/core.d.ts +0 -5
  348. package/dist/src/modules/mcp/resources/envelope.d.ts +0 -10
  349. package/dist/src/modules/mcp/resources/index.d.ts +0 -8
  350. package/dist/src/modules/mcp/resources/primer.d.ts +0 -7
  351. package/dist/src/modules/mcp/resources/register.d.ts +0 -10
  352. package/dist/src/modules/mcp/resources/renderGuide.d.ts +0 -10
  353. package/dist/src/modules/mcp/resources/router.d.ts +0 -10
  354. package/dist/src/modules/mcp/resources/schema.d.ts +0 -5
  355. package/dist/src/modules/mcp/resources/style.d.ts +0 -5
  356. package/dist/src/modules/mcp/screenshotClient.d.ts +0 -13
  357. package/dist/src/modules/mcp/server.d.ts +0 -31
  358. package/dist/src/modules/mcp/tests/helpers.d.ts +0 -13
  359. package/dist/src/modules/mcp/tools/apply/dispatch.d.ts +0 -6
  360. package/dist/src/modules/mcp/tools/apply/index.d.ts +0 -470
  361. package/dist/src/modules/mcp/tools/apply/writeResult.d.ts +0 -8
  362. package/dist/src/modules/mcp/tools/index.d.ts +0 -18
  363. package/dist/src/modules/mcp/tools/operations/index.d.ts +0 -928
  364. package/dist/src/modules/mcp/tools/operations/schema/bindings/deleteBinding.d.ts +0 -17
  365. package/dist/src/modules/mcp/tools/operations/schema/bindings/patchBinding.d.ts +0 -25
  366. package/dist/src/modules/mcp/tools/operations/schema/bindings/upsertBinding.d.ts +0 -27
  367. package/dist/src/modules/mcp/tools/operations/schema/elements/deleteElement.d.ts +0 -10
  368. package/dist/src/modules/mcp/tools/operations/schema/elements/moveElement.d.ts +0 -16
  369. package/dist/src/modules/mcp/tools/operations/schema/elements/patchElement.d.ts +0 -22
  370. package/dist/src/modules/mcp/tools/operations/schema/elements/repeatElement.d.ts +0 -55
  371. package/dist/src/modules/mcp/tools/operations/schema/elements/upsertElement.d.ts +0 -16
  372. package/dist/src/modules/mcp/tools/operations/schema/folders/deleteFolder.d.ts +0 -9
  373. package/dist/src/modules/mcp/tools/operations/schema/folders/upsertFolder.d.ts +0 -12
  374. package/dist/src/modules/mcp/tools/operations/schema/index.d.ts +0 -21
  375. package/dist/src/modules/mcp/tools/operations/schema/interactions/deleteInteraction.d.ts +0 -12
  376. package/dist/src/modules/mcp/tools/operations/schema/interactions/patchInteractionNode.d.ts +0 -18
  377. package/dist/src/modules/mcp/tools/operations/schema/interactions/upsertInteractionFlow.d.ts +0 -27
  378. package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +0 -229
  379. package/dist/src/modules/mcp/tools/operations/schema/pages/deletePage.d.ts +0 -9
  380. package/dist/src/modules/mcp/tools/operations/schema/pages/upsertPage.d.ts +0 -14
  381. package/dist/src/modules/mcp/tools/operations/schema/settings/patchSettings.d.ts +0 -34
  382. package/dist/src/modules/mcp/tools/operations/schema/shared.d.ts +0 -92
  383. package/dist/src/modules/mcp/tools/operations/schema/translator.d.ts +0 -12
  384. package/dist/src/modules/mcp/tools/operations/schema/variables/deleteVariable.d.ts +0 -9
  385. package/dist/src/modules/mcp/tools/operations/schema/variables/upsertVariable.d.ts +0 -16
  386. package/dist/src/modules/mcp/tools/operations/schema/write.d.ts +0 -42
  387. package/dist/src/modules/mcp/tools/operations/schemaIds.d.ts +0 -6
  388. package/dist/src/modules/mcp/tools/operations/style/definitions/deleteDefinition.d.ts +0 -9
  389. package/dist/src/modules/mcp/tools/operations/style/definitions/patchDefinition.d.ts +0 -37
  390. package/dist/src/modules/mcp/tools/operations/style/definitions/upsertDefinition.d.ts +0 -37
  391. package/dist/src/modules/mcp/tools/operations/style/definitions/upsertDefinitions.d.ts +0 -41
  392. package/dist/src/modules/mcp/tools/operations/style/globalStyles/deleteGlobalStyle.d.ts +0 -9
  393. package/dist/src/modules/mcp/tools/operations/style/globalStyles/patchGlobalStyle.d.ts +0 -37
  394. package/dist/src/modules/mcp/tools/operations/style/globalStyles/upsertGlobalStyle.d.ts +0 -37
  395. package/dist/src/modules/mcp/tools/operations/style/idStyles/deleteIdStyle.d.ts +0 -9
  396. package/dist/src/modules/mcp/tools/operations/style/idStyles/patchIdStyle.d.ts +0 -37
  397. package/dist/src/modules/mcp/tools/operations/style/idStyles/upsertIdStyle.d.ts +0 -37
  398. package/dist/src/modules/mcp/tools/operations/style/index.d.ts +0 -15
  399. package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +0 -264
  400. package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +0 -116
  401. package/dist/src/modules/mcp/tools/operations/style/translator.d.ts +0 -12
  402. package/dist/src/modules/mcp/tools/operations/style/variables/deleteStyleVariable.d.ts +0 -15
  403. package/dist/src/modules/mcp/tools/operations/style/variables/upsertStyleVariable.d.ts +0 -20
  404. package/dist/src/modules/mcp/tools/operations/style/write.d.ts +0 -12
  405. package/dist/src/modules/mcp/tools/preview.d.ts +0 -465
  406. package/dist/src/modules/mcp/tools/read.d.ts +0 -9
  407. package/dist/src/modules/mcp/tools/render.d.ts +0 -499
  408. package/dist/src/modules/mcp/tools/render.test.d.ts +0 -1
  409. package/dist/src/modules/mcp/tools/screenshot.d.ts +0 -470
  410. package/dist/src/modules/mcp/tools/search.d.ts +0 -15
  411. package/dist/src/modules/mcp/tools/shared/expandOperations.d.ts +0 -13
  412. package/dist/src/modules/mcp/tools/shared/tool.d.ts +0 -72
  413. package/dist/src/modules/mcp/tools/shared/validator/audit.d.ts +0 -4
  414. package/dist/src/modules/mcp/tools/shared/validator/batch.d.ts +0 -5
  415. package/dist/src/modules/mcp/tools/shared/validator/bindings.d.ts +0 -6
  416. package/dist/src/modules/mcp/tools/shared/validator/context.d.ts +0 -38
  417. package/dist/src/modules/mcp/tools/shared/validator/css.d.ts +0 -4
  418. package/dist/src/modules/mcp/tools/shared/validator/elements.d.ts +0 -7
  419. package/dist/src/modules/mcp/tools/shared/validator/index.d.ts +0 -8
  420. package/dist/src/modules/mcp/tools/shared/validator/interactions.d.ts +0 -3
  421. package/dist/src/modules/mcp/tools/shared/validator/refs.d.ts +0 -4
  422. package/dist/src/modules/mcp/tools/validate.d.ts +0 -467
  423. package/dist/src/modules/mcp/types/aiSchema.d.ts +0 -218
  424. package/dist/src/modules/mcp/types/appTypes.d.ts +0 -26
  425. package/dist/src/modules/mcp/types/index.d.ts +0 -5
  426. package/dist/src/modules/mcp/types/previewTypes.d.ts +0 -25
  427. package/dist/src/modules/mcp/types/screenshotTypes.d.ts +0 -29
  428. package/dist/src/modules/mcp/types/toolTypes.d.ts +0 -138
  429. package/dist/src/modules/oauth/authorize.d.ts +0 -7
  430. package/dist/src/modules/oauth/challenge.d.ts +0 -11
  431. package/dist/src/modules/oauth/consentPage.d.ts +0 -7
  432. package/dist/src/modules/oauth/metadata.d.ts +0 -40
  433. package/dist/src/modules/oauth/params.d.ts +0 -5
  434. package/dist/src/modules/oauth/pkce.d.ts +0 -6
  435. package/dist/src/modules/oauth/records.d.ts +0 -71
  436. package/dist/src/modules/oauth/register.d.ts +0 -5
  437. package/dist/src/modules/oauth/respond.d.ts +0 -13
  438. package/dist/src/modules/oauth/token.d.ts +0 -5
  439. package/dist/src/modules/ssr/buildBody.d.ts +0 -9
  440. package/dist/src/modules/ssr/handler.d.ts +0 -4
  441. package/dist/src/modules/ssr/preview.d.ts +0 -16
  442. package/dist/src/modules/ssr/streamBody.d.ts +0 -5
  443. package/dist/src/modules/ssr/template.d.ts +0 -6
  444. package/dist/src/standalone/alias-loader.d.mts +0 -2
  445. package/dist/src/standalone/plugins/ClientInfo.d.ts +0 -2
  446. package/dist/src/standalone/plugins/ServerInfo.d.ts +0 -2
  447. package/dist/src/standalone/plugins/SharedInfo.d.ts +0 -2
  448. package/dist/src/standalone/plugins/styles.d.ts +0 -5
  449. package/dist/src/standalone/register-alias.d.mts +0 -1
  450. package/dist/src/standalone/server.d.ts +0 -1
  451. package/dist/src/standalone/stubs/react-syntax-highlighter.d.mts +0 -31
  452. package/skills/plitzi-render/SKILL.md +0 -174
  453. /package/dist/{src/core/http/dispatcher.test.d.ts → core/auth/api.test.d.ts} +0 -0
  454. /package/dist/{src/core/server/mcpServer.test.d.ts → core/auth/authorize.test.d.ts} +0 -0
  455. /package/dist/{src/modules/ai/toolkit.test.d.ts → core/auth/createAuth.test.d.ts} +0 -0
  456. /package/dist/{src/modules/mcp/apps/apps.test.d.ts → core/auth/domains.test.d.ts} +0 -0
  457. /package/dist/{src/modules/mcp/apps/render/styles.test.d.ts → core/auth/identity.test.d.ts} +0 -0
  458. /package/dist/{src/modules → core/auth}/oauth/oauth.test.d.ts +0 -0
  459. /package/dist/{src/modules/mcp/catalogs/builtinTransformers.test.d.ts → core/auth/routes.test.d.ts} +0 -0
  460. /package/dist/{src/modules/mcp/catalogs/cssCatalog/cssCatalog.test.d.ts → core/auth/session.test.d.ts} +0 -0
  461. /package/dist/{src/modules/mcp/e2e/connector.test.d.ts → core/auth/spaceTokens.test.d.ts} +0 -0
  462. /package/dist/{src/modules/mcp/e2e/host.test.d.ts → core/auth/tokens.test.d.ts} +0 -0
  463. /package/dist/{src/modules/mcp/e2e/oauthConnector.test.d.ts → core/createServer.test.d.ts} +0 -0
  464. /package/dist/{src/modules/mcp/helpers/log.test.d.ts → core/handlers/handlers.test.d.ts} +0 -0
  465. /package/dist/{src/core → core}/health.d.ts +0 -0
  466. /package/dist/{src/modules/mcp/mcp.bench.d.ts → core/http/dispatcher.test.d.ts} +0 -0
  467. /package/dist/{src/core → core}/http/securityHeaders.d.ts +0 -0
  468. /package/dist/{src/core → core}/http/stages/authRoutes.d.ts +0 -0
  469. /package/dist/{src/core → core}/http/stages/pluginAssets.d.ts +0 -0
  470. /package/dist/{src/core → core}/mimeTypes.d.ts +0 -0
  471. /package/dist/{src/modules/mcp/constants.d.ts → core/previewToken.d.ts} +0 -0
  472. /package/dist/{src/core → core}/requestParser.d.ts +0 -0
  473. /package/dist/{src/core → core}/server/baseServer.d.ts +0 -0
  474. /package/dist/{src/modules/mcp/proxy/endpoint.test.d.ts → core/server/baseServer.test.d.ts} +0 -0
  475. /package/dist/{src/modules/mcp/proxy/proxy.test.d.ts → core/services/resolve.test.d.ts} +0 -0
  476. /package/dist/{src/core → core}/services/rsc.d.ts +0 -0
  477. /package/dist/{src/core → core}/services/ssr.d.ts +0 -0
  478. /package/dist/{src/core → core}/staticFiles.d.ts +0 -0
  479. /package/dist/{src/modules/mcp/proxy/wiring.test.d.ts → helpers/buildResponseHelpers.test.d.ts} +0 -0
  480. /package/dist/{src/helpers → helpers}/cache/TtlCache.d.ts +0 -0
  481. /package/dist/{src/helpers → helpers}/cache/cacheManager.d.ts +0 -0
  482. /package/dist/{src/helpers → helpers}/cache/defaults.d.ts +0 -0
  483. /package/dist/{src/helpers → helpers}/cache/index.d.ts +0 -0
  484. /package/dist/{src/modules/mcp/tests/apply.test.d.ts → helpers/cache/keys.test.d.ts} +0 -0
  485. /package/dist/{src/helpers → helpers}/cache/serverCaches.d.ts +0 -0
  486. /package/dist/{src/modules/mcp/tests/bindings.test.d.ts → helpers/compress.test.d.ts} +0 -0
  487. /package/dist/{src/helpers → helpers}/escapeJson.d.ts +0 -0
  488. /package/dist/{src/helpers → helpers}/metrics.d.ts +0 -0
  489. /package/dist/{src/helpers → helpers}/normalizePlugins.d.ts +0 -0
  490. /package/dist/{src/modules/mcp/tests/css.test.d.ts → helpers/offlineDataLoader.test.d.ts} +0 -0
  491. /package/dist/{src/helpers → helpers}/readCookie.d.ts +0 -0
  492. /package/dist/{src/modules/mcp/tests/interactions.test.d.ts → helpers/resolveDebugMode.test.d.ts} +0 -0
  493. /package/dist/{src/helpers → helpers}/runMiddlewares.d.ts +0 -0
  494. /package/dist/{src/helpers → helpers}/serverLog.d.ts +0 -0
  495. /package/dist/{src/middlewares → middlewares}/auth.d.ts +0 -0
  496. /package/dist/{src/middlewares → middlewares}/basicAuth.d.ts +0 -0
  497. /package/dist/{src/modules/mcp/tests/pages.test.d.ts → middlewares/spaceDeployment.test.d.ts} +0 -0
  498. /package/dist/{src/modules/mcp/tests/reads.test.d.ts → modules/actions/handler.test.d.ts} +0 -0
  499. /package/dist/{src/modules/mcp/tests/schemaIds.test.d.ts → modules/connectors/engine.test.d.ts} +0 -0
  500. /package/dist/{src/modules/mcp/tests/search.test.d.ts → modules/connectors/projection.test.d.ts} +0 -0
  501. /package/dist/{src/modules/mcp/tests/skill.test.d.ts → modules/connectors/resolver.test.d.ts} +0 -0
  502. /package/dist/{src/modules/mcp/tests/styles.test.d.ts → modules/rsc/resolveRscData.test.d.ts} +0 -0
  503. /package/dist/{src/modules → modules}/ssr/applySSRResult.d.ts +0 -0
  504. /package/dist/{src/modules/mcp/tests/tools.test.d.ts → modules/ssr/loadPluginComponents.test.d.ts} +0 -0
  505. /package/dist/{src/modules/mcp/tests/validation.test.d.ts → modules/ssr/metering.test.d.ts} +0 -0
  506. /package/dist/{src/modules → modules}/ssr/registerExternalPlugins.d.ts +0 -0
  507. /package/dist/{src/plugins → plugins}/compile.d.ts +0 -0
  508. /package/dist/{src/plugins → plugins}/copy.d.ts +0 -0
  509. /package/dist/{src/plugins → plugins}/detect.d.ts +0 -0
  510. /package/dist/{src/plugins → plugins}/manager.d.ts +0 -0
  511. /package/dist/{src/plugins → plugins}/validate.d.ts +0 -0
  512. /package/dist/{src/plugins → plugins}/validate.test.d.ts +0 -0
@@ -1,451 +0,0 @@
1
- import { BUILTIN_COMPONENTS } from "../catalogs/builtinComponents.js";
2
- import { envelope, jsonContents } from "./envelope.js";
3
- //#region src/modules/mcp/resources/renderGuide.ts
4
- var RENDER_GUIDE_URI = "plitzi://render/guide";
5
- var RENDER_TYPES_URI = "plitzi://render/types";
6
- var RENDER_TYPE_CATEGORIES = /* @__PURE__ */ new Set([
7
- "structure",
8
- "basic",
9
- "media",
10
- "form",
11
- "provider"
12
- ]);
13
- var RENDER_RAW_HTML_TYPE = "blockHtml";
14
- var rawHtmlDescription = "Renders a raw HTML string (props.content) — in a widget, the way to draw an inline <svg>: a logo, an icon, a sparkline, a decorative shape. Use fill/stroke \"currentColor\" so it takes the host theme. Markup only: <script>, javascript: URLs and inline on* handlers are rejected.";
15
- var renderTypesNote = "The built-in element types you can put in a plitzi_render widget, grouped by category. Pick by `description`. For the props of each type and the full authoring model, read plitzi://render/guide. Types that need a backend (providers) or a plugin are omitted because the widget renders offline.";
16
- var renderTypes = () => {
17
- const types = {};
18
- for (const [name, info] of Object.entries(BUILTIN_COMPONENTS)) if (info && info.category && RENDER_TYPE_CATEGORIES.has(info.category)) types[name] = {
19
- label: info.label,
20
- category: info.category,
21
- description: info.description
22
- };
23
- const rawHtml = BUILTIN_COMPONENTS[RENDER_RAW_HTML_TYPE];
24
- if (rawHtml) types[RENDER_RAW_HTML_TYPE] = {
25
- label: rawHtml.label,
26
- category: rawHtml.category,
27
- description: rawHtmlDescription
28
- };
29
- return {
30
- note: renderTypesNote,
31
- types
32
- };
33
- };
34
- var renderGuideText = `# plitzi_render — authoring guide
35
-
36
- \`plitzi_render\` shows the user a live UI widget. You build it as a list of \`operations\` (applied IN ORDER) that
37
- assemble an element tree under one pre-seeded root page whose ref is **"render"**. It renders fully offline — no
38
- space, no backend, no account. Same operation vocabulary as the editing tool plitzi_apply, aimed at one page.
39
-
40
- Most widgets are **presentation only** — the structure + styling below is all you need, so start there. The widget
41
- runs the live Plitzi SDK though, so it can also **fetch data** (an \`apiContainer\`) and **react to events**
42
- (interaction flows); see "Data & interactivity" at the end when a widget needs them.
43
-
44
- Each call renders a **fresh** widget: send **every** operation it needs in the one call.
45
-
46
- **To CHANGE a widget you already rendered, do not rebuild it** — every render answers with a \`renderId\`; call
47
- again with that id, \`patch: true\` and only the operations that differ:
48
-
49
- \`\`\`json
50
- { "patch": true, "renderId": "r7f3a2c", "operations": [
51
- { "type": "patchDefinition", "ref": "tl-card", "desktop": { "border-radius": "20px" } },
52
- { "type": "patchElement", "pageRef": "render", "ref": "title-2", "props": { "content": "EPCOT (día largo)" } }
53
- ] }
54
- \`\`\`
55
- The widget merges the delta into the batch it was built from and reports back what it applied — including the
56
- errors, if a ref does not exist. Address rows by the refs you already know (\`card-1\`, \`blk-2-3\`). If it reports
57
- that the widget could not be recovered (a surface that renders none, a host that keeps no storage, a conversation
58
- resumed elsewhere), send the whole batch again without \`patch\`.
59
-
60
- **Patch only to modify what is on screen.** A different subject, or a different kind of widget, is a FRESH render
61
- with no \`patch\` — the delta is merged into the previous widget, so patching a new idea leaves the user looking at
62
- both at once. Rebuilding when you could have patched only costs tokens; patching when you should have rebuilt costs
63
- the user a wrong widget.
64
-
65
- ## Build the whole widget in ONE upsertElement (nest with \`children\`)
66
-
67
- The simplest, least error-prone path: a single \`upsertElement\` whose \`element\` carries a nested \`children\` tree —
68
- so you describe the layout the way it renders, no ref-juggling. \`pageRef: "render"\` is required; each element in the
69
- tree needs a unique \`ref\` — a name you choose from letters, digits, \`-\` and \`_\`, **starting with a letter and with
70
- no dots** (e.g. \`price-row\`, \`cta_button\`).
71
-
72
- \`\`\`json
73
- { "type": "upsertElement", "pageRef": "render", "element": {
74
- "ref": "card", "type": "container", "style": { "base": ["card"] },
75
- "children": [
76
- { "ref": "plan", "type": "heading", "subType": "h3", "props": { "content": "Pro" } },
77
- { "ref": "amount", "type": "text", "props": { "content": "$29/mo" }, "style": { "base": ["price"] } },
78
- { "ref": "buy", "type": "button", "props": { "content": "Start free trial" }, "style": { "base": ["cta"] } }
79
- ]
80
- } }
81
- \`\`\`
82
-
83
- An element is \`{ ref, type, subType?, props?, style?, children? }\`. Children render in array order. (You *can* also
84
- add elements one-by-one with a top-level \`parentRef: "<existing ref>"\` and optional \`position\` — useful to append to
85
- or restructure something you already created — but for a fresh widget the inline \`children\` tree is easier.)
86
-
87
- ## Repeating rows — repeatElement, never copy-paste
88
-
89
- The moment two siblings have the same shape and different data — a list, steps, cards, a table, a timeline —
90
- **write the shape once** and hand over the rows. \`repeatElement\` creates the wrapper (style it with the row/grid
91
- class) and renders the template once per entry of \`items\`:
92
-
93
- \`\`\`json
94
- { "type": "repeatElement", "pageRef": "render", "ref": "steps", "style": { "base": ["list"] },
95
- "template": {
96
- "ref": "step", "type": "container", "style": { "base": ["row"] },
97
- "children": [
98
- { "ref": "at", "type": "paragraph", "style": { "base": ["time"] }, "props": { "content": "{{item.time}}" } },
99
- { "ref": "what", "type": "paragraph", "style": { "base": ["txt"] }, "props": { "content": "{{item.text}}" } }
100
- ]
101
- },
102
- "items": [
103
- { "time": "08:00", "text": "Doors open, head straight to the main hall." },
104
- { "time": "10:30", "text": "Workshops in the east wing." },
105
- { "time": "13:00", "text": "Lunch, then the keynote." }
106
- ]
107
- }
108
- \`\`\`
109
- - \`{{item.<field>}}\` is replaced by that row's field, anywhere in the template (props, a style ref, a param).
110
- A placeholder that is the WHOLE value keeps the field's type (\`"{{item.count}}"\` with \`count: 3\` stays the
111
- number 3); mixed with text it interpolates. Dotted paths work: \`{{item.author.name}}\`.
112
- - Every ref in the template gets the row number appended — \`step\` becomes \`step-1\`, \`step-2\`… — so rows never
113
- collide and you can address one later without reading anything back.
114
- - Other \`{{…}}\` names are left untouched, so schema variables keep working inside a template.
115
- - A row missing a field the template reads fails the batch and names the row and the fields it does carry.
116
- - Up to 100 rows per op. Rows that differ in SHAPE (not just data) are not rows — write those as plain elements.
117
-
118
- **A list inside each row** — a timeline of days each with its own steps, a menu of sections each with its dishes —
119
- is one op too: give the node that should wrap the sub-list a \`repeat\`, and put the sub-rows in the row's data.
120
-
121
- \`\`\`json
122
- { "type": "repeatElement", "pageRef": "render", "ref": "timeline", "style": { "base": ["tl"] },
123
- "template": {
124
- "ref": "day", "type": "container", "style": { "base": ["day"] },
125
- "children": [
126
- { "ref": "title", "type": "heading", "subType": "h3", "props": { "content": "{{item.park}}" } },
127
- { "ref": "body", "type": "container", "style": { "base": ["body"] },
128
- "repeat": { "items": "{{item.blocks}}", "template": {
129
- "ref": "blk", "type": "container", "style": { "base": ["blk"] },
130
- "children": [
131
- { "ref": "at", "type": "paragraph", "props": { "content": "{{item.time}}" } },
132
- { "ref": "what", "type": "paragraph", "props": { "content": "{{item.text}}" } }
133
- ]
134
- } } }
135
- ]
136
- },
137
- "items": [
138
- { "park": "Magic Kingdom", "blocks": [ { "time": "08:00", "text": "Rope drop." }, { "time": "10:30", "text": "Space Mountain." } ] },
139
- { "park": "EPCOT", "blocks": [ { "time": "08:30", "text": "Cosmic Rewind." } ] }
140
- ]
141
- }
142
- \`\`\`
143
- - The node carrying \`repeat\` becomes the WRAPPER of its sub-list (its own \`children\` are ignored), so put the
144
- sub-list's layout class on it.
145
- - Inside the sub-template \`{{item.…}}\` reads the SUB-row; a field of the outer row is not reachable from there,
146
- so repeat it in each sub-row if you need it.
147
- - Refs number both levels, outer first: \`blk-2-3\` is the third block of the second day.
148
- - **One level of nesting**: the sub-template is a plain element tree, so it cannot carry another \`repeat\`.
149
- - The whole op is capped at 500 rows across both levels.
150
-
151
- ## Style with reusable classes — upsertDefinitions
152
-
153
- Styling is separate from structure: declare the classes, then attach them by ref. **Declare them all in ONE
154
- \`upsertDefinitions\`**, keyed by class name — a widget usually needs a dozen classes, and one op per class spends a
155
- noticeable slice of the call on repeated \`{"type":"upsertDefinition","ref":…}\` envelopes.
156
-
157
- \`\`\`json
158
- { "type": "upsertDefinitions", "definitions": {
159
- "card": { "desktop": { "display": "flex", "flex-direction": "column", "gap": "8px", "padding": "16px", "border-radius": "12px" } },
160
- "title": { "desktop": { "font-size": "16px", "font-weight": "600", "margin-top": "0", "margin-bottom": "0" } }
161
- } }
162
- \`\`\`
163
- Each value is exactly what \`upsertDefinition\` takes minus \`type\`/\`ref\` (\`desktop\`/\`tablet\`/\`mobile\`, \`states\`,
164
- \`variants\`, \`slots\`), and the result is identical. The single \`upsertDefinition\` still exists for a one-off class,
165
- and \`patchDefinition\` still changes only some CSS of one class.
166
- - CSS properties in **kebab-case** (\`background-color\`, \`font-size\`, \`border-radius\`), values as plain strings.
167
- - Attach to an element via \`style: { "base": ["card"] }\`. Stack classes: \`"base": ["card", "shadow"]\`.
168
- - One \`ref\` can name both an element and its class (as above) — they live in different namespaces.
169
- - Lay containers out with flexbox or grid — pick the direction on purpose, see **Fit the panel** below.
170
- - **You are not styling from zero.** Each type lands on the page with CSS you did not write, and it is the usual
171
- reason a widget does not look like the definitions say:
172
- - The per-type CSS the SDK ships imposes **no minimum size**: a rail, a divider, a dot or a narrow cell is
173
- exactly as small as you make it, and no \`"min-width": "0"\` escape hatch is needed. The flip side is that an
174
- element with no content and no size takes no space at all — give a spacer its own \`height\`. (The 50px box
175
- empty containers show on the builder canvas is a drop target, scoped to it; it never reaches a widget.)
176
- - The BROWSER's own defaults for the rest: \`heading\` keeps its UA font-size and ~0.67em top/bottom margins,
177
- \`paragraph\` ~1em margins, \`list\` a 40px \`padding-left\`, \`button\` its native chrome, \`image\` its intrinsic
178
- size, \`link\` its own colour and underline. In a compact widget set these explicitly — usually
179
- \`"margin-top": "0"\`, \`"margin-bottom": "0"\` — and space things with the parent's \`gap\` instead.
180
- - Borders start at \`0 solid\`, so \`border-color\` alone paints nothing: give \`border-width\` (and the colour).
181
- - The \`defaultStyle\` a type reports in the EDITING catalog (\`plitzi://types\`) is authoring metadata for the
182
- builder — it does not paint here, so do not count on it in a widget.
183
- - **Mind the intrinsic display.** Some types start non-block: \`text\` is \`display: inline\`, so to stack or size it,
184
- wrap it in a \`container\` (or set \`display: block\`). \`heading\` and \`paragraph\` are already block.
185
- - **Shorthands are welcome** and cheaper to write: \`padding: 8px 16px\`, \`border: 1px solid #ddd\`,
186
- \`font: bold 16px/1.5 Arial\`, \`flex: 1 1 auto\`, \`transition: opacity 200ms ease\`. They are stored expanded to
187
- their longhands, so a breakpoint, state or variant can override each property on its own — and a read-back shows
188
- the longhands, not what you wrote. An unknown property errors with the correct kebab-case key suggested.
189
- - **Responsive:** add \`tablet\` and/or \`mobile\` blocks next to \`desktop\` (same shape); they override desktop on
190
- smaller screens — \`{ "desktop": { "font-size": "36px" }, "mobile": { "font-size": "24px" } }\`.
191
- - **Interactive states:** nest under \`states\` keyed by pseudo-class, each with its own breakpoint block —
192
- \`{ "desktop": { "background-color": "#3b82f6" }, "states": { "hover": { "desktop": { "background-color": "#2563eb" } } } }\`
193
- (\`hover\`, \`active\`, \`focus\`).
194
-
195
- ## Fit the panel — go wide, stay short
196
-
197
- The widget renders in a **side panel** (Claude Desktop, ChatGPT, the Plitzi builder), so it gets a usable width but
198
- very little height: everything past the first screenful costs the user a scroll. Height is the scarce resource —
199
- spend width instead.
200
-
201
- Plain containers are blocks, so doing nothing stacks children **vertically** and produces exactly the tall,
202
- half-empty widget to avoid. Choose the axis every time:
203
-
204
- - **Peers side by side** — metrics, plans, options, a comparison, an image next to its text: a row, wrapping when
205
- it runs out of width, children sharing it (no fixed widths).
206
- \`\`\`json
207
- { "type": "upsertDefinitions", "definitions": {
208
- "row": { "desktop": { "display": "flex", "flex-direction": "row", "flex-wrap": "wrap", "gap": "12px", "align-items": "stretch" } },
209
- "col": { "desktop": { "flex-grow": "1", "flex-basis": "0%", "min-width": "150px" } }
210
- } }
211
- \`\`\`
212
- \`flex-grow: 1\` + \`flex-basis: 0%\` splits the row evenly; \`min-width\` is the wrap threshold — under it the item
213
- drops to the next line by itself, so a narrow panel degrades gracefully with no breakpoints.
214
- - **Many uniform items** — cards, tiles, a gallery: one grid line does it all.
215
- \`\`\`json
216
- { "type": "upsertDefinitions", "definitions": { "grid": { "desktop": { "display": "grid", "grid-template-columns": "repeat(auto-fit, minmax(160px, 1fr))", "gap": "12px" } } } }
217
- \`\`\`
218
- - **Label + value pairs** stay on one line (\`display: flex\`, \`justify-content: space-between\`) instead of two.
219
- - **Vertical is right** for reading order: a heading over its paragraph, a form, a step list, long prose.
220
- - Force a stack on tiny screens with the \`mobile\` block: \`"mobile": { "flex-direction": "column" }\`.
221
-
222
- Keep it compact, and the numbers low: \`padding\` 12–16px (24+ only on a single hero card), \`gap\` 8–12px,
223
- \`font-size\` 13–15px for body and 16–20px for headings. Let the outer container **fill** the panel — no \`width\` on
224
- it — and reach for \`max-width\` only to stop one lone card from stretching across the whole panel.
225
-
226
- ## Match the host theme — never hardcode a light palette
227
-
228
- The widget is embedded in the host's own UI (Claude Desktop, ChatGPT, the builder), and that UI **may be in dark
229
- mode**. A widget painted with fixed light colours is the most common way to ship something unusable: a white card
230
- in a dark chat glares, and — worse — text left at a dark default disappears against the host's dark background.
231
-
232
- The host publishes its palette as CSS variables on the page, so use them for every colour, with a
233
- \`light-dark(<light>, <dark>)\` fallback for hosts that send none:
234
-
235
- \`\`\`json
236
- { "type": "upsertDefinitions", "definitions": { "card": { "desktop": {
237
- "background-color": "var(--color-background-secondary, light-dark(#ffffff, #1f2430))",
238
- "color": "var(--color-text-primary, light-dark(#0f172a, #e8eaed))",
239
- "border-width": "1px", "border-style": "solid",
240
- "border-color": "var(--color-border-primary, light-dark(#e2e8f0, #333a48))"
241
- } } } }
242
- \`\`\`
243
-
244
- - Surfaces: \`--color-background-primary\` (the page), \`--color-background-secondary\` / \`--color-background-tertiary\`
245
- (cards, raised areas). Text: \`--color-text-primary\`, \`--color-text-secondary\`, \`--color-text-tertiary\` (muted).
246
- Borders: \`--color-border-primary\` / \`--color-border-secondary\`. Status pairs: \`--color-background-danger\` |
247
- \`success\` | \`warning\` | \`info\` with the matching \`--color-text-…\`. Also \`--font-sans\`, \`--border-radius-md\` /
248
- \`lg\` / \`full\`, \`--shadow-sm\` / \`md\`.
249
- - **Set \`color\` wherever you set \`background-color\`** — the pair is what stays legible, either one alone is a
250
- gamble. Same rule for a brand accent: a CTA on your own blue must state its own text colour (\`#ffffff\`).
251
- - Prefer a border to a drop shadow for separation: shadows all but vanish on a dark surface.
252
-
253
- ## Element types (type → what to set)
254
-
255
- | type | renders | set |
256
- |---|---|---|
257
- | \`container\` | layout box (a div) | nothing — style it with flex/grid |
258
- | \`heading\` | h1–h6 title | \`props.content\`, element \`subType\`: "h1"…"h6" |
259
- | \`paragraph\` | body text block (\`<p>\`) | \`props.content\` |
260
- | \`text\` | inline text | \`props.content\` |
261
- | \`button\` | clickable button | \`props.content\` |
262
- | \`link\` | anchor | \`props.content\` (label), \`props.href\`, \`props.target\`: "self" \\| "blank" |
263
- | \`image\` | \`<img>\` | \`props.src\`, \`props.alt\` |
264
- | \`video\` | embedded video | \`props.src\` |
265
- | \`list\` / \`listItem\` | \`<ul>\` / \`<li>\` | nesting only |
266
- | \`markdown\` | rendered markdown | \`props.content\` |
267
- | \`blockHtml\` | a raw HTML string, as written | \`props.content\` — how you draw an inline \`<svg>\`, see below |
268
-
269
- \`subType\` is an element-level field (not a prop). Guessing is safe: an unknown prop for a type comes back as a
270
- **warning naming the right one**, not an error. This table covers the everyday types; the resource
271
- **plitzi://render/types** lists every built-in type you can use (with descriptions) — read it when you need one
272
- that is not here (lists, tabs, dialogs, forms, icons…).
273
-
274
- \`image\`/\`video\` \`src\` accepts any \`https\` URL, or a \`data:\`/\`blob:\` URI for a fully self-contained graphic (a
275
- base64 raster) — both render with no extra setup. For a **vector** graphic do not encode a \`data:\` URI: draw it
276
- inline, as below.
277
-
278
- **Anything loaded from the internet.** Write the real URL and nothing else: images, video, fonts and the endpoint
279
- an \`apiContainer\` reads are re-pointed at the render server after the widget is built, and it fetches them for
280
- the widget. That is invisible to you and there is nothing to opt into — it is what settles the redirects, the
281
- hotlink rules and the missing CORS headers that a widget, running in the surface's sandbox, cannot settle itself.
282
- What it cannot do is guess:
283
-
284
- - **Use URLs you have actually seen work.** A direct file URL, not a page about the picture, not a search result,
285
- not a pattern you assembled from memory. A URL that 404s or answers with HTML instead of an image leaves a grey
286
- placeholder box in the middle of an otherwise finished layout.
287
- - **With no URL you trust, do not invent one.** Draw that block instead: a \`linear-gradient\`, a flat colour, an
288
- inline \`<svg>\` or a \`data:\` URI — none touch the network and all of them always render.
289
- - **A plain GET is the request that always works.** An \`apiContainer\` with a custom \`method\`, \`headers\` or
290
- \`accessToken\` is called directly by the widget instead, so it is then subject to the surface's own network
291
- policy and the API's CORS headers — the render warns you when that happens. \`{{tokens}}\` in the URL are fine.
292
- When you are showing a shape rather than live data, \`mockData\` needs no network at all.
293
-
294
- ## Draw with inline SVG
295
-
296
- A widget can draw its own graphics, and it is often the difference between a plain block of text and something
297
- worth showing: a brand mark, a sparkline or donut, a badge, an empty-state glyph, a wave or blob behind a header,
298
- an arrow between two steps. Put the SVG **inline** in a \`blockHtml\` element — its \`props.content\` is rendered as
299
- written, so the markup needs no escaping, and the element is styled and laid out like any other box.
300
-
301
- \`\`\`json
302
- {
303
- "operations": [
304
- { "type": "upsertDefinitions", "definitions": {
305
- "mark": { "desktop": { "display": "flex", "width": "32px", "height": "32px", "color": "var(--color-text-primary, light-dark(#0f172a, #e8eaed))" } }
306
- } },
307
- { "type": "upsertElement", "pageRef": "render", "element": {
308
- "ref": "trend", "type": "blockHtml", "style": { "base": ["mark"] },
309
- "props": { "content": "<svg viewBox='0 0 24 24' width='100%' height='100%' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round'><path d='M3 17l6-6 4 4 8-8'/><path d='M21 7v6h-6'/></svg>" }
310
- } }
311
- ]
312
- }
313
- \`\`\`
314
- - **Size from the class, not the drawing**: keep a \`viewBox\` and set \`width\`/\`height\` to \`100%\`, then the
315
- \`blockHtml\`'s own \`width\`/\`height\` decide how big it renders — one drawing, any size.
316
- - **Colour with \`currentColor\`** (\`fill\` and/or \`stroke\`) and set \`color\` on the class from a host variable. A hex
317
- buried inside the path is the same mistake as a hardcoded light palette: it cannot follow the theme.
318
- - **Single quotes inside the markup** keep the JSON free of \`\\"\` escapes, as above.
319
- - **Markup only.** \`<script>\`, \`javascript:\` URLs and inline \`on*\` handlers are rejected with an error — a widget
320
- runs inside the host's UI. Animate with CSS (a \`states\` block, a \`transition\`) and wire behaviour with
321
- interaction flows.
322
-
323
- **The budget.** Every path is text you write, so an SVG earns its place only while it stays small: a handful of
324
- paths, a few hundred characters, drawn ONCE and reused (same class, same content, or a \`repeatElement\` row) rather
325
- than redrawn per card. Skip it entirely when something cheaper does the job — a \`fontAwesome\` icon, an emoji in a
326
- \`text\`, an \`https\` image the user gave you, a CSS gradient or a \`border-radius\` shape. And a full illustration or
327
- a photo-real scene (a castle, a skyline, a detailed mascot) is still the wrong trade: it costs more than the entire
328
- rest of the widget and renders worse than the image it is imitating.
329
-
330
- ## Keep the call small
331
-
332
- Everything in \`operations\` is text you write, and a widget that takes two calls because the first ran long is a
333
- widget the user waits twice for. Two habits pay for themselves:
334
-
335
- - **Keep a drawing to a drawing.** Inline SVG is allowed and often worth it (see above), but a graphic that runs
336
- longer than the widget around it has stopped paying for itself: a handful of paths, drawn once and reused rather
337
- than redrawn per card, and an \`https\` image, a flat colour or a two-stop \`linear-gradient\` for anything bigger.
338
- - **One class per look, not per property.** Classes like \`tone-blue\` + \`tone-blue-text\` + \`tone-blue-bg\` for the
339
- same card triple the declarations and the attachments. Put everything the look needs in one class, add a second
340
- only for the part that genuinely varies between siblings (a colour), and reuse it — the whole point of a class.
341
-
342
- ## Full worked example — two plans side by side
343
-
344
- The cards sit in a wrapping row and split it evenly, so the widget uses the panel's width and stays short; on a
345
- narrow panel \`min-width\` drops the second card under the first on its own.
346
-
347
- \`\`\`json
348
- {
349
- "operations": [
350
- { "type": "upsertDefinitions", "definitions": {
351
- "plans": { "desktop": { "display": "flex", "flex-direction": "row", "flex-wrap": "wrap", "gap": "12px", "align-items": "stretch" } },
352
- "card": { "desktop": { "display": "flex", "flex-direction": "column", "gap": "6px", "flex-grow": "1", "flex-basis": "0%", "min-width": "150px", "padding": "16px", "background-color": "var(--color-background-secondary, light-dark(#ffffff, #1f2430))", "color": "var(--color-text-primary, light-dark(#0f172a, #e8eaed))", "border-width": "1px", "border-style": "solid", "border-color": "var(--color-border-primary, light-dark(#e2e8f0, #333a48))", "border-radius": "var(--border-radius-lg, 12px)", "text-align": "center" } },
353
- "price": { "desktop": { "font-size": "28px", "font-weight": "800", "color": "#3b82f6" } },
354
- "cta": { "desktop": { "background-color": "#3b82f6", "color": "#ffffff", "padding": "10px 16px", "border-radius": "8px", "font-weight": "600" }, "states": { "hover": { "desktop": { "background-color": "#2563eb" } } } }
355
- } },
356
- { "type": "upsertElement", "pageRef": "render", "element": {
357
- "ref": "plans", "type": "container", "style": { "base": ["plans"] },
358
- "children": [
359
- { "ref": "free", "type": "container", "style": { "base": ["card"] }, "children": [
360
- { "ref": "free-plan", "type": "heading", "subType": "h3", "props": { "content": "Starter" } },
361
- { "ref": "free-amount", "type": "text", "props": { "content": "$0" }, "style": { "base": ["price"] } },
362
- { "ref": "free-buy", "type": "button", "props": { "content": "Start free" }, "style": { "base": ["cta"] } }
363
- ] },
364
- { "ref": "pro", "type": "container", "style": { "base": ["card"] }, "children": [
365
- { "ref": "pro-plan", "type": "heading", "subType": "h3", "props": { "content": "Pro" } },
366
- { "ref": "pro-amount", "type": "text", "props": { "content": "$29/mo" }, "style": { "base": ["price"] } },
367
- { "ref": "pro-buy", "type": "button", "props": { "content": "Start free trial" }, "style": { "base": ["cta"] } }
368
- ] }
369
- ]
370
- } }
371
- ]
372
- }
373
- \`\`\`
374
-
375
- ## Data & interactivity (optional)
376
-
377
- The widget runs the live SDK, so beyond static layout it can fetch data and respond to events. Both are wired by
378
- \`ref\`, just like styling. (Full reference: **plitzi://guide** — sections Data bindings and Interactions.)
379
-
380
- ### Fetch data — a provider + a binding
381
- An \`apiContainer\` fetches at runtime and exposes the result as the source **\`apiContainer_<idRef>.data\`**, visible
382
- to its **DESCENDANTS only** — the bound element must live inside the container's subtree. \`upsertBinding\` then
383
- connects that source to a descendant's field.
384
-
385
- \`\`\`json
386
- {
387
- "operations": [
388
- { "type": "upsertElement", "pageRef": "render", "element": {
389
- "ref": "products", "type": "apiContainer", "props": { "query": "<your data query — see plitzi://guide>" },
390
- "children": [ { "ref": "title", "type": "heading", "subType": "h3", "props": { "content": "…" } } ]
391
- } },
392
- { "type": "upsertBinding", "pageRef": "render", "ref": "title", "category": "attributes", "binding": { "to": "content", "source": "apiContainer_products.data.0.name" } }
393
- ]
394
- }
395
- \`\`\`
396
- - \`category\`: \`"attributes"\` (a prop such as \`content\`/\`src\`), \`"style"\` (a CSS value) or \`"initialState"\`.
397
- - \`binding.to\` is the target field; \`binding.source\` is the \`<type>_<idRef>.path\` into the provider's data.
398
- - \`mockData\` on the provider is builder-only — set a real \`query\` for the widget to actually fetch.
399
-
400
- ### React to events — an interaction flow
401
- \`upsertInteractionFlow\` attaches an ordered \`nodes\` list to an element; the FIRST node is a \`trigger\` (e.g.
402
- \`onClick\`), the rest run after it. Each following step is one of:
403
- - **\`globalCallback\`** (OMIT \`elementId\`) — a built-in app action: \`addNotification\` (\`params.content\`),
404
- \`navigate\`, \`setState\` (\`key\`/\`type\`/\`value\`), \`authLogin\`/\`authLogout\`…
405
- - **\`callback\`** (\`elementId\` = an element, defaults to the trigger's) — that ELEMENT's OWN callback: e.g. an
406
- \`apiContainer\` re-fetches, a \`form\` submits. Each type's own callback action names are in plitzi://guide.
407
-
408
- \`\`\`json
409
- { "type": "upsertInteractionFlow", "pageRef": "render", "ref": "buy", "nodes": [
410
- { "title": "On click", "nodeType": "trigger", "action": "onClick" },
411
- { "title": "Toast", "nodeType": "globalCallback", "action": "addNotification", "params": { "content": "Added to cart" } }
412
- ] }
413
- \`\`\`
414
-
415
- ## When it fails
416
- The tool returns \`rendered: false\` with \`errors: [{ path, message, hint }]\`. Read the hint, fix that one op, and
417
- retry — you never lose the rest of the batch.
418
- `;
419
- /** The same two documents through the READ path (the router, hence plitzi_read), not only as MCP resources: an
420
- * agent that reaches for the batch-read tool — the reflex the guide itself teaches — must not be told its own
421
- * authoring guide does not exist. Space-independent, like the core singletons. */
422
- var readRenderResource = (uri) => {
423
- if (uri === "plitzi://render/guide") return envelope(renderGuideText);
424
- if (uri === "plitzi://render/types") return envelope(renderTypes());
425
- };
426
- var registerRenderResources = (server, log) => {
427
- server.registerResource("Render guide", RENDER_GUIDE_URI, {
428
- description: "How to author a plitzi_render widget: operations, element types, styling, examples.",
429
- mimeType: "text/markdown"
430
- }, () => {
431
- const start = performance.now();
432
- const contents = { contents: [{
433
- uri: RENDER_GUIDE_URI,
434
- mimeType: "text/markdown",
435
- text: renderGuideText
436
- }] };
437
- log.resourceRead(RENDER_GUIDE_URI, performance.now() - start);
438
- return contents;
439
- });
440
- server.registerResource("Render element types", RENDER_TYPES_URI, {
441
- description: "Built-in element types a plitzi_render widget can use, with descriptions.",
442
- mimeType: "application/json"
443
- }, () => {
444
- const start = performance.now();
445
- const contents = jsonContents(RENDER_TYPES_URI, envelope(renderTypes()));
446
- log.resourceRead(RENDER_TYPES_URI, performance.now() - start);
447
- return contents;
448
- });
449
- };
450
- //#endregion
451
- export { RENDER_GUIDE_URI, RENDER_TYPES_URI, readRenderResource, registerRenderResources };
@@ -1,37 +0,0 @@
1
- import { emptySpace } from "../helpers/space.js";
2
- import "../helpers/uris.js";
3
- import { canonicalUri } from "./canonical.js";
4
- import { readCoreResource } from "./core.js";
5
- import { readPrimerResource } from "./primer.js";
6
- import { readRenderResource } from "./renderGuide.js";
7
- import { readSchemaResource } from "./schema.js";
8
- import { readStyleResource } from "./style.js";
9
- //#region src/modules/mcp/resources/router.ts
10
- var resolvers = [
11
- (space, _env, uri) => readCoreResource(space, uri),
12
- (_space, _env, uri) => readRenderResource(uri),
13
- readPrimerResource,
14
- readSchemaResource,
15
- readStyleResource
16
- ];
17
- /** Resolve a resource URI to its versioned envelope, or null if unknown / not found. */
18
- var readResource = (space, env, rawUri) => {
19
- const uri = canonicalUri(env, rawUri);
20
- for (const resolve of resolvers) {
21
- const result = resolve(space, env, uri);
22
- if (result !== void 0) return result;
23
- }
24
- return null;
25
- };
26
- /** What a connection carrying NO space (a guest / widgets-only grant) can still read: the space-independent
27
- * singletons and the render docs. Undefined for everything else, so the caller says the connection has no space
28
- * instead of answering out of an empty one — an empty page list would read as "this space has no pages". */
29
- var readPublicResource = (env, rawUri) => {
30
- const uri = canonicalUri(env, rawUri);
31
- if (uri === "plitzi://types") return;
32
- return readRenderResource(uri) ?? readCoreResource(emptySpace(), uri);
33
- };
34
- /** Current version of a resource, for optimistic-concurrency checks. Null when the URI is unknown. */
35
- var resourceVersion = (space, env, uri) => readResource(space, env, uri)?.stateVersion ?? null;
36
- //#endregion
37
- export { readPublicResource, readResource, resourceVersion };
@@ -1,43 +0,0 @@
1
- import { buildDataSourceCatalog, buildInteractionCatalog } from "../catalogs/observed.js";
2
- import { findElementByRef, findPageByRef } from "../helpers/space.js";
3
- import { afterPrefix, dataSourcesUri, elementUri, folderUri, foldersUri, interactionsUri, pageUri, pagesUri, schemaVarsUri, settingsUri } from "../helpers/uris.js";
4
- import { envelope } from "./envelope.js";
5
- import { elementView, folderRefToAI, foldersToAI, pageSkeletonToAI, pageStylesToAI, pageSummariesToAI, schemaVariablesToAI, settingsToAI } from "../tools/operations/schema/translator.js";
6
- //#region src/modules/mcp/resources/schema.ts
7
- /** Element-schema reads: page listings/skeletons/styles, folders, single elements and schema variables. Returns
8
- * undefined when the URI belongs to another domain, null when the shape is ours but the ref does not resolve. */
9
- var readSchemaResource = (space, env, uri) => {
10
- if (uri === pagesUri(env)) return envelope(pageSummariesToAI(space.schema));
11
- if (uri === foldersUri(env)) return envelope(foldersToAI(space.schema));
12
- const folderRef = afterPrefix(uri, folderUri(env, ""));
13
- if (folderRef !== void 0) {
14
- const folder = folderRefToAI(space.schema, folderRef);
15
- return folder ? envelope(folder) : null;
16
- }
17
- const pageItem = afterPrefix(uri, pageUri(env, ""));
18
- if (pageItem !== void 0) {
19
- if (pageItem.endsWith("/styles")) {
20
- const ref = pageItem.slice(0, -7);
21
- const page = findPageByRef(space.schema, ref);
22
- return page ? envelope(pageStylesToAI(space.schema, space.style, page)) : null;
23
- }
24
- const page = findPageByRef(space.schema, pageItem);
25
- return page ? envelope(pageSkeletonToAI(space.schema, page, space.style)) : null;
26
- }
27
- const elementRef = afterPrefix(uri, elementUri(env, ""));
28
- if (elementRef !== void 0) {
29
- const el = findElementByRef(space.schema, elementRef);
30
- if (!el) return null;
31
- const view = elementView(space.schema, el, space.style);
32
- return {
33
- stateVersion: view.version,
34
- data: view.detail
35
- };
36
- }
37
- if (uri === schemaVarsUri(env)) return envelope(schemaVariablesToAI(space.schema));
38
- if (uri === settingsUri(env)) return envelope(settingsToAI(space.schema));
39
- if (uri === interactionsUri(env)) return envelope(buildInteractionCatalog(space.schema));
40
- if (uri === dataSourcesUri(env)) return envelope(buildDataSourceCatalog(space.schema));
41
- };
42
- //#endregion
43
- export { readSchemaResource };
@@ -1,34 +0,0 @@
1
- import { afterPrefix, defUri, defsUri, globalUri, globalsUri, idUri, idsUri, styleVarUri, styleVarsUri } from "../helpers/uris.js";
2
- import { envelope } from "./envelope.js";
3
- import { definitionRefs, definitionToAI, globalStyleToAI, globalStyleTypes, idStyleIds, idStyleToAI, styleVariablesToAI } from "../tools/operations/style/translator.js";
4
- //#region src/modules/mcp/resources/style.ts
5
- /** Style-schema reads: definitions, global (per-type) styles and design-token variables by category. Returns
6
- * undefined when the URI belongs to another domain, null when the shape is ours but the ref does not resolve. */
7
- var readStyleResource = (space, env, uri) => {
8
- if (uri === defsUri(env)) return envelope(definitionRefs(space.style));
9
- const defRef = afterPrefix(uri, defUri(env, ""));
10
- if (defRef !== void 0) {
11
- const def = definitionToAI(space.style, defRef);
12
- return def ? envelope(def) : null;
13
- }
14
- if (uri === globalsUri(env)) return envelope(globalStyleTypes(space.style));
15
- const componentType = afterPrefix(uri, globalUri(env, ""));
16
- if (componentType !== void 0) {
17
- const global = globalStyleToAI(space.style, componentType);
18
- return global ? envelope(global) : null;
19
- }
20
- if (uri === idsUri(env)) return envelope(idStyleIds(space.style));
21
- const targetId = afterPrefix(uri, idUri(env, ""));
22
- if (targetId !== void 0) {
23
- const idStyle = idStyleToAI(space.style, targetId);
24
- return idStyle ? envelope(idStyle) : null;
25
- }
26
- if (uri === styleVarsUri(env)) return envelope(styleVariablesToAI(space.style));
27
- const category = afterPrefix(uri, styleVarUri(env, ""));
28
- if (category !== void 0) {
29
- const byCategory = styleVariablesToAI(space.style);
30
- return envelope(Object.hasOwn(byCategory, category) ? byCategory[category] : []);
31
- }
32
- };
33
- //#endregion
34
- export { readStyleResource };
@@ -1,47 +0,0 @@
1
- import { PREVIEW_TOKEN_PARAM } from "./constants.js";
2
- //#region src/modules/mcp/screenshotClient.ts
3
- var composeUrl = (base, pagePath, token) => {
4
- const url = new URL(pagePath, base);
5
- if (token) url.searchParams.set(PREVIEW_TOKEN_PARAM, token);
6
- return url.toString();
7
- };
8
- /** Default `ScreenshotClient`: composes the navigable preview URL (renderBaseUrl + pagePath + `?__pt=token`) and
9
- * POSTs it to the browser service. Any network/HTTP failure surfaces as `ok:false` so the tool can fall back to
10
- * the HTML preview instead of hard-failing. */
11
- var createHttpScreenshotClient = ({ serviceUrl, renderBaseUrl, fetchImpl = fetch }) => ({ async capture({ pagePath, token, viewports }) {
12
- const url = composeUrl(renderBaseUrl, pagePath, token);
13
- let res;
14
- try {
15
- res = await fetchImpl(serviceUrl, {
16
- method: "POST",
17
- headers: { "content-type": "application/json" },
18
- body: JSON.stringify({
19
- url,
20
- viewports
21
- })
22
- });
23
- } catch (err) {
24
- return {
25
- ok: false,
26
- error: "SCREENSHOT_UNREACHABLE",
27
- message: `Browser service unreachable: ${String(err)}`
28
- };
29
- }
30
- if (!res.ok) return {
31
- ok: false,
32
- error: "SCREENSHOT_FAILED",
33
- message: `Browser service returned ${res.status}.`
34
- };
35
- const body = await res.json();
36
- if (!body.images || body.images.length === 0) return {
37
- ok: false,
38
- error: "SCREENSHOT_EMPTY",
39
- message: "Browser service returned no images."
40
- };
41
- return {
42
- ok: true,
43
- images: body.images
44
- };
45
- } });
46
- //#endregion
47
- export { createHttpScreenshotClient };