@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,288 +0,0 @@
1
- /**
2
- * Integration tests for advanced graph event stream patterns.
3
- * Story 50-11 AC5.
4
- *
5
- * Tests cover event payload completeness and multi-handler event sequencing:
6
- * - graph:subgraph-started payload fields (nodeId, graphFile, depth, runId)
7
- * - graph:subgraph-completed payload fields (status, durationMs, graphFile, depth)
8
- * - Event ordering: started before completed
9
- * - Depth tracking in event payloads (root vs nested)
10
- * - runId resolution: context.__runId vs options.runId fallback
11
- * - Absent eventBus: handlers run without crash
12
- * - LLM edge event: graph:llm-edge-evaluated carries nodeId + question + result + runId
13
- * - Combined: LLM edge and subgraph events in the same bus (cross-feature coexistence)
14
- * - Event bus receives events from both selectEdge and subgraph handler in one test
15
- *
16
- * ≥8 `it(...)` cases required (AC7).
17
- */
18
- import { describe, it, expect, vi, beforeEach } from 'vitest';
19
- import os from 'node:os';
20
- import { parseGraph } from '../../graph/parser.js';
21
- import { GraphContext } from '../../graph/context.js';
22
- import { HandlerRegistry } from '../../handlers/registry.js';
23
- import { startHandler } from '../../handlers/start.js';
24
- import { exitHandler } from '../../handlers/exit.js';
25
- import { createSubgraphHandler } from '../../handlers/subgraph.js';
26
- import { selectEdge } from '../../graph/edge-selector.js';
27
- import { SUBGRAPH_PARENT_DOT, CHILD_GRAPH_DOT } from '../fixtures/subgraph-parent.dot.js';
28
- function makeEventSpy() {
29
- const events = [];
30
- const bus = {
31
- emit(event, payload) {
32
- events.push({ event: event, payload });
33
- },
34
- on() { },
35
- off() { },
36
- };
37
- return { bus, events };
38
- }
39
- function makeChildRegistry() {
40
- const registry = new HandlerRegistry();
41
- registry.register('start', startHandler);
42
- registry.register('exit', exitHandler);
43
- registry.setDefault(vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
44
- return registry;
45
- }
46
- function makeParentGraphWithSg(graphFile = '/test/child.dot') {
47
- const graph = parseGraph(SUBGRAPH_PARENT_DOT);
48
- const sgNode = graph.nodes.get('sg_node');
49
- sgNode.attrs = { graph_file: graphFile };
50
- return { graph, sgNode };
51
- }
52
- function makeNode(id, type = 'codergen') {
53
- return {
54
- id, label: '', shape: 'box', type, prompt: '', maxRetries: 0, goalGate: false,
55
- retryTarget: '', fallbackRetryTarget: '', fidelity: '', threadId: '', class: '',
56
- timeout: 0, llmModel: '', llmProvider: '', reasoningEffort: '', autoStatus: false,
57
- allowPartial: false, toolCommand: '', backend: '',
58
- };
59
- }
60
- function makeEdge(fromNode, toNode, opts) {
61
- return {
62
- fromNode, toNode, label: opts?.label ?? '', condition: opts?.condition ?? '',
63
- weight: 0, fidelity: '', threadId: '', loopRestart: false,
64
- };
65
- }
66
- function makeGraph(nodes, edges) {
67
- const nodeMap = new Map(nodes.map((n) => [n.id, n]));
68
- return {
69
- id: 'test', goal: '', label: '', modelStylesheet: '', defaultMaxRetries: 0,
70
- retryTarget: '', fallbackRetryTarget: '', defaultFidelity: '',
71
- nodes: nodeMap, edges,
72
- outgoingEdges: (nodeId) => edges.filter((e) => e.fromNode === nodeId),
73
- startNode: () => { throw new Error('not needed'); },
74
- exitNode: () => { throw new Error('not needed'); },
75
- };
76
- }
77
- const SUCCESS_OUTCOME = { status: 'SUCCESS' };
78
- // ---------------------------------------------------------------------------
79
- // AC5: Subgraph event payload details
80
- // ---------------------------------------------------------------------------
81
- describe('advanced graph events — subgraph event payload details', () => {
82
- beforeEach(() => vi.clearAllMocks());
83
- it('graph:subgraph-started payload contains nodeId, graphFile, depth, and runId', async () => {
84
- const { bus, events } = makeEventSpy();
85
- const { graph, sgNode } = makeParentGraphWithSg('/test/child.dot');
86
- const handler = createSubgraphHandler({
87
- handlerRegistry: makeChildRegistry(),
88
- baseDir: '/test',
89
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
90
- logsRoot: os.tmpdir(),
91
- eventBus: bus,
92
- runId: 'run-abc',
93
- });
94
- const context = new GraphContext({ __runId: 'run-abc' });
95
- await handler(sgNode, context, graph);
96
- const started = events.find((e) => e.event === 'graph:subgraph-started');
97
- const p = started.payload;
98
- expect(p.nodeId).toBe('sg_node');
99
- expect(p.graphFile).toBe('/test/child.dot');
100
- expect(p.depth).toBe(0);
101
- expect(p.runId).toBe('run-abc');
102
- });
103
- it('graph:subgraph-completed payload contains status, durationMs, graphFile, depth', async () => {
104
- const { bus, events } = makeEventSpy();
105
- const { graph, sgNode } = makeParentGraphWithSg('/test/child.dot');
106
- const handler = createSubgraphHandler({
107
- handlerRegistry: makeChildRegistry(),
108
- baseDir: '/test',
109
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
110
- logsRoot: os.tmpdir(),
111
- eventBus: bus,
112
- });
113
- const context = new GraphContext({ __runId: 'run-completed' });
114
- await handler(sgNode, context, graph);
115
- const completed = events.find((e) => e.event === 'graph:subgraph-completed');
116
- const p = completed.payload;
117
- expect(p.status).toBe('SUCCESS');
118
- expect(typeof p.durationMs).toBe('number');
119
- expect(p.durationMs).toBeGreaterThanOrEqual(0);
120
- expect(p.graphFile).toBe('/test/child.dot');
121
- expect(p.depth).toBe(0);
122
- });
123
- it('depth=1 in subgraph-started when parent context has subgraph._depth=1', async () => {
124
- const { bus, events } = makeEventSpy();
125
- const { graph, sgNode } = makeParentGraphWithSg('/test/child.dot');
126
- const handler = createSubgraphHandler({
127
- handlerRegistry: makeChildRegistry(),
128
- baseDir: '/test',
129
- maxDepth: 5,
130
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
131
- logsRoot: os.tmpdir(),
132
- eventBus: bus,
133
- });
134
- // Simulate a parent subgraph handler calling a nested subgraph at depth=1
135
- const context = new GraphContext({ __runId: 'run-depth-1', 'subgraph._depth': 1 });
136
- await handler(sgNode, context, graph);
137
- const started = events.find((e) => e.event === 'graph:subgraph-started');
138
- const p = started.payload;
139
- expect(p.depth).toBe(1);
140
- });
141
- it('runId from options.runId used when context has no __runId', async () => {
142
- const { bus, events } = makeEventSpy();
143
- const { graph, sgNode } = makeParentGraphWithSg('/test/child.dot');
144
- const handler = createSubgraphHandler({
145
- handlerRegistry: makeChildRegistry(),
146
- baseDir: '/test',
147
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
148
- logsRoot: os.tmpdir(),
149
- eventBus: bus,
150
- runId: 'options-run-id',
151
- });
152
- // No __runId in context — should fall back to options.runId
153
- const context = new GraphContext({});
154
- await handler(sgNode, context, graph);
155
- const started = events.find((e) => e.event === 'graph:subgraph-started');
156
- const p = started.payload;
157
- expect(p.runId).toBe('options-run-id');
158
- });
159
- it('absent eventBus for subgraph handler: completes without crash', async () => {
160
- const { graph, sgNode } = makeParentGraphWithSg('/test/child.dot');
161
- const handler = createSubgraphHandler({
162
- handlerRegistry: makeChildRegistry(),
163
- baseDir: '/test',
164
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
165
- logsRoot: os.tmpdir(),
166
- // No eventBus
167
- });
168
- const context = new GraphContext({ __runId: 'no-bus-test' });
169
- await expect(handler(sgNode, context, graph)).resolves.toMatchObject({ status: 'SUCCESS' });
170
- });
171
- });
172
- // ---------------------------------------------------------------------------
173
- // AC5: LLM edge event payload details
174
- // ---------------------------------------------------------------------------
175
- describe('advanced graph events — LLM edge evaluation event details', () => {
176
- it('graph:llm-edge-evaluated payload contains runId, nodeId, question, result', async () => {
177
- const { bus, events } = makeEventSpy();
178
- const decisionNode = makeNode('decision');
179
- const edges = [
180
- makeEdge('decision', 'refine', { condition: 'llm:is refinement needed?' }),
181
- makeEdge('decision', 'exit'),
182
- ];
183
- const graph = makeGraph([decisionNode, makeNode('refine'), makeNode('exit', 'exit')], edges);
184
- const context = new GraphContext();
185
- await selectEdge(decisionNode, SUCCESS_OUTCOME, context, graph, {
186
- llmCall: vi.fn().mockResolvedValue('yes'),
187
- eventBus: bus,
188
- runId: 'llm-run-1',
189
- });
190
- const evt = events.find((e) => e.event === 'graph:llm-edge-evaluated');
191
- const p = evt.payload;
192
- expect(p.runId).toBe('llm-run-1');
193
- expect(p.nodeId).toBe('decision');
194
- expect(p.question).toBe('is refinement needed?');
195
- expect(p.result).toBe(true);
196
- });
197
- });
198
- // ---------------------------------------------------------------------------
199
- // AC5: Cross-feature event coexistence
200
- // ---------------------------------------------------------------------------
201
- describe('advanced graph events — cross-feature event coexistence', () => {
202
- it('LLM edge selectEdge + subgraph handler: both event types in same event bus', async () => {
203
- const { bus, events } = makeEventSpy();
204
- // Step 1: Emit LLM edge evaluation via selectEdge
205
- const decisionNode = makeNode('decision');
206
- const edges = [
207
- makeEdge('decision', 'next', { condition: 'llm:should we proceed?' }),
208
- makeEdge('decision', 'exit'),
209
- ];
210
- const graph = makeGraph([decisionNode, makeNode('next'), makeNode('exit', 'exit')], edges);
211
- const ctx1 = new GraphContext();
212
- await selectEdge(decisionNode, SUCCESS_OUTCOME, ctx1, graph, {
213
- llmCall: vi.fn().mockResolvedValue('no'),
214
- eventBus: bus,
215
- runId: 'combined-run',
216
- });
217
- // Step 2: Emit subgraph events via createSubgraphHandler
218
- const parentGraph = parseGraph(SUBGRAPH_PARENT_DOT);
219
- const sgNode = parentGraph.nodes.get('sg_node');
220
- sgNode.attrs = { graph_file: '/test/child.dot' };
221
- const handler = createSubgraphHandler({
222
- handlerRegistry: makeChildRegistry(),
223
- baseDir: '/test',
224
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
225
- logsRoot: os.tmpdir(),
226
- eventBus: bus,
227
- runId: 'combined-run',
228
- });
229
- const ctx2 = new GraphContext({ __runId: 'combined-run' });
230
- await handler(sgNode, ctx2, parentGraph);
231
- // Both event types should be in the stream
232
- const eventNames = new Set(events.map((e) => e.event));
233
- expect(eventNames.has('graph:llm-edge-evaluated')).toBe(true);
234
- expect(eventNames.has('graph:subgraph-started')).toBe(true);
235
- expect(eventNames.has('graph:subgraph-completed')).toBe(true);
236
- });
237
- it('runId is consistent across LLM edge event and subgraph events in same run', async () => {
238
- const { bus, events } = makeEventSpy();
239
- const runId = 'consistent-run-xyz';
240
- // Emit LLM edge event
241
- const node = makeNode('n1');
242
- const llmEdges = [makeEdge('n1', 'n2', { condition: 'llm:check?' }), makeEdge('n1', 'n3')];
243
- const g = makeGraph([node, makeNode('n2'), makeNode('n3')], llmEdges);
244
- await selectEdge(node, SUCCESS_OUTCOME, new GraphContext(), g, {
245
- llmCall: vi.fn().mockResolvedValue('yes'),
246
- eventBus: bus,
247
- runId,
248
- });
249
- // Emit subgraph events
250
- const parentGraph = parseGraph(SUBGRAPH_PARENT_DOT);
251
- const sgNode = parentGraph.nodes.get('sg_node');
252
- sgNode.attrs = { graph_file: '/test/child.dot' };
253
- const handler = createSubgraphHandler({
254
- handlerRegistry: makeChildRegistry(),
255
- baseDir: '/test',
256
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
257
- logsRoot: os.tmpdir(),
258
- eventBus: bus,
259
- runId,
260
- });
261
- await handler(sgNode, new GraphContext({ __runId: runId }), parentGraph);
262
- // All events in this stream should have the same runId
263
- const advancedEvents = events.filter((e) => ['graph:llm-edge-evaluated', 'graph:subgraph-started', 'graph:subgraph-completed'].includes(e.event));
264
- expect(advancedEvents.length).toBeGreaterThan(0);
265
- for (const evt of advancedEvents) {
266
- expect(evt.payload.runId).toBe(runId);
267
- }
268
- });
269
- it('event ordering: subgraph-started always before subgraph-completed in stream', async () => {
270
- const { bus, events } = makeEventSpy();
271
- const parentGraph = parseGraph(SUBGRAPH_PARENT_DOT);
272
- const sgNode = parentGraph.nodes.get('sg_node');
273
- sgNode.attrs = { graph_file: '/test/child.dot' };
274
- const handler = createSubgraphHandler({
275
- handlerRegistry: makeChildRegistry(),
276
- baseDir: '/test',
277
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
278
- logsRoot: os.tmpdir(),
279
- eventBus: bus,
280
- });
281
- await handler(sgNode, new GraphContext({ __runId: 'order-check' }), parentGraph);
282
- const types = events.map((e) => e.event);
283
- const startIdx = types.indexOf('graph:subgraph-started');
284
- const endIdx = types.indexOf('graph:subgraph-completed');
285
- expect(startIdx).toBeLessThan(endIdx);
286
- });
287
- });
288
- //# sourceMappingURL=advanced-graph-events.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advanced-graph-events.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/advanced-graph-events.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Integration test: AC5 — checkpoint resume
3
- *
4
- * Verifies that the executor skips completed nodes, restores context from a
5
- * seed checkpoint, and continues execution from the first unfinished node.
6
- *
7
- * Story 42-15.
8
- */
9
- export {};
10
- //# sourceMappingURL=checkpoint-resume.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpoint-resume.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/checkpoint-resume.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,125 +0,0 @@
1
- /**
2
- * Integration test: AC5 — checkpoint resume
3
- *
4
- * Verifies that the executor skips completed nodes, restores context from a
5
- * seed checkpoint, and continues execution from the first unfinished node.
6
- *
7
- * Story 42-15.
8
- */
9
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
10
- import path from 'node:path';
11
- import { parseGraph } from '../../graph/parser.js';
12
- import { createValidator } from '../../graph/validator.js';
13
- import { createGraphExecutor } from '../../graph/executor.js';
14
- import { CheckpointManager } from '../../graph/checkpoint.js';
15
- import { GraphContext } from '../../graph/context.js';
16
- import { makeTmpDir, cleanDir, makeMockRegistry, makeEventSpy, getNodeStartedIds, } from './helpers.js';
17
- import { FIVE_NODE_LINEAR_DOT } from './graphs.js';
18
- describe('AC5: checkpoint resume — skip completed nodes, restore context', () => {
19
- let logsRoot;
20
- let checkpointPath;
21
- beforeEach(async () => {
22
- logsRoot = await makeTmpDir();
23
- checkpointPath = path.join(logsRoot, 'checkpoint.json');
24
- // Write the seed checkpoint using CheckpointManager.save() for format compatibility
25
- const cm = new CheckpointManager();
26
- await cm.save(logsRoot, {
27
- currentNode: 'node1',
28
- completedNodes: ['start', 'node1'],
29
- nodeRetries: {},
30
- context: new GraphContext({ step: '2', result: 'hello' }),
31
- logs: [],
32
- });
33
- });
34
- afterEach(async () => {
35
- await cleanDir(logsRoot);
36
- });
37
- it('skips completed nodes, restores context, and runs remaining nodes', async () => {
38
- // --- Parse ---
39
- const graph = parseGraph(FIVE_NODE_LINEAR_DOT);
40
- expect(graph.nodes.size).toBe(5);
41
- // --- Validate ---
42
- const validator = createValidator();
43
- const errors = validator.validate(graph).filter((d) => d.severity === 'error');
44
- expect(errors).toHaveLength(0);
45
- // --- Build spy registry that captures context argument for each handler ---
46
- const { registry, spies } = makeMockRegistry();
47
- const { bus, events } = makeEventSpy();
48
- // --- Execute with checkpointPath to trigger resume ---
49
- const outcome = await createGraphExecutor().run(graph, {
50
- runId: 'test-run-ac5',
51
- logsRoot,
52
- handlerRegistry: registry,
53
- eventBus: bus,
54
- checkpointPath,
55
- });
56
- // --- Outcome ---
57
- expect(outcome.status).toBe('SUCCESS');
58
- // --- node-started events must NOT include start or node1 (skipped) ---
59
- const nodeIds = getNodeStartedIds(events);
60
- expect(nodeIds).not.toContain('start');
61
- expect(nodeIds).not.toContain('node1');
62
- // --- node-started events MUST include node2 and node3 (resumed execution) ---
63
- expect(nodeIds).toContain('node2');
64
- expect(nodeIds).toContain('node3');
65
- // node2 must come before node3
66
- const node2Idx = nodeIds.indexOf('node2');
67
- const node3Idx = nodeIds.indexOf('node3');
68
- expect(node2Idx).toBeLessThan(node3Idx);
69
- });
70
- it('node2 handler receives context restored from checkpoint (step=2, result=hello)', async () => {
71
- const graph = parseGraph(FIVE_NODE_LINEAR_DOT);
72
- const { registry, spies } = makeMockRegistry();
73
- await createGraphExecutor().run(graph, {
74
- runId: 'test-run-ac5-ctx',
75
- logsRoot,
76
- handlerRegistry: registry,
77
- checkpointPath,
78
- });
79
- // The node2 spy should have been called exactly once
80
- const node2Spy = spies.get('node2');
81
- expect(node2Spy).toBeDefined();
82
- expect(node2Spy.mock.calls).toHaveLength(1);
83
- // Second argument is the IGraphContext
84
- const capturedContext = node2Spy.mock.calls[0][1];
85
- expect(capturedContext.getString('step')).toBe('2');
86
- expect(capturedContext.getString('result')).toBe('hello');
87
- });
88
- it('start and node1 handlers are never called (they were already completed)', async () => {
89
- const graph = parseGraph(FIVE_NODE_LINEAR_DOT);
90
- const { registry, spies } = makeMockRegistry();
91
- await createGraphExecutor().run(graph, {
92
- runId: 'test-run-ac5-skip',
93
- logsRoot,
94
- handlerRegistry: registry,
95
- checkpointPath,
96
- });
97
- // start and node1 should NOT have been resolved/called
98
- // (the executor fast-forwards through them)
99
- const startSpy = spies.get('start');
100
- const node1Spy = spies.get('node1');
101
- // Spies are created lazily on resolve(); if the spy was never needed,
102
- // the map won't contain it. Either way, no calls should have happened.
103
- if (startSpy)
104
- expect(startSpy.mock.calls).toHaveLength(0);
105
- if (node1Spy)
106
- expect(node1Spy.mock.calls).toHaveLength(0);
107
- });
108
- it('node3 handler is called after node2 completes (correct sequential execution)', async () => {
109
- const graph = parseGraph(FIVE_NODE_LINEAR_DOT);
110
- const { registry, spies } = makeMockRegistry();
111
- await createGraphExecutor().run(graph, {
112
- runId: 'test-run-ac5-seq',
113
- logsRoot,
114
- handlerRegistry: registry,
115
- checkpointPath,
116
- });
117
- const node2Spy = spies.get('node2');
118
- const node3Spy = spies.get('node3');
119
- expect(node2Spy).toBeDefined();
120
- expect(node3Spy).toBeDefined();
121
- expect(node2Spy.mock.calls).toHaveLength(1);
122
- expect(node3Spy.mock.calls).toHaveLength(1);
123
- });
124
- });
125
- //# sourceMappingURL=checkpoint-resume.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpoint-resume.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/checkpoint-resume.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Integration test: AC1 — 5-node conditional pipeline
3
- *
4
- * Verifies that parse → validate → execute works end-to-end for a conditional
5
- * branching graph, routing through the correct path based on context values.
6
- *
7
- * Story 42-15.
8
- */
9
- export {};
10
- //# sourceMappingURL=conditional-pipeline.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conditional-pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/conditional-pipeline.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,106 +0,0 @@
1
- /**
2
- * Integration test: AC1 — 5-node conditional pipeline
3
- *
4
- * Verifies that parse → validate → execute works end-to-end for a conditional
5
- * branching graph, routing through the correct path based on context values.
6
- *
7
- * Story 42-15.
8
- */
9
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
10
- import { parseGraph } from '../../graph/parser.js';
11
- import { createValidator } from '../../graph/validator.js';
12
- import { createGraphExecutor } from '../../graph/executor.js';
13
- import { makeTmpDir, cleanDir, makeMockRegistry, makeEventSpy, getNodeStartedIds, countCheckpointSaved } from './helpers.js';
14
- import { FIVE_NODE_CONDITIONAL_DOT } from './graphs.js';
15
- describe('AC1: 5-node conditional pipeline — parse, validate, execute end-to-end', () => {
16
- let logsRoot;
17
- beforeEach(async () => {
18
- logsRoot = await makeTmpDir();
19
- });
20
- afterEach(async () => {
21
- await cleanDir(logsRoot);
22
- });
23
- it('routes through success path and emits expected events', async () => {
24
- // --- Parse ---
25
- const graph = parseGraph(FIVE_NODE_CONDITIONAL_DOT);
26
- expect(graph.nodes.size).toBe(5);
27
- // --- Validate (zero error violations expected) ---
28
- const validator = createValidator();
29
- const diagnostics = validator.validate(graph);
30
- const errors = diagnostics.filter((d) => d.severity === 'error');
31
- expect(errors).toHaveLength(0);
32
- // --- Build mock registry ---
33
- // `analyze` returns contextUpdates: { status: 'success' } so the condition
34
- // `status=success` on the analyze → report edge evaluates to true.
35
- const { registry } = makeMockRegistry({
36
- analyze: { contextUpdates: { status: 'success' } },
37
- });
38
- // --- Event spy ---
39
- const { bus, events } = makeEventSpy();
40
- // --- Execute ---
41
- const executor = createGraphExecutor();
42
- const outcome = await executor.run(graph, {
43
- runId: 'test-run-ac1',
44
- logsRoot,
45
- handlerRegistry: registry,
46
- eventBus: bus,
47
- });
48
- // --- Assertions ---
49
- // Outcome should be SUCCESS
50
- expect(outcome.status).toBe('SUCCESS');
51
- // node-started events: start → analyze → report (exit skipped — executor
52
- // returns before emitting node-started for the exit node)
53
- const nodeIds = getNodeStartedIds(events);
54
- expect(nodeIds).toEqual(['start', 'analyze', 'report']);
55
- // Fallback node must NOT have been visited
56
- expect(nodeIds).not.toContain('fallback');
57
- // checkpoint-saved events: one per non-exit completed node (start, analyze, report)
58
- const checkpointCount = countCheckpointSaved(events);
59
- expect(checkpointCount).toBe(3);
60
- });
61
- it('routes through failure path when context has status=failure', async () => {
62
- const graph = parseGraph(FIVE_NODE_CONDITIONAL_DOT);
63
- // `analyze` returns contextUpdates: { status: 'failure' } → routes to fallback
64
- const { registry } = makeMockRegistry({
65
- analyze: { contextUpdates: { status: 'failure' } },
66
- });
67
- const { bus, events } = makeEventSpy();
68
- const outcome = await createGraphExecutor().run(graph, {
69
- runId: 'test-run-ac1-failure',
70
- logsRoot,
71
- handlerRegistry: registry,
72
- eventBus: bus,
73
- });
74
- expect(outcome.status).toBe('SUCCESS');
75
- const nodeIds = getNodeStartedIds(events);
76
- expect(nodeIds).toEqual(['start', 'analyze', 'fallback']);
77
- expect(nodeIds).not.toContain('report');
78
- });
79
- it('parses the graph to exactly 5 nodes with correct ids', () => {
80
- const graph = parseGraph(FIVE_NODE_CONDITIONAL_DOT);
81
- expect(graph.nodes.has('start')).toBe(true);
82
- expect(graph.nodes.has('analyze')).toBe(true);
83
- expect(graph.nodes.has('report')).toBe(true);
84
- expect(graph.nodes.has('fallback')).toBe(true);
85
- expect(graph.nodes.has('exit')).toBe(true);
86
- });
87
- it('run twice sequentially produces SUCCESS both times', async () => {
88
- const graph = parseGraph(FIVE_NODE_CONDITIONAL_DOT);
89
- const { registry } = makeMockRegistry({
90
- analyze: { contextUpdates: { status: 'success' } },
91
- });
92
- const o1 = await createGraphExecutor().run(graph, {
93
- runId: 'test-sequential-1',
94
- logsRoot,
95
- handlerRegistry: registry,
96
- });
97
- const o2 = await createGraphExecutor().run(graph, {
98
- runId: 'test-sequential-2',
99
- logsRoot,
100
- handlerRegistry: registry,
101
- });
102
- expect(o1.status).toBe('SUCCESS');
103
- expect(o2.status).toBe('SUCCESS');
104
- });
105
- });
106
- //# sourceMappingURL=conditional-pipeline.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conditional-pipeline.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/conditional-pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Convergence loop cross-project validation integration tests.
3
- * Story 45-10: validates trycycle.dot fixture, two-iteration convergence via
4
- * conditional routing, pipeline budget cap, plateau detection, and remediation
5
- * context injection — all using real convergence implementations.
6
- *
7
- * AC2 — trycycle.dot fixture parses and validates without errors (5 nodes, correct attributes).
8
- * AC3 — two-iteration convergence: goal gate fails (score<0.8) then passes (score=1.0).
9
- * AC4 — pipeline budget cap halts the convergence loop.
10
- * AC5 — plateau detection halts the loop after constant scores fill the window.
11
- * AC6 — remediation context is injected before the retry dispatch at the exit goal gate.
12
- */
13
- export {};
14
- //# sourceMappingURL=convergence-validation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convergence-validation.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/convergence-validation.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}