@specverse/engine-realize 3.5.3
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/assets/examples/09-api/ai-spec.yaml +194 -0
- package/assets/examples/09-api/converted.yaml +95 -0
- package/assets/examples/09-api/diagram-architecture.mmd +10 -0
- package/assets/examples/09-api/diagram-er.mmd +10 -0
- package/assets/examples/09-api/documentation.html +104 -0
- package/assets/examples/09-api/documentation.md +95 -0
- package/assets/examples/09-api/inferred-spec.yaml +420 -0
- package/assets/examples/09-api/openapi.json +61 -0
- package/assets/examples/10-api/README.md +216 -0
- package/assets/examples/10-api/ai-spec.yaml +194 -0
- package/assets/examples/10-api/converted.yaml +96 -0
- package/assets/examples/10-api/diagram-architecture.mmd +10 -0
- package/assets/examples/10-api/diagram-er.mmd +10 -0
- package/assets/examples/10-api/documentation.html +104 -0
- package/assets/examples/10-api/documentation.md +95 -0
- package/assets/examples/10-api/inferred-spec.yaml +7 -0
- package/assets/examples/10-api/metadata.yaml +89 -0
- package/assets/examples/10-api/openapi.json +61 -0
- package/assets/examples/10-api/package-integration-test.js +177 -0
- package/assets/examples/10-api/usage-example.js +323 -0
- package/assets/examples/10-api/usage-example.ts +363 -0
- package/assets/examples/10-api/workflow-test.js +113 -0
- package/assets/examples/manifests/01-simple-default-mappings.yaml +36 -0
- package/assets/examples/manifests/02-capability-mappings.yaml +55 -0
- package/assets/examples/manifests/03-hybrid-mappings.yaml +109 -0
- package/assets/examples/manifests/README.md +245 -0
- package/assets/examples/manifests/backend-only.yaml +43 -0
- package/assets/examples/manifests/blog-api.md +78 -0
- package/assets/examples/manifests/blog-api.specly +79 -0
- package/assets/examples/manifests/frontend-only.yaml +27 -0
- package/assets/examples/manifests/fullstack-app.yaml +44 -0
- package/assets/examples/manifests/fullstack-monorepo.yaml +62 -0
- package/assets/examples/validate-examples-with-expected-failures.cjs +328 -0
- package/assets/examples/validate-examples.cjs +225 -0
- package/assets/examples-decomposed/cloud-native-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/cloud-native-manifest.md +379 -0
- package/assets/examples-decomposed/cloud-native-manifest.specly +60 -0
- package/assets/examples-decomposed/docker-compose-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/docker-compose-manifest.md +326 -0
- package/assets/examples-decomposed/docker-compose-manifest.specly +40 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.md +237 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.specly +41 -0
- package/assets/templates/README.md +559 -0
- package/assets/templates/TEMPLATE-ENHANCEMENTS-V33.md +462 -0
- package/assets/templates/backend-only/CLAUDE.md +73 -0
- package/assets/templates/backend-only/README.md +197 -0
- package/assets/templates/backend-only/deployments/README.md +149 -0
- package/assets/templates/backend-only/deployments/development.specly +53 -0
- package/assets/templates/backend-only/deployments/production.specly +87 -0
- package/assets/templates/backend-only/docs/README.md +50 -0
- package/assets/templates/backend-only/docs/api/README.md +7 -0
- package/assets/templates/backend-only/docs/diagrams/README.md +85 -0
- package/assets/templates/backend-only/docs/example-documentation-template.md +269 -0
- package/assets/templates/backend-only/docs/guides/README.md +15 -0
- package/assets/templates/backend-only/dot.env.example +18 -0
- package/assets/templates/backend-only/generated/README.md +56 -0
- package/assets/templates/backend-only/generated/code/integration-test.template.js +320 -0
- package/assets/templates/backend-only/generated/code/package.json.template +34 -0
- package/assets/templates/backend-only/generated/docs/README.md +49 -0
- package/assets/templates/backend-only/gitignore +54 -0
- package/assets/templates/backend-only/manifests/README.md +72 -0
- package/assets/templates/backend-only/manifests/docker-compose.specly +91 -0
- package/assets/templates/backend-only/manifests/implementation.yaml +100 -0
- package/assets/templates/backend-only/manifests/kubernetes.specly +140 -0
- package/assets/templates/backend-only/package.json +59 -0
- package/assets/templates/backend-only/scripts/test-all.sh +160 -0
- package/assets/templates/backend-only/scripts/test-generated-code.sh +165 -0
- package/assets/templates/backend-only/specs/main.specly +67 -0
- package/assets/templates/default/CLAUDE.md +141 -0
- package/assets/templates/default/README.md +404 -0
- package/assets/templates/default/deployments/README.md +149 -0
- package/assets/templates/default/deployments/development.specly +53 -0
- package/assets/templates/default/deployments/production.specly +87 -0
- package/assets/templates/default/docs/README.md +50 -0
- package/assets/templates/default/docs/api/README.md +7 -0
- package/assets/templates/default/docs/diagrams/README.md +85 -0
- package/assets/templates/default/docs/example-documentation-template.md +269 -0
- package/assets/templates/default/docs/guides/README.md +15 -0
- package/assets/templates/default/dot.env.example +18 -0
- package/assets/templates/default/generated/README.md +56 -0
- package/assets/templates/default/generated/code/integration-test.template.js +320 -0
- package/assets/templates/default/generated/code/package.json.template +34 -0
- package/assets/templates/default/generated/docs/README.md +49 -0
- package/assets/templates/default/gitignore +54 -0
- package/assets/templates/default/manifests/README.md +72 -0
- package/assets/templates/default/manifests/docker-compose.specly +91 -0
- package/assets/templates/default/manifests/implementation.yaml +176 -0
- package/assets/templates/default/manifests/kubernetes.specly +140 -0
- package/assets/templates/default/package.json +61 -0
- package/assets/templates/default/scripts/test-all.sh +160 -0
- package/assets/templates/default/scripts/test-generated-code.sh +165 -0
- package/assets/templates/default/specs/main.specly +67 -0
- package/assets/templates/frontend-only/CLAUDE.md +75 -0
- package/assets/templates/frontend-only/README.md +231 -0
- package/assets/templates/frontend-only/deployments/README.md +149 -0
- package/assets/templates/frontend-only/deployments/development.specly +53 -0
- package/assets/templates/frontend-only/deployments/production.specly +87 -0
- package/assets/templates/frontend-only/docs/README.md +50 -0
- package/assets/templates/frontend-only/docs/api/README.md +7 -0
- package/assets/templates/frontend-only/docs/diagrams/README.md +85 -0
- package/assets/templates/frontend-only/docs/example-documentation-template.md +269 -0
- package/assets/templates/frontend-only/docs/guides/README.md +15 -0
- package/assets/templates/frontend-only/dot.env.example +18 -0
- package/assets/templates/frontend-only/generated/README.md +56 -0
- package/assets/templates/frontend-only/generated/code/integration-test.template.js +320 -0
- package/assets/templates/frontend-only/generated/code/package.json.template +34 -0
- package/assets/templates/frontend-only/generated/docs/README.md +49 -0
- package/assets/templates/frontend-only/gitignore +54 -0
- package/assets/templates/frontend-only/manifests/README.md +72 -0
- package/assets/templates/frontend-only/manifests/docker-compose.specly +91 -0
- package/assets/templates/frontend-only/manifests/implementation.yaml +58 -0
- package/assets/templates/frontend-only/manifests/kubernetes.specly +140 -0
- package/assets/templates/frontend-only/package.json +59 -0
- package/assets/templates/frontend-only/scripts/test-all.sh +160 -0
- package/assets/templates/frontend-only/scripts/test-generated-code.sh +165 -0
- package/assets/templates/frontend-only/specs/main.specly +57 -0
- package/assets/templates/full-stack/AI-GUIDE.md +60 -0
- package/assets/templates/full-stack/CLAUDE.md +141 -0
- package/assets/templates/full-stack/README.md +382 -0
- package/assets/templates/full-stack/archive/AI-GUIDE-legacy.md +392 -0
- package/assets/templates/full-stack/deployments/README.md +149 -0
- package/assets/templates/full-stack/deployments/development.specly +53 -0
- package/assets/templates/full-stack/deployments/production.specly +87 -0
- package/assets/templates/full-stack/docs/README.md +51 -0
- package/assets/templates/full-stack/docs/api/README.md +7 -0
- package/assets/templates/full-stack/docs/diagrams/README.md +85 -0
- package/assets/templates/full-stack/docs/example-documentation-template.md +269 -0
- package/assets/templates/full-stack/docs/guides/README.md +15 -0
- package/assets/templates/full-stack/generated/README.md +56 -0
- package/assets/templates/full-stack/generated/code/integration-test.template.js +320 -0
- package/assets/templates/full-stack/generated/code/package.json.template +34 -0
- package/assets/templates/full-stack/generated/docs/README.md +49 -0
- package/assets/templates/full-stack/gitignore +54 -0
- package/assets/templates/full-stack/manifests/README.md +72 -0
- package/assets/templates/full-stack/manifests/docker-compose.specly +91 -0
- package/assets/templates/full-stack/manifests/implementation.yaml +155 -0
- package/assets/templates/full-stack/manifests/kubernetes.specly +140 -0
- package/assets/templates/full-stack/package.json +45 -0
- package/assets/templates/full-stack/scripts/test-all.sh +160 -0
- package/assets/templates/full-stack/scripts/test-generated-code.sh +165 -0
- package/assets/templates/full-stack/specs/example-v33.specly +297 -0
- package/assets/templates/full-stack/specs/main-simple.specly +73 -0
- package/assets/templates/full-stack/specs/main.specly +408 -0
- package/dist/engines/code-generator.d.ts +86 -0
- package/dist/engines/code-generator.d.ts.map +1 -0
- package/dist/engines/code-generator.js +159 -0
- package/dist/engines/code-generator.js.map +1 -0
- package/dist/engines/engine-registry.d.ts +94 -0
- package/dist/engines/engine-registry.d.ts.map +1 -0
- package/dist/engines/engine-registry.js +163 -0
- package/dist/engines/engine-registry.js.map +1 -0
- package/dist/engines/index.d.ts +10 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +12 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/typescript-engine.d.ts +74 -0
- package/dist/engines/typescript-engine.d.ts.map +1 -0
- package/dist/engines/typescript-engine.js +288 -0
- package/dist/engines/typescript-engine.js.map +1 -0
- package/dist/generators/index.d.ts +11 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +11 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +434 -0
- package/dist/index.js.map +1 -0
- package/dist/library/index.d.ts +12 -0
- package/dist/library/index.d.ts.map +1 -0
- package/dist/library/index.js +15 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/library.d.ts +132 -0
- package/dist/library/library.d.ts.map +1 -0
- package/dist/library/library.js +343 -0
- package/dist/library/library.js.map +1 -0
- package/dist/library/loader.d.ts +73 -0
- package/dist/library/loader.d.ts.map +1 -0
- package/dist/library/loader.js +150 -0
- package/dist/library/loader.js.map +1 -0
- package/dist/library/resolver.d.ts +104 -0
- package/dist/library/resolver.d.ts.map +1 -0
- package/dist/library/resolver.js +299 -0
- package/dist/library/resolver.js.map +1 -0
- package/dist/library/validator.d.ts +65 -0
- package/dist/library/validator.d.ts.map +1 -0
- package/dist/library/validator.js +203 -0
- package/dist/library/validator.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/instance-factory.d.ts +289 -0
- package/dist/types/instance-factory.d.ts.map +1 -0
- package/dist/types/instance-factory.js +8 -0
- package/dist/types/instance-factory.js.map +1 -0
- package/dist/types/unified-mappings.d.ts +163 -0
- package/dist/types/unified-mappings.d.ts.map +1 -0
- package/dist/types/unified-mappings.js +110 -0
- package/dist/types/unified-mappings.js.map +1 -0
- package/dist/utils/ai-spec-loader.d.ts +77 -0
- package/dist/utils/ai-spec-loader.d.ts.map +1 -0
- package/dist/utils/ai-spec-loader.js +138 -0
- package/dist/utils/ai-spec-loader.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/manifest-loader.d.ts +107 -0
- package/dist/utils/manifest-loader.d.ts.map +1 -0
- package/dist/utils/manifest-loader.js +168 -0
- package/dist/utils/manifest-loader.js.map +1 -0
- package/dist/utils/mapping-migration.d.ts +53 -0
- package/dist/utils/mapping-migration.d.ts.map +1 -0
- package/dist/utils/mapping-migration.js +194 -0
- package/dist/utils/mapping-migration.js.map +1 -0
- package/libs/instance-factories/CURVED-INTERFACE.md +278 -0
- package/libs/instance-factories/README.md +433 -0
- package/libs/instance-factories/applications/generic-app.yaml +52 -0
- package/libs/instance-factories/applications/react-app.yaml +186 -0
- package/libs/instance-factories/applications/templates/generic/backend-env-generator.ts +31 -0
- package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +80 -0
- package/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.ts +69 -0
- package/libs/instance-factories/applications/templates/generic/main-generator.ts +308 -0
- package/libs/instance-factories/applications/templates/react/_view-components-source.ts +555 -0
- package/libs/instance-factories/applications/templates/react/api-client-generator.ts +436 -0
- package/libs/instance-factories/applications/templates/react/api-types-generator.ts +153 -0
- package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +94 -0
- package/libs/instance-factories/applications/templates/react/env-example-generator.ts +24 -0
- package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +106 -0
- package/libs/instance-factories/applications/templates/react/gitignore-generator.ts +38 -0
- package/libs/instance-factories/applications/templates/react/index-css-generator.ts +85 -0
- package/libs/instance-factories/applications/templates/react/index-html-generator.ts +30 -0
- package/libs/instance-factories/applications/templates/react/main-tsx-generator.ts +34 -0
- package/libs/instance-factories/applications/templates/react/package-json-generator.ts +54 -0
- package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +179 -0
- package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +1347 -0
- package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +704 -0
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +84 -0
- package/libs/instance-factories/applications/templates/react/tsconfig-generator.ts +35 -0
- package/libs/instance-factories/applications/templates/react/use-api-hooks-generator.ts +121 -0
- package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/view-form-generator.ts +362 -0
- package/libs/instance-factories/applications/templates/react/view-list-generator.ts +98 -0
- package/libs/instance-factories/applications/templates/react/view-router-generator.ts +89 -0
- package/libs/instance-factories/applications/templates/react/vite-config-generator.ts +49 -0
- package/libs/instance-factories/archived/fastify-prisma.yaml +104 -0
- package/libs/instance-factories/cli/commander-js.yaml +55 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts +12 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts.map +1 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +115 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js.map +1 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +145 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +14 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.d.ts.map +1 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.js +182 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.js.map +1 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +992 -0
- package/libs/instance-factories/communication/event-emitter.yaml +56 -0
- package/libs/instance-factories/communication/rabbitmq-events.yaml +87 -0
- package/libs/instance-factories/communication/templates/eventemitter/bus-generator.ts +93 -0
- package/libs/instance-factories/communication/templates/eventemitter/publisher-generator.ts +117 -0
- package/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.ts +101 -0
- package/libs/instance-factories/controllers/fastify.yaml +127 -0
- package/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.ts +103 -0
- package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +389 -0
- package/libs/instance-factories/controllers/templates/fastify/server-generator.ts +76 -0
- package/libs/instance-factories/infrastructure/docker-k8s.yaml +61 -0
- package/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.ts +46 -0
- package/libs/instance-factories/orms/prisma.yaml +89 -0
- package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +563 -0
- package/libs/instance-factories/orms/templates/prisma/services-generator.ts +408 -0
- package/libs/instance-factories/scaffolding/generic-scaffold.yaml +65 -0
- package/libs/instance-factories/scaffolding/templates/generic/env-example-generator.ts +73 -0
- package/libs/instance-factories/scaffolding/templates/generic/env-generator.ts +85 -0
- package/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.ts +69 -0
- package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +176 -0
- package/libs/instance-factories/scaffolding/templates/generic/readme-generator.ts +207 -0
- package/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.ts +78 -0
- package/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.ts +41 -0
- package/libs/instance-factories/sdks/python-sdk.yaml +66 -0
- package/libs/instance-factories/sdks/templates/python/sdk-generator.ts +50 -0
- package/libs/instance-factories/sdks/templates/typescript/sdk-generator.ts +49 -0
- package/libs/instance-factories/sdks/typescript-sdk.yaml +59 -0
- package/libs/instance-factories/services/prisma-services.yaml +71 -0
- package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +303 -0
- package/libs/instance-factories/services/templates/prisma/controller-generator.ts +532 -0
- package/libs/instance-factories/services/templates/prisma/service-generator.ts +315 -0
- package/libs/instance-factories/shared/path-resolver.ts +111 -0
- package/libs/instance-factories/storage/mongodb.yaml +79 -0
- package/libs/instance-factories/storage/postgresql.yaml +75 -0
- package/libs/instance-factories/storage/redis.yaml +79 -0
- package/libs/instance-factories/storage/templates/mongodb/config-generator.ts +15 -0
- package/libs/instance-factories/storage/templates/mongodb/docker-generator.ts +18 -0
- package/libs/instance-factories/storage/templates/postgresql/config-generator.ts +54 -0
- package/libs/instance-factories/storage/templates/postgresql/docker-generator.ts +55 -0
- package/libs/instance-factories/storage/templates/redis/config-generator.ts +16 -0
- package/libs/instance-factories/storage/templates/redis/docker-generator.ts +18 -0
- package/libs/instance-factories/test-generation.ts +192 -0
- package/libs/instance-factories/testing/templates/vitest/tests-generator.ts +51 -0
- package/libs/instance-factories/testing/vitest-tests.yaml +63 -0
- package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +136 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +630 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +330 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +552 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +164 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +247 -0
- package/libs/instance-factories/tools/templates/mcp/static/package.json +92 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +284 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +139 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +74 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +156 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +41 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +259 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +231 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +196 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +293 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +90 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +24 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +15 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +106 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +75 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +239 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +1501 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +211 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +308 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +210 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +356 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +524 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +530 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +594 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +170 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +544 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +189 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +89 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +110 -0
- package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +28 -0
- package/libs/instance-factories/tools/templates/vscode/static/extension.ts +1195 -0
- package/libs/instance-factories/tools/templates/vscode/static/language-configuration.json +34 -0
- package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +4279 -0
- package/libs/instance-factories/tools/templates/vscode/static/syntaxes/specverse.tmLanguage.json +138 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/README.md +74 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/complete-specverse-colors.json +122 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-basic-theme.json +65 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-complete-theme.json +123 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-theme-colors.json +64 -0
- package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +214 -0
- package/libs/instance-factories/validation/templates/zod/validation-generator.ts +46 -0
- package/libs/instance-factories/validation/zod.yaml +56 -0
- package/libs/instance-factories/views/index.d.ts +13 -0
- package/libs/instance-factories/views/index.d.ts.map +1 -0
- package/libs/instance-factories/views/index.js +18 -0
- package/libs/instance-factories/views/index.js.map +1 -0
- package/libs/instance-factories/views/index.ts +45 -0
- package/libs/instance-factories/views/react-components.yaml +129 -0
- package/libs/instance-factories/views/templates/ARCHITECTURE.md +198 -0
- package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +869 -0
- package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +953 -0
- package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +806 -0
- package/libs/instance-factories/views/templates/react/app-generator.ts +55 -0
- package/libs/instance-factories/views/templates/react/components-generator.ts +391 -0
- package/libs/instance-factories/views/templates/react/forms-generator.ts +343 -0
- package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +54 -0
- package/libs/instance-factories/views/templates/react/hooks-generator.ts +122 -0
- package/libs/instance-factories/views/templates/react/index-css-generator.ts +209 -0
- package/libs/instance-factories/views/templates/react/index-html-generator.ts +34 -0
- package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +29 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +152 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.js +398 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.js.map +1 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.ts +533 -0
- package/libs/instance-factories/views/templates/react/router-generator.ts +197 -0
- package/libs/instance-factories/views/templates/react/router-generic-generator.ts +103 -0
- package/libs/instance-factories/views/templates/react/spec-json-generator.ts +17 -0
- package/libs/instance-factories/views/templates/react/types-generator.ts +76 -0
- package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +42 -0
- package/libs/instance-factories/views/templates/react/vite-config-generator.ts +38 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +1 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +474 -0
- package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +242 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +77 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.js +47 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.ts +142 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +63 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +822 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +908 -0
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts +247 -0
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/base-generator.js +363 -0
- package/libs/instance-factories/views/templates/shared/base-generator.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/base-generator.ts +608 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +254 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.js +602 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.ts +803 -0
- package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +250 -0
- package/libs/instance-factories/views/templates/shared/composite-patterns.ts +535 -0
- package/libs/instance-factories/views/templates/shared/index.ts +68 -0
- package/libs/instance-factories/views/templates/shared/pattern-validator.ts +279 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +149 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.js +580 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.ts +700 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +143 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js +420 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +539 -0
- package/package.json +42 -0
- package/schema/SPECVERSE-SCHEMA.json +4274 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Build Script for Extension Deployment
|
|
4
|
+
* Builds hybrid mode for VSCode extension integration
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const rootDir = join(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
const verbose = process.env.VERBOSE === 'true';
|
|
16
|
+
if (verbose) console.log('šØ Building for EXTENSION deployment...');
|
|
17
|
+
|
|
18
|
+
// Clean and create directories
|
|
19
|
+
const distDir = join(rootDir, 'dist', 'extension');
|
|
20
|
+
if (!existsSync(distDir)) {
|
|
21
|
+
mkdirSync(distDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Build TypeScript for CommonJS (VSCode compatibility)
|
|
25
|
+
if (verbose) console.log('š¦ Compiling TypeScript for CommonJS...');
|
|
26
|
+
execSync('npx tsc --outDir dist/extension --module node16 --target es2020 --moduleResolution node16', {
|
|
27
|
+
cwd: rootDir,
|
|
28
|
+
stdio: 'inherit'
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Copy resources for hybrid access
|
|
32
|
+
if (verbose) console.log('š Copying resources...');
|
|
33
|
+
const resourcesDir = join(rootDir, 'resources');
|
|
34
|
+
if (existsSync(resourcesDir)) {
|
|
35
|
+
execSync(`cp -r resources dist/extension/`, { cwd: rootDir, stdio: 'inherit' });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Create extension-specific wrapper
|
|
39
|
+
if (verbose) console.log('š Creating extension wrapper...');
|
|
40
|
+
const extensionWrapper = `/**
|
|
41
|
+
* VSCode Extension Wrapper for SpecVerse MCP Server
|
|
42
|
+
* Provides hybrid capabilities for extension environment
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
const { SpecVerseCleanMCPServer } = require('./server/mcp-server.js');
|
|
46
|
+
const path = require('path');
|
|
47
|
+
|
|
48
|
+
class VSCodeExtensionMCPServer {
|
|
49
|
+
constructor(extensionPath) {
|
|
50
|
+
this.extensionPath = extensionPath;
|
|
51
|
+
this.config = {
|
|
52
|
+
mode: 'extension',
|
|
53
|
+
logging: true,
|
|
54
|
+
resources_path: path.join(extensionPath, 'resources'),
|
|
55
|
+
features: {
|
|
56
|
+
orchestrator: this.detectOrchestrator(),
|
|
57
|
+
fileSystemResources: true,
|
|
58
|
+
embeddedResources: true
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
this.server = new SpecVerseCleanMCPServer(this.config);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
detectOrchestrator() {
|
|
66
|
+
// Check if orchestrator is available in parent SpecVerse installation
|
|
67
|
+
try {
|
|
68
|
+
const orchestratorPath = path.resolve(this.extensionPath, '../../../src/orchestrator');
|
|
69
|
+
require.resolve(orchestratorPath);
|
|
70
|
+
return true;
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (verbose) console.log('Orchestrator not detected, using embedded resources only');
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async start() {
|
|
78
|
+
return this.server.start();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
getController() {
|
|
82
|
+
return this.server.getController();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
module.exports = { VSCodeExtensionMCPServer };
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
writeFileSync(join(distDir, 'extension-wrapper.js'), extensionWrapper);
|
|
90
|
+
|
|
91
|
+
// Create extension configuration
|
|
92
|
+
if (verbose) console.log('āļø Creating extension configuration...');
|
|
93
|
+
const extensionConfig = `{
|
|
94
|
+
"mode": "extension",
|
|
95
|
+
"features": {
|
|
96
|
+
"orchestrator": "conditional",
|
|
97
|
+
"fileSystemResources": true,
|
|
98
|
+
"embeddedResources": true,
|
|
99
|
+
"hybridMode": true
|
|
100
|
+
},
|
|
101
|
+
"resourcesPath": "./resources",
|
|
102
|
+
"vscode": {
|
|
103
|
+
"activationEvents": [
|
|
104
|
+
"onLanguage:specverse",
|
|
105
|
+
"workspaceContains:**/*.specly"
|
|
106
|
+
],
|
|
107
|
+
"capabilities": [
|
|
108
|
+
"mcp-server",
|
|
109
|
+
"resource-provider",
|
|
110
|
+
"tool-provider"
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
}`;
|
|
114
|
+
|
|
115
|
+
writeFileSync(join(distDir, 'config.json'), extensionConfig);
|
|
116
|
+
|
|
117
|
+
// Create package.json for extension
|
|
118
|
+
const extensionPackage = {
|
|
119
|
+
name: 'specverse-mcp-extension',
|
|
120
|
+
version: '1.0.0',
|
|
121
|
+
description: 'SpecVerse MCP Server for VSCode Extension',
|
|
122
|
+
main: 'extension-wrapper.js',
|
|
123
|
+
engines: {
|
|
124
|
+
node: '>=16.0.0',
|
|
125
|
+
vscode: '^1.80.0'
|
|
126
|
+
},
|
|
127
|
+
dependencies: {
|
|
128
|
+
'@modelcontextprotocol/sdk': '^1.17.4',
|
|
129
|
+
'yaml': '^2.8.1',
|
|
130
|
+
'zod': '^3.25.76'
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
writeFileSync(join(distDir, 'package.json'), JSON.stringify(extensionPackage, null, 2));
|
|
135
|
+
|
|
136
|
+
if (verbose) console.log('ā
Extension build complete!');
|
|
137
|
+
if (verbose) console.log('š Output: dist/extension/');
|
|
138
|
+
if (verbose) console.log('š VSCode integration ready');
|
|
139
|
+
if (verbose) console.log('š Use extension-wrapper.js in VSCode extension');
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Build Script for Local Deployment
|
|
4
|
+
* Builds with full orchestrator integration and file system resources
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { copyFileSync, mkdirSync, existsSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const rootDir = join(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
const verbose = process.env.VERBOSE === 'true';
|
|
16
|
+
if (verbose) console.log('šØ Building for LOCAL deployment...');
|
|
17
|
+
|
|
18
|
+
// Check if MCP SDK is available
|
|
19
|
+
try {
|
|
20
|
+
execSync('npm list @modelcontextprotocol/sdk', { cwd: rootDir, stdio: 'ignore' });
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (verbose) console.log('ā ļø MCP SDK not found, installing dependencies...');
|
|
23
|
+
try {
|
|
24
|
+
execSync('npm install', { cwd: rootDir, stdio: 'inherit' });
|
|
25
|
+
} catch (installError) {
|
|
26
|
+
console.error('ā Failed to install MCP dependencies');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Clean and create directories
|
|
32
|
+
const distDir = join(rootDir, 'dist', 'local');
|
|
33
|
+
if (!existsSync(distDir)) {
|
|
34
|
+
mkdirSync(distDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Build TypeScript
|
|
38
|
+
if (verbose) console.log('š¦ Compiling TypeScript...');
|
|
39
|
+
execSync('npx tsc --outDir dist/local', {
|
|
40
|
+
cwd: rootDir,
|
|
41
|
+
stdio: 'inherit'
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Copy resources directory for file system access
|
|
45
|
+
if (verbose) console.log('š Copying resources...');
|
|
46
|
+
const resourcesDir = join(rootDir, 'resources');
|
|
47
|
+
if (existsSync(resourcesDir)) {
|
|
48
|
+
execSync(`cp -r resources dist/local/`, { cwd: rootDir, stdio: 'inherit' });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Create local-specific configuration
|
|
52
|
+
if (verbose) console.log('āļø Creating local configuration...');
|
|
53
|
+
const localConfig = `{
|
|
54
|
+
"mode": "local",
|
|
55
|
+
"features": {
|
|
56
|
+
"orchestrator": true,
|
|
57
|
+
"fileSystemResources": true,
|
|
58
|
+
"embeddedResources": false
|
|
59
|
+
},
|
|
60
|
+
"resourcesPath": "./resources"
|
|
61
|
+
}`;
|
|
62
|
+
|
|
63
|
+
const configPath = join(distDir, 'config.json');
|
|
64
|
+
const fs = await import('fs/promises');
|
|
65
|
+
await fs.writeFile(configPath, localConfig);
|
|
66
|
+
|
|
67
|
+
// Make executable
|
|
68
|
+
execSync('chmod +x dist/local/server/mcp-server.js', { cwd: rootDir });
|
|
69
|
+
|
|
70
|
+
if (verbose) {
|
|
71
|
+
if (verbose) console.log('ā
Local build complete!');
|
|
72
|
+
if (verbose) console.log('š Output: dist/local/');
|
|
73
|
+
if (verbose) console.log('š Run with: node dist/local/server/mcp-server.js');
|
|
74
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Build Script for Web Deployment
|
|
4
|
+
* Builds with embedded resources, no file system access
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync, statSync } from 'fs';
|
|
9
|
+
import { join, dirname, extname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const rootDir = join(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
const verbose = process.env.VERBOSE === 'true';
|
|
16
|
+
if (verbose) console.log('šØ Building for WEB deployment...');
|
|
17
|
+
|
|
18
|
+
// Check if MCP SDK is available
|
|
19
|
+
try {
|
|
20
|
+
execSync('npm list @modelcontextprotocol/sdk', { cwd: rootDir, stdio: 'ignore' });
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (verbose) console.log('ā ļø MCP SDK not found, installing dependencies...');
|
|
23
|
+
try {
|
|
24
|
+
execSync('npm install', { cwd: rootDir, stdio: 'inherit' });
|
|
25
|
+
} catch (installError) {
|
|
26
|
+
console.error('ā Failed to install MCP dependencies');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Clean and create directories
|
|
32
|
+
const distDir = join(rootDir, 'dist', 'web');
|
|
33
|
+
if (!existsSync(distDir)) {
|
|
34
|
+
mkdirSync(distDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Build TypeScript
|
|
38
|
+
if (verbose) console.log('š¦ Compiling TypeScript...');
|
|
39
|
+
execSync('npx tsc --outDir dist/web', {
|
|
40
|
+
cwd: rootDir,
|
|
41
|
+
stdio: 'inherit'
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Embed resources into JavaScript
|
|
45
|
+
if (verbose) console.log('šļø Embedding resources...');
|
|
46
|
+
const resourcesDir = join(rootDir, 'resources');
|
|
47
|
+
const embeddedResources = {};
|
|
48
|
+
|
|
49
|
+
function embedDirectory(dir, prefix = '') {
|
|
50
|
+
if (!existsSync(dir)) {
|
|
51
|
+
console.warn(`ā ļø Resources directory not found: ${dir}`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const files = readdirSync(dir);
|
|
56
|
+
for (const file of files) {
|
|
57
|
+
const fullPath = join(dir, file);
|
|
58
|
+
const stat = statSync(fullPath);
|
|
59
|
+
|
|
60
|
+
if (stat.isDirectory()) {
|
|
61
|
+
embedDirectory(fullPath, `${prefix}${file}/`);
|
|
62
|
+
} else {
|
|
63
|
+
const key = `${prefix}${file}`;
|
|
64
|
+
try {
|
|
65
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
66
|
+
embeddedResources[key] = {
|
|
67
|
+
content,
|
|
68
|
+
mimeType: getMimeType(file),
|
|
69
|
+
size: content.length
|
|
70
|
+
};
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.warn(`ā ļø Could not read file ${fullPath}: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getMimeType(filename) {
|
|
79
|
+
const ext = extname(filename).toLowerCase();
|
|
80
|
+
const mimeTypes = {
|
|
81
|
+
'.json': 'application/json',
|
|
82
|
+
'.yaml': 'application/x-yaml',
|
|
83
|
+
'.yml': 'application/x-yaml',
|
|
84
|
+
'.md': 'text/markdown',
|
|
85
|
+
'.js': 'application/javascript',
|
|
86
|
+
'.txt': 'text/plain'
|
|
87
|
+
};
|
|
88
|
+
return mimeTypes[ext] || 'text/plain';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
embedDirectory(resourcesDir);
|
|
92
|
+
|
|
93
|
+
// Create embedded resources module
|
|
94
|
+
const embeddedResourcesJs = `// Embedded Resources for Web Deployment
|
|
95
|
+
// Generated automatically - do not edit
|
|
96
|
+
export const EMBEDDED_RESOURCES = ${JSON.stringify(embeddedResources, null, 2)};
|
|
97
|
+
|
|
98
|
+
export function getEmbeddedResource(path) {
|
|
99
|
+
return EMBEDDED_RESOURCES[path];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function listEmbeddedResources() {
|
|
103
|
+
return Object.keys(EMBEDDED_RESOURCES);
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
106
|
+
|
|
107
|
+
writeFileSync(join(distDir, 'embedded-resources.js'), embeddedResourcesJs);
|
|
108
|
+
|
|
109
|
+
// Create web-specific configuration
|
|
110
|
+
if (verbose) console.log('āļø Creating web configuration...');
|
|
111
|
+
const webConfig = `{
|
|
112
|
+
"mode": "web",
|
|
113
|
+
"features": {
|
|
114
|
+
"orchestrator": false,
|
|
115
|
+
"fileSystemResources": false,
|
|
116
|
+
"embeddedResources": true
|
|
117
|
+
},
|
|
118
|
+
"resourcesStrategy": "embedded",
|
|
119
|
+
"embeddedResourcesCount": ${Object.keys(embeddedResources).length}
|
|
120
|
+
}`;
|
|
121
|
+
|
|
122
|
+
writeFileSync(join(distDir, 'config.json'), webConfig);
|
|
123
|
+
|
|
124
|
+
// Create deployment manifest
|
|
125
|
+
const manifest = {
|
|
126
|
+
name: 'specverse-mcp-web',
|
|
127
|
+
version: '1.0.0',
|
|
128
|
+
mode: 'web',
|
|
129
|
+
entryPoint: './server/mcp-server.js',
|
|
130
|
+
resources: {
|
|
131
|
+
strategy: 'embedded',
|
|
132
|
+
count: Object.keys(embeddedResources).length,
|
|
133
|
+
totalSize: Object.values(embeddedResources).reduce((sum, res) => sum + res.size, 0)
|
|
134
|
+
},
|
|
135
|
+
capabilities: [
|
|
136
|
+
'resources',
|
|
137
|
+
'tools',
|
|
138
|
+
'prompts'
|
|
139
|
+
],
|
|
140
|
+
deployment: {
|
|
141
|
+
target: 'web-llm-terminal',
|
|
142
|
+
requirements: {
|
|
143
|
+
node: '>=18.0.0',
|
|
144
|
+
memory: '128MB',
|
|
145
|
+
network: 'required'
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
writeFileSync(join(distDir, 'deployment-manifest.json'), JSON.stringify(manifest, null, 2));
|
|
151
|
+
|
|
152
|
+
if (verbose) console.log('ā
Web build complete!');
|
|
153
|
+
if (verbose) console.log('š Output: dist/web/');
|
|
154
|
+
if (verbose) console.log('š Embedded resources:', Object.keys(embeddedResources).length);
|
|
155
|
+
if (verbose) console.log('š¾ Total embedded size:', Object.values(embeddedResources).reduce((sum, res) => sum + res.size, 0), 'bytes');
|
|
156
|
+
if (verbose) console.log('š Deploy to web-based LLM terminal');
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Copy Schema Files from Canonical Location
|
|
4
|
+
* Ensures MCP server has up-to-date schemas without duplication
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { copyFileSync, mkdirSync, existsSync } from 'fs';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
|
|
11
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const mcpRoot = join(__dirname, '..');
|
|
13
|
+
const repoRoot = join(__dirname, '../../..');
|
|
14
|
+
|
|
15
|
+
const verbose = process.env.VERBOSE === 'true';
|
|
16
|
+
|
|
17
|
+
// Schemas and library catalogs are now provided through AI tools
|
|
18
|
+
// Only copy essential files that aren't available through AI API
|
|
19
|
+
|
|
20
|
+
// Canonical files (if any needed in future)
|
|
21
|
+
const canonicalFiles = {
|
|
22
|
+
// Add any essential files here that can't be provided through AI tools
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// No files to copy currently - schemas and catalogs provided through AI API
|
|
26
|
+
if (Object.keys(canonicalFiles).length === 0) {
|
|
27
|
+
if (verbose) {
|
|
28
|
+
console.log('ā¹ļø No files to copy - all resources provided through AI API');
|
|
29
|
+
console.log('š Schemas: Available through mcp_ai_enhance tool');
|
|
30
|
+
console.log('š Libraries: Available through mcp_library_suggest tool');
|
|
31
|
+
console.log('š Examples: Provided contextually in AI responses');
|
|
32
|
+
}
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (verbose) {
|
|
37
|
+
console.log('š Canonical files copied successfully!');
|
|
38
|
+
console.log('š Schema Source: schema/ ā resources/schemas/');
|
|
39
|
+
console.log('š Library Source: libs/ ā resources/libraries/');
|
|
40
|
+
console.log('š All files now reference canonical locations');
|
|
41
|
+
}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test Script for All Deployment Targets
|
|
4
|
+
* Verifies hybrid resource system works across local, web, extension, enterprise
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { spawn } from 'child_process';
|
|
8
|
+
import { readFileSync, existsSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const rootDir = join(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
console.log('š§Ŗ Testing Hybrid Resource System Across All Deployment Targets');
|
|
16
|
+
console.log('===============================================================');
|
|
17
|
+
|
|
18
|
+
const results = {
|
|
19
|
+
local: { status: 'pending', metrics: null, error: null },
|
|
20
|
+
web: { status: 'pending', metrics: null, error: null },
|
|
21
|
+
extension: { status: 'pending', metrics: null, error: null },
|
|
22
|
+
enterprise: { status: 'pending', metrics: null, error: null }
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
async function testDeploymentTarget(target, command, timeout = 15000) {
|
|
26
|
+
console.log(`\nš Testing ${target.toUpperCase()} deployment...`);
|
|
27
|
+
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
const child = spawn('node', command.split(' ').slice(1), {
|
|
30
|
+
cwd: rootDir,
|
|
31
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
+
env: { ...process.env, NODE_ENV: 'test' }
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
let stdout = '';
|
|
36
|
+
let stderr = '';
|
|
37
|
+
let resolved = false;
|
|
38
|
+
|
|
39
|
+
const timeoutId = setTimeout(() => {
|
|
40
|
+
if (!resolved) {
|
|
41
|
+
resolved = true;
|
|
42
|
+
child.kill('SIGTERM');
|
|
43
|
+
console.log(` ā° ${target} server started successfully (timed out as expected)`);
|
|
44
|
+
results[target].status = 'success';
|
|
45
|
+
results[target].metrics = parseMetricsFromOutput(stderr);
|
|
46
|
+
resolve();
|
|
47
|
+
}
|
|
48
|
+
}, timeout);
|
|
49
|
+
|
|
50
|
+
child.stdout.on('data', (data) => {
|
|
51
|
+
stdout += data.toString();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
child.stderr.on('data', (data) => {
|
|
55
|
+
stderr += data.toString();
|
|
56
|
+
|
|
57
|
+
// Look for success indicators
|
|
58
|
+
if (stderr.includes('initialized successfully') ||
|
|
59
|
+
stderr.includes('connected and running') ||
|
|
60
|
+
stderr.includes('Server started')) {
|
|
61
|
+
if (!resolved) {
|
|
62
|
+
resolved = true;
|
|
63
|
+
clearTimeout(timeoutId);
|
|
64
|
+
child.kill('SIGTERM');
|
|
65
|
+
console.log(` ā
${target} server started successfully`);
|
|
66
|
+
results[target].status = 'success';
|
|
67
|
+
results[target].metrics = parseMetricsFromOutput(stderr);
|
|
68
|
+
resolve();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
child.on('error', (error) => {
|
|
74
|
+
if (!resolved) {
|
|
75
|
+
resolved = true;
|
|
76
|
+
clearTimeout(timeoutId);
|
|
77
|
+
console.log(` ā ${target} server failed: ${error.message}`);
|
|
78
|
+
results[target].status = 'failed';
|
|
79
|
+
results[target].error = error.message;
|
|
80
|
+
resolve();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
child.on('exit', (code, signal) => {
|
|
85
|
+
if (!resolved) {
|
|
86
|
+
resolved = true;
|
|
87
|
+
clearTimeout(timeoutId);
|
|
88
|
+
if (code === 0 || signal === 'SIGTERM') {
|
|
89
|
+
console.log(` ā
${target} server exited cleanly`);
|
|
90
|
+
results[target].status = 'success';
|
|
91
|
+
results[target].metrics = parseMetricsFromOutput(stderr);
|
|
92
|
+
} else {
|
|
93
|
+
console.log(` ā ${target} server exited with code ${code}`);
|
|
94
|
+
results[target].status = 'failed';
|
|
95
|
+
results[target].error = `Exit code: ${code}`;
|
|
96
|
+
}
|
|
97
|
+
resolve();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function parseMetricsFromOutput(output) {
|
|
104
|
+
try {
|
|
105
|
+
// Look for metrics in the output
|
|
106
|
+
const metricsMatch = output.match(/Metrics:\s*({[\s\S]*?})/);
|
|
107
|
+
if (metricsMatch) {
|
|
108
|
+
return JSON.parse(metricsMatch[1]);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Extract provider info if available
|
|
112
|
+
const providerMatch = output.match(/resources_provider.*?mode.*?(\w+)/);
|
|
113
|
+
if (providerMatch) {
|
|
114
|
+
return { provider_mode: providerMatch[1] };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return null;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return { parse_error: error.message };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function validateBuildOutputs() {
|
|
124
|
+
console.log('\nš Validating Build Outputs...');
|
|
125
|
+
|
|
126
|
+
const targets = ['local', 'web', 'extension', 'enterprise'];
|
|
127
|
+
const validationResults = {};
|
|
128
|
+
|
|
129
|
+
for (const target of targets) {
|
|
130
|
+
const distPath = join(rootDir, 'dist', target);
|
|
131
|
+
const configPath = join(distPath, 'config.json');
|
|
132
|
+
const serverPath = join(distPath, 'server', 'mcp-server.js');
|
|
133
|
+
|
|
134
|
+
validationResults[target] = {
|
|
135
|
+
directory: existsSync(distPath),
|
|
136
|
+
config: existsSync(configPath),
|
|
137
|
+
server: existsSync(serverPath),
|
|
138
|
+
special: validateSpecialFiles(target, distPath)
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
console.log(` ${target.toUpperCase()}:`);
|
|
142
|
+
console.log(` Directory: ${validationResults[target].directory ? 'ā
' : 'ā'}`);
|
|
143
|
+
console.log(` Config: ${validationResults[target].config ? 'ā
' : 'ā'}`);
|
|
144
|
+
console.log(` Server: ${validationResults[target].server ? 'ā
' : 'ā'}`);
|
|
145
|
+
console.log(` Special: ${Object.keys(validationResults[target].special).map(k =>
|
|
146
|
+
`${k}=${validationResults[target].special[k] ? 'ā
' : 'ā'}`).join(', ')}`);
|
|
147
|
+
|
|
148
|
+
if (validationResults[target].config) {
|
|
149
|
+
try {
|
|
150
|
+
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
151
|
+
console.log(` Mode: ${config.mode}`);
|
|
152
|
+
} catch (error) {
|
|
153
|
+
console.log(` Config Error: ${error.message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return validationResults;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function validateSpecialFiles(target, distPath) {
|
|
162
|
+
const special = {};
|
|
163
|
+
|
|
164
|
+
switch (target) {
|
|
165
|
+
case 'web':
|
|
166
|
+
special.embeddedResources = existsSync(join(distPath, 'embedded-resources.js'));
|
|
167
|
+
special.deploymentManifest = existsSync(join(distPath, 'deployment-manifest.json'));
|
|
168
|
+
break;
|
|
169
|
+
case 'extension':
|
|
170
|
+
special.extensionWrapper = existsSync(join(distPath, 'extension-wrapper.js'));
|
|
171
|
+
special.packageJson = existsSync(join(distPath, 'package.json'));
|
|
172
|
+
break;
|
|
173
|
+
case 'enterprise':
|
|
174
|
+
special.dockerfile = existsSync(join(distPath, 'Dockerfile'));
|
|
175
|
+
special.dockerCompose = existsSync(join(distPath, 'docker-compose.yml'));
|
|
176
|
+
special.monitoring = existsSync(join(distPath, 'monitoring', 'prometheus.yml'));
|
|
177
|
+
break;
|
|
178
|
+
case 'local':
|
|
179
|
+
special.resources = existsSync(join(distPath, 'resources'));
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return special;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async function runTests() {
|
|
187
|
+
try {
|
|
188
|
+
// First validate build outputs
|
|
189
|
+
const buildValidation = validateBuildOutputs();
|
|
190
|
+
|
|
191
|
+
// Test each deployment target
|
|
192
|
+
await testDeploymentTarget('local', 'node dist/local/server/mcp-server.js --mode local --silent');
|
|
193
|
+
await testDeploymentTarget('web', 'node dist/web/server/mcp-server.js --mode remote --port 3001 --silent');
|
|
194
|
+
// Extension and enterprise would need different test approaches
|
|
195
|
+
|
|
196
|
+
// Generate test report
|
|
197
|
+
console.log('\nš TEST RESULTS SUMMARY');
|
|
198
|
+
console.log('=======================');
|
|
199
|
+
|
|
200
|
+
let totalTests = 0;
|
|
201
|
+
let passedTests = 0;
|
|
202
|
+
|
|
203
|
+
for (const [target, result] of Object.entries(results)) {
|
|
204
|
+
totalTests++;
|
|
205
|
+
const status = result.status === 'success' ? 'ā
PASS' : 'ā FAIL';
|
|
206
|
+
console.log(`${target.toUpperCase().padEnd(12)} ${status}`);
|
|
207
|
+
|
|
208
|
+
if (result.status === 'success') {
|
|
209
|
+
passedTests++;
|
|
210
|
+
if (result.metrics) {
|
|
211
|
+
console.log(` Provider: ${result.metrics.resources_provider?.mode || 'unknown'}`);
|
|
212
|
+
console.log(` Resources: ${result.metrics.cached_resources || 0} cached`);
|
|
213
|
+
}
|
|
214
|
+
} else if (result.error) {
|
|
215
|
+
console.log(` Error: ${result.error}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
console.log(`\nš Overall Results: ${passedTests}/${totalTests} tests passed`);
|
|
220
|
+
|
|
221
|
+
// Hybrid System Validation
|
|
222
|
+
console.log('\nš HYBRID SYSTEM VALIDATION');
|
|
223
|
+
console.log('============================');
|
|
224
|
+
|
|
225
|
+
const hasFilesystemMode = Object.values(results).some(r =>
|
|
226
|
+
r.metrics?.resources_provider?.mode === 'filesystem');
|
|
227
|
+
const hasEmbeddedMode = Object.values(results).some(r =>
|
|
228
|
+
r.metrics?.resources_provider?.mode === 'embedded');
|
|
229
|
+
|
|
230
|
+
console.log(`Filesystem Mode: ${hasFilesystemMode ? 'ā
' : 'ā'} Detected`);
|
|
231
|
+
console.log(`Embedded Mode: ${hasEmbeddedMode ? 'ā
' : 'ā'} Detected`);
|
|
232
|
+
console.log(`Mode Detection: ${hasFilesystemMode && hasEmbeddedMode ? 'ā
' : 'ā'} Working`);
|
|
233
|
+
|
|
234
|
+
// Environment-specific optimizations
|
|
235
|
+
console.log('\nšÆ ENVIRONMENT OPTIMIZATIONS');
|
|
236
|
+
console.log('==============================');
|
|
237
|
+
console.log(`Web Build Embedded Resources: ${buildValidation.web?.special?.embeddedResources ? 'ā
' : 'ā'}`);
|
|
238
|
+
console.log(`Local Build File System: ${buildValidation.local?.special?.resources ? 'ā
' : 'ā'}`);
|
|
239
|
+
console.log(`Extension Hybrid Wrapper: ${buildValidation.extension?.special?.extensionWrapper ? 'ā
' : 'ā'}`);
|
|
240
|
+
console.log(`Enterprise Docker Config: ${buildValidation.enterprise?.special?.dockerfile ? 'ā
' : 'ā'}`);
|
|
241
|
+
|
|
242
|
+
console.log('\\nš HYBRID RESOURCE SYSTEM TEST COMPLETE!');
|
|
243
|
+
console.log(`š Success Rate: ${Math.round((passedTests / totalTests) * 100)}%`);
|
|
244
|
+
|
|
245
|
+
return passedTests === totalTests;
|
|
246
|
+
|
|
247
|
+
} catch (error) {
|
|
248
|
+
console.error('ā Test execution failed:', error);
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Execute tests
|
|
254
|
+
runTests().then(success => {
|
|
255
|
+
process.exit(success ? 0 : 1);
|
|
256
|
+
}).catch(error => {
|
|
257
|
+
console.error('Fatal error:', error);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
});
|