@substrate-ai/factory 0.19.54 → 0.20.2

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 (491) hide show
  1. package/README.md +39 -0
  2. package/dist/config.d.ts +4 -4
  3. package/package.json +12 -3
  4. package/dist/__tests__/config.test.d.ts +0 -11
  5. package/dist/__tests__/config.test.d.ts.map +0 -1
  6. package/dist/__tests__/config.test.js +0 -215
  7. package/dist/__tests__/config.test.js.map +0 -1
  8. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  9. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  10. package/dist/__tests__/factory-run-command.test.js +0 -454
  11. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  12. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  13. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  14. package/dist/__tests__/factory-validate-command.test.js +0 -339
  15. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  19. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  23. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  25. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  26. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  27. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  31. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  35. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  37. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  38. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  39. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  41. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  42. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  43. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  45. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  46. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  47. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  49. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  51. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  55. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  59. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  63. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  64. package/dist/__tests__/integration/events.test.d.ts +0 -8
  65. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  66. package/dist/__tests__/integration/events.test.js +0 -194
  67. package/dist/__tests__/integration/events.test.js.map +0 -1
  68. package/dist/__tests__/integration/graphs.d.ts +0 -59
  69. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  70. package/dist/__tests__/integration/graphs.js +0 -164
  71. package/dist/__tests__/integration/graphs.js.map +0 -1
  72. package/dist/__tests__/integration/helpers.d.ts +0 -127
  73. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  74. package/dist/__tests__/integration/helpers.js +0 -167
  75. package/dist/__tests__/integration/helpers.js.map +0 -1
  76. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  77. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/integrity.test.js +0 -198
  79. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  81. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  83. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  84. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  85. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  87. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  89. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  91. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  95. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  96. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  97. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  98. package/dist/__tests__/integration/persistence.test.js +0 -129
  99. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  103. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  105. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  107. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  109. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  111. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  113. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  115. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  116. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  117. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  119. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  120. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  121. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  122. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  123. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  124. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  125. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  126. package/dist/agent/__tests__/loop.test.js +0 -868
  127. package/dist/agent/__tests__/loop.test.js.map +0 -1
  128. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  129. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  130. package/dist/agent/__tests__/truncation.test.js +0 -276
  131. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  135. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  136. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  137. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  138. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  139. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  141. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  143. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  145. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  146. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  147. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  148. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  149. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  150. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  151. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  153. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  154. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  155. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  156. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  157. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  158. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  159. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  160. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  161. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  162. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  163. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  164. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  165. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  166. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  167. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  169. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  170. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  171. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  172. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  173. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  174. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  175. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  176. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  177. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  178. package/dist/backend/__tests__/parity.test.js +0 -411
  179. package/dist/backend/__tests__/parity.test.js.map +0 -1
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  181. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  182. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  183. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  184. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  185. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  186. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  187. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  189. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  191. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  192. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  193. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  194. package/dist/context/__tests__/summarizer.test.js +0 -189
  195. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  196. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  197. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  198. package/dist/context/__tests__/summary-cache.test.js +0 -214
  199. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  200. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  201. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  202. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  203. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  204. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  205. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  206. package/dist/context/__tests__/summary-types.test.js +0 -130
  207. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  208. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  209. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  210. package/dist/convergence/__tests__/budget.test.js +0 -187
  211. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  212. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  213. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  214. package/dist/convergence/__tests__/controller.test.js +0 -585
  215. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  217. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  218. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  219. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  221. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  222. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  223. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  224. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  225. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  226. package/dist/convergence/__tests__/plateau.test.js +0 -163
  227. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  228. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  229. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  230. package/dist/convergence/__tests__/remediation.test.js +0 -209
  231. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  233. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  234. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  235. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  236. package/dist/factory-command.test.d.ts +0 -8
  237. package/dist/factory-command.test.d.ts.map +0 -1
  238. package/dist/factory-command.test.js +0 -304
  239. package/dist/factory-command.test.js.map +0 -1
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  241. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  242. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  243. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  244. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  245. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  246. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  247. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  248. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  249. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  250. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  251. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  252. package/dist/graph/__tests__/context.test.d.ts +0 -14
  253. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  254. package/dist/graph/__tests__/context.test.js +0 -276
  255. package/dist/graph/__tests__/context.test.js.map +0 -1
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  257. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  258. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  259. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  260. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  261. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  262. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  263. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  265. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  266. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  267. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  269. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  270. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  271. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  272. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  273. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  274. package/dist/graph/__tests__/executor.test.js +0 -901
  275. package/dist/graph/__tests__/executor.test.js.map +0 -1
  276. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  277. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  278. package/dist/graph/__tests__/fidelity.test.js +0 -135
  279. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  281. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  282. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  283. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  285. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  286. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  287. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  288. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  289. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  290. package/dist/graph/__tests__/parser.test.js +0 -452
  291. package/dist/graph/__tests__/parser.test.js.map +0 -1
  292. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  293. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  294. package/dist/graph/__tests__/run-state.test.js +0 -189
  295. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  296. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  297. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  298. package/dist/graph/__tests__/transformer.test.js +0 -350
  299. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  300. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  301. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  302. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  303. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  305. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  306. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  307. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  309. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  310. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  311. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  312. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  313. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  314. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  315. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  316. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  317. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  318. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  319. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  321. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  322. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  323. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  325. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  326. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  327. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  329. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  330. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  331. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  333. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  334. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  335. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  336. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  337. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  338. package/dist/handlers/__tests__/registry.test.js +0 -315
  339. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  341. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  342. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  343. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  347. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  348. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  349. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  350. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  351. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  353. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  354. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  355. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  357. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  358. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  359. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  361. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  362. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  363. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  364. package/dist/llm/__tests__/client.test.d.ts +0 -2
  365. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  366. package/dist/llm/__tests__/client.test.js +0 -198
  367. package/dist/llm/__tests__/client.test.js.map +0 -1
  368. package/dist/llm/__tests__/types.test.d.ts +0 -2
  369. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/llm/__tests__/types.test.js +0 -289
  371. package/dist/llm/__tests__/types.test.js.map +0 -1
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  375. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  377. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  378. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  379. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  381. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  382. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  383. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  385. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  386. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  387. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  389. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  390. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  391. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  392. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  393. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  394. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  395. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  397. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  398. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  399. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  401. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  402. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  403. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  405. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  406. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  407. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  409. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  410. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  411. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  415. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  417. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  418. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  419. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  420. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  421. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  422. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  423. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  425. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  426. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  427. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  428. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  429. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  430. package/dist/scenarios/__tests__/store.test.js +0 -169
  431. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  433. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  434. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  435. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  436. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  437. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  438. package/dist/templates/__tests__/templates.test.js +0 -92
  439. package/dist/templates/__tests__/templates.test.js.map +0 -1
  440. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  441. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  442. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  443. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  444. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  445. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  446. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  447. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  449. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  450. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  451. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  452. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
  453. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
  454. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
  455. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
  456. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  457. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  458. package/dist/twins/__tests__/integration/helpers.js +0 -67
  459. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  460. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  461. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  462. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  463. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  464. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  465. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  466. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  467. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  468. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  469. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  470. package/dist/twins/__tests__/persistence.test.js +0 -300
  471. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  472. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  473. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  474. package/dist/twins/__tests__/registry.test.js +0 -282
  475. package/dist/twins/__tests__/registry.test.js.map +0 -1
  476. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  477. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  478. package/dist/twins/__tests__/run-state.test.js +0 -112
  479. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  480. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  481. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  482. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  483. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  484. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  485. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  486. package/dist/twins/__tests__/templates.test.js +0 -87
  487. package/dist/twins/__tests__/templates.test.js.map +0 -1
  488. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  489. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  490. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  491. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1,129 +0,0 @@
1
- /**
2
- * Integration tests: Database persistence (Story 44-10 AC4).
3
- *
4
- * Verifies that scenario_results rows are persisted correctly after each
5
- * validation node execution, using an in-memory DatabaseAdapter.
6
- */
7
- import { describe, it, expect, beforeEach } from 'vitest';
8
- import { createDatabaseAdapter } from '@substrate-ai/core';
9
- import { factorySchema } from '../../persistence/factory-schema.js';
10
- import { computeSatisfactionScore } from '../../scenarios/scorer.js';
11
- import { buildScenarioRunResult } from './helpers.js';
12
- // ---------------------------------------------------------------------------
13
- // Setup
14
- // ---------------------------------------------------------------------------
15
- let adapter;
16
- beforeEach(async () => {
17
- adapter = createDatabaseAdapter({ backend: 'memory' });
18
- await factorySchema(adapter);
19
- // Insert a parent graph_runs row (required by foreign key constraint)
20
- await adapter.exec(`
21
- INSERT INTO graph_runs (id, graph_file, status, started_at, total_cost_usd, node_count)
22
- VALUES ('test-run-1', 'pipeline.dot', 'running', CURRENT_TIMESTAMP, 0.0, 5)
23
- `);
24
- });
25
- // ---------------------------------------------------------------------------
26
- // AC4: scenario_results persistence
27
- // ---------------------------------------------------------------------------
28
- describe('scenario_results persistence (AC4)', () => {
29
- it('AC4a: row inserted for iteration 1 (2/3 pass) is queryable with correct columns', async () => {
30
- const result = buildScenarioRunResult(2, 3);
31
- const score = computeSatisfactionScore(result);
32
- await adapter.exec(`
33
- INSERT INTO scenario_results
34
- (run_id, node_id, iteration, total_scenarios, passed, failed,
35
- satisfaction_score, threshold, passes, executed_at)
36
- VALUES ('test-run-1', 'validate', 1, 3, 2, 1, ${score.score}, ${score.threshold}, ${score.passes ? 1 : 0}, CURRENT_TIMESTAMP)
37
- `);
38
- const rows = await adapter.query('SELECT * FROM scenario_results WHERE run_id = ?', ['test-run-1']);
39
- expect(rows).toHaveLength(1);
40
- expect(rows[0]?.passed).toBe(2);
41
- expect(rows[0]?.failed).toBe(1);
42
- expect(rows[0]?.total_scenarios).toBe(3);
43
- expect(rows[0]?.satisfaction_score).toBeCloseTo(2 / 3, 5);
44
- expect(rows[0]?.passes).toBe(0); // 0.667 < 0.8 → false (stored as 0)
45
- });
46
- it('AC4b: iteration 2 row (3/3 pass) has satisfaction_score = 1.0 and passes = 1', async () => {
47
- const result2 = buildScenarioRunResult(3, 3);
48
- const score2 = computeSatisfactionScore(result2);
49
- await adapter.exec(`
50
- INSERT INTO scenario_results
51
- (run_id, node_id, iteration, total_scenarios, passed, failed,
52
- satisfaction_score, threshold, passes, executed_at)
53
- VALUES ('test-run-1', 'validate', 2, 3, 3, 0, ${score2.score}, ${score2.threshold}, ${score2.passes ? 1 : 0}, CURRENT_TIMESTAMP)
54
- `);
55
- const rows = await adapter.query('SELECT satisfaction_score, passes FROM scenario_results WHERE run_id = ?', ['test-run-1']);
56
- expect(rows[0]?.satisfaction_score).toBe(1.0);
57
- expect(rows[0]?.passes).toBe(1);
58
- });
59
- it('AC4c: two iterations inserted and queried in order', async () => {
60
- const result1 = buildScenarioRunResult(2, 3);
61
- const score1 = computeSatisfactionScore(result1);
62
- const result2 = buildScenarioRunResult(3, 3);
63
- const score2 = computeSatisfactionScore(result2);
64
- await adapter.exec(`
65
- INSERT INTO scenario_results
66
- (run_id, node_id, iteration, total_scenarios, passed, failed,
67
- satisfaction_score, threshold, passes, executed_at)
68
- VALUES ('test-run-1', 'validate', 1, 3, 2, 1, ${score1.score}, ${score1.threshold}, ${score1.passes ? 1 : 0}, CURRENT_TIMESTAMP)
69
- `);
70
- await adapter.exec(`
71
- INSERT INTO scenario_results
72
- (run_id, node_id, iteration, total_scenarios, passed, failed,
73
- satisfaction_score, threshold, passes, executed_at)
74
- VALUES ('test-run-1', 'validate', 2, 3, 3, 0, ${score2.score}, ${score2.threshold}, ${score2.passes ? 1 : 0}, CURRENT_TIMESTAMP)
75
- `);
76
- const rows = await adapter.query('SELECT iteration FROM scenario_results WHERE run_id = ? ORDER BY iteration', ['test-run-1']);
77
- expect(rows).toHaveLength(2);
78
- expect(rows[0]?.iteration).toBe(1);
79
- expect(rows[1]?.iteration).toBe(2);
80
- });
81
- it('AC4d: node_id column is stored and queryable', async () => {
82
- const result = buildScenarioRunResult(2, 3);
83
- const score = computeSatisfactionScore(result);
84
- await adapter.exec(`
85
- INSERT INTO scenario_results
86
- (run_id, node_id, iteration, total_scenarios, passed, failed,
87
- satisfaction_score, threshold, passes, executed_at)
88
- VALUES ('test-run-1', 'validate', 1, 3, 2, 1, ${score.score}, ${score.threshold}, 0, CURRENT_TIMESTAMP)
89
- `);
90
- const rows = await adapter.query('SELECT node_id FROM scenario_results WHERE run_id = ?', ['test-run-1']);
91
- expect(rows[0]?.node_id).toBe('validate');
92
- });
93
- it('AC4e: threshold defaults to 0.8 when not explicitly overridden', async () => {
94
- // Insert without specifying threshold — column DEFAULT is 0.8
95
- await adapter.exec(`
96
- INSERT INTO scenario_results
97
- (run_id, node_id, iteration, total_scenarios, passed, failed,
98
- satisfaction_score, passes, executed_at)
99
- VALUES ('test-run-1', 'validate', 1, 3, 2, 1, 0.667, 0, CURRENT_TIMESTAMP)
100
- `);
101
- const rows = await adapter.query('SELECT threshold FROM scenario_results WHERE run_id = ?', ['test-run-1']);
102
- expect(rows[0]?.threshold).toBe(0.8);
103
- });
104
- it('AC4f: details column accepts NULL (omitted on insert)', async () => {
105
- const result = buildScenarioRunResult(2, 3);
106
- const score = computeSatisfactionScore(result);
107
- await adapter.exec(`
108
- INSERT INTO scenario_results
109
- (run_id, node_id, iteration, total_scenarios, passed, failed,
110
- satisfaction_score, passes, executed_at)
111
- VALUES ('test-run-1', 'validate', 1, 3, 2, 1, ${score.score}, 0, CURRENT_TIMESTAMP)
112
- `);
113
- const rows = await adapter.query('SELECT details FROM scenario_results WHERE run_id = ?', ['test-run-1']);
114
- // details should be null when omitted
115
- expect(rows[0]?.details == null).toBe(true);
116
- });
117
- it('AC4f-json: details column accepts a JSON string when provided', async () => {
118
- const detailsJson = JSON.stringify({ note: 'all critical paths covered' });
119
- await adapter.exec(`
120
- INSERT INTO scenario_results
121
- (run_id, node_id, iteration, total_scenarios, passed, failed,
122
- satisfaction_score, passes, details, executed_at)
123
- VALUES ('test-run-1', 'validate', 1, 3, 3, 0, 1.0, 1, '${detailsJson}', CURRENT_TIMESTAMP)
124
- `);
125
- const rows = await adapter.query('SELECT details FROM scenario_results WHERE run_id = ?', ['test-run-1']);
126
- expect(rows[0]?.details).toBe(detailsJson);
127
- });
128
- });
129
- //# sourceMappingURL=persistence.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/persistence.test.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Integration tests for pipeline template catalog.
3
- * Story 50-11 AC6.
4
- *
5
- * Tests cover:
6
- * - listPipelineTemplates() returns all 4 built-in templates
7
- * - getPipelineTemplate(name) retrieves named template or returns undefined
8
- * - Every template's DOT content is parseable without error
9
- * - Template node types match expected graph structure
10
- * - Specific template structures (parallel nodes, eval gates, stages)
11
- * - Execute a simple template through the graph executor → SUCCESS
12
- *
13
- * ≥7 `it(...)` cases required (AC7).
14
- */
15
- export {};
16
- //# sourceMappingURL=pipeline-templates-integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline-templates-integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/pipeline-templates-integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -1,171 +0,0 @@
1
- /**
2
- * Integration tests for pipeline template catalog.
3
- * Story 50-11 AC6.
4
- *
5
- * Tests cover:
6
- * - listPipelineTemplates() returns all 4 built-in templates
7
- * - getPipelineTemplate(name) retrieves named template or returns undefined
8
- * - Every template's DOT content is parseable without error
9
- * - Template node types match expected graph structure
10
- * - Specific template structures (parallel nodes, eval gates, stages)
11
- * - Execute a simple template through the graph executor → SUCCESS
12
- *
13
- * ≥7 `it(...)` cases required (AC7).
14
- */
15
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
16
- import os from 'node:os';
17
- import path from 'node:path';
18
- import { mkdir, rm } from 'node:fs/promises';
19
- import crypto from 'node:crypto';
20
- import { listPipelineTemplates, getPipelineTemplate } from '../../templates/index.js';
21
- import { parseGraph } from '../../graph/parser.js';
22
- import { createGraphExecutor } from '../../graph/executor.js';
23
- import { HandlerRegistry } from '../../handlers/registry.js';
24
- import { startHandler } from '../../handlers/start.js';
25
- import { exitHandler } from '../../handlers/exit.js';
26
- import { createParallelHandler } from '../../handlers/parallel.js';
27
- import { createFanInHandler } from '../../handlers/fan-in.js';
28
- // ---------------------------------------------------------------------------
29
- // Helpers
30
- // ---------------------------------------------------------------------------
31
- async function makeTmpDir() {
32
- const dir = path.join(os.tmpdir(), `templates-test-${crypto.randomUUID()}`);
33
- await mkdir(dir, { recursive: true });
34
- return dir;
35
- }
36
- async function cleanDir(dir) {
37
- await rm(dir, { recursive: true, force: true });
38
- }
39
- /** Build a registry that handles all node types used by built-in templates. */
40
- function makeTemplateRegistry() {
41
- const registry = new HandlerRegistry();
42
- registry.register('start', startHandler);
43
- registry.register('exit', exitHandler);
44
- registry.register('parallel', createParallelHandler({ handlerRegistry: registry }));
45
- registry.register('parallel.fan_in', createFanInHandler());
46
- // codergen nodes (and any other type) return SUCCESS
47
- registry.setDefault(vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
48
- return registry;
49
- }
50
- // ---------------------------------------------------------------------------
51
- // AC6: Template catalog API
52
- // ---------------------------------------------------------------------------
53
- describe('pipeline templates — catalog API', () => {
54
- it('listPipelineTemplates() returns exactly 4 templates', () => {
55
- const templates = listPipelineTemplates();
56
- expect(templates).toHaveLength(4);
57
- });
58
- it('getPipelineTemplate returns all 4 known templates by name', () => {
59
- const names = ['trycycle', 'dual-review', 'parallel-exploration', 'staged-validation'];
60
- for (const name of names) {
61
- const t = getPipelineTemplate(name);
62
- expect(t, `Expected template "${name}" to be defined`).toBeDefined();
63
- expect(t.name).toBe(name);
64
- }
65
- });
66
- it('getPipelineTemplate returns undefined for unknown template name', () => {
67
- expect(getPipelineTemplate('not-a-real-template')).toBeUndefined();
68
- expect(getPipelineTemplate('')).toBeUndefined();
69
- expect(getPipelineTemplate('TRYCYCLE')).toBeUndefined(); // case-sensitive
70
- });
71
- it('every template has a non-empty name, description, and dotContent', () => {
72
- for (const t of listPipelineTemplates()) {
73
- expect(t.name.trim()).not.toBe('');
74
- expect(t.description.trim()).not.toBe('');
75
- expect(t.dotContent.trim()).not.toBe('');
76
- }
77
- });
78
- });
79
- // ---------------------------------------------------------------------------
80
- // AC6: DOT content parseability
81
- // ---------------------------------------------------------------------------
82
- describe('pipeline templates — DOT content is valid and parseable', () => {
83
- it('all 4 template DOT strings parse without throwing', () => {
84
- for (const t of listPipelineTemplates()) {
85
- expect(() => parseGraph(t.dotContent), `Template "${t.name}" should parse`).not.toThrow();
86
- }
87
- });
88
- it('all 4 templates have both a start and exit node after parsing', () => {
89
- for (const t of listPipelineTemplates()) {
90
- const graph = parseGraph(t.dotContent);
91
- const types = Array.from(graph.nodes.values()).map((n) => n.type);
92
- expect(types, `Template "${t.name}" should have start node`).toContain('start');
93
- expect(types, `Template "${t.name}" should have exit node`).toContain('exit');
94
- }
95
- });
96
- it('dual-review template contains parallel and parallel.fan_in node types', () => {
97
- const t = getPipelineTemplate('dual-review');
98
- const graph = parseGraph(t.dotContent);
99
- const types = Array.from(graph.nodes.values()).map((n) => n.type);
100
- expect(types).toContain('parallel');
101
- expect(types).toContain('parallel.fan_in');
102
- });
103
- it('parallel-exploration template has parallel and parallel.fan_in node types', () => {
104
- const t = getPipelineTemplate('parallel-exploration');
105
- const graph = parseGraph(t.dotContent);
106
- const types = Array.from(graph.nodes.values()).map((n) => n.type);
107
- expect(types).toContain('parallel');
108
- expect(types).toContain('parallel.fan_in');
109
- });
110
- it('trycycle template has revision_needed and approved labeled edges (eval gates)', () => {
111
- const t = getPipelineTemplate('trycycle');
112
- const graph = parseGraph(t.dotContent);
113
- const labels = graph.edges.map((e) => e.label);
114
- expect(labels).toContain('revision_needed');
115
- expect(labels).toContain('approved');
116
- });
117
- it('staged-validation template has 4 codergen nodes (implement/lint/test/validate)', () => {
118
- const t = getPipelineTemplate('staged-validation');
119
- const graph = parseGraph(t.dotContent);
120
- const codergenNodes = Array.from(graph.nodes.values()).filter((n) => n.type === 'codergen');
121
- expect(codergenNodes.length).toBe(4);
122
- const ids = codergenNodes.map((n) => n.id);
123
- expect(ids).toContain('implement');
124
- expect(ids).toContain('lint');
125
- expect(ids).toContain('test');
126
- expect(ids).toContain('validate');
127
- });
128
- });
129
- // ---------------------------------------------------------------------------
130
- // AC6: Template execution
131
- // ---------------------------------------------------------------------------
132
- describe('pipeline templates — execution via graph executor', () => {
133
- let logsRoot;
134
- beforeEach(async () => {
135
- logsRoot = await makeTmpDir();
136
- });
137
- afterEach(async () => {
138
- await cleanDir(logsRoot);
139
- });
140
- it('staged-validation template executes end-to-end and returns SUCCESS', async () => {
141
- const t = getPipelineTemplate('staged-validation');
142
- const graph = parseGraph(t.dotContent);
143
- const registry = makeTemplateRegistry();
144
- const result = await createGraphExecutor().run(graph, {
145
- runId: 'staged-val-test',
146
- logsRoot,
147
- handlerRegistry: registry,
148
- });
149
- expect(result.status).toBe('SUCCESS');
150
- });
151
- it('dual-review template executes end-to-end and returns SUCCESS', async () => {
152
- const t = getPipelineTemplate('dual-review');
153
- const graph = parseGraph(t.dotContent);
154
- const registry = makeTemplateRegistry();
155
- const result = await createGraphExecutor().run(graph, {
156
- runId: 'dual-review-test',
157
- logsRoot,
158
- handlerRegistry: registry,
159
- });
160
- expect(result.status).toBe('SUCCESS');
161
- });
162
- it('trycycle template has two evaluation nodes (eval_plan and eval_impl)', () => {
163
- const t = getPipelineTemplate('trycycle');
164
- const graph = parseGraph(t.dotContent);
165
- expect(graph.nodes.has('eval_plan')).toBe(true);
166
- expect(graph.nodes.has('eval_impl')).toBe(true);
167
- expect(graph.nodes.get('eval_plan').type).toBe('codergen');
168
- expect(graph.nodes.get('eval_impl').type).toBe('codergen');
169
- });
170
- });
171
- //# sourceMappingURL=pipeline-templates-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline-templates-integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/pipeline-templates-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Integration tests: Scenario routing and convergence (Story 44-10 AC1, AC2).
3
- *
4
- * Verifies that the full pipeline — parse → validate → tool handler → edge routing — works
5
- * end-to-end with a mocked child_process.spawn:
6
- *
7
- * AC1: 2/3 pass → satisfaction_score ≈ 0.667 → condition false → route → implement (retry)
8
- * AC2: 3/3 pass on second iteration → satisfaction_score = 1.0 → route → exit (converges)
9
- */
10
- export {};
11
- //# sourceMappingURL=scenario-pipeline.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario-pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/scenario-pipeline.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,243 +0,0 @@
1
- /**
2
- * Integration tests: Scenario routing and convergence (Story 44-10 AC1, AC2).
3
- *
4
- * Verifies that the full pipeline — parse → validate → tool handler → edge routing — works
5
- * end-to-end with a mocked child_process.spawn:
6
- *
7
- * AC1: 2/3 pass → satisfaction_score ≈ 0.667 → condition false → route → implement (retry)
8
- * AC2: 3/3 pass on second iteration → satisfaction_score = 1.0 → route → exit (converges)
9
- */
10
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
11
- // vi.mock is hoisted automatically — must appear before imports that use spawn
12
- // Use importOriginal to preserve exec/execFile/etc. — @substrate-ai/core uses them
13
- vi.mock('child_process', async (importOriginal) => {
14
- const actual = await importOriginal();
15
- return {
16
- ...actual,
17
- spawn: vi.fn(),
18
- };
19
- });
20
- import { spawn } from 'child_process';
21
- import { parseGraph } from '../../graph/parser.js';
22
- import { createValidator } from '../../graph/validator.js';
23
- import { createGraphExecutor } from '../../graph/executor.js';
24
- import { HandlerRegistry } from '../../handlers/registry.js';
25
- import { startHandler } from '../../handlers/start.js';
26
- import { exitHandler } from '../../handlers/exit.js';
27
- import { conditionalHandler } from '../../handlers/conditional.js';
28
- import { createToolHandler } from '../../handlers/tool.js';
29
- import { evaluateCondition } from '../../graph/condition-parser.js';
30
- import { makeTmpDir, cleanDir, makeEventSpy, buildScenarioRunResult, createMockSpawnProcess, readFixtureDot, } from './helpers.js';
31
- // ---------------------------------------------------------------------------
32
- // Helpers
33
- // ---------------------------------------------------------------------------
34
- const mockSpawn = vi.mocked(spawn);
35
- /** Create a registry suitable for scenario pipeline integration tests.
36
- *
37
- * - start/exit/conditional use real handlers
38
- * - tool nodes use the real tool handler (spawn is mocked at module level)
39
- * - codergen (box shape) / default use a synchronous mock SUCCESS handler
40
- */
41
- function createTestRegistry() {
42
- const registry = new HandlerRegistry();
43
- // Real handlers for structural nodes
44
- registry.register('start', startHandler);
45
- registry.register('exit', exitHandler);
46
- registry.register('conditional', conditionalHandler);
47
- // Real tool handler — child_process.spawn is mocked in this module
48
- registry.register('tool', createToolHandler());
49
- // Mock handler for codergen / unrecognised nodes (e.g. implement [shape=box])
50
- const mockSuccess = async () => ({ status: 'SUCCESS' });
51
- registry.register('codergen', mockSuccess);
52
- // Shape mappings
53
- registry.registerShape('Mdiamond', 'start');
54
- registry.registerShape('Msquare', 'exit');
55
- registry.registerShape('diamond', 'conditional');
56
- registry.registerShape('box', 'codergen');
57
- registry.registerShape('parallelogram', 'tool');
58
- // Default fallback: mock success
59
- registry.setDefault(mockSuccess);
60
- return registry;
61
- }
62
- // ---------------------------------------------------------------------------
63
- // Setup / teardown
64
- // ---------------------------------------------------------------------------
65
- let logsRoot;
66
- beforeEach(async () => {
67
- logsRoot = await makeTmpDir();
68
- vi.clearAllMocks();
69
- });
70
- afterEach(async () => {
71
- await cleanDir(logsRoot);
72
- vi.clearAllMocks();
73
- });
74
- // ---------------------------------------------------------------------------
75
- // AC1: First iteration routes back to implement
76
- // ---------------------------------------------------------------------------
77
- describe('AC1: first iteration — 2/3 pass, route to implement', () => {
78
- it('AC1a: edge-selected from route points to implement on first iteration', async () => {
79
- // Mock spawn: call 1 → 2/3, call 2 → 3/3 (needed for the executor to terminate)
80
- const result1 = buildScenarioRunResult(2, 3);
81
- const result2 = buildScenarioRunResult(3, 3);
82
- mockSpawn
83
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
84
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
85
- const graph = parseGraph(readFixtureDot());
86
- const { bus, events } = makeEventSpy();
87
- const registry = createTestRegistry();
88
- await createGraphExecutor().run(graph, {
89
- runId: 'test-ac1a',
90
- logsRoot,
91
- handlerRegistry: registry,
92
- eventBus: bus,
93
- });
94
- // Collect all graph:edge-selected events from the route node
95
- const routeEdgeSelections = events.filter((e) => e.event === 'graph:edge-selected' &&
96
- e.payload['fromNode'] === 'route');
97
- // The FIRST route selection should be the retry path back to implement
98
- expect(routeEdgeSelections.length).toBeGreaterThanOrEqual(1);
99
- expect((routeEdgeSelections[0]?.payload)['toNode']).toBe('implement');
100
- });
101
- it('AC1b: satisfaction_score ≈ 2/3 after first validate node execution', async () => {
102
- const result1 = buildScenarioRunResult(2, 3);
103
- const result2 = buildScenarioRunResult(3, 3);
104
- mockSpawn
105
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
106
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
107
- const graph = parseGraph(readFixtureDot());
108
- const { bus, events } = makeEventSpy();
109
- await createGraphExecutor().run(graph, {
110
- runId: 'test-ac1b',
111
- logsRoot,
112
- handlerRegistry: createTestRegistry(),
113
- eventBus: bus,
114
- });
115
- // Find the first graph:node-completed event for the validate node
116
- const validateCompletions = events.filter((e) => e.event === 'graph:node-completed' &&
117
- e.payload['nodeId'] === 'validate');
118
- expect(validateCompletions.length).toBeGreaterThanOrEqual(1);
119
- const firstValidateOutcome = (validateCompletions[0]?.payload)['outcome'];
120
- const contextUpdates = firstValidateOutcome['contextUpdates'];
121
- expect(contextUpdates['satisfaction_score']).toBeCloseTo(2 / 3, 5);
122
- });
123
- it('AC1c: satisfaction_score>=0.8 condition evaluates to false for score 0.667', () => {
124
- // Direct condition evaluator test — no executor needed
125
- const context = { satisfaction_score: 2 / 3 };
126
- expect(evaluateCondition('satisfaction_score>=0.8', context)).toBe(false);
127
- });
128
- it('AC1c-variant: condition evaluates to true for score 1.0', () => {
129
- const context = { satisfaction_score: 1.0 };
130
- expect(evaluateCondition('satisfaction_score>=0.8', context)).toBe(true);
131
- });
132
- });
133
- // ---------------------------------------------------------------------------
134
- // AC2: Two-iteration convergence — graph terminates at exit
135
- // ---------------------------------------------------------------------------
136
- describe('AC2: two-iteration convergence', () => {
137
- it('AC2a: executor returns SUCCESS when second iteration passes all scenarios', async () => {
138
- const result1 = buildScenarioRunResult(2, 3);
139
- const result2 = buildScenarioRunResult(3, 3);
140
- mockSpawn
141
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
142
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
143
- const graph = parseGraph(readFixtureDot());
144
- const outcome = await createGraphExecutor().run(graph, {
145
- runId: 'test-ac2a',
146
- logsRoot,
147
- handlerRegistry: createTestRegistry(),
148
- });
149
- expect(outcome.status).toBe('SUCCESS');
150
- });
151
- it('AC2b: satisfaction_score equals 1.0 after second validate execution', async () => {
152
- const result1 = buildScenarioRunResult(2, 3);
153
- const result2 = buildScenarioRunResult(3, 3);
154
- mockSpawn
155
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
156
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
157
- const graph = parseGraph(readFixtureDot());
158
- const { bus, events } = makeEventSpy();
159
- await createGraphExecutor().run(graph, {
160
- runId: 'test-ac2b',
161
- logsRoot,
162
- handlerRegistry: createTestRegistry(),
163
- eventBus: bus,
164
- });
165
- const validateCompletions = events.filter((e) => e.event === 'graph:node-completed' &&
166
- e.payload['nodeId'] === 'validate');
167
- expect(validateCompletions.length).toBe(2);
168
- // Second validate should have satisfaction_score = 1.0
169
- const secondValidateOutcome = (validateCompletions[1]?.payload)['outcome'];
170
- const contextUpdates = secondValidateOutcome['contextUpdates'];
171
- expect(contextUpdates['satisfaction_score']).toBe(1.0);
172
- });
173
- it('AC2c: last edge-selected from route targets exit node', async () => {
174
- const result1 = buildScenarioRunResult(2, 3);
175
- const result2 = buildScenarioRunResult(3, 3);
176
- mockSpawn
177
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
178
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
179
- const graph = parseGraph(readFixtureDot());
180
- const { bus, events } = makeEventSpy();
181
- await createGraphExecutor().run(graph, {
182
- runId: 'test-ac2c',
183
- logsRoot,
184
- handlerRegistry: createTestRegistry(),
185
- eventBus: bus,
186
- });
187
- // Collect all route→* edge selections
188
- const routeEdgeSelections = events.filter((e) => e.event === 'graph:edge-selected' &&
189
- e.payload['fromNode'] === 'route');
190
- expect(routeEdgeSelections.length).toBe(2);
191
- // The LAST selection should be to exit
192
- const lastRouteEdge = routeEdgeSelections[routeEdgeSelections.length - 1];
193
- expect((lastRouteEdge?.payload)['toNode']).toBe('exit');
194
- });
195
- it('AC2d: validate node is executed exactly twice across both iterations', async () => {
196
- const result1 = buildScenarioRunResult(2, 3);
197
- const result2 = buildScenarioRunResult(3, 3);
198
- mockSpawn
199
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
200
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
201
- const graph = parseGraph(readFixtureDot());
202
- const { bus, events } = makeEventSpy();
203
- await createGraphExecutor().run(graph, {
204
- runId: 'test-ac2d',
205
- logsRoot,
206
- handlerRegistry: createTestRegistry(),
207
- eventBus: bus,
208
- });
209
- const validateCompletions = events.filter((e) => e.event === 'graph:node-completed' &&
210
- e.payload['nodeId'] === 'validate');
211
- expect(validateCompletions).toHaveLength(2);
212
- });
213
- it('graph is valid per the validator (zero error diagnostics)', () => {
214
- const graph = parseGraph(readFixtureDot());
215
- const validator = createValidator();
216
- const diagnostics = validator.validate(graph);
217
- const errors = diagnostics.filter((d) => d.severity === 'error');
218
- expect(errors).toHaveLength(0);
219
- });
220
- it('fixture graph has exactly 5 nodes', () => {
221
- const graph = parseGraph(readFixtureDot());
222
- expect(graph.nodes.size).toBe(5);
223
- });
224
- it('fixture graph has start and exit nodes', () => {
225
- const graph = parseGraph(readFixtureDot());
226
- expect(graph.startNode().id).toBe('start');
227
- expect(graph.exitNode().id).toBe('exit');
228
- });
229
- it('spawn is called exactly twice for a two-iteration convergence run', async () => {
230
- const result1 = buildScenarioRunResult(2, 3);
231
- const result2 = buildScenarioRunResult(3, 3);
232
- mockSpawn
233
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
234
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
235
- await createGraphExecutor().run(parseGraph(readFixtureDot()), {
236
- runId: 'test-spawn-count',
237
- logsRoot,
238
- handlerRegistry: createTestRegistry(),
239
- });
240
- expect(mockSpawn).toHaveBeenCalledTimes(2);
241
- });
242
- });
243
- //# sourceMappingURL=scenario-pipeline.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario-pipeline.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/scenario-pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Integration test: AC6 — model stylesheet properties applied before handler dispatch
3
- *
4
- * Verifies that the stylesheet resolver correctly applies per-node LLM routing
5
- * properties with specificity-based precedence. The test applies the stylesheet
6
- * resolver to graph nodes before execution so that spy handlers receive the
7
- * resolved node attributes.
8
- *
9
- * Story 42-15.
10
- */
11
- export {};
12
- //# sourceMappingURL=stylesheet-application.test.d.ts.map