@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,237 +0,0 @@
1
- /**
2
- * Unit tests for `scenarios list` and `scenarios run` CLI subcommands.
3
- *
4
- * Tests AC1–AC4 from story 44-8.
5
- */
6
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import { Command } from 'commander';
8
- import { registerScenariosCommand } from '../cli-command.js';
9
- // ---------------------------------------------------------------------------
10
- // Module mocks — must be hoisted before any imports resolve
11
- // ---------------------------------------------------------------------------
12
- vi.mock('../store.js', () => ({
13
- ScenarioStore: vi.fn().mockImplementation(() => ({
14
- discover: vi.fn().mockResolvedValue({
15
- scenarios: [],
16
- capturedAt: Date.now(),
17
- }),
18
- })),
19
- }));
20
- vi.mock('../runner.js', () => ({
21
- createScenarioRunner: vi.fn().mockReturnValue({
22
- run: vi.fn().mockResolvedValue({
23
- scenarios: [],
24
- summary: { total: 0, passed: 0, failed: 0 },
25
- durationMs: 0,
26
- }),
27
- }),
28
- }));
29
- // ---------------------------------------------------------------------------
30
- // Helpers
31
- // ---------------------------------------------------------------------------
32
- /**
33
- * Spy on process.stdout.write and return the spy instance.
34
- * Callers are responsible for restoring in afterEach.
35
- */
36
- function captureStdoutWrite() {
37
- return vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
38
- }
39
- /**
40
- * Extract lines written to the spy, stripping trailing newlines.
41
- */
42
- function getWrittenLines(spy) {
43
- return spy.mock.calls.map((c) => String(c[0]).replace(/\n$/, ''));
44
- }
45
- /**
46
- * Create a fresh Commander program with the scenarios command registered and
47
- * parse the given CLI args.
48
- */
49
- async function runCmd(args) {
50
- const cmd = new Command();
51
- cmd.exitOverride(); // prevent process.exit() in tests
52
- registerScenariosCommand(cmd);
53
- await cmd.parseAsync(['node', 'substrate', 'scenarios', ...args]);
54
- }
55
- // ---------------------------------------------------------------------------
56
- // Tests
57
- // ---------------------------------------------------------------------------
58
- describe('scenarios list subcommand', () => {
59
- let spy;
60
- beforeEach(() => {
61
- spy = captureStdoutWrite();
62
- });
63
- afterEach(() => {
64
- spy.mockRestore();
65
- vi.clearAllMocks();
66
- });
67
- it('AC1: prints filename and checksum tab-separated for each scenario', async () => {
68
- const { ScenarioStore } = await import('../store.js');
69
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
70
- discover: vi.fn().mockResolvedValue({
71
- scenarios: [
72
- { name: 'scenario-a.sh', path: '/abs/path/scenario-a.sh', checksum: 'abc123' },
73
- { name: 'scenario-b.py', path: '/abs/path/scenario-b.py', checksum: 'def456' },
74
- ],
75
- capturedAt: Date.now(),
76
- }),
77
- verifyIntegrity: vi.fn(),
78
- verify: vi.fn(),
79
- }));
80
- await runCmd(['list']);
81
- const logged = getWrittenLines(spy);
82
- expect(logged).toContain('scenario-a.sh\tabc123');
83
- expect(logged).toContain('scenario-b.py\tdef456');
84
- });
85
- it('AC2: prints "No scenarios found" when directory is empty or missing', async () => {
86
- const { ScenarioStore } = await import('../store.js');
87
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
88
- discover: vi.fn().mockResolvedValue({
89
- scenarios: [],
90
- capturedAt: Date.now(),
91
- }),
92
- verifyIntegrity: vi.fn(),
93
- verify: vi.fn(),
94
- }));
95
- await runCmd(['list']);
96
- const logged = getWrittenLines(spy);
97
- expect(logged).toContain('No scenarios found in .substrate/scenarios/');
98
- });
99
- it('AC1 (single entry): prints exactly one tab-separated line for a single scenario', async () => {
100
- const { ScenarioStore } = await import('../store.js');
101
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
102
- discover: vi.fn().mockResolvedValue({
103
- scenarios: [
104
- { name: 'scenario-only.ts', path: '/abs/scenario-only.ts', checksum: 'deadbeef' },
105
- ],
106
- capturedAt: Date.now(),
107
- }),
108
- verifyIntegrity: vi.fn(),
109
- verify: vi.fn(),
110
- }));
111
- await runCmd(['list']);
112
- const logged = getWrittenLines(spy);
113
- expect(logged).toHaveLength(1);
114
- expect(logged[0]).toBe('scenario-only.ts\tdeadbeef');
115
- });
116
- });
117
- describe('AC7: top-level scenarios run backward compatibility', () => {
118
- let spy;
119
- beforeEach(() => {
120
- spy = captureStdoutWrite();
121
- });
122
- afterEach(() => {
123
- spy.mockRestore();
124
- vi.clearAllMocks();
125
- });
126
- it('AC7: scenarios run at top-level still works when factory scenarios is also registered on the same program', async () => {
127
- const { ScenarioStore } = await import('../store.js');
128
- const { createScenarioRunner } = await import('../runner.js');
129
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
130
- discover: vi.fn().mockResolvedValue({
131
- scenarios: [{ name: 's.sh', path: '/abs/s.sh', checksum: 'aaa' }],
132
- capturedAt: Date.now(),
133
- }),
134
- verifyIntegrity: vi.fn(),
135
- verify: vi.fn(),
136
- }));
137
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
138
- run: vi.fn().mockResolvedValue({
139
- summary: { total: 1, passed: 1, failed: 0 },
140
- scenarios: [
141
- { name: 's.sh', status: 'pass', exitCode: 0, stdout: '', stderr: '', durationMs: 5 },
142
- ],
143
- durationMs: 10,
144
- }),
145
- });
146
- // Simulate dual registration: scenarios at top-level (story 44-5)
147
- // AND under factory (story 44-8) — mirrors createProgram() in src/cli/index.ts
148
- const program = new Command();
149
- program.exitOverride();
150
- registerScenariosCommand(program); // top-level (AC7 path, story 44-5)
151
- const factoryCmd = program.command('factory').description('Factory commands');
152
- registerScenariosCommand(factoryCmd); // under factory (story 44-8 path)
153
- // Invoke the top-level path — must still work per AC7
154
- await program.parseAsync(['node', 'substrate', 'scenarios', 'run']);
155
- const logged = getWrittenLines(spy);
156
- expect(logged.some((l) => l.includes('Scenarios:'))).toBe(true);
157
- expect(logged.some((l) => l.includes('[PASS]'))).toBe(true);
158
- });
159
- });
160
- describe('scenarios run subcommand', () => {
161
- let spy;
162
- beforeEach(() => {
163
- spy = captureStdoutWrite();
164
- });
165
- afterEach(() => {
166
- spy.mockRestore();
167
- vi.clearAllMocks();
168
- });
169
- it('AC3: prints human-readable summary with PASS/FAIL lines', async () => {
170
- const { ScenarioStore } = await import('../store.js');
171
- const { createScenarioRunner } = await import('../runner.js');
172
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
173
- discover: vi.fn().mockResolvedValue({
174
- scenarios: [
175
- { name: 's.sh', path: '/abs/s.sh', checksum: 'aaa' },
176
- { name: 'f.sh', path: '/abs/f.sh', checksum: 'bbb' },
177
- ],
178
- capturedAt: Date.now(),
179
- }),
180
- verifyIntegrity: vi.fn(),
181
- verify: vi.fn(),
182
- }));
183
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
184
- run: vi.fn().mockResolvedValue({
185
- summary: { total: 2, passed: 1, failed: 1 },
186
- scenarios: [
187
- { name: 's.sh', status: 'pass', exitCode: 0, stdout: '', stderr: '', durationMs: 5 },
188
- { name: 'f.sh', status: 'fail', exitCode: 1, stdout: '', stderr: 'err', durationMs: 5 },
189
- ],
190
- durationMs: 10,
191
- }),
192
- });
193
- await runCmd(['run']);
194
- const logged = getWrittenLines(spy);
195
- expect(logged.some((l) => l.includes('Scenarios: 1 passed, 1 failed, 2 total'))).toBe(true);
196
- expect(logged.some((l) => l.includes('[PASS]') && l.includes('s.sh'))).toBe(true);
197
- expect(logged.some((l) => l.includes('[FAIL]') && l.includes('f.sh'))).toBe(true);
198
- });
199
- it('AC4: --format json emits valid JSON containing summary.total', async () => {
200
- const { ScenarioStore } = await import('../store.js');
201
- const { createScenarioRunner } = await import('../runner.js');
202
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
203
- discover: vi.fn().mockResolvedValue({
204
- scenarios: [{ name: 's.sh', path: '/abs/s.sh', checksum: 'aaa' }],
205
- capturedAt: Date.now(),
206
- }),
207
- verifyIntegrity: vi.fn(),
208
- verify: vi.fn(),
209
- }));
210
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
211
- run: vi.fn().mockResolvedValue({
212
- summary: { total: 1, passed: 1, failed: 0 },
213
- scenarios: [
214
- { name: 's.sh', status: 'pass', exitCode: 0, stdout: '', stderr: '', durationMs: 3 },
215
- ],
216
- durationMs: 5,
217
- }),
218
- });
219
- await runCmd(['run', '--format', 'json']);
220
- const logged = getWrittenLines(spy);
221
- // At least one call must be parseable JSON with summary.total
222
- const jsonLine = logged.find((l) => {
223
- try {
224
- const parsed = JSON.parse(l);
225
- return typeof parsed.summary?.total === 'number';
226
- }
227
- catch {
228
- return false;
229
- }
230
- });
231
- expect(jsonLine).toBeDefined();
232
- const result = JSON.parse(jsonLine);
233
- expect(result.summary.total).toBe(1);
234
- expect(typeof result.durationMs).toBe('number');
235
- });
236
- });
237
- //# sourceMappingURL=cli-command-list.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-command-list.test.js","sourceRoot":"","sources":["../../../src/scenarios/__tests__/cli-command-list.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Unit tests for `registerScenariosCommand` — scenarios run subcommand (story 44-5).
3
- *
4
- * Covers AC1: `substrate scenarios run --format json` invokes store.discover(),
5
- * runner.run(), and writes JSON-serialized ScenarioRunResult to stdout.
6
- *
7
- * See also: cli-command-list.test.ts (story 44-8) for the `list` subcommand and
8
- * human-readable output path.
9
- */
10
- export {};
11
- //# sourceMappingURL=cli-command.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-command.test.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__tests__/cli-command.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,275 +0,0 @@
1
- /**
2
- * Unit tests for `registerScenariosCommand` — scenarios run subcommand (story 44-5).
3
- *
4
- * Covers AC1: `substrate scenarios run --format json` invokes store.discover(),
5
- * runner.run(), and writes JSON-serialized ScenarioRunResult to stdout.
6
- *
7
- * See also: cli-command-list.test.ts (story 44-8) for the `list` subcommand and
8
- * human-readable output path.
9
- */
10
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
11
- import { Command } from 'commander';
12
- import { registerScenariosCommand } from '../cli-command.js';
13
- // ---------------------------------------------------------------------------
14
- // Module mocks — must be hoisted before any imports resolve
15
- // ---------------------------------------------------------------------------
16
- vi.mock('../store.js', () => ({
17
- ScenarioStore: vi.fn().mockImplementation(() => ({
18
- discover: vi.fn().mockResolvedValue({
19
- scenarios: [],
20
- capturedAt: Date.now(),
21
- }),
22
- })),
23
- }));
24
- vi.mock('../runner.js', () => ({
25
- createScenarioRunner: vi.fn().mockReturnValue({
26
- run: vi.fn().mockResolvedValue({
27
- scenarios: [],
28
- summary: { total: 0, passed: 0, failed: 0 },
29
- durationMs: 0,
30
- }),
31
- }),
32
- }));
33
- // ---------------------------------------------------------------------------
34
- // Test data
35
- // ---------------------------------------------------------------------------
36
- const SCENARIO_MANIFEST = {
37
- scenarios: [
38
- { name: 'scenario-a.sh', path: '/proj/.substrate/scenarios/scenario-a.sh', checksum: 'aaa' },
39
- { name: 'scenario-b.sh', path: '/proj/.substrate/scenarios/scenario-b.sh', checksum: 'bbb' },
40
- ],
41
- capturedAt: Date.now(),
42
- };
43
- const SCENARIO_RUN_RESULT = {
44
- scenarios: [
45
- { name: 'scenario-a.sh', status: 'pass', exitCode: 0, stdout: '', stderr: '', durationMs: 12 },
46
- { name: 'scenario-b.sh', status: 'fail', exitCode: 1, stdout: '', stderr: 'err', durationMs: 8 },
47
- ],
48
- summary: { total: 2, passed: 1, failed: 1 },
49
- durationMs: 20,
50
- };
51
- // ---------------------------------------------------------------------------
52
- // Helpers
53
- // ---------------------------------------------------------------------------
54
- /**
55
- * Spy on process.stdout.write and return the spy instance.
56
- * Callers are responsible for restoring in afterEach.
57
- */
58
- function captureStdoutWrite() {
59
- return vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
60
- }
61
- /**
62
- * Extract lines written to the spy, stripping trailing newlines.
63
- */
64
- function getWrittenLines(spy) {
65
- return spy.mock.calls.map((c) => String(c[0]).replace(/\n$/, ''));
66
- }
67
- /**
68
- * Create a fresh Commander program with the scenarios command registered and
69
- * parse the given CLI args.
70
- */
71
- async function runCmd(args) {
72
- const cmd = new Command();
73
- cmd.exitOverride();
74
- registerScenariosCommand(cmd);
75
- await cmd.parseAsync(['node', 'substrate', 'scenarios', ...args]);
76
- }
77
- // ---------------------------------------------------------------------------
78
- // AC1: scenarios run --format json outputs ScenarioRunResult JSON
79
- // ---------------------------------------------------------------------------
80
- describe('scenarios run --format json (AC1 — story 44-5)', () => {
81
- let spy;
82
- beforeEach(() => {
83
- spy = captureStdoutWrite();
84
- });
85
- afterEach(() => {
86
- spy.mockRestore();
87
- vi.clearAllMocks();
88
- });
89
- it('calls store.discover() to collect scenario files', async () => {
90
- const { ScenarioStore } = await import('../store.js');
91
- const { createScenarioRunner } = await import('../runner.js');
92
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
93
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
94
- verifyIntegrity: vi.fn(),
95
- verify: vi.fn(),
96
- }));
97
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
98
- run: vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT),
99
- });
100
- await runCmd(['run', '--format', 'json']);
101
- // ScenarioStore was constructed — discover() was called on it
102
- expect(vi.mocked(ScenarioStore)).toHaveBeenCalledTimes(1);
103
- });
104
- it('calls runner.run() with the manifest and produces output', async () => {
105
- const { ScenarioStore } = await import('../store.js');
106
- const { createScenarioRunner } = await import('../runner.js');
107
- const mockRun = vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT);
108
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
109
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
110
- verifyIntegrity: vi.fn(),
111
- verify: vi.fn(),
112
- }));
113
- vi.mocked(createScenarioRunner).mockReturnValueOnce({ run: mockRun });
114
- await runCmd(['run', '--format', 'json']);
115
- expect(mockRun).toHaveBeenCalledTimes(1);
116
- });
117
- it('writes JSON-serialized ScenarioRunResult to stdout via process.stdout.write', async () => {
118
- const { ScenarioStore } = await import('../store.js');
119
- const { createScenarioRunner } = await import('../runner.js');
120
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
121
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
122
- verifyIntegrity: vi.fn(),
123
- verify: vi.fn(),
124
- }));
125
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
126
- run: vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT),
127
- });
128
- await runCmd(['run', '--format', 'json']);
129
- const logged = getWrittenLines(spy);
130
- // One of the process.stdout.write calls must be parseable JSON with ScenarioRunResult shape
131
- const jsonLine = logged.find((l) => {
132
- try {
133
- const parsed = JSON.parse(l);
134
- const summary = parsed['summary'];
135
- return typeof summary?.['total'] === 'number' && typeof summary?.['passed'] === 'number';
136
- }
137
- catch {
138
- return false;
139
- }
140
- });
141
- expect(jsonLine).toBeDefined();
142
- });
143
- it('JSON output contains correct summary fields (total, passed, failed)', async () => {
144
- const { ScenarioStore } = await import('../store.js');
145
- const { createScenarioRunner } = await import('../runner.js');
146
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
147
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
148
- verifyIntegrity: vi.fn(),
149
- verify: vi.fn(),
150
- }));
151
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
152
- run: vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT),
153
- });
154
- await runCmd(['run', '--format', 'json']);
155
- const logged = getWrittenLines(spy);
156
- const jsonLine = logged.find((l) => {
157
- try {
158
- JSON.parse(l);
159
- return true;
160
- }
161
- catch {
162
- return false;
163
- }
164
- });
165
- expect(jsonLine).toBeDefined();
166
- const parsed = JSON.parse(jsonLine);
167
- expect(parsed.summary.total).toBe(2);
168
- expect(parsed.summary.passed).toBe(1);
169
- expect(parsed.summary.failed).toBe(1);
170
- expect(typeof parsed.durationMs).toBe('number');
171
- });
172
- it('JSON output passes duck-type check: summary.total and summary.passed are numbers', async () => {
173
- const { ScenarioStore } = await import('../store.js');
174
- const { createScenarioRunner } = await import('../runner.js');
175
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
176
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
177
- verifyIntegrity: vi.fn(),
178
- verify: vi.fn(),
179
- }));
180
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
181
- run: vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT),
182
- });
183
- await runCmd(['run', '--format', 'json']);
184
- const logged = getWrittenLines(spy);
185
- const jsonLine = logged.find((l) => {
186
- try {
187
- JSON.parse(l);
188
- return true;
189
- }
190
- catch {
191
- return false;
192
- }
193
- });
194
- expect(jsonLine).toBeDefined();
195
- const parsed = JSON.parse(jsonLine);
196
- const summary = parsed['summary'];
197
- expect(typeof summary['total']).toBe('number');
198
- expect(typeof summary['passed']).toBe('number');
199
- });
200
- it('JSON output includes scenario results array', async () => {
201
- const { ScenarioStore } = await import('../store.js');
202
- const { createScenarioRunner } = await import('../runner.js');
203
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
204
- discover: vi.fn().mockResolvedValue(SCENARIO_MANIFEST),
205
- verifyIntegrity: vi.fn(),
206
- verify: vi.fn(),
207
- }));
208
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
209
- run: vi.fn().mockResolvedValue(SCENARIO_RUN_RESULT),
210
- });
211
- await runCmd(['run', '--format', 'json']);
212
- const logged = getWrittenLines(spy);
213
- const jsonLine = logged.find((l) => {
214
- try {
215
- JSON.parse(l);
216
- return true;
217
- }
218
- catch {
219
- return false;
220
- }
221
- });
222
- const parsed = JSON.parse(jsonLine);
223
- expect(Array.isArray(parsed.scenarios)).toBe(true);
224
- expect(parsed.scenarios).toHaveLength(2);
225
- expect(parsed.scenarios[0]?.name).toBe('scenario-a.sh');
226
- expect(parsed.scenarios[1]?.name).toBe('scenario-b.sh');
227
- });
228
- });
229
- // ---------------------------------------------------------------------------
230
- // AC1 edge case: zero scenarios discovered
231
- // ---------------------------------------------------------------------------
232
- describe('scenarios run --format json — empty scenario directory (AC1 edge case)', () => {
233
- let spy;
234
- beforeEach(() => {
235
- spy = captureStdoutWrite();
236
- });
237
- afterEach(() => {
238
- spy.mockRestore();
239
- vi.clearAllMocks();
240
- });
241
- it('still emits valid ScenarioRunResult JSON when no scenarios are found', async () => {
242
- const { ScenarioStore } = await import('../store.js');
243
- const { createScenarioRunner } = await import('../runner.js');
244
- vi.mocked(ScenarioStore).mockImplementationOnce(() => ({
245
- discover: vi.fn().mockResolvedValue({ scenarios: [], capturedAt: Date.now() }),
246
- verifyIntegrity: vi.fn(),
247
- verify: vi.fn(),
248
- }));
249
- vi.mocked(createScenarioRunner).mockReturnValueOnce({
250
- run: vi.fn().mockResolvedValue({
251
- scenarios: [],
252
- summary: { total: 0, passed: 0, failed: 0 },
253
- durationMs: 0,
254
- }),
255
- });
256
- await runCmd(['run', '--format', 'json']);
257
- const logged = getWrittenLines(spy);
258
- const jsonLine = logged.find((l) => {
259
- try {
260
- const p = JSON.parse(l);
261
- const s = p['summary'];
262
- return typeof s?.['total'] === 'number';
263
- }
264
- catch {
265
- return false;
266
- }
267
- });
268
- expect(jsonLine).toBeDefined();
269
- const parsed = JSON.parse(jsonLine);
270
- expect(parsed.summary.total).toBe(0);
271
- expect(parsed.summary.passed).toBe(0);
272
- expect(parsed.summary.failed).toBe(0);
273
- });
274
- });
275
- //# sourceMappingURL=cli-command.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-command.test.js","sourceRoot":"","sources":["../../../src/scenarios/__tests__/cli-command.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Integration and unit tests for scenario integrity verification during pipeline runs.
3
- * Story 44-4: Scenario Integrity Verification During Pipeline Runs.
4
- *
5
- * Tests:
6
- * - AC1: Manifest captured once at run start when scenarioStore configured
7
- * - AC2: verifyIntegrity() called before each tool node
8
- * - AC3: Tampered (modified or deleted) file halts pipeline with scenario:integrity-failed
9
- * - AC4: Unmodified scenarios emit scenario:integrity-passed and executor returns SUCCESS
10
- * - AC5: Integrity check skipped for non-tool nodes
11
- * - AC6: No scenarioStore → no discover(), no integrity events, backward-compatible
12
- * - Unit: verifyIntegrity() delegates to verify()
13
- */
14
- export {};
15
- //# sourceMappingURL=integrity-pipeline.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrity-pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__tests__/integrity-pipeline.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}