@substrate-ai/factory 0.19.54 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/README.md +39 -0
  2. package/dist/config.d.ts +4 -4
  3. package/package.json +12 -3
  4. package/dist/__tests__/config.test.d.ts +0 -11
  5. package/dist/__tests__/config.test.d.ts.map +0 -1
  6. package/dist/__tests__/config.test.js +0 -215
  7. package/dist/__tests__/config.test.js.map +0 -1
  8. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  9. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  10. package/dist/__tests__/factory-run-command.test.js +0 -454
  11. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  12. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  13. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  14. package/dist/__tests__/factory-validate-command.test.js +0 -339
  15. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  19. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  23. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  25. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  26. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  27. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  31. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  35. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  37. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  38. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  39. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  41. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  42. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  43. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  45. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  46. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  47. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  49. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  51. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  55. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  59. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  63. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  64. package/dist/__tests__/integration/events.test.d.ts +0 -8
  65. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  66. package/dist/__tests__/integration/events.test.js +0 -194
  67. package/dist/__tests__/integration/events.test.js.map +0 -1
  68. package/dist/__tests__/integration/graphs.d.ts +0 -59
  69. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  70. package/dist/__tests__/integration/graphs.js +0 -164
  71. package/dist/__tests__/integration/graphs.js.map +0 -1
  72. package/dist/__tests__/integration/helpers.d.ts +0 -127
  73. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  74. package/dist/__tests__/integration/helpers.js +0 -167
  75. package/dist/__tests__/integration/helpers.js.map +0 -1
  76. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  77. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/integrity.test.js +0 -198
  79. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  81. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  83. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  84. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  85. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  87. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  89. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  91. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  95. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  96. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  97. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  98. package/dist/__tests__/integration/persistence.test.js +0 -129
  99. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  103. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  105. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  107. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  109. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  111. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  113. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  115. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  116. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  117. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  119. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  120. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  121. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  122. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  123. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  124. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  125. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  126. package/dist/agent/__tests__/loop.test.js +0 -868
  127. package/dist/agent/__tests__/loop.test.js.map +0 -1
  128. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  129. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  130. package/dist/agent/__tests__/truncation.test.js +0 -276
  131. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  135. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  136. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  137. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  138. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  139. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  141. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  143. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  145. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  146. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  147. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  148. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  149. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  150. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  151. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  153. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  154. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  155. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  156. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  157. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  158. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  159. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  160. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  161. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  162. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  163. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  164. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  165. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  166. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  167. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  169. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  170. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  171. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  172. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  173. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  174. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  175. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  176. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  177. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  178. package/dist/backend/__tests__/parity.test.js +0 -411
  179. package/dist/backend/__tests__/parity.test.js.map +0 -1
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  181. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  182. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  183. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  184. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  185. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  186. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  187. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  189. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  191. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  192. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  193. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  194. package/dist/context/__tests__/summarizer.test.js +0 -189
  195. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  196. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  197. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  198. package/dist/context/__tests__/summary-cache.test.js +0 -214
  199. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  200. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  201. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  202. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  203. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  204. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  205. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  206. package/dist/context/__tests__/summary-types.test.js +0 -130
  207. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  208. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  209. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  210. package/dist/convergence/__tests__/budget.test.js +0 -187
  211. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  212. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  213. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  214. package/dist/convergence/__tests__/controller.test.js +0 -585
  215. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  217. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  218. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  219. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  221. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  222. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  223. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  224. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  225. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  226. package/dist/convergence/__tests__/plateau.test.js +0 -163
  227. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  228. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  229. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  230. package/dist/convergence/__tests__/remediation.test.js +0 -209
  231. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  233. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  234. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  235. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  236. package/dist/factory-command.test.d.ts +0 -8
  237. package/dist/factory-command.test.d.ts.map +0 -1
  238. package/dist/factory-command.test.js +0 -304
  239. package/dist/factory-command.test.js.map +0 -1
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  241. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  242. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  243. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  244. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  245. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  246. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  247. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  248. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  249. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  250. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  251. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  252. package/dist/graph/__tests__/context.test.d.ts +0 -14
  253. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  254. package/dist/graph/__tests__/context.test.js +0 -276
  255. package/dist/graph/__tests__/context.test.js.map +0 -1
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  257. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  258. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  259. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  260. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  261. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  262. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  263. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  265. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  266. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  267. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  269. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  270. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  271. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  272. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  273. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  274. package/dist/graph/__tests__/executor.test.js +0 -901
  275. package/dist/graph/__tests__/executor.test.js.map +0 -1
  276. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  277. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  278. package/dist/graph/__tests__/fidelity.test.js +0 -135
  279. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  281. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  282. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  283. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  285. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  286. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  287. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  288. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  289. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  290. package/dist/graph/__tests__/parser.test.js +0 -452
  291. package/dist/graph/__tests__/parser.test.js.map +0 -1
  292. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  293. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  294. package/dist/graph/__tests__/run-state.test.js +0 -189
  295. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  296. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  297. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  298. package/dist/graph/__tests__/transformer.test.js +0 -350
  299. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  300. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  301. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  302. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  303. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  305. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  306. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  307. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  309. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  310. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  311. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  312. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  313. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  314. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  315. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  316. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  317. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  318. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  319. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  321. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  322. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  323. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  325. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  326. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  327. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  329. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  330. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  331. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  333. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  334. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  335. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  336. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  337. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  338. package/dist/handlers/__tests__/registry.test.js +0 -315
  339. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  341. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  342. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  343. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  347. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  348. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  349. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  350. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  351. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  353. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  354. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  355. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  357. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  358. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  359. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  361. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  362. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  363. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  364. package/dist/llm/__tests__/client.test.d.ts +0 -2
  365. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  366. package/dist/llm/__tests__/client.test.js +0 -198
  367. package/dist/llm/__tests__/client.test.js.map +0 -1
  368. package/dist/llm/__tests__/types.test.d.ts +0 -2
  369. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/llm/__tests__/types.test.js +0 -289
  371. package/dist/llm/__tests__/types.test.js.map +0 -1
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  375. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  377. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  378. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  379. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  381. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  382. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  383. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  385. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  386. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  387. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  389. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  390. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  391. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  392. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  393. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  394. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  395. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  397. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  398. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  399. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  401. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  402. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  403. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  405. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  406. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  407. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  409. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  410. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  411. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  415. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  417. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  418. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  419. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  420. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  421. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  422. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  423. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  425. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  426. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  427. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  428. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  429. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  430. package/dist/scenarios/__tests__/store.test.js +0 -169
  431. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  433. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  434. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  435. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  436. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  437. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  438. package/dist/templates/__tests__/templates.test.js +0 -92
  439. package/dist/templates/__tests__/templates.test.js.map +0 -1
  440. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  441. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  442. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  443. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  444. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  445. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  446. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  447. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  449. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  450. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  451. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  452. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
  453. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
  454. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
  455. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
  456. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  457. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  458. package/dist/twins/__tests__/integration/helpers.js +0 -67
  459. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  460. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  461. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  462. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  463. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  464. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  465. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  466. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  467. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  468. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  469. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  470. package/dist/twins/__tests__/persistence.test.js +0 -300
  471. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  472. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  473. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  474. package/dist/twins/__tests__/registry.test.js +0 -282
  475. package/dist/twins/__tests__/registry.test.js.map +0 -1
  476. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  477. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  478. package/dist/twins/__tests__/run-state.test.js +0 -112
  479. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  480. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  481. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  482. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  483. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  484. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  485. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  486. package/dist/twins/__tests__/templates.test.js +0 -87
  487. package/dist/twins/__tests__/templates.test.js.map +0 -1
  488. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  489. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  490. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  491. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1,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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,OAAO,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AACnC,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,MAAc,CAAA;IAClB,IAAI,OAAwB,CAAA;IAE5B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACjE,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,+CAA+C;IAC/C,4EAA4E;IAE5E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,SAAS,GAAG,cAAc,CAAA;YAChC,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjD,MAAM,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;YAChE,MAAM,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAEzC,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YACrC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QACxE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,gEAAgE;IAChE,4EAA4E;IAE5E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAA;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;YACzD,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAA4B,CAAA;YACpE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAA;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAA;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;YAC3D,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QAEF,0EAA0E;QAC1E,4DAA4D;QAC5D,0EAA0E;QAE1E,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAA;YAEF,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACzE,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,CAAC;aACd,CAAC,CAAA;YAEF,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,oCAAoC;IACpC,4EAA4E;IAE5E,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;QAEjD,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEhE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;YACzE,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC3C,UAAU,EAAE,CAAC;aACd,CAAA;YACD,MAAM,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;YAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAA;YACvE,MAAM,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEhD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEhE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAA;YACvE,MAAM,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,gBAAgB;IAChB,4EAA4E;IAE5E,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -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"}