@substrate-ai/factory 0.19.54 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/README.md +39 -0
  2. package/dist/config.d.ts +4 -4
  3. package/package.json +12 -3
  4. package/dist/__tests__/config.test.d.ts +0 -11
  5. package/dist/__tests__/config.test.d.ts.map +0 -1
  6. package/dist/__tests__/config.test.js +0 -215
  7. package/dist/__tests__/config.test.js.map +0 -1
  8. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  9. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  10. package/dist/__tests__/factory-run-command.test.js +0 -454
  11. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  12. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  13. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  14. package/dist/__tests__/factory-validate-command.test.js +0 -339
  15. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  19. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  23. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  25. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  26. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  27. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  31. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  35. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  37. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  38. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  39. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  41. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  42. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  43. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  45. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  46. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  47. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  49. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  51. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  55. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  59. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  63. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  64. package/dist/__tests__/integration/events.test.d.ts +0 -8
  65. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  66. package/dist/__tests__/integration/events.test.js +0 -194
  67. package/dist/__tests__/integration/events.test.js.map +0 -1
  68. package/dist/__tests__/integration/graphs.d.ts +0 -59
  69. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  70. package/dist/__tests__/integration/graphs.js +0 -164
  71. package/dist/__tests__/integration/graphs.js.map +0 -1
  72. package/dist/__tests__/integration/helpers.d.ts +0 -127
  73. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  74. package/dist/__tests__/integration/helpers.js +0 -167
  75. package/dist/__tests__/integration/helpers.js.map +0 -1
  76. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  77. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/integrity.test.js +0 -198
  79. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  81. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  83. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  84. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  85. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  87. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  89. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  91. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  95. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  96. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  97. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  98. package/dist/__tests__/integration/persistence.test.js +0 -129
  99. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  103. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  105. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  107. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  109. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  111. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  113. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  115. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  116. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  117. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  119. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  120. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  121. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  122. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  123. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  124. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  125. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  126. package/dist/agent/__tests__/loop.test.js +0 -868
  127. package/dist/agent/__tests__/loop.test.js.map +0 -1
  128. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  129. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  130. package/dist/agent/__tests__/truncation.test.js +0 -276
  131. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  135. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  136. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  137. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  138. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  139. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  141. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  143. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  145. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  146. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  147. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  148. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  149. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  150. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  151. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  153. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  154. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  155. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  156. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  157. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  158. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  159. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  160. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  161. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  162. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  163. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  164. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  165. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  166. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  167. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  169. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  170. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  171. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  172. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  173. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  174. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  175. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  176. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  177. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  178. package/dist/backend/__tests__/parity.test.js +0 -411
  179. package/dist/backend/__tests__/parity.test.js.map +0 -1
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  181. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  182. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  183. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  184. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  185. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  186. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  187. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  189. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  191. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  192. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  193. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  194. package/dist/context/__tests__/summarizer.test.js +0 -189
  195. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  196. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  197. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  198. package/dist/context/__tests__/summary-cache.test.js +0 -214
  199. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  200. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  201. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  202. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  203. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  204. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  205. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  206. package/dist/context/__tests__/summary-types.test.js +0 -130
  207. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  208. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  209. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  210. package/dist/convergence/__tests__/budget.test.js +0 -187
  211. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  212. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  213. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  214. package/dist/convergence/__tests__/controller.test.js +0 -585
  215. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  217. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  218. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  219. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  221. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  222. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  223. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  224. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  225. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  226. package/dist/convergence/__tests__/plateau.test.js +0 -163
  227. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  228. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  229. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  230. package/dist/convergence/__tests__/remediation.test.js +0 -209
  231. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  233. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  234. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  235. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  236. package/dist/factory-command.test.d.ts +0 -8
  237. package/dist/factory-command.test.d.ts.map +0 -1
  238. package/dist/factory-command.test.js +0 -304
  239. package/dist/factory-command.test.js.map +0 -1
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  241. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  242. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  243. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  244. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  245. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  246. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  247. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  248. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  249. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  250. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  251. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  252. package/dist/graph/__tests__/context.test.d.ts +0 -14
  253. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  254. package/dist/graph/__tests__/context.test.js +0 -276
  255. package/dist/graph/__tests__/context.test.js.map +0 -1
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  257. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  258. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  259. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  260. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  261. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  262. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  263. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  265. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  266. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  267. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  269. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  270. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  271. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  272. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  273. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  274. package/dist/graph/__tests__/executor.test.js +0 -901
  275. package/dist/graph/__tests__/executor.test.js.map +0 -1
  276. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  277. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  278. package/dist/graph/__tests__/fidelity.test.js +0 -135
  279. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  281. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  282. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  283. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  285. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  286. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  287. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  288. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  289. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  290. package/dist/graph/__tests__/parser.test.js +0 -452
  291. package/dist/graph/__tests__/parser.test.js.map +0 -1
  292. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  293. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  294. package/dist/graph/__tests__/run-state.test.js +0 -189
  295. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  296. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  297. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  298. package/dist/graph/__tests__/transformer.test.js +0 -350
  299. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  300. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  301. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  302. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  303. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  305. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  306. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  307. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  309. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  310. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  311. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  312. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  313. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  314. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  315. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  316. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  317. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  318. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  319. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  321. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  322. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  323. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  325. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  326. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  327. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  329. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  330. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  331. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  333. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  334. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  335. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  336. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  337. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  338. package/dist/handlers/__tests__/registry.test.js +0 -315
  339. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  341. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  342. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  343. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  347. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  348. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  349. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  350. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  351. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  353. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  354. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  355. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  357. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  358. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  359. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  361. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  362. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  363. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  364. package/dist/llm/__tests__/client.test.d.ts +0 -2
  365. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  366. package/dist/llm/__tests__/client.test.js +0 -198
  367. package/dist/llm/__tests__/client.test.js.map +0 -1
  368. package/dist/llm/__tests__/types.test.d.ts +0 -2
  369. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/llm/__tests__/types.test.js +0 -289
  371. package/dist/llm/__tests__/types.test.js.map +0 -1
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  375. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  377. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  378. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  379. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  381. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  382. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  383. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  385. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  386. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  387. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  389. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  390. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  391. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  392. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  393. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  394. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  395. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  397. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  398. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  399. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  401. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  402. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  403. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  405. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  406. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  407. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  409. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  410. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  411. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  415. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  417. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  418. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  419. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  420. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  421. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  422. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  423. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  425. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  426. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  427. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  428. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  429. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  430. package/dist/scenarios/__tests__/store.test.js +0 -169
  431. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  433. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  434. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  435. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  436. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  437. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  438. package/dist/templates/__tests__/templates.test.js +0 -92
  439. package/dist/templates/__tests__/templates.test.js.map +0 -1
  440. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  441. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  442. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  443. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  444. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  445. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  446. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  447. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  449. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  450. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  451. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  452. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
  453. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
  454. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
  455. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
  456. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  457. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  458. package/dist/twins/__tests__/integration/helpers.js +0 -67
  459. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  460. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  461. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  462. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  463. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  464. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  465. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  466. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  467. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  468. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  469. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  470. package/dist/twins/__tests__/persistence.test.js +0 -300
  471. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  472. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  473. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  474. package/dist/twins/__tests__/registry.test.js +0 -282
  475. package/dist/twins/__tests__/registry.test.js.map +0 -1
  476. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  477. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  478. package/dist/twins/__tests__/run-state.test.js +0 -112
  479. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  480. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  481. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  482. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  483. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  484. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  485. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  486. package/dist/twins/__tests__/templates.test.js +0 -87
  487. package/dist/twins/__tests__/templates.test.js.map +0 -1
  488. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  489. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  490. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  491. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"stylesheet-application.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/stylesheet-application.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Integration test: AC6 — model stylesheet properties applied before handler dispatch
3
- *
4
- * Verifies that the stylesheet resolver correctly applies per-node LLM routing
5
- * properties with specificity-based precedence. The test applies the stylesheet
6
- * resolver to graph nodes before execution so that spy handlers receive the
7
- * resolved node attributes.
8
- *
9
- * Story 42-15.
10
- */
11
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
12
- import { parseGraph } from '../../graph/parser.js';
13
- import { createValidator } from '../../graph/validator.js';
14
- import { createGraphExecutor } from '../../graph/executor.js';
15
- import { parseStylesheet } from '../../stylesheet/parser.js';
16
- import { resolveNodeStyles } from '../../stylesheet/resolver.js';
17
- import { makeTmpDir, cleanDir, makeMockRegistry, makeEventSpy } from './helpers.js';
18
- import { STYLESHEET_DOT } from './graphs.js';
19
- describe('AC6: model stylesheet properties applied before handler dispatch', () => {
20
- let logsRoot;
21
- beforeEach(async () => {
22
- logsRoot = await makeTmpDir();
23
- });
24
- afterEach(async () => {
25
- await cleanDir(logsRoot);
26
- });
27
- it('parses graph with non-empty modelStylesheet', () => {
28
- const graph = parseGraph(STYLESHEET_DOT);
29
- expect(graph.modelStylesheet).not.toBe('');
30
- expect(graph.modelStylesheet).toContain('claude-3-haiku-20240307');
31
- expect(graph.modelStylesheet).toContain('claude-opus-4-5');
32
- });
33
- it('stylesheet parser resolves analyze to opus and summarize to haiku (unit check)', () => {
34
- const graph = parseGraph(STYLESHEET_DOT);
35
- const stylesheet = parseStylesheet(graph.modelStylesheet);
36
- const analyzeNode = graph.nodes.get('analyze');
37
- const summarizeNode = graph.nodes.get('summarize');
38
- const analyzeResolved = resolveNodeStyles(analyzeNode, stylesheet);
39
- const summarizeResolved = resolveNodeStyles(summarizeNode, stylesheet);
40
- expect(analyzeResolved.llmModel).toBe('claude-opus-4-5');
41
- expect(summarizeResolved.llmModel).toBe('claude-3-haiku-20240307');
42
- });
43
- it('id-level specificity wins over universal selector for analyze node', () => {
44
- const graph = parseGraph(STYLESHEET_DOT);
45
- const stylesheet = parseStylesheet(graph.modelStylesheet);
46
- const analyzeNode = graph.nodes.get('analyze');
47
- const resolved = resolveNodeStyles(analyzeNode, stylesheet);
48
- // #analyze rule (specificity=3) overrides * rule (specificity=0)
49
- expect(resolved.llmModel).toBe('claude-opus-4-5');
50
- });
51
- it('universal selector applies to summarize (no id override)', () => {
52
- const graph = parseGraph(STYLESHEET_DOT);
53
- const stylesheet = parseStylesheet(graph.modelStylesheet);
54
- const summarizeNode = graph.nodes.get('summarize');
55
- const resolved = resolveNodeStyles(summarizeNode, stylesheet);
56
- // Only * rule applies (no #summarize rule)
57
- expect(resolved.llmModel).toBe('claude-3-haiku-20240307');
58
- });
59
- it('spy handler for analyze receives node with llmModel=claude-opus-4-5 after stylesheet application', async () => {
60
- const graph = parseGraph(STYLESHEET_DOT);
61
- // Apply stylesheet to graph nodes before running the executor
62
- // (integration between the stylesheet resolver and the execution layer)
63
- const stylesheet = parseStylesheet(graph.modelStylesheet);
64
- for (const node of graph.nodes.values()) {
65
- const resolved = resolveNodeStyles(node, stylesheet);
66
- // Explicit node attribute takes priority (merge: explicit wins over resolved).
67
- // Cast through unknown to mutate the plain object (buildGraphNode returns a mutable struct).
68
- const mutableNode = node;
69
- if (!node.llmModel && resolved.llmModel) {
70
- mutableNode['llmModel'] = resolved.llmModel;
71
- }
72
- if (!node.llmProvider && resolved.llmProvider) {
73
- mutableNode['llmProvider'] = resolved.llmProvider;
74
- }
75
- if (!node.reasoningEffort && resolved.reasoningEffort) {
76
- mutableNode['reasoningEffort'] = resolved.reasoningEffort;
77
- }
78
- }
79
- // Verify the mutation was applied
80
- expect(graph.nodes.get('analyze').llmModel).toBe('claude-opus-4-5');
81
- expect(graph.nodes.get('summarize').llmModel).toBe('claude-3-haiku-20240307');
82
- // --- Build spy registry ---
83
- const { registry, spies } = makeMockRegistry();
84
- const { bus } = makeEventSpy();
85
- // --- Execute ---
86
- const outcome = await createGraphExecutor().run(graph, {
87
- runId: 'test-run-ac6',
88
- logsRoot,
89
- handlerRegistry: registry,
90
- eventBus: bus,
91
- });
92
- expect(outcome.status).toBe('SUCCESS');
93
- // --- Verify spy handler received node with stylesheet-applied llmModel ---
94
- const analyzeSpy = spies.get('analyze');
95
- const summarizeSpy = spies.get('summarize');
96
- expect(analyzeSpy).toBeDefined();
97
- expect(summarizeSpy).toBeDefined();
98
- // First argument to the handler is the GraphNode
99
- const analyzeNode = analyzeSpy.mock.calls[0][0];
100
- const summarizeNode = summarizeSpy.mock.calls[0][0];
101
- expect(analyzeNode.llmModel).toBe('claude-opus-4-5');
102
- expect(summarizeNode.llmModel).toBe('claude-3-haiku-20240307');
103
- });
104
- it('executor runs the stylesheet graph to SUCCESS with all nodes executing', async () => {
105
- const graph = parseGraph(STYLESHEET_DOT);
106
- // Validate: no errors
107
- const validator = createValidator();
108
- const errors = validator.validate(graph).filter((d) => d.severity === 'error');
109
- expect(errors).toHaveLength(0);
110
- const { registry } = makeMockRegistry();
111
- const outcome = await createGraphExecutor().run(graph, {
112
- runId: 'test-run-ac6-simple',
113
- logsRoot,
114
- handlerRegistry: registry,
115
- });
116
- expect(outcome.status).toBe('SUCCESS');
117
- });
118
- });
119
- //# sourceMappingURL=stylesheet-application.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stylesheet-application.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/stylesheet-application.test.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Integration tests for subgraph execution handler.
3
- * Story 50-11 AC3.
4
- *
5
- * Tests cover:
6
- * - Basic subgraph execution (happy path → SUCCESS)
7
- * - Missing graph_file attribute → FAILURE
8
- * - graphFileLoader throws → FAILURE with load error
9
- * - Invalid child DOT → FAILURE with parse error
10
- * - Max-depth guard → FAILURE when depth >= maxDepth
11
- * - graph:subgraph-started emitted with correct payload
12
- * - graph:subgraph-completed emitted on success
13
- * - Event ordering (started before completed)
14
- * - Absent eventBus handling
15
- * - runId resolution from context.__runId
16
- * - Custom maxDepth option honoured
17
- *
18
- * Test approach: invoke `createSubgraphHandler(options)` directly with an
19
- * injectable `graphFileLoader` — no real disk access.
20
- *
21
- * ≥12 `it(...)` cases required (AC7).
22
- */
23
- export {};
24
- //# sourceMappingURL=subgraph-execution.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subgraph-execution.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/subgraph-execution.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
@@ -1,291 +0,0 @@
1
- /**
2
- * Integration tests for subgraph execution handler.
3
- * Story 50-11 AC3.
4
- *
5
- * Tests cover:
6
- * - Basic subgraph execution (happy path → SUCCESS)
7
- * - Missing graph_file attribute → FAILURE
8
- * - graphFileLoader throws → FAILURE with load error
9
- * - Invalid child DOT → FAILURE with parse error
10
- * - Max-depth guard → FAILURE when depth >= maxDepth
11
- * - graph:subgraph-started emitted with correct payload
12
- * - graph:subgraph-completed emitted on success
13
- * - Event ordering (started before completed)
14
- * - Absent eventBus handling
15
- * - runId resolution from context.__runId
16
- * - Custom maxDepth option honoured
17
- *
18
- * Test approach: invoke `createSubgraphHandler(options)` directly with an
19
- * injectable `graphFileLoader` — no real disk access.
20
- *
21
- * ≥12 `it(...)` cases required (AC7).
22
- */
23
- import { describe, it, expect, vi, beforeEach } from 'vitest';
24
- import os from 'node:os';
25
- import { parseGraph } from '../../graph/parser.js';
26
- import { GraphContext } from '../../graph/context.js';
27
- import { HandlerRegistry } from '../../handlers/registry.js';
28
- import { startHandler } from '../../handlers/start.js';
29
- import { exitHandler } from '../../handlers/exit.js';
30
- import { createSubgraphHandler } from '../../handlers/subgraph.js';
31
- import { SUBGRAPH_PARENT_DOT, CHILD_GRAPH_DOT, } from '../fixtures/subgraph-parent.dot.js';
32
- function makeEventSpy() {
33
- const events = [];
34
- const bus = {
35
- emit(event, payload) {
36
- events.push({ event: event, payload });
37
- },
38
- on() { },
39
- off() { },
40
- };
41
- return { bus, events };
42
- }
43
- /**
44
- * Build a HandlerRegistry suitable for executing the child DOT graphs in tests.
45
- * Registers start/exit plus a default SUCCESS handler for any other node type.
46
- */
47
- function makeChildRegistry() {
48
- const registry = new HandlerRegistry();
49
- registry.register('start', startHandler);
50
- registry.register('exit', exitHandler);
51
- registry.setDefault(vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
52
- return registry;
53
- }
54
- /** Parsed parent graph with sg_node.attrs post-processed for a given graph_file path. */
55
- function makeParentGraph(graphFile = '/test/child.dot') {
56
- const graph = parseGraph(SUBGRAPH_PARENT_DOT);
57
- const sgNode = graph.nodes.get('sg_node');
58
- sgNode.attrs = { graph_file: graphFile };
59
- return { graph, sgNodeId: 'sg_node' };
60
- }
61
- // ---------------------------------------------------------------------------
62
- // AC3: Subgraph basic execution
63
- // ---------------------------------------------------------------------------
64
- describe('subgraph execution — basic success path', () => {
65
- it('handler returns SUCCESS when child graph executes successfully', async () => {
66
- const { graph, sgNodeId } = makeParentGraph();
67
- const sgNode = graph.nodes.get(sgNodeId);
68
- const registry = makeChildRegistry();
69
- const handler = createSubgraphHandler({
70
- handlerRegistry: registry,
71
- baseDir: '/test',
72
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
73
- logsRoot: os.tmpdir(),
74
- });
75
- const context = new GraphContext({ __runId: 'test-sg-basic' });
76
- const outcome = await handler(sgNode, context, graph);
77
- expect(outcome.status).toBe('SUCCESS');
78
- });
79
- it('handler returns FAILURE when node.attrs is missing graph_file', async () => {
80
- const graph = parseGraph(SUBGRAPH_PARENT_DOT);
81
- const sgNode = graph.nodes.get('sg_node');
82
- // Intentionally do NOT set sgNode.attrs
83
- const handler = createSubgraphHandler({
84
- handlerRegistry: makeChildRegistry(),
85
- baseDir: '/test',
86
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
87
- });
88
- const context = new GraphContext({ __runId: 'test-no-attr' });
89
- const outcome = await handler(sgNode, context, graph);
90
- expect(outcome.status).toBe('FAILURE');
91
- expect(outcome.failureReason).toContain('missing required attribute graph_file');
92
- });
93
- it('handler returns FAILURE when graphFileLoader throws', async () => {
94
- const { graph, sgNodeId } = makeParentGraph();
95
- const sgNode = graph.nodes.get(sgNodeId);
96
- const failingLoader = vi.fn().mockRejectedValue(new Error('file not found'));
97
- const handler = createSubgraphHandler({
98
- handlerRegistry: makeChildRegistry(),
99
- baseDir: '/test',
100
- graphFileLoader: failingLoader,
101
- });
102
- const context = new GraphContext({ __runId: 'test-loader-fail' });
103
- const outcome = await handler(sgNode, context, graph);
104
- expect(outcome.status).toBe('FAILURE');
105
- expect(outcome.failureReason).toContain('failed to load');
106
- expect(outcome.failureReason).toContain('file not found');
107
- });
108
- it('handler returns FAILURE when child DOT string is invalid (parse error)', async () => {
109
- const { graph, sgNodeId } = makeParentGraph();
110
- const sgNode = graph.nodes.get(sgNodeId);
111
- const handler = createSubgraphHandler({
112
- handlerRegistry: makeChildRegistry(),
113
- baseDir: '/test',
114
- graphFileLoader: vi.fn().mockResolvedValue('THIS IS NOT VALID DOT SYNTAX @@@###'),
115
- });
116
- const context = new GraphContext({ __runId: 'test-invalid-dot' });
117
- const outcome = await handler(sgNode, context, graph);
118
- expect(outcome.status).toBe('FAILURE');
119
- expect(outcome.failureReason).toContain('failed to parse');
120
- });
121
- });
122
- // ---------------------------------------------------------------------------
123
- // Depth guard tests
124
- // ---------------------------------------------------------------------------
125
- describe('subgraph execution — depth guard', () => {
126
- it('returns FAILURE when subgraph._depth >= maxDepth (default 5)', async () => {
127
- const { graph, sgNodeId } = makeParentGraph();
128
- const sgNode = graph.nodes.get(sgNodeId);
129
- const handler = createSubgraphHandler({
130
- handlerRegistry: makeChildRegistry(),
131
- baseDir: '/test',
132
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
133
- // maxDepth defaults to 5
134
- });
135
- // Set depth to 5 — equals maxDepth (5) → guard fires
136
- const context = new GraphContext({ __runId: 'test-depth-max', 'subgraph._depth': 5 });
137
- const outcome = await handler(sgNode, context, graph);
138
- expect(outcome.status).toBe('FAILURE');
139
- expect(outcome.failureReason).toContain('depth limit exceeded');
140
- });
141
- it('custom maxDepth=2: depth=1 succeeds, depth=2 fails', async () => {
142
- const { graph, sgNodeId } = makeParentGraph();
143
- const sgNode = graph.nodes.get(sgNodeId);
144
- const handler = createSubgraphHandler({
145
- handlerRegistry: makeChildRegistry(),
146
- baseDir: '/test',
147
- maxDepth: 2,
148
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
149
- logsRoot: os.tmpdir(),
150
- });
151
- // depth=1 < maxDepth=2 → should succeed
152
- const contextOk = new GraphContext({ __runId: 'test-custom-depth-ok', 'subgraph._depth': 1 });
153
- const successOutcome = await handler(sgNode, contextOk, graph);
154
- expect(successOutcome.status).toBe('SUCCESS');
155
- // depth=2 >= maxDepth=2 → should fail
156
- const contextFail = new GraphContext({ __runId: 'test-custom-depth-fail', 'subgraph._depth': 2 });
157
- const failOutcome = await handler(sgNode, contextFail, graph);
158
- expect(failOutcome.status).toBe('FAILURE');
159
- expect(failOutcome.failureReason).toContain('depth limit exceeded');
160
- });
161
- });
162
- // ---------------------------------------------------------------------------
163
- // Event emission tests
164
- // ---------------------------------------------------------------------------
165
- describe('subgraph execution — event emission', () => {
166
- beforeEach(() => {
167
- vi.clearAllMocks();
168
- });
169
- it('graph:subgraph-started emitted once with correct nodeId', async () => {
170
- const { bus, events } = makeEventSpy();
171
- const { graph, sgNodeId } = makeParentGraph();
172
- const sgNode = graph.nodes.get(sgNodeId);
173
- const handler = createSubgraphHandler({
174
- handlerRegistry: makeChildRegistry(),
175
- baseDir: '/test',
176
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
177
- logsRoot: os.tmpdir(),
178
- eventBus: bus,
179
- runId: 'evt-test',
180
- });
181
- const context = new GraphContext({ __runId: 'evt-test' });
182
- await handler(sgNode, context, graph);
183
- const started = events.filter((e) => e.event === 'graph:subgraph-started');
184
- expect(started).toHaveLength(1);
185
- expect(started[0].payload.nodeId).toBe('sg_node');
186
- });
187
- it('graph:subgraph-completed emitted once on success', async () => {
188
- const { bus, events } = makeEventSpy();
189
- const { graph, sgNodeId } = makeParentGraph();
190
- const sgNode = graph.nodes.get(sgNodeId);
191
- const handler = createSubgraphHandler({
192
- handlerRegistry: makeChildRegistry(),
193
- baseDir: '/test',
194
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
195
- logsRoot: os.tmpdir(),
196
- eventBus: bus,
197
- runId: 'evt-test',
198
- });
199
- const context = new GraphContext({ __runId: 'evt-test' });
200
- await handler(sgNode, context, graph);
201
- const completed = events.filter((e) => e.event === 'graph:subgraph-completed');
202
- expect(completed).toHaveLength(1);
203
- expect(completed[0].payload.status).toBe('SUCCESS');
204
- });
205
- it('graph:subgraph-completed has durationMs >= 0', async () => {
206
- const { bus, events } = makeEventSpy();
207
- const { graph, sgNodeId } = makeParentGraph();
208
- const sgNode = graph.nodes.get(sgNodeId);
209
- const handler = createSubgraphHandler({
210
- handlerRegistry: makeChildRegistry(),
211
- baseDir: '/test',
212
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
213
- logsRoot: os.tmpdir(),
214
- eventBus: bus,
215
- });
216
- const context = new GraphContext({ __runId: 'evt-duration' });
217
- await handler(sgNode, context, graph);
218
- const completed = events.filter((e) => e.event === 'graph:subgraph-completed');
219
- const durationMs = completed[0].payload.durationMs;
220
- expect(typeof durationMs).toBe('number');
221
- expect(durationMs).toBeGreaterThanOrEqual(0);
222
- });
223
- it('graph:subgraph-started emitted before graph:subgraph-completed', async () => {
224
- const { bus, events } = makeEventSpy();
225
- const { graph, sgNodeId } = makeParentGraph();
226
- const sgNode = graph.nodes.get(sgNodeId);
227
- const handler = createSubgraphHandler({
228
- handlerRegistry: makeChildRegistry(),
229
- baseDir: '/test',
230
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
231
- logsRoot: os.tmpdir(),
232
- eventBus: bus,
233
- });
234
- const context = new GraphContext({ __runId: 'evt-order' });
235
- await handler(sgNode, context, graph);
236
- const types = events.map((e) => e.event);
237
- const startIdx = types.indexOf('graph:subgraph-started');
238
- const endIdx = types.indexOf('graph:subgraph-completed');
239
- expect(startIdx).toBeGreaterThanOrEqual(0);
240
- expect(endIdx).toBeGreaterThanOrEqual(0);
241
- expect(startIdx).toBeLessThan(endIdx);
242
- });
243
- it('graph:subgraph-started carries depth=0 for un-nested (root) subgraph', async () => {
244
- const { bus, events } = makeEventSpy();
245
- const { graph, sgNodeId } = makeParentGraph();
246
- const sgNode = graph.nodes.get(sgNodeId);
247
- const handler = createSubgraphHandler({
248
- handlerRegistry: makeChildRegistry(),
249
- baseDir: '/test',
250
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
251
- logsRoot: os.tmpdir(),
252
- eventBus: bus,
253
- });
254
- // No subgraph._depth in context → defaults to 0
255
- const context = new GraphContext({ __runId: 'evt-depth-root' });
256
- await handler(sgNode, context, graph);
257
- const started = events.find((e) => e.event === 'graph:subgraph-started');
258
- expect(started.payload.depth).toBe(0);
259
- });
260
- it('runId from context.__runId flows into subgraph event payloads', async () => {
261
- const { bus, events } = makeEventSpy();
262
- const { graph, sgNodeId } = makeParentGraph();
263
- const sgNode = graph.nodes.get(sgNodeId);
264
- const handler = createSubgraphHandler({
265
- handlerRegistry: makeChildRegistry(),
266
- baseDir: '/test',
267
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
268
- logsRoot: os.tmpdir(),
269
- eventBus: bus,
270
- // No runId in options — should fall back to context.__runId
271
- });
272
- const context = new GraphContext({ __runId: 'my-run-42' });
273
- await handler(sgNode, context, graph);
274
- const started = events.find((e) => e.event === 'graph:subgraph-started');
275
- expect(started.payload.runId).toBe('my-run-42');
276
- });
277
- it('absent eventBus: handler completes without crash', async () => {
278
- const { graph, sgNodeId } = makeParentGraph();
279
- const sgNode = graph.nodes.get(sgNodeId);
280
- const handler = createSubgraphHandler({
281
- handlerRegistry: makeChildRegistry(),
282
- baseDir: '/test',
283
- graphFileLoader: vi.fn().mockResolvedValue(CHILD_GRAPH_DOT),
284
- logsRoot: os.tmpdir(),
285
- // No eventBus
286
- });
287
- const context = new GraphContext({ __runId: 'no-bus' });
288
- await expect(handler(sgNode, context, graph)).resolves.toMatchObject({ status: 'SUCCESS' });
289
- });
290
- });
291
- //# sourceMappingURL=subgraph-execution.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subgraph-execution.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/subgraph-execution.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Integration tests: AC3 — error rules block execution
3
- * AC4 — warning rules allow execution
4
- *
5
- * Story 42-15.
6
- */
7
- export {};
8
- //# sourceMappingURL=validation-errors.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation-errors.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/validation-errors.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,150 +0,0 @@
1
- /**
2
- * Integration tests: AC3 — error rules block execution
3
- * AC4 — warning rules allow execution
4
- *
5
- * Story 42-15.
6
- */
7
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
- import { parseGraph } from '../../graph/parser.js';
9
- import { createValidator } from '../../graph/validator.js';
10
- import { createGraphExecutor } from '../../graph/executor.js';
11
- import { makeTmpDir, cleanDir, makeMockRegistry } from './helpers.js';
12
- import { ERROR_RULE_VIOLATION_DOT, WARNING_RULE_VIOLATION_DOT } from './graphs.js';
13
- // ---------------------------------------------------------------------------
14
- // runWithValidation helper
15
- // ---------------------------------------------------------------------------
16
- /**
17
- * Parse `dotString`, validate the graph, throw if any error-level diagnostics
18
- * are found, otherwise run the executor with `config`.
19
- *
20
- * @throws Error with "validation errors" in the message when the graph has errors.
21
- */
22
- async function runWithValidation(dotString, config) {
23
- const graph = parseGraph(dotString);
24
- const validator = createValidator();
25
- const errors = validator.validate(graph).filter((d) => d.severity === 'error');
26
- if (errors.length > 0) {
27
- const ruleIds = errors.map((e) => e.ruleId).join(', ');
28
- throw new Error(`Graph has validation errors: ${ruleIds}`);
29
- }
30
- // Cast needed: executor returns events.ts:Outcome (StageStatus) but test
31
- // types are compatible for the SUCCESS/FAIL cases we assert.
32
- return createGraphExecutor().run(graph, config);
33
- }
34
- // ---------------------------------------------------------------------------
35
- // AC3: Error-rule violations block execution
36
- // ---------------------------------------------------------------------------
37
- describe('AC3: error-rule violations block execution', () => {
38
- let logsRoot;
39
- beforeEach(async () => {
40
- logsRoot = await makeTmpDir();
41
- });
42
- afterEach(async () => {
43
- await cleanDir(logsRoot);
44
- });
45
- it('validate() returns at least 2 error diagnostics naming reachability and start_no_incoming', () => {
46
- const graph = parseGraph(ERROR_RULE_VIOLATION_DOT);
47
- const validator = createValidator();
48
- const diagnostics = validator.validate(graph);
49
- const errors = diagnostics.filter((d) => d.severity === 'error');
50
- expect(errors.length).toBeGreaterThanOrEqual(2);
51
- const ruleIds = errors.map((d) => d.ruleId);
52
- expect(ruleIds).toContain('reachability');
53
- expect(ruleIds).toContain('start_no_incoming');
54
- });
55
- it('reachability error correctly identifies the orphan node', () => {
56
- const graph = parseGraph(ERROR_RULE_VIOLATION_DOT);
57
- const validator = createValidator();
58
- const diagnostics = validator.validate(graph);
59
- const reachabilityErrors = diagnostics.filter((d) => d.ruleId === 'reachability');
60
- expect(reachabilityErrors.length).toBeGreaterThanOrEqual(1);
61
- const orphanError = reachabilityErrors.find((d) => d.nodeId === 'orphan');
62
- expect(orphanError).toBeDefined();
63
- expect(orphanError?.severity).toBe('error');
64
- });
65
- it('start_no_incoming error correctly identifies the violating edge', () => {
66
- const graph = parseGraph(ERROR_RULE_VIOLATION_DOT);
67
- const validator = createValidator();
68
- const diagnostics = validator.validate(graph);
69
- const incomingErrors = diagnostics.filter((d) => d.ruleId === 'start_no_incoming');
70
- expect(incomingErrors.length).toBeGreaterThanOrEqual(1);
71
- expect(incomingErrors[0]?.severity).toBe('error');
72
- });
73
- it('runWithValidation throws with /validation errors/ for error graph', async () => {
74
- const { registry } = makeMockRegistry();
75
- await expect(runWithValidation(ERROR_RULE_VIOLATION_DOT, {
76
- runId: 'test-run-ac3',
77
- logsRoot,
78
- handlerRegistry: registry,
79
- })).rejects.toThrow(/validation errors/);
80
- });
81
- it('runWithValidation thrown message includes rule IDs', async () => {
82
- const { registry } = makeMockRegistry();
83
- let thrownMessage = '';
84
- try {
85
- await runWithValidation(ERROR_RULE_VIOLATION_DOT, {
86
- runId: 'test-run-ac3-msg',
87
- logsRoot,
88
- handlerRegistry: registry,
89
- });
90
- }
91
- catch (err) {
92
- thrownMessage = err.message;
93
- }
94
- expect(thrownMessage).toMatch(/validation errors/);
95
- expect(thrownMessage).toMatch(/reachability|start_no_incoming/);
96
- });
97
- });
98
- // ---------------------------------------------------------------------------
99
- // AC4: Warning-rule violations allow execution
100
- // ---------------------------------------------------------------------------
101
- describe('AC4: warning-rule violations allow execution', () => {
102
- let logsRoot;
103
- beforeEach(async () => {
104
- logsRoot = await makeTmpDir();
105
- });
106
- afterEach(async () => {
107
- await cleanDir(logsRoot);
108
- });
109
- it('validate() returns at least 2 warning diagnostics and zero error diagnostics', () => {
110
- const graph = parseGraph(WARNING_RULE_VIOLATION_DOT);
111
- const validator = createValidator();
112
- const diagnostics = validator.validate(graph);
113
- const errors = diagnostics.filter((d) => d.severity === 'error');
114
- const warnings = diagnostics.filter((d) => d.severity === 'warning');
115
- expect(errors).toHaveLength(0);
116
- expect(warnings.length).toBeGreaterThanOrEqual(2);
117
- });
118
- it('prompt_on_llm_nodes warning is present', () => {
119
- const graph = parseGraph(WARNING_RULE_VIOLATION_DOT);
120
- const validator = createValidator();
121
- const diagnostics = validator.validate(graph);
122
- const promptWarning = diagnostics.find((d) => d.ruleId === 'prompt_on_llm_nodes');
123
- expect(promptWarning).toBeDefined();
124
- expect(promptWarning?.severity).toBe('warning');
125
- });
126
- it('fidelity_valid warning is present', () => {
127
- const graph = parseGraph(WARNING_RULE_VIOLATION_DOT);
128
- const validator = createValidator();
129
- const diagnostics = validator.validate(graph);
130
- const fidelityWarning = diagnostics.find((d) => d.ruleId === 'fidelity_valid');
131
- expect(fidelityWarning).toBeDefined();
132
- expect(fidelityWarning?.severity).toBe('warning');
133
- });
134
- it('executor runs successfully despite warnings (warnings do not block execution)', async () => {
135
- const graph = parseGraph(WARNING_RULE_VIOLATION_DOT);
136
- // Validate: confirm warnings present but no errors
137
- const validator = createValidator();
138
- const errors = validator.validate(graph).filter((d) => d.severity === 'error');
139
- expect(errors).toHaveLength(0);
140
- // Execute directly (no pre-flight error check — warnings are non-blocking)
141
- const { registry } = makeMockRegistry();
142
- const outcome = await createGraphExecutor().run(graph, {
143
- runId: 'test-run-ac4',
144
- logsRoot,
145
- handlerRegistry: registry,
146
- });
147
- expect(outcome.status).toBe('SUCCESS');
148
- });
149
- });
150
- //# sourceMappingURL=validation-errors.test.js.map