@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.
Files changed (420) hide show
  1. package/assets/examples/09-api/ai-spec.yaml +194 -0
  2. package/assets/examples/09-api/converted.yaml +95 -0
  3. package/assets/examples/09-api/diagram-architecture.mmd +10 -0
  4. package/assets/examples/09-api/diagram-er.mmd +10 -0
  5. package/assets/examples/09-api/documentation.html +104 -0
  6. package/assets/examples/09-api/documentation.md +95 -0
  7. package/assets/examples/09-api/inferred-spec.yaml +420 -0
  8. package/assets/examples/09-api/openapi.json +61 -0
  9. package/assets/examples/10-api/README.md +216 -0
  10. package/assets/examples/10-api/ai-spec.yaml +194 -0
  11. package/assets/examples/10-api/converted.yaml +96 -0
  12. package/assets/examples/10-api/diagram-architecture.mmd +10 -0
  13. package/assets/examples/10-api/diagram-er.mmd +10 -0
  14. package/assets/examples/10-api/documentation.html +104 -0
  15. package/assets/examples/10-api/documentation.md +95 -0
  16. package/assets/examples/10-api/inferred-spec.yaml +7 -0
  17. package/assets/examples/10-api/metadata.yaml +89 -0
  18. package/assets/examples/10-api/openapi.json +61 -0
  19. package/assets/examples/10-api/package-integration-test.js +177 -0
  20. package/assets/examples/10-api/usage-example.js +323 -0
  21. package/assets/examples/10-api/usage-example.ts +363 -0
  22. package/assets/examples/10-api/workflow-test.js +113 -0
  23. package/assets/examples/manifests/01-simple-default-mappings.yaml +36 -0
  24. package/assets/examples/manifests/02-capability-mappings.yaml +55 -0
  25. package/assets/examples/manifests/03-hybrid-mappings.yaml +109 -0
  26. package/assets/examples/manifests/README.md +245 -0
  27. package/assets/examples/manifests/backend-only.yaml +43 -0
  28. package/assets/examples/manifests/blog-api.md +78 -0
  29. package/assets/examples/manifests/blog-api.specly +79 -0
  30. package/assets/examples/manifests/frontend-only.yaml +27 -0
  31. package/assets/examples/manifests/fullstack-app.yaml +44 -0
  32. package/assets/examples/manifests/fullstack-monorepo.yaml +62 -0
  33. package/assets/examples/validate-examples-with-expected-failures.cjs +328 -0
  34. package/assets/examples/validate-examples.cjs +225 -0
  35. package/assets/examples-decomposed/cloud-native-manifest.example.yaml +8 -0
  36. package/assets/examples-decomposed/cloud-native-manifest.md +379 -0
  37. package/assets/examples-decomposed/cloud-native-manifest.specly +60 -0
  38. package/assets/examples-decomposed/docker-compose-manifest.example.yaml +8 -0
  39. package/assets/examples-decomposed/docker-compose-manifest.md +326 -0
  40. package/assets/examples-decomposed/docker-compose-manifest.specly +40 -0
  41. package/assets/examples-decomposed/kubernetes-deployment-manifest.example.yaml +8 -0
  42. package/assets/examples-decomposed/kubernetes-deployment-manifest.md +237 -0
  43. package/assets/examples-decomposed/kubernetes-deployment-manifest.specly +41 -0
  44. package/assets/templates/README.md +559 -0
  45. package/assets/templates/TEMPLATE-ENHANCEMENTS-V33.md +462 -0
  46. package/assets/templates/backend-only/CLAUDE.md +73 -0
  47. package/assets/templates/backend-only/README.md +197 -0
  48. package/assets/templates/backend-only/deployments/README.md +149 -0
  49. package/assets/templates/backend-only/deployments/development.specly +53 -0
  50. package/assets/templates/backend-only/deployments/production.specly +87 -0
  51. package/assets/templates/backend-only/docs/README.md +50 -0
  52. package/assets/templates/backend-only/docs/api/README.md +7 -0
  53. package/assets/templates/backend-only/docs/diagrams/README.md +85 -0
  54. package/assets/templates/backend-only/docs/example-documentation-template.md +269 -0
  55. package/assets/templates/backend-only/docs/guides/README.md +15 -0
  56. package/assets/templates/backend-only/dot.env.example +18 -0
  57. package/assets/templates/backend-only/generated/README.md +56 -0
  58. package/assets/templates/backend-only/generated/code/integration-test.template.js +320 -0
  59. package/assets/templates/backend-only/generated/code/package.json.template +34 -0
  60. package/assets/templates/backend-only/generated/docs/README.md +49 -0
  61. package/assets/templates/backend-only/gitignore +54 -0
  62. package/assets/templates/backend-only/manifests/README.md +72 -0
  63. package/assets/templates/backend-only/manifests/docker-compose.specly +91 -0
  64. package/assets/templates/backend-only/manifests/implementation.yaml +100 -0
  65. package/assets/templates/backend-only/manifests/kubernetes.specly +140 -0
  66. package/assets/templates/backend-only/package.json +59 -0
  67. package/assets/templates/backend-only/scripts/test-all.sh +160 -0
  68. package/assets/templates/backend-only/scripts/test-generated-code.sh +165 -0
  69. package/assets/templates/backend-only/specs/main.specly +67 -0
  70. package/assets/templates/default/CLAUDE.md +141 -0
  71. package/assets/templates/default/README.md +404 -0
  72. package/assets/templates/default/deployments/README.md +149 -0
  73. package/assets/templates/default/deployments/development.specly +53 -0
  74. package/assets/templates/default/deployments/production.specly +87 -0
  75. package/assets/templates/default/docs/README.md +50 -0
  76. package/assets/templates/default/docs/api/README.md +7 -0
  77. package/assets/templates/default/docs/diagrams/README.md +85 -0
  78. package/assets/templates/default/docs/example-documentation-template.md +269 -0
  79. package/assets/templates/default/docs/guides/README.md +15 -0
  80. package/assets/templates/default/dot.env.example +18 -0
  81. package/assets/templates/default/generated/README.md +56 -0
  82. package/assets/templates/default/generated/code/integration-test.template.js +320 -0
  83. package/assets/templates/default/generated/code/package.json.template +34 -0
  84. package/assets/templates/default/generated/docs/README.md +49 -0
  85. package/assets/templates/default/gitignore +54 -0
  86. package/assets/templates/default/manifests/README.md +72 -0
  87. package/assets/templates/default/manifests/docker-compose.specly +91 -0
  88. package/assets/templates/default/manifests/implementation.yaml +176 -0
  89. package/assets/templates/default/manifests/kubernetes.specly +140 -0
  90. package/assets/templates/default/package.json +61 -0
  91. package/assets/templates/default/scripts/test-all.sh +160 -0
  92. package/assets/templates/default/scripts/test-generated-code.sh +165 -0
  93. package/assets/templates/default/specs/main.specly +67 -0
  94. package/assets/templates/frontend-only/CLAUDE.md +75 -0
  95. package/assets/templates/frontend-only/README.md +231 -0
  96. package/assets/templates/frontend-only/deployments/README.md +149 -0
  97. package/assets/templates/frontend-only/deployments/development.specly +53 -0
  98. package/assets/templates/frontend-only/deployments/production.specly +87 -0
  99. package/assets/templates/frontend-only/docs/README.md +50 -0
  100. package/assets/templates/frontend-only/docs/api/README.md +7 -0
  101. package/assets/templates/frontend-only/docs/diagrams/README.md +85 -0
  102. package/assets/templates/frontend-only/docs/example-documentation-template.md +269 -0
  103. package/assets/templates/frontend-only/docs/guides/README.md +15 -0
  104. package/assets/templates/frontend-only/dot.env.example +18 -0
  105. package/assets/templates/frontend-only/generated/README.md +56 -0
  106. package/assets/templates/frontend-only/generated/code/integration-test.template.js +320 -0
  107. package/assets/templates/frontend-only/generated/code/package.json.template +34 -0
  108. package/assets/templates/frontend-only/generated/docs/README.md +49 -0
  109. package/assets/templates/frontend-only/gitignore +54 -0
  110. package/assets/templates/frontend-only/manifests/README.md +72 -0
  111. package/assets/templates/frontend-only/manifests/docker-compose.specly +91 -0
  112. package/assets/templates/frontend-only/manifests/implementation.yaml +58 -0
  113. package/assets/templates/frontend-only/manifests/kubernetes.specly +140 -0
  114. package/assets/templates/frontend-only/package.json +59 -0
  115. package/assets/templates/frontend-only/scripts/test-all.sh +160 -0
  116. package/assets/templates/frontend-only/scripts/test-generated-code.sh +165 -0
  117. package/assets/templates/frontend-only/specs/main.specly +57 -0
  118. package/assets/templates/full-stack/AI-GUIDE.md +60 -0
  119. package/assets/templates/full-stack/CLAUDE.md +141 -0
  120. package/assets/templates/full-stack/README.md +382 -0
  121. package/assets/templates/full-stack/archive/AI-GUIDE-legacy.md +392 -0
  122. package/assets/templates/full-stack/deployments/README.md +149 -0
  123. package/assets/templates/full-stack/deployments/development.specly +53 -0
  124. package/assets/templates/full-stack/deployments/production.specly +87 -0
  125. package/assets/templates/full-stack/docs/README.md +51 -0
  126. package/assets/templates/full-stack/docs/api/README.md +7 -0
  127. package/assets/templates/full-stack/docs/diagrams/README.md +85 -0
  128. package/assets/templates/full-stack/docs/example-documentation-template.md +269 -0
  129. package/assets/templates/full-stack/docs/guides/README.md +15 -0
  130. package/assets/templates/full-stack/generated/README.md +56 -0
  131. package/assets/templates/full-stack/generated/code/integration-test.template.js +320 -0
  132. package/assets/templates/full-stack/generated/code/package.json.template +34 -0
  133. package/assets/templates/full-stack/generated/docs/README.md +49 -0
  134. package/assets/templates/full-stack/gitignore +54 -0
  135. package/assets/templates/full-stack/manifests/README.md +72 -0
  136. package/assets/templates/full-stack/manifests/docker-compose.specly +91 -0
  137. package/assets/templates/full-stack/manifests/implementation.yaml +155 -0
  138. package/assets/templates/full-stack/manifests/kubernetes.specly +140 -0
  139. package/assets/templates/full-stack/package.json +45 -0
  140. package/assets/templates/full-stack/scripts/test-all.sh +160 -0
  141. package/assets/templates/full-stack/scripts/test-generated-code.sh +165 -0
  142. package/assets/templates/full-stack/specs/example-v33.specly +297 -0
  143. package/assets/templates/full-stack/specs/main-simple.specly +73 -0
  144. package/assets/templates/full-stack/specs/main.specly +408 -0
  145. package/dist/engines/code-generator.d.ts +86 -0
  146. package/dist/engines/code-generator.d.ts.map +1 -0
  147. package/dist/engines/code-generator.js +159 -0
  148. package/dist/engines/code-generator.js.map +1 -0
  149. package/dist/engines/engine-registry.d.ts +94 -0
  150. package/dist/engines/engine-registry.d.ts.map +1 -0
  151. package/dist/engines/engine-registry.js +163 -0
  152. package/dist/engines/engine-registry.js.map +1 -0
  153. package/dist/engines/index.d.ts +10 -0
  154. package/dist/engines/index.d.ts.map +1 -0
  155. package/dist/engines/index.js +12 -0
  156. package/dist/engines/index.js.map +1 -0
  157. package/dist/engines/typescript-engine.d.ts +74 -0
  158. package/dist/engines/typescript-engine.d.ts.map +1 -0
  159. package/dist/engines/typescript-engine.js +288 -0
  160. package/dist/engines/typescript-engine.js.map +1 -0
  161. package/dist/generators/index.d.ts +11 -0
  162. package/dist/generators/index.d.ts.map +1 -0
  163. package/dist/generators/index.js +11 -0
  164. package/dist/generators/index.js.map +1 -0
  165. package/dist/index.d.ts +48 -0
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +434 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/library/index.d.ts +12 -0
  170. package/dist/library/index.d.ts.map +1 -0
  171. package/dist/library/index.js +15 -0
  172. package/dist/library/index.js.map +1 -0
  173. package/dist/library/library.d.ts +132 -0
  174. package/dist/library/library.d.ts.map +1 -0
  175. package/dist/library/library.js +343 -0
  176. package/dist/library/library.js.map +1 -0
  177. package/dist/library/loader.d.ts +73 -0
  178. package/dist/library/loader.d.ts.map +1 -0
  179. package/dist/library/loader.js +150 -0
  180. package/dist/library/loader.js.map +1 -0
  181. package/dist/library/resolver.d.ts +104 -0
  182. package/dist/library/resolver.d.ts.map +1 -0
  183. package/dist/library/resolver.js +299 -0
  184. package/dist/library/resolver.js.map +1 -0
  185. package/dist/library/validator.d.ts +65 -0
  186. package/dist/library/validator.d.ts.map +1 -0
  187. package/dist/library/validator.js +203 -0
  188. package/dist/library/validator.js.map +1 -0
  189. package/dist/types/index.d.ts +7 -0
  190. package/dist/types/index.d.ts.map +1 -0
  191. package/dist/types/index.js +7 -0
  192. package/dist/types/index.js.map +1 -0
  193. package/dist/types/instance-factory.d.ts +289 -0
  194. package/dist/types/instance-factory.d.ts.map +1 -0
  195. package/dist/types/instance-factory.js +8 -0
  196. package/dist/types/instance-factory.js.map +1 -0
  197. package/dist/types/unified-mappings.d.ts +163 -0
  198. package/dist/types/unified-mappings.d.ts.map +1 -0
  199. package/dist/types/unified-mappings.js +110 -0
  200. package/dist/types/unified-mappings.js.map +1 -0
  201. package/dist/utils/ai-spec-loader.d.ts +77 -0
  202. package/dist/utils/ai-spec-loader.d.ts.map +1 -0
  203. package/dist/utils/ai-spec-loader.js +138 -0
  204. package/dist/utils/ai-spec-loader.js.map +1 -0
  205. package/dist/utils/index.d.ts +9 -0
  206. package/dist/utils/index.d.ts.map +1 -0
  207. package/dist/utils/index.js +9 -0
  208. package/dist/utils/index.js.map +1 -0
  209. package/dist/utils/manifest-loader.d.ts +107 -0
  210. package/dist/utils/manifest-loader.d.ts.map +1 -0
  211. package/dist/utils/manifest-loader.js +168 -0
  212. package/dist/utils/manifest-loader.js.map +1 -0
  213. package/dist/utils/mapping-migration.d.ts +53 -0
  214. package/dist/utils/mapping-migration.d.ts.map +1 -0
  215. package/dist/utils/mapping-migration.js +194 -0
  216. package/dist/utils/mapping-migration.js.map +1 -0
  217. package/libs/instance-factories/CURVED-INTERFACE.md +278 -0
  218. package/libs/instance-factories/README.md +433 -0
  219. package/libs/instance-factories/applications/generic-app.yaml +52 -0
  220. package/libs/instance-factories/applications/react-app.yaml +186 -0
  221. package/libs/instance-factories/applications/templates/generic/backend-env-generator.ts +31 -0
  222. package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +80 -0
  223. package/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.ts +69 -0
  224. package/libs/instance-factories/applications/templates/generic/main-generator.ts +308 -0
  225. package/libs/instance-factories/applications/templates/react/_view-components-source.ts +555 -0
  226. package/libs/instance-factories/applications/templates/react/api-client-generator.ts +436 -0
  227. package/libs/instance-factories/applications/templates/react/api-types-generator.ts +153 -0
  228. package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +94 -0
  229. package/libs/instance-factories/applications/templates/react/env-example-generator.ts +24 -0
  230. package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +106 -0
  231. package/libs/instance-factories/applications/templates/react/gitignore-generator.ts +38 -0
  232. package/libs/instance-factories/applications/templates/react/index-css-generator.ts +85 -0
  233. package/libs/instance-factories/applications/templates/react/index-html-generator.ts +30 -0
  234. package/libs/instance-factories/applications/templates/react/main-tsx-generator.ts +34 -0
  235. package/libs/instance-factories/applications/templates/react/package-json-generator.ts +54 -0
  236. package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +179 -0
  237. package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +1347 -0
  238. package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +150 -0
  239. package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +704 -0
  240. package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +84 -0
  241. package/libs/instance-factories/applications/templates/react/tsconfig-generator.ts +35 -0
  242. package/libs/instance-factories/applications/templates/react/use-api-hooks-generator.ts +121 -0
  243. package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +150 -0
  244. package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +150 -0
  245. package/libs/instance-factories/applications/templates/react/view-form-generator.ts +362 -0
  246. package/libs/instance-factories/applications/templates/react/view-list-generator.ts +98 -0
  247. package/libs/instance-factories/applications/templates/react/view-router-generator.ts +89 -0
  248. package/libs/instance-factories/applications/templates/react/vite-config-generator.ts +49 -0
  249. package/libs/instance-factories/archived/fastify-prisma.yaml +104 -0
  250. package/libs/instance-factories/cli/commander-js.yaml +55 -0
  251. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts +12 -0
  252. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts.map +1 -0
  253. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +115 -0
  254. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js.map +1 -0
  255. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +145 -0
  256. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +14 -0
  257. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts.map +1 -0
  258. package/libs/instance-factories/cli/templates/commander/command-generator.js +182 -0
  259. package/libs/instance-factories/cli/templates/commander/command-generator.js.map +1 -0
  260. package/libs/instance-factories/cli/templates/commander/command-generator.ts +992 -0
  261. package/libs/instance-factories/communication/event-emitter.yaml +56 -0
  262. package/libs/instance-factories/communication/rabbitmq-events.yaml +87 -0
  263. package/libs/instance-factories/communication/templates/eventemitter/bus-generator.ts +93 -0
  264. package/libs/instance-factories/communication/templates/eventemitter/publisher-generator.ts +117 -0
  265. package/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.ts +101 -0
  266. package/libs/instance-factories/controllers/fastify.yaml +127 -0
  267. package/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.ts +103 -0
  268. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +389 -0
  269. package/libs/instance-factories/controllers/templates/fastify/server-generator.ts +76 -0
  270. package/libs/instance-factories/infrastructure/docker-k8s.yaml +61 -0
  271. package/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.ts +46 -0
  272. package/libs/instance-factories/orms/prisma.yaml +89 -0
  273. package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +563 -0
  274. package/libs/instance-factories/orms/templates/prisma/services-generator.ts +408 -0
  275. package/libs/instance-factories/scaffolding/generic-scaffold.yaml +65 -0
  276. package/libs/instance-factories/scaffolding/templates/generic/env-example-generator.ts +73 -0
  277. package/libs/instance-factories/scaffolding/templates/generic/env-generator.ts +85 -0
  278. package/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.ts +69 -0
  279. package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +176 -0
  280. package/libs/instance-factories/scaffolding/templates/generic/readme-generator.ts +207 -0
  281. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.ts +78 -0
  282. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.ts +41 -0
  283. package/libs/instance-factories/sdks/python-sdk.yaml +66 -0
  284. package/libs/instance-factories/sdks/templates/python/sdk-generator.ts +50 -0
  285. package/libs/instance-factories/sdks/templates/typescript/sdk-generator.ts +49 -0
  286. package/libs/instance-factories/sdks/typescript-sdk.yaml +59 -0
  287. package/libs/instance-factories/services/prisma-services.yaml +71 -0
  288. package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +303 -0
  289. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +532 -0
  290. package/libs/instance-factories/services/templates/prisma/service-generator.ts +315 -0
  291. package/libs/instance-factories/shared/path-resolver.ts +111 -0
  292. package/libs/instance-factories/storage/mongodb.yaml +79 -0
  293. package/libs/instance-factories/storage/postgresql.yaml +75 -0
  294. package/libs/instance-factories/storage/redis.yaml +79 -0
  295. package/libs/instance-factories/storage/templates/mongodb/config-generator.ts +15 -0
  296. package/libs/instance-factories/storage/templates/mongodb/docker-generator.ts +18 -0
  297. package/libs/instance-factories/storage/templates/postgresql/config-generator.ts +54 -0
  298. package/libs/instance-factories/storage/templates/postgresql/docker-generator.ts +55 -0
  299. package/libs/instance-factories/storage/templates/redis/config-generator.ts +16 -0
  300. package/libs/instance-factories/storage/templates/redis/docker-generator.ts +18 -0
  301. package/libs/instance-factories/test-generation.ts +192 -0
  302. package/libs/instance-factories/testing/templates/vitest/tests-generator.ts +51 -0
  303. package/libs/instance-factories/testing/vitest-tests.yaml +63 -0
  304. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +136 -0
  305. package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +630 -0
  306. package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +330 -0
  307. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +552 -0
  308. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +164 -0
  309. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +247 -0
  310. package/libs/instance-factories/tools/templates/mcp/static/package.json +92 -0
  311. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +284 -0
  312. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +139 -0
  313. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +74 -0
  314. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +156 -0
  315. package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +41 -0
  316. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +259 -0
  317. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +231 -0
  318. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +196 -0
  319. package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +293 -0
  320. package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +90 -0
  321. package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +24 -0
  322. package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +15 -0
  323. package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +106 -0
  324. package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +75 -0
  325. package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +239 -0
  326. package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +1501 -0
  327. package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +211 -0
  328. package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +308 -0
  329. package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +210 -0
  330. package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +356 -0
  331. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +524 -0
  332. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +530 -0
  333. package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +594 -0
  334. package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +170 -0
  335. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +544 -0
  336. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +189 -0
  337. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +89 -0
  338. package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +110 -0
  339. package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +28 -0
  340. package/libs/instance-factories/tools/templates/vscode/static/extension.ts +1195 -0
  341. package/libs/instance-factories/tools/templates/vscode/static/language-configuration.json +34 -0
  342. package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +4279 -0
  343. package/libs/instance-factories/tools/templates/vscode/static/syntaxes/specverse.tmLanguage.json +138 -0
  344. package/libs/instance-factories/tools/templates/vscode/static/themes/README.md +74 -0
  345. package/libs/instance-factories/tools/templates/vscode/static/themes/complete-specverse-colors.json +122 -0
  346. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-basic-theme.json +65 -0
  347. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-complete-theme.json +123 -0
  348. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-theme-colors.json +64 -0
  349. package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +214 -0
  350. package/libs/instance-factories/validation/templates/zod/validation-generator.ts +46 -0
  351. package/libs/instance-factories/validation/zod.yaml +56 -0
  352. package/libs/instance-factories/views/index.d.ts +13 -0
  353. package/libs/instance-factories/views/index.d.ts.map +1 -0
  354. package/libs/instance-factories/views/index.js +18 -0
  355. package/libs/instance-factories/views/index.js.map +1 -0
  356. package/libs/instance-factories/views/index.ts +45 -0
  357. package/libs/instance-factories/views/react-components.yaml +129 -0
  358. package/libs/instance-factories/views/templates/ARCHITECTURE.md +198 -0
  359. package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +869 -0
  360. package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +953 -0
  361. package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +806 -0
  362. package/libs/instance-factories/views/templates/react/app-generator.ts +55 -0
  363. package/libs/instance-factories/views/templates/react/components-generator.ts +391 -0
  364. package/libs/instance-factories/views/templates/react/forms-generator.ts +343 -0
  365. package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +54 -0
  366. package/libs/instance-factories/views/templates/react/hooks-generator.ts +122 -0
  367. package/libs/instance-factories/views/templates/react/index-css-generator.ts +209 -0
  368. package/libs/instance-factories/views/templates/react/index-html-generator.ts +34 -0
  369. package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +29 -0
  370. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +152 -0
  371. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +1 -0
  372. package/libs/instance-factories/views/templates/react/react-component-generator.js +398 -0
  373. package/libs/instance-factories/views/templates/react/react-component-generator.js.map +1 -0
  374. package/libs/instance-factories/views/templates/react/react-component-generator.ts +533 -0
  375. package/libs/instance-factories/views/templates/react/router-generator.ts +197 -0
  376. package/libs/instance-factories/views/templates/react/router-generic-generator.ts +103 -0
  377. package/libs/instance-factories/views/templates/react/spec-json-generator.ts +17 -0
  378. package/libs/instance-factories/views/templates/react/types-generator.ts +76 -0
  379. package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +42 -0
  380. package/libs/instance-factories/views/templates/react/vite-config-generator.ts +38 -0
  381. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +1 -0
  382. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +1 -0
  383. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +474 -0
  384. package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +242 -0
  385. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +77 -0
  386. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +1 -0
  387. package/libs/instance-factories/views/templates/shared/adapter-types.js +47 -0
  388. package/libs/instance-factories/views/templates/shared/adapter-types.js.map +1 -0
  389. package/libs/instance-factories/views/templates/shared/adapter-types.ts +142 -0
  390. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +63 -0
  391. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +1 -0
  392. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +822 -0
  393. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +1 -0
  394. package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +908 -0
  395. package/libs/instance-factories/views/templates/shared/base-generator.d.ts +247 -0
  396. package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +1 -0
  397. package/libs/instance-factories/views/templates/shared/base-generator.js +363 -0
  398. package/libs/instance-factories/views/templates/shared/base-generator.js.map +1 -0
  399. package/libs/instance-factories/views/templates/shared/base-generator.ts +608 -0
  400. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +254 -0
  401. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +1 -0
  402. package/libs/instance-factories/views/templates/shared/component-metadata.js +602 -0
  403. package/libs/instance-factories/views/templates/shared/component-metadata.js.map +1 -0
  404. package/libs/instance-factories/views/templates/shared/component-metadata.ts +803 -0
  405. package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +250 -0
  406. package/libs/instance-factories/views/templates/shared/composite-patterns.ts +535 -0
  407. package/libs/instance-factories/views/templates/shared/index.ts +68 -0
  408. package/libs/instance-factories/views/templates/shared/pattern-validator.ts +279 -0
  409. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +149 -0
  410. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +1 -0
  411. package/libs/instance-factories/views/templates/shared/property-mapper.js +580 -0
  412. package/libs/instance-factories/views/templates/shared/property-mapper.js.map +1 -0
  413. package/libs/instance-factories/views/templates/shared/property-mapper.ts +700 -0
  414. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +143 -0
  415. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +1 -0
  416. package/libs/instance-factories/views/templates/shared/syntax-mapper.js +420 -0
  417. package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +1 -0
  418. package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +539 -0
  419. package/package.json +42 -0
  420. package/schema/SPECVERSE-SCHEMA.json +4274 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * PostgreSQL Configuration Generator
3
+ *
4
+ * Generates database configuration for PostgreSQL instances
5
+ */
6
+
7
+ import type { TemplateContext } from '@specverse/engine-realize';
8
+
9
+ /**
10
+ * Generate PostgreSQL configuration
11
+ */
12
+ export default function generatePostgreSQLConfig(context: TemplateContext): string {
13
+ const { instance, implType } = context;
14
+ const config = implType.configuration || {};
15
+ const instanceName = instance?.name || 'default';
16
+
17
+ return `/**
18
+ * PostgreSQL Database Configuration
19
+ * Instance: ${instanceName}
20
+ * Generated from SpecVerse specification
21
+ */
22
+
23
+ import { Pool, PoolConfig } from 'pg';
24
+
25
+ export const ${instanceName}Config: PoolConfig = {
26
+ host: process.env.${instanceName.toUpperCase()}_DB_HOST || ${JSON.stringify(config.host || 'localhost')},
27
+ port: parseInt(process.env.${instanceName.toUpperCase()}_DB_PORT || '${config.port || 5432}'),
28
+ database: process.env.${instanceName.toUpperCase()}_DB_NAME || ${JSON.stringify(config.database || 'app')},
29
+ user: process.env.${instanceName.toUpperCase()}_DB_USER,
30
+ password: process.env.${instanceName.toUpperCase()}_DB_PASSWORD,
31
+
32
+ // Connection pool settings
33
+ min: ${config.pool?.min || 2},
34
+ max: ${config.pool?.max || 10},
35
+ idleTimeoutMillis: ${config.pool?.idleTimeoutMillis || 30000},
36
+ connectionTimeoutMillis: ${config.pool?.connectionTimeoutMillis || 2000},
37
+
38
+ // Performance settings
39
+ statement_timeout: 30000,
40
+ query_timeout: 30000,
41
+ };
42
+
43
+ // Create connection pool
44
+ export const ${instanceName}Pool = new Pool(${instanceName}Config);
45
+
46
+ // Handle pool errors
47
+ ${instanceName}Pool.on('error', (err) => {
48
+ console.error('Unexpected error on idle PostgreSQL client (${instanceName})', err);
49
+ process.exit(-1);
50
+ });
51
+
52
+ export default ${instanceName}Pool;
53
+ `;
54
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * PostgreSQL Docker Compose Generator
3
+ *
4
+ * Generates Docker Compose configuration for PostgreSQL instances
5
+ */
6
+
7
+ import type { TemplateContext } from '@specverse/engine-realize';
8
+
9
+ /**
10
+ * Generate Docker Compose configuration for PostgreSQL
11
+ */
12
+ export default function generatePostgreSQLDocker(context: TemplateContext): string {
13
+ const { instance, implType } = context;
14
+ const config = implType.configuration || {};
15
+ const instanceName = instance?.name || 'postgres';
16
+
17
+ return `# PostgreSQL Docker Compose Configuration
18
+ # Instance: ${instanceName}
19
+ # Generated from SpecVerse specification
20
+
21
+ version: '3.8'
22
+
23
+ services:
24
+ ${instanceName}:
25
+ image: postgres:15-alpine
26
+ container_name: ${instanceName}
27
+ restart: unless-stopped
28
+
29
+ ports:
30
+ - "\${${instanceName.toUpperCase()}_DB_PORT:-${config.port || 5432}}:5432"
31
+
32
+ environment:
33
+ POSTGRES_DB: \${${instanceName.toUpperCase()}_DB_NAME:-app}
34
+ POSTGRES_USER: \${${instanceName.toUpperCase()}_DB_USER:-postgres}
35
+ POSTGRES_PASSWORD: \${${instanceName.toUpperCase()}_DB_PASSWORD}
36
+
37
+ # Performance settings
38
+ POSTGRES_MAX_CONNECTIONS: ${config.settings?.max_connections || 100}
39
+ POSTGRES_SHARED_BUFFERS: ${config.settings?.shared_buffers || '256MB'}
40
+
41
+ volumes:
42
+ - ${instanceName}_data:/var/lib/postgresql/data
43
+ - ./init-scripts:/docker-entrypoint-initdb.d
44
+
45
+ healthcheck:
46
+ test: ["CMD-SHELL", "pg_isready -U \${${instanceName.toUpperCase()}_DB_USER:-postgres}"]
47
+ interval: 10s
48
+ timeout: 5s
49
+ retries: 5
50
+
51
+ volumes:
52
+ ${instanceName}_data:
53
+ driver: local
54
+ `;
55
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Redis Configuration Generator
3
+ */
4
+ import type { TemplateContext } from '@specverse/engine-realize';
5
+
6
+ export default function generateRedisConfig(context: TemplateContext): string {
7
+ const { instance } = context;
8
+ const instanceName = instance?.name || 'redis';
9
+ return `// Redis configuration for ${instanceName}
10
+ // TODO: Implement full Redis config generator
11
+ export const redisConfig = {
12
+ host: process.env.REDIS_HOST || 'localhost',
13
+ port: parseInt(process.env.REDIS_PORT || '6379')
14
+ };
15
+ `;
16
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Redis Docker Compose Generator
3
+ */
4
+ import type { TemplateContext } from '@specverse/engine-realize';
5
+
6
+ export default function generateRedisDocker(context: TemplateContext): string {
7
+ const { instance } = context;
8
+ const instanceName = instance?.name || 'redis';
9
+ return `# Redis Docker Compose for ${instanceName}
10
+ # TODO: Implement full Redis docker generator
11
+ version: '3.8'
12
+ services:
13
+ ${instanceName}:
14
+ image: redis:7-alpine
15
+ ports:
16
+ - "6379:6379"
17
+ `;
18
+ }
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Test v3.3 Implementation Types System
3
+ *
4
+ * Tests the complete flow from spec to generated code
5
+ */
6
+
7
+ import { createDefaultLibrary, createResolver, createCodeGenerator, loadManifest } from '@specverse/engine-realize';
8
+ import { UnifiedSpecVerseParser } from '@specverse/engine-parser';
9
+ import { readFileSync } from 'fs';
10
+ import { resolve } from 'path';
11
+
12
+ async function testV33Generation() {
13
+ console.log('🧪 Testing v3.3 Implementation Types System\n');
14
+
15
+ try {
16
+ // 1. Load Implementation Type Library
17
+ console.log('📚 Step 1: Loading Implementation Type Library...');
18
+ const library = await createDefaultLibrary(process.cwd());
19
+ const allTypes = library.find({});
20
+ console.log(` ✅ Library loaded with ${allTypes.length} implementation types`);
21
+
22
+ // List loaded types
23
+ allTypes.forEach(type => {
24
+ console.log(` - ${type.name} v${type.version} (${type.type})`);
25
+ });
26
+ console.log();
27
+
28
+ // 2. Load Manifest
29
+ console.log('📄 Step 2: Loading v3.3 Manifest...');
30
+ const manifestPath = resolve(process.cwd(), 'examples/v33-test/fastify-prisma-manifest.yaml');
31
+ const manifest = loadManifest(manifestPath);
32
+ console.log(` ✅ Manifest loaded: ${manifest.name}`);
33
+ console.log(` - Version: ${manifest.version}`);
34
+ console.log(` - Implementation Types: ${manifest.implementationTypes?.length || 0}`);
35
+ console.log(` - Capability Mappings: ${Object.keys(manifest.capabilityMappings || {}).length}`);
36
+ console.log();
37
+
38
+ // 3. Create Resolver
39
+ console.log('🔍 Step 3: Creating Capability Resolver...');
40
+ const resolver = createResolver(library, manifest);
41
+ console.log(` ✅ Resolver created`);
42
+ console.log();
43
+
44
+ // 4. Parse Spec
45
+ console.log('📝 Step 4: Parsing Test Spec...');
46
+ // Use a simple existing example for now
47
+ const specPath = resolve(process.cwd(), 'examples/01-fundamentals/01-01-basic-model.specly');
48
+ const specContent = readFileSync(specPath, 'utf8');
49
+
50
+ const schemaPath = resolve(process.cwd(), 'schema/SPECVERSE-SCHEMA.json');
51
+ const schema = JSON.parse(readFileSync(schemaPath, 'utf8'));
52
+
53
+ const parser = new UnifiedSpecVerseParser(schema);
54
+ const parseResult = parser.parse(specContent, 'specly');
55
+
56
+ if (parseResult.errors && parseResult.errors.length > 0) {
57
+ console.error(' ❌ Parse errors:');
58
+ parseResult.errors.forEach((err: any) => {
59
+ console.error(` - ${err.message}`);
60
+ });
61
+ return;
62
+ }
63
+
64
+ console.log(` ✅ Spec parsed successfully`);
65
+ console.log(` - Component: ${parseResult.ast?.components ? Object.keys(parseResult.ast.components)[0] : 'unknown'}`);
66
+ console.log(` - Models: ${parseResult.ast?.components?.[Object.keys(parseResult.ast.components)[0]]?.models?.length || 0}`);
67
+ console.log(` - Controllers: ${parseResult.ast?.components?.[Object.keys(parseResult.ast.components)[0]]?.controllers?.length || 0}`);
68
+
69
+ // Mock a deployment for testing (since basic example doesn't have one)
70
+ const deployment = {
71
+ environment: 'development',
72
+ instances: {
73
+ 'apiServer': {
74
+ name: 'Test API Server',
75
+ type: 'api-server',
76
+ advertises: ['api.rest', 'api.rest.crud'],
77
+ uses: ['storage.database']
78
+ },
79
+ 'database': {
80
+ name: 'Test Database',
81
+ type: 'storage',
82
+ advertises: ['storage.database', 'storage.prisma'],
83
+ uses: []
84
+ }
85
+ }
86
+ };
87
+ console.log(` - Mocked deployment for testing`);
88
+ console.log(` - Instances: ${Object.keys(deployment.instances || {}).length}`);
89
+ console.log();
90
+
91
+ // 5. Test Resolution
92
+ console.log('🔗 Step 5: Testing Capability Resolution...');
93
+ const apiInstance = deployment.instances?.['apiServer'];
94
+ if (!apiInstance) {
95
+ console.error(' ❌ No api-server instance found');
96
+ return;
97
+ }
98
+
99
+ console.log(` Testing instance: ${apiInstance.name}`);
100
+ console.log(` Advertises: ${apiInstance.advertises?.join(', ')}`);
101
+
102
+ const resolved = resolver.resolveForInstance(apiInstance);
103
+ console.log(` ✅ Resolved ${resolved.length} implementation type(s)`);
104
+
105
+ resolved.forEach(impl => {
106
+ console.log(` - ${impl.implementationType.name}`);
107
+ console.log(` Capability: ${impl.capability}`);
108
+ console.log(` Templates: ${Object.keys(impl.implementationType.codeTemplates).join(', ')}`);
109
+ });
110
+ console.log();
111
+
112
+ // 6. Test Code Generation
113
+ console.log('⚙️ Step 6: Testing Code Generation...');
114
+ const codeGen = createCodeGenerator({ outputDir: '/tmp/v33-test' });
115
+
116
+ // Get component data
117
+ const componentName = Object.keys(parseResult.ast?.components || {})[0];
118
+ const component = parseResult.ast?.components?.[componentName];
119
+ const model = component?.models?.[0];
120
+
121
+ // Mock a controller if not present
122
+ const controller = component?.controllers?.[0] || {
123
+ name: `${model?.name}Controller`,
124
+ path: `/api/${model?.name?.toLowerCase()}`,
125
+ model: model?.name,
126
+ endpoints: [
127
+ { operation: 'create', method: 'POST', path: '/' },
128
+ { operation: 'retrieve', method: 'GET', path: '/:id' },
129
+ { operation: 'update', method: 'PUT', path: '/:id' },
130
+ { operation: 'delete', method: 'DELETE', path: '/:id' },
131
+ { operation: 'list', method: 'GET', path: '/' }
132
+ ]
133
+ };
134
+
135
+ if (!model) {
136
+ console.error(' ❌ No model found in spec');
137
+ return;
138
+ }
139
+
140
+ console.log(` Generating code for model: ${model.name}`);
141
+
142
+ // Test each template
143
+ const impl = resolved[0];
144
+ const templates = ['routes', 'services', 'schema'];
145
+
146
+ for (const templateName of templates) {
147
+ try {
148
+ console.log(` Testing ${templateName} template...`);
149
+
150
+ const output = await codeGen.generateFromTemplate(
151
+ impl,
152
+ templateName,
153
+ {
154
+ spec: parseResult.ast,
155
+ model,
156
+ controller,
157
+ models: [model]
158
+ },
159
+ { outputDir: '/tmp/v33-test' }
160
+ );
161
+
162
+ console.log(` ✅ ${templateName}: ${output.filePath}`);
163
+ console.log(` Code length: ${output.code.length} characters`);
164
+ console.log(` First 100 chars: ${output.code.substring(0, 100)}...`);
165
+ } catch (error) {
166
+ console.error(` ❌ ${templateName} failed: ${error instanceof Error ? error.message : String(error)}`);
167
+ }
168
+ }
169
+ console.log();
170
+
171
+ // 7. Summary
172
+ console.log('✅ All tests completed!');
173
+ console.log('\n📊 Summary:');
174
+ console.log(` - Library: ✅ Loaded`);
175
+ console.log(` - Manifest: ✅ Loaded`);
176
+ console.log(` - Spec: ✅ Parsed`);
177
+ console.log(` - Resolution: ✅ Working`);
178
+ console.log(` - Generation: ✅ Working`);
179
+ console.log('\n🎉 v3.3 Implementation Types System is operational!');
180
+
181
+ } catch (error) {
182
+ console.error('\n❌ Test failed:', error instanceof Error ? error.message : String(error));
183
+ if (error instanceof Error && error.stack) {
184
+ console.error('\nStack trace:');
185
+ console.error(error.stack);
186
+ }
187
+ process.exit(1);
188
+ }
189
+ }
190
+
191
+ // Run test
192
+ testV33Generation();
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Vitest Test Suite Generator Wrapper
3
+ *
4
+ * Wraps the existing generate-tests.js script for use with the
5
+ * implementation types system.
6
+ *
7
+ * NOTE: This is a wrapper around scripts/generate-tests.js
8
+ * TODO: Convert generate-tests.js to native TypeScript template generator
9
+ * See vitest-tests.yaml for conversion notes.
10
+ */
11
+
12
+ import type { TemplateContext } from '@specverse/engine-realize';
13
+ import { generateTests } from '../../../../../scripts/generate-tests.js';
14
+
15
+ /**
16
+ * Generate test suite by delegating to the existing generator
17
+ */
18
+ export default function generateTestSuite(context: TemplateContext): string {
19
+ const { spec, implType, outputDir } = context;
20
+
21
+ if (!spec) {
22
+ throw new Error('Specification is required in template context');
23
+ }
24
+
25
+ // Extract configuration from implementation type
26
+ const config = implType.configuration || {};
27
+
28
+ const options = {
29
+ testFramework: config.testFramework || 'vitest',
30
+ generateUnitTests: config.generateUnitTests !== false,
31
+ generateIntegrationTests: config.generateIntegrationTests !== false,
32
+ generateE2ETests: config.generateE2ETests !== false,
33
+ generateFixtures: config.generateFixtures !== false,
34
+ generateMocks: config.generateMocks !== false
35
+ };
36
+
37
+ // Call the existing generator
38
+ const result = generateTests(spec, outputDir || './tests', options);
39
+
40
+ // Return summary information
41
+ return JSON.stringify({
42
+ message: 'Test suite generated successfully',
43
+ unitTests: result.unitTests,
44
+ integrationTests: result.integrationTests,
45
+ e2eTests: result.e2eTests,
46
+ fixtureCount: result.fixtureCount,
47
+ mockCount: result.mockCount,
48
+ outputDir: result.outputDir,
49
+ files: result.files
50
+ }, null, 2);
51
+ }
@@ -0,0 +1,63 @@
1
+ name: VitestTests
2
+ version: "1.0.0"
3
+ category: service
4
+ description: "Comprehensive test suite generator with Vitest - unit, integration, and e2e tests"
5
+
6
+ metadata:
7
+ author: "SpecVerse Team"
8
+ license: "MIT"
9
+ tags: [vitest, testing, typescript, unit, integration, e2e]
10
+
11
+ compatibility:
12
+ specverse: "^3.3.0"
13
+ node: ">=18.0.0"
14
+
15
+ capabilities:
16
+ provides:
17
+ - "testing.unit"
18
+ - "testing.integration"
19
+ - "testing.e2e"
20
+ requires:
21
+ - "api.rest"
22
+
23
+ technology:
24
+ runtime: "node"
25
+ language: "typescript"
26
+ testFramework: "vitest"
27
+ testRunner: "vitest"
28
+
29
+ dependencies:
30
+ dev:
31
+ - name: "vitest"
32
+ version: "^1.0.0"
33
+ - name: "@vitest/ui"
34
+ version: "^1.0.0"
35
+ - name: "@types/node"
36
+ version: "^20.8.0"
37
+ - name: "typescript"
38
+ version: "^5.2.0"
39
+
40
+ codeTemplates:
41
+ tests:
42
+ engine: typescript
43
+ generator: "libs/instance-factories/testing/templates/vitest/tests-generator.ts"
44
+ outputPattern: "tests/"
45
+
46
+ configuration:
47
+ testFramework: "vitest"
48
+ generateUnitTests: true
49
+ generateIntegrationTests: true
50
+ generateE2ETests: true
51
+ generateFixtures: true
52
+ generateMocks: true
53
+
54
+ # NOTE: This implementation type wraps the existing generate-tests.js script
55
+ # TODO: Future enhancement - Convert generate-tests.js to native TypeScript template generator
56
+ # The current script is 700+ lines and generates a complete test suite structure.
57
+ # Converting to native templates would require breaking it into multiple template files:
58
+ # - unit-tests-generator.ts (service layer unit tests)
59
+ # - integration-tests-generator.ts (route integration tests)
60
+ # - e2e-tests-generator.ts (end-to-end workflow tests)
61
+ # - fixtures-generator.ts (test data fixtures)
62
+ # - mocks-generator.ts (Prisma and EventBus mocks)
63
+ # - setup-generator.ts (database and server setup utilities)
@@ -0,0 +1,136 @@
1
+ /**
2
+ * MCP Server Generator
3
+ *
4
+ * Generates a Model Context Protocol server from the SpecVerse spec.
5
+ * Ships the core server framework as static assets, generates tool/resource
6
+ * registration from the spec's ToolsSupport and CLI components.
7
+ */
8
+
9
+ import type { TemplateContext } from '@specverse/engine-realize';
10
+ import { existsSync, mkdirSync, writeFileSync, readdirSync, statSync, copyFileSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+
14
+ const __generatorDir = dirname(fileURLToPath(import.meta.url));
15
+
16
+ export default function generateMCPServer(context: TemplateContext): string {
17
+ const { spec, outputDir } = context;
18
+
19
+ const mcpDir = join(outputDir || '.', 'tools', 'specverse-mcp');
20
+ if (!existsSync(mcpDir)) mkdirSync(mcpDir, { recursive: true });
21
+
22
+ // 1. Copy static MCP server framework
23
+ const staticDir = join(__generatorDir, 'static');
24
+ if (existsSync(staticDir)) {
25
+ copyRecursive(staticDir, mcpDir);
26
+ }
27
+
28
+ // 2. Generate tool registry from spec
29
+ const tools = extractMCPTools(spec);
30
+ const resources = extractMCPResources(spec);
31
+ const cliCommands = extractCLICommands(spec);
32
+
33
+ // 3. Generate a spec-driven registration file
34
+ const registryCode = generateToolRegistry(tools, resources, cliCommands);
35
+ const registryDir = join(mcpDir, 'src', 'generated');
36
+ if (!existsSync(registryDir)) mkdirSync(registryDir, { recursive: true });
37
+ writeFileSync(join(registryDir, 'spec-registry.ts'), registryCode);
38
+
39
+ return `MCP server generated in: ${mcpDir}\n ${tools.length} tools, ${resources.length} resources, ${cliCommands.length} CLI commands`;
40
+ }
41
+
42
+ function extractMCPTools(spec: any): Array<{ name: string; description: string; isEntityTool: boolean }> {
43
+ const tools: Array<{ name: string; description: string; isEntityTool: boolean }> = [];
44
+ const components = spec?.components || [];
45
+ for (const component of Array.isArray(components) ? components : Object.values(components)) {
46
+ const models = (component as any)?.models;
47
+ if (!models) continue;
48
+ const modelList = Array.isArray(models) ? models : Object.entries(models).map(([n, d]) => ({ name: n, ...(d as any) }));
49
+ for (const model of modelList) {
50
+ if (model.name === 'MCPTool') {
51
+ // This is the meta-model — extract default tools from the spec description
52
+ tools.push(
53
+ { name: 'specverse-create', description: 'Create a SpecVerse specification from requirements', isEntityTool: false },
54
+ { name: 'specverse-analyse', description: 'Analyse existing code and extract a specification', isEntityTool: false },
55
+ { name: 'specverse-validate', description: 'Validate a .specly specification', isEntityTool: false },
56
+ { name: 'specverse-realize', description: 'Generate code from a specification', isEntityTool: false },
57
+ { name: 'specverse-suggest', description: 'Get improvement suggestions for a specification', isEntityTool: false },
58
+ );
59
+ }
60
+ }
61
+ }
62
+ if (tools.length === 0) {
63
+ // Default tools if no MCPTool model found
64
+ tools.push(
65
+ { name: 'specverse-validate', description: 'Validate a specification', isEntityTool: false },
66
+ { name: 'specverse-create', description: 'Create a specification', isEntityTool: false },
67
+ );
68
+ }
69
+ return tools;
70
+ }
71
+
72
+ function extractMCPResources(spec: any): Array<{ uri: string; name: string; description: string }> {
73
+ return [
74
+ { uri: 'specverse://schema', name: 'SpecVerse Schema', description: 'JSON Schema for .specly validation' },
75
+ { uri: 'specverse://conventions', name: 'Convention Reference', description: 'Convention syntax patterns' },
76
+ { uri: 'specverse://library-catalog', name: 'Library Catalog', description: 'Available SpecVerse libraries' },
77
+ { uri: 'specverse://prompts', name: 'Prompt Templates', description: 'AI prompt template versions' },
78
+ ];
79
+ }
80
+
81
+ function extractCLICommands(spec: any): string[] {
82
+ const commands: string[] = [];
83
+ const components = spec?.components || [];
84
+ for (const component of Array.isArray(components) ? components : Object.values(components)) {
85
+ const cliCommands = (component as any)?.commands;
86
+ if (!cliCommands) continue;
87
+ for (const [, rootDef] of Object.entries(cliCommands as Record<string, any>)) {
88
+ const subs = (rootDef as any)?.subcommands || {};
89
+ for (const subName of Object.keys(subs)) {
90
+ commands.push(subName);
91
+ }
92
+ }
93
+ }
94
+ return commands;
95
+ }
96
+
97
+ function generateToolRegistry(
98
+ tools: Array<{ name: string; description: string; isEntityTool: boolean }>,
99
+ resources: Array<{ uri: string; name: string; description: string }>,
100
+ cliCommands: string[]
101
+ ): string {
102
+ return `/**
103
+ * Spec-Driven MCP Registry
104
+ * Generated from SpecVerse self-specification.
105
+ *
106
+ * Tools, resources, and CLI command mappings derived from the spec.
107
+ */
108
+
109
+ export const SPEC_TOOLS = ${JSON.stringify(tools, null, 2)};
110
+
111
+ export const SPEC_RESOURCES = ${JSON.stringify(resources, null, 2)};
112
+
113
+ export const CLI_COMMANDS = ${JSON.stringify(cliCommands, null, 2)};
114
+
115
+ export function getToolByName(name: string) {
116
+ return SPEC_TOOLS.find(t => t.name === name);
117
+ }
118
+
119
+ export function getResourceByUri(uri: string) {
120
+ return SPEC_RESOURCES.find(r => r.uri === uri);
121
+ }
122
+ `;
123
+ }
124
+
125
+ function copyRecursive(src: string, dest: string) {
126
+ for (const entry of readdirSync(src)) {
127
+ const srcPath = join(src, entry);
128
+ const destPath = join(dest, entry);
129
+ if (statSync(srcPath).isDirectory()) {
130
+ if (!existsSync(destPath)) mkdirSync(destPath, { recursive: true });
131
+ copyRecursive(srcPath, destPath);
132
+ } else {
133
+ copyFileSync(srcPath, destPath);
134
+ }
135
+ }
136
+ }