@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,189 +0,0 @@
1
- /**
2
- * Unit tests for RunStateManager (story 44-7).
3
- *
4
- * Covers all acceptance criteria:
5
- * AC1 — initRun() creates run dir and writes graph.dot
6
- * AC2 — writeNodeArtifacts() writes status.json; no prompt.md when prompt omitted
7
- * AC3 — writeNodeArtifacts() writes prompt.md and response.md when provided
8
- * AC4 — writeScenarioIteration() writes manifest.json
9
- * AC5 — writeScenarioIteration() writes results.json when provided
10
- * + additional: no results.json when results omitted; initRun is idempotent
11
- */
12
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
13
- import { mkdtemp, rm, readFile, access } from 'node:fs/promises';
14
- import path from 'node:path';
15
- import os from 'node:os';
16
- import { RunStateManager } from '../run-state.js';
17
- // ---------------------------------------------------------------------------
18
- // Helpers
19
- // ---------------------------------------------------------------------------
20
- async function fileExists(filePath) {
21
- try {
22
- await access(filePath);
23
- return true;
24
- }
25
- catch {
26
- return false;
27
- }
28
- }
29
- async function readJson(filePath) {
30
- const content = await readFile(filePath, 'utf8');
31
- return JSON.parse(content);
32
- }
33
- async function readText(filePath) {
34
- return readFile(filePath, 'utf8');
35
- }
36
- // ---------------------------------------------------------------------------
37
- // Test suite
38
- // ---------------------------------------------------------------------------
39
- describe('RunStateManager', () => {
40
- let tmpDir;
41
- let manager;
42
- beforeEach(async () => {
43
- tmpDir = await mkdtemp(path.join(os.tmpdir(), 'run-state-test-'));
44
- manager = new RunStateManager({ runDir: tmpDir });
45
- });
46
- afterEach(async () => {
47
- await rm(tmpDir, { recursive: true, force: true });
48
- });
49
- // -------------------------------------------------------------------------
50
- // AC1: initRun creates directory and graph.dot
51
- // -------------------------------------------------------------------------
52
- describe('initRun()', () => {
53
- it('AC1: creates graph.dot containing the DOT source string', async () => {
54
- const dotSource = 'digraph G {}';
55
- await manager.initRun(dotSource);
56
- const graphDotPath = path.join(tmpDir, 'graph.dot');
57
- expect(await fileExists(graphDotPath)).toBe(true);
58
- expect(await readText(graphDotPath)).toBe(dotSource);
59
- });
60
- it('AC1: creates run directory if it does not exist', async () => {
61
- const nestedDir = path.join(tmpDir, 'r1', 'nested');
62
- const nestedManager = new RunStateManager({ runDir: nestedDir });
63
- await nestedManager.initRun('digraph {}');
64
- expect(await fileExists(path.join(nestedDir, 'graph.dot'))).toBe(true);
65
- });
66
- it('is idempotent — calling twice does not throw', async () => {
67
- await manager.initRun('digraph A {}');
68
- await expect(manager.initRun('digraph B {}')).resolves.toBeUndefined();
69
- });
70
- });
71
- // -------------------------------------------------------------------------
72
- // AC2: writeNodeArtifacts writes status.json for all node types
73
- // -------------------------------------------------------------------------
74
- describe('writeNodeArtifacts()', () => {
75
- it('AC2: writes status.json with all 6 required fields', async () => {
76
- await manager.writeNodeArtifacts({
77
- nodeId: 'n1',
78
- nodeType: 'codergen',
79
- status: 'SUCCESS',
80
- startedAt: 1000,
81
- completedAt: 2000,
82
- durationMs: 1000,
83
- });
84
- const statusPath = path.join(tmpDir, 'n1', 'status.json');
85
- expect(await fileExists(statusPath)).toBe(true);
86
- const status = await readJson(statusPath);
87
- expect(status.nodeId).toBe('n1');
88
- expect(status.nodeType).toBe('codergen');
89
- expect(status.status).toBe('SUCCESS');
90
- expect(status.startedAt).toBe(1000);
91
- expect(status.completedAt).toBe(2000);
92
- expect(status.durationMs).toBe(1000);
93
- });
94
- it('AC2: does NOT write prompt.md when prompt is omitted', async () => {
95
- await manager.writeNodeArtifacts({
96
- nodeId: 'n1',
97
- nodeType: 'codergen',
98
- status: 'SUCCESS',
99
- startedAt: 1000,
100
- completedAt: 2000,
101
- durationMs: 1000,
102
- });
103
- const promptPath = path.join(tmpDir, 'n1', 'prompt.md');
104
- expect(await fileExists(promptPath)).toBe(false);
105
- });
106
- it('AC2: does NOT write response.md when response is omitted', async () => {
107
- await manager.writeNodeArtifacts({
108
- nodeId: 'n1',
109
- nodeType: 'validate',
110
- status: 'FAIL',
111
- startedAt: 100,
112
- completedAt: 200,
113
- durationMs: 100,
114
- });
115
- const responsePath = path.join(tmpDir, 'n1', 'response.md');
116
- expect(await fileExists(responsePath)).toBe(false);
117
- });
118
- // -----------------------------------------------------------------------
119
- // AC3: prompt.md and response.md written for codergen nodes
120
- // -----------------------------------------------------------------------
121
- it('AC3: writes prompt.md and response.md when both are provided', async () => {
122
- await manager.writeNodeArtifacts({
123
- nodeId: 'n1',
124
- nodeType: 'codergen',
125
- status: 'SUCCESS',
126
- startedAt: 1000,
127
- completedAt: 2000,
128
- durationMs: 1000,
129
- prompt: 'Do X',
130
- response: 'Done',
131
- });
132
- expect(await readText(path.join(tmpDir, 'n1', 'prompt.md'))).toBe('Do X');
133
- expect(await readText(path.join(tmpDir, 'n1', 'response.md'))).toBe('Done');
134
- });
135
- it('AC3: creates node subdirectory automatically', async () => {
136
- await manager.writeNodeArtifacts({
137
- nodeId: 'deep_node',
138
- nodeType: 'tool',
139
- status: 'SUCCESS',
140
- startedAt: 0,
141
- completedAt: 1,
142
- durationMs: 1,
143
- });
144
- expect(await fileExists(path.join(tmpDir, 'deep_node', 'status.json'))).toBe(true);
145
- });
146
- });
147
- // -------------------------------------------------------------------------
148
- // AC4 + AC5: writeScenarioIteration
149
- // -------------------------------------------------------------------------
150
- describe('writeScenarioIteration()', () => {
151
- const manifest = { scenarios: [], capturedAt: 0 };
152
- it('AC4: writes manifest.json that round-trips via JSON.parse', async () => {
153
- await manager.writeScenarioIteration({ iteration: 2, manifest });
154
- const manifestPath = path.join(tmpDir, 'scenarios', '2', 'manifest.json');
155
- expect(await fileExists(manifestPath)).toBe(true);
156
- const parsed = await readJson(manifestPath);
157
- expect(parsed).toEqual(manifest);
158
- });
159
- it('AC5: writes results.json when results are provided', async () => {
160
- const results = {
161
- scenarios: [],
162
- summary: { total: 0, passed: 0, failed: 0 },
163
- durationMs: 0,
164
- };
165
- await manager.writeScenarioIteration({ iteration: 2, manifest, results });
166
- const resultsPath = path.join(tmpDir, 'scenarios', '2', 'results.json');
167
- expect(await fileExists(resultsPath)).toBe(true);
168
- const parsed = await readJson(resultsPath);
169
- expect(parsed).toEqual(results);
170
- });
171
- it('does NOT write results.json when results are omitted', async () => {
172
- await manager.writeScenarioIteration({ iteration: 2, manifest });
173
- const resultsPath = path.join(tmpDir, 'scenarios', '2', 'results.json');
174
- expect(await fileExists(resultsPath)).toBe(false);
175
- });
176
- it('creates nested scenario directory automatically', async () => {
177
- await manager.writeScenarioIteration({ iteration: 5, manifest });
178
- const iterDir = path.join(tmpDir, 'scenarios', '5');
179
- expect(await fileExists(path.join(iterDir, 'manifest.json'))).toBe(true);
180
- });
181
- });
182
- // -------------------------------------------------------------------------
183
- // Expose runDir
184
- // -------------------------------------------------------------------------
185
- it('exposes runDir as a readonly property', () => {
186
- expect(manager.runDir).toBe(tmpDir);
187
- });
188
- });
189
- //# sourceMappingURL=run-state.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-state.test.js","sourceRoot":"","sources":["../../../src/graph/__tests__/run-state.test.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Unit tests for `applyStylesheet` (transformer.ts).
3
- *
4
- * Covers:
5
- * AC1 — shape selector resolves to matching node's LLM properties
6
- * AC2 — class rule overrides shape rule at higher specificity
7
- * AC3 — multiple classes use source-order tie-breaking
8
- * AC4 — nodes with explicit llmModel are not overwritten; empty string nodes are
9
- * AC5 — executor stylesheet applied before execution (transformer behaviour)
10
- * AC6 — subgraph inherits parent stylesheet (transformer behaviour)
11
- * AC7 — subgraph's own stylesheet overrides inherited parent rules (merge logic)
12
- *
13
- * Story 50-6.
14
- */
15
- export {};
16
- //# sourceMappingURL=transformer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transformer.test.d.ts","sourceRoot":"","sources":["../../../src/graph/__tests__/transformer.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -1,350 +0,0 @@
1
- /**
2
- * Unit tests for `applyStylesheet` (transformer.ts).
3
- *
4
- * Covers:
5
- * AC1 — shape selector resolves to matching node's LLM properties
6
- * AC2 — class rule overrides shape rule at higher specificity
7
- * AC3 — multiple classes use source-order tie-breaking
8
- * AC4 — nodes with explicit llmModel are not overwritten; empty string nodes are
9
- * AC5 — executor stylesheet applied before execution (transformer behaviour)
10
- * AC6 — subgraph inherits parent stylesheet (transformer behaviour)
11
- * AC7 — subgraph's own stylesheet overrides inherited parent rules (merge logic)
12
- *
13
- * Story 50-6.
14
- */
15
- import { describe, it, expect, vi } from 'vitest';
16
- import { applyStylesheet } from '../transformer.js';
17
- import { parseStylesheet } from '../../stylesheet/parser.js';
18
- // ---------------------------------------------------------------------------
19
- // Module mocks (hoisted by Vitest) — needed for the AC5 executor integration test.
20
- // These mocks stub out file I/O and convergence internals so the real executor
21
- // can run in-process without external dependencies.
22
- // ---------------------------------------------------------------------------
23
- vi.mock('../checkpoint.js', () => ({
24
- CheckpointManager: vi.fn().mockImplementation(() => ({
25
- save: vi.fn().mockResolvedValue(undefined),
26
- load: vi.fn(),
27
- resume: vi.fn(),
28
- })),
29
- }));
30
- vi.mock('../../convergence/index.js', () => ({
31
- createConvergenceController: vi.fn().mockImplementation(() => ({
32
- evaluateGates: vi.fn().mockReturnValue({ satisfied: true, failingNodes: [] }),
33
- recordOutcome: vi.fn(),
34
- checkGoalGates: vi.fn().mockReturnValue({ satisfied: true, failedGates: [] }),
35
- resolveRetryTarget: vi.fn().mockReturnValue(null),
36
- recordIterationContext: vi.fn(),
37
- prepareForIteration: vi.fn().mockResolvedValue([]),
38
- getStoredContexts: vi.fn().mockReturnValue([]),
39
- })),
40
- SessionBudgetManager: vi.fn().mockImplementation(() => ({
41
- checkBudget: vi.fn().mockReturnValue({ allowed: true }),
42
- getElapsedMs: vi.fn().mockReturnValue(0),
43
- reset: vi.fn(),
44
- })),
45
- PipelineBudgetManager: vi.fn().mockImplementation(() => ({
46
- checkBudget: vi.fn().mockReturnValue({ allowed: true }),
47
- addCost: vi.fn(),
48
- getTotalCost: vi.fn().mockReturnValue(0),
49
- reset: vi.fn(),
50
- })),
51
- createPlateauDetector: vi.fn().mockReturnValue({
52
- recordScore: vi.fn(),
53
- isPlateaued: vi.fn().mockReturnValue(false),
54
- getWindow: vi.fn().mockReturnValue(3),
55
- getScores: vi.fn().mockReturnValue([]),
56
- }),
57
- checkPlateauAndEmit: vi.fn().mockReturnValue({ plateaued: false, scores: [] }),
58
- buildRemediationContext: vi.fn().mockReturnValue({
59
- previousFailureReason: '',
60
- scenarioDiff: '',
61
- iterationCount: 0,
62
- satisfactionScoreHistory: [],
63
- fixScope: '',
64
- }),
65
- injectRemediationContext: vi.fn(),
66
- computeBackoffDelay: vi.fn().mockImplementation((attempt) => Math.min(1000 * 2 ** attempt, 30000)),
67
- createDualSignalCoordinator: vi.fn().mockReturnValue({ evaluate: vi.fn() }),
68
- CONTEXT_KEY_CODE_REVIEW_VERDICT: 'factory.codeReviewVerdict',
69
- }));
70
- // Import the real executor AFTER mocks are declared so the hoisted vi.mock()
71
- // intercepts its transitive dependencies (CheckpointManager, convergence).
72
- import { createGraphExecutor } from '../executor.js';
73
- // ---------------------------------------------------------------------------
74
- // Test helpers
75
- // ---------------------------------------------------------------------------
76
- /** Build a minimal GraphNode with defaults for all required fields. */
77
- function makeNode(overrides) {
78
- return {
79
- id: 'test_node',
80
- label: 'Test Node',
81
- shape: 'box',
82
- type: '',
83
- prompt: '',
84
- maxRetries: 0,
85
- goalGate: false,
86
- retryTarget: '',
87
- fallbackRetryTarget: '',
88
- fidelity: '',
89
- threadId: '',
90
- class: '',
91
- timeout: 0,
92
- llmModel: '',
93
- llmProvider: '',
94
- reasoningEffort: '',
95
- autoStatus: false,
96
- allowPartial: false,
97
- toolCommand: '',
98
- backend: '',
99
- ...overrides,
100
- };
101
- }
102
- /** Build a minimal Graph containing the given nodes and modelStylesheet. */
103
- function makeGraph(modelStylesheet, nodes) {
104
- const nodeMap = new Map();
105
- for (const node of nodes) {
106
- nodeMap.set(node.id, node);
107
- }
108
- // Ensure there are start/exit nodes to satisfy potential structural expectations
109
- if (!nodeMap.has('start')) {
110
- nodeMap.set('start', makeNode({ id: 'start', shape: 'Mdiamond' }));
111
- }
112
- if (!nodeMap.has('exit')) {
113
- nodeMap.set('exit', makeNode({ id: 'exit', shape: 'Msquare' }));
114
- }
115
- const edges = [
116
- {
117
- fromNode: 'start',
118
- toNode: 'exit',
119
- label: '',
120
- condition: '',
121
- weight: 1,
122
- fidelity: '',
123
- threadId: '',
124
- loopRestart: false,
125
- },
126
- ];
127
- return {
128
- id: 'test_graph',
129
- goal: '',
130
- label: '',
131
- modelStylesheet,
132
- defaultMaxRetries: 0,
133
- retryTarget: '',
134
- fallbackRetryTarget: '',
135
- defaultFidelity: '',
136
- nodes: nodeMap,
137
- edges,
138
- outgoingEdges(nodeId) {
139
- return edges.filter((e) => e.fromNode === nodeId);
140
- },
141
- startNode() {
142
- return nodeMap.get('start');
143
- },
144
- exitNode() {
145
- return nodeMap.get('exit');
146
- },
147
- };
148
- }
149
- // ---------------------------------------------------------------------------
150
- // Tests
151
- // ---------------------------------------------------------------------------
152
- describe('applyStylesheet', () => {
153
- // Universal rule applies to all nodes
154
- it('applies universal rule to all nodes', () => {
155
- const node1 = makeNode({ id: 'n1', shape: 'box' });
156
- const node2 = makeNode({ id: 'n2', shape: 'circle' });
157
- const graph = makeGraph('* { llm_model: x; }', [node1, node2]);
158
- applyStylesheet(graph);
159
- expect(graph.nodes.get('n1').llmModel).toBe('x');
160
- expect(graph.nodes.get('n2').llmModel).toBe('x');
161
- });
162
- // AC1 — shape selector resolves to matching node's LLM properties
163
- it('AC1: shape selector applies to matching-shape node (specificity 1)', () => {
164
- const node = makeNode({ id: 'n1', shape: 'box' });
165
- const graph = makeGraph('box { llm_model: claude-sonnet-4-5; }', [node]);
166
- applyStylesheet(graph);
167
- expect(graph.nodes.get('n1').llmModel).toBe('claude-sonnet-4-5');
168
- });
169
- it('shape selector does NOT apply to non-matching shape', () => {
170
- const node = makeNode({ id: 'n1', shape: 'circle' });
171
- const graph = makeGraph('box { llm_model: claude-sonnet-4-5; }', [node]);
172
- applyStylesheet(graph);
173
- expect(graph.nodes.get('n1').llmModel).toBe('');
174
- });
175
- // AC2 — class rule overrides shape rule at higher specificity
176
- it('AC2: class rule (specificity 2) overrides shape rule (specificity 1) on the same node', () => {
177
- const node = makeNode({ id: 'n1', shape: 'box', class: 'critical' });
178
- const graph = makeGraph('box { llm_model: x; } .critical { llm_model: y; }', [node]);
179
- applyStylesheet(graph);
180
- expect(graph.nodes.get('n1').llmModel).toBe('y');
181
- });
182
- // AC3 — multiple classes use source-order tie-breaking
183
- it('AC3: two equal-specificity class rules — later rule in stylesheet wins', () => {
184
- const node = makeNode({ id: 'n1', shape: 'box', class: 'critical,expensive' });
185
- const graph = makeGraph('.critical { llm_model: a; } .expensive { llm_model: b; }', [node]);
186
- applyStylesheet(graph);
187
- expect(graph.nodes.get('n1').llmModel).toBe('b');
188
- });
189
- // AC4 — node with explicit llmModel (non-empty string) is NOT overwritten
190
- it('AC4: node with explicit non-empty llmModel is NOT overwritten', () => {
191
- const node = makeNode({ id: 'n1', shape: 'box', llmModel: 'already-set' });
192
- const graph = makeGraph('* { llm_model: override-attempt; }', [node]);
193
- applyStylesheet(graph);
194
- expect(graph.nodes.get('n1').llmModel).toBe('already-set');
195
- });
196
- // AC4 — node with empty string llmModel IS overwritten
197
- it('AC4: node with empty string llmModel IS overwritten by stylesheet', () => {
198
- const node = makeNode({ id: 'n1', shape: 'box', llmModel: '' });
199
- const graph = makeGraph('* { llm_model: haiku; }', [node]);
200
- applyStylesheet(graph);
201
- expect(graph.nodes.get('n1').llmModel).toBe('haiku');
202
- });
203
- // AC4 — applies llmProvider and reasoningEffort as well
204
- it('applies llmProvider and reasoningEffort from stylesheet rules', () => {
205
- const node = makeNode({ id: 'n1', shape: 'box' });
206
- const graph = makeGraph('* { llm_provider: anthropic; reasoning_effort: high; }', [node]);
207
- applyStylesheet(graph);
208
- expect(graph.nodes.get('n1').llmProvider).toBe('anthropic');
209
- expect(graph.nodes.get('n1').reasoningEffort).toBe('high');
210
- });
211
- // Empty/absent stylesheet is a no-op
212
- it('empty modelStylesheet is a no-op (no changes to nodes)', () => {
213
- const node = makeNode({ id: 'n1', shape: 'box' });
214
- const graph = makeGraph('', [node]);
215
- applyStylesheet(graph);
216
- expect(graph.nodes.get('n1').llmModel).toBe('');
217
- expect(graph.nodes.get('n1').llmProvider).toBe('');
218
- expect(graph.nodes.get('n1').reasoningEffort).toBe('');
219
- });
220
- // No stylesheet at all is a no-op
221
- it('no inheritedStylesheet and no modelStylesheet is a no-op', () => {
222
- const node = makeNode({ id: 'n1', shape: 'box' });
223
- const graph = makeGraph('', [node]);
224
- applyStylesheet(graph, undefined);
225
- expect(graph.nodes.get('n1').llmModel).toBe('');
226
- });
227
- // inheritedStylesheet rules apply when graph has no local stylesheet
228
- it('inheritedStylesheet rules apply when graph has no local model_stylesheet', () => {
229
- const node = makeNode({ id: 'n1', shape: 'box' });
230
- const graph = makeGraph('', [node]);
231
- const inherited = parseStylesheet('* { llm_model: parent-model; }');
232
- applyStylesheet(graph, inherited);
233
- expect(graph.nodes.get('n1').llmModel).toBe('parent-model');
234
- });
235
- // AC7 — local rules win over inherited at equal specificity
236
- it('AC7: local model_stylesheet rules win over inheritedStylesheet at equal specificity', () => {
237
- const node = makeNode({ id: 'n1', shape: 'box' });
238
- const graph = makeGraph('* { llm_model: child-model; }', [node]);
239
- const inherited = parseStylesheet('* { llm_model: parent-model; }');
240
- applyStylesheet(graph, inherited);
241
- // Local rule appears later in effectiveStylesheet → wins at equal specificity (both universal = 0)
242
- expect(graph.nodes.get('n1').llmModel).toBe('child-model');
243
- });
244
- // Higher-specificity inherited rules should still be overrideable by local higher-specificity rules
245
- it('local class rule wins over inherited class rule at equal specificity via source order', () => {
246
- const node = makeNode({ id: 'n1', shape: 'box', class: 'critical' });
247
- const graph = makeGraph('.critical { llm_model: local-critical; }', [node]);
248
- const inherited = parseStylesheet('.critical { llm_model: parent-critical; }');
249
- applyStylesheet(graph, inherited);
250
- expect(graph.nodes.get('n1').llmModel).toBe('local-critical');
251
- });
252
- // Idempotency: calling applyStylesheet twice does not change the result
253
- it('is idempotent — calling applyStylesheet twice produces the same result', () => {
254
- const node = makeNode({ id: 'n1', shape: 'box' });
255
- const graph = makeGraph('* { llm_model: haiku; }', [node]);
256
- applyStylesheet(graph);
257
- applyStylesheet(graph);
258
- expect(graph.nodes.get('n1').llmModel).toBe('haiku');
259
- });
260
- });
261
- // ---------------------------------------------------------------------------
262
- // AC5 — Executor integration: applyStylesheet runs before first handler dispatch
263
- // ---------------------------------------------------------------------------
264
- describe('AC5 — executor integration: applyStylesheet called before handler dispatch', () => {
265
- /**
266
- * Creates a 3-node graph (start → work → exit) with the given modelStylesheet.
267
- * The work node has no explicit llmModel so the stylesheet rule can fill it.
268
- */
269
- function makeExecutorGraph(modelStylesheet) {
270
- const startNode = makeNode({ id: 'start', shape: 'Mdiamond' });
271
- const workNode = makeNode({ id: 'work', shape: 'box', llmModel: '' });
272
- const exitNode = makeNode({ id: 'exit', shape: 'Msquare' });
273
- const nodeMap = new Map([
274
- ['start', startNode],
275
- ['work', workNode],
276
- ['exit', exitNode],
277
- ]);
278
- const edges = [
279
- { fromNode: 'start', toNode: 'work', label: '', condition: '', weight: 1, fidelity: '', threadId: '', loopRestart: false },
280
- { fromNode: 'work', toNode: 'exit', label: '', condition: '', weight: 1, fidelity: '', threadId: '', loopRestart: false },
281
- ];
282
- const graph = {
283
- id: 'ac5-graph',
284
- goal: '',
285
- label: '',
286
- modelStylesheet,
287
- defaultMaxRetries: 0,
288
- retryTarget: '',
289
- fallbackRetryTarget: '',
290
- defaultFidelity: '',
291
- nodes: nodeMap,
292
- edges,
293
- outgoingEdges(nodeId) { return edges.filter((e) => e.fromNode === nodeId); },
294
- startNode() { return nodeMap.get('start'); },
295
- exitNode() { return nodeMap.get('exit'); },
296
- };
297
- return { graph, workNode };
298
- }
299
- it('AC5: work node handler receives node.llmModel already resolved by applyStylesheet', async () => {
300
- const capturedLlmModel = { value: '' };
301
- // Minimal registry: every handler returns SUCCESS; captures llmModel for the work node.
302
- const registry = {
303
- resolve(node) {
304
- return async (n) => {
305
- if (n.id === 'work')
306
- capturedLlmModel.value = n.llmModel;
307
- return { status: 'SUCCESS' };
308
- };
309
- },
310
- register: () => { },
311
- registerShape: () => { },
312
- setDefault: () => { },
313
- };
314
- const { graph } = makeExecutorGraph('* { llm_model: haiku; }');
315
- const outcome = await createGraphExecutor().run(graph, {
316
- runId: 'ac5-test',
317
- logsRoot: '/tmp',
318
- handlerRegistry: registry,
319
- });
320
- // Executor should succeed end-to-end
321
- expect(outcome.status).toBe('SUCCESS');
322
- // Handler must have been called with llmModel pre-set by applyStylesheet
323
- expect(capturedLlmModel.value).toBe('haiku');
324
- });
325
- it('AC5: work node with explicit llmModel is not overwritten before handler dispatch', async () => {
326
- const capturedLlmModel = { value: '' };
327
- const registry = {
328
- resolve(node) {
329
- return async (n) => {
330
- if (n.id === 'work')
331
- capturedLlmModel.value = n.llmModel;
332
- return { status: 'SUCCESS' };
333
- };
334
- },
335
- register: () => { },
336
- registerShape: () => { },
337
- setDefault: () => { },
338
- };
339
- const { graph, workNode } = makeExecutorGraph('* { llm_model: haiku; }');
340
- // Override work node with an explicit model — applyStylesheet must not overwrite it
341
- workNode.llmModel = 'explicit-model';
342
- await createGraphExecutor().run(graph, {
343
- runId: 'ac5-preserve-test',
344
- logsRoot: '/tmp',
345
- handlerRegistry: registry,
346
- });
347
- expect(capturedLlmModel.value).toBe('explicit-model');
348
- });
349
- });
350
- //# sourceMappingURL=transformer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transformer.test.js","sourceRoot":"","sources":["../../../src/graph/__tests__/transformer.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Unit tests for GraphValidator — 8 error rules (story 42-4)
3
- *
4
- * Covers:
5
- * AC1 — start_node error rule
6
- * AC2 — terminal_node error rule
7
- * AC3 — reachability error rule
8
- * AC4 — edge_target_exists error rule
9
- * AC5 — start_no_incoming and exit_no_outgoing error rules
10
- * AC6 — condition_syntax error rule
11
- * AC7 — validateOrRaise throws on errors, not on warnings
12
- * AC8 — all tests pass, no regressions
13
- */
14
- export {};
15
- //# sourceMappingURL=validator-errors.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator-errors.test.d.ts","sourceRoot":"","sources":["../../../src/graph/__tests__/validator-errors.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}