@substrate-ai/factory 0.20.1 → 0.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/README.md +39 -0
  2. package/package.json +6 -3
  3. package/dist/__tests__/config.test.d.ts +0 -11
  4. package/dist/__tests__/config.test.d.ts.map +0 -1
  5. package/dist/__tests__/config.test.js +0 -215
  6. package/dist/__tests__/config.test.js.map +0 -1
  7. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  8. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  9. package/dist/__tests__/factory-run-command.test.js +0 -454
  10. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  11. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  12. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  13. package/dist/__tests__/factory-validate-command.test.js +0 -339
  14. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  15. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  19. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  23. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  25. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  26. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  27. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  31. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  35. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  37. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  38. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  39. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  41. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  42. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  43. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  45. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  46. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  47. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  49. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  50. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  51. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  55. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  59. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  63. package/dist/__tests__/integration/events.test.d.ts +0 -8
  64. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  65. package/dist/__tests__/integration/events.test.js +0 -194
  66. package/dist/__tests__/integration/events.test.js.map +0 -1
  67. package/dist/__tests__/integration/graphs.d.ts +0 -59
  68. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  69. package/dist/__tests__/integration/graphs.js +0 -164
  70. package/dist/__tests__/integration/graphs.js.map +0 -1
  71. package/dist/__tests__/integration/helpers.d.ts +0 -127
  72. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  73. package/dist/__tests__/integration/helpers.js +0 -167
  74. package/dist/__tests__/integration/helpers.js.map +0 -1
  75. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  76. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  77. package/dist/__tests__/integration/integrity.test.js +0 -198
  78. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  79. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  81. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  82. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  83. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  84. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  85. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  86. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  87. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  89. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  90. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  91. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  95. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  96. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  97. package/dist/__tests__/integration/persistence.test.js +0 -129
  98. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  99. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  103. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  105. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  106. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  107. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  109. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  110. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  111. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  113. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  114. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  115. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  116. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  117. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  118. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  119. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  120. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  121. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  122. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  123. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  124. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  125. package/dist/agent/__tests__/loop.test.js +0 -868
  126. package/dist/agent/__tests__/loop.test.js.map +0 -1
  127. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  128. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  129. package/dist/agent/__tests__/truncation.test.js +0 -276
  130. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  131. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  135. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  136. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  137. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  138. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  139. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  141. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  143. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  145. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  146. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  147. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  148. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  149. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  150. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  151. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  153. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  154. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  155. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  156. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  157. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  158. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  159. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  160. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  161. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  162. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  163. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  164. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  165. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  166. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  167. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  169. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  170. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  171. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  172. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  173. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  174. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  175. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  176. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  177. package/dist/backend/__tests__/parity.test.js +0 -411
  178. package/dist/backend/__tests__/parity.test.js.map +0 -1
  179. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  181. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  182. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  183. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  184. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  185. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  186. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  187. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  189. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  191. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  192. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  193. package/dist/context/__tests__/summarizer.test.js +0 -189
  194. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  195. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  196. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  197. package/dist/context/__tests__/summary-cache.test.js +0 -214
  198. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  199. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  200. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  201. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  202. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  203. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  204. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  205. package/dist/context/__tests__/summary-types.test.js +0 -130
  206. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  207. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  208. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  209. package/dist/convergence/__tests__/budget.test.js +0 -187
  210. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  211. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  212. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  213. package/dist/convergence/__tests__/controller.test.js +0 -585
  214. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  215. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  217. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  218. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  219. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  221. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  222. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  223. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  224. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  225. package/dist/convergence/__tests__/plateau.test.js +0 -163
  226. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  227. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  228. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  229. package/dist/convergence/__tests__/remediation.test.js +0 -209
  230. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  231. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  233. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  234. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  235. package/dist/factory-command.test.d.ts +0 -8
  236. package/dist/factory-command.test.d.ts.map +0 -1
  237. package/dist/factory-command.test.js +0 -304
  238. package/dist/factory-command.test.js.map +0 -1
  239. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  241. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  242. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  243. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  244. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  245. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  246. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  247. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  248. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  249. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  250. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  251. package/dist/graph/__tests__/context.test.d.ts +0 -14
  252. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  253. package/dist/graph/__tests__/context.test.js +0 -276
  254. package/dist/graph/__tests__/context.test.js.map +0 -1
  255. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  257. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  258. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  259. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  260. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  261. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  262. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  263. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  265. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  266. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  267. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  269. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  270. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  271. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  272. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  273. package/dist/graph/__tests__/executor.test.js +0 -901
  274. package/dist/graph/__tests__/executor.test.js.map +0 -1
  275. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  276. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  277. package/dist/graph/__tests__/fidelity.test.js +0 -135
  278. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  279. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  281. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  282. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  283. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  285. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  286. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  287. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  288. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  289. package/dist/graph/__tests__/parser.test.js +0 -452
  290. package/dist/graph/__tests__/parser.test.js.map +0 -1
  291. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  292. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  293. package/dist/graph/__tests__/run-state.test.js +0 -189
  294. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  295. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  296. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  297. package/dist/graph/__tests__/transformer.test.js +0 -350
  298. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  299. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  300. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  301. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  302. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  303. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  305. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  306. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  307. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  309. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  310. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  311. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  312. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  313. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  314. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  315. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  316. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  317. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  318. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  319. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  321. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  322. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  323. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  325. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  326. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  327. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  329. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  330. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  331. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  333. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  334. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  335. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  336. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  337. package/dist/handlers/__tests__/registry.test.js +0 -315
  338. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  339. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  341. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  342. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  343. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  347. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  348. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  349. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  350. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  351. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  353. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  354. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  355. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  357. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  358. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  359. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  361. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  362. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  363. package/dist/llm/__tests__/client.test.d.ts +0 -2
  364. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  365. package/dist/llm/__tests__/client.test.js +0 -198
  366. package/dist/llm/__tests__/client.test.js.map +0 -1
  367. package/dist/llm/__tests__/types.test.d.ts +0 -2
  368. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  369. package/dist/llm/__tests__/types.test.js +0 -289
  370. package/dist/llm/__tests__/types.test.js.map +0 -1
  371. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  375. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  377. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  378. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  379. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  381. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  382. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  383. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  385. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  386. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  387. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  389. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  390. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  391. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  392. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  393. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  394. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  395. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  397. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  398. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  399. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  401. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  402. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  403. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  405. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  406. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  407. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  409. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  410. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  411. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  415. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  417. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  418. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  419. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  420. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  421. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  422. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  423. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  425. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  426. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  427. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  428. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  429. package/dist/scenarios/__tests__/store.test.js +0 -169
  430. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  431. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  433. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  434. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  435. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  436. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  437. package/dist/templates/__tests__/templates.test.js +0 -92
  438. package/dist/templates/__tests__/templates.test.js.map +0 -1
  439. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  440. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  441. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  442. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  443. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  444. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  445. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  446. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  447. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  449. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  450. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  451. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  452. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  453. package/dist/twins/__tests__/integration/helpers.js +0 -67
  454. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  455. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  456. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  457. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  458. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  459. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  460. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  461. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  462. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  463. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  464. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  465. package/dist/twins/__tests__/persistence.test.js +0 -300
  466. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  467. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  468. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  469. package/dist/twins/__tests__/registry.test.js +0 -282
  470. package/dist/twins/__tests__/registry.test.js.map +0 -1
  471. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  472. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  473. package/dist/twins/__tests__/run-state.test.js +0 -112
  474. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  475. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  476. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  477. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  478. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  479. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  480. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  481. package/dist/twins/__tests__/templates.test.js +0 -87
  482. package/dist/twins/__tests__/templates.test.js.map +0 -1
  483. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  484. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  485. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  486. 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