@specverse/engines 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) 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/examples-inference/inference-engine-demo.example.yaml +8 -0
  45. package/assets/examples-inference/inference-engine-demo.md +574 -0
  46. package/assets/examples-inference/inference-engine-demo.specly +216 -0
  47. package/assets/prompts/MOVED.md +35 -0
  48. package/assets/prompts/SUMMARY-v8-PROMOTION.md +445 -0
  49. package/assets/prompts/core/CHANGELOG.md +158 -0
  50. package/assets/prompts/core/MIGRATION-v6-to-v7.md +379 -0
  51. package/assets/prompts/core/README.md +319 -0
  52. package/assets/prompts/core/base-terminal-prompt.md +201 -0
  53. package/assets/prompts/core/examples/example-usage.ts +140 -0
  54. package/assets/prompts/core/schemas/prompt.schema.json +309 -0
  55. package/assets/prompts/core/schemas/prompt.schema.yaml +229 -0
  56. package/assets/prompts/core/standard/archive/v1/analyse.prompt.yaml +259 -0
  57. package/assets/prompts/core/standard/archive/v1/create.prompt.yaml +302 -0
  58. package/assets/prompts/core/standard/archive/v1/materialise.prompt.yaml +328 -0
  59. package/assets/prompts/core/standard/archive/v1/realize.prompt.yaml +606 -0
  60. package/assets/prompts/core/standard/archive/v2/README.md +110 -0
  61. package/assets/prompts/core/standard/archive/v2/analyse.prompt.yaml +151 -0
  62. package/assets/prompts/core/standard/archive/v2/create.prompt.yaml +151 -0
  63. package/assets/prompts/core/standard/archive/v2/materialise.prompt.yaml +132 -0
  64. package/assets/prompts/core/standard/archive/v2/realize.prompt.yaml +147 -0
  65. package/assets/prompts/core/standard/archive/v3/README.md +279 -0
  66. package/assets/prompts/core/standard/archive/v3/analyse.prompt.yaml +309 -0
  67. package/assets/prompts/core/standard/archive/v3/create.prompt.yaml +351 -0
  68. package/assets/prompts/core/standard/archive/v3/materialise.prompt.yaml +247 -0
  69. package/assets/prompts/core/standard/archive/v3/realize.prompt.yaml +344 -0
  70. package/assets/prompts/core/standard/archive/v4/README.md +79 -0
  71. package/assets/prompts/core/standard/archive/v4/analyse.prompt.yaml +204 -0
  72. package/assets/prompts/core/standard/archive/v4/create.prompt.yaml +185 -0
  73. package/assets/prompts/core/standard/archive/v5/README.md +224 -0
  74. package/assets/prompts/core/standard/archive/v5/analyse.prompt.yaml +209 -0
  75. package/assets/prompts/core/standard/archive/v5/create.prompt.yaml +225 -0
  76. package/assets/prompts/core/standard/archive/v5/materialise.prompt.yaml +242 -0
  77. package/assets/prompts/core/standard/archive/v5/realize.prompt.yaml +336 -0
  78. package/assets/prompts/core/standard/archive/v6/README.md +187 -0
  79. package/assets/prompts/core/standard/archive/v6/analyse.prompt.yaml +219 -0
  80. package/assets/prompts/core/standard/archive/v6/create.prompt.yaml +180 -0
  81. package/assets/prompts/core/standard/archive/v6/materialise.prompt.yaml +203 -0
  82. package/assets/prompts/core/standard/archive/v6/realize.prompt.yaml +215 -0
  83. package/assets/prompts/core/standard/archive/v7/analyse.prompt.nick.yaml +144 -0
  84. package/assets/prompts/core/standard/archive/v7/analyse.prompt.old.yaml +146 -0
  85. package/assets/prompts/core/standard/archive/v7/analyse.prompt.yaml +129 -0
  86. package/assets/prompts/core/standard/archive/v7/create.prompt.yaml +146 -0
  87. package/assets/prompts/core/standard/archive/v7/materialise.prompt.yaml +297 -0
  88. package/assets/prompts/core/standard/archive/v7/realize.prompt.yaml +294 -0
  89. package/assets/prompts/core/standard/archive/v8/README.md +400 -0
  90. package/assets/prompts/core/standard/archive/v8/analyse.prompt.yaml +185 -0
  91. package/assets/prompts/core/standard/archive/v8/create.prompt.yaml +203 -0
  92. package/assets/prompts/core/standard/archive/v8/materialise.prompt.yaml +297 -0
  93. package/assets/prompts/core/standard/archive/v8/realize.prompt.yaml +294 -0
  94. package/assets/prompts/core/standard/default/analyse.prompt.yaml +496 -0
  95. package/assets/prompts/core/standard/default/app-demo.prompt.yaml +213 -0
  96. package/assets/prompts/core/standard/default/create.prompt.yaml +418 -0
  97. package/assets/prompts/core/standard/default/materialise.prompt.yaml +814 -0
  98. package/assets/prompts/core/standard/default/realize.prompt.yaml +574 -0
  99. package/assets/prompts/core/standard/v9/analyse.prompt.yaml +496 -0
  100. package/assets/prompts/core/standard/v9/create.prompt.yaml +418 -0
  101. package/assets/prompts/core/standard/v9/materialise.prompt.yaml +814 -0
  102. package/assets/prompts/core/standard/v9/realize.prompt.yaml +574 -0
  103. package/assets/prompts/templates/api-orchestrator-template.yaml +188 -0
  104. package/assets/prompts/templates/claude-integration-template.md +121 -0
  105. package/assets/prompts/templates/terminal-prompt-template.md +97 -0
  106. package/dist/ai/commands/enhance.d.ts +8 -0
  107. package/dist/ai/commands/enhance.d.ts.map +1 -0
  108. package/dist/ai/commands/enhance.js +155 -0
  109. package/dist/ai/commands/enhance.js.map +1 -0
  110. package/dist/ai/commands/fill.d.ts +8 -0
  111. package/dist/ai/commands/fill.d.ts.map +1 -0
  112. package/dist/ai/commands/fill.js +179 -0
  113. package/dist/ai/commands/fill.js.map +1 -0
  114. package/dist/ai/commands/index.d.ts +11 -0
  115. package/dist/ai/commands/index.d.ts.map +1 -0
  116. package/dist/ai/commands/index.js +11 -0
  117. package/dist/ai/commands/index.js.map +1 -0
  118. package/dist/ai/commands/spec-analyser.d.ts +18 -0
  119. package/dist/ai/commands/spec-analyser.d.ts.map +1 -0
  120. package/dist/ai/commands/spec-analyser.js +175 -0
  121. package/dist/ai/commands/spec-analyser.js.map +1 -0
  122. package/dist/ai/commands/suggest.d.ts +8 -0
  123. package/dist/ai/commands/suggest.d.ts.map +1 -0
  124. package/dist/ai/commands/suggest.js +101 -0
  125. package/dist/ai/commands/suggest.js.map +1 -0
  126. package/dist/ai/commands/template.d.ts +8 -0
  127. package/dist/ai/commands/template.d.ts.map +1 -0
  128. package/dist/ai/commands/template.js +136 -0
  129. package/dist/ai/commands/template.js.map +1 -0
  130. package/dist/ai/config/index.d.ts +71 -0
  131. package/dist/ai/config/index.d.ts.map +1 -0
  132. package/dist/ai/config/index.js +193 -0
  133. package/dist/ai/config/index.js.map +1 -0
  134. package/dist/ai/config-loader.d.ts +31 -0
  135. package/dist/ai/config-loader.d.ts.map +1 -0
  136. package/dist/ai/config-loader.js +66 -0
  137. package/dist/ai/config-loader.js.map +1 -0
  138. package/dist/ai/core/ecosystem-prompt-manager.d.ts +107 -0
  139. package/dist/ai/core/ecosystem-prompt-manager.d.ts.map +1 -0
  140. package/dist/ai/core/ecosystem-prompt-manager.js +462 -0
  141. package/dist/ai/core/ecosystem-prompt-manager.js.map +1 -0
  142. package/dist/ai/examples/basic-usage.d.ts +9 -0
  143. package/dist/ai/examples/basic-usage.d.ts.map +1 -0
  144. package/dist/ai/examples/basic-usage.js +94 -0
  145. package/dist/ai/examples/basic-usage.js.map +1 -0
  146. package/dist/ai/index.d.ts +44 -0
  147. package/dist/ai/index.d.ts.map +1 -0
  148. package/dist/ai/index.js +164 -0
  149. package/dist/ai/index.js.map +1 -0
  150. package/dist/ai/orchestrator/index.d.ts +3 -0
  151. package/dist/ai/orchestrator/index.d.ts.map +1 -0
  152. package/dist/ai/orchestrator/index.js +3 -0
  153. package/dist/ai/orchestrator/index.js.map +1 -0
  154. package/dist/ai/orchestrator/interactive-workflow.d.ts +66 -0
  155. package/dist/ai/orchestrator/interactive-workflow.d.ts.map +1 -0
  156. package/dist/ai/orchestrator/interactive-workflow.js +214 -0
  157. package/dist/ai/orchestrator/interactive-workflow.js.map +1 -0
  158. package/dist/ai/orchestrator/specverse-orchestrator.d.ts +217 -0
  159. package/dist/ai/orchestrator/specverse-orchestrator.d.ts.map +1 -0
  160. package/dist/ai/orchestrator/specverse-orchestrator.js +745 -0
  161. package/dist/ai/orchestrator/specverse-orchestrator.js.map +1 -0
  162. package/dist/ai/prompt-loader.d.ts +24 -0
  163. package/dist/ai/prompt-loader.d.ts.map +1 -0
  164. package/dist/ai/prompt-loader.js +159 -0
  165. package/dist/ai/prompt-loader.js.map +1 -0
  166. package/dist/ai/providers/anthropic-provider.d.ts +38 -0
  167. package/dist/ai/providers/anthropic-provider.d.ts.map +1 -0
  168. package/dist/ai/providers/anthropic-provider.js +235 -0
  169. package/dist/ai/providers/anthropic-provider.js.map +1 -0
  170. package/dist/ai/providers/index.d.ts +6 -0
  171. package/dist/ai/providers/index.d.ts.map +1 -0
  172. package/dist/ai/providers/index.js +6 -0
  173. package/dist/ai/providers/index.js.map +1 -0
  174. package/dist/ai/providers/interactive-provider.d.ts +67 -0
  175. package/dist/ai/providers/interactive-provider.d.ts.map +1 -0
  176. package/dist/ai/providers/interactive-provider.js +337 -0
  177. package/dist/ai/providers/interactive-provider.js.map +1 -0
  178. package/dist/ai/providers/llm-provider.d.ts +127 -0
  179. package/dist/ai/providers/llm-provider.d.ts.map +1 -0
  180. package/dist/ai/providers/llm-provider.js +141 -0
  181. package/dist/ai/providers/llm-provider.js.map +1 -0
  182. package/dist/ai/providers/openai-provider.d.ts +39 -0
  183. package/dist/ai/providers/openai-provider.d.ts.map +1 -0
  184. package/dist/ai/providers/openai-provider.js +193 -0
  185. package/dist/ai/providers/openai-provider.js.map +1 -0
  186. package/dist/ai/providers/provider-factory.d.ts +47 -0
  187. package/dist/ai/providers/provider-factory.d.ts.map +1 -0
  188. package/dist/ai/providers/provider-factory.js +159 -0
  189. package/dist/ai/providers/provider-factory.js.map +1 -0
  190. package/dist/ai/session/claude-executor.d.ts +39 -0
  191. package/dist/ai/session/claude-executor.d.ts.map +1 -0
  192. package/dist/ai/session/claude-executor.js +136 -0
  193. package/dist/ai/session/claude-executor.js.map +1 -0
  194. package/dist/ai/session/session-manager.d.ts +72 -0
  195. package/dist/ai/session/session-manager.d.ts.map +1 -0
  196. package/dist/ai/session/session-manager.js +294 -0
  197. package/dist/ai/session/session-manager.js.map +1 -0
  198. package/dist/ai/session/types.d.ts +152 -0
  199. package/dist/ai/session/types.d.ts.map +1 -0
  200. package/dist/ai/session/types.js +6 -0
  201. package/dist/ai/session/types.js.map +1 -0
  202. package/dist/ai/types/index.d.ts +83 -0
  203. package/dist/ai/types/index.d.ts.map +1 -0
  204. package/dist/ai/types/index.js +5 -0
  205. package/dist/ai/types/index.js.map +1 -0
  206. package/dist/generators/UML-generator.d.ts +64 -0
  207. package/dist/generators/UML-generator.d.ts.map +1 -0
  208. package/dist/generators/UML-generator.js +541 -0
  209. package/dist/generators/UML-generator.js.map +1 -0
  210. package/dist/generators/ai-view-generator.d.ts +391 -0
  211. package/dist/generators/ai-view-generator.d.ts.map +1 -0
  212. package/dist/generators/ai-view-generator.js +907 -0
  213. package/dist/generators/ai-view-generator.js.map +1 -0
  214. package/dist/generators/diagram-engine/core/BaseDiagramPlugin.d.ts +41 -0
  215. package/dist/generators/diagram-engine/core/BaseDiagramPlugin.d.ts.map +1 -0
  216. package/dist/generators/diagram-engine/core/BaseDiagramPlugin.js +64 -0
  217. package/dist/generators/diagram-engine/core/BaseDiagramPlugin.js.map +1 -0
  218. package/dist/generators/diagram-engine/core/DiagramContext.d.ts +155 -0
  219. package/dist/generators/diagram-engine/core/DiagramContext.d.ts.map +1 -0
  220. package/dist/generators/diagram-engine/core/DiagramContext.js +481 -0
  221. package/dist/generators/diagram-engine/core/DiagramContext.js.map +1 -0
  222. package/dist/generators/diagram-engine/core/StyleManager.d.ts +51 -0
  223. package/dist/generators/diagram-engine/core/StyleManager.d.ts.map +1 -0
  224. package/dist/generators/diagram-engine/core/StyleManager.js +227 -0
  225. package/dist/generators/diagram-engine/core/StyleManager.js.map +1 -0
  226. package/dist/generators/diagram-engine/core/UnifiedDiagramGenerator.d.ts +83 -0
  227. package/dist/generators/diagram-engine/core/UnifiedDiagramGenerator.d.ts.map +1 -0
  228. package/dist/generators/diagram-engine/core/UnifiedDiagramGenerator.js +200 -0
  229. package/dist/generators/diagram-engine/core/UnifiedDiagramGenerator.js.map +1 -0
  230. package/dist/generators/diagram-engine/index.d.ts +41 -0
  231. package/dist/generators/diagram-engine/index.d.ts.map +1 -0
  232. package/dist/generators/diagram-engine/index.js +74 -0
  233. package/dist/generators/diagram-engine/index.js.map +1 -0
  234. package/dist/generators/diagram-engine/plugins/architecture/ArchitecturePlugin.d.ts +65 -0
  235. package/dist/generators/diagram-engine/plugins/architecture/ArchitecturePlugin.d.ts.map +1 -0
  236. package/dist/generators/diagram-engine/plugins/architecture/ArchitecturePlugin.js +490 -0
  237. package/dist/generators/diagram-engine/plugins/architecture/ArchitecturePlugin.js.map +1 -0
  238. package/dist/generators/diagram-engine/plugins/class-diagram/ClassDiagramPlugin.d.ts +40 -0
  239. package/dist/generators/diagram-engine/plugins/class-diagram/ClassDiagramPlugin.d.ts.map +1 -0
  240. package/dist/generators/diagram-engine/plugins/class-diagram/ClassDiagramPlugin.js +323 -0
  241. package/dist/generators/diagram-engine/plugins/class-diagram/ClassDiagramPlugin.js.map +1 -0
  242. package/dist/generators/diagram-engine/plugins/deployment/DeploymentPlugin.d.ts +46 -0
  243. package/dist/generators/diagram-engine/plugins/deployment/DeploymentPlugin.d.ts.map +1 -0
  244. package/dist/generators/diagram-engine/plugins/deployment/DeploymentPlugin.js +391 -0
  245. package/dist/generators/diagram-engine/plugins/deployment/DeploymentPlugin.js.map +1 -0
  246. package/dist/generators/diagram-engine/plugins/er-diagram/ERDiagramPlugin.d.ts +57 -0
  247. package/dist/generators/diagram-engine/plugins/er-diagram/ERDiagramPlugin.d.ts.map +1 -0
  248. package/dist/generators/diagram-engine/plugins/er-diagram/ERDiagramPlugin.js +300 -0
  249. package/dist/generators/diagram-engine/plugins/er-diagram/ERDiagramPlugin.js.map +1 -0
  250. package/dist/generators/diagram-engine/plugins/event-flow/EventFlowPlugin.d.ts +70 -0
  251. package/dist/generators/diagram-engine/plugins/event-flow/EventFlowPlugin.d.ts.map +1 -0
  252. package/dist/generators/diagram-engine/plugins/event-flow/EventFlowPlugin.js +955 -0
  253. package/dist/generators/diagram-engine/plugins/event-flow/EventFlowPlugin.js.map +1 -0
  254. package/dist/generators/diagram-engine/plugins/lifecycle/LifecyclePlugin.d.ts +40 -0
  255. package/dist/generators/diagram-engine/plugins/lifecycle/LifecyclePlugin.d.ts.map +1 -0
  256. package/dist/generators/diagram-engine/plugins/lifecycle/LifecyclePlugin.js +183 -0
  257. package/dist/generators/diagram-engine/plugins/lifecycle/LifecyclePlugin.js.map +1 -0
  258. package/dist/generators/diagram-engine/plugins/manifest/ManifestPlugin.d.ts +71 -0
  259. package/dist/generators/diagram-engine/plugins/manifest/ManifestPlugin.d.ts.map +1 -0
  260. package/dist/generators/diagram-engine/plugins/manifest/ManifestPlugin.js +396 -0
  261. package/dist/generators/diagram-engine/plugins/manifest/ManifestPlugin.js.map +1 -0
  262. package/dist/generators/diagram-engine/renderers/MermaidRenderer.d.ts +72 -0
  263. package/dist/generators/diagram-engine/renderers/MermaidRenderer.d.ts.map +1 -0
  264. package/dist/generators/diagram-engine/renderers/MermaidRenderer.js +441 -0
  265. package/dist/generators/diagram-engine/renderers/MermaidRenderer.js.map +1 -0
  266. package/dist/generators/diagram-engine/types/index.d.ts +261 -0
  267. package/dist/generators/diagram-engine/types/index.d.ts.map +1 -0
  268. package/dist/generators/diagram-engine/types/index.js +7 -0
  269. package/dist/generators/diagram-engine/types/index.js.map +1 -0
  270. package/dist/generators/documentation-generator.d.ts +54 -0
  271. package/dist/generators/documentation-generator.d.ts.map +1 -0
  272. package/dist/generators/documentation-generator.js +756 -0
  273. package/dist/generators/documentation-generator.js.map +1 -0
  274. package/dist/generators/index.d.ts +47 -0
  275. package/dist/generators/index.d.ts.map +1 -0
  276. package/dist/generators/index.js +51 -0
  277. package/dist/generators/index.js.map +1 -0
  278. package/dist/index.d.ts +13 -0
  279. package/dist/index.d.ts.map +1 -0
  280. package/dist/index.js +14 -0
  281. package/dist/index.js.map +1 -0
  282. package/dist/inference/comprehensive-engine.d.ts +71 -0
  283. package/dist/inference/comprehensive-engine.d.ts.map +1 -0
  284. package/dist/inference/comprehensive-engine.js +271 -0
  285. package/dist/inference/comprehensive-engine.js.map +1 -0
  286. package/dist/inference/core/context.d.ts +60 -0
  287. package/dist/inference/core/context.d.ts.map +1 -0
  288. package/dist/inference/core/context.js +292 -0
  289. package/dist/inference/core/context.js.map +1 -0
  290. package/dist/inference/core/index.d.ts +14 -0
  291. package/dist/inference/core/index.d.ts.map +1 -0
  292. package/dist/inference/core/index.js +18 -0
  293. package/dist/inference/core/index.js.map +1 -0
  294. package/dist/inference/core/rule-engine.d.ts +52 -0
  295. package/dist/inference/core/rule-engine.d.ts.map +1 -0
  296. package/dist/inference/core/rule-engine.js +1329 -0
  297. package/dist/inference/core/rule-engine.js.map +1 -0
  298. package/dist/inference/core/rule-file-types.d.ts +225 -0
  299. package/dist/inference/core/rule-file-types.d.ts.map +1 -0
  300. package/dist/inference/core/rule-file-types.js +79 -0
  301. package/dist/inference/core/rule-file-types.js.map +1 -0
  302. package/dist/inference/core/rule-loader.d.ts +93 -0
  303. package/dist/inference/core/rule-loader.d.ts.map +1 -0
  304. package/dist/inference/core/rule-loader.js +645 -0
  305. package/dist/inference/core/rule-loader.js.map +1 -0
  306. package/dist/inference/core/specly-converter.d.ts +50 -0
  307. package/dist/inference/core/specly-converter.d.ts.map +1 -0
  308. package/dist/inference/core/specly-converter.js +885 -0
  309. package/dist/inference/core/specly-converter.js.map +1 -0
  310. package/dist/inference/core/types.d.ts +395 -0
  311. package/dist/inference/core/types.d.ts.map +1 -0
  312. package/dist/inference/core/types.js +31 -0
  313. package/dist/inference/core/types.js.map +1 -0
  314. package/dist/inference/deployment/deployment-generator.d.ts +48 -0
  315. package/dist/inference/deployment/deployment-generator.d.ts.map +1 -0
  316. package/dist/inference/deployment/deployment-generator.js +343 -0
  317. package/dist/inference/deployment/deployment-generator.js.map +1 -0
  318. package/dist/inference/deployment/index.d.ts +6 -0
  319. package/dist/inference/deployment/index.d.ts.map +1 -0
  320. package/dist/inference/deployment/index.js +5 -0
  321. package/dist/inference/deployment/index.js.map +1 -0
  322. package/dist/inference/dev-specly-generator.d.ts +19 -0
  323. package/dist/inference/dev-specly-generator.d.ts.map +1 -0
  324. package/dist/inference/dev-specly-generator.js +127 -0
  325. package/dist/inference/dev-specly-generator.js.map +1 -0
  326. package/dist/inference/index.d.ts +29 -0
  327. package/dist/inference/index.d.ts.map +1 -0
  328. package/dist/inference/index.js +170 -0
  329. package/dist/inference/index.js.map +1 -0
  330. package/dist/inference/logical/generators/component-type-resolver.d.ts +82 -0
  331. package/dist/inference/logical/generators/component-type-resolver.d.ts.map +1 -0
  332. package/dist/inference/logical/generators/component-type-resolver.js +151 -0
  333. package/dist/inference/logical/generators/component-type-resolver.js.map +1 -0
  334. package/dist/inference/logical/generators/controller-generator.d.ts +43 -0
  335. package/dist/inference/logical/generators/controller-generator.d.ts.map +1 -0
  336. package/dist/inference/logical/generators/controller-generator.js +303 -0
  337. package/dist/inference/logical/generators/controller-generator.js.map +1 -0
  338. package/dist/inference/logical/generators/event-generator.d.ts +67 -0
  339. package/dist/inference/logical/generators/event-generator.d.ts.map +1 -0
  340. package/dist/inference/logical/generators/event-generator.js +466 -0
  341. package/dist/inference/logical/generators/event-generator.js.map +1 -0
  342. package/dist/inference/logical/generators/promotion-generator.d.ts +32 -0
  343. package/dist/inference/logical/generators/promotion-generator.d.ts.map +1 -0
  344. package/dist/inference/logical/generators/promotion-generator.js +133 -0
  345. package/dist/inference/logical/generators/promotion-generator.js.map +1 -0
  346. package/dist/inference/logical/generators/service-generator.d.ts +51 -0
  347. package/dist/inference/logical/generators/service-generator.d.ts.map +1 -0
  348. package/dist/inference/logical/generators/service-generator.js +268 -0
  349. package/dist/inference/logical/generators/service-generator.js.map +1 -0
  350. package/dist/inference/logical/generators/specialist-view-expander.d.ts +75 -0
  351. package/dist/inference/logical/generators/specialist-view-expander.d.ts.map +1 -0
  352. package/dist/inference/logical/generators/specialist-view-expander.js +182 -0
  353. package/dist/inference/logical/generators/specialist-view-expander.js.map +1 -0
  354. package/dist/inference/logical/generators/view-generator.d.ts +131 -0
  355. package/dist/inference/logical/generators/view-generator.d.ts.map +1 -0
  356. package/dist/inference/logical/generators/view-generator.js +1115 -0
  357. package/dist/inference/logical/generators/view-generator.js.map +1 -0
  358. package/dist/inference/logical/index.d.ts +19 -0
  359. package/dist/inference/logical/index.d.ts.map +1 -0
  360. package/dist/inference/logical/index.js +15 -0
  361. package/dist/inference/logical/index.js.map +1 -0
  362. package/dist/inference/logical/logical-engine.d.ts +68 -0
  363. package/dist/inference/logical/logical-engine.d.ts.map +1 -0
  364. package/dist/inference/logical/logical-engine.js +484 -0
  365. package/dist/inference/logical/logical-engine.js.map +1 -0
  366. package/dist/inference/quint-transpiler.d.ts +64 -0
  367. package/dist/inference/quint-transpiler.d.ts.map +1 -0
  368. package/dist/inference/quint-transpiler.js +433 -0
  369. package/dist/inference/quint-transpiler.js.map +1 -0
  370. package/dist/inference/test-harness.d.ts +41 -0
  371. package/dist/inference/test-harness.d.ts.map +1 -0
  372. package/dist/inference/test-harness.js +357 -0
  373. package/dist/inference/test-harness.js.map +1 -0
  374. package/dist/parser/convention-processor.d.ts +66 -0
  375. package/dist/parser/convention-processor.d.ts.map +1 -0
  376. package/dist/parser/convention-processor.js +349 -0
  377. package/dist/parser/convention-processor.js.map +1 -0
  378. package/dist/parser/import-resolver/cache.d.ts +56 -0
  379. package/dist/parser/import-resolver/cache.d.ts.map +1 -0
  380. package/dist/parser/import-resolver/cache.js +191 -0
  381. package/dist/parser/import-resolver/cache.js.map +1 -0
  382. package/dist/parser/import-resolver/index.d.ts +10 -0
  383. package/dist/parser/import-resolver/index.d.ts.map +1 -0
  384. package/dist/parser/import-resolver/index.js +9 -0
  385. package/dist/parser/import-resolver/index.js.map +1 -0
  386. package/dist/parser/import-resolver/resolver.d.ts +102 -0
  387. package/dist/parser/import-resolver/resolver.d.ts.map +1 -0
  388. package/dist/parser/import-resolver/resolver.js +669 -0
  389. package/dist/parser/import-resolver/resolver.js.map +1 -0
  390. package/dist/parser/import-resolver/types.d.ts +55 -0
  391. package/dist/parser/import-resolver/types.d.ts.map +1 -0
  392. package/dist/parser/import-resolver/types.js +5 -0
  393. package/dist/parser/import-resolver/types.js.map +1 -0
  394. package/dist/parser/index.d.ts +38 -0
  395. package/dist/parser/index.d.ts.map +1 -0
  396. package/dist/parser/index.js +61 -0
  397. package/dist/parser/index.js.map +1 -0
  398. package/dist/parser/namespace-utils.d.ts +61 -0
  399. package/dist/parser/namespace-utils.d.ts.map +1 -0
  400. package/dist/parser/namespace-utils.js +191 -0
  401. package/dist/parser/namespace-utils.js.map +1 -0
  402. package/dist/parser/processors/AbstractProcessor.d.ts +10 -0
  403. package/dist/parser/processors/AbstractProcessor.d.ts.map +1 -0
  404. package/dist/parser/processors/AbstractProcessor.js +11 -0
  405. package/dist/parser/processors/AbstractProcessor.js.map +1 -0
  406. package/dist/parser/processors/AttributeProcessor.d.ts +19 -0
  407. package/dist/parser/processors/AttributeProcessor.d.ts.map +1 -0
  408. package/dist/parser/processors/AttributeProcessor.js +154 -0
  409. package/dist/parser/processors/AttributeProcessor.js.map +1 -0
  410. package/dist/parser/processors/ControllerProcessor.d.ts +9 -0
  411. package/dist/parser/processors/ControllerProcessor.d.ts.map +1 -0
  412. package/dist/parser/processors/ControllerProcessor.js +74 -0
  413. package/dist/parser/processors/ControllerProcessor.js.map +1 -0
  414. package/dist/parser/processors/DeploymentProcessor.d.ts +19 -0
  415. package/dist/parser/processors/DeploymentProcessor.d.ts.map +1 -0
  416. package/dist/parser/processors/DeploymentProcessor.js +244 -0
  417. package/dist/parser/processors/DeploymentProcessor.js.map +1 -0
  418. package/dist/parser/processors/EventProcessor.d.ts +8 -0
  419. package/dist/parser/processors/EventProcessor.d.ts.map +1 -0
  420. package/dist/parser/processors/EventProcessor.js +28 -0
  421. package/dist/parser/processors/EventProcessor.js.map +1 -0
  422. package/dist/parser/processors/ExecutableProcessor.d.ts +21 -0
  423. package/dist/parser/processors/ExecutableProcessor.d.ts.map +1 -0
  424. package/dist/parser/processors/ExecutableProcessor.js +135 -0
  425. package/dist/parser/processors/ExecutableProcessor.js.map +1 -0
  426. package/dist/parser/processors/LifecycleProcessor.d.ts +9 -0
  427. package/dist/parser/processors/LifecycleProcessor.d.ts.map +1 -0
  428. package/dist/parser/processors/LifecycleProcessor.js +41 -0
  429. package/dist/parser/processors/LifecycleProcessor.js.map +1 -0
  430. package/dist/parser/processors/ModelProcessor.d.ts +67 -0
  431. package/dist/parser/processors/ModelProcessor.d.ts.map +1 -0
  432. package/dist/parser/processors/ModelProcessor.js +495 -0
  433. package/dist/parser/processors/ModelProcessor.js.map +1 -0
  434. package/dist/parser/processors/RelationshipProcessor.d.ts +10 -0
  435. package/dist/parser/processors/RelationshipProcessor.d.ts.map +1 -0
  436. package/dist/parser/processors/RelationshipProcessor.js +55 -0
  437. package/dist/parser/processors/RelationshipProcessor.js.map +1 -0
  438. package/dist/parser/processors/ServiceProcessor.d.ts +9 -0
  439. package/dist/parser/processors/ServiceProcessor.d.ts.map +1 -0
  440. package/dist/parser/processors/ServiceProcessor.js +59 -0
  441. package/dist/parser/processors/ServiceProcessor.js.map +1 -0
  442. package/dist/parser/processors/ViewProcessor.d.ts +7 -0
  443. package/dist/parser/processors/ViewProcessor.d.ts.map +1 -0
  444. package/dist/parser/processors/ViewProcessor.js +66 -0
  445. package/dist/parser/processors/ViewProcessor.js.map +1 -0
  446. package/dist/parser/types/ast.d.ts +518 -0
  447. package/dist/parser/types/ast.d.ts.map +1 -0
  448. package/dist/parser/types/ast.js +8 -0
  449. package/dist/parser/types/ast.js.map +1 -0
  450. package/dist/parser/types/views.d.ts +186 -0
  451. package/dist/parser/types/views.d.ts.map +1 -0
  452. package/dist/parser/types/views.js +8 -0
  453. package/dist/parser/types/views.js.map +1 -0
  454. package/dist/parser/unified-parser.d.ts +195 -0
  455. package/dist/parser/unified-parser.d.ts.map +1 -0
  456. package/dist/parser/unified-parser.js +1180 -0
  457. package/dist/parser/unified-parser.js.map +1 -0
  458. package/dist/parser/vitest.config.d.ts +3 -0
  459. package/dist/parser/vitest.config.d.ts.map +1 -0
  460. package/dist/parser/vitest.config.js +27 -0
  461. package/dist/parser/vitest.config.js.map +1 -0
  462. package/dist/realize/engines/code-generator.d.ts +86 -0
  463. package/dist/realize/engines/code-generator.d.ts.map +1 -0
  464. package/dist/realize/engines/code-generator.js +159 -0
  465. package/dist/realize/engines/code-generator.js.map +1 -0
  466. package/dist/realize/engines/engine-registry.d.ts +94 -0
  467. package/dist/realize/engines/engine-registry.d.ts.map +1 -0
  468. package/dist/realize/engines/engine-registry.js +163 -0
  469. package/dist/realize/engines/engine-registry.js.map +1 -0
  470. package/dist/realize/engines/index.d.ts +10 -0
  471. package/dist/realize/engines/index.d.ts.map +1 -0
  472. package/dist/realize/engines/index.js +12 -0
  473. package/dist/realize/engines/index.js.map +1 -0
  474. package/dist/realize/engines/typescript-engine.d.ts +74 -0
  475. package/dist/realize/engines/typescript-engine.d.ts.map +1 -0
  476. package/dist/realize/engines/typescript-engine.js +289 -0
  477. package/dist/realize/engines/typescript-engine.js.map +1 -0
  478. package/dist/realize/generators/index.d.ts +11 -0
  479. package/dist/realize/generators/index.d.ts.map +1 -0
  480. package/dist/realize/generators/index.js +11 -0
  481. package/dist/realize/generators/index.js.map +1 -0
  482. package/dist/realize/index.d.ts +48 -0
  483. package/dist/realize/index.d.ts.map +1 -0
  484. package/dist/realize/index.js +529 -0
  485. package/dist/realize/index.js.map +1 -0
  486. package/dist/realize/library/index.d.ts +12 -0
  487. package/dist/realize/library/index.d.ts.map +1 -0
  488. package/dist/realize/library/index.js +15 -0
  489. package/dist/realize/library/index.js.map +1 -0
  490. package/dist/realize/library/library.d.ts +132 -0
  491. package/dist/realize/library/library.d.ts.map +1 -0
  492. package/dist/realize/library/library.js +343 -0
  493. package/dist/realize/library/library.js.map +1 -0
  494. package/dist/realize/library/loader.d.ts +73 -0
  495. package/dist/realize/library/loader.d.ts.map +1 -0
  496. package/dist/realize/library/loader.js +159 -0
  497. package/dist/realize/library/loader.js.map +1 -0
  498. package/dist/realize/library/resolver.d.ts +104 -0
  499. package/dist/realize/library/resolver.d.ts.map +1 -0
  500. package/dist/realize/library/resolver.js +299 -0
  501. package/dist/realize/library/resolver.js.map +1 -0
  502. package/dist/realize/library/validator.d.ts +65 -0
  503. package/dist/realize/library/validator.d.ts.map +1 -0
  504. package/dist/realize/library/validator.js +203 -0
  505. package/dist/realize/library/validator.js.map +1 -0
  506. package/dist/realize/types/index.d.ts +5 -0
  507. package/dist/realize/types/index.d.ts.map +1 -0
  508. package/dist/realize/types/index.js +5 -0
  509. package/dist/realize/types/index.js.map +1 -0
  510. package/dist/realize/types/instance-factory.d.ts +7 -0
  511. package/dist/realize/types/instance-factory.d.ts.map +1 -0
  512. package/dist/realize/types/instance-factory.js +2 -0
  513. package/dist/realize/types/instance-factory.js.map +1 -0
  514. package/dist/realize/types/unified-mappings.d.ts +163 -0
  515. package/dist/realize/types/unified-mappings.d.ts.map +1 -0
  516. package/dist/realize/types/unified-mappings.js +110 -0
  517. package/dist/realize/types/unified-mappings.js.map +1 -0
  518. package/dist/realize/utils/ai-spec-loader.d.ts +77 -0
  519. package/dist/realize/utils/ai-spec-loader.d.ts.map +1 -0
  520. package/dist/realize/utils/ai-spec-loader.js +142 -0
  521. package/dist/realize/utils/ai-spec-loader.js.map +1 -0
  522. package/dist/realize/utils/index.d.ts +9 -0
  523. package/dist/realize/utils/index.d.ts.map +1 -0
  524. package/dist/realize/utils/index.js +9 -0
  525. package/dist/realize/utils/index.js.map +1 -0
  526. package/dist/realize/utils/manifest-loader.d.ts +107 -0
  527. package/dist/realize/utils/manifest-loader.d.ts.map +1 -0
  528. package/dist/realize/utils/manifest-loader.js +168 -0
  529. package/dist/realize/utils/manifest-loader.js.map +1 -0
  530. package/dist/realize/utils/mapping-migration.d.ts +53 -0
  531. package/dist/realize/utils/mapping-migration.d.ts.map +1 -0
  532. package/dist/realize/utils/mapping-migration.js +194 -0
  533. package/dist/realize/utils/mapping-migration.js.map +1 -0
  534. package/dist/registry/cache/cache-manager.d.ts +132 -0
  535. package/dist/registry/cache/cache-manager.d.ts.map +1 -0
  536. package/dist/registry/cache/cache-manager.js +218 -0
  537. package/dist/registry/cache/cache-manager.js.map +1 -0
  538. package/dist/registry/client/registry-client.d.ts +129 -0
  539. package/dist/registry/client/registry-client.d.ts.map +1 -0
  540. package/dist/registry/client/registry-client.js +317 -0
  541. package/dist/registry/client/registry-client.js.map +1 -0
  542. package/dist/registry/formatters/error-formatter.d.ts +100 -0
  543. package/dist/registry/formatters/error-formatter.d.ts.map +1 -0
  544. package/dist/registry/formatters/error-formatter.js +290 -0
  545. package/dist/registry/formatters/error-formatter.js.map +1 -0
  546. package/dist/registry/formatters/index.d.ts +8 -0
  547. package/dist/registry/formatters/index.d.ts.map +1 -0
  548. package/dist/registry/formatters/index.js +7 -0
  549. package/dist/registry/formatters/index.js.map +1 -0
  550. package/dist/registry/index.d.ts +19 -0
  551. package/dist/registry/index.d.ts.map +1 -0
  552. package/dist/registry/index.js +22 -0
  553. package/dist/registry/index.js.map +1 -0
  554. package/dist/registry/offline/offline-handler.d.ts +150 -0
  555. package/dist/registry/offline/offline-handler.d.ts.map +1 -0
  556. package/dist/registry/offline/offline-handler.js +290 -0
  557. package/dist/registry/offline/offline-handler.js.map +1 -0
  558. package/dist/registry/types/index.d.ts +13 -0
  559. package/dist/registry/types/index.d.ts.map +1 -0
  560. package/dist/registry/types/index.js +11 -0
  561. package/dist/registry/types/index.js.map +1 -0
  562. package/dist/registry/types/registry.d.ts +220 -0
  563. package/dist/registry/types/registry.d.ts.map +1 -0
  564. package/dist/registry/types/registry.js +55 -0
  565. package/dist/registry/types/registry.js.map +1 -0
  566. package/dist/registry/types/validation.d.ts +197 -0
  567. package/dist/registry/types/validation.d.ts.map +1 -0
  568. package/dist/registry/types/validation.js +140 -0
  569. package/dist/registry/types/validation.js.map +1 -0
  570. package/dist/registry/utils/manifest-adapter.d.ts +42 -0
  571. package/dist/registry/utils/manifest-adapter.d.ts.map +1 -0
  572. package/dist/registry/utils/manifest-adapter.js +182 -0
  573. package/dist/registry/utils/manifest-adapter.js.map +1 -0
  574. package/dist/registry/validators/index.d.ts +12 -0
  575. package/dist/registry/validators/index.d.ts.map +1 -0
  576. package/dist/registry/validators/index.js +9 -0
  577. package/dist/registry/validators/index.js.map +1 -0
  578. package/dist/registry/validators/installation-validator.d.ts +75 -0
  579. package/dist/registry/validators/installation-validator.d.ts.map +1 -0
  580. package/dist/registry/validators/installation-validator.js +142 -0
  581. package/dist/registry/validators/installation-validator.js.map +1 -0
  582. package/dist/registry/validators/manifest-validator.d.ts +82 -0
  583. package/dist/registry/validators/manifest-validator.d.ts.map +1 -0
  584. package/dist/registry/validators/manifest-validator.js +213 -0
  585. package/dist/registry/validators/manifest-validator.js.map +1 -0
  586. package/dist/registry/validators/validator.d.ts +113 -0
  587. package/dist/registry/validators/validator.d.ts.map +1 -0
  588. package/dist/registry/validators/validator.js +165 -0
  589. package/dist/registry/validators/validator.js.map +1 -0
  590. package/libs/instance-factories/CURVED-INTERFACE.md +278 -0
  591. package/libs/instance-factories/README.md +73 -0
  592. package/libs/instance-factories/applications/README.md +51 -0
  593. package/libs/instance-factories/applications/generic-app.yaml +52 -0
  594. package/libs/instance-factories/applications/react-app-runtime.yaml +139 -0
  595. package/libs/instance-factories/applications/react-app.yaml +186 -0
  596. package/libs/instance-factories/applications/templates/generic/backend-env-generator.ts +31 -0
  597. package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +84 -0
  598. package/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.ts +69 -0
  599. package/libs/instance-factories/applications/templates/generic/main-generator.ts +308 -0
  600. package/libs/instance-factories/applications/templates/react/_view-components-source.ts +555 -0
  601. package/libs/instance-factories/applications/templates/react/api-client-generator.ts +436 -0
  602. package/libs/instance-factories/applications/templates/react/api-types-generator.ts +153 -0
  603. package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +94 -0
  604. package/libs/instance-factories/applications/templates/react/env-example-generator.ts +24 -0
  605. package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +106 -0
  606. package/libs/instance-factories/applications/templates/react/gitignore-generator.ts +38 -0
  607. package/libs/instance-factories/applications/templates/react/index-css-generator.ts +14 -0
  608. package/libs/instance-factories/applications/templates/react/index-html-generator.ts +30 -0
  609. package/libs/instance-factories/applications/templates/react/main-tsx-generator.ts +34 -0
  610. package/libs/instance-factories/applications/templates/react/package-json-generator.ts +57 -0
  611. package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +179 -0
  612. package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +1347 -0
  613. package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +150 -0
  614. package/libs/instance-factories/applications/templates/react/runtime-app-tsx-generator.ts +90 -0
  615. package/libs/instance-factories/applications/templates/react/runtime-package-json-generator.ts +61 -0
  616. package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +704 -0
  617. package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +84 -0
  618. package/libs/instance-factories/applications/templates/react/tsconfig-generator.ts +35 -0
  619. package/libs/instance-factories/applications/templates/react/use-api-hooks-generator.ts +121 -0
  620. package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +150 -0
  621. package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +150 -0
  622. package/libs/instance-factories/applications/templates/react/view-form-generator.ts +362 -0
  623. package/libs/instance-factories/applications/templates/react/view-list-generator.ts +98 -0
  624. package/libs/instance-factories/applications/templates/react/view-router-generator.ts +89 -0
  625. package/libs/instance-factories/applications/templates/react/vite-config-generator.ts +49 -0
  626. package/libs/instance-factories/archived/fastify-prisma.yaml +104 -0
  627. package/libs/instance-factories/cli/README.md +43 -0
  628. package/libs/instance-factories/cli/commander-js.yaml +55 -0
  629. package/libs/instance-factories/cli/templates/commander/cli-bin-wrapper-generator.ts +20 -0
  630. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts +12 -0
  631. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts.map +1 -0
  632. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +115 -0
  633. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js.map +1 -0
  634. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +168 -0
  635. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +14 -0
  636. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts.map +1 -0
  637. package/libs/instance-factories/cli/templates/commander/command-generator.js +182 -0
  638. package/libs/instance-factories/cli/templates/commander/command-generator.js.map +1 -0
  639. package/libs/instance-factories/cli/templates/commander/command-generator.ts +1036 -0
  640. package/libs/instance-factories/communication/README.md +47 -0
  641. package/libs/instance-factories/communication/event-emitter.yaml +56 -0
  642. package/libs/instance-factories/communication/rabbitmq-events.yaml +87 -0
  643. package/libs/instance-factories/communication/templates/eventemitter/bus-generator.ts +93 -0
  644. package/libs/instance-factories/communication/templates/eventemitter/publisher-generator.ts +117 -0
  645. package/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.ts +101 -0
  646. package/libs/instance-factories/controllers/README.md +42 -0
  647. package/libs/instance-factories/controllers/fastify.yaml +127 -0
  648. package/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.ts +103 -0
  649. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +389 -0
  650. package/libs/instance-factories/controllers/templates/fastify/server-generator.ts +76 -0
  651. package/libs/instance-factories/infrastructure/README.md +29 -0
  652. package/libs/instance-factories/infrastructure/docker-k8s.yaml +61 -0
  653. package/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.ts +46 -0
  654. package/libs/instance-factories/orms/README.md +54 -0
  655. package/libs/instance-factories/orms/prisma.yaml +89 -0
  656. package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +576 -0
  657. package/libs/instance-factories/orms/templates/prisma/services-generator.ts +408 -0
  658. package/libs/instance-factories/scaffolding/README.md +49 -0
  659. package/libs/instance-factories/scaffolding/generic-scaffold.yaml +65 -0
  660. package/libs/instance-factories/scaffolding/templates/generic/env-example-generator.ts +73 -0
  661. package/libs/instance-factories/scaffolding/templates/generic/env-generator.ts +85 -0
  662. package/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.ts +69 -0
  663. package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +176 -0
  664. package/libs/instance-factories/scaffolding/templates/generic/readme-generator.ts +207 -0
  665. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.ts +78 -0
  666. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.ts +41 -0
  667. package/libs/instance-factories/sdks/README.md +28 -0
  668. package/libs/instance-factories/sdks/python-sdk.yaml +66 -0
  669. package/libs/instance-factories/sdks/templates/python/sdk-generator.ts +50 -0
  670. package/libs/instance-factories/sdks/templates/typescript/sdk-generator.ts +49 -0
  671. package/libs/instance-factories/sdks/typescript-sdk.yaml +59 -0
  672. package/libs/instance-factories/services/README.md +55 -0
  673. package/libs/instance-factories/services/prisma-services.yaml +71 -0
  674. package/libs/instance-factories/services/templates/memory/generate-interpreter.ts +25 -0
  675. package/libs/instance-factories/services/templates/memory/step-conventions-memory.ts +465 -0
  676. package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +304 -0
  677. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +532 -0
  678. package/libs/instance-factories/services/templates/prisma/service-generator.ts +334 -0
  679. package/libs/instance-factories/services/templates/prisma/step-conventions.ts +309 -0
  680. package/libs/instance-factories/services/templates/shared-patterns.ts +38 -0
  681. package/libs/instance-factories/shared/path-resolver.ts +111 -0
  682. package/libs/instance-factories/storage/README.md +34 -0
  683. package/libs/instance-factories/storage/mongodb.yaml +79 -0
  684. package/libs/instance-factories/storage/postgresql.yaml +75 -0
  685. package/libs/instance-factories/storage/redis.yaml +79 -0
  686. package/libs/instance-factories/storage/templates/mongodb/config-generator.ts +15 -0
  687. package/libs/instance-factories/storage/templates/mongodb/docker-generator.ts +18 -0
  688. package/libs/instance-factories/storage/templates/postgresql/config-generator.ts +54 -0
  689. package/libs/instance-factories/storage/templates/postgresql/docker-generator.ts +55 -0
  690. package/libs/instance-factories/storage/templates/redis/config-generator.ts +16 -0
  691. package/libs/instance-factories/storage/templates/redis/docker-generator.ts +18 -0
  692. package/libs/instance-factories/test-generation.ts +192 -0
  693. package/libs/instance-factories/testing/README.md +40 -0
  694. package/libs/instance-factories/testing/templates/vitest/tests-generator.ts +51 -0
  695. package/libs/instance-factories/testing/vitest-tests.yaml +63 -0
  696. package/libs/instance-factories/tools/README.md +70 -0
  697. package/libs/instance-factories/tools/mcp.yaml +36 -0
  698. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +190 -0
  699. package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +630 -0
  700. package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +330 -0
  701. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +552 -0
  702. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +164 -0
  703. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +247 -0
  704. package/libs/instance-factories/tools/templates/mcp/static/package.json +94 -0
  705. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +284 -0
  706. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +139 -0
  707. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +74 -0
  708. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +156 -0
  709. package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +41 -0
  710. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +259 -0
  711. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +231 -0
  712. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +196 -0
  713. package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +293 -0
  714. package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +90 -0
  715. package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +24 -0
  716. package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +15 -0
  717. package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +106 -0
  718. package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +75 -0
  719. package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +239 -0
  720. package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +1501 -0
  721. package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +211 -0
  722. package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +308 -0
  723. package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +210 -0
  724. package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +356 -0
  725. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +522 -0
  726. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +530 -0
  727. package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +594 -0
  728. package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +170 -0
  729. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +544 -0
  730. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +189 -0
  731. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +89 -0
  732. package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +110 -0
  733. package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +28 -0
  734. package/libs/instance-factories/tools/templates/vscode/static/extension.ts +1195 -0
  735. package/libs/instance-factories/tools/templates/vscode/static/language-configuration.json +34 -0
  736. package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +4279 -0
  737. package/libs/instance-factories/tools/templates/vscode/static/syntaxes/specverse.tmLanguage.json +138 -0
  738. package/libs/instance-factories/tools/templates/vscode/static/themes/README.md +74 -0
  739. package/libs/instance-factories/tools/templates/vscode/static/themes/complete-specverse-colors.json +122 -0
  740. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-basic-theme.json +65 -0
  741. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-complete-theme.json +123 -0
  742. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-theme-colors.json +64 -0
  743. package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +300 -0
  744. package/libs/instance-factories/tools/vscode.yaml +35 -0
  745. package/libs/instance-factories/validation/README.md +38 -0
  746. package/libs/instance-factories/validation/templates/zod/validation-generator.ts +46 -0
  747. package/libs/instance-factories/validation/zod.yaml +56 -0
  748. package/libs/instance-factories/views/README.md +62 -0
  749. package/libs/instance-factories/views/index.d.ts +13 -0
  750. package/libs/instance-factories/views/index.d.ts.map +1 -0
  751. package/libs/instance-factories/views/index.js +18 -0
  752. package/libs/instance-factories/views/index.js.map +1 -0
  753. package/libs/instance-factories/views/index.ts +45 -0
  754. package/libs/instance-factories/views/react-components.yaml +129 -0
  755. package/libs/instance-factories/views/templates/ARCHITECTURE.md +198 -0
  756. package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +869 -0
  757. package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +953 -0
  758. package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +806 -0
  759. package/libs/instance-factories/views/templates/react/app-generator.ts +55 -0
  760. package/libs/instance-factories/views/templates/react/components-generator.ts +887 -0
  761. package/libs/instance-factories/views/templates/react/forms-generator.ts +343 -0
  762. package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +57 -0
  763. package/libs/instance-factories/views/templates/react/hooks-generator.ts +122 -0
  764. package/libs/instance-factories/views/templates/react/index-css-generator.ts +14 -0
  765. package/libs/instance-factories/views/templates/react/index-html-generator.ts +34 -0
  766. package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +29 -0
  767. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +152 -0
  768. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +1 -0
  769. package/libs/instance-factories/views/templates/react/react-component-generator.js +398 -0
  770. package/libs/instance-factories/views/templates/react/react-component-generator.js.map +1 -0
  771. package/libs/instance-factories/views/templates/react/react-component-generator.ts +533 -0
  772. package/libs/instance-factories/views/templates/react/router-generator.ts +197 -0
  773. package/libs/instance-factories/views/templates/react/router-generic-generator.ts +132 -0
  774. package/libs/instance-factories/views/templates/react/shared-utils-generator.ts +188 -0
  775. package/libs/instance-factories/views/templates/react/spec-json-generator.ts +17 -0
  776. package/libs/instance-factories/views/templates/react/types-generator.ts +76 -0
  777. package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +42 -0
  778. package/libs/instance-factories/views/templates/react/vite-config-generator.ts +38 -0
  779. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +1 -0
  780. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +1 -0
  781. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +474 -0
  782. package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +242 -0
  783. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +77 -0
  784. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +1 -0
  785. package/libs/instance-factories/views/templates/shared/adapter-types.js +47 -0
  786. package/libs/instance-factories/views/templates/shared/adapter-types.js.map +1 -0
  787. package/libs/instance-factories/views/templates/shared/adapter-types.ts +142 -0
  788. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +63 -0
  789. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +1 -0
  790. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +822 -0
  791. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +1 -0
  792. package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +908 -0
  793. package/libs/instance-factories/views/templates/shared/base-generator.d.ts +247 -0
  794. package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +1 -0
  795. package/libs/instance-factories/views/templates/shared/base-generator.js +363 -0
  796. package/libs/instance-factories/views/templates/shared/base-generator.js.map +1 -0
  797. package/libs/instance-factories/views/templates/shared/base-generator.ts +608 -0
  798. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +254 -0
  799. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +1 -0
  800. package/libs/instance-factories/views/templates/shared/component-metadata.js +602 -0
  801. package/libs/instance-factories/views/templates/shared/component-metadata.js.map +1 -0
  802. package/libs/instance-factories/views/templates/shared/component-metadata.ts +803 -0
  803. package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +250 -0
  804. package/libs/instance-factories/views/templates/shared/composite-patterns.ts +535 -0
  805. package/libs/instance-factories/views/templates/shared/index.ts +68 -0
  806. package/libs/instance-factories/views/templates/shared/pattern-validator.ts +279 -0
  807. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +149 -0
  808. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +1 -0
  809. package/libs/instance-factories/views/templates/shared/property-mapper.js +580 -0
  810. package/libs/instance-factories/views/templates/shared/property-mapper.js.map +1 -0
  811. package/libs/instance-factories/views/templates/shared/property-mapper.ts +700 -0
  812. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +143 -0
  813. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +1 -0
  814. package/libs/instance-factories/views/templates/shared/syntax-mapper.js +420 -0
  815. package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +1 -0
  816. package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +539 -0
  817. package/package.json +63 -0
@@ -0,0 +1,1180 @@
1
+ /**
2
+ * Unified SpecVerse Parser
3
+ *
4
+ * Combines functionality of SpecVerseParser and EnhancedSpecVerseParser
5
+ * into a single configurable parser with optional import resolution
6
+ */
7
+ import * as yaml from 'js-yaml';
8
+ import * as path from 'path';
9
+ import * as fs from 'fs/promises';
10
+ import AjvModule from 'ajv/dist/2020.js';
11
+ import addFormatsModule from 'ajv-formats';
12
+ const Ajv = AjvModule.default || AjvModule;
13
+ const addFormats = addFormatsModule.default || addFormatsModule;
14
+ import { ConventionProcessor } from './convention-processor.js';
15
+ import { ImportResolver } from './import-resolver/index.js';
16
+ export class UnifiedSpecVerseParser {
17
+ conventionProcessor;
18
+ schemaValidator;
19
+ schema;
20
+ options;
21
+ importResolver;
22
+ warnings = [];
23
+ constructor(schema, options = {}) {
24
+ this.options = options;
25
+ this.conventionProcessor = new ConventionProcessor();
26
+ // Create AJV instance - v8 uses 2020-12 draft by default
27
+ this.schemaValidator = new Ajv({
28
+ allErrors: true,
29
+ strict: false,
30
+ removeAdditional: false, // Don't remove additional properties, fail validation instead
31
+ useDefaults: false, // Don't apply default values
32
+ coerceTypes: false, // Don't coerce types
33
+ validateFormats: true, // Ensure format validation is enabled
34
+ formats: {} // Initialize empty formats object
35
+ });
36
+ // Add commonly used formats manually to avoid ajv-formats compatibility issues
37
+ this.schemaValidator.addFormat('email', /^[^\s@]+@[^\s@]+\.[^\s@]+$/);
38
+ this.schemaValidator.addFormat('uri', /^https?:\/\/[^\s]+$/);
39
+ this.schemaValidator.addFormat('uuid', /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
40
+ this.schemaValidator.addFormat('date', /^\d{4}-\d{2}-\d{2}$/);
41
+ this.schemaValidator.addFormat('date-time', /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/);
42
+ // Try to add full ajv-formats if possible, but continue if it fails
43
+ try {
44
+ addFormats(this.schemaValidator);
45
+ }
46
+ catch (error) {
47
+ // ajv-formats has compatibility issues in mixed CommonJS/ES module environments
48
+ // We've already added the most common formats manually above
49
+ console.debug('Note: Using manual format validators due to ajv-formats compatibility issue');
50
+ }
51
+ // Remove $schema property to avoid meta-schema issues
52
+ // AJV v8 uses Draft 2020-12 by default, so we don't need the $schema property
53
+ // Ensure $id is preserved when processing the schema for validation
54
+ const { $schema, ...schemaForValidation } = schema;
55
+ if (schema.$id) {
56
+ Object.assign(schemaForValidation, { $id: schema.$id });
57
+ }
58
+ this.schema = schemaForValidation;
59
+ // Initialize import resolver if imports are enabled (default: enabled)
60
+ if (options.enableImports !== false) {
61
+ this.importResolver = options.importResolver || new ImportResolver({
62
+ basePath: options.basePath || process.cwd(),
63
+ cacheDir: options.cacheDir,
64
+ offline: options.offline || false,
65
+ debug: options.debug || false
66
+ });
67
+ }
68
+ }
69
+ /**
70
+ * Parse content from a string with optional filename for context
71
+ */
72
+ parseContent(content, filename) {
73
+ if (this.options.debug) {
74
+ console.log('[DEBUG] parseContent method called with debug:', this.options.debug);
75
+ }
76
+ try {
77
+ this.warnings = [];
78
+ // 1. Handle imports if enabled
79
+ let processedContent = content;
80
+ let resolvedImports;
81
+ if (this.importResolver && this.options.enableImports !== false) {
82
+ const importResult = this.resolveAndMergeImports(content, filename);
83
+ processedContent = importResult.content;
84
+ resolvedImports = importResult.resolvedImports;
85
+ }
86
+ // 2. Parse YAML
87
+ const yamlData = yaml.load(processedContent);
88
+ if (this.options.debug) {
89
+ console.log('[UnifiedParser] Parsed YAML data:', JSON.stringify(yamlData, null, 2));
90
+ }
91
+ // 3. PRE-PROCESSING SCHEMA VALIDATION - validate original YAML structure
92
+ if (this.options.debug) {
93
+ console.log('[UnifiedParser] Starting pre-processing validation...');
94
+ try {
95
+ console.log('[UnifiedParser] About to run pre-processing validation on:', JSON.stringify(yamlData, null, 2));
96
+ }
97
+ catch (e) {
98
+ console.log('[UnifiedParser] Error in debug logging:', e.message);
99
+ }
100
+ }
101
+ let preSchemaErrors = [];
102
+ try {
103
+ preSchemaErrors = this.validateWithSchema(yamlData);
104
+ if (this.options.debug) {
105
+ console.log('[UnifiedParser] Pre-processing schema errors:', preSchemaErrors.length);
106
+ if (preSchemaErrors.length > 0) {
107
+ console.log('[UnifiedParser] Pre-processing errors details:', preSchemaErrors);
108
+ }
109
+ }
110
+ }
111
+ catch (e) {
112
+ if (this.options.debug) {
113
+ console.log('[UnifiedParser] Exception in pre-processing validation:', e.message);
114
+ }
115
+ preSchemaErrors = [`Pre-processing validation error: ${e.message}`];
116
+ }
117
+ if (preSchemaErrors.length > 0) {
118
+ // Return early if original structure is invalid
119
+ return {
120
+ errors: preSchemaErrors,
121
+ warnings: [...this.warnings]
122
+ };
123
+ }
124
+ // 4. Process conventions (only if pre-validation passed)
125
+ const ast = this.conventionProcessor.process(yamlData);
126
+ // 5. Collect warnings from convention processor
127
+ this.warnings.push(...this.conventionProcessor.getWarnings());
128
+ // 6. Convert AST back to expanded YAML for post-processing validation
129
+ const processedYamlString = this.astToExpandedYaml(ast);
130
+ const processedYaml = yaml.load(processedYamlString);
131
+ if (this.options.debug) {
132
+ console.log('[UnifiedParser] Processed YAML string:', processedYamlString);
133
+ console.log('[UnifiedParser] Processed YAML after convention processing:', JSON.stringify(processedYaml, null, 2));
134
+ }
135
+ // 7. POST-PROCESSING SCHEMA VALIDATION - validate expanded conventions
136
+ if (this.options.debug) {
137
+ console.log('[UnifiedParser] About to run post-processing validation on:', JSON.stringify(processedYaml, null, 2));
138
+ }
139
+ const postSchemaErrors = this.validateWithSchema(processedYaml);
140
+ if (this.options.debug) {
141
+ console.log('[UnifiedParser] Post-processing schema errors:', postSchemaErrors.length);
142
+ if (postSchemaErrors.length > 0) {
143
+ console.log('[UnifiedParser] Post-processing errors details:', postSchemaErrors);
144
+ }
145
+ }
146
+ // 8. Semantic validation (if post-processing schema validation passes)
147
+ let semanticErrors = [];
148
+ if (postSchemaErrors.length === 0) {
149
+ semanticErrors = this.validateSemantics(ast);
150
+ }
151
+ // 9. Return unified result
152
+ return {
153
+ ast,
154
+ errors: [...postSchemaErrors, ...semanticErrors],
155
+ warnings: [...this.warnings],
156
+ resolvedImports
157
+ };
158
+ }
159
+ catch (error) {
160
+ return {
161
+ errors: [error.message],
162
+ warnings: [...this.warnings]
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Parse a file from the filesystem
168
+ */
169
+ parseFromFile(filePath) {
170
+ try {
171
+ const fs = require('fs');
172
+ const content = fs.readFileSync(filePath, 'utf8');
173
+ return this.parseContent(content, filePath);
174
+ }
175
+ catch (error) {
176
+ return {
177
+ errors: [`File reading error: ${error.message}`],
178
+ warnings: []
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Parse YAML content directly (for compatibility)
184
+ */
185
+ parse(yamlContent, format) {
186
+ return this.parseContent(yamlContent);
187
+ }
188
+ /**
189
+ * Parse .specly file specifically (for compatibility)
190
+ */
191
+ parseSpeclyFile(content) {
192
+ return this.parse(content, 'specly');
193
+ }
194
+ /**
195
+ * Parse .yaml file specifically (for compatibility)
196
+ */
197
+ parseYamlFile(content) {
198
+ return this.parse(content, 'yaml');
199
+ }
200
+ /**
201
+ * Process .specly content to expanded YAML format (for compatibility)
202
+ */
203
+ processToYaml(speclyContent) {
204
+ const parseResult = this.parseSpeclyFile(speclyContent);
205
+ if (parseResult.errors.length > 0) {
206
+ return { yaml: '', errors: parseResult.errors };
207
+ }
208
+ if (!parseResult.ast) {
209
+ return { yaml: '', errors: ['No AST generated'] };
210
+ }
211
+ // Convert AST back to expanded YAML format
212
+ const expandedYaml = this.astToExpandedYaml(parseResult.ast);
213
+ return { yaml: expandedYaml, errors: [] };
214
+ }
215
+ /**
216
+ * Parse a file with import resolution (async version)
217
+ */
218
+ async parseFileWithImports(filePath, options) {
219
+ // Merge options
220
+ const resolveOptions = { ...this.options, ...options };
221
+ // Read and parse the main file
222
+ const fileContent = await this.readFile(filePath);
223
+ const basePath = path.dirname(path.resolve(filePath));
224
+ // Parse without import resolution first
225
+ const parseResult = this.parseContent(fileContent, filePath);
226
+ if (!parseResult.ast || !this.importResolver || resolveOptions.enableImports === false) {
227
+ return parseResult;
228
+ }
229
+ // Resolve imports for each component
230
+ const enhancedResult = {
231
+ ...parseResult,
232
+ resolvedImports: new Map()
233
+ };
234
+ for (const component of parseResult.ast.components) {
235
+ if (component.imports && component.imports.length > 0) {
236
+ const componentImports = await this.resolveComponentImports(component, basePath);
237
+ enhancedResult.resolvedImports.set(component.name, componentImports);
238
+ // Merge imported types into the component
239
+ if (componentImports.length > 0) {
240
+ this.mergeImportedTypes(component, componentImports);
241
+ }
242
+ }
243
+ }
244
+ // Re-validate with resolved imports
245
+ const validationErrors = this.validateWithResolvedImports(parseResult.ast, enhancedResult.resolvedImports);
246
+ if (validationErrors.length > 0) {
247
+ enhancedResult.errors.push(...validationErrors);
248
+ }
249
+ return enhancedResult;
250
+ }
251
+ /**
252
+ * Resolve imports for a component
253
+ */
254
+ async resolveComponentImports(component, basePath) {
255
+ if (!this.importResolver) {
256
+ return [];
257
+ }
258
+ const resolvedImports = [];
259
+ for (const importSpec of component.imports || []) {
260
+ try {
261
+ if (this.options.debug) {
262
+ console.log(`[UnifiedParser] Resolving import for ${component.name}:`, importSpec);
263
+ }
264
+ // Resolve the import
265
+ const resolved = await this.importResolver.resolve(importSpec, basePath);
266
+ // Parse the imported content
267
+ const importedAst = await this.parseImportedContent(resolved.content, resolved.contentType, resolved.path || resolved.url || 'imported');
268
+ // Extract selected types
269
+ const { selectedTypes, foundOriginalTypes } = this.extractSelectedTypes(importedAst, importSpec.select || [], importSpec.as || {});
270
+ resolvedImports.push({
271
+ importSpec: importSpec,
272
+ resolved,
273
+ selectedTypes,
274
+ foundOriginalTypes
275
+ });
276
+ if (this.options.debug) {
277
+ console.log(`[UnifiedParser] Resolved ${selectedTypes.size} types from import`);
278
+ }
279
+ }
280
+ catch (error) {
281
+ console.error(`[UnifiedParser] Failed to resolve import:`, error.message);
282
+ // Continue with other imports even if one fails
283
+ }
284
+ }
285
+ return resolvedImports;
286
+ }
287
+ /**
288
+ * Parse imported content
289
+ */
290
+ async parseImportedContent(content, contentType, source) {
291
+ let parsed;
292
+ if (contentType === 'json') {
293
+ parsed = JSON.parse(content);
294
+ }
295
+ else {
296
+ parsed = yaml.load(content);
297
+ }
298
+ if (this.options.debug) {
299
+ console.log(`[UnifiedParser] parseImportedContent - source: ${source}`);
300
+ console.log(`[UnifiedParser] parseImportedContent - parsed keys:`, Object.keys(parsed));
301
+ console.log(`[UnifiedParser] parseImportedContent - has exports:`, !!parsed.exports);
302
+ }
303
+ // Handle different import formats
304
+ if (parsed.components) {
305
+ // Full SpecVerse specification
306
+ const result = this.parse(content);
307
+ if (result.ast) {
308
+ return result.ast;
309
+ }
310
+ // If parsing failed, log the errors for debugging
311
+ if (this.options.debug && result.errors.length > 0) {
312
+ console.log(`[UnifiedParser] Failed to parse imported content: ${result.errors.join(', ')}`);
313
+ }
314
+ }
315
+ else if (parsed.exports) {
316
+ // Library catalog format
317
+ return await this.createAstFromLibraryCatalog(parsed, source);
318
+ }
319
+ else if (parsed.types) {
320
+ // Type definitions file
321
+ return this.createAstFromTypes(parsed.types);
322
+ }
323
+ else if (parsed.models || parsed.controllers || parsed.services || parsed.events || parsed.views) {
324
+ // Partial component specification
325
+ return this.createAstFromPartial(parsed);
326
+ }
327
+ // Fallback - treat as raw type definitions
328
+ return this.createAstFromTypes(parsed);
329
+ }
330
+ /**
331
+ * Create AST from type definitions
332
+ */
333
+ createAstFromTypes(types) {
334
+ const component = {
335
+ name: 'imported-types',
336
+ namespace: 'imported',
337
+ version: '1.0.0',
338
+ description: 'Imported type definitions',
339
+ primitives: [],
340
+ models: [],
341
+ controllers: [],
342
+ services: [],
343
+ views: [],
344
+ events: [],
345
+ imports: [],
346
+ exports: {}
347
+ };
348
+ // Convert type definitions to models
349
+ for (const [typeName, typeDef] of Object.entries(types)) {
350
+ if (typeof typeDef === 'object' && typeDef !== null) {
351
+ component.models.push({
352
+ name: typeName,
353
+ description: typeDef.description || `Imported type ${typeName}`,
354
+ attributes: typeDef.attributes || {},
355
+ relationships: typeDef.relationships || {},
356
+ lifecycles: typeDef.lifecycles || {},
357
+ behaviors: typeDef.behaviors || {}
358
+ });
359
+ }
360
+ }
361
+ return {
362
+ components: [component],
363
+ deployments: [],
364
+ manifests: []
365
+ };
366
+ }
367
+ /**
368
+ * Create AST from partial component specification
369
+ */
370
+ createAstFromPartial(partial) {
371
+ const component = {
372
+ name: 'imported-component',
373
+ namespace: 'imported',
374
+ version: '1.0.0',
375
+ description: 'Imported component',
376
+ primitives: partial.primitives || [],
377
+ models: [],
378
+ controllers: partial.controllers || [],
379
+ services: partial.services || [],
380
+ views: partial.views || [],
381
+ events: partial.events || [],
382
+ imports: [],
383
+ exports: {}
384
+ };
385
+ // Convert models object to array format
386
+ if (partial.models && typeof partial.models === 'object') {
387
+ for (const [modelName, modelDef] of Object.entries(partial.models)) {
388
+ if (typeof modelDef === 'object' && modelDef !== null) {
389
+ component.models.push({
390
+ name: modelName,
391
+ description: modelDef.description || `Model ${modelName}`,
392
+ attributes: modelDef.attributes || {},
393
+ relationships: modelDef.relationships || {},
394
+ lifecycles: modelDef.lifecycles || {},
395
+ behaviors: modelDef.behaviors || {}
396
+ });
397
+ }
398
+ }
399
+ }
400
+ return {
401
+ components: [component],
402
+ deployments: [],
403
+ manifests: []
404
+ };
405
+ }
406
+ /**
407
+ * Create AST from library catalog format
408
+ */
409
+ async createAstFromLibraryCatalog(catalog, basePath) {
410
+ if (this.options.debug) {
411
+ console.log(`[UnifiedParser] Creating AST from library catalog, basePath: ${basePath}`);
412
+ }
413
+ const component = {
414
+ name: catalog.domain?.name || 'library-catalog',
415
+ namespace: 'library',
416
+ version: catalog.domain?.version || '1.0.0',
417
+ description: catalog.domain?.description || 'Library catalog',
418
+ primitives: [],
419
+ models: [],
420
+ controllers: [],
421
+ services: [],
422
+ views: [],
423
+ events: [],
424
+ imports: [],
425
+ exports: {}
426
+ };
427
+ // Process exports from catalog
428
+ if (catalog.exports) {
429
+ for (const [category, categoryExports] of Object.entries(catalog.exports)) {
430
+ if (typeof categoryExports === 'object' && categoryExports !== null) {
431
+ for (const [exportName, exportInfo] of Object.entries(categoryExports)) {
432
+ if (exportInfo && typeof exportInfo === 'object' && exportInfo.source && exportInfo.types) {
433
+ try {
434
+ // Resolve relative path from catalog location
435
+ const catalogDir = basePath.endsWith('.yaml') || basePath.endsWith('.yml')
436
+ ? path.dirname(basePath)
437
+ : basePath;
438
+ const sourcePath = path.resolve(catalogDir, exportInfo.source);
439
+ if (this.options.debug) {
440
+ console.log(`[UnifiedParser] Loading catalog source: ${sourcePath}`);
441
+ }
442
+ // Load the referenced source file
443
+ const sourceContent = await fs.readFile(sourcePath, 'utf8');
444
+ const sourceContentType = this.detectContentType(sourcePath, sourceContent);
445
+ // Parse the source content
446
+ const sourceAst = await this.parseImportedContent(sourceContent, sourceContentType, sourcePath);
447
+ // Extract types from the source
448
+ for (const sourceComponent of sourceAst.components) {
449
+ // Add models from source
450
+ for (const model of sourceComponent.models) {
451
+ if (exportInfo.types.includes(model.name)) {
452
+ component.models.push(model);
453
+ }
454
+ }
455
+ // Add other types as needed
456
+ for (const primitive of sourceComponent.primitives || []) {
457
+ if (exportInfo.types.includes(primitive.name)) {
458
+ component.primitives.push(primitive);
459
+ }
460
+ }
461
+ for (const controller of sourceComponent.controllers || []) {
462
+ if (exportInfo.types.includes(controller.name)) {
463
+ component.controllers.push(controller);
464
+ }
465
+ }
466
+ for (const service of sourceComponent.services || []) {
467
+ if (exportInfo.types.includes(service.name)) {
468
+ component.services.push(service);
469
+ }
470
+ }
471
+ for (const view of sourceComponent.views || []) {
472
+ if (exportInfo.types.includes(view.name)) {
473
+ component.views.push(view);
474
+ }
475
+ }
476
+ for (const event of sourceComponent.events || []) {
477
+ if (exportInfo.types.includes(event.name)) {
478
+ component.events.push(event);
479
+ }
480
+ }
481
+ }
482
+ }
483
+ catch (error) {
484
+ if (this.options.debug) {
485
+ console.log(`[UnifiedParser] Failed to load catalog source ${exportInfo.source}: ${error.message}`);
486
+ }
487
+ // Continue with other exports even if one fails
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+ }
494
+ return {
495
+ components: [component],
496
+ deployments: [],
497
+ manifests: []
498
+ };
499
+ }
500
+ /**
501
+ * Detect content type from path or content
502
+ */
503
+ detectContentType(pathOrUrl, content) {
504
+ // Check file extension
505
+ if (pathOrUrl.endsWith('.json'))
506
+ return 'json';
507
+ if (pathOrUrl.endsWith('.yaml') || pathOrUrl.endsWith('.yml') || pathOrUrl.endsWith('.specly'))
508
+ return 'yaml';
509
+ // Try to detect from content
510
+ const trimmed = content.trim();
511
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
512
+ try {
513
+ JSON.parse(trimmed);
514
+ return 'json';
515
+ }
516
+ catch {
517
+ // Not valid JSON
518
+ }
519
+ }
520
+ // Default to YAML
521
+ return 'yaml';
522
+ }
523
+ /**
524
+ * Extract selected types from imported AST
525
+ */
526
+ extractSelectedTypes(importedAst, select, aliases) {
527
+ const selectedTypes = new Map();
528
+ const foundOriginalTypes = new Set();
529
+ if (this.options.debug) {
530
+ console.log(`[UnifiedParser] Extracting types from imported AST with ${importedAst.components.length} components`);
531
+ for (const comp of importedAst.components) {
532
+ console.log(`[UnifiedParser] Component ${comp.name} has primitives: ${comp.primitives?.map(p => p.name) || []}`);
533
+ console.log(`[UnifiedParser] Component ${comp.name} has models: ${comp.models.map(m => m.name)}`);
534
+ console.log(`[UnifiedParser] Component ${comp.name} has events: ${comp.events?.map(e => e.name) || []}`);
535
+ console.log(`[UnifiedParser] Component ${comp.name} has controllers: ${comp.controllers?.map(c => c.name) || []}`);
536
+ }
537
+ }
538
+ // If no select list, import everything
539
+ if (select.length === 0) {
540
+ for (const component of importedAst.components) {
541
+ // Add all primitives
542
+ for (const primitive of component.primitives || []) {
543
+ const name = aliases[primitive.name] || primitive.name;
544
+ selectedTypes.set(name, { type: 'primitive', definition: primitive });
545
+ foundOriginalTypes.add(primitive.name);
546
+ }
547
+ // Add all models
548
+ for (const model of component.models) {
549
+ const name = aliases[model.name] || model.name;
550
+ selectedTypes.set(name, { type: 'model', definition: model });
551
+ foundOriginalTypes.add(model.name);
552
+ }
553
+ // Add all events
554
+ for (const event of component.events || []) {
555
+ const name = aliases[event.name] || event.name;
556
+ selectedTypes.set(name, { type: 'event', definition: event });
557
+ foundOriginalTypes.add(event.name);
558
+ }
559
+ }
560
+ return { selectedTypes, foundOriginalTypes };
561
+ }
562
+ // Extract only selected types
563
+ for (const typeName of select) {
564
+ if (this.options.debug) {
565
+ console.log(`[UnifiedParser] Looking for type: ${typeName}`);
566
+ }
567
+ let found = false;
568
+ for (const component of importedAst.components) {
569
+ // Check primitives first
570
+ const primitive = (component.primitives || []).find((p) => p.name === typeName);
571
+ if (primitive) {
572
+ const name = aliases[typeName] || typeName;
573
+ selectedTypes.set(name, { type: 'primitive', definition: primitive });
574
+ foundOriginalTypes.add(typeName);
575
+ found = true;
576
+ if (this.options.debug) {
577
+ console.log(`[UnifiedParser] Found primitive: ${typeName} as ${name}`);
578
+ }
579
+ break;
580
+ }
581
+ // Check models
582
+ const model = component.models.find(m => m.name === typeName);
583
+ if (model) {
584
+ const name = aliases[typeName] || typeName;
585
+ selectedTypes.set(name, { type: 'model', definition: model });
586
+ foundOriginalTypes.add(typeName);
587
+ found = true;
588
+ if (this.options.debug) {
589
+ console.log(`[UnifiedParser] Found model: ${typeName} as ${name}`);
590
+ }
591
+ break;
592
+ }
593
+ // Check events
594
+ const event = (component.events || []).find(e => e.name === typeName);
595
+ if (event) {
596
+ const name = aliases[typeName] || typeName;
597
+ selectedTypes.set(name, { type: 'event', definition: event });
598
+ foundOriginalTypes.add(typeName);
599
+ found = true;
600
+ if (this.options.debug) {
601
+ console.log(`[UnifiedParser] Found event: ${typeName} as ${name}`);
602
+ }
603
+ break;
604
+ }
605
+ // Check controllers
606
+ const controller = (component.controllers || []).find(c => c.name === typeName);
607
+ if (controller) {
608
+ const name = aliases[typeName] || typeName;
609
+ selectedTypes.set(name, { type: 'controller', definition: controller });
610
+ foundOriginalTypes.add(typeName);
611
+ found = true;
612
+ if (this.options.debug) {
613
+ console.log(`[UnifiedParser] Found controller: ${typeName} as ${name}`);
614
+ }
615
+ break;
616
+ }
617
+ // Check services
618
+ const service = (component.services || []).find(s => s.name === typeName);
619
+ if (service) {
620
+ const name = aliases[typeName] || typeName;
621
+ selectedTypes.set(name, { type: 'service', definition: service });
622
+ foundOriginalTypes.add(typeName);
623
+ found = true;
624
+ if (this.options.debug) {
625
+ console.log(`[UnifiedParser] Found service: ${typeName} as ${name}`);
626
+ }
627
+ break;
628
+ }
629
+ // Check views
630
+ const view = (component.views || []).find(v => v.name === typeName);
631
+ if (view) {
632
+ const name = aliases[typeName] || typeName;
633
+ selectedTypes.set(name, { type: 'view', definition: view });
634
+ foundOriginalTypes.add(typeName);
635
+ found = true;
636
+ if (this.options.debug) {
637
+ console.log(`[UnifiedParser] Found view: ${typeName} as ${name}`);
638
+ }
639
+ break;
640
+ }
641
+ }
642
+ if (!found && this.options.debug) {
643
+ console.log(`[UnifiedParser] Type not found: ${typeName}`);
644
+ }
645
+ }
646
+ return { selectedTypes, foundOriginalTypes };
647
+ }
648
+ /**
649
+ * Merge imported types into component
650
+ */
651
+ mergeImportedTypes(component, imports) {
652
+ // Create a set of imported type names for tracking
653
+ const importedTypeNames = new Set();
654
+ for (const importInfo of imports) {
655
+ if (!importInfo.selectedTypes)
656
+ continue;
657
+ for (const [name, typeInfo] of importInfo.selectedTypes) {
658
+ importedTypeNames.add(name);
659
+ // Store import metadata on the component
660
+ if (!component.importedTypes) {
661
+ component.importedTypes = new Map();
662
+ }
663
+ component.importedTypes.set(name, {
664
+ source: importInfo.resolved.url || importInfo.resolved.path || importInfo.resolved.packageName || 'unknown',
665
+ type: typeInfo.type,
666
+ definition: typeInfo.definition
667
+ });
668
+ }
669
+ }
670
+ // Update component metadata
671
+ if (!component.metadata) {
672
+ component.metadata = {};
673
+ }
674
+ component.metadata.importedTypes = Array.from(importedTypeNames);
675
+ }
676
+ /**
677
+ * Validate with resolved imports
678
+ */
679
+ validateWithResolvedImports(ast, resolvedImports) {
680
+ const errors = [];
681
+ for (const component of ast.components) {
682
+ const componentImports = resolvedImports.get(component.name) || [];
683
+ // Check that all selected types were found
684
+ for (const importInfo of componentImports) {
685
+ const requestedTypes = importInfo.importSpec.select || [];
686
+ const foundTypes = importInfo.foundOriginalTypes || new Set();
687
+ for (const requested of requestedTypes) {
688
+ if (!foundTypes.has(requested)) {
689
+ errors.push(`Component ${component.name}: Type '${requested}' not found in import from '${importInfo.importSpec.from || importInfo.importSpec.file || importInfo.importSpec.package}'`);
690
+ }
691
+ }
692
+ }
693
+ // Validate import conflicts (prevent duplicate type definitions)
694
+ errors.push(...this.validateImportConflicts(component, componentImports));
695
+ }
696
+ return errors;
697
+ }
698
+ /**
699
+ * Validate import conflicts (prevent duplicate type definitions)
700
+ * Checks if types imported from external files are redefined locally
701
+ */
702
+ validateImportConflicts(component, componentImports) {
703
+ const errors = [];
704
+ // Collect all imported type names
705
+ const importedTypes = new Set();
706
+ const importSources = new Map(); // type name -> source file
707
+ for (const importInfo of componentImports) {
708
+ const importSpec = importInfo.importSpec;
709
+ const sourceFile = importSpec.from || importSpec.file || importSpec.package || 'unknown';
710
+ if (importSpec.select && Array.isArray(importSpec.select)) {
711
+ for (const typeName of importSpec.select) {
712
+ if (importedTypes.has(typeName)) {
713
+ errors.push(`Component ${component.name}: Duplicate import: Type '${typeName}' is imported from multiple sources (${importSources.get(typeName)} and ${sourceFile})`);
714
+ }
715
+ else {
716
+ importedTypes.add(typeName);
717
+ importSources.set(typeName, sourceFile);
718
+ }
719
+ }
720
+ }
721
+ }
722
+ // Check for conflicts between imported types and locally defined primitives
723
+ const localPrimitiveNames = new Set((component.primitives || []).map((p) => p.name));
724
+ for (const importedType of importedTypes) {
725
+ if (localPrimitiveNames.has(importedType)) {
726
+ errors.push(`Component ${component.name}: Import conflict: Type '${importedType}' is imported from ${importSources.get(importedType)} but also defined as a local primitive`);
727
+ }
728
+ }
729
+ // Check for conflicts between imported types and locally defined entities
730
+ // Derive entity type names from the component's own keys (covers any entity type, including extensions)
731
+ const entityTypes = Object.keys(component).filter(k => Array.isArray(component[k]) && component[k].length > 0 && component[k][0]?.name);
732
+ for (const entityType of entityTypes) {
733
+ const localNames = new Set((component[entityType] || []).map((item) => item.name));
734
+ for (const importedType of importedTypes) {
735
+ if (localNames.has(importedType)) {
736
+ const singular = entityType.endsWith('s') ? entityType.slice(0, -1) : entityType;
737
+ errors.push(`Component ${component.name}: Import conflict: Type '${importedType}' is imported from ${importSources.get(importedType)} but also defined as a local ${singular}`);
738
+ }
739
+ }
740
+ }
741
+ return errors;
742
+ }
743
+ /**
744
+ * Read file content
745
+ */
746
+ async readFile(filePath) {
747
+ const fs = await import('fs/promises');
748
+ return fs.readFile(filePath, 'utf8');
749
+ }
750
+ /**
751
+ * Resolve and merge imports (private method) - for sync parsing
752
+ */
753
+ resolveAndMergeImports(content, filename) {
754
+ // For synchronous parsing, we can't resolve imports
755
+ // This is a limitation - imports require async processing
756
+ if (this.options.debug) {
757
+ console.log('[UnifiedParser] Import resolution requires async parsing - use parseFileWithImports() instead');
758
+ }
759
+ return {
760
+ content,
761
+ resolvedImports: new Map()
762
+ };
763
+ }
764
+ /**
765
+ * Validate with JSON Schema
766
+ */
767
+ validateWithSchema(data) {
768
+ const errors = [];
769
+ try {
770
+ // Debug: check what schema we're compiling
771
+ if (this.options.debug) {
772
+ console.log('[UnifiedParser] Schema has $schema:', !!this.schema.$schema);
773
+ console.log('[UnifiedParser] Schema keys:', Object.keys(this.schema));
774
+ }
775
+ // Compile schema each time (matches original parser behavior)
776
+ const validate = this.schemaValidator.compile(this.schema);
777
+ const valid = validate(data);
778
+ if (!valid && validate.errors) {
779
+ if (this.options.debug) {
780
+ console.log('[UnifiedParser] Detailed AJV errors:', JSON.stringify(validate.errors, null, 2));
781
+ }
782
+ for (const error of validate.errors) {
783
+ let path = error.instancePath || 'root';
784
+ if (error.instancePath === '') {
785
+ path = 'root';
786
+ }
787
+ let message = error.message || 'Unknown error';
788
+ if (error.keyword === 'additionalProperties') {
789
+ message = `Unknown property '${error.params?.additionalProperty}'`;
790
+ }
791
+ errors.push(`${path}: ${message}`);
792
+ }
793
+ }
794
+ }
795
+ catch (validationError) {
796
+ errors.push(`Schema validation error: ${validationError.message}`);
797
+ }
798
+ return errors;
799
+ }
800
+ /**
801
+ * Convert AST to expanded YAML format for tools (copied from original parser)
802
+ */
803
+ astToExpandedYaml(ast) {
804
+ const result = {
805
+ components: {},
806
+ deployments: {},
807
+ manifests: {}
808
+ };
809
+ // Convert components - preserve all properties for validation
810
+ for (const component of ast.components) {
811
+ // Start with basic component structure
812
+ result.components[component.name] = {
813
+ version: component.version,
814
+ description: component.description,
815
+ ...(component.tags && component.tags.length > 0 && { tags: component.tags }),
816
+ ...(component.imports && component.imports.length > 0 && { import: component.imports }),
817
+ ...(component.exports && Object.keys(component.exports).length > 0 && { export: component.exports })
818
+ };
819
+ // Add any additional properties (unknown ones) that were preserved
820
+ const knownProps = new Set(['name', 'namespace', 'version', 'description', 'tags', 'imports', 'exports', 'primitives', 'models', 'controllers', 'services', 'views', 'events', 'commands', 'constraints']);
821
+ Object.keys(component).forEach(key => {
822
+ if (!knownProps.has(key)) {
823
+ result.components[component.name][key] = component[key];
824
+ }
825
+ });
826
+ // Add primitives - convert PrimitiveSpec array back to PrimitivesSection object format
827
+ if (component.primitives && component.primitives.length > 0) {
828
+ result.components[component.name].primitives = {};
829
+ for (const primitive of component.primitives) {
830
+ // Convert back to expanded PrimitiveDefinition format
831
+ result.components[component.name].primitives[primitive.name] = {
832
+ name: primitive.name,
833
+ baseType: primitive.baseType,
834
+ description: primitive.description,
835
+ typeAlias: primitive.typeAlias,
836
+ ...(primitive.required !== undefined && { required: primitive.required }),
837
+ ...(primitive.unique !== undefined && { unique: primitive.unique }),
838
+ ...(primitive.validation && Object.keys(primitive.validation).length > 0 && { validation: primitive.validation })
839
+ };
840
+ }
841
+ }
842
+ // Add models
843
+ if (component.models && component.models.length > 0) {
844
+ result.components[component.name].models = {};
845
+ for (const model of component.models) {
846
+ result.components[component.name].models[model.name] = {
847
+ ...(model.description && { description: model.description }),
848
+ ...(model.metadata && { metadata: model.metadata }), // v3.3+ metadata primitives
849
+ attributes: {},
850
+ ...(model.relationships.length > 0 && { relationships: {} }),
851
+ ...(model.lifecycles.length > 0 && { lifecycles: {} }),
852
+ ...(Object.keys(model.behaviors).length > 0 && { behaviors: model.behaviors })
853
+ };
854
+ // Expand attributes
855
+ for (const attr of model.attributes) {
856
+ result.components[component.name].models[model.name].attributes[attr.name] = {
857
+ name: attr.name,
858
+ type: attr.type,
859
+ required: attr.required,
860
+ unique: attr.unique,
861
+ ...(attr.default !== undefined && { default: attr.default }),
862
+ ...(attr.min !== undefined && { min: attr.min }),
863
+ ...(attr.max !== undefined && { max: attr.max }),
864
+ ...(attr.auto !== undefined && { auto: attr.auto }),
865
+ ...(attr.values !== undefined && { values: attr.values })
866
+ };
867
+ }
868
+ // Expand relationships
869
+ for (const rel of model.relationships) {
870
+ result.components[component.name].models[model.name].relationships[rel.name] = {
871
+ name: rel.name,
872
+ type: rel.type,
873
+ target: rel.target,
874
+ ...(rel.cascade && { cascade: rel.cascade }),
875
+ ...(rel.eager && { eager: rel.eager }),
876
+ ...(rel.through && { through: rel.through })
877
+ };
878
+ }
879
+ // Expand lifecycles - output schema-compliant format
880
+ for (const lifecycle of model.lifecycles) {
881
+ if (lifecycle.type === 'shorthand') {
882
+ // Convert back to flow format for schema compliance
883
+ const flow = lifecycle.states.join(' -> ');
884
+ result.components[component.name].models[model.name].lifecycles[lifecycle.name] = {
885
+ flow: flow
886
+ };
887
+ }
888
+ else if (lifecycle.type === 'structured') {
889
+ // Convert structured format to schema-compliant transitions
890
+ const transitions = {};
891
+ if (lifecycle.transitions) {
892
+ for (const [action, transition] of Object.entries(lifecycle.transitions)) {
893
+ transitions[action] = `${transition.from} -> ${transition.to}`;
894
+ }
895
+ }
896
+ result.components[component.name].models[model.name].lifecycles[lifecycle.name] = {
897
+ states: lifecycle.states,
898
+ transitions: transitions
899
+ };
900
+ }
901
+ }
902
+ }
903
+ }
904
+ // Add controllers, services, events, views similarly...
905
+ if (component.controllers && component.controllers.length > 0) {
906
+ result.components[component.name].controllers = {};
907
+ for (const controller of component.controllers) {
908
+ result.components[component.name].controllers[controller.name] = {
909
+ ...(controller.model && { model: controller.model }),
910
+ ...(controller.path && { path: controller.path }),
911
+ ...(controller.description && { description: controller.description }),
912
+ ...(controller.subscriptions.events.length > 0 && { subscribes_to: controller.subscriptions.handlers }),
913
+ ...(Object.keys(controller.cured).length > 0 && { cured: controller.cured }),
914
+ ...(Object.keys(controller.actions).length > 0 && { actions: controller.actions })
915
+ };
916
+ }
917
+ }
918
+ if (component.services && component.services.length > 0) {
919
+ result.components[component.name].services = {};
920
+ for (const service of component.services) {
921
+ result.components[component.name].services[service.name] = {
922
+ ...(service.description && { description: service.description }),
923
+ ...(service.subscriptions.events.length > 0 && { subscribes_to: service.subscriptions.handlers }),
924
+ ...(Object.keys(service.operations).length > 0 && { operations: service.operations })
925
+ };
926
+ }
927
+ }
928
+ if (component.events && component.events.length > 0) {
929
+ result.components[component.name].events = {};
930
+ for (const event of component.events) {
931
+ result.components[component.name].events[event.name] = {
932
+ ...(event.description && { description: event.description }),
933
+ attributes: {}
934
+ };
935
+ // Expand event attributes (same as model attributes)
936
+ for (const attr of event.payload) {
937
+ result.components[component.name].events[event.name].attributes[attr.name] = {
938
+ name: attr.name,
939
+ type: attr.type,
940
+ required: attr.required,
941
+ unique: attr.unique
942
+ };
943
+ }
944
+ }
945
+ }
946
+ if (component.views && component.views.length > 0) {
947
+ result.components[component.name].views = {};
948
+ for (const view of component.views) {
949
+ result.components[component.name].views[view.name] = {
950
+ ...(view.description && { description: view.description }),
951
+ ...(view.type && { type: view.type }),
952
+ ...(view.model && { model: view.model }),
953
+ ...(view.tags && view.tags.length > 0 && { tags: view.tags }),
954
+ ...(view.export !== undefined && { export: view.export }),
955
+ ...(view.layout && { layout: view.layout }),
956
+ ...(view.subscriptions.events.length > 0 && { subscribes_to: view.subscriptions.handlers }),
957
+ ...(Object.keys(view.uiComponents).length > 0 && { uiComponents: view.uiComponents }),
958
+ ...(Object.keys(view.properties).length > 0 && { properties: view.properties })
959
+ };
960
+ }
961
+ }
962
+ // Add commands back as object format (convert from CommandSpec[] to {name: def})
963
+ if (component.commands && component.commands.length > 0) {
964
+ result.components[component.name].commands = {};
965
+ for (const cmd of component.commands) {
966
+ const { name: cmdName, ...cmdDef } = cmd;
967
+ result.components[component.name].commands[cmdName] = cmdDef;
968
+ }
969
+ }
970
+ }
971
+ // Convert deployments - preserve all properties for validation
972
+ for (const deployment of ast.deployments) {
973
+ const { name, namespace, ...deploymentProps } = deployment;
974
+ result.deployments[deployment.name] = deploymentProps;
975
+ }
976
+ // Convert manifests - preserve all properties for validation (keep name property)
977
+ for (const manifest of ast.manifests) {
978
+ const { namespace, ...manifestProps } = manifest;
979
+ result.manifests[manifest.name] = manifestProps;
980
+ }
981
+ return yaml.dump(result, {
982
+ indent: 2,
983
+ lineWidth: 120,
984
+ quotingType: '"',
985
+ forceQuotes: false
986
+ });
987
+ }
988
+ /**
989
+ * Get component type information (for compatibility)
990
+ */
991
+ getComponentTypes(ast) {
992
+ return ast.components.map(component => ({
993
+ name: component.name,
994
+ version: component.version || '1.0.0',
995
+ models: new Set((component.models || []).map(m => m.name)),
996
+ controllers: new Set((component.controllers || []).map(c => c.name)),
997
+ services: new Set((component.services || []).map(s => s.name)),
998
+ views: new Set((component.views || []).map(v => v.name)),
999
+ events: new Set((component.events || []).map(e => e.name)),
1000
+ exports: component.exports || {}
1001
+ }));
1002
+ }
1003
+ /**
1004
+ * Enable imports dynamically
1005
+ */
1006
+ enableImports(options) {
1007
+ this.options.enableImports = true;
1008
+ if (options) {
1009
+ Object.assign(this.options, options);
1010
+ }
1011
+ if (!this.importResolver) {
1012
+ this.importResolver = new ImportResolver({
1013
+ basePath: this.options.basePath || process.cwd(),
1014
+ cacheDir: this.options.cacheDir,
1015
+ offline: this.options.offline || false,
1016
+ debug: this.options.debug || false
1017
+ });
1018
+ }
1019
+ }
1020
+ /**
1021
+ * Disable imports dynamically
1022
+ */
1023
+ disableImports() {
1024
+ this.options.enableImports = false;
1025
+ }
1026
+ /**
1027
+ * Get import resolver instance (for compatibility)
1028
+ */
1029
+ getImportResolver() {
1030
+ return this.importResolver;
1031
+ }
1032
+ /**
1033
+ * Get current options
1034
+ */
1035
+ getOptions() {
1036
+ return { ...this.options };
1037
+ }
1038
+ /**
1039
+ * Format validation errors for display
1040
+ */
1041
+ formatErrors(errors) {
1042
+ if (errors.length === 0) {
1043
+ return 'No errors found.';
1044
+ }
1045
+ return `Found ${errors.length} error(s):\n` +
1046
+ errors.map((err, i) => ` ${i + 1}. ${err}`).join('\n');
1047
+ }
1048
+ /**
1049
+ * Get available model names (for IDE support)
1050
+ */
1051
+ getModelNames(ast) {
1052
+ const modelNames = [];
1053
+ for (const component of ast.components) {
1054
+ modelNames.push(...(component.models || []).map((m) => m.name));
1055
+ }
1056
+ return modelNames;
1057
+ }
1058
+ /**
1059
+ * Get available event names (for IDE support)
1060
+ */
1061
+ getEventNames(ast) {
1062
+ const eventNames = [];
1063
+ for (const component of ast.components) {
1064
+ eventNames.push(...(component.events || []).map((e) => e.name));
1065
+ }
1066
+ return eventNames;
1067
+ }
1068
+ /**
1069
+ * Get lifecycle actions for a model (for IDE support)
1070
+ */
1071
+ getLifecycleActions(ast, modelName) {
1072
+ for (const component of ast.components) {
1073
+ const model = component.models.find((m) => m.name === modelName);
1074
+ if (model) {
1075
+ const result = {};
1076
+ for (const lifecycle of model.lifecycles) {
1077
+ result[lifecycle.name] = lifecycle.actions;
1078
+ }
1079
+ return result;
1080
+ }
1081
+ }
1082
+ return {};
1083
+ }
1084
+ // =============================================================================
1085
+ // SEMANTIC VALIDATION SYSTEM
1086
+ // =============================================================================
1087
+ /**
1088
+ * Semantic validation rules — data-driven cross-entity constraints.
1089
+ * Each rule defines what to check without hardcoding entity type names.
1090
+ */
1091
+ static SEMANTIC_RULES = [
1092
+ {
1093
+ name: 'controller-model-connections',
1094
+ validate: (component, _importedTypes) => {
1095
+ const errors = [];
1096
+ const modelNames = new Set((component.models || []).map((m) => m.name));
1097
+ for (const controller of (component.controllers || [])) {
1098
+ if (!controller.model) {
1099
+ errors.push(`Component ${component.name}: Controller ${controller.name} missing required model reference`);
1100
+ }
1101
+ else if (!modelNames.has(controller.model)) {
1102
+ errors.push(`Component ${component.name}: Controller ${controller.name} references non-existent model ${controller.model}`);
1103
+ }
1104
+ }
1105
+ return errors;
1106
+ }
1107
+ },
1108
+ {
1109
+ name: 'subscription-targets',
1110
+ validate: (component, _importedTypes) => {
1111
+ const errors = [];
1112
+ const eventNames = new Set((component.events || []).map((e) => e.name));
1113
+ // Check subscriptions on any entity type that has them
1114
+ const subscriberTypes = [
1115
+ { items: component.controllers || [], typeName: 'Controller' },
1116
+ { items: component.services || [], typeName: 'Service' },
1117
+ { items: component.views || [], typeName: 'View' },
1118
+ ];
1119
+ for (const { items, typeName } of subscriberTypes) {
1120
+ for (const item of items) {
1121
+ for (const event of (item.subscriptions?.events || [])) {
1122
+ if (!eventNames.has(event)) {
1123
+ errors.push(`Component ${component.name}: ${typeName} ${item.name} subscribes to unknown event ${event}`);
1124
+ }
1125
+ }
1126
+ }
1127
+ }
1128
+ return errors;
1129
+ }
1130
+ },
1131
+ {
1132
+ name: 'relationship-targets',
1133
+ validate: (component, importedTypes) => {
1134
+ const errors = [];
1135
+ const localTypes = new Set((component.models || []).map((m) => m.name));
1136
+ for (const model of (component.models || [])) {
1137
+ for (const relationship of (model.relationships || [])) {
1138
+ const target = relationship.target;
1139
+ if (target && !target.includes('.')) {
1140
+ if (!localTypes.has(target) && !importedTypes.has(target)) {
1141
+ errors.push(`Component ${component.name}: Model ${model.name} relationship ${relationship.name} targets non-existent model ${target}`);
1142
+ }
1143
+ }
1144
+ }
1145
+ }
1146
+ return errors;
1147
+ }
1148
+ },
1149
+ ];
1150
+ /**
1151
+ * Perform semantic validation on the parsed AST
1152
+ */
1153
+ validateSemantics(ast) {
1154
+ const errors = [];
1155
+ for (const component of ast.components) {
1156
+ const importedTypes = this.buildImportedTypesSet(component);
1157
+ for (const rule of UnifiedSpecVerseParser.SEMANTIC_RULES) {
1158
+ errors.push(...rule.validate(component, importedTypes));
1159
+ }
1160
+ }
1161
+ return errors;
1162
+ }
1163
+ /**
1164
+ * Build set of imported types available to a component
1165
+ */
1166
+ buildImportedTypesSet(component) {
1167
+ const importedTypes = new Set();
1168
+ for (const importDef of component.imports || []) {
1169
+ for (const typeName of importDef.select || []) {
1170
+ importedTypes.add(typeName);
1171
+ }
1172
+ }
1173
+ return importedTypes;
1174
+ }
1175
+ }
1176
+ // =============================================================================
1177
+ // BACKWARD COMPATIBILITY LAYER
1178
+ // =============================================================================
1179
+ // Backward compatibility exports removed - use UnifiedSpecVerseParser directly
1180
+ //# sourceMappingURL=unified-parser.js.map