@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,515 +0,0 @@
1
- /**
2
- * Integration tests for parallel fan-out/fan-in execution.
3
- * Story 50-11 AC1.
4
- *
5
- * Tests cover:
6
- * - wait_all, first_success, quorum join policies
7
- * - Bounded concurrency (maxParallel)
8
- * - Fan-in heuristic and LLM-based winner selection
9
- * - Context isolation between branches
10
- * - Event emission (graph:parallel-* events)
11
- * - Absent eventBus handling
12
- * - Edge cases (empty parallel, all-fail)
13
- *
14
- * Test approach:
15
- * Handler chain tests: call parallel + fan_in handlers directly on parsed graph nodes.
16
- * Advantage: can inspect context state after handler returns.
17
- * Full executor tests: use createGraphExecutor for event emission verification.
18
- *
19
- * ≥15 `it(...)` cases required (AC7).
20
- */
21
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
22
- import os from 'node:os';
23
- import path from 'node:path';
24
- import { mkdir, rm } from 'node:fs/promises';
25
- import crypto from 'node:crypto';
26
- import { parseGraph } from '../../graph/parser.js';
27
- import { createGraphExecutor } from '../../graph/executor.js';
28
- import { GraphContext } from '../../graph/context.js';
29
- import { HandlerRegistry } from '../../handlers/registry.js';
30
- import { startHandler } from '../../handlers/start.js';
31
- import { exitHandler } from '../../handlers/exit.js';
32
- import { createParallelHandler } from '../../handlers/parallel.js';
33
- import { createFanInHandler, rankBranches } from '../../handlers/fan-in.js';
34
- import { PARALLEL_FAN_OUT_DOT, FIRST_SUCCESS_POLICY_DOT, QUORUM_POLICY_DOT, BOUNDED_CONCURRENCY_DOT, } from '../fixtures/parallel-fan-out-fan-in.dot.js';
35
- // ---------------------------------------------------------------------------
36
- // Helpers
37
- // ---------------------------------------------------------------------------
38
- /** Creates a unique temp directory for executor logsRoot. */
39
- async function makeTmpDir() {
40
- const dir = path.join(os.tmpdir(), `parallel-test-${crypto.randomUUID()}`);
41
- await mkdir(dir, { recursive: true });
42
- return dir;
43
- }
44
- async function cleanDir(dir) {
45
- await rm(dir, { recursive: true, force: true });
46
- }
47
- /** Creates a mock event bus that records all emitted events. */
48
- function makeEventSpy() {
49
- const events = [];
50
- const bus = {
51
- emit(event, payload) {
52
- events.push({ event: event, payload });
53
- },
54
- on() { },
55
- off() { },
56
- };
57
- return { bus, events };
58
- }
59
- /**
60
- * Build a HandlerRegistry with real parallel/fan_in handlers and per-node branch mocks.
61
- * The `setDefault` handler dispatches to per-node mocks via node.id lookup.
62
- */
63
- function makeParallelRegistry(branchMocks, opts) {
64
- const registry = new HandlerRegistry();
65
- registry.register('start', startHandler);
66
- registry.register('exit', exitHandler);
67
- registry.register('parallel', createParallelHandler({
68
- handlerRegistry: registry,
69
- ...(opts?.eventBus !== undefined ? { eventBus: opts.eventBus } : {}),
70
- ...(opts?.runId !== undefined ? { runId: opts.runId } : {}),
71
- }));
72
- registry.register('parallel.fan_in', createFanInHandler(opts?.fanInLlmCall !== undefined ? { llmCall: opts.fanInLlmCall } : undefined));
73
- const defaultHandler = async (node, context, graph) => {
74
- const h = branchMocks.get(node.id);
75
- if (h)
76
- return h(node, context, graph);
77
- return { status: 'SUCCESS' };
78
- };
79
- registry.setDefault(defaultHandler);
80
- return registry;
81
- }
82
- /**
83
- * Build a minimal IHandlerRegistry for handler chain tests (no start/exit needed).
84
- * Resolves branch handlers by node.id.
85
- */
86
- function makeChainRegistry(branchMocks, opts) {
87
- // We need a HandlerRegistry instance so we can pass handlerRegistry: registry to parallel
88
- const registry = new HandlerRegistry();
89
- const defaultHandler = async (node, context, graph) => {
90
- const h = branchMocks.get(node.id);
91
- if (h)
92
- return h(node, context, graph);
93
- return { status: 'SUCCESS' };
94
- };
95
- registry.setDefault(defaultHandler);
96
- // These are NOT needed for direct parallel handler calls, but register them for safety
97
- registry.register('start', startHandler);
98
- registry.register('exit', exitHandler);
99
- registry.register('parallel', createParallelHandler({
100
- handlerRegistry: registry,
101
- ...(opts?.eventBus !== undefined ? { eventBus: opts.eventBus } : {}),
102
- ...(opts?.runId !== undefined ? { runId: opts.runId } : {}),
103
- }));
104
- registry.register('parallel.fan_in', createFanInHandler());
105
- return registry;
106
- }
107
- // ---------------------------------------------------------------------------
108
- // AC1: wait_all policy tests
109
- // ---------------------------------------------------------------------------
110
- describe('parallel fan-out/fan-in — wait_all policy', () => {
111
- it('3-branch wait_all: all branches succeed → pipeline returns SUCCESS', async () => {
112
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
113
- const mocks = new Map();
114
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
115
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
116
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
117
- const fanOutNode = graph.nodes.get('fan_out');
118
- const fanInNode = graph.nodes.get('fan_in');
119
- const registry = makeChainRegistry(mocks);
120
- const parallelHandler = registry.resolve(fanOutNode);
121
- const fanInHandler = registry.resolve(fanInNode);
122
- const context = new GraphContext({ __runId: 'test-wait-all' });
123
- const parallelOutcome = await parallelHandler(fanOutNode, context, graph);
124
- expect(parallelOutcome.status).toBe('SUCCESS');
125
- const results = context.get('parallel.results');
126
- expect(Array.isArray(results)).toBe(true);
127
- expect(results).toHaveLength(3);
128
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
129
- expect(fanInOutcome.status).toBe('SUCCESS');
130
- const bestId = context.get('parallel.fan_in.best_id');
131
- expect(bestId).toBeDefined();
132
- });
133
- it('wait_all: 1 branch fails, 2 succeed → fan_in picks best of successful branches', async () => {
134
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
135
- const mocks = new Map();
136
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
137
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
138
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
139
- const fanOutNode = graph.nodes.get('fan_out');
140
- const fanInNode = graph.nodes.get('fan_in');
141
- const registry = makeChainRegistry(mocks);
142
- const parallelHandler = registry.resolve(fanOutNode);
143
- const fanInHandler = registry.resolve(fanInNode);
144
- const context = new GraphContext({ __runId: 'test-1-fail' });
145
- await parallelHandler(fanOutNode, context, graph);
146
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
147
- expect(fanInOutcome.status).toBe('SUCCESS');
148
- const bestId = context.get('parallel.fan_in.best_id');
149
- // branch_b and branch_c succeed (indices 1 and 2); fan_in picks lowest branch_id among eligible
150
- expect([1, 2]).toContain(bestId);
151
- });
152
- it('wait_all: all 3 branches fail → fan_in returns FAILURE', async () => {
153
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
154
- const mocks = new Map();
155
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
156
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
157
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
158
- const fanOutNode = graph.nodes.get('fan_out');
159
- const fanInNode = graph.nodes.get('fan_in');
160
- const registry = makeChainRegistry(mocks);
161
- const parallelHandler = registry.resolve(fanOutNode);
162
- const fanInHandler = registry.resolve(fanInNode);
163
- const context = new GraphContext({ __runId: 'test-all-fail' });
164
- await parallelHandler(fanOutNode, context, graph);
165
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
166
- expect(fanInOutcome.status).toBe('FAILURE');
167
- expect(fanInOutcome.failureReason).toContain('all branches failed');
168
- });
169
- it('wait_all: winning branch context_updates merged into parent context', async () => {
170
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
171
- const mocks = new Map();
172
- // Branch_a (index 0) sets a unique key in its context
173
- mocks.set('branch_a', vi.fn(async (_node, ctx) => {
174
- ctx.set('winner_key', 'from_branch_a');
175
- return { status: 'SUCCESS' };
176
- }));
177
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
178
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
179
- const fanOutNode = graph.nodes.get('fan_out');
180
- const fanInNode = graph.nodes.get('fan_in');
181
- const registry = makeChainRegistry(mocks);
182
- const parallelHandler = registry.resolve(fanOutNode);
183
- const fanInHandler = registry.resolve(fanInNode);
184
- const context = new GraphContext({ __runId: 'test-merge' });
185
- await parallelHandler(fanOutNode, context, graph);
186
- await fanInHandler(fanInNode, context, graph);
187
- // branch_a is the only SUCCESS, so it wins; its context snapshot is merged
188
- expect(context.get('winner_key')).toBe('from_branch_a');
189
- });
190
- });
191
- // ---------------------------------------------------------------------------
192
- // first_success policy tests
193
- // ---------------------------------------------------------------------------
194
- describe('parallel fan-out/fan-in — first_success policy', () => {
195
- it('first_success: first branch to succeed resolves immediately → SUCCESS', async () => {
196
- const graph = parseGraph(FIRST_SUCCESS_POLICY_DOT);
197
- let resolveA;
198
- const blockA = new Promise((resolve) => { resolveA = resolve; });
199
- // branch_a is delayed; branch_b resolves immediately
200
- const mocks = new Map();
201
- mocks.set('branch_a', vi.fn(async () => {
202
- await blockA;
203
- return { status: 'SUCCESS' };
204
- }));
205
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
206
- // Unblock branch_a after branch_b has resolved
207
- setTimeout(() => resolveA(undefined), 50);
208
- const fanOutNode = graph.nodes.get('fan_out');
209
- // Set a short drain timeout so the test doesn't wait 5000ms (default drain)
210
- fanOutNode.attrs = { cancel_drain_timeout_ms: '10' };
211
- const registry = makeChainRegistry(mocks);
212
- const parallelHandler = registry.resolve(fanOutNode);
213
- const context = new GraphContext({ __runId: 'test-first-success' });
214
- const outcome = await parallelHandler(fanOutNode, context, graph);
215
- expect(outcome.status).toBe('SUCCESS');
216
- const results = context.get('parallel.results');
217
- const successCount = results.filter((r) => r.status === 'SUCCESS').length;
218
- expect(successCount).toBeGreaterThanOrEqual(1);
219
- });
220
- });
221
- // ---------------------------------------------------------------------------
222
- // quorum policy tests
223
- // ---------------------------------------------------------------------------
224
- describe('parallel fan-out/fan-in — quorum policy', () => {
225
- it('quorum=2: 2 of 3 branches succeed → SUCCESS', async () => {
226
- const graph = parseGraph(QUORUM_POLICY_DOT);
227
- // Post-process: add quorum_size + short drain timeout to fan_out.attrs
228
- const fanOutNode = graph.nodes.get('fan_out');
229
- fanOutNode.attrs = { quorum_size: '2', cancel_drain_timeout_ms: '10' };
230
- const mocks = new Map();
231
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
232
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
233
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
234
- const registry = makeChainRegistry(mocks);
235
- const parallelHandler = registry.resolve(fanOutNode);
236
- const context = new GraphContext({ __runId: 'test-quorum-pass' });
237
- const outcome = await parallelHandler(fanOutNode, context, graph);
238
- expect(outcome.status).toBe('SUCCESS');
239
- const quorumReached = context.get('parallel.quorum_reached');
240
- expect(quorumReached).toBeGreaterThanOrEqual(2);
241
- });
242
- it('quorum=2: only 1 of 3 branches succeeds → FAILURE', async () => {
243
- const graph = parseGraph(QUORUM_POLICY_DOT);
244
- const fanOutNode = graph.nodes.get('fan_out');
245
- fanOutNode.attrs = { quorum_size: '2', cancel_drain_timeout_ms: '10' };
246
- const mocks = new Map();
247
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
248
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
249
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
250
- const registry = makeChainRegistry(mocks);
251
- const parallelHandler = registry.resolve(fanOutNode);
252
- const context = new GraphContext({ __runId: 'test-quorum-fail' });
253
- const outcome = await parallelHandler(fanOutNode, context, graph);
254
- expect(outcome.status).toBe('FAILURE');
255
- });
256
- });
257
- // ---------------------------------------------------------------------------
258
- // Bounded concurrency
259
- // ---------------------------------------------------------------------------
260
- describe('parallel fan-out/fan-in — bounded concurrency', () => {
261
- it('maxParallel=2 with 4 branches: at most 2 handlers running concurrently', async () => {
262
- const graph = parseGraph(BOUNDED_CONCURRENCY_DOT);
263
- const fanOutNode = graph.nodes.get('fan_out');
264
- // maxParallel is set via DOT attribute [maxParallel=2], parsed to node.maxParallel=2
265
- let concurrent = 0;
266
- let maxConcurrent = 0;
267
- const resolvers = [];
268
- const delayedHandler = vi.fn(async () => {
269
- concurrent++;
270
- maxConcurrent = Math.max(maxConcurrent, concurrent);
271
- await new Promise((resolve) => resolvers.push(resolve));
272
- concurrent--;
273
- return { status: 'SUCCESS' };
274
- });
275
- const mocks = new Map();
276
- mocks.set('branch_a', delayedHandler);
277
- mocks.set('branch_b', delayedHandler);
278
- mocks.set('branch_c', delayedHandler);
279
- mocks.set('branch_d', delayedHandler);
280
- const registry = makeChainRegistry(mocks);
281
- const parallelHandler = registry.resolve(fanOutNode);
282
- const context = new GraphContext({ __runId: 'test-bounded' });
283
- // Start execution then progressively release branches
284
- const runPromise = parallelHandler(fanOutNode, context, graph);
285
- // Release 2 at a time to verify bounded concurrency
286
- await new Promise((r) => setTimeout(r, 10));
287
- while (resolvers.length > 0) {
288
- const r = resolvers.shift();
289
- r?.();
290
- await new Promise((r2) => setTimeout(r2, 5));
291
- }
292
- await runPromise;
293
- expect(maxConcurrent).toBeLessThanOrEqual(2);
294
- });
295
- });
296
- // ---------------------------------------------------------------------------
297
- // Fan-in heuristic selection
298
- // ---------------------------------------------------------------------------
299
- describe('fan-in — heuristic winner selection', () => {
300
- it('rankBranches: SUCCESS beats FAILURE; picks lowest branch_id on tie', () => {
301
- const results = [
302
- { branch_id: 0, status: 'FAILURE', failure_reason: 'err' },
303
- { branch_id: 1, status: 'SUCCESS' },
304
- { branch_id: 2, status: 'SUCCESS' },
305
- ];
306
- const winner = rankBranches(results);
307
- expect(winner).not.toBeNull();
308
- expect(winner.status).toBe('SUCCESS');
309
- expect(winner.branch_id).toBe(1); // lowest branch_id among SUCCESS
310
- });
311
- it('rankBranches: score descending as secondary sort criterion', () => {
312
- const results = [
313
- { branch_id: 0, status: 'SUCCESS', score: 5 },
314
- { branch_id: 1, status: 'SUCCESS', score: 10 },
315
- { branch_id: 2, status: 'SUCCESS', score: 7 },
316
- ];
317
- const winner = rankBranches(results);
318
- expect(winner.branch_id).toBe(1); // highest score
319
- });
320
- it('fan-in LLM mode: mock LLM returns branch_id 2 → that branch wins', async () => {
321
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
322
- const mocks = new Map();
323
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
324
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
325
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
326
- const fanOutNode = graph.nodes.get('fan_out');
327
- const fanInNode = graph.nodes.get('fan_in');
328
- // fan_in node needs a prompt for LLM selection
329
- fanInNode.prompt = 'Select the best implementation branch';
330
- const mockLlmCall = vi.fn().mockResolvedValue('2'); // LLM picks branch_id=2
331
- const registry = makeChainRegistry(mocks, {});
332
- const parallelHandler = registry.resolve(fanOutNode);
333
- const fanInHandler = createFanInHandler({ llmCall: mockLlmCall });
334
- const context = new GraphContext({ __runId: 'test-llm-fan-in' });
335
- await parallelHandler(fanOutNode, context, graph);
336
- const outcome = await fanInHandler(fanInNode, context, graph);
337
- expect(outcome.status).toBe('SUCCESS');
338
- expect(context.get('parallel.fan_in.best_id')).toBe(2);
339
- expect(mockLlmCall).toHaveBeenCalledOnce();
340
- });
341
- });
342
- // ---------------------------------------------------------------------------
343
- // Context isolation between branches
344
- // ---------------------------------------------------------------------------
345
- describe('parallel fan-out/fan-in — context isolation', () => {
346
- it('mutations in branch_a context are not visible in branch_b context', async () => {
347
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
348
- const mocks = new Map();
349
- mocks.set('branch_a', vi.fn(async (_node, ctx) => {
350
- ctx.set('key_a', 'value_from_a');
351
- return { status: 'SUCCESS' };
352
- }));
353
- mocks.set('branch_b', vi.fn(async (_node, ctx) => {
354
- ctx.set('key_b', 'value_from_b');
355
- return { status: 'SUCCESS' };
356
- }));
357
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
358
- const fanOutNode = graph.nodes.get('fan_out');
359
- const registry = makeChainRegistry(mocks);
360
- const parallelHandler = registry.resolve(fanOutNode);
361
- const context = new GraphContext({ __runId: 'test-isolation' });
362
- await parallelHandler(fanOutNode, context, graph);
363
- const results = context.get('parallel.results');
364
- // branch_a snapshot (index 0) should have key_a but NOT key_b
365
- const branchAResult = results.find((r) => r['branch_id'] === 0);
366
- const branchAContext = branchAResult?.['context_updates'];
367
- expect(branchAContext?.['key_a']).toBe('value_from_a');
368
- expect(branchAContext?.['key_b']).toBeUndefined();
369
- // branch_b snapshot (index 1) should have key_b but NOT key_a
370
- const branchBResult = results.find((r) => r['branch_id'] === 1);
371
- const branchBContext = branchBResult?.['context_updates'];
372
- expect(branchBContext?.['key_b']).toBe('value_from_b');
373
- expect(branchBContext?.['key_a']).toBeUndefined();
374
- });
375
- });
376
- // ---------------------------------------------------------------------------
377
- // Event emission tests (full executor runs)
378
- // ---------------------------------------------------------------------------
379
- describe('parallel fan-out/fan-in — event emission', () => {
380
- let logsRoot;
381
- beforeEach(async () => {
382
- logsRoot = await makeTmpDir();
383
- });
384
- afterEach(async () => {
385
- await cleanDir(logsRoot);
386
- });
387
- it('graph:parallel-started emitted once with correct branchCount=3', async () => {
388
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
389
- const { bus, events } = makeEventSpy();
390
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-test' });
391
- const result = await createGraphExecutor().run(graph, {
392
- runId: 'evt-test',
393
- logsRoot,
394
- handlerRegistry: registry,
395
- eventBus: bus,
396
- });
397
- expect(result.status).toBe('SUCCESS');
398
- const parallelStarted = events.filter((e) => e.event === 'graph:parallel-started');
399
- expect(parallelStarted).toHaveLength(1);
400
- const payload = parallelStarted[0].payload;
401
- expect(payload.branchCount).toBe(3);
402
- expect(payload.policy).toBe('wait_all');
403
- expect(payload.runId).toBe('evt-test');
404
- });
405
- it('graph:parallel-branch-started emitted once per branch (3 times)', async () => {
406
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
407
- const { bus, events } = makeEventSpy();
408
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-branch-start' });
409
- await createGraphExecutor().run(graph, {
410
- runId: 'evt-branch-start',
411
- logsRoot,
412
- handlerRegistry: registry,
413
- eventBus: bus,
414
- });
415
- const branchStarted = events.filter((e) => e.event === 'graph:parallel-branch-started');
416
- expect(branchStarted).toHaveLength(3);
417
- const indices = branchStarted.map((e) => e.payload.branchIndex);
418
- expect(indices).toContain(0);
419
- expect(indices).toContain(1);
420
- expect(indices).toContain(2);
421
- });
422
- it('graph:parallel-branch-completed emitted once per branch with durationMs >= 0', async () => {
423
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
424
- const { bus, events } = makeEventSpy();
425
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-branch-done' });
426
- await createGraphExecutor().run(graph, {
427
- runId: 'evt-branch-done',
428
- logsRoot,
429
- handlerRegistry: registry,
430
- eventBus: bus,
431
- });
432
- const branchCompleted = events.filter((e) => e.event === 'graph:parallel-branch-completed');
433
- expect(branchCompleted).toHaveLength(3);
434
- for (const evt of branchCompleted) {
435
- const p = evt.payload;
436
- expect(p.durationMs).toBeGreaterThanOrEqual(0);
437
- }
438
- });
439
- it('graph:parallel-completed emitted once; completedCount + cancelledCount === 3', async () => {
440
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
441
- const { bus, events } = makeEventSpy();
442
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-parallel-done' });
443
- await createGraphExecutor().run(graph, {
444
- runId: 'evt-parallel-done',
445
- logsRoot,
446
- handlerRegistry: registry,
447
- eventBus: bus,
448
- });
449
- const parallelCompleted = events.filter((e) => e.event === 'graph:parallel-completed');
450
- expect(parallelCompleted).toHaveLength(1);
451
- const payload = parallelCompleted[0].payload;
452
- expect(payload.completedCount + payload.cancelledCount).toBe(3);
453
- });
454
- it('graph:parallel-started appears before graph:parallel-branch-started in event stream', async () => {
455
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
456
- const { bus, events } = makeEventSpy();
457
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-order' });
458
- await createGraphExecutor().run(graph, {
459
- runId: 'evt-order',
460
- logsRoot,
461
- handlerRegistry: registry,
462
- eventBus: bus,
463
- });
464
- const types = events.map((e) => e.event);
465
- const parallelStartIdx = types.indexOf('graph:parallel-started');
466
- const firstBranchStartIdx = types.indexOf('graph:parallel-branch-started');
467
- expect(parallelStartIdx).toBeGreaterThanOrEqual(0);
468
- expect(firstBranchStartIdx).toBeGreaterThanOrEqual(0);
469
- expect(parallelStartIdx).toBeLessThan(firstBranchStartIdx);
470
- });
471
- });
472
- // ---------------------------------------------------------------------------
473
- // Edge cases
474
- // ---------------------------------------------------------------------------
475
- describe('parallel fan-out/fan-in — edge cases', () => {
476
- it('absent eventBus: parallel handler runs without TypeError', async () => {
477
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
478
- const fanOutNode = graph.nodes.get('fan_out');
479
- const registry = makeChainRegistry(new Map());
480
- const parallelHandler = registry.resolve(fanOutNode);
481
- const context = new GraphContext({ __runId: 'test-no-bus' });
482
- await expect(parallelHandler(fanOutNode, context, graph)).resolves.not.toThrow();
483
- });
484
- it('empty parallel node (0 branches): returns SUCCESS without crash', async () => {
485
- // Build a graph with a parallel node that has no outgoing edges
486
- const emptyParallelDot = `
487
- digraph empty_parallel {
488
- start [type="start"];
489
- fan_out [type="parallel"];
490
- exit [type="exit"];
491
- start -> fan_out;
492
- fan_out -> exit;
493
- }
494
- `;
495
- const graph = parseGraph(emptyParallelDot);
496
- const fanOutNode = graph.nodes.get('fan_out');
497
- // Override outgoingEdges for fan_out to return empty (fan_out only has edge to exit)
498
- // Actually fan_out has 1 edge to exit — parallel handler sees that as 1 branch
499
- // For truly empty, we create a stub with no outgoing edges from fan_out
500
- const emptyGraph = {
501
- ...graph,
502
- outgoingEdges: (nodeId) => {
503
- if (nodeId === 'fan_out')
504
- return [];
505
- return graph.outgoingEdges(nodeId);
506
- },
507
- };
508
- const registry = makeChainRegistry(new Map());
509
- const parallelHandler = registry.resolve(fanOutNode);
510
- const context = new GraphContext({ __runId: 'test-empty' });
511
- const outcome = await parallelHandler(fanOutNode, context, emptyGraph);
512
- expect(outcome.status).toBe('SUCCESS');
513
- });
514
- });
515
- //# sourceMappingURL=parallel-fan-out-fan-in.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parallel-fan-out-fan-in.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/parallel-fan-out-fan-in.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAO3E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,4CAA4C,CAAA;AAEnD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,6DAA6D;AAC7D,KAAK,UAAU,UAAU;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC1E,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW;IACjC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACjD,CAAC;AAQD,gEAAgE;AAChE,SAAS,YAAY;IACnB,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAiC;QACxC,IAAI,CAAgC,KAAQ,EAAE,OAAyB;YACrE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAe,EAAE,OAAO,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,EAAE,KAAU,CAAC;QACb,GAAG,KAAU,CAAC;KACf,CAAA;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAC3B,WAAqC,EACrC,IAIC;IAED,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAA;IAEtC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACxC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,QAAQ,CAAC,QAAQ,CACf,UAAU,EACV,qBAAqB,CAAC;QACpB,eAAe,EAAE,QAAQ;QACzB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CACH,CAAA;IACD,QAAQ,CAAC,QAAQ,CACf,iBAAiB,EACjB,kBAAkB,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAClG,CAAA;IAED,MAAM,cAAc,GAAgB,KAAK,EAAE,IAAe,EAAE,OAAsB,EAAE,KAAY,EAAE,EAAE;QAClG,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACrC,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;IACvC,CAAC,CAAA;IACD,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IAEnC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CACxB,WAAqC,EACrC,IAGC;IAED,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAA;IAEtC,MAAM,cAAc,GAAgB,KAAK,EAAE,IAAe,EAAE,OAAsB,EAAE,KAAY,EAAE,EAAE;QAClG,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACrC,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;IACvC,CAAC,CAAA;IACD,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IAEnC,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACxC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,QAAQ,CAAC,QAAQ,CACf,UAAU,EACV,qBAAqB,CAAC;QACpB,eAAe,EAAE,QAAQ;QACzB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CACH,CAAA;IACD,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAE1D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;QAE9D,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACzE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAwB,CAAA;QACtE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAE/B,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAClE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;QAE5D,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAClE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAW,CAAA;QAC/D,gGAAgG;QAChG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;QAE9D,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAClE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,sDAAsD;QACtD,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAgB,EAAE,GAAkB,EAAE,EAAE;YACzE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;YACtC,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;QACH,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;QAE3D,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACjD,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAE7C,2EAA2E;QAC3E,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,KAAK,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAA;QAElD,IAAI,QAA2B,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;QAErE,qDAAqD;QACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YACrC,MAAM,MAAM,CAAA;YACZ,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;QACH,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,+CAA+C;QAC/C,UAAU,CAAC,GAAG,EAAE,CAAC,QAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAE1C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,4EAA4E;QAC5E,UAAU,CAAC,KAAK,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAA;QACpD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAwB,CAAA;QACtE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAA;QACzE,MAAM,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3C,uEAAuE;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,UAAU,CAAC,KAAK,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAA;QAEtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAW,CAAA;QACtE,MAAM,CAAC,aAAa,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,UAAU,CAAC,KAAK,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAA;QAEtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,KAAK,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,qFAAqF;QAErF,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,MAAM,SAAS,GAAsB,EAAE,CAAA;QAEvC,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YACtC,UAAU,EAAE,CAAA;YACZ,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;YACnD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;YAC7D,UAAU,EAAE,CAAA;YACZ,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QACrC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QACrC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QACrC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QAErC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;QAE7D,sDAAsD;QACtD,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAE9D,oDAAoD;QACpD,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACjD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;YAC3B,CAAC,EAAE,EAAE,CAAA;YACL,MAAM,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,UAAU,CAAA;QAChB,MAAM,CAAC,aAAa,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAwB;YACnC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE;YAC1D,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YACnC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;SACpC,CAAA;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,CAAC,MAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,iCAAiC;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,OAAO,GAAwB;YACnC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7C,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9C,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;SAC9C,CAAA;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,CAAC,MAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,gBAAgB;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;QAC5C,+CAA+C;QAC/C,SAAS,CAAC,MAAM,GAAG,uCAAuC,CAAA;QAE1D,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA,CAAE,wBAAwB;QAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;QAEjE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAEhE,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAE7D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtD,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAE5C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAgB,EAAE,GAAkB,EAAE,EAAE;YACzE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;YAChC,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;QACH,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAgB,EAAE,GAAkB,EAAE,EAAE;YACzE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;YAChC,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;QACH,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAC/D,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAmC,CAAA;QACjF,8DAA8D;QAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/D,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC,iBAAiB,CAAwC,CAAA;QAChG,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtD,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QAEjD,8DAA8D;QAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/D,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC,iBAAiB,CAAwC,CAAA;QAChG,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtD,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,IAAI,QAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;QAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;QACtF,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACpD,KAAK,EAAE,UAAU;YACjB,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAErC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,wBAAwB,CAAC,CAAA;QAClF,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAEvC,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAE,CAAC,OAAiE,CAAA;QACrG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;QAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAA;QAC9F,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACrC,KAAK,EAAE,kBAAkB;YACzB,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,+BAA+B,CAAC,CAAA;QACvF,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAErC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,OAAmC,CAAC,WAAW,CAAC,CAAA;QAC5F,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;QAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAC7F,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACrC,KAAK,EAAE,iBAAiB;YACxB,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,iCAAiC,CAAC,CAAA;QAC3F,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAEvC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAiC,CAAA;YAC/C,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;QAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC/F,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACrC,KAAK,EAAE,mBAAmB;YAC1B,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,0BAA0B,CAAC,CAAA;QACtF,MAAM,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAEzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAE,CAAC,OAGrC,CAAA;QACD,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;QAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;QACvF,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACrC,KAAK,EAAE,WAAW;YAClB,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;QAChE,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAA;QAC1E,MAAM,CAAC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,mBAAmB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAC9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QAC7C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5D,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;IAClF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,gEAAgE;QAChE,MAAM,gBAAgB,GAAG;;;;;;;;KAQxB,CAAA;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAE9C,qFAAqF;QACrF,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,UAAU,GAAG;YACjB,GAAG,KAAK;YACR,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE;gBAChC,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,EAAE,CAAA;gBACnC,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YACpC,CAAC;SACO,CAAA;QAEV,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QAC7C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;QAEtE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Integration tests: Database persistence (Story 44-10 AC4).
3
- *
4
- * Verifies that scenario_results rows are persisted correctly after each
5
- * validation node execution, using an in-memory DatabaseAdapter.
6
- */
7
- export {};
8
- //# sourceMappingURL=persistence.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/persistence.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}