@plitzi/sdk-server 0.32.4 → 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.
- package/CHANGELOG.md +9 -0
- package/dist/adapters/jsonAdapters.js +6 -1
- package/dist/core/createServer.js +8 -44
- package/dist/core/health.js +15 -0
- package/dist/core/http/dispatcher.js +29 -0
- package/dist/core/http/securityHeaders.js +15 -0
- package/dist/core/http/stages/authRoutes.js +41 -0
- package/dist/core/http/stages/health.js +12 -0
- package/dist/core/http/stages/middlewares.js +16 -0
- package/dist/core/http/stages/pluginAssets.js +20 -0
- package/dist/core/http/stages/static.js +30 -0
- package/dist/core/server/baseServer.js +29 -0
- package/dist/core/server/mcpServer.js +29 -0
- package/dist/core/server/ssrServer.js +54 -0
- package/dist/core/services/mcp.js +22 -0
- package/dist/core/services/preview.js +37 -0
- package/dist/core/services/registry.js +30 -0
- package/dist/core/services/resolve.js +12 -0
- package/dist/core/services/rsc.js +11 -0
- package/dist/core/services/ssr.js +13 -0
- package/dist/core/transports.js +9 -9
- package/dist/index.js +19 -6
- package/dist/modules/ai/AIEngine.js +4 -4
- package/dist/modules/ai/toolkit.js +58 -0
- package/dist/modules/mcp/constants.js +4 -0
- package/dist/modules/mcp/handler.js +15 -21
- package/dist/modules/mcp/helpers/computeVersion.js +16 -0
- package/dist/modules/mcp/helpers/guide.js +130 -0
- package/dist/modules/mcp/helpers/opResult.js +18 -0
- package/dist/modules/mcp/helpers/space.js +137 -0
- package/dist/modules/mcp/previewClient.js +31 -0
- package/dist/modules/mcp/resources/canonical.js +45 -0
- package/dist/modules/mcp/resources/core.js +14 -0
- package/dist/modules/mcp/resources/envelope.js +14 -0
- package/dist/modules/mcp/resources/primer.js +25 -0
- package/dist/modules/mcp/resources/register.js +142 -0
- package/dist/modules/mcp/resources/router.js +25 -0
- package/dist/modules/mcp/resources/schema.js +33 -0
- package/dist/modules/mcp/resources/style.js +27 -0
- package/dist/modules/mcp/screenshotClient.js +47 -0
- package/dist/modules/mcp/server.js +52 -20
- package/dist/modules/mcp/tools/apply/dispatch.js +83 -0
- package/dist/modules/mcp/tools/apply/index.js +121 -0
- package/dist/modules/mcp/tools/apply/writeResult.js +36 -0
- package/dist/modules/mcp/tools/index.js +20 -148
- package/dist/modules/mcp/tools/operations/index.js +30 -0
- package/dist/modules/mcp/tools/operations/schema/deleteElement.js +25 -0
- package/dist/modules/mcp/tools/operations/schema/deleteFolder.js +30 -0
- package/dist/modules/mcp/tools/operations/schema/deletePage.js +22 -0
- package/dist/modules/mcp/tools/operations/schema/deleteVariable.js +18 -0
- package/dist/modules/mcp/tools/operations/schema/moveElement.js +39 -0
- package/dist/modules/mcp/tools/operations/schema/operations.js +25 -0
- package/dist/modules/mcp/tools/operations/schema/patchElement.js +46 -0
- package/dist/modules/mcp/tools/operations/schema/registry.js +55 -0
- package/dist/modules/mcp/tools/operations/schema/shared.js +27 -0
- package/dist/modules/mcp/tools/operations/schema/translator.js +148 -0
- package/dist/modules/mcp/tools/operations/schema/upsertElement.js +59 -0
- package/dist/modules/mcp/tools/operations/schema/upsertFolder.js +49 -0
- package/dist/modules/mcp/tools/operations/schema/upsertPage.js +64 -0
- package/dist/modules/mcp/tools/operations/schema/upsertVariable.js +42 -0
- package/dist/modules/mcp/tools/operations/schema/write.js +44 -0
- package/dist/modules/mcp/tools/operations/style/cssCatalog.js +132 -0
- package/dist/modules/mcp/tools/operations/style/deleteDefinition.js +20 -0
- package/dist/modules/mcp/tools/operations/style/deleteGlobalStyle.js +20 -0
- package/dist/modules/mcp/tools/operations/style/deleteStyleVariable.js +21 -0
- package/dist/modules/mcp/tools/operations/style/operations.js +21 -0
- package/dist/modules/mcp/tools/operations/style/patchDefinition.js +27 -0
- package/dist/modules/mcp/tools/operations/style/patchGlobalStyle.js +27 -0
- package/dist/modules/mcp/tools/operations/style/shared.js +59 -0
- package/dist/modules/mcp/tools/operations/style/translator.js +77 -0
- package/dist/modules/mcp/tools/operations/style/upsertDefinition.js +23 -0
- package/dist/modules/mcp/tools/operations/style/upsertGlobalStyle.js +23 -0
- package/dist/modules/mcp/tools/operations/style/upsertStyleVariable.js +22 -0
- package/dist/modules/mcp/tools/operations/style/write.js +100 -0
- package/dist/modules/mcp/tools/preview.js +37 -0
- package/dist/modules/mcp/tools/read.js +33 -0
- package/dist/modules/mcp/tools/screenshot.js +83 -0
- package/dist/modules/mcp/tools/search.js +108 -0
- package/dist/modules/mcp/tools/shared/tool.js +26 -0
- package/dist/modules/mcp/tools/shared/validator.js +262 -0
- package/dist/modules/mcp/tools/validate.js +19 -0
- package/dist/modules/ssr/buildBody.js +2 -2
- package/dist/modules/ssr/handler.js +6 -4
- package/dist/modules/ssr/prepareRender.js +5 -5
- package/dist/modules/ssr/preview.js +106 -0
- package/dist/modules/ssr/registerExternalPlugins.js +1 -1
- package/dist/modules/ssr/streamBody.js +3 -3
- package/dist/modules/ssr/template.js +1 -1
- package/dist/plugins/compile.js +1 -1
- package/dist/plugins/copy.js +1 -1
- package/dist/plugins/manager.js +1 -1
- package/dist/server.js +34 -9
- package/dist/src/core/createServer.d.ts +5 -1
- package/dist/src/core/health.d.ts +10 -0
- package/dist/src/core/http/dispatcher.d.ts +7 -0
- package/dist/src/core/http/securityHeaders.d.ts +2 -0
- package/dist/src/core/http/stages/authRoutes.d.ts +4 -0
- package/dist/src/core/http/stages/health.d.ts +2 -0
- package/dist/src/core/http/stages/middlewares.d.ts +2 -0
- package/dist/src/core/http/stages/pluginAssets.d.ts +2 -0
- package/dist/src/core/http/stages/static.d.ts +5 -0
- package/dist/src/core/http/types.d.ts +19 -0
- package/dist/src/core/server/baseServer.d.ts +9 -0
- package/dist/src/core/server/mcpServer.d.ts +2 -0
- package/dist/src/core/server/ssrServer.d.ts +2 -0
- package/dist/src/core/services/mcp.d.ts +3 -0
- package/dist/src/core/services/preview.d.ts +2 -0
- package/dist/src/core/services/registry.d.ts +4 -0
- package/dist/src/core/services/resolve.d.ts +3 -0
- package/dist/src/core/services/rsc.d.ts +2 -0
- package/dist/src/core/services/ssr.d.ts +3 -0
- package/dist/src/core/transports.d.ts +2 -2
- package/dist/src/index.d.ts +12 -3
- package/dist/src/modules/ai/index.d.ts +1 -0
- package/dist/src/modules/ai/toolkit.d.ts +17 -0
- package/dist/src/modules/mcp/constants.d.ts +1 -0
- package/dist/src/modules/mcp/handler.d.ts +6 -3
- package/dist/src/modules/mcp/helpers/computeVersion.d.ts +1 -0
- package/dist/src/modules/mcp/helpers/guide.d.ts +2 -0
- package/dist/src/modules/mcp/helpers/index.d.ts +4 -0
- package/dist/src/modules/mcp/helpers/opResult.d.ts +13 -0
- package/dist/src/modules/mcp/helpers/space.d.ts +49 -0
- package/dist/src/modules/mcp/index.d.ts +12 -5
- package/dist/src/modules/mcp/previewClient.d.ts +13 -0
- package/dist/src/modules/mcp/resources/canonical.d.ts +7 -0
- package/dist/src/modules/mcp/resources/core.d.ts +5 -0
- package/dist/src/modules/mcp/resources/envelope.d.ts +10 -0
- package/dist/src/modules/mcp/resources/index.d.ts +8 -10
- package/dist/src/modules/mcp/resources/primer.d.ts +6 -0
- package/dist/src/modules/mcp/resources/register.d.ts +6 -0
- package/dist/src/modules/mcp/resources/router.d.ts +6 -0
- package/dist/src/modules/mcp/resources/schema.d.ts +5 -0
- package/dist/src/modules/mcp/resources/style.d.ts +5 -0
- package/dist/src/modules/mcp/screenshotClient.d.ts +13 -0
- package/dist/src/modules/mcp/server.d.ts +18 -3
- package/dist/src/modules/mcp/tools/apply/dispatch.d.ts +6 -0
- package/dist/src/modules/mcp/tools/apply/index.d.ts +231 -0
- package/dist/src/modules/mcp/tools/apply/writeResult.d.ts +8 -0
- package/dist/src/modules/mcp/tools/index.d.ts +17 -6
- package/dist/src/modules/mcp/tools/operations/index.d.ts +449 -0
- package/dist/src/modules/mcp/tools/operations/schema/deleteElement.d.ts +10 -0
- package/dist/src/modules/mcp/tools/operations/schema/deleteFolder.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/schema/deletePage.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/schema/deleteVariable.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/schema/index.d.ts +14 -0
- package/dist/src/modules/mcp/tools/operations/schema/moveElement.d.ts +16 -0
- package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +79 -0
- package/dist/src/modules/mcp/tools/operations/schema/patchElement.d.ts +17 -0
- package/dist/src/modules/mcp/tools/operations/schema/registry.d.ts +22 -0
- package/dist/src/modules/mcp/tools/operations/schema/shared.d.ts +24 -0
- package/dist/src/modules/mcp/tools/operations/schema/translator.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/schema/upsertElement.d.ts +16 -0
- package/dist/src/modules/mcp/tools/operations/schema/upsertFolder.d.ts +12 -0
- package/dist/src/modules/mcp/tools/operations/schema/upsertPage.d.ts +13 -0
- package/dist/src/modules/mcp/tools/operations/schema/upsertVariable.d.ts +16 -0
- package/dist/src/modules/mcp/tools/operations/schema/write.d.ts +12 -0
- package/dist/src/modules/mcp/tools/operations/style/cssCatalog.d.ts +10 -0
- package/dist/src/modules/mcp/tools/operations/style/deleteDefinition.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/style/deleteGlobalStyle.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/style/deleteStyleVariable.d.ts +15 -0
- package/dist/src/modules/mcp/tools/operations/style/index.d.ts +12 -0
- package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +163 -0
- package/dist/src/modules/mcp/tools/operations/style/patchDefinition.d.ts +37 -0
- package/dist/src/modules/mcp/tools/operations/style/patchGlobalStyle.d.ts +37 -0
- package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +115 -0
- package/dist/src/modules/mcp/tools/operations/style/translator.d.ts +9 -0
- package/dist/src/modules/mcp/tools/operations/style/upsertDefinition.d.ts +37 -0
- package/dist/src/modules/mcp/tools/operations/style/upsertGlobalStyle.d.ts +37 -0
- package/dist/src/modules/mcp/tools/operations/style/upsertStyleVariable.d.ts +20 -0
- package/dist/src/modules/mcp/tools/operations/style/write.d.ts +17 -0
- package/dist/src/modules/mcp/tools/preview.d.ts +226 -0
- package/dist/src/modules/mcp/tools/read.d.ts +8 -0
- package/dist/src/modules/mcp/tools/screenshot.d.ts +231 -0
- package/dist/src/modules/mcp/tools/search.d.ts +15 -0
- package/dist/src/modules/mcp/tools/shared/tool.d.ts +50 -0
- package/dist/src/modules/mcp/tools/shared/validator.d.ts +4 -0
- package/dist/src/modules/mcp/tools/validate.d.ts +228 -0
- package/dist/src/modules/mcp/types/aiSchema.d.ts +126 -0
- package/dist/src/modules/mcp/types/index.d.ts +4 -0
- package/dist/src/modules/mcp/types/previewTypes.d.ts +25 -0
- package/dist/src/modules/mcp/types/screenshotTypes.d.ts +29 -0
- package/dist/src/modules/mcp/types/toolTypes.d.ts +138 -0
- package/dist/src/modules/ssr/buildBody.d.ts +2 -2
- package/dist/src/modules/ssr/prepareRender.d.ts +2 -2
- package/dist/src/modules/ssr/preview.d.ts +16 -0
- package/dist/src/modules/ssr/streamBody.d.ts +2 -2
- package/package.json +10 -10
- package/dist/_virtual/_rolldown/runtime.js +0 -13
- package/dist/core/requestHandler.js +0 -126
- package/dist/modules/mcp/helpers.js +0 -75
- package/dist/modules/mcp/resources/glossary/binding.js +0 -73
- package/dist/modules/mcp/resources/glossary/collection.js +0 -76
- package/dist/modules/mcp/resources/glossary/displayMode.js +0 -50
- package/dist/modules/mcp/resources/glossary/element.js +0 -68
- package/dist/modules/mcp/resources/glossary/environment.js +0 -48
- package/dist/modules/mcp/resources/glossary/interaction.js +0 -62
- package/dist/modules/mcp/resources/glossary/page.js +0 -70
- package/dist/modules/mcp/resources/glossary/plugin.js +0 -96
- package/dist/modules/mcp/resources/glossary/resource.js +0 -75
- package/dist/modules/mcp/resources/glossary/schema.js +0 -69
- package/dist/modules/mcp/resources/glossary/schemaVariable.js +0 -60
- package/dist/modules/mcp/resources/glossary/segment.js +0 -59
- package/dist/modules/mcp/resources/glossary/space.js +0 -73
- package/dist/modules/mcp/resources/glossary/style.js +0 -81
- package/dist/modules/mcp/resources/glossary/styleSelector.js +0 -77
- package/dist/modules/mcp/resources/glossary/styleVariable.js +0 -72
- package/dist/modules/mcp/resources/index.js +0 -71
- package/dist/modules/mcp/resources/workflows/data.js +0 -49
- package/dist/modules/mcp/resources/workflows/elements.js +0 -53
- package/dist/modules/mcp/resources/workflows/segments.js +0 -55
- package/dist/modules/mcp/resources/workflows/styles.js +0 -91
- package/dist/modules/mcp/tools/collections/createCollection.js +0 -25
- package/dist/modules/mcp/tools/collections/createCollectionRecord.js +0 -27
- package/dist/modules/mcp/tools/collections/deleteCollection.js +0 -16
- package/dist/modules/mcp/tools/collections/deleteCollectionRecord.js +0 -16
- package/dist/modules/mcp/tools/collections/getCollection.js +0 -21
- package/dist/modules/mcp/tools/collections/getCollectionRecord.js +0 -25
- package/dist/modules/mcp/tools/collections/getCollectionRecords.js +0 -29
- package/dist/modules/mcp/tools/collections/getCollections.js +0 -19
- package/dist/modules/mcp/tools/collections/updateCollection.js +0 -28
- package/dist/modules/mcp/tools/collections/updateCollectionRecord.js +0 -31
- package/dist/modules/mcp/tools/docs/listResources.js +0 -16
- package/dist/modules/mcp/tools/docs/readResource.js +0 -23
- package/dist/modules/mcp/tools/plugins/addPlugin.js +0 -24
- package/dist/modules/mcp/tools/plugins/listPlugins.js +0 -20
- package/dist/modules/mcp/tools/plugins/removePlugin.js +0 -16
- package/dist/modules/mcp/tools/plugins/updatePlugin.js +0 -23
- package/dist/modules/mcp/tools/resources/addResource.js +0 -33
- package/dist/modules/mcp/tools/resources/getResource.js +0 -29
- package/dist/modules/mcp/tools/resources/getResources.js +0 -27
- package/dist/modules/mcp/tools/resources/moveResource.js +0 -30
- package/dist/modules/mcp/tools/resources/removeResource.js +0 -19
- package/dist/modules/mcp/tools/segment/createSegment.js +0 -27
- package/dist/modules/mcp/tools/segment/deleteSegment.js +0 -16
- package/dist/modules/mcp/tools/segment/getSegment.js +0 -19
- package/dist/modules/mcp/tools/segment/getSegments.js +0 -27
- package/dist/modules/mcp/tools/segment/schema/elements/createSegmentElement.js +0 -24
- package/dist/modules/mcp/tools/segment/schema/elements/deleteSegmentElement.js +0 -19
- package/dist/modules/mcp/tools/segment/schema/elements/moveSegmentElement.js +0 -28
- package/dist/modules/mcp/tools/segment/schema/elements/updateSegmentElement.js +0 -23
- package/dist/modules/mcp/tools/segment/schema/variables/createSegmentVariable.js +0 -41
- package/dist/modules/mcp/tools/segment/schema/variables/deleteSegmentVariable.js +0 -19
- package/dist/modules/mcp/tools/segment/schema/variables/updateSegmentVariable.js +0 -41
- package/dist/modules/mcp/tools/segment/style/variables/createSegmentStyleVariable.js +0 -34
- package/dist/modules/mcp/tools/segment/style/variables/deleteSegmentStyleVariable.js +0 -21
- package/dist/modules/mcp/tools/segment/style/variables/updateSegmentStyleVariable.js +0 -34
- package/dist/modules/mcp/tools/segment/updateSegment.js +0 -30
- package/dist/modules/mcp/tools/space/schema/applyPreview.js +0 -33
- package/dist/modules/mcp/tools/space/schema/elements/cloneElement.js +0 -34
- package/dist/modules/mcp/tools/space/schema/elements/createElement.js +0 -50
- package/dist/modules/mcp/tools/space/schema/elements/deleteElement.js +0 -16
- package/dist/modules/mcp/tools/space/schema/elements/getElement.js +0 -17
- package/dist/modules/mcp/tools/space/schema/elements/getElements.js +0 -21
- package/dist/modules/mcp/tools/space/schema/elements/listElements.js +0 -28
- package/dist/modules/mcp/tools/space/schema/elements/moveElement.js +0 -27
- package/dist/modules/mcp/tools/space/schema/elements/updateElement.js +0 -49
- package/dist/modules/mcp/tools/space/schema/getSpaceSettings.js +0 -46
- package/dist/modules/mcp/tools/space/schema/pageFolders/createPageFolder.js +0 -24
- package/dist/modules/mcp/tools/space/schema/pageFolders/deletePageFolder.js +0 -16
- package/dist/modules/mcp/tools/space/schema/pageFolders/getPageFolder.js +0 -17
- package/dist/modules/mcp/tools/space/schema/pageFolders/getPageFolders.js +0 -17
- package/dist/modules/mcp/tools/space/schema/pageFolders/updatePageFolder.js +0 -28
- package/dist/modules/mcp/tools/space/schema/pages/createPage.js +0 -37
- package/dist/modules/mcp/tools/space/schema/pages/deletePage.js +0 -16
- package/dist/modules/mcp/tools/space/schema/pages/getPage.js +0 -28
- package/dist/modules/mcp/tools/space/schema/pages/getPageBySlug.js +0 -17
- package/dist/modules/mcp/tools/space/schema/pages/getPages.js +0 -17
- package/dist/modules/mcp/tools/space/schema/pages/updatePage.js +0 -25
- package/dist/modules/mcp/tools/space/schema/schemas.js +0 -53
- package/dist/modules/mcp/tools/space/schema/updateSpaceSettings.js +0 -23
- package/dist/modules/mcp/tools/space/schema/variables/createVariable.js +0 -38
- package/dist/modules/mcp/tools/space/schema/variables/deleteVariable.js +0 -16
- package/dist/modules/mcp/tools/space/schema/variables/getVariable.js +0 -17
- package/dist/modules/mcp/tools/space/schema/variables/getVariables.js +0 -17
- package/dist/modules/mcp/tools/space/schema/variables/updateVariable.js +0 -38
- package/dist/modules/mcp/tools/space/style/selectors/createStyleSelector.js +0 -37
- package/dist/modules/mcp/tools/space/style/selectors/deleteStyleSelector.js +0 -24
- package/dist/modules/mcp/tools/space/style/selectors/getStyleSelectors.js +0 -20
- package/dist/modules/mcp/tools/space/style/selectors/updateStyleSelector.js +0 -37
- package/dist/modules/mcp/tools/space/style/variables/createStyleVariable.js +0 -33
- package/dist/modules/mcp/tools/space/style/variables/deleteStyleVariable.js +0 -20
- package/dist/modules/mcp/tools/space/style/variables/getStyleVariable.js +0 -19
- package/dist/modules/mcp/tools/space/style/variables/getStyleVariables.js +0 -16
- package/dist/modules/mcp/tools/space/style/variables/updateStyleVariable.js +0 -33
- package/dist/package.js +0 -77
- package/dist/package.json.d.ts +0 -67
- package/dist/src/core/requestHandler.d.ts +0 -5
- package/dist/src/modules/mcp/helpers.d.ts +0 -9
- package/dist/src/modules/mcp/resources/glossary/binding.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/collection.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/displayMode.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/element.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/environment.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/interaction.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/page.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/plugin.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/resource.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/schema.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/schemaVariable.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/segment.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/space.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/style.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/styleSelector.d.ts +0 -7
- package/dist/src/modules/mcp/resources/glossary/styleVariable.d.ts +0 -7
- package/dist/src/modules/mcp/resources/workflows/data.d.ts +0 -7
- package/dist/src/modules/mcp/resources/workflows/elements.d.ts +0 -7
- package/dist/src/modules/mcp/resources/workflows/segments.d.ts +0 -7
- package/dist/src/modules/mcp/resources/workflows/styles.d.ts +0 -7
- package/dist/src/modules/mcp/tools/collections/createCollection.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/createCollectionRecord.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/deleteCollection.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/deleteCollectionRecord.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/getCollection.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/getCollectionRecord.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/getCollectionRecords.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/getCollections.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/index.d.ts +0 -10
- package/dist/src/modules/mcp/tools/collections/updateCollection.d.ts +0 -3
- package/dist/src/modules/mcp/tools/collections/updateCollectionRecord.d.ts +0 -3
- package/dist/src/modules/mcp/tools/docs/index.d.ts +0 -2
- package/dist/src/modules/mcp/tools/docs/listResources.d.ts +0 -3
- package/dist/src/modules/mcp/tools/docs/readResource.d.ts +0 -3
- package/dist/src/modules/mcp/tools/plugins/addPlugin.d.ts +0 -3
- package/dist/src/modules/mcp/tools/plugins/index.d.ts +0 -5
- package/dist/src/modules/mcp/tools/plugins/listPlugins.d.ts +0 -3
- package/dist/src/modules/mcp/tools/plugins/removePlugin.d.ts +0 -3
- package/dist/src/modules/mcp/tools/plugins/updatePlugin.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/addResource.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/getResource.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/getResources.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/index.d.ts +0 -6
- package/dist/src/modules/mcp/tools/resources/moveResource.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/removeResource.d.ts +0 -3
- package/dist/src/modules/mcp/tools/resources/resources.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/createSegment.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/deleteSegment.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/getSegment.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/getSegments.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/index.d.ts +0 -8
- package/dist/src/modules/mcp/tools/segment/schema/elements/createSegmentElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/elements/deleteSegmentElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/elements/index.d.ts +0 -5
- package/dist/src/modules/mcp/tools/segment/schema/elements/moveSegmentElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/elements/segmentElements.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/schema/elements/updateSegmentElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/index.d.ts +0 -2
- package/dist/src/modules/mcp/tools/segment/schema/variables/createSegmentVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/variables/deleteSegmentVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/schema/variables/index.d.ts +0 -4
- package/dist/src/modules/mcp/tools/segment/schema/variables/segmentVariables.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/schema/variables/updateSegmentVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/segment.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/style/index.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/style/variables/createSegmentStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/style/variables/deleteSegmentStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/style/variables/index.d.ts +0 -4
- package/dist/src/modules/mcp/tools/segment/style/variables/segmentStyleVariables.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/segment/style/variables/updateSegmentStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/segment/updateSegment.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/index.d.ts +0 -2
- package/dist/src/modules/mcp/tools/space/schema/applyPreview.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/cloneElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/createElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/deleteElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/elements.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/schema/elements/getElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/getElements.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/index.d.ts +0 -9
- package/dist/src/modules/mcp/tools/space/schema/elements/listElements.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/moveElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/elements/updateElement.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/getSpaceSettings.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/index.d.ts +0 -8
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/createPageFolder.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/deletePageFolder.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/getPageFolder.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/getPageFolders.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/index.d.ts +0 -6
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/pageFolders.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/schema/pageFolders/updatePageFolder.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/createPage.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/deletePage.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/getPage.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/getPageBySlug.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/getPages.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/pages/index.d.ts +0 -7
- package/dist/src/modules/mcp/tools/space/schema/pages/pages.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/schema/pages/updatePage.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/schemas.d.ts +0 -66
- package/dist/src/modules/mcp/tools/space/schema/updateSpaceSettings.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/createVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/deleteVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/getVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/getVariables.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/index.d.ts +0 -6
- package/dist/src/modules/mcp/tools/space/schema/variables/updateVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/schema/variables/variables.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/space.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/style/index.d.ts +0 -2
- package/dist/src/modules/mcp/tools/space/style/selectors/createStyleSelector.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/selectors/deleteStyleSelector.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/selectors/getStyleSelectors.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/selectors/index.d.ts +0 -5
- package/dist/src/modules/mcp/tools/space/style/selectors/styleSelectors.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/style/selectors/updateStyleSelector.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/variables/createStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/variables/deleteStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/variables/getStyleVariable.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/variables/getStyleVariables.d.ts +0 -3
- package/dist/src/modules/mcp/tools/space/style/variables/index.d.ts +0 -6
- package/dist/src/modules/mcp/tools/space/style/variables/styleVariables.test.d.ts +0 -1
- package/dist/src/modules/mcp/tools/space/style/variables/updateStyleVariable.d.ts +0 -3
- /package/dist/src/{modules/mcp/helpers.test.d.ts → core/server/mcpServer.test.d.ts} +0 -0
- /package/dist/src/modules/{mcp/tools/collections/collections.test.d.ts → ai/toolkit.test.d.ts} +0 -0
- /package/dist/src/modules/mcp/{tools/plugins/plugins.test.d.ts → mcp.test.d.ts} +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { guideText } from "../helpers/guide.js";
|
|
2
|
+
import { resourceErrorMessage } from "./canonical.js";
|
|
3
|
+
import { envelope, jsonContents } from "./envelope.js";
|
|
4
|
+
import { cssProperties } from "../tools/operations/style/cssCatalog.js";
|
|
5
|
+
import { readResource } from "./router.js";
|
|
6
|
+
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp";
|
|
7
|
+
//#region src/modules/mcp/resources/register.ts
|
|
8
|
+
/** Register every resource on the MCP server: fixed listings plus templated per-item reads. The space is
|
|
9
|
+
* loaded lazily via getSpace, so listing resources never touches the store — only reading one does. */
|
|
10
|
+
var registerResources = (server, getSpace, env) => {
|
|
11
|
+
const emit = async (uri) => {
|
|
12
|
+
const result = readResource(await getSpace(), env, uri);
|
|
13
|
+
if (!result) throw new Error(resourceErrorMessage(env, uri));
|
|
14
|
+
return jsonContents(uri, result);
|
|
15
|
+
};
|
|
16
|
+
server.registerResource("Guide", "plitzi://guide", {
|
|
17
|
+
description: "How to read and write this space with mcp-ai",
|
|
18
|
+
mimeType: "text/markdown"
|
|
19
|
+
}, () => ({ contents: [{
|
|
20
|
+
uri: "plitzi://guide",
|
|
21
|
+
mimeType: "text/markdown",
|
|
22
|
+
text: guideText
|
|
23
|
+
}] }));
|
|
24
|
+
server.registerResource("CSS properties", "plitzi://css-properties", {
|
|
25
|
+
description: "Valid kebab-case CSS property keys",
|
|
26
|
+
mimeType: "application/json"
|
|
27
|
+
}, () => jsonContents("plitzi://css-properties", envelope(cssProperties)));
|
|
28
|
+
const fixed = [
|
|
29
|
+
[
|
|
30
|
+
"Primer",
|
|
31
|
+
`plitzi://primer/${env}`,
|
|
32
|
+
"Read this FIRST. Cold-start bundle in one call: guide, types, css-properties and SUMMARIES of pages, definitions and variables — summaries only, never full page/element trees, so it stays small even on a large space. Open a page or element on demand afterwards."
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
"Element types",
|
|
36
|
+
"plitzi://types",
|
|
37
|
+
"Observed element types with props, slots and subTypes"
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
"Pages",
|
|
41
|
+
`plitzi://schema/${env}/pages`,
|
|
42
|
+
"Page summaries (ref, label, elementCount) — no element trees"
|
|
43
|
+
],
|
|
44
|
+
[
|
|
45
|
+
"Folders",
|
|
46
|
+
`plitzi://folders/${env}`,
|
|
47
|
+
"Page folders (the sidebar tree): ref, name, slug, parentId"
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
"Style definitions",
|
|
51
|
+
`plitzi://definitions/${env}`,
|
|
52
|
+
"Style definition refs (names)"
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"Global styles",
|
|
56
|
+
`plitzi://global-styles/${env}`,
|
|
57
|
+
"Element types that have a site-wide global style"
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"Style variables",
|
|
61
|
+
`plitzi://style-variables/${env}`,
|
|
62
|
+
"Design tokens by category"
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
"Schema variables",
|
|
66
|
+
`plitzi://schema-variables/${env}`,
|
|
67
|
+
"Space-level values referenced via {{name}}"
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
"Style definitions (schema alias)",
|
|
71
|
+
`plitzi://schema/${env}/definitions`,
|
|
72
|
+
"Alias of plitzi://definitions/{env}"
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
"Style variables (schema alias)",
|
|
76
|
+
`plitzi://schema/${env}/style-variables`,
|
|
77
|
+
"Alias of plitzi://style-variables/{env}"
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
"Schema variables (schema alias)",
|
|
81
|
+
`plitzi://schema/${env}/schema-variables`,
|
|
82
|
+
"Alias of plitzi://schema-variables/{env}"
|
|
83
|
+
]
|
|
84
|
+
];
|
|
85
|
+
for (const [name, uri, description] of fixed) server.registerResource(name, uri, {
|
|
86
|
+
description,
|
|
87
|
+
mimeType: "application/json"
|
|
88
|
+
}, () => emit(uri));
|
|
89
|
+
const templates = [
|
|
90
|
+
[
|
|
91
|
+
"Page",
|
|
92
|
+
`plitzi://schema/${env}/pages/{ref}`,
|
|
93
|
+
"One page as a skeleton tree (ref/type/label/children), no props"
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"Page styles",
|
|
97
|
+
`plitzi://schema/${env}/pages/{ref}/styles`,
|
|
98
|
+
"Every style a page uses in one read: class definitions its elements attach (with CSS) + global styles"
|
|
99
|
+
],
|
|
100
|
+
[
|
|
101
|
+
"Element",
|
|
102
|
+
`plitzi://schema/${env}/elements/{ref}`,
|
|
103
|
+
"One element in full detail (props, style) by ref or id"
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
"Folder",
|
|
107
|
+
`plitzi://folders/${env}/{ref}`,
|
|
108
|
+
"One page folder (name, slug, parentId) by folder id"
|
|
109
|
+
],
|
|
110
|
+
[
|
|
111
|
+
"Style definition",
|
|
112
|
+
`plitzi://definitions/${env}/{ref}`,
|
|
113
|
+
"One style definition (CSS) by class ref"
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
"Global style",
|
|
117
|
+
`plitzi://global-styles/${env}/{componentType}`,
|
|
118
|
+
"The site-wide CSS applied to every element of one type"
|
|
119
|
+
],
|
|
120
|
+
[
|
|
121
|
+
"Style variables by category",
|
|
122
|
+
`plitzi://style-variables/${env}/{category}`,
|
|
123
|
+
"Design tokens for one category"
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"Style definition (schema alias)",
|
|
127
|
+
`plitzi://schema/${env}/definitions/{ref}`,
|
|
128
|
+
"Alias of plitzi://definitions/{env}/{ref}"
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
"Style variables by category (schema alias)",
|
|
132
|
+
`plitzi://schema/${env}/style-variables/{category}`,
|
|
133
|
+
"Alias of plitzi://style-variables/{env}/{category}"
|
|
134
|
+
]
|
|
135
|
+
];
|
|
136
|
+
for (const [name, tpl, description] of templates) server.registerResource(name, new ResourceTemplate(tpl, { list: void 0 }), {
|
|
137
|
+
description,
|
|
138
|
+
mimeType: "application/json"
|
|
139
|
+
}, (uri) => emit(uri.href));
|
|
140
|
+
};
|
|
141
|
+
//#endregion
|
|
142
|
+
export { registerResources };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { canonicalUri } from "./canonical.js";
|
|
2
|
+
import { readCoreResource } from "./core.js";
|
|
3
|
+
import { readPrimerResource } from "./primer.js";
|
|
4
|
+
import { readSchemaResource } from "./schema.js";
|
|
5
|
+
import { readStyleResource } from "./style.js";
|
|
6
|
+
//#region src/modules/mcp/resources/router.ts
|
|
7
|
+
var resolvers = [
|
|
8
|
+
(space, _env, uri) => readCoreResource(space, uri),
|
|
9
|
+
readPrimerResource,
|
|
10
|
+
readSchemaResource,
|
|
11
|
+
readStyleResource
|
|
12
|
+
];
|
|
13
|
+
/** Resolve a resource URI to its versioned envelope, or null if unknown / not found. */
|
|
14
|
+
var readResource = (space, env, rawUri) => {
|
|
15
|
+
const uri = canonicalUri(env, rawUri);
|
|
16
|
+
for (const resolve of resolvers) {
|
|
17
|
+
const result = resolve(space, env, uri);
|
|
18
|
+
if (result !== void 0) return result;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
/** Current version of a resource, for optimistic-concurrency checks. Null when the URI is unknown. */
|
|
23
|
+
var resourceVersion = (space, env, uri) => readResource(space, env, uri)?.stateVersion ?? null;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { readResource, resourceVersion };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { findElementByRef, findPageByRef } from "../helpers/space.js";
|
|
2
|
+
import { envelope } from "./envelope.js";
|
|
3
|
+
import { elementDetailToAI, folderRefToAI, foldersToAI, pageSkeletonToAI, pageStylesToAI, pageSummariesToAI, schemaVariablesToAI } from "../tools/operations/schema/translator.js";
|
|
4
|
+
//#region src/modules/mcp/resources/schema.ts
|
|
5
|
+
/** Element-schema reads: page listings/skeletons/styles, folders, single elements and schema variables. Returns
|
|
6
|
+
* undefined when the URI belongs to another domain, null when the shape is ours but the ref does not resolve. */
|
|
7
|
+
var readSchemaResource = (space, env, uri) => {
|
|
8
|
+
if (uri === `plitzi://schema/${env}/pages`) return envelope(pageSummariesToAI(space.schema));
|
|
9
|
+
if (uri === `plitzi://folders/${env}`) return envelope(foldersToAI(space.schema));
|
|
10
|
+
if (uri.startsWith(`plitzi://folders/${env}/`)) {
|
|
11
|
+
const ref = uri.slice(`plitzi://folders/${env}/`.length);
|
|
12
|
+
const folder = folderRefToAI(space.schema, ref);
|
|
13
|
+
return folder ? envelope(folder) : null;
|
|
14
|
+
}
|
|
15
|
+
if (uri.startsWith(`plitzi://schema/${env}/pages/`) && uri.endsWith("/styles")) {
|
|
16
|
+
const ref = uri.slice(`plitzi://schema/${env}/pages/`.length, -7);
|
|
17
|
+
const page = findPageByRef(space.schema, ref);
|
|
18
|
+
return page ? envelope(pageStylesToAI(space.schema, space.style, page)) : null;
|
|
19
|
+
}
|
|
20
|
+
if (uri.startsWith(`plitzi://schema/${env}/pages/`)) {
|
|
21
|
+
const ref = uri.slice(`plitzi://schema/${env}/pages/`.length);
|
|
22
|
+
const page = findPageByRef(space.schema, ref);
|
|
23
|
+
return page ? envelope(pageSkeletonToAI(space.schema, page)) : null;
|
|
24
|
+
}
|
|
25
|
+
if (uri.startsWith(`plitzi://schema/${env}/elements/`)) {
|
|
26
|
+
const ref = uri.slice(`plitzi://schema/${env}/elements/`.length);
|
|
27
|
+
const el = findElementByRef(space.schema, ref);
|
|
28
|
+
return el ? envelope(elementDetailToAI(space.schema, el, space.style)) : null;
|
|
29
|
+
}
|
|
30
|
+
if (uri === `plitzi://schema-variables/${env}`) return envelope(schemaVariablesToAI(space.schema));
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { readSchemaResource };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { envelope } from "./envelope.js";
|
|
2
|
+
import { definitionRefs, definitionToAI, globalStyleToAI, globalStyleTypes, styleVariablesToAI } from "../tools/operations/style/translator.js";
|
|
3
|
+
//#region src/modules/mcp/resources/style.ts
|
|
4
|
+
/** Style-schema reads: definitions, global (per-type) styles and design-token variables by category. Returns
|
|
5
|
+
* undefined when the URI belongs to another domain, null when the shape is ours but the ref does not resolve. */
|
|
6
|
+
var readStyleResource = (space, env, uri) => {
|
|
7
|
+
if (uri === `plitzi://definitions/${env}`) return envelope(definitionRefs(space.style));
|
|
8
|
+
if (uri.startsWith(`plitzi://definitions/${env}/`)) {
|
|
9
|
+
const ref = uri.slice(`plitzi://definitions/${env}/`.length);
|
|
10
|
+
const def = definitionToAI(space.style, ref);
|
|
11
|
+
return def ? envelope(def) : null;
|
|
12
|
+
}
|
|
13
|
+
if (uri === `plitzi://global-styles/${env}`) return envelope(globalStyleTypes(space.style));
|
|
14
|
+
if (uri.startsWith(`plitzi://global-styles/${env}/`)) {
|
|
15
|
+
const componentType = uri.slice(`plitzi://global-styles/${env}/`.length);
|
|
16
|
+
const global = globalStyleToAI(space.style, componentType);
|
|
17
|
+
return global ? envelope(global) : null;
|
|
18
|
+
}
|
|
19
|
+
if (uri === `plitzi://style-variables/${env}`) return envelope(styleVariablesToAI(space.style));
|
|
20
|
+
if (uri.startsWith(`plitzi://style-variables/${env}/`)) {
|
|
21
|
+
const category = uri.slice(`plitzi://style-variables/${env}/`.length);
|
|
22
|
+
const byCategory = styleVariablesToAI(space.style);
|
|
23
|
+
return envelope(Object.hasOwn(byCategory, category) ? byCategory[category] : []);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { readStyleResource };
|
|
@@ -0,0 +1,47 @@
|
|
|
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 };
|
|
@@ -1,29 +1,61 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { emptySpaceMessage, unauthorizedSpaceMessage } from "./helpers/space.js";
|
|
2
|
+
import { serverInstructions } from "./helpers/guide.js";
|
|
3
|
+
import { registerResources } from "./resources/register.js";
|
|
4
|
+
import { tools } from "./tools/index.js";
|
|
5
|
+
import { isCallToolResult } from "../ai/toolkit.js";
|
|
5
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
|
|
6
7
|
//#region src/modules/mcp/server.ts
|
|
7
|
-
var
|
|
8
|
-
|
|
8
|
+
var MCP_ENV = "main";
|
|
9
|
+
var asText = (data) => ({ content: [{
|
|
10
|
+
type: "text",
|
|
11
|
+
text: JSON.stringify(data)
|
|
12
|
+
}] });
|
|
13
|
+
var createMcpServer = ({ adapters, getSpaceId, preview, screenshot }) => {
|
|
14
|
+
let spaceIdPromise;
|
|
15
|
+
const requireSpaceId = () => spaceIdPromise ??= getSpaceId().then((id) => {
|
|
16
|
+
if (!id) throw new Error(unauthorizedSpaceMessage);
|
|
17
|
+
return id;
|
|
18
|
+
});
|
|
19
|
+
const loadSpace = async () => {
|
|
20
|
+
const spaceId = await requireSpaceId();
|
|
21
|
+
const [schema, style] = await Promise.all([adapters.getSchema?.(spaceId, MCP_ENV), adapters.getStyle?.(spaceId, MCP_ENV)]);
|
|
22
|
+
if (!schema || !style) throw new Error(emptySpaceMessage);
|
|
23
|
+
return {
|
|
24
|
+
schema,
|
|
25
|
+
style
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const { saveSchema, saveStyle } = adapters;
|
|
29
|
+
const persisters = {
|
|
30
|
+
schema: saveSchema ? async (schema) => saveSchema(await requireSpaceId(), MCP_ENV, schema) : void 0,
|
|
31
|
+
style: saveStyle ? async (style) => saveStyle(await requireSpaceId(), MCP_ENV, style) : void 0
|
|
32
|
+
};
|
|
33
|
+
let spacePromise;
|
|
34
|
+
const getSpace = () => spacePromise ??= loadSpace();
|
|
9
35
|
const server = new McpServer({
|
|
10
36
|
name: "plitzi-mcp",
|
|
11
|
-
version:
|
|
37
|
+
version: "0.3.0"
|
|
38
|
+
}, { instructions: serverInstructions });
|
|
39
|
+
registerResources(server, getSpace, MCP_ENV);
|
|
40
|
+
const toolContext = async () => ({
|
|
41
|
+
space: await getSpace(),
|
|
42
|
+
env: MCP_ENV,
|
|
43
|
+
persisters,
|
|
44
|
+
spaceId: await requireSpaceId(),
|
|
45
|
+
preview,
|
|
46
|
+
screenshot
|
|
12
47
|
});
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
};
|
|
24
|
-
server.registerTool(tool.name, definition, engine.execute(tool.name, tool.handler));
|
|
48
|
+
for (const tool of tools) {
|
|
49
|
+
if (tool.requires === "screenshot" && !screenshot) continue;
|
|
50
|
+
server.registerTool(tool.name, {
|
|
51
|
+
title: tool.title,
|
|
52
|
+
description: tool.description,
|
|
53
|
+
inputSchema: tool.inputShape
|
|
54
|
+
}, async (args) => {
|
|
55
|
+
const result = await tool.execute(args, await toolContext());
|
|
56
|
+
return isCallToolResult(result) ? result : asText(result);
|
|
57
|
+
});
|
|
25
58
|
}
|
|
26
|
-
if (prompts) for (const prompt of prompts) server.registerPrompt(prompt.name, prompt.definition, engine.executePrompt(prompt.name, prompt.handler));
|
|
27
59
|
return server;
|
|
28
60
|
};
|
|
29
61
|
//#endregion
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { fail } from "../../helpers/opResult.js";
|
|
2
|
+
import { deleteElement } from "../operations/schema/deleteElement.js";
|
|
3
|
+
import { deleteFolder } from "../operations/schema/deleteFolder.js";
|
|
4
|
+
import { deletePage } from "../operations/schema/deletePage.js";
|
|
5
|
+
import { deleteVariable } from "../operations/schema/deleteVariable.js";
|
|
6
|
+
import { moveElement } from "../operations/schema/moveElement.js";
|
|
7
|
+
import { patchElement } from "../operations/schema/patchElement.js";
|
|
8
|
+
import { upsertElement } from "../operations/schema/upsertElement.js";
|
|
9
|
+
import { upsertFolder } from "../operations/schema/upsertFolder.js";
|
|
10
|
+
import { upsertPage } from "../operations/schema/upsertPage.js";
|
|
11
|
+
import { upsertVariable } from "../operations/schema/upsertVariable.js";
|
|
12
|
+
import { deleteDefinition } from "../operations/style/deleteDefinition.js";
|
|
13
|
+
import { deleteGlobalStyle } from "../operations/style/deleteGlobalStyle.js";
|
|
14
|
+
import { deleteStyleVariable } from "../operations/style/deleteStyleVariable.js";
|
|
15
|
+
import { patchDefinition } from "../operations/style/patchDefinition.js";
|
|
16
|
+
import { patchGlobalStyle } from "../operations/style/patchGlobalStyle.js";
|
|
17
|
+
import { upsertDefinition } from "../operations/style/upsertDefinition.js";
|
|
18
|
+
import { upsertGlobalStyle } from "../operations/style/upsertGlobalStyle.js";
|
|
19
|
+
import { upsertStyleVariable } from "../operations/style/upsertStyleVariable.js";
|
|
20
|
+
import { isStyleOp } from "../operations/index.js";
|
|
21
|
+
//#region src/modules/mcp/tools/apply/dispatch.ts
|
|
22
|
+
var executeOp = (space, env, op) => {
|
|
23
|
+
switch (op.type) {
|
|
24
|
+
case "upsertElement": return upsertElement(space, env, op);
|
|
25
|
+
case "patchElement": return patchElement(space, env, op);
|
|
26
|
+
case "deleteElement": return deleteElement(space, env, op);
|
|
27
|
+
case "moveElement": return moveElement(space, env, op);
|
|
28
|
+
case "upsertPage": return upsertPage(space, env, op);
|
|
29
|
+
case "deletePage": return deletePage(space, env, op);
|
|
30
|
+
case "upsertFolder": return upsertFolder(space, env, op);
|
|
31
|
+
case "deleteFolder": return deleteFolder(space, env, op);
|
|
32
|
+
case "upsertVariable": return upsertVariable(space, env, op);
|
|
33
|
+
case "deleteVariable": return deleteVariable(space, env, op);
|
|
34
|
+
case "upsertDefinition": return upsertDefinition(space, env, op);
|
|
35
|
+
case "patchDefinition": return patchDefinition(space, env, op);
|
|
36
|
+
case "deleteDefinition": return deleteDefinition(space, env, op);
|
|
37
|
+
case "upsertGlobalStyle": return upsertGlobalStyle(space, env, op);
|
|
38
|
+
case "patchGlobalStyle": return patchGlobalStyle(space, env, op);
|
|
39
|
+
case "deleteGlobalStyle": return deleteGlobalStyle(space, env, op);
|
|
40
|
+
case "upsertStyleVariable": return upsertStyleVariable(space, env, op);
|
|
41
|
+
case "deleteStyleVariable": return deleteStyleVariable(space, env, op);
|
|
42
|
+
default: return fail("type", `Unknown operation "${op.type}"`, "See the Operation union");
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
/** Apply operations in order to the space (mutating it). Records which schema(s) changed so the caller can
|
|
46
|
+
* persist each independently. Stops collecting counts for a failed op but records its errors. */
|
|
47
|
+
var applyOperations = (space, env, ops) => {
|
|
48
|
+
const outcome = {
|
|
49
|
+
created: 0,
|
|
50
|
+
updated: 0,
|
|
51
|
+
deleted: 0,
|
|
52
|
+
staleResources: [],
|
|
53
|
+
elementRefs: [],
|
|
54
|
+
errors: [],
|
|
55
|
+
changedSchema: false,
|
|
56
|
+
changedStyle: false
|
|
57
|
+
};
|
|
58
|
+
const stale = /* @__PURE__ */ new Set();
|
|
59
|
+
const elements = /* @__PURE__ */ new Set();
|
|
60
|
+
for (let i = 0; i < ops.length; i++) {
|
|
61
|
+
const op = ops[i];
|
|
62
|
+
const result = executeOp(space, env, op);
|
|
63
|
+
if (result.errors) {
|
|
64
|
+
outcome.errors.push(...result.errors.map((e) => ({
|
|
65
|
+
...e,
|
|
66
|
+
path: `operations[${i}].${e.path}`
|
|
67
|
+
})));
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (isStyleOp(op.type)) outcome.changedStyle = true;
|
|
71
|
+
else outcome.changedSchema = true;
|
|
72
|
+
outcome.created += result.created;
|
|
73
|
+
outcome.updated += result.updated;
|
|
74
|
+
outcome.deleted += result.deleted;
|
|
75
|
+
for (const uri of result.staleResources) stale.add(uri);
|
|
76
|
+
for (const ref of result.elementRefs ?? []) elements.add(ref);
|
|
77
|
+
}
|
|
78
|
+
outcome.staleResources = Array.from(stale);
|
|
79
|
+
outcome.elementRefs = Array.from(elements);
|
|
80
|
+
return outcome;
|
|
81
|
+
};
|
|
82
|
+
//#endregion
|
|
83
|
+
export { applyOperations };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { cloneSpace } from "../../helpers/space.js";
|
|
2
|
+
import { environment, operations } from "../operations/index.js";
|
|
3
|
+
import { applyOperations } from "./dispatch.js";
|
|
4
|
+
import { changedResources, conflictMessage, detectConflicts, resolvedElements } from "./writeResult.js";
|
|
5
|
+
import { defineTool } from "../shared/tool.js";
|
|
6
|
+
import { validateOperations } from "../shared/validator.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { validateSchema } from "@plitzi/sdk-schema";
|
|
9
|
+
//#region src/modules/mcp/tools/apply/index.ts
|
|
10
|
+
var applyShape = {
|
|
11
|
+
environment,
|
|
12
|
+
dryRun: z.boolean().optional().describe("Validate and apply in memory only, WITHOUT persisting. Returns the same result (changed versions + full element detail) so you can inspect the outcome and decide on more changes before committing for real."),
|
|
13
|
+
expectedResourceVersions: z.record(z.string(), z.string()).optional().describe("Resource URI → the stateVersion you read; guards against concurrent edits"),
|
|
14
|
+
operations
|
|
15
|
+
};
|
|
16
|
+
var noWarnings = (warnings) => warnings.length > 0 ? warnings : void 0;
|
|
17
|
+
var schemaErrorToValidation = (error) => ({
|
|
18
|
+
path: error.elementId ? `schema.${error.elementId}` : "schema",
|
|
19
|
+
message: error.message,
|
|
20
|
+
hint: "This batch would leave the schema inconsistent (broken parent/child link or a cycle); nothing was applied."
|
|
21
|
+
});
|
|
22
|
+
var apply = async (input, space, persisters) => {
|
|
23
|
+
const env = input.environment ?? "main";
|
|
24
|
+
const validation = validateOperations(space, input.operations);
|
|
25
|
+
if (!validation.valid) return {
|
|
26
|
+
applied: false,
|
|
27
|
+
persisted: false,
|
|
28
|
+
summary: {
|
|
29
|
+
created: 0,
|
|
30
|
+
updated: 0,
|
|
31
|
+
deleted: 0
|
|
32
|
+
},
|
|
33
|
+
changed: [],
|
|
34
|
+
errors: validation.errors,
|
|
35
|
+
warnings: noWarnings(validation.warnings)
|
|
36
|
+
};
|
|
37
|
+
const conflicts = detectConflicts(space, env, input.expectedResourceVersions);
|
|
38
|
+
if (conflicts.length > 0) return {
|
|
39
|
+
applied: false,
|
|
40
|
+
persisted: false,
|
|
41
|
+
summary: {
|
|
42
|
+
created: 0,
|
|
43
|
+
updated: 0,
|
|
44
|
+
deleted: 0
|
|
45
|
+
},
|
|
46
|
+
changed: [],
|
|
47
|
+
conflict: {
|
|
48
|
+
message: conflictMessage,
|
|
49
|
+
conflicts
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const draft = cloneSpace(space);
|
|
53
|
+
const outcome = applyOperations(draft, env, input.operations);
|
|
54
|
+
if (outcome.errors.length > 0) return {
|
|
55
|
+
applied: false,
|
|
56
|
+
persisted: false,
|
|
57
|
+
summary: {
|
|
58
|
+
created: 0,
|
|
59
|
+
updated: 0,
|
|
60
|
+
deleted: 0
|
|
61
|
+
},
|
|
62
|
+
changed: [],
|
|
63
|
+
errors: outcome.errors,
|
|
64
|
+
warnings: noWarnings(validation.warnings)
|
|
65
|
+
};
|
|
66
|
+
const integrity = validateSchema(draft.schema);
|
|
67
|
+
if (!integrity.valid) return {
|
|
68
|
+
applied: false,
|
|
69
|
+
persisted: false,
|
|
70
|
+
summary: {
|
|
71
|
+
created: 0,
|
|
72
|
+
updated: 0,
|
|
73
|
+
deleted: 0
|
|
74
|
+
},
|
|
75
|
+
changed: [],
|
|
76
|
+
errors: integrity.errors.map(schemaErrorToValidation),
|
|
77
|
+
warnings: noWarnings(validation.warnings)
|
|
78
|
+
};
|
|
79
|
+
if (input.dryRun) return {
|
|
80
|
+
applied: false,
|
|
81
|
+
dryRun: true,
|
|
82
|
+
summary: {
|
|
83
|
+
created: outcome.created,
|
|
84
|
+
updated: outcome.updated,
|
|
85
|
+
deleted: outcome.deleted
|
|
86
|
+
},
|
|
87
|
+
changed: changedResources(draft, env, outcome.staleResources),
|
|
88
|
+
elements: resolvedElements(draft, env, outcome.elementRefs),
|
|
89
|
+
warnings: noWarnings(validation.warnings)
|
|
90
|
+
};
|
|
91
|
+
let persisted = true;
|
|
92
|
+
if (outcome.changedSchema) if (persisters?.schema) await persisters.schema(draft.schema);
|
|
93
|
+
else persisted = false;
|
|
94
|
+
if (outcome.changedStyle) if (persisters?.style) await persisters.style(draft.style);
|
|
95
|
+
else persisted = false;
|
|
96
|
+
return {
|
|
97
|
+
applied: true,
|
|
98
|
+
persisted,
|
|
99
|
+
summary: {
|
|
100
|
+
created: outcome.created,
|
|
101
|
+
updated: outcome.updated,
|
|
102
|
+
deleted: outcome.deleted
|
|
103
|
+
},
|
|
104
|
+
changed: changedResources(draft, env, outcome.staleResources),
|
|
105
|
+
elements: resolvedElements(draft, env, outcome.elementRefs),
|
|
106
|
+
warnings: noWarnings(validation.warnings)
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
var applyTool = defineTool({
|
|
110
|
+
name: "plitzi_apply",
|
|
111
|
+
title: "Apply",
|
|
112
|
+
description: "Validate, apply and persist a batch of operations atomically. Returns the changed resources and their new versions, plus the full detail of every element it created or updated. Pass dryRun to apply in memory only (inspect the outcome without committing). Rejects the whole batch on any error or version conflict.",
|
|
113
|
+
inputShape: applyShape,
|
|
114
|
+
access: "write",
|
|
115
|
+
run: (input, ctx) => apply({
|
|
116
|
+
...input,
|
|
117
|
+
environment: ctx.env
|
|
118
|
+
}, ctx.space, ctx.persisters)
|
|
119
|
+
});
|
|
120
|
+
//#endregion
|
|
121
|
+
export { apply, applyShape, applyTool };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { readResource, resourceVersion } from "../../resources/router.js";
|
|
2
|
+
//#region src/modules/mcp/tools/apply/writeResult.ts
|
|
3
|
+
var detectConflicts = (space, env, expected) => {
|
|
4
|
+
if (!expected) return [];
|
|
5
|
+
const conflicts = [];
|
|
6
|
+
for (const [uri, version] of Object.entries(expected)) {
|
|
7
|
+
const current = resourceVersion(space, env, uri);
|
|
8
|
+
if (current !== null && current !== version) conflicts.push({
|
|
9
|
+
resourceUri: uri,
|
|
10
|
+
expectedVersion: version,
|
|
11
|
+
currentVersion: current
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return conflicts;
|
|
15
|
+
};
|
|
16
|
+
var changedResources = (space, env, uris) => uris.map((uri) => ({
|
|
17
|
+
uri,
|
|
18
|
+
stateVersion: resourceVersion(space, env, uri) ?? ""
|
|
19
|
+
}));
|
|
20
|
+
/** Full detail of each created/updated element (by ref), skipping any that no longer resolve (e.g. deleted later
|
|
21
|
+
* in the same batch). Returns undefined when there is nothing, so the field stays off the response. */
|
|
22
|
+
var resolvedElements = (space, env, refs) => {
|
|
23
|
+
const elements = refs.map((ref) => {
|
|
24
|
+
const uri = `plitzi://schema/${env}/elements/${ref}`;
|
|
25
|
+
const res = readResource(space, env, uri);
|
|
26
|
+
return res ? {
|
|
27
|
+
uri,
|
|
28
|
+
stateVersion: res.stateVersion,
|
|
29
|
+
...res.data
|
|
30
|
+
} : void 0;
|
|
31
|
+
}).filter((el) => el !== void 0);
|
|
32
|
+
return elements.length > 0 ? elements : void 0;
|
|
33
|
+
};
|
|
34
|
+
var conflictMessage = "Cannot apply: your data is stale. Re-read the changed resources and retry.";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { changedResources, conflictMessage, detectConflicts, resolvedElements };
|