@auto-engineer/narrative 0.11.11

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 (541) hide show
  1. package/.turbo/turbo-build.log +9 -0
  2. package/.turbo/turbo-format.log +4 -0
  3. package/.turbo/turbo-lint.log +4 -0
  4. package/.turbo/turbo-test.log +14 -0
  5. package/.turbo/turbo-type-check.log +4 -0
  6. package/CHANGELOG.md +691 -0
  7. package/DEBUG.md +136 -0
  8. package/LICENSE +10 -0
  9. package/README.md +141 -0
  10. package/dist/scripts/build.d.ts +3 -0
  11. package/dist/scripts/build.d.ts.map +1 -0
  12. package/dist/scripts/build.js +71 -0
  13. package/dist/scripts/build.js.map +1 -0
  14. package/dist/scripts/convert-flow-exec.d.ts +3 -0
  15. package/dist/scripts/convert-flow-exec.d.ts.map +1 -0
  16. package/dist/scripts/convert-flow-exec.js +17 -0
  17. package/dist/scripts/convert-flow-exec.js.map +1 -0
  18. package/dist/scripts/convert-flow-helper.d.ts +3 -0
  19. package/dist/scripts/convert-flow-helper.d.ts.map +1 -0
  20. package/dist/scripts/convert-flow-helper.js +85 -0
  21. package/dist/scripts/convert-flow-helper.js.map +1 -0
  22. package/dist/scripts/convert-flow.d.ts +3 -0
  23. package/dist/scripts/convert-flow.d.ts.map +1 -0
  24. package/dist/scripts/convert-flow.js +108 -0
  25. package/dist/scripts/convert-flow.js.map +1 -0
  26. package/dist/scripts/print-schema.d.ts +2 -0
  27. package/dist/scripts/print-schema.d.ts.map +1 -0
  28. package/dist/scripts/print-schema.js +20 -0
  29. package/dist/scripts/print-schema.js.map +1 -0
  30. package/dist/src/commands/export-schema-helper.d.ts +2 -0
  31. package/dist/src/commands/export-schema-helper.d.ts.map +1 -0
  32. package/dist/src/commands/export-schema-helper.js +48 -0
  33. package/dist/src/commands/export-schema-helper.js.map +1 -0
  34. package/dist/src/commands/export-schema-runner.d.ts +3 -0
  35. package/dist/src/commands/export-schema-runner.d.ts.map +1 -0
  36. package/dist/src/commands/export-schema-runner.js +53 -0
  37. package/dist/src/commands/export-schema-runner.js.map +1 -0
  38. package/dist/src/commands/export-schema.d.ts +23 -0
  39. package/dist/src/commands/export-schema.d.ts.map +1 -0
  40. package/dist/src/commands/export-schema.js +124 -0
  41. package/dist/src/commands/export-schema.js.map +1 -0
  42. package/dist/src/commands/filestore.node.d.ts +3 -0
  43. package/dist/src/commands/filestore.node.d.ts.map +1 -0
  44. package/dist/src/commands/filestore.node.js +11 -0
  45. package/dist/src/commands/filestore.node.js.map +1 -0
  46. package/dist/src/data-flow-builders.d.ts +71 -0
  47. package/dist/src/data-flow-builders.d.ts.map +1 -0
  48. package/dist/src/data-flow-builders.js +326 -0
  49. package/dist/src/data-flow-builders.js.map +1 -0
  50. package/dist/src/data-narrative-builders.d.ts +71 -0
  51. package/dist/src/data-narrative-builders.d.ts.map +1 -0
  52. package/dist/src/data-narrative-builders.js +326 -0
  53. package/dist/src/data-narrative-builders.js.map +1 -0
  54. package/dist/src/flow-context.d.ts +25 -0
  55. package/dist/src/flow-context.d.ts.map +1 -0
  56. package/dist/src/flow-context.js +579 -0
  57. package/dist/src/flow-context.js.map +1 -0
  58. package/dist/src/flow-context.specs.d.ts +2 -0
  59. package/dist/src/flow-context.specs.d.ts.map +1 -0
  60. package/dist/src/flow-context.specs.js +185 -0
  61. package/dist/src/flow-context.specs.js.map +1 -0
  62. package/dist/src/flow-registry.d.ts +12 -0
  63. package/dist/src/flow-registry.d.ts.map +1 -0
  64. package/dist/src/flow-registry.js +46 -0
  65. package/dist/src/flow-registry.js.map +1 -0
  66. package/dist/src/flow.d.ts +49 -0
  67. package/dist/src/flow.d.ts.map +1 -0
  68. package/dist/src/flow.js +146 -0
  69. package/dist/src/flow.js.map +1 -0
  70. package/dist/src/fluent-builder.d.ts +35 -0
  71. package/dist/src/fluent-builder.d.ts.map +1 -0
  72. package/dist/src/fluent-builder.js +287 -0
  73. package/dist/src/fluent-builder.js.map +1 -0
  74. package/dist/src/fluent-builder.specs.d.ts +2 -0
  75. package/dist/src/fluent-builder.specs.d.ts.map +1 -0
  76. package/dist/src/fluent-builder.specs.js +28 -0
  77. package/dist/src/fluent-builder.specs.js.map +1 -0
  78. package/dist/src/getFlows.cache.specs.d.ts +2 -0
  79. package/dist/src/getFlows.cache.specs.d.ts.map +1 -0
  80. package/dist/src/getFlows.cache.specs.js +234 -0
  81. package/dist/src/getFlows.cache.specs.js.map +1 -0
  82. package/dist/src/getFlows.d.ts +21 -0
  83. package/dist/src/getFlows.d.ts.map +1 -0
  84. package/dist/src/getFlows.js +119 -0
  85. package/dist/src/getFlows.js.map +1 -0
  86. package/dist/src/getFlows.specs.d.ts +2 -0
  87. package/dist/src/getFlows.specs.d.ts.map +1 -0
  88. package/dist/src/getFlows.specs.js +1080 -0
  89. package/dist/src/getFlows.specs.js.map +1 -0
  90. package/dist/src/getNarratives.d.ts +21 -0
  91. package/dist/src/getNarratives.d.ts.map +1 -0
  92. package/dist/src/getNarratives.js +119 -0
  93. package/dist/src/getNarratives.js.map +1 -0
  94. package/dist/src/id/addAutoIds.d.ts +3 -0
  95. package/dist/src/id/addAutoIds.d.ts.map +1 -0
  96. package/dist/src/id/addAutoIds.js +47 -0
  97. package/dist/src/id/addAutoIds.js.map +1 -0
  98. package/dist/src/id/addAutoIds.specs.d.ts +2 -0
  99. package/dist/src/id/addAutoIds.specs.d.ts.map +1 -0
  100. package/dist/src/id/addAutoIds.specs.js +265 -0
  101. package/dist/src/id/addAutoIds.specs.js.map +1 -0
  102. package/dist/src/id/generators.d.ts +2 -0
  103. package/dist/src/id/generators.d.ts.map +1 -0
  104. package/dist/src/id/generators.js +5 -0
  105. package/dist/src/id/generators.js.map +1 -0
  106. package/dist/src/id/hasAllIds.d.ts +3 -0
  107. package/dist/src/id/hasAllIds.d.ts.map +1 -0
  108. package/dist/src/id/hasAllIds.js +19 -0
  109. package/dist/src/id/hasAllIds.js.map +1 -0
  110. package/dist/src/id/hasAllIds.specs.d.ts +2 -0
  111. package/dist/src/id/hasAllIds.specs.d.ts.map +1 -0
  112. package/dist/src/id/hasAllIds.specs.js +231 -0
  113. package/dist/src/id/hasAllIds.specs.js.map +1 -0
  114. package/dist/src/id/index.d.ts +3 -0
  115. package/dist/src/id/index.d.ts.map +1 -0
  116. package/dist/src/id/index.js +3 -0
  117. package/dist/src/id/index.js.map +1 -0
  118. package/dist/src/index.d.ts +45 -0
  119. package/dist/src/index.d.ts.map +1 -0
  120. package/dist/src/index.js +31 -0
  121. package/dist/src/index.js.map +1 -0
  122. package/dist/src/integration-export-registry.d.ts +42 -0
  123. package/dist/src/integration-export-registry.d.ts.map +1 -0
  124. package/dist/src/integration-export-registry.js +74 -0
  125. package/dist/src/integration-export-registry.js.map +1 -0
  126. package/dist/src/integration-registry.d.ts +12 -0
  127. package/dist/src/integration-registry.d.ts.map +1 -0
  128. package/dist/src/integration-registry.js +42 -0
  129. package/dist/src/integration-registry.js.map +1 -0
  130. package/dist/src/loader/fs-path.d.ts +6 -0
  131. package/dist/src/loader/fs-path.d.ts.map +1 -0
  132. package/dist/src/loader/fs-path.js +28 -0
  133. package/dist/src/loader/fs-path.js.map +1 -0
  134. package/dist/src/loader/graph.d.ts +15 -0
  135. package/dist/src/loader/graph.d.ts.map +1 -0
  136. package/dist/src/loader/graph.js +292 -0
  137. package/dist/src/loader/graph.js.map +1 -0
  138. package/dist/src/loader/importmap.d.ts +2 -0
  139. package/dist/src/loader/importmap.d.ts.map +1 -0
  140. package/dist/src/loader/importmap.js +55 -0
  141. package/dist/src/loader/importmap.js.map +1 -0
  142. package/dist/src/loader/index.d.ts +9 -0
  143. package/dist/src/loader/index.d.ts.map +1 -0
  144. package/dist/src/loader/index.js +55 -0
  145. package/dist/src/loader/index.js.map +1 -0
  146. package/dist/src/loader/resolver.d.ts +4 -0
  147. package/dist/src/loader/resolver.d.ts.map +1 -0
  148. package/dist/src/loader/resolver.js +18 -0
  149. package/dist/src/loader/resolver.js.map +1 -0
  150. package/dist/src/loader/runtime-cjs.d.ts +3 -0
  151. package/dist/src/loader/runtime-cjs.d.ts.map +1 -0
  152. package/dist/src/loader/runtime-cjs.js +131 -0
  153. package/dist/src/loader/runtime-cjs.js.map +1 -0
  154. package/dist/src/loader/ts-utils.d.ts +39 -0
  155. package/dist/src/loader/ts-utils.d.ts.map +1 -0
  156. package/dist/src/loader/ts-utils.js +563 -0
  157. package/dist/src/loader/ts-utils.js.map +1 -0
  158. package/dist/src/loader/types.d.ts +23 -0
  159. package/dist/src/loader/types.d.ts.map +1 -0
  160. package/dist/src/loader/types.js +2 -0
  161. package/dist/src/loader/types.js.map +1 -0
  162. package/dist/src/loader/vfs-compiler-host.d.ts +5 -0
  163. package/dist/src/loader/vfs-compiler-host.d.ts.map +1 -0
  164. package/dist/src/loader/vfs-compiler-host.js +47 -0
  165. package/dist/src/loader/vfs-compiler-host.js.map +1 -0
  166. package/dist/src/model-to-flow.specs.d.ts +2 -0
  167. package/dist/src/model-to-flow.specs.d.ts.map +1 -0
  168. package/dist/src/model-to-flow.specs.js +1786 -0
  169. package/dist/src/model-to-flow.specs.js.map +1 -0
  170. package/dist/src/narrative-context.d.ts +25 -0
  171. package/dist/src/narrative-context.d.ts.map +1 -0
  172. package/dist/src/narrative-context.js +579 -0
  173. package/dist/src/narrative-context.js.map +1 -0
  174. package/dist/src/narrative-context.specs.d.ts +2 -0
  175. package/dist/src/narrative-context.specs.d.ts.map +1 -0
  176. package/dist/src/narrative-context.specs.js +185 -0
  177. package/dist/src/narrative-context.specs.js.map +1 -0
  178. package/dist/src/narrative-registry.d.ts +12 -0
  179. package/dist/src/narrative-registry.d.ts.map +1 -0
  180. package/dist/src/narrative-registry.js +46 -0
  181. package/dist/src/narrative-registry.js.map +1 -0
  182. package/dist/src/narrative.d.ts +49 -0
  183. package/dist/src/narrative.d.ts.map +1 -0
  184. package/dist/src/narrative.js +147 -0
  185. package/dist/src/narrative.js.map +1 -0
  186. package/dist/src/samples/items.flow.d.ts +2 -0
  187. package/dist/src/samples/items.flow.d.ts.map +1 -0
  188. package/dist/src/samples/items.flow.js +63 -0
  189. package/dist/src/samples/items.flow.js.map +1 -0
  190. package/dist/src/samples/mixed-given-types.flow.d.ts +2 -0
  191. package/dist/src/samples/mixed-given-types.flow.d.ts.map +1 -0
  192. package/dist/src/samples/mixed-given-types.flow.js +36 -0
  193. package/dist/src/samples/mixed-given-types.flow.js.map +1 -0
  194. package/dist/src/samples/place-order.flow.d.ts +25 -0
  195. package/dist/src/samples/place-order.flow.d.ts.map +1 -0
  196. package/dist/src/samples/place-order.flow.js +30 -0
  197. package/dist/src/samples/place-order.flow.js.map +1 -0
  198. package/dist/src/samples/questionnaires.flow.d.ts +2 -0
  199. package/dist/src/samples/questionnaires.flow.d.ts.map +1 -0
  200. package/dist/src/samples/questionnaires.flow.js +259 -0
  201. package/dist/src/samples/questionnaires.flow.js.map +1 -0
  202. package/dist/src/samples/seasonal-assistant.schema.json +737 -0
  203. package/dist/src/samples/test-with-ids.flow.d.ts +2 -0
  204. package/dist/src/samples/test-with-ids.flow.d.ts.map +1 -0
  205. package/dist/src/samples/test-with-ids.flow.js +80 -0
  206. package/dist/src/samples/test-with-ids.flow.js.map +1 -0
  207. package/dist/src/schema-test.d.ts +2 -0
  208. package/dist/src/schema-test.d.ts.map +1 -0
  209. package/dist/src/schema-test.js +57 -0
  210. package/dist/src/schema-test.js.map +1 -0
  211. package/dist/src/schema.d.ts +19393 -0
  212. package/dist/src/schema.d.ts.map +1 -0
  213. package/dist/src/schema.js +342 -0
  214. package/dist/src/schema.js.map +1 -0
  215. package/dist/src/slice-builder.d.ts +16 -0
  216. package/dist/src/slice-builder.d.ts.map +1 -0
  217. package/dist/src/slice-builder.js +72 -0
  218. package/dist/src/slice-builder.js.map +1 -0
  219. package/dist/src/testing.d.ts +32 -0
  220. package/dist/src/testing.d.ts.map +1 -0
  221. package/dist/src/testing.js +36 -0
  222. package/dist/src/testing.js.map +1 -0
  223. package/dist/src/transformers/flow-to-model/assemble.d.ts +3 -0
  224. package/dist/src/transformers/flow-to-model/assemble.d.ts.map +1 -0
  225. package/dist/src/transformers/flow-to-model/assemble.js +9 -0
  226. package/dist/src/transformers/flow-to-model/assemble.js.map +1 -0
  227. package/dist/src/transformers/flow-to-model/debug.d.ts +3 -0
  228. package/dist/src/transformers/flow-to-model/debug.d.ts.map +1 -0
  229. package/dist/src/transformers/flow-to-model/debug.js +6 -0
  230. package/dist/src/transformers/flow-to-model/debug.js.map +1 -0
  231. package/dist/src/transformers/flow-to-model/example-shapes.d.ts +6 -0
  232. package/dist/src/transformers/flow-to-model/example-shapes.d.ts.map +1 -0
  233. package/dist/src/transformers/flow-to-model/example-shapes.js +60 -0
  234. package/dist/src/transformers/flow-to-model/example-shapes.js.map +1 -0
  235. package/dist/src/transformers/flow-to-model/guards.d.ts +15 -0
  236. package/dist/src/transformers/flow-to-model/guards.d.ts.map +1 -0
  237. package/dist/src/transformers/flow-to-model/guards.js +18 -0
  238. package/dist/src/transformers/flow-to-model/guards.js.map +1 -0
  239. package/dist/src/transformers/flow-to-model/index.d.ts +4 -0
  240. package/dist/src/transformers/flow-to-model/index.d.ts.map +1 -0
  241. package/dist/src/transformers/flow-to-model/index.js +193 -0
  242. package/dist/src/transformers/flow-to-model/index.js.map +1 -0
  243. package/dist/src/transformers/flow-to-model/inlining.d.ts +4 -0
  244. package/dist/src/transformers/flow-to-model/inlining.d.ts.map +1 -0
  245. package/dist/src/transformers/flow-to-model/inlining.js +95 -0
  246. package/dist/src/transformers/flow-to-model/inlining.js.map +1 -0
  247. package/dist/src/transformers/flow-to-model/integrations.d.ts +36 -0
  248. package/dist/src/transformers/flow-to-model/integrations.d.ts.map +1 -0
  249. package/dist/src/transformers/flow-to-model/integrations.js +147 -0
  250. package/dist/src/transformers/flow-to-model/integrations.js.map +1 -0
  251. package/dist/src/transformers/flow-to-model/messages.d.ts +5 -0
  252. package/dist/src/transformers/flow-to-model/messages.d.ts.map +1 -0
  253. package/dist/src/transformers/flow-to-model/messages.js +88 -0
  254. package/dist/src/transformers/flow-to-model/messages.js.map +1 -0
  255. package/dist/src/transformers/flow-to-model/normalize.d.ts +3 -0
  256. package/dist/src/transformers/flow-to-model/normalize.d.ts.map +1 -0
  257. package/dist/src/transformers/flow-to-model/normalize.js +23 -0
  258. package/dist/src/transformers/flow-to-model/normalize.js.map +1 -0
  259. package/dist/src/transformers/flow-to-model/spec-processors.d.ts +34 -0
  260. package/dist/src/transformers/flow-to-model/spec-processors.d.ts.map +1 -0
  261. package/dist/src/transformers/flow-to-model/spec-processors.js +395 -0
  262. package/dist/src/transformers/flow-to-model/spec-processors.js.map +1 -0
  263. package/dist/src/transformers/flow-to-model/strings.d.ts +2 -0
  264. package/dist/src/transformers/flow-to-model/strings.d.ts.map +1 -0
  265. package/dist/src/transformers/flow-to-model/strings.js +11 -0
  266. package/dist/src/transformers/flow-to-model/strings.js.map +1 -0
  267. package/dist/src/transformers/flow-to-model/type-inference.d.ts +3 -0
  268. package/dist/src/transformers/flow-to-model/type-inference.d.ts.map +1 -0
  269. package/dist/src/transformers/flow-to-model/type-inference.js +92 -0
  270. package/dist/src/transformers/flow-to-model/type-inference.js.map +1 -0
  271. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts +2 -0
  272. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts.map +1 -0
  273. package/dist/src/transformers/flow-to-model/type-inference.specs.js +167 -0
  274. package/dist/src/transformers/flow-to-model/type-inference.specs.js.map +1 -0
  275. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts +6 -0
  276. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts.map +1 -0
  277. package/dist/src/transformers/flow-to-model/zod-adapter.js +101 -0
  278. package/dist/src/transformers/flow-to-model/zod-adapter.js.map +1 -0
  279. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts +2 -0
  280. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts.map +1 -0
  281. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js +22 -0
  282. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js.map +1 -0
  283. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts +18 -0
  284. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts.map +1 -0
  285. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js +78 -0
  286. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js.map +1 -0
  287. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts +7 -0
  288. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts.map +1 -0
  289. package/dist/src/transformers/model-to-flow/analysis/type-decls.js +74 -0
  290. package/dist/src/transformers/model-to-flow/analysis/type-decls.js.map +1 -0
  291. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts +9 -0
  292. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts.map +1 -0
  293. package/dist/src/transformers/model-to-flow/analysis/usage.js +90 -0
  294. package/dist/src/transformers/model-to-flow/analysis/usage.js.map +1 -0
  295. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts +18 -0
  296. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts.map +1 -0
  297. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js +159 -0
  298. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js.map +1 -0
  299. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts +2 -0
  300. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts.map +1 -0
  301. package/dist/src/transformers/model-to-flow/formatting/prettier.js +26 -0
  302. package/dist/src/transformers/model-to-flow/formatting/prettier.js.map +1 -0
  303. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts +6 -0
  304. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts.map +1 -0
  305. package/dist/src/transformers/model-to-flow/formatting/sort-types.js +17 -0
  306. package/dist/src/transformers/model-to-flow/formatting/sort-types.js.map +1 -0
  307. package/dist/src/transformers/model-to-flow/generators/compose.d.ts +6 -0
  308. package/dist/src/transformers/model-to-flow/generators/compose.d.ts.map +1 -0
  309. package/dist/src/transformers/model-to-flow/generators/compose.js +79 -0
  310. package/dist/src/transformers/model-to-flow/generators/compose.js.map +1 -0
  311. package/dist/src/transformers/model-to-flow/generators/flow.d.ts +15 -0
  312. package/dist/src/transformers/model-to-flow/generators/flow.d.ts.map +1 -0
  313. package/dist/src/transformers/model-to-flow/generators/flow.js +316 -0
  314. package/dist/src/transformers/model-to-flow/generators/flow.js.map +1 -0
  315. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts +57 -0
  316. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts.map +1 -0
  317. package/dist/src/transformers/model-to-flow/generators/gwt.js +186 -0
  318. package/dist/src/transformers/model-to-flow/generators/gwt.js.map +1 -0
  319. package/dist/src/transformers/model-to-flow/generators/imports.d.ts +16 -0
  320. package/dist/src/transformers/model-to-flow/generators/imports.d.ts.map +1 -0
  321. package/dist/src/transformers/model-to-flow/generators/imports.js +57 -0
  322. package/dist/src/transformers/model-to-flow/generators/imports.js.map +1 -0
  323. package/dist/src/transformers/model-to-flow/generators/types.d.ts +13 -0
  324. package/dist/src/transformers/model-to-flow/generators/types.d.ts.map +1 -0
  325. package/dist/src/transformers/model-to-flow/generators/types.js +22 -0
  326. package/dist/src/transformers/model-to-flow/generators/types.js.map +1 -0
  327. package/dist/src/transformers/model-to-flow/index.d.ts +13 -0
  328. package/dist/src/transformers/model-to-flow/index.d.ts.map +1 -0
  329. package/dist/src/transformers/model-to-flow/index.js +25 -0
  330. package/dist/src/transformers/model-to-flow/index.js.map +1 -0
  331. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts +12 -0
  332. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts.map +1 -0
  333. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js +64 -0
  334. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js.map +1 -0
  335. package/dist/src/transformers/model-to-flow/utils/strings.d.ts +9 -0
  336. package/dist/src/transformers/model-to-flow/utils/strings.d.ts.map +1 -0
  337. package/dist/src/transformers/model-to-flow/utils/strings.js +11 -0
  338. package/dist/src/transformers/model-to-flow/utils/strings.js.map +1 -0
  339. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts +2 -0
  340. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts.map +1 -0
  341. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js +22 -0
  342. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js.map +1 -0
  343. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts +18 -0
  344. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts.map +1 -0
  345. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +78 -0
  346. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -0
  347. package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts +7 -0
  348. package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts.map +1 -0
  349. package/dist/src/transformers/model-to-narrative/analysis/type-decls.js +74 -0
  350. package/dist/src/transformers/model-to-narrative/analysis/type-decls.js.map +1 -0
  351. package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts +9 -0
  352. package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts.map +1 -0
  353. package/dist/src/transformers/model-to-narrative/analysis/usage.js +90 -0
  354. package/dist/src/transformers/model-to-narrative/analysis/usage.js.map +1 -0
  355. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts +18 -0
  356. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts.map +1 -0
  357. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js +159 -0
  358. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js.map +1 -0
  359. package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts +2 -0
  360. package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts.map +1 -0
  361. package/dist/src/transformers/model-to-narrative/formatting/prettier.js +26 -0
  362. package/dist/src/transformers/model-to-narrative/formatting/prettier.js.map +1 -0
  363. package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts +6 -0
  364. package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts.map +1 -0
  365. package/dist/src/transformers/model-to-narrative/formatting/sort-types.js +17 -0
  366. package/dist/src/transformers/model-to-narrative/formatting/sort-types.js.map +1 -0
  367. package/dist/src/transformers/model-to-narrative/generators/compose.d.ts +6 -0
  368. package/dist/src/transformers/model-to-narrative/generators/compose.d.ts.map +1 -0
  369. package/dist/src/transformers/model-to-narrative/generators/compose.js +79 -0
  370. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -0
  371. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +15 -0
  372. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -0
  373. package/dist/src/transformers/model-to-narrative/generators/flow.js +316 -0
  374. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -0
  375. package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts +57 -0
  376. package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts.map +1 -0
  377. package/dist/src/transformers/model-to-narrative/generators/gwt.js +186 -0
  378. package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -0
  379. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +16 -0
  380. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -0
  381. package/dist/src/transformers/model-to-narrative/generators/imports.js +57 -0
  382. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -0
  383. package/dist/src/transformers/model-to-narrative/generators/types.d.ts +13 -0
  384. package/dist/src/transformers/model-to-narrative/generators/types.d.ts.map +1 -0
  385. package/dist/src/transformers/model-to-narrative/generators/types.js +22 -0
  386. package/dist/src/transformers/model-to-narrative/generators/types.js.map +1 -0
  387. package/dist/src/transformers/model-to-narrative/index.d.ts +13 -0
  388. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -0
  389. package/dist/src/transformers/model-to-narrative/index.js +25 -0
  390. package/dist/src/transformers/model-to-narrative/index.js.map +1 -0
  391. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +12 -0
  392. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -0
  393. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +64 -0
  394. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -0
  395. package/dist/src/transformers/model-to-narrative/utils/strings.d.ts +9 -0
  396. package/dist/src/transformers/model-to-narrative/utils/strings.d.ts.map +1 -0
  397. package/dist/src/transformers/model-to-narrative/utils/strings.js +11 -0
  398. package/dist/src/transformers/model-to-narrative/utils/strings.js.map +1 -0
  399. package/dist/src/transformers/narrative-to-model/assemble.d.ts +3 -0
  400. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -0
  401. package/dist/src/transformers/narrative-to-model/assemble.js +9 -0
  402. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -0
  403. package/dist/src/transformers/narrative-to-model/debug.d.ts +3 -0
  404. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -0
  405. package/dist/src/transformers/narrative-to-model/debug.js +6 -0
  406. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -0
  407. package/dist/src/transformers/narrative-to-model/example-shapes.d.ts +6 -0
  408. package/dist/src/transformers/narrative-to-model/example-shapes.d.ts.map +1 -0
  409. package/dist/src/transformers/narrative-to-model/example-shapes.js +60 -0
  410. package/dist/src/transformers/narrative-to-model/example-shapes.js.map +1 -0
  411. package/dist/src/transformers/narrative-to-model/guards.d.ts +15 -0
  412. package/dist/src/transformers/narrative-to-model/guards.d.ts.map +1 -0
  413. package/dist/src/transformers/narrative-to-model/guards.js +18 -0
  414. package/dist/src/transformers/narrative-to-model/guards.js.map +1 -0
  415. package/dist/src/transformers/narrative-to-model/index.d.ts +4 -0
  416. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -0
  417. package/dist/src/transformers/narrative-to-model/index.js +193 -0
  418. package/dist/src/transformers/narrative-to-model/index.js.map +1 -0
  419. package/dist/src/transformers/narrative-to-model/inlining.d.ts +4 -0
  420. package/dist/src/transformers/narrative-to-model/inlining.d.ts.map +1 -0
  421. package/dist/src/transformers/narrative-to-model/inlining.js +95 -0
  422. package/dist/src/transformers/narrative-to-model/inlining.js.map +1 -0
  423. package/dist/src/transformers/narrative-to-model/integrations.d.ts +36 -0
  424. package/dist/src/transformers/narrative-to-model/integrations.d.ts.map +1 -0
  425. package/dist/src/transformers/narrative-to-model/integrations.js +147 -0
  426. package/dist/src/transformers/narrative-to-model/integrations.js.map +1 -0
  427. package/dist/src/transformers/narrative-to-model/messages.d.ts +5 -0
  428. package/dist/src/transformers/narrative-to-model/messages.d.ts.map +1 -0
  429. package/dist/src/transformers/narrative-to-model/messages.js +88 -0
  430. package/dist/src/transformers/narrative-to-model/messages.js.map +1 -0
  431. package/dist/src/transformers/narrative-to-model/normalize.d.ts +3 -0
  432. package/dist/src/transformers/narrative-to-model/normalize.d.ts.map +1 -0
  433. package/dist/src/transformers/narrative-to-model/normalize.js +23 -0
  434. package/dist/src/transformers/narrative-to-model/normalize.js.map +1 -0
  435. package/dist/src/transformers/narrative-to-model/spec-processors.d.ts +34 -0
  436. package/dist/src/transformers/narrative-to-model/spec-processors.d.ts.map +1 -0
  437. package/dist/src/transformers/narrative-to-model/spec-processors.js +395 -0
  438. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -0
  439. package/dist/src/transformers/narrative-to-model/strings.d.ts +2 -0
  440. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -0
  441. package/dist/src/transformers/narrative-to-model/strings.js +11 -0
  442. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -0
  443. package/dist/src/transformers/narrative-to-model/type-inference.d.ts +3 -0
  444. package/dist/src/transformers/narrative-to-model/type-inference.d.ts.map +1 -0
  445. package/dist/src/transformers/narrative-to-model/type-inference.js +92 -0
  446. package/dist/src/transformers/narrative-to-model/type-inference.js.map +1 -0
  447. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts +2 -0
  448. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts.map +1 -0
  449. package/dist/src/transformers/narrative-to-model/type-inference.specs.js +167 -0
  450. package/dist/src/transformers/narrative-to-model/type-inference.specs.js.map +1 -0
  451. package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts +6 -0
  452. package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts.map +1 -0
  453. package/dist/src/transformers/narrative-to-model/zod-adapter.js +101 -0
  454. package/dist/src/transformers/narrative-to-model/zod-adapter.js.map +1 -0
  455. package/dist/src/types.d.ts +143 -0
  456. package/dist/src/types.d.ts.map +1 -0
  457. package/dist/src/types.js +36 -0
  458. package/dist/src/types.js.map +1 -0
  459. package/dist/tsconfig.tsbuildinfo +1 -0
  460. package/eslint.config.ts +12 -0
  461. package/package.json +50 -0
  462. package/scripts/build.ts +84 -0
  463. package/scripts/convert-flow-exec.ts +17 -0
  464. package/scripts/convert-flow-helper.ts +93 -0
  465. package/scripts/convert-flow.ts +128 -0
  466. package/scripts/print-schema.ts +30 -0
  467. package/src/commands/export-schema-helper.ts +76 -0
  468. package/src/commands/export-schema-runner.ts +72 -0
  469. package/src/commands/export-schema.ts +157 -0
  470. package/src/commands/filestore.node.ts +12 -0
  471. package/src/data-narrative-builders.ts +418 -0
  472. package/src/fluent-builder.specs.ts +36 -0
  473. package/src/fluent-builder.ts +382 -0
  474. package/src/getFlows.cache.specs.ts +287 -0
  475. package/src/getFlows.specs.ts +1246 -0
  476. package/src/getNarratives.ts +186 -0
  477. package/src/id/addAutoIds.specs.ts +296 -0
  478. package/src/id/addAutoIds.ts +53 -0
  479. package/src/id/generators.ts +5 -0
  480. package/src/id/hasAllIds.specs.ts +267 -0
  481. package/src/id/hasAllIds.ts +23 -0
  482. package/src/id/index.ts +2 -0
  483. package/src/index.ts +131 -0
  484. package/src/integration-export-registry.ts +83 -0
  485. package/src/integration-registry.ts +53 -0
  486. package/src/loader/fs-path.ts +29 -0
  487. package/src/loader/graph.ts +379 -0
  488. package/src/loader/importmap.ts +68 -0
  489. package/src/loader/index.ts +81 -0
  490. package/src/loader/resolver.ts +22 -0
  491. package/src/loader/runtime-cjs.ts +151 -0
  492. package/src/loader/ts-utils.ts +770 -0
  493. package/src/loader/types.ts +20 -0
  494. package/src/loader/vfs-compiler-host.ts +51 -0
  495. package/src/model-to-flow.specs.ts +1822 -0
  496. package/src/narrative-context.specs.ts +226 -0
  497. package/src/narrative-context.ts +708 -0
  498. package/src/narrative-registry.ts +65 -0
  499. package/src/narrative.ts +236 -0
  500. package/src/samples/items.flow.ts +90 -0
  501. package/src/samples/mixed-given-types.flow.ts +70 -0
  502. package/src/samples/place-order.flow.ts +57 -0
  503. package/src/samples/questionnaires.flow.ts +359 -0
  504. package/src/samples/seasonal-assistant.schema.json +737 -0
  505. package/src/samples/test-with-ids.flow.ts +109 -0
  506. package/src/schema-test.ts +67 -0
  507. package/src/schema.ts +398 -0
  508. package/src/slice-builder.ts +100 -0
  509. package/src/testing.ts +40 -0
  510. package/src/transformers/model-to-narrative/analysis/extract-flow.ts +26 -0
  511. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +98 -0
  512. package/src/transformers/model-to-narrative/analysis/type-decls.ts +94 -0
  513. package/src/transformers/model-to-narrative/analysis/usage.ts +111 -0
  514. package/src/transformers/model-to-narrative/ast/emit-helpers.ts +199 -0
  515. package/src/transformers/model-to-narrative/formatting/prettier.ts +30 -0
  516. package/src/transformers/model-to-narrative/formatting/sort-types.ts +19 -0
  517. package/src/transformers/model-to-narrative/generators/compose.ts +124 -0
  518. package/src/transformers/model-to-narrative/generators/flow.ts +570 -0
  519. package/src/transformers/model-to-narrative/generators/gwt.ts +335 -0
  520. package/src/transformers/model-to-narrative/generators/imports.ts +110 -0
  521. package/src/transformers/model-to-narrative/generators/types.ts +48 -0
  522. package/src/transformers/model-to-narrative/index.ts +27 -0
  523. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +67 -0
  524. package/src/transformers/model-to-narrative/utils/strings.ts +10 -0
  525. package/src/transformers/narrative-to-model/assemble.ts +10 -0
  526. package/src/transformers/narrative-to-model/debug.ts +6 -0
  527. package/src/transformers/narrative-to-model/example-shapes.ts +66 -0
  528. package/src/transformers/narrative-to-model/guards.ts +24 -0
  529. package/src/transformers/narrative-to-model/index.ts +274 -0
  530. package/src/transformers/narrative-to-model/inlining.ts +106 -0
  531. package/src/transformers/narrative-to-model/integrations.ts +201 -0
  532. package/src/transformers/narrative-to-model/messages.ts +104 -0
  533. package/src/transformers/narrative-to-model/normalize.ts +27 -0
  534. package/src/transformers/narrative-to-model/spec-processors.ts +648 -0
  535. package/src/transformers/narrative-to-model/strings.ts +11 -0
  536. package/src/transformers/narrative-to-model/type-inference.specs.ts +176 -0
  537. package/src/transformers/narrative-to-model/type-inference.ts +127 -0
  538. package/src/transformers/narrative-to-model/zod-adapter.ts +110 -0
  539. package/src/types.ts +226 -0
  540. package/tsconfig.json +11 -0
  541. package/tsconfig.test.json +9 -0
@@ -0,0 +1,109 @@
1
+ import { flow, specs, rule, example } from '../narrative';
2
+ import { command, query, react } from '../fluent-builder';
3
+ import { type Event, type Command, type State } from '../types';
4
+
5
+ type TestItemCreated = Event<
6
+ 'TestItemCreated',
7
+ {
8
+ id: string;
9
+ name: string;
10
+ createdAt: Date;
11
+ }
12
+ >;
13
+
14
+ type CreateTestItem = Command<
15
+ 'CreateTestItem',
16
+ {
17
+ itemId: string;
18
+ name: string;
19
+ }
20
+ >;
21
+
22
+ type TestItemState = State<
23
+ 'TestItemState',
24
+ {
25
+ id: string;
26
+ name: string;
27
+ }
28
+ >;
29
+
30
+ flow('Test Flow with IDs', 'FLOW-001', () => {
31
+ command('Create test item', 'SLICE-001')
32
+ .client(() => {})
33
+ .server(() => {
34
+ specs('Test item creation specs', () => {
35
+ rule('Valid test items should be created successfully', 'RULE-001', () => {
36
+ example('User creates a new test item with valid data')
37
+ .when<CreateTestItem>({
38
+ itemId: 'test_123',
39
+ name: 'Test Item',
40
+ })
41
+ .then<TestItemCreated>({
42
+ id: 'test_123',
43
+ name: 'Test Item',
44
+ createdAt: new Date('2024-01-15T10:00:00Z'),
45
+ });
46
+ });
47
+
48
+ rule('Invalid test items should be rejected', 'RULE-002', () => {
49
+ example('User tries to create item with empty name')
50
+ .when<CreateTestItem>({
51
+ itemId: 'test_456',
52
+ name: '',
53
+ })
54
+ .then([
55
+ {
56
+ errorType: 'ValidationError' as const,
57
+ message: 'Item name cannot be empty',
58
+ },
59
+ ]);
60
+ });
61
+ });
62
+ });
63
+
64
+ query('Get test items', 'SLICE-002')
65
+ .client(() => {})
66
+ .server(() => {
67
+ specs('Test item retrieval specs', () => {
68
+ rule('Items should be retrievable after creation', 'RULE-003', () => {
69
+ example('Item becomes available after creation event')
70
+ .when<TestItemCreated>({
71
+ id: 'test_123',
72
+ name: 'Test Item',
73
+ createdAt: new Date('2024-01-15T10:00:00Z'),
74
+ })
75
+ .then<TestItemState>({
76
+ id: 'test_123',
77
+ name: 'Test Item',
78
+ });
79
+ });
80
+ });
81
+ });
82
+
83
+ react('React to test event', 'SLICE-003').server(() => {
84
+ specs('Test event reaction specs', () => {
85
+ rule('System should react to test item creation', 'RULE-004', () => {
86
+ example('Notification sent when test item is created')
87
+ .when([
88
+ {
89
+ eventRef: 'TestItemCreated',
90
+ exampleData: {
91
+ id: 'test_789',
92
+ name: 'Another Test Item',
93
+ createdAt: new Date('2024-01-16T10:00:00Z'),
94
+ },
95
+ },
96
+ ])
97
+ .then([
98
+ {
99
+ commandRef: 'SendNotification',
100
+ exampleData: {
101
+ message: 'New test item created: Another Test Item',
102
+ recipientId: 'admin',
103
+ },
104
+ },
105
+ ]);
106
+ });
107
+ });
108
+ });
109
+ });
@@ -0,0 +1,67 @@
1
+ import { DataSinkSchema, DataSourceSchema, MessageTargetSchema } from './schema';
2
+ import { sink, source } from './data-narrative-builders';
3
+
4
+ // Test that the builders produce output compatible with the schema
5
+ const testSink = sink().event('TestEvent').fields({ id: true }).toStream('test-${id}');
6
+
7
+ const testSource = source().state('TestState').fromProjection('TestProjection', 'id');
8
+
9
+ // Test new additionalInstructions functionality
10
+ const sinkWithInstructions = sink()
11
+ .event('TestEvent')
12
+ .additionalInstructions('Custom processing instructions')
13
+ .toStream('test-${id}');
14
+
15
+ const sourceWithInstructions = source()
16
+ .state('TestState')
17
+ .additionalInstructions('Custom query instructions')
18
+ .fromProjection('TestProjection', 'eventId');
19
+
20
+ // Test withState functionality for commands
21
+ const commandSinkWithState = sink()
22
+ .command('TestCommand')
23
+ .withState(testSource)
24
+ .additionalInstructions('Process with state context')
25
+ .toIntegration('TestIntegration', 'DoSomething', 'command');
26
+
27
+ console.log('Testing sink schema compatibility...');
28
+ const sinkResult = DataSinkSchema.safeParse(testSink);
29
+ console.log('Sink valid:', sinkResult.success);
30
+ if (!sinkResult.success) {
31
+ console.log('Sink errors:', sinkResult.error);
32
+ }
33
+
34
+ console.log('Testing source schema compatibility...');
35
+ const sourceResult = DataSourceSchema.safeParse(testSource);
36
+ console.log('Source valid:', sourceResult.success);
37
+ if (!sourceResult.success) {
38
+ console.log('Source errors:', sourceResult.error);
39
+ }
40
+
41
+ console.log('Testing message target schema compatibility...');
42
+ const targetResult = MessageTargetSchema.safeParse(testSink.target);
43
+ console.log('Target valid:', targetResult.success);
44
+ if (!targetResult.success) {
45
+ console.log('Target errors:', targetResult.error);
46
+ }
47
+
48
+ console.log('\nTesting sink with additional instructions...');
49
+ const sinkWithInstructionsResult = DataSinkSchema.safeParse(sinkWithInstructions);
50
+ console.log('Sink with instructions valid:', sinkWithInstructionsResult.success);
51
+ if (!sinkWithInstructionsResult.success) {
52
+ console.log('Sink with instructions errors:', sinkWithInstructionsResult.error);
53
+ }
54
+
55
+ console.log('\nTesting source with additional instructions...');
56
+ const sourceWithInstructionsResult = DataSourceSchema.safeParse(sourceWithInstructions);
57
+ console.log('Source with instructions valid:', sourceWithInstructionsResult.success);
58
+ if (!sourceWithInstructionsResult.success) {
59
+ console.log('Source with instructions errors:', sourceWithInstructionsResult.error);
60
+ }
61
+
62
+ console.log('\nTesting command sink with state...');
63
+ const commandSinkWithStateResult = DataSinkSchema.safeParse(commandSinkWithState);
64
+ console.log('Command sink with state valid:', commandSinkWithStateResult.success);
65
+ if (!commandSinkWithStateResult.success) {
66
+ console.log('Command sink with state errors:', commandSinkWithStateResult.error);
67
+ }
package/src/schema.ts ADDED
@@ -0,0 +1,398 @@
1
+ import { z } from 'zod';
2
+
3
+ const IntegrationSchema = z
4
+ .object({
5
+ name: z.string().describe('Integration name (e.g., MailChimp, Twilio)'),
6
+ description: z.string().optional(),
7
+ source: z.string().describe('integration module source (e.g., @auto-engineer/mailchimp-integration)'),
8
+ })
9
+ .describe('External service integration configuration');
10
+
11
+ // Data flow schemas for unified architecture
12
+ export const MessageTargetSchema = z
13
+ .object({
14
+ type: z.enum(['Event', 'Command', 'State']).describe('Type of message to target'),
15
+ name: z.string().describe('Name of the specific message'),
16
+ fields: z.record(z.unknown()).optional().describe('Field selector for partial message targeting'),
17
+ })
18
+ .describe('Target message with optional field selection');
19
+
20
+ export const DestinationSchema = z
21
+ .discriminatedUnion('type', [
22
+ z.object({
23
+ type: z.literal('stream'),
24
+ pattern: z.string().describe('Stream pattern with interpolation (e.g., listing-${propertyId})'),
25
+ }),
26
+ z.object({
27
+ type: z.literal('integration'),
28
+ systems: z.array(z.string()).describe('Integration names to send to'),
29
+ message: z
30
+ .object({
31
+ name: z.string(),
32
+ type: z.enum(['command', 'query', 'reaction']),
33
+ })
34
+ .optional(),
35
+ }),
36
+ z.object({
37
+ type: z.literal('database'),
38
+ collection: z.string().describe('Database collection name'),
39
+ }),
40
+ z.object({
41
+ type: z.literal('topic'),
42
+ name: z.string().describe('Message topic/queue name'),
43
+ }),
44
+ ])
45
+ .describe('Destination for outbound data');
46
+
47
+ export const OriginSchema = z
48
+ .discriminatedUnion('type', [
49
+ z.object({
50
+ type: z.literal('projection'),
51
+ name: z.string(),
52
+ idField: z.string().describe('Field from event used as the projection’s unique identifier'),
53
+ }),
54
+ z.object({
55
+ type: z.literal('readModel'),
56
+ name: z.string().describe('Read model name'),
57
+ }),
58
+ z.object({
59
+ type: z.literal('database'),
60
+ collection: z.string().describe('Database collection name'),
61
+ query: z.unknown().optional().describe('Optional query filter'),
62
+ }),
63
+ z.object({
64
+ type: z.literal('api'),
65
+ endpoint: z.string().describe('API endpoint URL'),
66
+ method: z.string().optional().describe('HTTP method (defaults to GET)'),
67
+ }),
68
+ z.object({
69
+ type: z.literal('integration'),
70
+ systems: z.array(z.string()),
71
+ }),
72
+ ])
73
+ .describe('Origin for inbound data');
74
+
75
+ const DataSinkSchema = z
76
+ .object({
77
+ target: MessageTargetSchema,
78
+ destination: DestinationSchema,
79
+ transform: z.string().optional().describe('Optional transformation function name'),
80
+ _additionalInstructions: z.string().optional().describe('Additional instructions'),
81
+ _withState: z
82
+ .lazy(() => DataSourceSchema)
83
+ .optional()
84
+ .describe('Optional state data source for command'),
85
+ })
86
+ .describe('Data sink configuration for outbound data flow');
87
+
88
+ const DataSourceSchema = z
89
+ .object({
90
+ target: MessageTargetSchema,
91
+ origin: OriginSchema,
92
+ transform: z.string().optional().describe('Optional transformation function name'),
93
+ _additionalInstructions: z.string().optional().describe('Additional instructions'),
94
+ })
95
+ .describe('Data source configuration for inbound data flow');
96
+
97
+ const MessageFieldSchema = z
98
+ .object({
99
+ name: z.string(),
100
+ type: z.string().describe('Field type (e.g., string, number, Date, UUID, etc.)'),
101
+ required: z.boolean().default(true),
102
+ description: z.string().optional(),
103
+ defaultValue: z.unknown().optional().describe('Default value for optional fields'),
104
+ })
105
+ .describe('Field definition for a message');
106
+
107
+ const BaseMessageSchema = z.object({
108
+ name: z.string().describe('Message name'),
109
+ fields: z.array(MessageFieldSchema),
110
+ description: z.string().optional(),
111
+ metadata: z
112
+ .object({
113
+ version: z.number().default(1).describe('Version number for schema evolution'),
114
+ })
115
+ .optional(),
116
+ });
117
+
118
+ const CommandSchema = BaseMessageSchema.extend({
119
+ type: z.literal('command'),
120
+ }).describe('Command that triggers state changes');
121
+
122
+ const EventSchema = BaseMessageSchema.extend({
123
+ type: z.literal('event'),
124
+ source: z.enum(['internal', 'external']).default('internal'),
125
+ }).describe('Event representing something that has happened');
126
+
127
+ const StateSchema = BaseMessageSchema.extend({
128
+ type: z.literal('state'),
129
+ }).describe('State/Read Model representing a view of data');
130
+
131
+ const MessageSchema = z.discriminatedUnion('type', [CommandSchema, EventSchema, StateSchema]);
132
+
133
+ export const EventExampleSchema = z
134
+ .object({
135
+ eventRef: z.string().describe('Reference to event message by name'),
136
+ exampleData: z.record(z.unknown()).describe('Example data matching the event schema'),
137
+ context: z.record(z.string()).optional().describe('Optional field descriptions and context'),
138
+ })
139
+ .describe('Event example with reference and data');
140
+
141
+ export const CommandExampleSchema = z
142
+ .object({
143
+ commandRef: z.string().describe('Reference to command message by name'),
144
+ exampleData: z.record(z.unknown()).describe('Example data matching the command schema'),
145
+ context: z.record(z.string()).optional().describe('Optional field descriptions and context'),
146
+ })
147
+ .describe('Command example with reference and data');
148
+
149
+ const StateExampleSchema = z
150
+ .object({
151
+ stateRef: z.string().describe('Reference to state message by name'),
152
+ exampleData: z.record(z.unknown()).describe('Example data matching the state schema'),
153
+ context: z.record(z.string()).optional().describe('Optional field descriptions and context'),
154
+ })
155
+ .describe('State example with reference and data');
156
+
157
+ const BaseSliceSchema = z
158
+ .object({
159
+ name: z.string(),
160
+ id: z.string().optional().describe('Optional unique identifier for the slice'),
161
+ description: z.string().optional(),
162
+ stream: z.string().optional().describe('Event stream pattern for this slice'),
163
+ via: z.array(z.string()).optional().describe('Integration names used by this slice'),
164
+ additionalInstructions: z.string().optional().describe('Additional instructions'),
165
+ })
166
+ .describe('Base properties shared by all slice types');
167
+
168
+ const ErrorExampleSchema = z
169
+ .object({
170
+ errorType: z.enum(['IllegalStateError', 'ValidationError', 'NotFoundError']).describe('Expected error'),
171
+ message: z.string().optional().describe('Optional error message'),
172
+ })
173
+ .describe('Error outcome');
174
+
175
+ const ExampleSchema = z
176
+ .object({
177
+ description: z.string().describe('Example description'),
178
+ given: z
179
+ .array(z.union([EventExampleSchema, StateExampleSchema]))
180
+ .optional()
181
+ .describe('Given conditions'),
182
+ when: z
183
+ .union([CommandExampleSchema, EventExampleSchema, z.array(CommandExampleSchema), z.array(EventExampleSchema)])
184
+ .describe('When action or events occur'),
185
+ then: z
186
+ .array(z.union([EventExampleSchema, StateExampleSchema, CommandExampleSchema, ErrorExampleSchema]))
187
+ .describe('Then expected outcomes'),
188
+ })
189
+ .describe('BDD example with given-when-then structure');
190
+
191
+ const RuleSchema = z
192
+ .object({
193
+ id: z.string().optional().describe('Optional rule identifier'),
194
+ description: z.string().describe('Rule description'),
195
+ examples: z.array(ExampleSchema).describe('Examples demonstrating the rule'),
196
+ })
197
+ .describe('Business rule with examples');
198
+
199
+ const SpecSchema = z
200
+ .object({
201
+ name: z.string().describe('Spec name/feature name'),
202
+ rules: z.array(RuleSchema).describe('Business rules for this spec'),
203
+ })
204
+ .describe('Specification with business rules');
205
+
206
+ const CommandSliceSchema = BaseSliceSchema.extend({
207
+ type: z.literal('command'),
208
+ client: z.object({
209
+ description: z.string(),
210
+ specs: z
211
+ .object({
212
+ name: z.string().describe('Spec group name'),
213
+ rules: z.array(z.string()).describe('UI specifications (should statements)'),
214
+ })
215
+ .optional()
216
+ .describe('Client-side specifications'),
217
+ }),
218
+ request: z.string().describe('Command request (GraphQL, REST endpoint, or other query format)').optional(),
219
+ server: z.object({
220
+ description: z.string(),
221
+ data: z.array(DataSinkSchema).optional().describe('Data sinks for command slices'),
222
+ specs: SpecSchema.describe('Server-side specifications with rules and examples'),
223
+ }),
224
+ }).describe('Command slice handling user actions and business logic');
225
+
226
+ const QuerySliceSchema = BaseSliceSchema.extend({
227
+ type: z.literal('query'),
228
+ client: z.object({
229
+ description: z.string(),
230
+ specs: z
231
+ .object({
232
+ name: z.string().describe('Spec group name'),
233
+ rules: z.array(z.string()).describe('UI specifications (should statements)'),
234
+ })
235
+ .optional()
236
+ .describe('Client-side specifications'),
237
+ }),
238
+ request: z.string().describe('Query request (GraphQL, REST endpoint, or other query format)').optional(),
239
+ server: z.object({
240
+ description: z.string(),
241
+ data: z.array(DataSourceSchema).optional().describe('Data sources for query slices'),
242
+ specs: SpecSchema.describe('Server-side specifications with rules and examples'),
243
+ }),
244
+ }).describe('Query slice for reading data and maintaining projections');
245
+
246
+ const ReactSliceSchema = BaseSliceSchema.extend({
247
+ type: z.literal('react'),
248
+ server: z.object({
249
+ description: z.string().optional(),
250
+ data: z
251
+ .array(z.union([DataSinkSchema, DataSourceSchema]))
252
+ .optional()
253
+ .describe('Data items for react slices (mix of sinks and sources)'),
254
+ specs: SpecSchema.describe('Server-side specifications with rules and examples'),
255
+ }),
256
+ }).describe('React slice for automated responses to events');
257
+
258
+ const ExperienceSliceSchema = BaseSliceSchema.extend({
259
+ type: z.literal('experience'),
260
+ client: z.object({
261
+ description: z.string().optional(),
262
+ specs: z
263
+ .object({
264
+ name: z.string().describe('Spec group name'),
265
+ rules: z.array(z.string()).describe('UI specifications (should statements)'),
266
+ })
267
+ .optional()
268
+ .describe('Client-side specifications'),
269
+ }),
270
+ }).describe('Experience slice for user interactions and UI behavior');
271
+
272
+ const SliceSchema = z.discriminatedUnion('type', [
273
+ CommandSliceSchema,
274
+ QuerySliceSchema,
275
+ ReactSliceSchema,
276
+ ExperienceSliceSchema,
277
+ ]);
278
+
279
+ const NarrativeSchema = z
280
+ .object({
281
+ name: z.string(),
282
+ id: z.string().optional().describe('Optional unique identifier for the narrative'),
283
+ description: z.string().optional(),
284
+ slices: z.array(SliceSchema),
285
+ sourceFile: z.string().optional(),
286
+ })
287
+ .describe('Business narrative containing related slices');
288
+
289
+ // Variant 1: Just narrative names
290
+ const NarrativeNamesOnlySchema = z
291
+ .object({
292
+ name: z.string(),
293
+ id: z.string().optional().describe('Optional unique identifier for the narrative'),
294
+ description: z.string().optional(),
295
+ })
296
+ .describe('Narrative with just name for initial planning');
297
+
298
+ // Variant 2: Narrative with slice names
299
+ const SliceNamesOnlySchema = z
300
+ .object({
301
+ name: z.string(),
302
+ id: z.string().optional().describe('Optional unique identifier for the slice'),
303
+ description: z.string().optional(),
304
+ type: z.enum(['command', 'query', 'react']),
305
+ })
306
+ .describe('Slice with just name and type for structure planning');
307
+
308
+ const NarrativeWithSliceNamesSchema = z
309
+ .object({
310
+ name: z.string(),
311
+ id: z.string().optional().describe('Optional unique identifier for the narrative'),
312
+ description: z.string().optional(),
313
+ slices: z.array(SliceNamesOnlySchema),
314
+ })
315
+ .describe('Narrative with slice names for structure planning');
316
+
317
+ // Variant 3: Narrative with client & server names
318
+ const ClientServerNamesSliceSchema = z
319
+ .object({
320
+ name: z.string(),
321
+ id: z.string().optional().describe('Optional unique identifier for the slice'),
322
+ type: z.enum(['command', 'query', 'react']),
323
+ description: z.string().optional(),
324
+ client: z
325
+ .object({
326
+ description: z.string(),
327
+ })
328
+ .optional(),
329
+ server: z
330
+ .object({
331
+ description: z.string(),
332
+ })
333
+ .optional(),
334
+ })
335
+ .describe('Slice with client/server descriptions for behavior planning');
336
+
337
+ const NarrativeWithClientServerNamesSchema = z
338
+ .object({
339
+ name: z.string(),
340
+ id: z.string().optional().describe('Optional unique identifier for the narrative'),
341
+ description: z.string().optional(),
342
+ slices: z.array(ClientServerNamesSliceSchema),
343
+ })
344
+ .describe('Narrative with client/server descriptions for behavior planning');
345
+
346
+ // Variant 4: Full specs (uses existing schemas)
347
+
348
+ export const NarrativeNamesSchema = z
349
+ .object({
350
+ variant: z.literal('narrative-names').describe('Just narrative names for initial ideation'),
351
+ narratives: z.array(NarrativeNamesOnlySchema),
352
+ })
353
+ .describe('System with just flow names for initial planning');
354
+
355
+ export const SliceNamesSchema = z
356
+ .object({
357
+ variant: z.literal('slice-names').describe('Narratives with slice names for structure planning'),
358
+ narratives: z.array(NarrativeWithSliceNamesSchema),
359
+ })
360
+ .describe('System with narrative and slice names for structure planning');
361
+
362
+ export const ClientServerNamesSchema = z
363
+ .object({
364
+ variant: z.literal('client-server-names').describe('Narratives with client/server descriptions'),
365
+ narratives: z.array(NarrativeWithClientServerNamesSchema),
366
+ })
367
+ .describe('System with client/server descriptions for behavior planning');
368
+
369
+ export const modelSchema = z
370
+ .object({
371
+ variant: z.literal('specs').describe('Full specification with all details'),
372
+ narratives: z.array(NarrativeSchema),
373
+ messages: z.array(MessageSchema),
374
+ integrations: z.array(IntegrationSchema).optional(),
375
+ })
376
+ .describe('Complete system specification with all implementation details');
377
+
378
+ export {
379
+ StateExampleSchema,
380
+ MessageFieldSchema,
381
+ ErrorExampleSchema,
382
+ MessageSchema,
383
+ CommandSchema,
384
+ EventSchema,
385
+ StateSchema,
386
+ IntegrationSchema,
387
+ CommandSliceSchema,
388
+ QuerySliceSchema,
389
+ ReactSliceSchema,
390
+ ExperienceSliceSchema,
391
+ SliceSchema,
392
+ NarrativeSchema,
393
+ ExampleSchema,
394
+ RuleSchema,
395
+ SpecSchema,
396
+ DataSinkSchema,
397
+ DataSourceSchema,
398
+ };
@@ -0,0 +1,100 @@
1
+ import type { Integration } from './types';
2
+ import { getCurrentNarrative, addSlice } from './narrative-context';
3
+ import type { CommandSlice, QuerySlice, ReactSlice } from './index';
4
+
5
+ export interface SliceConfig {
6
+ integration?: Integration;
7
+ eventStream?: string;
8
+ retries?: number;
9
+ }
10
+
11
+ export interface SliceBuilder {
12
+ via(integrationOrStream: Integration | string): SliceBuilder;
13
+
14
+ retries(count: number): SliceBuilder;
15
+
16
+ stream(eventStream: string): SliceBuilder;
17
+
18
+ command(name: string, fn: () => void): void;
19
+
20
+ query(name: string, fn: () => void): void;
21
+
22
+ reaction(name: string, fn: () => void): void;
23
+ }
24
+
25
+ export const createSliceBuilder = (config: SliceConfig = {}): SliceBuilder => ({
26
+ via(integrationOrStream: Integration | string): SliceBuilder {
27
+ if (typeof integrationOrStream === 'string') {
28
+ return createSliceBuilder({ ...config, eventStream: integrationOrStream });
29
+ } else {
30
+ return createSliceBuilder({ ...config, integration: integrationOrStream });
31
+ }
32
+ },
33
+
34
+ retries(count: number): SliceBuilder {
35
+ return createSliceBuilder({ ...config, retries: count });
36
+ },
37
+
38
+ stream(eventStream: string): SliceBuilder {
39
+ return createSliceBuilder({ ...config, eventStream });
40
+ },
41
+
42
+ command(name: string, fn: () => void) {
43
+ const flow = getCurrentNarrative();
44
+ if (!flow) throw new Error('No active flow');
45
+
46
+ // Create a properly typed command slice
47
+ const slice: CommandSlice = {
48
+ type: 'command',
49
+ name,
50
+ client: { description: '', specs: undefined },
51
+ server: { description: '', specs: { name: '', rules: [] }, data: undefined },
52
+ // Optional fields
53
+ ...(config.eventStream != null && { stream: config.eventStream }),
54
+ ...(config.integration && { via: [config.integration.name] }),
55
+ ...(config.retries != null && { additionalInstructions: `retries: ${config.retries}` }),
56
+ };
57
+ addSlice(slice);
58
+ fn();
59
+ },
60
+
61
+ query(name: string, fn: () => void) {
62
+ const flow = getCurrentNarrative();
63
+ if (!flow) throw new Error('No active flow');
64
+
65
+ // Create a properly typed query slice
66
+ const slice: QuerySlice = {
67
+ type: 'query',
68
+ name,
69
+ client: { description: '', specs: undefined },
70
+ server: { description: '', specs: { name: '', rules: [] }, data: undefined },
71
+ // Optional fields
72
+ ...(config.eventStream != null && { stream: config.eventStream }),
73
+ ...(config.integration && { via: [config.integration.name] }),
74
+ ...(config.retries != null && { additionalInstructions: `retries: ${config.retries}` }),
75
+ };
76
+
77
+ addSlice(slice);
78
+
79
+ // Execute the function which will populate client/server blocks
80
+ fn();
81
+ },
82
+
83
+ reaction(name: string, fn: () => void) {
84
+ const flow = getCurrentNarrative();
85
+ if (!flow) throw new Error('No active flow');
86
+
87
+ // Create a properly typed react slice (note: 'reaction' -> 'react' for schema compliance)
88
+ const slice: ReactSlice = {
89
+ type: 'react',
90
+ name,
91
+ server: { specs: { name: '', rules: [] }, data: undefined },
92
+ // Optional fields
93
+ ...(config.eventStream != null && { stream: config.eventStream }),
94
+ ...(config.integration && { via: [config.integration.name] }),
95
+ ...(config.retries != null && { additionalInstructions: `retries: ${config.retries}` }),
96
+ };
97
+ addSlice(slice);
98
+ fn();
99
+ },
100
+ });