@substrate-ai/factory 0.20.1 → 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 (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,339 +0,0 @@
1
- /**
2
- * Unit tests for `substrate factory validate` CLI subcommand.
3
- *
4
- * AC1 — Valid graph → "13/13 rules passed, 0 errors, 0 warnings", exit 0
5
- * AC2 — Error diagnostic → summary shows failing rule, lists diagnostic, exit 1
6
- * AC3 — Warning-only → lists warning, summary, exit 0
7
- * AC4 — --output-format json → JSON array of ValidationDiagnostic[], no summary
8
- * AC5 — Missing file → stderr "file not found", exit 2
9
- * AC6 — Malformed DOT → stderr "failed to parse graph", exit 2
10
- * AC7 — 2 diagnostics from 1 ruleId + 1 from another → correct unique-rule pass count
11
- *
12
- * Story 46-7.
13
- */
14
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
15
- import { Command } from 'commander';
16
- import { registerFactoryCommand } from '../factory-command.js';
17
- // ---------------------------------------------------------------------------
18
- // Module mocks (hoisted before imports in vitest)
19
- // ---------------------------------------------------------------------------
20
- vi.mock('node:fs/promises', () => ({
21
- readFile: vi.fn(),
22
- }));
23
- vi.mock('../graph/parser.js', () => ({
24
- parseGraph: vi.fn(),
25
- }));
26
- vi.mock('../graph/validator.js', () => ({
27
- createValidator: vi.fn(() => ({
28
- validate: vi.fn().mockReturnValue([]),
29
- validateOrRaise: vi.fn(),
30
- registerRule: vi.fn(),
31
- })),
32
- }));
33
- vi.mock('../graph/executor.js', () => ({
34
- createGraphExecutor: vi.fn(),
35
- }));
36
- vi.mock('../handlers/index.js', () => ({
37
- createDefaultRegistry: vi.fn(),
38
- HandlerRegistry: vi.fn(),
39
- }));
40
- vi.mock('../config.js', () => ({
41
- loadFactoryConfig: vi.fn(),
42
- }));
43
- vi.mock('../scenarios/cli-command.js', () => ({
44
- registerScenariosCommand: vi.fn(),
45
- }));
46
- vi.mock('../graph/run-state.js', () => ({
47
- RunStateManager: vi.fn().mockImplementation(() => ({
48
- initRun: vi.fn().mockResolvedValue(undefined),
49
- writeNodeArtifacts: vi.fn().mockResolvedValue(undefined),
50
- writeScenarioIteration: vi.fn().mockResolvedValue(undefined),
51
- })),
52
- }));
53
- // ---------------------------------------------------------------------------
54
- // Helpers
55
- // ---------------------------------------------------------------------------
56
- /** Minimal mock graph */
57
- const mockGraph = {
58
- nodes: new Map([
59
- ['start', { id: 'start', type: 'start', label: 'Start' }],
60
- ['exit', { id: 'exit', type: 'exit', label: 'Exit' }],
61
- ]),
62
- edges: [],
63
- startNode: () => ({ id: 'start', type: 'start', label: 'Start' }),
64
- exitNode: () => ({ id: 'exit', type: 'exit', label: 'Exit' }),
65
- };
66
- /**
67
- * Run `substrate factory validate <graphFile> [...extraArgs]`
68
- * via a fresh Commander program instance.
69
- */
70
- async function runValidateCmd(graphFile, extraArgs = []) {
71
- const program = new Command();
72
- program.exitOverride();
73
- registerFactoryCommand(program);
74
- await program.parseAsync(['node', 'substrate', 'factory', 'validate', graphFile, ...extraArgs]);
75
- }
76
- // ---------------------------------------------------------------------------
77
- // Tests
78
- // ---------------------------------------------------------------------------
79
- describe('substrate factory validate command', () => {
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- let stderrSpy;
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- let stdoutSpy;
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
- let exitSpy;
86
- beforeEach(async () => {
87
- vi.clearAllMocks();
88
- stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
89
- stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
90
- exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
91
- throw new Error('process.exit called');
92
- }));
93
- // Default happy-path: file reads successfully, graph parses, no diagnostics
94
- const { readFile } = await import('node:fs/promises');
95
- vi.mocked(readFile).mockResolvedValue('digraph G { start -> exit }');
96
- const { parseGraph } = await import('../graph/parser.js');
97
- vi.mocked(parseGraph).mockReturnValue(mockGraph);
98
- const { createValidator } = await import('../graph/validator.js');
99
- vi.mocked(createValidator).mockReturnValue({
100
- validate: vi.fn().mockReturnValue([]),
101
- validateOrRaise: vi.fn(),
102
- registerRule: vi.fn(),
103
- });
104
- });
105
- afterEach(() => {
106
- vi.restoreAllMocks();
107
- });
108
- // -------------------------------------------------------------------------
109
- // AC1: Valid graph reports full pass
110
- // -------------------------------------------------------------------------
111
- it('AC1: valid graph prints "13/13 rules passed, 0 errors, 0 warnings" and exits 0', async () => {
112
- await runValidateCmd('pipeline.dot');
113
- const output = vi
114
- .mocked(process.stdout.write)
115
- .mock.calls.map((args) => String(args[0]))
116
- .join('');
117
- expect(output).toContain('13/13 rules passed, 0 errors, 0 warnings');
118
- expect(exitSpy).not.toHaveBeenCalled();
119
- });
120
- // -------------------------------------------------------------------------
121
- // AC2: Error diagnostics reported with non-zero exit
122
- // -------------------------------------------------------------------------
123
- it('AC2: error diagnostic — lists diagnostic with ruleId and exits with code 1', async () => {
124
- const { createValidator } = await import('../graph/validator.js');
125
- vi.mocked(createValidator).mockReturnValue({
126
- validate: vi.fn().mockReturnValue([
127
- {
128
- ruleId: 'start_node',
129
- severity: 'error',
130
- message: 'Expected exactly one start node, found 2',
131
- },
132
- ]),
133
- validateOrRaise: vi.fn(),
134
- registerRule: vi.fn(),
135
- });
136
- await expect(runValidateCmd('pipeline.dot')).rejects.toThrow('process.exit called');
137
- const output = vi
138
- .mocked(process.stdout.write)
139
- .mock.calls.map((args) => String(args[0]))
140
- .join('');
141
- expect(output).toContain('error');
142
- expect(output).toContain('start_node');
143
- expect(output).toContain('12/13 rules passed, 1 error, 0 warnings');
144
- expect(exitSpy).toHaveBeenCalledWith(1);
145
- });
146
- // -------------------------------------------------------------------------
147
- // AC3: Warning-only graphs exit 0
148
- // -------------------------------------------------------------------------
149
- it('AC3: warning-only graph lists warning, shows summary, and exits 0', async () => {
150
- const { createValidator } = await import('../graph/validator.js');
151
- vi.mocked(createValidator).mockReturnValue({
152
- validate: vi.fn().mockReturnValue([
153
- {
154
- ruleId: 'prompt_on_llm_nodes',
155
- severity: 'warning',
156
- message: "Codergen node 'generate' has no prompt or label",
157
- nodeId: 'generate',
158
- },
159
- ]),
160
- validateOrRaise: vi.fn(),
161
- registerRule: vi.fn(),
162
- });
163
- await runValidateCmd('pipeline.dot');
164
- const output = vi
165
- .mocked(process.stdout.write)
166
- .mock.calls.map((args) => String(args[0]))
167
- .join('');
168
- expect(output).toContain('warning');
169
- expect(output).toContain('prompt_on_llm_nodes');
170
- expect(output).toContain('12/13 rules passed');
171
- expect(output).toContain('0 errors');
172
- expect(output).toContain('1 warning');
173
- expect(exitSpy).not.toHaveBeenCalled();
174
- });
175
- // -------------------------------------------------------------------------
176
- // AC4: JSON output format emits ValidationDiagnostic array
177
- // -------------------------------------------------------------------------
178
- it('AC4: --output-format json with error diagnostic emits JSON array', async () => {
179
- const diagnostic = {
180
- ruleId: 'start_node',
181
- severity: 'error',
182
- message: 'Expected exactly one start node, found 2',
183
- };
184
- const { createValidator } = await import('../graph/validator.js');
185
- vi.mocked(createValidator).mockReturnValue({
186
- validate: vi.fn().mockReturnValue([diagnostic]),
187
- validateOrRaise: vi.fn(),
188
- registerRule: vi.fn(),
189
- });
190
- await expect(runValidateCmd('pipeline.dot', ['--output-format', 'json'])).rejects.toThrow('process.exit called');
191
- const output = vi
192
- .mocked(process.stdout.write)
193
- .mock.calls.map((args) => String(args[0]))
194
- .join('');
195
- const parsed = JSON.parse(output);
196
- expect(Array.isArray(parsed)).toBe(true);
197
- expect(parsed).toHaveLength(1);
198
- expect(parsed[0]).toMatchObject({
199
- ruleId: 'start_node',
200
- severity: 'error',
201
- message: 'Expected exactly one start node, found 2',
202
- });
203
- });
204
- it('AC4: --output-format json with valid graph emits empty array []', async () => {
205
- await runValidateCmd('pipeline.dot', ['--output-format', 'json']);
206
- const output = vi
207
- .mocked(process.stdout.write)
208
- .mock.calls.map((args) => String(args[0]))
209
- .join('');
210
- const parsed = JSON.parse(output);
211
- expect(Array.isArray(parsed)).toBe(true);
212
- expect(parsed).toHaveLength(0);
213
- expect(exitSpy).not.toHaveBeenCalled();
214
- });
215
- it('AC4: --output-format json does not print summary line', async () => {
216
- await runValidateCmd('pipeline.dot', ['--output-format', 'json']);
217
- const output = vi
218
- .mocked(process.stdout.write)
219
- .mock.calls.map((args) => String(args[0]))
220
- .join('');
221
- expect(output).not.toContain('rules passed');
222
- });
223
- // -------------------------------------------------------------------------
224
- // AC5: Missing file exits with code 2
225
- // -------------------------------------------------------------------------
226
- it('AC5: file not found prints error to stderr and exits with code 2', async () => {
227
- const { readFile } = await import('node:fs/promises');
228
- vi.mocked(readFile).mockRejectedValue(Object.assign(new Error('ENOENT: no such file'), { code: 'ENOENT' }));
229
- await expect(runValidateCmd('missing.dot')).rejects.toThrow('process.exit called');
230
- const stderrOutput = vi
231
- .mocked(process.stderr.write)
232
- .mock.calls.map((args) => String(args[0]))
233
- .join('');
234
- expect(stderrOutput).toContain('file not found: missing.dot');
235
- expect(exitSpy).toHaveBeenCalledWith(2);
236
- });
237
- // -------------------------------------------------------------------------
238
- // AC6: Malformed DOT file parse error exits with code 2
239
- // -------------------------------------------------------------------------
240
- it('AC6: malformed DOT file prints parse error to stderr and exits with code 2', async () => {
241
- const { parseGraph } = await import('../graph/parser.js');
242
- vi.mocked(parseGraph).mockImplementation(() => {
243
- throw new Error('unexpected token at line 3');
244
- });
245
- await expect(runValidateCmd('bad.dot')).rejects.toThrow('process.exit called');
246
- const stderrOutput = vi
247
- .mocked(process.stderr.write)
248
- .mock.calls.map((args) => String(args[0]))
249
- .join('');
250
- expect(stderrOutput).toContain('failed to parse graph: unexpected token at line 3');
251
- expect(exitSpy).toHaveBeenCalledWith(2);
252
- });
253
- // -------------------------------------------------------------------------
254
- // AC7: Summary counts reflect unique fired rules
255
- // -------------------------------------------------------------------------
256
- it('AC7: 2 diagnostics from 1 ruleId + 1 from another → "11/13 rules passed, 1 error, 1 warning"', async () => {
257
- const { createValidator } = await import('../graph/validator.js');
258
- vi.mocked(createValidator).mockReturnValue({
259
- validate: vi.fn().mockReturnValue([
260
- // Two diagnostics from the same ruleId 'reachability' (1 unique rule)
261
- {
262
- ruleId: 'reachability',
263
- severity: 'error',
264
- message: 'Node "orphan1" is unreachable',
265
- nodeId: 'orphan1',
266
- },
267
- {
268
- ruleId: 'reachability',
269
- severity: 'error',
270
- message: 'Node "orphan2" is unreachable',
271
- nodeId: 'orphan2',
272
- },
273
- // One diagnostic from 'fidelity_valid' (1 unique rule)
274
- {
275
- ruleId: 'fidelity_valid',
276
- severity: 'warning',
277
- message: "Node 'x' has unrecognised fidelity value",
278
- nodeId: 'x',
279
- },
280
- ]),
281
- validateOrRaise: vi.fn(),
282
- registerRule: vi.fn(),
283
- });
284
- await expect(runValidateCmd('pipeline.dot')).rejects.toThrow('process.exit called');
285
- const output = vi
286
- .mocked(process.stdout.write)
287
- .mock.calls.map((args) => String(args[0]))
288
- .join('');
289
- // 13 - 2 unique ruleIds = 11 passed
290
- expect(output).toContain('11/13 rules passed, 2 errors, 1 warning');
291
- expect(exitSpy).toHaveBeenCalledWith(1);
292
- });
293
- // -------------------------------------------------------------------------
294
- // Additional: node/edge annotation in text output
295
- // -------------------------------------------------------------------------
296
- it('text output includes [node: <id>] annotation when nodeId is present', async () => {
297
- const { createValidator } = await import('../graph/validator.js');
298
- vi.mocked(createValidator).mockReturnValue({
299
- validate: vi.fn().mockReturnValue([
300
- {
301
- ruleId: 'prompt_on_llm_nodes',
302
- severity: 'warning',
303
- message: 'Missing prompt',
304
- nodeId: 'generate',
305
- },
306
- ]),
307
- validateOrRaise: vi.fn(),
308
- registerRule: vi.fn(),
309
- });
310
- await runValidateCmd('pipeline.dot');
311
- const output = vi
312
- .mocked(process.stdout.write)
313
- .mock.calls.map((args) => String(args[0]))
314
- .join('');
315
- expect(output).toContain('[node: generate]');
316
- });
317
- it('text output includes [edge: <index>] annotation when edgeIndex is present', async () => {
318
- const { createValidator } = await import('../graph/validator.js');
319
- vi.mocked(createValidator).mockReturnValue({
320
- validate: vi.fn().mockReturnValue([
321
- {
322
- ruleId: 'some_edge_rule',
323
- severity: 'warning',
324
- message: 'Edge condition problem',
325
- edgeIndex: 3,
326
- },
327
- ]),
328
- validateOrRaise: vi.fn(),
329
- registerRule: vi.fn(),
330
- });
331
- await runValidateCmd('pipeline.dot');
332
- const output = vi
333
- .mocked(process.stdout.write)
334
- .mock.calls.map((args) => String(args[0]))
335
- .join('');
336
- expect(output).toContain('[edge: 3]');
337
- });
338
- });
339
- //# sourceMappingURL=factory-validate-command.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory-validate-command.test.js","sourceRoot":"","sources":["../../src/__tests__/factory-validate-command.test.ts"],"names":[],"mappings":"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"}
@@ -1,72 +0,0 @@
1
- /**
2
- * DOT fixture strings for the advanced cross-project validation test.
3
- * Story 50-12.
4
- *
5
- * Node type strings verified via:
6
- * grep -rn "registry.register" packages/factory/src/handlers/registry.ts
7
- *
8
- * Registered types used here:
9
- * 'stack.manager_loop' – outer supervisor (story 50-8)
10
- * 'parallel' – fan-out node (story 50-1)
11
- * 'parallel.fan_in' – fan-in/merge node (story 50-2)
12
- * 'subgraph' – nested subgraph execution node (story 50-5)
13
- * 'codergen' – branch execution nodes
14
- * 'start' – start node
15
- * 'exit' – exit node
16
- *
17
- * Architecture note:
18
- * The manager_loop handler requires a `graph_file` attribute pointing to a
19
- * separate body DOT file. `parseGraph` does NOT populate `node.attrs`, so tests
20
- * must post-process the parsed graph:
21
- * outerGraph.nodes.get('manager_loop')!.attrs = {
22
- * graph_file: 'body.dot',
23
- * max_cycles: '3',
24
- * stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
25
- * }
26
- *
27
- * Similarly, subgraph nodes require:
28
- * bodyGraph.nodes.get('subgraph_node')!.attrs = { graph_file: 'child.dot' }
29
- * (handled by mock subgraph handler in tests — no post-processing needed).
30
- */
31
- import { parseGraph } from '../../graph/parser.js';
32
- /**
33
- * Outer graph: start → manager_loop → exit [condition="llm:..."]
34
- *
35
- * The manager_loop acts as the outermost supervisor. Its body (BODY_GRAPH_DOT)
36
- * is loaded via a mock graphFileLoader and contains the parallel fan-out/fan-in
37
- * with subgraph integration.
38
- *
39
- * Post-process after parseGraph:
40
- * graph.nodes.get('manager_loop')!.attrs = {
41
- * graph_file: 'body.dot',
42
- * max_cycles: '3',
43
- * stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
44
- * }
45
- */
46
- export declare const ADVANCED_VALIDATION_DOT = "\ndigraph advanced_cross_project {\n start [type=\"start\"];\n manager_loop [type=\"stack.manager_loop\", label=\"Supervised Loop\"];\n exit [type=\"exit\"];\n\n start -> manager_loop;\n manager_loop -> exit [condition=\"llm:has the implementation satisfied the acceptance criteria?\"];\n}\n";
47
- /**
48
- * Body graph: parallel fan-out/fan-in with subgraph integration.
49
- *
50
- * start → parallel_node fans out to [branch_a, branch_b]
51
- * branch_a runs, then main executor traverses branch_a → subgraph_node → fan_in
52
- * branch_b result is collected by fan_in
53
- * fan_in → exit [condition="llm:..."] — LLM-evaluated exit edge
54
- *
55
- * Handler types present: parallel, codergen, subgraph, parallel.fan_in
56
- */
57
- export declare const BODY_GRAPH_DOT = "\ndigraph manager_body {\n start [type=\"start\"];\n parallel_node [type=\"parallel\", label=\"Fan-out Branches\"];\n branch_a [type=\"codergen\", label=\"Implement approach A\"];\n subgraph_node [type=\"subgraph\", label=\"Run child pipeline\"];\n branch_b [type=\"codergen\", label=\"Implement approach B\"];\n fan_in [type=\"parallel.fan_in\", label=\"Best Candidate\"];\n exit [type=\"exit\"];\n\n start -> parallel_node;\n parallel_node -> branch_a;\n parallel_node -> branch_b;\n branch_a -> subgraph_node;\n subgraph_node -> fan_in;\n branch_b -> fan_in;\n fan_in -> exit [condition=\"llm:has the implementation satisfied the acceptance criteria?\"];\n}\n";
58
- /**
59
- * Minimal child graph: child_start → child_work → child_exit
60
- * Returned by mock graphFileLoader when subgraph_node requests 'child.dot'.
61
- */
62
- export declare const CHILD_GRAPH_DOT = "\ndigraph child_branch {\n child_start [type=\"start\"];\n child_work [type=\"codergen\", label=\"Implement in child context\"];\n child_exit [type=\"exit\"];\n\n child_start -> child_work;\n child_work -> child_exit;\n}\n";
63
- /**
64
- * Parse all three fixture DOT strings and throw if any parse fails.
65
- * Returns the three parsed graphs for downstream assertions.
66
- */
67
- export declare function validateFixtures(): {
68
- outerGraph: ReturnType<typeof parseGraph>;
69
- bodyGraph: ReturnType<typeof parseGraph>;
70
- childGraph: ReturnType<typeof parseGraph>;
71
- };
72
- //# sourceMappingURL=advanced-cross-project-validation.dot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advanced-cross-project-validation.dot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/advanced-cross-project-validation.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAMlD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,mUASnC,CAAA;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,ouBAkB1B,CAAA;AAMD;;;GAGG;AACH,eAAO,MAAM,eAAe,2OAS3B,CAAA;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACzC,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACxC,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;CAC1C,CAKA"}
@@ -1,121 +0,0 @@
1
- /**
2
- * DOT fixture strings for the advanced cross-project validation test.
3
- * Story 50-12.
4
- *
5
- * Node type strings verified via:
6
- * grep -rn "registry.register" packages/factory/src/handlers/registry.ts
7
- *
8
- * Registered types used here:
9
- * 'stack.manager_loop' – outer supervisor (story 50-8)
10
- * 'parallel' – fan-out node (story 50-1)
11
- * 'parallel.fan_in' – fan-in/merge node (story 50-2)
12
- * 'subgraph' – nested subgraph execution node (story 50-5)
13
- * 'codergen' – branch execution nodes
14
- * 'start' – start node
15
- * 'exit' – exit node
16
- *
17
- * Architecture note:
18
- * The manager_loop handler requires a `graph_file` attribute pointing to a
19
- * separate body DOT file. `parseGraph` does NOT populate `node.attrs`, so tests
20
- * must post-process the parsed graph:
21
- * outerGraph.nodes.get('manager_loop')!.attrs = {
22
- * graph_file: 'body.dot',
23
- * max_cycles: '3',
24
- * stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
25
- * }
26
- *
27
- * Similarly, subgraph nodes require:
28
- * bodyGraph.nodes.get('subgraph_node')!.attrs = { graph_file: 'child.dot' }
29
- * (handled by mock subgraph handler in tests — no post-processing needed).
30
- */
31
- import { parseGraph } from '../../graph/parser.js';
32
- // ---------------------------------------------------------------------------
33
- // ADVANCED_VALIDATION_DOT — outer graph (manager_loop wrapper)
34
- // ---------------------------------------------------------------------------
35
- /**
36
- * Outer graph: start → manager_loop → exit [condition="llm:..."]
37
- *
38
- * The manager_loop acts as the outermost supervisor. Its body (BODY_GRAPH_DOT)
39
- * is loaded via a mock graphFileLoader and contains the parallel fan-out/fan-in
40
- * with subgraph integration.
41
- *
42
- * Post-process after parseGraph:
43
- * graph.nodes.get('manager_loop')!.attrs = {
44
- * graph_file: 'body.dot',
45
- * max_cycles: '3',
46
- * stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
47
- * }
48
- */
49
- export const ADVANCED_VALIDATION_DOT = `
50
- digraph advanced_cross_project {
51
- start [type="start"];
52
- manager_loop [type="stack.manager_loop", label="Supervised Loop"];
53
- exit [type="exit"];
54
-
55
- start -> manager_loop;
56
- manager_loop -> exit [condition="llm:has the implementation satisfied the acceptance criteria?"];
57
- }
58
- `;
59
- // ---------------------------------------------------------------------------
60
- // BODY_GRAPH_DOT — body graph executed by manager_loop each cycle
61
- // ---------------------------------------------------------------------------
62
- /**
63
- * Body graph: parallel fan-out/fan-in with subgraph integration.
64
- *
65
- * start → parallel_node fans out to [branch_a, branch_b]
66
- * branch_a runs, then main executor traverses branch_a → subgraph_node → fan_in
67
- * branch_b result is collected by fan_in
68
- * fan_in → exit [condition="llm:..."] — LLM-evaluated exit edge
69
- *
70
- * Handler types present: parallel, codergen, subgraph, parallel.fan_in
71
- */
72
- export const BODY_GRAPH_DOT = `
73
- digraph manager_body {
74
- start [type="start"];
75
- parallel_node [type="parallel", label="Fan-out Branches"];
76
- branch_a [type="codergen", label="Implement approach A"];
77
- subgraph_node [type="subgraph", label="Run child pipeline"];
78
- branch_b [type="codergen", label="Implement approach B"];
79
- fan_in [type="parallel.fan_in", label="Best Candidate"];
80
- exit [type="exit"];
81
-
82
- start -> parallel_node;
83
- parallel_node -> branch_a;
84
- parallel_node -> branch_b;
85
- branch_a -> subgraph_node;
86
- subgraph_node -> fan_in;
87
- branch_b -> fan_in;
88
- fan_in -> exit [condition="llm:has the implementation satisfied the acceptance criteria?"];
89
- }
90
- `;
91
- // ---------------------------------------------------------------------------
92
- // CHILD_GRAPH_DOT — minimal child graph executed by subgraph handler
93
- // ---------------------------------------------------------------------------
94
- /**
95
- * Minimal child graph: child_start → child_work → child_exit
96
- * Returned by mock graphFileLoader when subgraph_node requests 'child.dot'.
97
- */
98
- export const CHILD_GRAPH_DOT = `
99
- digraph child_branch {
100
- child_start [type="start"];
101
- child_work [type="codergen", label="Implement in child context"];
102
- child_exit [type="exit"];
103
-
104
- child_start -> child_work;
105
- child_work -> child_exit;
106
- }
107
- `;
108
- // ---------------------------------------------------------------------------
109
- // validateFixtures — test helper for AC1
110
- // ---------------------------------------------------------------------------
111
- /**
112
- * Parse all three fixture DOT strings and throw if any parse fails.
113
- * Returns the three parsed graphs for downstream assertions.
114
- */
115
- export function validateFixtures() {
116
- const outerGraph = parseGraph(ADVANCED_VALIDATION_DOT);
117
- const bodyGraph = parseGraph(BODY_GRAPH_DOT);
118
- const childGraph = parseGraph(CHILD_GRAPH_DOT);
119
- return { outerGraph, bodyGraph, childGraph };
120
- }
121
- //# sourceMappingURL=advanced-cross-project-validation.dot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advanced-cross-project-validation.dot.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/advanced-cross-project-validation.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;CAStC,CAAA;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;CAkB7B,CAAA;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;CAS9B,CAAA;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAK9B,MAAM,UAAU,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AAC9C,CAAC"}
@@ -1,28 +0,0 @@
1
- /**
2
- * DOT fixture strings for LLM-evaluated edge integration tests.
3
- * Story 50-11.
4
- *
5
- * The `condition` DOT edge attribute maps to `GraphEdge.condition`.
6
- * Edges with `condition="llm:..."` are evaluated by `selectEdge` via the
7
- * LLM evaluator (`evaluateLlmCondition`).
8
- *
9
- * Graph structure: start → decision → exit
10
- * decision has two outgoing edges:
11
- * 1. condition="llm:should we iterate?" — LLM-evaluated (to refine node)
12
- * 2. label="done" — plain unconditional edge (to exit)
13
- *
14
- * The LLM edge is tested using `selectEdge` directly with a mock `llmCall`.
15
- */
16
- /**
17
- * Decision graph with one LLM-evaluated edge and one plain forward edge.
18
- * start → decision → exit (via done edge)
19
- * → refine (via llm:should we iterate? edge)
20
- * refine → exit
21
- */
22
- export declare const LLM_EDGE_ROUTING_DOT = "\ndigraph llm_edge_test {\n start [type=\"start\"];\n decision [type=\"codergen\", label=\"Evaluate Progress\"];\n refine [type=\"codergen\", label=\"Refine\"];\n exit [type=\"exit\"];\n\n start -> decision;\n decision -> refine [condition=\"llm:should we iterate?\"];\n decision -> exit [label=\"done\"];\n refine -> exit;\n}\n";
23
- /**
24
- * Graph with multiple static label edges and one LLM edge.
25
- * Used to verify that static label matching still works alongside LLM edges.
26
- */
27
- export declare const MIXED_EDGE_TYPES_DOT = "\ndigraph mixed_edges {\n start [type=\"start\"];\n router [type=\"codergen\", label=\"Route Decision\"];\n path_a [type=\"codergen\", label=\"Path A\"];\n path_b [type=\"codergen\", label=\"Path B\"];\n exit [type=\"exit\"];\n\n start -> router;\n router -> path_a [label=\"approved\"];\n router -> path_b [label=\"revision_needed\"];\n router -> exit [condition=\"llm:is this complete?\"];\n path_a -> exit;\n path_b -> exit;\n}\n";
28
- //# sourceMappingURL=llm-edge-routing.dot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-edge-routing.dot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/llm-edge-routing.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,qWAYhC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gdAehC,CAAA"}
@@ -1,55 +0,0 @@
1
- /**
2
- * DOT fixture strings for LLM-evaluated edge integration tests.
3
- * Story 50-11.
4
- *
5
- * The `condition` DOT edge attribute maps to `GraphEdge.condition`.
6
- * Edges with `condition="llm:..."` are evaluated by `selectEdge` via the
7
- * LLM evaluator (`evaluateLlmCondition`).
8
- *
9
- * Graph structure: start → decision → exit
10
- * decision has two outgoing edges:
11
- * 1. condition="llm:should we iterate?" — LLM-evaluated (to refine node)
12
- * 2. label="done" — plain unconditional edge (to exit)
13
- *
14
- * The LLM edge is tested using `selectEdge` directly with a mock `llmCall`.
15
- */
16
- /**
17
- * Decision graph with one LLM-evaluated edge and one plain forward edge.
18
- * start → decision → exit (via done edge)
19
- * → refine (via llm:should we iterate? edge)
20
- * refine → exit
21
- */
22
- export const LLM_EDGE_ROUTING_DOT = `
23
- digraph llm_edge_test {
24
- start [type="start"];
25
- decision [type="codergen", label="Evaluate Progress"];
26
- refine [type="codergen", label="Refine"];
27
- exit [type="exit"];
28
-
29
- start -> decision;
30
- decision -> refine [condition="llm:should we iterate?"];
31
- decision -> exit [label="done"];
32
- refine -> exit;
33
- }
34
- `;
35
- /**
36
- * Graph with multiple static label edges and one LLM edge.
37
- * Used to verify that static label matching still works alongside LLM edges.
38
- */
39
- export const MIXED_EDGE_TYPES_DOT = `
40
- digraph mixed_edges {
41
- start [type="start"];
42
- router [type="codergen", label="Route Decision"];
43
- path_a [type="codergen", label="Path A"];
44
- path_b [type="codergen", label="Path B"];
45
- exit [type="exit"];
46
-
47
- start -> router;
48
- router -> path_a [label="approved"];
49
- router -> path_b [label="revision_needed"];
50
- router -> exit [condition="llm:is this complete?"];
51
- path_a -> exit;
52
- path_b -> exit;
53
- }
54
- `;
55
- //# sourceMappingURL=llm-edge-routing.dot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-edge-routing.dot.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/llm-edge-routing.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;CAYnC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;CAenC,CAAA"}