@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 +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