@substrate-ai/factory 0.19.54

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 (885) hide show
  1. package/dist/__tests__/config.test.d.ts +11 -0
  2. package/dist/__tests__/config.test.d.ts.map +1 -0
  3. package/dist/__tests__/config.test.js +215 -0
  4. package/dist/__tests__/config.test.js.map +1 -0
  5. package/dist/__tests__/factory-run-command.test.d.ts +12 -0
  6. package/dist/__tests__/factory-run-command.test.d.ts.map +1 -0
  7. package/dist/__tests__/factory-run-command.test.js +454 -0
  8. package/dist/__tests__/factory-run-command.test.js.map +1 -0
  9. package/dist/__tests__/factory-validate-command.test.d.ts +15 -0
  10. package/dist/__tests__/factory-validate-command.test.d.ts.map +1 -0
  11. package/dist/__tests__/factory-validate-command.test.js +339 -0
  12. package/dist/__tests__/factory-validate-command.test.js.map +1 -0
  13. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +72 -0
  14. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +1 -0
  15. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +121 -0
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +1 -0
  17. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +28 -0
  18. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +1 -0
  19. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +55 -0
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +1 -0
  21. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +34 -0
  22. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +1 -0
  23. package/dist/__tests__/fixtures/manager-loop.dot.js +61 -0
  24. package/dist/__tests__/fixtures/manager-loop.dot.js.map +1 -0
  25. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +42 -0
  26. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +1 -0
  27. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +118 -0
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +1 -0
  29. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +35 -0
  30. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +1 -0
  31. package/dist/__tests__/fixtures/subgraph-parent.dot.js +69 -0
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +1 -0
  33. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +19 -0
  34. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +1 -0
  35. package/dist/__tests__/integration/advanced-graph-events.test.js +288 -0
  36. package/dist/__tests__/integration/advanced-graph-events.test.js.map +1 -0
  37. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +10 -0
  38. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +1 -0
  39. package/dist/__tests__/integration/checkpoint-resume.test.js +125 -0
  40. package/dist/__tests__/integration/checkpoint-resume.test.js.map +1 -0
  41. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +10 -0
  42. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +1 -0
  43. package/dist/__tests__/integration/conditional-pipeline.test.js +106 -0
  44. package/dist/__tests__/integration/conditional-pipeline.test.js.map +1 -0
  45. package/dist/__tests__/integration/convergence-validation.test.d.ts +14 -0
  46. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +1 -0
  47. package/dist/__tests__/integration/convergence-validation.test.js +449 -0
  48. package/dist/__tests__/integration/convergence-validation.test.js.map +1 -0
  49. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +12 -0
  50. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +1 -0
  51. package/dist/__tests__/integration/epic44-coverage-gate.test.js +58 -0
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +1 -0
  53. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +11 -0
  54. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +1 -0
  55. package/dist/__tests__/integration/epic45-coverage-gate.test.js +64 -0
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +1 -0
  57. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +2 -0
  58. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +1 -0
  59. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +285 -0
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +1 -0
  61. package/dist/__tests__/integration/events.test.d.ts +8 -0
  62. package/dist/__tests__/integration/events.test.d.ts.map +1 -0
  63. package/dist/__tests__/integration/events.test.js +194 -0
  64. package/dist/__tests__/integration/events.test.js.map +1 -0
  65. package/dist/__tests__/integration/graphs.d.ts +59 -0
  66. package/dist/__tests__/integration/graphs.d.ts.map +1 -0
  67. package/dist/__tests__/integration/graphs.js +164 -0
  68. package/dist/__tests__/integration/graphs.js.map +1 -0
  69. package/dist/__tests__/integration/helpers.d.ts +127 -0
  70. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  71. package/dist/__tests__/integration/helpers.js +167 -0
  72. package/dist/__tests__/integration/helpers.js.map +1 -0
  73. package/dist/__tests__/integration/integrity.test.d.ts +8 -0
  74. package/dist/__tests__/integration/integrity.test.d.ts.map +1 -0
  75. package/dist/__tests__/integration/integrity.test.js +198 -0
  76. package/dist/__tests__/integration/integrity.test.js.map +1 -0
  77. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +21 -0
  78. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +1 -0
  79. package/dist/__tests__/integration/llm-edge-routing.test.js +341 -0
  80. package/dist/__tests__/integration/llm-edge-routing.test.js.map +1 -0
  81. package/dist/__tests__/integration/manager-loop.test.d.ts +24 -0
  82. package/dist/__tests__/integration/manager-loop.test.d.ts.map +1 -0
  83. package/dist/__tests__/integration/manager-loop.test.js +276 -0
  84. package/dist/__tests__/integration/manager-loop.test.js.map +1 -0
  85. package/dist/__tests__/integration/multi-type-graph.test.d.ts +10 -0
  86. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +1 -0
  87. package/dist/__tests__/integration/multi-type-graph.test.js +100 -0
  88. package/dist/__tests__/integration/multi-type-graph.test.js.map +1 -0
  89. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +22 -0
  90. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +1 -0
  91. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +515 -0
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +1 -0
  93. package/dist/__tests__/integration/persistence.test.d.ts +8 -0
  94. package/dist/__tests__/integration/persistence.test.d.ts.map +1 -0
  95. package/dist/__tests__/integration/persistence.test.js +129 -0
  96. package/dist/__tests__/integration/persistence.test.js.map +1 -0
  97. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +16 -0
  98. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +1 -0
  99. package/dist/__tests__/integration/pipeline-templates-integration.test.js +171 -0
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +1 -0
  101. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +11 -0
  102. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +1 -0
  103. package/dist/__tests__/integration/scenario-pipeline.test.js +243 -0
  104. package/dist/__tests__/integration/scenario-pipeline.test.js.map +1 -0
  105. package/dist/__tests__/integration/stylesheet-application.test.d.ts +12 -0
  106. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +1 -0
  107. package/dist/__tests__/integration/stylesheet-application.test.js +119 -0
  108. package/dist/__tests__/integration/stylesheet-application.test.js.map +1 -0
  109. package/dist/__tests__/integration/subgraph-execution.test.d.ts +24 -0
  110. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +1 -0
  111. package/dist/__tests__/integration/subgraph-execution.test.js +291 -0
  112. package/dist/__tests__/integration/subgraph-execution.test.js.map +1 -0
  113. package/dist/__tests__/integration/validation-errors.test.d.ts +8 -0
  114. package/dist/__tests__/integration/validation-errors.test.d.ts.map +1 -0
  115. package/dist/__tests__/integration/validation-errors.test.js +150 -0
  116. package/dist/__tests__/integration/validation-errors.test.js.map +1 -0
  117. package/dist/agent/__tests__/loop-detection.test.d.ts +2 -0
  118. package/dist/agent/__tests__/loop-detection.test.d.ts.map +1 -0
  119. package/dist/agent/__tests__/loop-detection.test.js +236 -0
  120. package/dist/agent/__tests__/loop-detection.test.js.map +1 -0
  121. package/dist/agent/__tests__/loop.test.d.ts +2 -0
  122. package/dist/agent/__tests__/loop.test.d.ts.map +1 -0
  123. package/dist/agent/__tests__/loop.test.js +868 -0
  124. package/dist/agent/__tests__/loop.test.js.map +1 -0
  125. package/dist/agent/__tests__/truncation.test.d.ts +2 -0
  126. package/dist/agent/__tests__/truncation.test.d.ts.map +1 -0
  127. package/dist/agent/__tests__/truncation.test.js +276 -0
  128. package/dist/agent/__tests__/truncation.test.js.map +1 -0
  129. package/dist/agent/index.d.ts +11 -0
  130. package/dist/agent/index.d.ts.map +1 -0
  131. package/dist/agent/index.js +13 -0
  132. package/dist/agent/index.js.map +1 -0
  133. package/dist/agent/loop-detection.d.ts +21 -0
  134. package/dist/agent/loop-detection.d.ts.map +1 -0
  135. package/dist/agent/loop-detection.js +61 -0
  136. package/dist/agent/loop-detection.js.map +1 -0
  137. package/dist/agent/loop.d.ts +88 -0
  138. package/dist/agent/loop.d.ts.map +1 -0
  139. package/dist/agent/loop.js +411 -0
  140. package/dist/agent/loop.js.map +1 -0
  141. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +6 -0
  142. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +1 -0
  143. package/dist/agent/tools/__tests__/anthropic-tools.test.js +49 -0
  144. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +1 -0
  145. package/dist/agent/tools/__tests__/environment.test.d.ts +6 -0
  146. package/dist/agent/tools/__tests__/environment.test.d.ts.map +1 -0
  147. package/dist/agent/tools/__tests__/environment.test.js +33 -0
  148. package/dist/agent/tools/__tests__/environment.test.js.map +1 -0
  149. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +6 -0
  150. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +1 -0
  151. package/dist/agent/tools/__tests__/gemini-tools.test.js +98 -0
  152. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +1 -0
  153. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +6 -0
  154. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +1 -0
  155. package/dist/agent/tools/__tests__/openai-tools.test.js +53 -0
  156. package/dist/agent/tools/__tests__/openai-tools.test.js.map +1 -0
  157. package/dist/agent/tools/__tests__/patch.test.d.ts +6 -0
  158. package/dist/agent/tools/__tests__/patch.test.d.ts.map +1 -0
  159. package/dist/agent/tools/__tests__/patch.test.js +116 -0
  160. package/dist/agent/tools/__tests__/patch.test.js.map +1 -0
  161. package/dist/agent/tools/__tests__/profiles.test.d.ts +6 -0
  162. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +1 -0
  163. package/dist/agent/tools/__tests__/profiles.test.js +125 -0
  164. package/dist/agent/tools/__tests__/profiles.test.js.map +1 -0
  165. package/dist/agent/tools/__tests__/registry.test.d.ts +6 -0
  166. package/dist/agent/tools/__tests__/registry.test.d.ts.map +1 -0
  167. package/dist/agent/tools/__tests__/registry.test.js +94 -0
  168. package/dist/agent/tools/__tests__/registry.test.js.map +1 -0
  169. package/dist/agent/tools/__tests__/shared.test.d.ts +6 -0
  170. package/dist/agent/tools/__tests__/shared.test.d.ts.map +1 -0
  171. package/dist/agent/tools/__tests__/shared.test.js +131 -0
  172. package/dist/agent/tools/__tests__/shared.test.js.map +1 -0
  173. package/dist/agent/tools/anthropic-tools.d.ts +15 -0
  174. package/dist/agent/tools/anthropic-tools.d.ts.map +1 -0
  175. package/dist/agent/tools/anthropic-tools.js +45 -0
  176. package/dist/agent/tools/anthropic-tools.js.map +1 -0
  177. package/dist/agent/tools/environment.d.ts +11 -0
  178. package/dist/agent/tools/environment.d.ts.map +1 -0
  179. package/dist/agent/tools/environment.js +35 -0
  180. package/dist/agent/tools/environment.js.map +1 -0
  181. package/dist/agent/tools/gemini-tools.d.ts +29 -0
  182. package/dist/agent/tools/gemini-tools.d.ts.map +1 -0
  183. package/dist/agent/tools/gemini-tools.js +112 -0
  184. package/dist/agent/tools/gemini-tools.js.map +1 -0
  185. package/dist/agent/tools/index.d.ts +13 -0
  186. package/dist/agent/tools/index.d.ts.map +1 -0
  187. package/dist/agent/tools/index.js +13 -0
  188. package/dist/agent/tools/index.js.map +1 -0
  189. package/dist/agent/tools/openai-tools.d.ts +18 -0
  190. package/dist/agent/tools/openai-tools.d.ts.map +1 -0
  191. package/dist/agent/tools/openai-tools.js +208 -0
  192. package/dist/agent/tools/openai-tools.js.map +1 -0
  193. package/dist/agent/tools/profiles.d.ts +66 -0
  194. package/dist/agent/tools/profiles.d.ts.map +1 -0
  195. package/dist/agent/tools/profiles.js +121 -0
  196. package/dist/agent/tools/profiles.js.map +1 -0
  197. package/dist/agent/tools/registry.d.ts +16 -0
  198. package/dist/agent/tools/registry.d.ts.map +1 -0
  199. package/dist/agent/tools/registry.js +55 -0
  200. package/dist/agent/tools/registry.js.map +1 -0
  201. package/dist/agent/tools/shared.d.ts +10 -0
  202. package/dist/agent/tools/shared.d.ts.map +1 -0
  203. package/dist/agent/tools/shared.js +207 -0
  204. package/dist/agent/tools/shared.js.map +1 -0
  205. package/dist/agent/tools/types.d.ts +55 -0
  206. package/dist/agent/tools/types.d.ts.map +1 -0
  207. package/dist/agent/tools/types.js +14 -0
  208. package/dist/agent/tools/types.js.map +1 -0
  209. package/dist/agent/truncation.d.ts +29 -0
  210. package/dist/agent/truncation.d.ts.map +1 -0
  211. package/dist/agent/truncation.js +76 -0
  212. package/dist/agent/truncation.js.map +1 -0
  213. package/dist/agent/types.d.ts +91 -0
  214. package/dist/agent/types.d.ts.map +1 -0
  215. package/dist/agent/types.js +45 -0
  216. package/dist/agent/types.js.map +1 -0
  217. package/dist/backend/__tests__/direct-backend.test.d.ts +14 -0
  218. package/dist/backend/__tests__/direct-backend.test.d.ts.map +1 -0
  219. package/dist/backend/__tests__/direct-backend.test.js +393 -0
  220. package/dist/backend/__tests__/direct-backend.test.js.map +1 -0
  221. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +7 -0
  222. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +1 -0
  223. package/dist/backend/__tests__/direct-bootstrap.test.js +177 -0
  224. package/dist/backend/__tests__/direct-bootstrap.test.js.map +1 -0
  225. package/dist/backend/__tests__/mock-backend.test.d.ts +7 -0
  226. package/dist/backend/__tests__/mock-backend.test.d.ts.map +1 -0
  227. package/dist/backend/__tests__/mock-backend.test.js +273 -0
  228. package/dist/backend/__tests__/mock-backend.test.js.map +1 -0
  229. package/dist/backend/__tests__/parity.test.d.ts +17 -0
  230. package/dist/backend/__tests__/parity.test.d.ts.map +1 -0
  231. package/dist/backend/__tests__/parity.test.js +411 -0
  232. package/dist/backend/__tests__/parity.test.js.map +1 -0
  233. package/dist/backend/direct-backend.d.ts +27 -0
  234. package/dist/backend/direct-backend.d.ts.map +1 -0
  235. package/dist/backend/direct-backend.js +76 -0
  236. package/dist/backend/direct-backend.js.map +1 -0
  237. package/dist/backend/direct-bootstrap.d.ts +29 -0
  238. package/dist/backend/direct-bootstrap.d.ts.map +1 -0
  239. package/dist/backend/direct-bootstrap.js +109 -0
  240. package/dist/backend/direct-bootstrap.js.map +1 -0
  241. package/dist/backend/index.d.ts +11 -0
  242. package/dist/backend/index.d.ts.map +1 -0
  243. package/dist/backend/index.js +8 -0
  244. package/dist/backend/index.js.map +1 -0
  245. package/dist/backend/mock-backend.d.ts +49 -0
  246. package/dist/backend/mock-backend.d.ts.map +1 -0
  247. package/dist/backend/mock-backend.js +87 -0
  248. package/dist/backend/mock-backend.js.map +1 -0
  249. package/dist/backend/types.d.ts +74 -0
  250. package/dist/backend/types.d.ts.map +1 -0
  251. package/dist/backend/types.js +12 -0
  252. package/dist/backend/types.js.map +1 -0
  253. package/dist/config.d.ts +196 -0
  254. package/dist/config.d.ts.map +1 -0
  255. package/dist/config.js +140 -0
  256. package/dist/config.js.map +1 -0
  257. package/dist/context/__tests__/auto-summarizer.test.d.ts +14 -0
  258. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +1 -0
  259. package/dist/context/__tests__/auto-summarizer.test.js +189 -0
  260. package/dist/context/__tests__/auto-summarizer.test.js.map +1 -0
  261. package/dist/context/__tests__/context-cli-command.test.d.ts +7 -0
  262. package/dist/context/__tests__/context-cli-command.test.d.ts.map +1 -0
  263. package/dist/context/__tests__/context-cli-command.test.js +331 -0
  264. package/dist/context/__tests__/context-cli-command.test.js.map +1 -0
  265. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +2 -0
  266. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +1 -0
  267. package/dist/context/__tests__/pyramid-summary-integration.test.js +533 -0
  268. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +1 -0
  269. package/dist/context/__tests__/summarizer.test.d.ts +2 -0
  270. package/dist/context/__tests__/summarizer.test.d.ts.map +1 -0
  271. package/dist/context/__tests__/summarizer.test.js +189 -0
  272. package/dist/context/__tests__/summarizer.test.js.map +1 -0
  273. package/dist/context/__tests__/summary-cache.test.d.ts +2 -0
  274. package/dist/context/__tests__/summary-cache.test.d.ts.map +1 -0
  275. package/dist/context/__tests__/summary-cache.test.js +214 -0
  276. package/dist/context/__tests__/summary-cache.test.js.map +1 -0
  277. package/dist/context/__tests__/summary-metrics.test.d.ts +2 -0
  278. package/dist/context/__tests__/summary-metrics.test.d.ts.map +1 -0
  279. package/dist/context/__tests__/summary-metrics.test.js +172 -0
  280. package/dist/context/__tests__/summary-metrics.test.js.map +1 -0
  281. package/dist/context/__tests__/summary-types.test.d.ts +2 -0
  282. package/dist/context/__tests__/summary-types.test.d.ts.map +1 -0
  283. package/dist/context/__tests__/summary-types.test.js +130 -0
  284. package/dist/context/__tests__/summary-types.test.js.map +1 -0
  285. package/dist/context/auto-summarizer.d.ts +120 -0
  286. package/dist/context/auto-summarizer.d.ts.map +1 -0
  287. package/dist/context/auto-summarizer.js +91 -0
  288. package/dist/context/auto-summarizer.js.map +1 -0
  289. package/dist/context/cli-command.d.ts +109 -0
  290. package/dist/context/cli-command.d.ts.map +1 -0
  291. package/dist/context/cli-command.js +382 -0
  292. package/dist/context/cli-command.js.map +1 -0
  293. package/dist/context/index.d.ts +8 -0
  294. package/dist/context/index.d.ts.map +1 -0
  295. package/dist/context/index.js +8 -0
  296. package/dist/context/index.js.map +1 -0
  297. package/dist/context/summarizer.d.ts +12 -0
  298. package/dist/context/summarizer.d.ts.map +1 -0
  299. package/dist/context/summarizer.js +105 -0
  300. package/dist/context/summarizer.js.map +1 -0
  301. package/dist/context/summary-cache.d.ts +41 -0
  302. package/dist/context/summary-cache.d.ts.map +1 -0
  303. package/dist/context/summary-cache.js +80 -0
  304. package/dist/context/summary-cache.js.map +1 -0
  305. package/dist/context/summary-engine.d.ts +46 -0
  306. package/dist/context/summary-engine.d.ts.map +1 -0
  307. package/dist/context/summary-engine.js +2 -0
  308. package/dist/context/summary-engine.js.map +1 -0
  309. package/dist/context/summary-metrics.d.ts +75 -0
  310. package/dist/context/summary-metrics.d.ts.map +1 -0
  311. package/dist/context/summary-metrics.js +160 -0
  312. package/dist/context/summary-metrics.js.map +1 -0
  313. package/dist/context/summary-types.d.ts +103 -0
  314. package/dist/context/summary-types.d.ts.map +1 -0
  315. package/dist/context/summary-types.js +39 -0
  316. package/dist/context/summary-types.js.map +1 -0
  317. package/dist/convergence/__tests__/budget.test.d.ts +6 -0
  318. package/dist/convergence/__tests__/budget.test.d.ts.map +1 -0
  319. package/dist/convergence/__tests__/budget.test.js +187 -0
  320. package/dist/convergence/__tests__/budget.test.js.map +1 -0
  321. package/dist/convergence/__tests__/controller.test.d.ts +9 -0
  322. package/dist/convergence/__tests__/controller.test.d.ts.map +1 -0
  323. package/dist/convergence/__tests__/controller.test.js +585 -0
  324. package/dist/convergence/__tests__/controller.test.js.map +1 -0
  325. package/dist/convergence/__tests__/dual-signal.test.d.ts +14 -0
  326. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +1 -0
  327. package/dist/convergence/__tests__/dual-signal.test.js +123 -0
  328. package/dist/convergence/__tests__/dual-signal.test.js.map +1 -0
  329. package/dist/convergence/__tests__/epic46-integration.test.d.ts +15 -0
  330. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +1 -0
  331. package/dist/convergence/__tests__/epic46-integration.test.js +522 -0
  332. package/dist/convergence/__tests__/epic46-integration.test.js.map +1 -0
  333. package/dist/convergence/__tests__/plateau.test.d.ts +6 -0
  334. package/dist/convergence/__tests__/plateau.test.d.ts.map +1 -0
  335. package/dist/convergence/__tests__/plateau.test.js +163 -0
  336. package/dist/convergence/__tests__/plateau.test.js.map +1 -0
  337. package/dist/convergence/__tests__/remediation.test.d.ts +11 -0
  338. package/dist/convergence/__tests__/remediation.test.d.ts.map +1 -0
  339. package/dist/convergence/__tests__/remediation.test.js +209 -0
  340. package/dist/convergence/__tests__/remediation.test.js.map +1 -0
  341. package/dist/convergence/__tests__/scenario-primary.test.d.ts +13 -0
  342. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +1 -0
  343. package/dist/convergence/__tests__/scenario-primary.test.js +183 -0
  344. package/dist/convergence/__tests__/scenario-primary.test.js.map +1 -0
  345. package/dist/convergence/budget.d.ts +181 -0
  346. package/dist/convergence/budget.d.ts.map +1 -0
  347. package/dist/convergence/budget.js +218 -0
  348. package/dist/convergence/budget.js.map +1 -0
  349. package/dist/convergence/controller.d.ts +133 -0
  350. package/dist/convergence/controller.d.ts.map +1 -0
  351. package/dist/convergence/controller.js +102 -0
  352. package/dist/convergence/controller.js.map +1 -0
  353. package/dist/convergence/dual-signal.d.ts +73 -0
  354. package/dist/convergence/dual-signal.d.ts.map +1 -0
  355. package/dist/convergence/dual-signal.js +78 -0
  356. package/dist/convergence/dual-signal.js.map +1 -0
  357. package/dist/convergence/index.d.ts +17 -0
  358. package/dist/convergence/index.d.ts.map +1 -0
  359. package/dist/convergence/index.js +11 -0
  360. package/dist/convergence/index.js.map +1 -0
  361. package/dist/convergence/plateau.d.ts +99 -0
  362. package/dist/convergence/plateau.d.ts.map +1 -0
  363. package/dist/convergence/plateau.js +83 -0
  364. package/dist/convergence/plateau.js.map +1 -0
  365. package/dist/convergence/remediation.d.ts +105 -0
  366. package/dist/convergence/remediation.d.ts.map +1 -0
  367. package/dist/convergence/remediation.js +117 -0
  368. package/dist/convergence/remediation.js.map +1 -0
  369. package/dist/events.d.ts +331 -0
  370. package/dist/events.d.ts.map +1 -0
  371. package/dist/events.js +13 -0
  372. package/dist/events.js.map +1 -0
  373. package/dist/factory-command.d.ts +40 -0
  374. package/dist/factory-command.d.ts.map +1 -0
  375. package/dist/factory-command.js +626 -0
  376. package/dist/factory-command.js.map +1 -0
  377. package/dist/factory-command.test.d.ts +8 -0
  378. package/dist/factory-command.test.d.ts.map +1 -0
  379. package/dist/factory-command.test.js +304 -0
  380. package/dist/factory-command.test.js.map +1 -0
  381. package/dist/graph/__tests__/attractor-compliance.test.d.ts +10 -0
  382. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +1 -0
  383. package/dist/graph/__tests__/attractor-compliance.test.js +766 -0
  384. package/dist/graph/__tests__/attractor-compliance.test.js.map +1 -0
  385. package/dist/graph/__tests__/checkpoint.test.d.ts +8 -0
  386. package/dist/graph/__tests__/checkpoint.test.d.ts.map +1 -0
  387. package/dist/graph/__tests__/checkpoint.test.js +329 -0
  388. package/dist/graph/__tests__/checkpoint.test.js.map +1 -0
  389. package/dist/graph/__tests__/condition-parser.test.d.ts +14 -0
  390. package/dist/graph/__tests__/condition-parser.test.d.ts.map +1 -0
  391. package/dist/graph/__tests__/condition-parser.test.js +406 -0
  392. package/dist/graph/__tests__/condition-parser.test.js.map +1 -0
  393. package/dist/graph/__tests__/context.test.d.ts +14 -0
  394. package/dist/graph/__tests__/context.test.d.ts.map +1 -0
  395. package/dist/graph/__tests__/context.test.js +276 -0
  396. package/dist/graph/__tests__/context.test.js.map +1 -0
  397. package/dist/graph/__tests__/edge-selector-events.test.d.ts +11 -0
  398. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +1 -0
  399. package/dist/graph/__tests__/edge-selector-events.test.js +184 -0
  400. package/dist/graph/__tests__/edge-selector-events.test.js.map +1 -0
  401. package/dist/graph/__tests__/edge-selector.test.d.ts +6 -0
  402. package/dist/graph/__tests__/edge-selector.test.d.ts.map +1 -0
  403. package/dist/graph/__tests__/edge-selector.test.js +452 -0
  404. package/dist/graph/__tests__/edge-selector.test.js.map +1 -0
  405. package/dist/graph/__tests__/executor-convergence.test.d.ts +12 -0
  406. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +1 -0
  407. package/dist/graph/__tests__/executor-convergence.test.js +432 -0
  408. package/dist/graph/__tests__/executor-convergence.test.js.map +1 -0
  409. package/dist/graph/__tests__/executor-fidelity.test.d.ts +13 -0
  410. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +1 -0
  411. package/dist/graph/__tests__/executor-fidelity.test.js +335 -0
  412. package/dist/graph/__tests__/executor-fidelity.test.js.map +1 -0
  413. package/dist/graph/__tests__/executor.test.d.ts +14 -0
  414. package/dist/graph/__tests__/executor.test.d.ts.map +1 -0
  415. package/dist/graph/__tests__/executor.test.js +901 -0
  416. package/dist/graph/__tests__/executor.test.js.map +1 -0
  417. package/dist/graph/__tests__/fidelity.test.d.ts +8 -0
  418. package/dist/graph/__tests__/fidelity.test.d.ts.map +1 -0
  419. package/dist/graph/__tests__/fidelity.test.js +135 -0
  420. package/dist/graph/__tests__/fidelity.test.js.map +1 -0
  421. package/dist/graph/__tests__/llm-evaluator.test.d.ts +7 -0
  422. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +1 -0
  423. package/dist/graph/__tests__/llm-evaluator.test.js +106 -0
  424. package/dist/graph/__tests__/llm-evaluator.test.js.map +1 -0
  425. package/dist/graph/__tests__/parser-chaining.test.d.ts +13 -0
  426. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +1 -0
  427. package/dist/graph/__tests__/parser-chaining.test.js +215 -0
  428. package/dist/graph/__tests__/parser-chaining.test.js.map +1 -0
  429. package/dist/graph/__tests__/parser.test.d.ts +22 -0
  430. package/dist/graph/__tests__/parser.test.d.ts.map +1 -0
  431. package/dist/graph/__tests__/parser.test.js +452 -0
  432. package/dist/graph/__tests__/parser.test.js.map +1 -0
  433. package/dist/graph/__tests__/run-state.test.d.ts +13 -0
  434. package/dist/graph/__tests__/run-state.test.d.ts.map +1 -0
  435. package/dist/graph/__tests__/run-state.test.js +189 -0
  436. package/dist/graph/__tests__/run-state.test.js.map +1 -0
  437. package/dist/graph/__tests__/transformer.test.d.ts +16 -0
  438. package/dist/graph/__tests__/transformer.test.d.ts.map +1 -0
  439. package/dist/graph/__tests__/transformer.test.js +350 -0
  440. package/dist/graph/__tests__/transformer.test.js.map +1 -0
  441. package/dist/graph/__tests__/validator-errors.test.d.ts +15 -0
  442. package/dist/graph/__tests__/validator-errors.test.d.ts.map +1 -0
  443. package/dist/graph/__tests__/validator-errors.test.js +572 -0
  444. package/dist/graph/__tests__/validator-errors.test.js.map +1 -0
  445. package/dist/graph/__tests__/validator-warnings.test.d.ts +15 -0
  446. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +1 -0
  447. package/dist/graph/__tests__/validator-warnings.test.js +363 -0
  448. package/dist/graph/__tests__/validator-warnings.test.js.map +1 -0
  449. package/dist/graph/checkpoint.d.ts +61 -0
  450. package/dist/graph/checkpoint.d.ts.map +1 -0
  451. package/dist/graph/checkpoint.js +80 -0
  452. package/dist/graph/checkpoint.js.map +1 -0
  453. package/dist/graph/condition-parser.d.ts +55 -0
  454. package/dist/graph/condition-parser.d.ts.map +1 -0
  455. package/dist/graph/condition-parser.js +213 -0
  456. package/dist/graph/condition-parser.js.map +1 -0
  457. package/dist/graph/context.d.ts +53 -0
  458. package/dist/graph/context.d.ts.map +1 -0
  459. package/dist/graph/context.js +90 -0
  460. package/dist/graph/context.js.map +1 -0
  461. package/dist/graph/edge-selector.d.ts +74 -0
  462. package/dist/graph/edge-selector.d.ts.map +1 -0
  463. package/dist/graph/edge-selector.js +178 -0
  464. package/dist/graph/edge-selector.js.map +1 -0
  465. package/dist/graph/executor.d.ts +133 -0
  466. package/dist/graph/executor.d.ts.map +1 -0
  467. package/dist/graph/executor.js +787 -0
  468. package/dist/graph/executor.js.map +1 -0
  469. package/dist/graph/fidelity.d.ts +27 -0
  470. package/dist/graph/fidelity.d.ts.map +1 -0
  471. package/dist/graph/fidelity.js +38 -0
  472. package/dist/graph/fidelity.js.map +1 -0
  473. package/dist/graph/index.d.ts +13 -0
  474. package/dist/graph/index.d.ts.map +1 -0
  475. package/dist/graph/index.js +9 -0
  476. package/dist/graph/index.js.map +1 -0
  477. package/dist/graph/llm-evaluator.d.ts +61 -0
  478. package/dist/graph/llm-evaluator.d.ts.map +1 -0
  479. package/dist/graph/llm-evaluator.js +106 -0
  480. package/dist/graph/llm-evaluator.js.map +1 -0
  481. package/dist/graph/parser.d.ts +28 -0
  482. package/dist/graph/parser.d.ts.map +1 -0
  483. package/dist/graph/parser.js +370 -0
  484. package/dist/graph/parser.js.map +1 -0
  485. package/dist/graph/rules/error-rules.d.ts +19 -0
  486. package/dist/graph/rules/error-rules.d.ts.map +1 -0
  487. package/dist/graph/rules/error-rules.js +264 -0
  488. package/dist/graph/rules/error-rules.js.map +1 -0
  489. package/dist/graph/rules/warning-rules.d.ts +7 -0
  490. package/dist/graph/rules/warning-rules.d.ts.map +1 -0
  491. package/dist/graph/rules/warning-rules.js +165 -0
  492. package/dist/graph/rules/warning-rules.js.map +1 -0
  493. package/dist/graph/run-state.d.ts +62 -0
  494. package/dist/graph/run-state.d.ts.map +1 -0
  495. package/dist/graph/run-state.js +79 -0
  496. package/dist/graph/run-state.js.map +1 -0
  497. package/dist/graph/transformer.d.ts +31 -0
  498. package/dist/graph/transformer.d.ts.map +1 -0
  499. package/dist/graph/transformer.js +64 -0
  500. package/dist/graph/transformer.js.map +1 -0
  501. package/dist/graph/types.d.ts +320 -0
  502. package/dist/graph/types.d.ts.map +1 -0
  503. package/dist/graph/types.js +6 -0
  504. package/dist/graph/types.js.map +1 -0
  505. package/dist/graph/validator.d.ts +16 -0
  506. package/dist/graph/validator.d.ts.map +1 -0
  507. package/dist/graph/validator.js +40 -0
  508. package/dist/graph/validator.js.map +1 -0
  509. package/dist/handlers/__tests__/codergen-handler.test.d.ts +14 -0
  510. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +1 -0
  511. package/dist/handlers/__tests__/codergen-handler.test.js +442 -0
  512. package/dist/handlers/__tests__/codergen-handler.test.js.map +1 -0
  513. package/dist/handlers/__tests__/fan-in.test.d.ts +14 -0
  514. package/dist/handlers/__tests__/fan-in.test.d.ts.map +1 -0
  515. package/dist/handlers/__tests__/fan-in.test.js +399 -0
  516. package/dist/handlers/__tests__/fan-in.test.js.map +1 -0
  517. package/dist/handlers/__tests__/join-policy.test.d.ts +9 -0
  518. package/dist/handlers/__tests__/join-policy.test.d.ts.map +1 -0
  519. package/dist/handlers/__tests__/join-policy.test.js +201 -0
  520. package/dist/handlers/__tests__/join-policy.test.js.map +1 -0
  521. package/dist/handlers/__tests__/manager-loop.test.d.ts +14 -0
  522. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +1 -0
  523. package/dist/handlers/__tests__/manager-loop.test.js +322 -0
  524. package/dist/handlers/__tests__/manager-loop.test.js.map +1 -0
  525. package/dist/handlers/__tests__/parallel-events.test.d.ts +12 -0
  526. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +1 -0
  527. package/dist/handlers/__tests__/parallel-events.test.js +252 -0
  528. package/dist/handlers/__tests__/parallel-events.test.js.map +1 -0
  529. package/dist/handlers/__tests__/parallel-handler.test.d.ts +14 -0
  530. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +1 -0
  531. package/dist/handlers/__tests__/parallel-handler.test.js +337 -0
  532. package/dist/handlers/__tests__/parallel-handler.test.js.map +1 -0
  533. package/dist/handlers/__tests__/parallel-join.test.d.ts +9 -0
  534. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +1 -0
  535. package/dist/handlers/__tests__/parallel-join.test.js +267 -0
  536. package/dist/handlers/__tests__/parallel-join.test.js.map +1 -0
  537. package/dist/handlers/__tests__/registry.test.d.ts +14 -0
  538. package/dist/handlers/__tests__/registry.test.d.ts.map +1 -0
  539. package/dist/handlers/__tests__/registry.test.js +315 -0
  540. package/dist/handlers/__tests__/registry.test.js.map +1 -0
  541. package/dist/handlers/__tests__/subgraph-events.test.d.ts +10 -0
  542. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +1 -0
  543. package/dist/handlers/__tests__/subgraph-events.test.js +189 -0
  544. package/dist/handlers/__tests__/subgraph-events.test.js.map +1 -0
  545. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +14 -0
  546. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +1 -0
  547. package/dist/handlers/__tests__/subgraph-inheritance.test.js +267 -0
  548. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +1 -0
  549. package/dist/handlers/__tests__/subgraph.test.d.ts +14 -0
  550. package/dist/handlers/__tests__/subgraph.test.d.ts.map +1 -0
  551. package/dist/handlers/__tests__/subgraph.test.js +369 -0
  552. package/dist/handlers/__tests__/subgraph.test.js.map +1 -0
  553. package/dist/handlers/__tests__/tool-handler.test.d.ts +11 -0
  554. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +1 -0
  555. package/dist/handlers/__tests__/tool-handler.test.js +184 -0
  556. package/dist/handlers/__tests__/tool-handler.test.js.map +1 -0
  557. package/dist/handlers/__tests__/tool-scenario.test.d.ts +12 -0
  558. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +1 -0
  559. package/dist/handlers/__tests__/tool-scenario.test.js +222 -0
  560. package/dist/handlers/__tests__/tool-scenario.test.js.map +1 -0
  561. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +11 -0
  562. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +1 -0
  563. package/dist/handlers/__tests__/wait-human-handler.test.js +251 -0
  564. package/dist/handlers/__tests__/wait-human-handler.test.js.map +1 -0
  565. package/dist/handlers/codergen-handler.d.ts +83 -0
  566. package/dist/handlers/codergen-handler.d.ts.map +1 -0
  567. package/dist/handlers/codergen-handler.js +152 -0
  568. package/dist/handlers/codergen-handler.js.map +1 -0
  569. package/dist/handlers/conditional.d.ts +15 -0
  570. package/dist/handlers/conditional.d.ts.map +1 -0
  571. package/dist/handlers/conditional.js +16 -0
  572. package/dist/handlers/conditional.js.map +1 -0
  573. package/dist/handlers/exit.d.ts +10 -0
  574. package/dist/handlers/exit.d.ts.map +1 -0
  575. package/dist/handlers/exit.js +11 -0
  576. package/dist/handlers/exit.js.map +1 -0
  577. package/dist/handlers/fan-in.d.ts +74 -0
  578. package/dist/handlers/fan-in.d.ts.map +1 -0
  579. package/dist/handlers/fan-in.js +191 -0
  580. package/dist/handlers/fan-in.js.map +1 -0
  581. package/dist/handlers/index.d.ts +29 -0
  582. package/dist/handlers/index.d.ts.map +1 -0
  583. package/dist/handlers/index.js +22 -0
  584. package/dist/handlers/index.js.map +1 -0
  585. package/dist/handlers/join-policy.d.ts +117 -0
  586. package/dist/handlers/join-policy.d.ts.map +1 -0
  587. package/dist/handlers/join-policy.js +129 -0
  588. package/dist/handlers/join-policy.js.map +1 -0
  589. package/dist/handlers/manager-loop.d.ts +54 -0
  590. package/dist/handlers/manager-loop.d.ts.map +1 -0
  591. package/dist/handlers/manager-loop.js +177 -0
  592. package/dist/handlers/manager-loop.js.map +1 -0
  593. package/dist/handlers/parallel.d.ts +31 -0
  594. package/dist/handlers/parallel.d.ts.map +1 -0
  595. package/dist/handlers/parallel.js +362 -0
  596. package/dist/handlers/parallel.js.map +1 -0
  597. package/dist/handlers/registry.d.ts +75 -0
  598. package/dist/handlers/registry.d.ts.map +1 -0
  599. package/dist/handlers/registry.js +132 -0
  600. package/dist/handlers/registry.js.map +1 -0
  601. package/dist/handlers/start.d.ts +10 -0
  602. package/dist/handlers/start.d.ts.map +1 -0
  603. package/dist/handlers/start.js +11 -0
  604. package/dist/handlers/start.js.map +1 -0
  605. package/dist/handlers/subgraph.d.ts +46 -0
  606. package/dist/handlers/subgraph.d.ts.map +1 -0
  607. package/dist/handlers/subgraph.js +178 -0
  608. package/dist/handlers/subgraph.js.map +1 -0
  609. package/dist/handlers/tool.d.ts +36 -0
  610. package/dist/handlers/tool.d.ts.map +1 -0
  611. package/dist/handlers/tool.js +99 -0
  612. package/dist/handlers/tool.js.map +1 -0
  613. package/dist/handlers/types.d.ts +98 -0
  614. package/dist/handlers/types.d.ts.map +1 -0
  615. package/dist/handlers/types.js +6 -0
  616. package/dist/handlers/types.js.map +1 -0
  617. package/dist/handlers/wait-human.d.ts +65 -0
  618. package/dist/handlers/wait-human.d.ts.map +1 -0
  619. package/dist/handlers/wait-human.js +124 -0
  620. package/dist/handlers/wait-human.js.map +1 -0
  621. package/dist/index.d.ts +24 -0
  622. package/dist/index.d.ts.map +1 -0
  623. package/dist/index.js +33 -0
  624. package/dist/index.js.map +1 -0
  625. package/dist/llm/__tests__/client.test.d.ts +2 -0
  626. package/dist/llm/__tests__/client.test.d.ts.map +1 -0
  627. package/dist/llm/__tests__/client.test.js +198 -0
  628. package/dist/llm/__tests__/client.test.js.map +1 -0
  629. package/dist/llm/__tests__/types.test.d.ts +2 -0
  630. package/dist/llm/__tests__/types.test.d.ts.map +1 -0
  631. package/dist/llm/__tests__/types.test.js +289 -0
  632. package/dist/llm/__tests__/types.test.js.map +1 -0
  633. package/dist/llm/client.d.ts +19 -0
  634. package/dist/llm/client.d.ts.map +1 -0
  635. package/dist/llm/client.js +50 -0
  636. package/dist/llm/client.js.map +1 -0
  637. package/dist/llm/index.d.ts +6 -0
  638. package/dist/llm/index.d.ts.map +1 -0
  639. package/dist/llm/index.js +6 -0
  640. package/dist/llm/index.js.map +1 -0
  641. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +2 -0
  642. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +1 -0
  643. package/dist/llm/middleware/__tests__/cost-tracking.test.js +73 -0
  644. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +1 -0
  645. package/dist/llm/middleware/__tests__/logging.test.d.ts +2 -0
  646. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +1 -0
  647. package/dist/llm/middleware/__tests__/logging.test.js +127 -0
  648. package/dist/llm/middleware/__tests__/logging.test.js.map +1 -0
  649. package/dist/llm/middleware/__tests__/retry.test.d.ts +2 -0
  650. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +1 -0
  651. package/dist/llm/middleware/__tests__/retry.test.js +126 -0
  652. package/dist/llm/middleware/__tests__/retry.test.js.map +1 -0
  653. package/dist/llm/middleware/cost-tracking.d.ts +8 -0
  654. package/dist/llm/middleware/cost-tracking.d.ts.map +1 -0
  655. package/dist/llm/middleware/cost-tracking.js +34 -0
  656. package/dist/llm/middleware/cost-tracking.js.map +1 -0
  657. package/dist/llm/middleware/index.d.ts +5 -0
  658. package/dist/llm/middleware/index.d.ts.map +1 -0
  659. package/dist/llm/middleware/index.js +6 -0
  660. package/dist/llm/middleware/index.js.map +1 -0
  661. package/dist/llm/middleware/logging.d.ts +6 -0
  662. package/dist/llm/middleware/logging.d.ts.map +1 -0
  663. package/dist/llm/middleware/logging.js +54 -0
  664. package/dist/llm/middleware/logging.js.map +1 -0
  665. package/dist/llm/middleware/retry.d.ts +14 -0
  666. package/dist/llm/middleware/retry.d.ts.map +1 -0
  667. package/dist/llm/middleware/retry.js +40 -0
  668. package/dist/llm/middleware/retry.js.map +1 -0
  669. package/dist/llm/middleware/types.d.ts +23 -0
  670. package/dist/llm/middleware/types.d.ts.map +1 -0
  671. package/dist/llm/middleware/types.js +24 -0
  672. package/dist/llm/middleware/types.js.map +1 -0
  673. package/dist/llm/model-registry.d.ts +14 -0
  674. package/dist/llm/model-registry.d.ts.map +1 -0
  675. package/dist/llm/model-registry.js +32 -0
  676. package/dist/llm/model-registry.js.map +1 -0
  677. package/dist/llm/providers/__tests__/anthropic.test.d.ts +2 -0
  678. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +1 -0
  679. package/dist/llm/providers/__tests__/anthropic.test.js +412 -0
  680. package/dist/llm/providers/__tests__/anthropic.test.js.map +1 -0
  681. package/dist/llm/providers/__tests__/gemini.test.d.ts +2 -0
  682. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +1 -0
  683. package/dist/llm/providers/__tests__/gemini.test.js +591 -0
  684. package/dist/llm/providers/__tests__/gemini.test.js.map +1 -0
  685. package/dist/llm/providers/__tests__/openai.test.d.ts +2 -0
  686. package/dist/llm/providers/__tests__/openai.test.d.ts.map +1 -0
  687. package/dist/llm/providers/__tests__/openai.test.js +546 -0
  688. package/dist/llm/providers/__tests__/openai.test.js.map +1 -0
  689. package/dist/llm/providers/anthropic.d.ts +25 -0
  690. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  691. package/dist/llm/providers/anthropic.js +315 -0
  692. package/dist/llm/providers/anthropic.js.map +1 -0
  693. package/dist/llm/providers/gemini.d.ts +28 -0
  694. package/dist/llm/providers/gemini.d.ts.map +1 -0
  695. package/dist/llm/providers/gemini.js +429 -0
  696. package/dist/llm/providers/gemini.js.map +1 -0
  697. package/dist/llm/providers/index.d.ts +7 -0
  698. package/dist/llm/providers/index.d.ts.map +1 -0
  699. package/dist/llm/providers/index.js +4 -0
  700. package/dist/llm/providers/index.js.map +1 -0
  701. package/dist/llm/providers/openai.d.ts +28 -0
  702. package/dist/llm/providers/openai.d.ts.map +1 -0
  703. package/dist/llm/providers/openai.js +426 -0
  704. package/dist/llm/providers/openai.js.map +1 -0
  705. package/dist/llm/types.d.ts +127 -0
  706. package/dist/llm/types.d.ts.map +1 -0
  707. package/dist/llm/types.js +21 -0
  708. package/dist/llm/types.js.map +1 -0
  709. package/dist/persistence/__tests__/factory-queries.test.d.ts +9 -0
  710. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +1 -0
  711. package/dist/persistence/__tests__/factory-queries.test.js +372 -0
  712. package/dist/persistence/__tests__/factory-queries.test.js.map +1 -0
  713. package/dist/persistence/__tests__/factory-schema.test.d.ts +6 -0
  714. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +1 -0
  715. package/dist/persistence/__tests__/factory-schema.test.js +105 -0
  716. package/dist/persistence/__tests__/factory-schema.test.js.map +1 -0
  717. package/dist/persistence/factory-queries.d.ts +204 -0
  718. package/dist/persistence/factory-queries.d.ts.map +1 -0
  719. package/dist/persistence/factory-queries.js +186 -0
  720. package/dist/persistence/factory-queries.js.map +1 -0
  721. package/dist/persistence/factory-schema.d.ts +16 -0
  722. package/dist/persistence/factory-schema.d.ts.map +1 -0
  723. package/dist/persistence/factory-schema.js +89 -0
  724. package/dist/persistence/factory-schema.js.map +1 -0
  725. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +7 -0
  726. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +1 -0
  727. package/dist/scenarios/__tests__/cli-command-list.test.js +237 -0
  728. package/dist/scenarios/__tests__/cli-command-list.test.js.map +1 -0
  729. package/dist/scenarios/__tests__/cli-command.test.d.ts +11 -0
  730. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +1 -0
  731. package/dist/scenarios/__tests__/cli-command.test.js +275 -0
  732. package/dist/scenarios/__tests__/cli-command.test.js.map +1 -0
  733. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +15 -0
  734. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +1 -0
  735. package/dist/scenarios/__tests__/integrity-pipeline.test.js +318 -0
  736. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +1 -0
  737. package/dist/scenarios/__tests__/runner-twins.test.d.ts +13 -0
  738. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +1 -0
  739. package/dist/scenarios/__tests__/runner-twins.test.js +205 -0
  740. package/dist/scenarios/__tests__/runner-twins.test.js.map +1 -0
  741. package/dist/scenarios/__tests__/scorer.test.d.ts +11 -0
  742. package/dist/scenarios/__tests__/scorer.test.d.ts.map +1 -0
  743. package/dist/scenarios/__tests__/scorer.test.js +225 -0
  744. package/dist/scenarios/__tests__/scorer.test.js.map +1 -0
  745. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +8 -0
  746. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +1 -0
  747. package/dist/scenarios/__tests__/scoring-integration.test.js +178 -0
  748. package/dist/scenarios/__tests__/scoring-integration.test.js.map +1 -0
  749. package/dist/scenarios/__tests__/store.test.d.ts +5 -0
  750. package/dist/scenarios/__tests__/store.test.d.ts.map +1 -0
  751. package/dist/scenarios/__tests__/store.test.js +169 -0
  752. package/dist/scenarios/__tests__/store.test.js.map +1 -0
  753. package/dist/scenarios/cli-command.d.ts +20 -0
  754. package/dist/scenarios/cli-command.d.ts.map +1 -0
  755. package/dist/scenarios/cli-command.js +66 -0
  756. package/dist/scenarios/cli-command.js.map +1 -0
  757. package/dist/scenarios/index.d.ts +11 -0
  758. package/dist/scenarios/index.d.ts.map +1 -0
  759. package/dist/scenarios/index.js +11 -0
  760. package/dist/scenarios/index.js.map +1 -0
  761. package/dist/scenarios/runner.d.ts +64 -0
  762. package/dist/scenarios/runner.d.ts.map +1 -0
  763. package/dist/scenarios/runner.js +205 -0
  764. package/dist/scenarios/runner.js.map +1 -0
  765. package/dist/scenarios/scorer.d.ts +69 -0
  766. package/dist/scenarios/scorer.d.ts.map +1 -0
  767. package/dist/scenarios/scorer.js +66 -0
  768. package/dist/scenarios/scorer.js.map +1 -0
  769. package/dist/scenarios/store.d.ts +33 -0
  770. package/dist/scenarios/store.d.ts.map +1 -0
  771. package/dist/scenarios/store.js +92 -0
  772. package/dist/scenarios/store.js.map +1 -0
  773. package/dist/scenarios/types.d.ts +40 -0
  774. package/dist/scenarios/types.d.ts.map +1 -0
  775. package/dist/scenarios/types.js +5 -0
  776. package/dist/scenarios/types.js.map +1 -0
  777. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +17 -0
  778. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +1 -0
  779. package/dist/stylesheet/__tests__/stylesheet.test.js +368 -0
  780. package/dist/stylesheet/__tests__/stylesheet.test.js.map +1 -0
  781. package/dist/stylesheet/parser.d.ts +44 -0
  782. package/dist/stylesheet/parser.d.ts.map +1 -0
  783. package/dist/stylesheet/parser.js +190 -0
  784. package/dist/stylesheet/parser.js.map +1 -0
  785. package/dist/stylesheet/resolver.d.ts +38 -0
  786. package/dist/stylesheet/resolver.d.ts.map +1 -0
  787. package/dist/stylesheet/resolver.js +96 -0
  788. package/dist/stylesheet/resolver.js.map +1 -0
  789. package/dist/templates/__tests__/templates.test.d.ts +7 -0
  790. package/dist/templates/__tests__/templates.test.d.ts.map +1 -0
  791. package/dist/templates/__tests__/templates.test.js +92 -0
  792. package/dist/templates/__tests__/templates.test.js.map +1 -0
  793. package/dist/templates/index.d.ts +38 -0
  794. package/dist/templates/index.d.ts.map +1 -0
  795. package/dist/templates/index.js +153 -0
  796. package/dist/templates/index.js.map +1 -0
  797. package/dist/twins/__tests__/docker-compose.test.d.ts +13 -0
  798. package/dist/twins/__tests__/docker-compose.test.d.ts.map +1 -0
  799. package/dist/twins/__tests__/docker-compose.test.js +247 -0
  800. package/dist/twins/__tests__/docker-compose.test.js.map +1 -0
  801. package/dist/twins/__tests__/health-monitor.test.d.ts +19 -0
  802. package/dist/twins/__tests__/health-monitor.test.d.ts.map +1 -0
  803. package/dist/twins/__tests__/health-monitor.test.js +301 -0
  804. package/dist/twins/__tests__/health-monitor.test.js.map +1 -0
  805. package/dist/twins/__tests__/integration/e2e.test.d.ts +18 -0
  806. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +1 -0
  807. package/dist/twins/__tests__/integration/e2e.test.js +146 -0
  808. package/dist/twins/__tests__/integration/e2e.test.js.map +1 -0
  809. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +16 -0
  810. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +1 -0
  811. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +183 -0
  812. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +1 -0
  813. package/dist/twins/__tests__/integration/helpers.d.ts +32 -0
  814. package/dist/twins/__tests__/integration/helpers.d.ts.map +1 -0
  815. package/dist/twins/__tests__/integration/helpers.js +67 -0
  816. package/dist/twins/__tests__/integration/helpers.js.map +1 -0
  817. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +14 -0
  818. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +1 -0
  819. package/dist/twins/__tests__/integration/lifecycle.test.js +127 -0
  820. package/dist/twins/__tests__/integration/lifecycle.test.js.map +1 -0
  821. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +14 -0
  822. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +1 -0
  823. package/dist/twins/__tests__/integration/persistence-integration.test.js +132 -0
  824. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +1 -0
  825. package/dist/twins/__tests__/persistence.test.d.ts +10 -0
  826. package/dist/twins/__tests__/persistence.test.d.ts.map +1 -0
  827. package/dist/twins/__tests__/persistence.test.js +300 -0
  828. package/dist/twins/__tests__/persistence.test.js.map +1 -0
  829. package/dist/twins/__tests__/registry.test.d.ts +7 -0
  830. package/dist/twins/__tests__/registry.test.d.ts.map +1 -0
  831. package/dist/twins/__tests__/registry.test.js +282 -0
  832. package/dist/twins/__tests__/registry.test.js.map +1 -0
  833. package/dist/twins/__tests__/run-state.test.d.ts +9 -0
  834. package/dist/twins/__tests__/run-state.test.d.ts.map +1 -0
  835. package/dist/twins/__tests__/run-state.test.js +112 -0
  836. package/dist/twins/__tests__/run-state.test.js.map +1 -0
  837. package/dist/twins/__tests__/templates-cli.test.d.ts +10 -0
  838. package/dist/twins/__tests__/templates-cli.test.d.ts.map +1 -0
  839. package/dist/twins/__tests__/templates-cli.test.js +187 -0
  840. package/dist/twins/__tests__/templates-cli.test.js.map +1 -0
  841. package/dist/twins/__tests__/templates.test.d.ts +7 -0
  842. package/dist/twins/__tests__/templates.test.d.ts.map +1 -0
  843. package/dist/twins/__tests__/templates.test.js +87 -0
  844. package/dist/twins/__tests__/templates.test.js.map +1 -0
  845. package/dist/twins/__tests__/twins-cli.test.d.ts +11 -0
  846. package/dist/twins/__tests__/twins-cli.test.d.ts.map +1 -0
  847. package/dist/twins/__tests__/twins-cli.test.js +365 -0
  848. package/dist/twins/__tests__/twins-cli.test.js.map +1 -0
  849. package/dist/twins/docker-compose.d.ts +48 -0
  850. package/dist/twins/docker-compose.d.ts.map +1 -0
  851. package/dist/twins/docker-compose.js +172 -0
  852. package/dist/twins/docker-compose.js.map +1 -0
  853. package/dist/twins/health-monitor.d.ts +36 -0
  854. package/dist/twins/health-monitor.d.ts.map +1 -0
  855. package/dist/twins/health-monitor.js +114 -0
  856. package/dist/twins/health-monitor.js.map +1 -0
  857. package/dist/twins/index.d.ts +22 -0
  858. package/dist/twins/index.d.ts.map +1 -0
  859. package/dist/twins/index.js +19 -0
  860. package/dist/twins/index.js.map +1 -0
  861. package/dist/twins/persistence.d.ts +100 -0
  862. package/dist/twins/persistence.d.ts.map +1 -0
  863. package/dist/twins/persistence.js +120 -0
  864. package/dist/twins/persistence.js.map +1 -0
  865. package/dist/twins/registry.d.ts +40 -0
  866. package/dist/twins/registry.d.ts.map +1 -0
  867. package/dist/twins/registry.js +175 -0
  868. package/dist/twins/registry.js.map +1 -0
  869. package/dist/twins/run-state.d.ts +47 -0
  870. package/dist/twins/run-state.d.ts.map +1 -0
  871. package/dist/twins/run-state.js +70 -0
  872. package/dist/twins/run-state.js.map +1 -0
  873. package/dist/twins/schema.d.ts +40 -0
  874. package/dist/twins/schema.d.ts.map +1 -0
  875. package/dist/twins/schema.js +46 -0
  876. package/dist/twins/schema.js.map +1 -0
  877. package/dist/twins/templates.d.ts +27 -0
  878. package/dist/twins/templates.d.ts.map +1 -0
  879. package/dist/twins/templates.js +63 -0
  880. package/dist/twins/templates.js.map +1 -0
  881. package/dist/twins/types.d.ts +55 -0
  882. package/dist/twins/types.d.ts.map +1 -0
  883. package/dist/twins/types.js +26 -0
  884. package/dist/twins/types.js.map +1 -0
  885. package/package.json +28 -0
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Condition expression parser and evaluator for the factory graph engine.
3
+ *
4
+ * Grammar (Attractor Spec §10, extended in story 44-5):
5
+ * condition ::= clause ('&&' clause)*
6
+ * clause ::= key op value
7
+ * key ::= [a-zA-Z_][a-zA-Z0-9_]*
8
+ * op ::= '=' | '!=' | '>=' | '<=' | '>' | '<'
9
+ * value ::= quoted_string | unquoted_token
10
+ * quoted_string ::= '"' [^"]* '"' | "'" [^']* "'"
11
+ * unquoted_token ::= [^\s&&]+
12
+ *
13
+ * Numeric operators (>=, <=, >, <) coerce context values to Number and compare.
14
+ * String operators (=, !=) retain existing case-sensitive string-equality semantics.
15
+ * Missing context keys resolve to "" for = / != and NaN for numeric operators.
16
+ * Only && conjunction is supported; || is out of scope.
17
+ *
18
+ * Story 42-6, extended in story 44-5.
19
+ */
20
+ // ---------------------------------------------------------------------------
21
+ // ConditionParseError
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Thrown by `parseCondition` when a condition string does not conform
25
+ * to the supported grammar.
26
+ */
27
+ export class ConditionParseError extends Error {
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = 'ConditionParseError';
31
+ }
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Internal helpers
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Strip surrounding single or double quotes from a value string.
38
+ * Returns the original string unchanged if it is not a quoted string.
39
+ */
40
+ function stripQuotes(value) {
41
+ if (value.length >= 2) {
42
+ if ((value.startsWith('"') && value.endsWith('"')) ||
43
+ (value.startsWith("'") && value.endsWith("'"))) {
44
+ return value.slice(1, -1);
45
+ }
46
+ }
47
+ return value;
48
+ }
49
+ /**
50
+ * Parse a single clause string into a `ConditionClause`.
51
+ * Throws `ConditionParseError` for invalid syntax.
52
+ *
53
+ * Operator matching order (two-character before one-character to avoid mis-parsing):
54
+ * >= <= != > < =
55
+ */
56
+ function parseClause(clauseStr) {
57
+ const trimmed = clauseStr.trim();
58
+ if (trimmed === '') {
59
+ throw new ConditionParseError(`Empty clause in condition; each clause must be in the form 'key=value' or 'key!=value'`);
60
+ }
61
+ // Detect double-equals (invalid operator) — check before any single-= matching
62
+ if (trimmed.includes('==')) {
63
+ throw new ConditionParseError(`Invalid operator '==' in clause '${trimmed}'; use '=' for equality comparison`);
64
+ }
65
+ // --- Two-character operators (must be checked BEFORE single-character) ---
66
+ // Try >= operator
67
+ const gteMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*>=\s*(.*)$/.exec(trimmed);
68
+ if (gteMatch) {
69
+ const key = gteMatch[1];
70
+ const rawValue = gteMatch[2].trim();
71
+ if (rawValue === '') {
72
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key>=value'`);
73
+ }
74
+ return { key, op: '>=', value: stripQuotes(rawValue) };
75
+ }
76
+ // Try <= operator
77
+ const lteMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*<=\s*(.*)$/.exec(trimmed);
78
+ if (lteMatch) {
79
+ const key = lteMatch[1];
80
+ const rawValue = lteMatch[2].trim();
81
+ if (rawValue === '') {
82
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key<=value'`);
83
+ }
84
+ return { key, op: '<=', value: stripQuotes(rawValue) };
85
+ }
86
+ // Try != operator (must precede = check to avoid false match on the '=' within '!=')
87
+ const neqMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*!=\s*(.*)$/.exec(trimmed);
88
+ if (neqMatch) {
89
+ const key = neqMatch[1];
90
+ const rawValue = neqMatch[2].trim();
91
+ if (rawValue === '') {
92
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key!=value'`);
93
+ }
94
+ return { key, op: '!=', value: stripQuotes(rawValue) };
95
+ }
96
+ // --- Single-character operators ---
97
+ // Try > operator (single, after >= has been excluded)
98
+ const gtMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*>\s*(.*)$/.exec(trimmed);
99
+ if (gtMatch) {
100
+ const key = gtMatch[1];
101
+ const rawValue = gtMatch[2].trim();
102
+ if (rawValue === '') {
103
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key>value'`);
104
+ }
105
+ return { key, op: '>', value: stripQuotes(rawValue) };
106
+ }
107
+ // Try < operator (single, after <= has been excluded)
108
+ const ltMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*<\s*(.*)$/.exec(trimmed);
109
+ if (ltMatch) {
110
+ const key = ltMatch[1];
111
+ const rawValue = ltMatch[2].trim();
112
+ if (rawValue === '') {
113
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key<value'`);
114
+ }
115
+ return { key, op: '<', value: stripQuotes(rawValue) };
116
+ }
117
+ // Try = operator (single equality, after all compound operators)
118
+ const eqMatch = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$/.exec(trimmed);
119
+ if (eqMatch) {
120
+ const key = eqMatch[1];
121
+ const rawValue = eqMatch[2].trim();
122
+ if (rawValue === '') {
123
+ throw new ConditionParseError(`Missing value in clause '${trimmed}'; expected 'key=value'`);
124
+ }
125
+ return { key, op: '=', value: stripQuotes(rawValue) };
126
+ }
127
+ throw new ConditionParseError(`Invalid clause syntax: '${trimmed}'; expected 'key=value', 'key!=value', or a numeric comparison`);
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Public API
131
+ // ---------------------------------------------------------------------------
132
+ /**
133
+ * Parse a condition expression string into a `ParsedCondition` (array of clauses).
134
+ *
135
+ * @param conditionStr - The condition string to parse (e.g. `"outcome=success && iteration!=0"`).
136
+ * @returns An array of `ConditionClause` objects representing the conjunction.
137
+ * @throws `ConditionParseError` if the string is empty, contains an empty clause,
138
+ * uses an invalid operator (`==`), or otherwise does not conform to the grammar.
139
+ */
140
+ export function parseCondition(conditionStr) {
141
+ if (!conditionStr || conditionStr.trim() === '') {
142
+ throw new ConditionParseError('Condition string must not be empty');
143
+ }
144
+ const clauseStrings = conditionStr.split('&&');
145
+ const clauses = [];
146
+ for (const clauseStr of clauseStrings) {
147
+ clauses.push(parseClause(clauseStr));
148
+ }
149
+ return clauses;
150
+ }
151
+ /**
152
+ * Evaluate a condition expression against a runtime context.
153
+ *
154
+ * String operators (=, !=): context values are coerced to strings via String().
155
+ * Context keys absent from context resolve to "" (empty string).
156
+ *
157
+ * Numeric operators (>=, <=, >, <): context values are coerced to numbers via Number().
158
+ * Absent keys or non-numeric values produce NaN, which causes the comparison to return false.
159
+ * The clause value is parsed via parseFloat().
160
+ *
161
+ * Returns `true` only if every clause in the conjunction passes.
162
+ *
163
+ * @param conditionStr - The condition string to evaluate.
164
+ * @param context - Key/value map of the current runtime context.
165
+ * @returns `true` if all clauses evaluate to true, `false` otherwise.
166
+ * @throws `ConditionParseError` if `conditionStr` has invalid syntax.
167
+ */
168
+ export function evaluateCondition(conditionStr, context) {
169
+ const clauses = parseCondition(conditionStr);
170
+ for (const clause of clauses) {
171
+ const rawValue = context[clause.key];
172
+ if (clause.op === '=' || clause.op === '!=') {
173
+ // String equality — coerce context value to string; absent keys → ""
174
+ const contextStr = rawValue !== undefined ? String(rawValue) : '';
175
+ if (clause.op === '=') {
176
+ if (contextStr !== clause.value)
177
+ return false;
178
+ }
179
+ else {
180
+ // '!='
181
+ if (contextStr === clause.value)
182
+ return false;
183
+ }
184
+ }
185
+ else {
186
+ // Numeric comparison — coerce context value to number; absent/non-numeric → NaN → false
187
+ const numContextValue = rawValue !== undefined ? Number(rawValue) : NaN;
188
+ const numClauseValue = parseFloat(clause.value);
189
+ if (Number.isNaN(numContextValue) || Number.isNaN(numClauseValue))
190
+ return false;
191
+ switch (clause.op) {
192
+ case '>=':
193
+ if (!(numContextValue >= numClauseValue))
194
+ return false;
195
+ break;
196
+ case '<=':
197
+ if (!(numContextValue <= numClauseValue))
198
+ return false;
199
+ break;
200
+ case '>':
201
+ if (!(numContextValue > numClauseValue))
202
+ return false;
203
+ break;
204
+ case '<':
205
+ if (!(numContextValue < numClauseValue))
206
+ return false;
207
+ break;
208
+ }
209
+ }
210
+ }
211
+ return true;
212
+ }
213
+ //# sourceMappingURL=condition-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-parser.js","sourceRoot":"","sources":["../../src/graph/condition-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * GraphContext — concrete key-value store for graph node execution state.
3
+ *
4
+ * Implements `IGraphContext` using a private `Map<string, unknown>` as the
5
+ * backing store. Each `clone()` call produces a fully independent instance
6
+ * so mutations never propagate between parent and child contexts.
7
+ *
8
+ * Story 42-8.
9
+ */
10
+ import type { IGraphContext } from './types.js';
11
+ export declare class GraphContext implements IGraphContext {
12
+ /** Internal backing store. Never exposed directly to callers. */
13
+ private readonly _store;
14
+ /**
15
+ * @param initial Optional seed values loaded into the store on construction.
16
+ */
17
+ constructor(initial?: Record<string, unknown>);
18
+ /** Return stored value, or `undefined` if the key is absent. */
19
+ get(key: string): unknown;
20
+ /** Store value; overwrites if the key already exists. */
21
+ set(key: string, value: unknown): void;
22
+ /**
23
+ * Return String-coerced value, or `defaultValue` (defaults to `""`) if the
24
+ * key is absent.
25
+ */
26
+ getString(key: string, defaultValue?: string): string;
27
+ /**
28
+ * Return Number-coerced value, or `defaultValue` (defaults to `0`) if the
29
+ * key is absent or the coerced result is NaN.
30
+ */
31
+ getNumber(key: string, defaultValue?: number): number;
32
+ /**
33
+ * Return Boolean-coerced value, or `defaultValue` (defaults to `false`) if
34
+ * the key is absent.
35
+ */
36
+ getBoolean(key: string, defaultValue?: boolean): boolean;
37
+ /**
38
+ * Merge all entries from `updates` into the store.
39
+ * Pre-existing keys not in `updates` are left unchanged.
40
+ */
41
+ applyUpdates(updates: Record<string, unknown>): void;
42
+ /**
43
+ * Return a shallow-copied plain object of all current key-value pairs.
44
+ * Modifying the returned object does not affect the internal store.
45
+ */
46
+ snapshot(): Record<string, unknown>;
47
+ /**
48
+ * Return a completely independent copy backed by its own `Map`.
49
+ * Mutations on the clone do not affect this instance, and vice-versa.
50
+ */
51
+ clone(): IGraphContext;
52
+ }
53
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/graph/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,qBAAa,YAAa,YAAW,aAAa;IAChD,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C;;OAEG;gBACS,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS7C,gEAAgE;IAChE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,yDAAyD;IACzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAItC;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAOrD;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAWrD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO;IAOxD;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMpD;;;OAGG;IACH,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC;;;OAGG;IACH,KAAK,IAAI,aAAa;CAGvB"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * GraphContext — concrete key-value store for graph node execution state.
3
+ *
4
+ * Implements `IGraphContext` using a private `Map<string, unknown>` as the
5
+ * backing store. Each `clone()` call produces a fully independent instance
6
+ * so mutations never propagate between parent and child contexts.
7
+ *
8
+ * Story 42-8.
9
+ */
10
+ export class GraphContext {
11
+ /** Internal backing store. Never exposed directly to callers. */
12
+ _store;
13
+ /**
14
+ * @param initial Optional seed values loaded into the store on construction.
15
+ */
16
+ constructor(initial) {
17
+ this._store = new Map();
18
+ if (initial) {
19
+ for (const [key, value] of Object.entries(initial)) {
20
+ this._store.set(key, value);
21
+ }
22
+ }
23
+ }
24
+ /** Return stored value, or `undefined` if the key is absent. */
25
+ get(key) {
26
+ return this._store.get(key);
27
+ }
28
+ /** Store value; overwrites if the key already exists. */
29
+ set(key, value) {
30
+ this._store.set(key, value);
31
+ }
32
+ /**
33
+ * Return String-coerced value, or `defaultValue` (defaults to `""`) if the
34
+ * key is absent.
35
+ */
36
+ getString(key, defaultValue) {
37
+ if (!this._store.has(key)) {
38
+ return defaultValue ?? '';
39
+ }
40
+ return String(this._store.get(key));
41
+ }
42
+ /**
43
+ * Return Number-coerced value, or `defaultValue` (defaults to `0`) if the
44
+ * key is absent or the coerced result is NaN.
45
+ */
46
+ getNumber(key, defaultValue) {
47
+ if (!this._store.has(key)) {
48
+ return defaultValue ?? 0;
49
+ }
50
+ const n = Number(this._store.get(key));
51
+ if (Number.isNaN(n)) {
52
+ return defaultValue ?? 0;
53
+ }
54
+ return n;
55
+ }
56
+ /**
57
+ * Return Boolean-coerced value, or `defaultValue` (defaults to `false`) if
58
+ * the key is absent.
59
+ */
60
+ getBoolean(key, defaultValue) {
61
+ if (!this._store.has(key)) {
62
+ return defaultValue ?? false;
63
+ }
64
+ return Boolean(this._store.get(key));
65
+ }
66
+ /**
67
+ * Merge all entries from `updates` into the store.
68
+ * Pre-existing keys not in `updates` are left unchanged.
69
+ */
70
+ applyUpdates(updates) {
71
+ for (const [key, value] of Object.entries(updates)) {
72
+ this._store.set(key, value);
73
+ }
74
+ }
75
+ /**
76
+ * Return a shallow-copied plain object of all current key-value pairs.
77
+ * Modifying the returned object does not affect the internal store.
78
+ */
79
+ snapshot() {
80
+ return Object.fromEntries(this._store);
81
+ }
82
+ /**
83
+ * Return a completely independent copy backed by its own `Map`.
84
+ * Mutations on the clone do not affect this instance, and vice-versa.
85
+ */
86
+ clone() {
87
+ return new GraphContext(this.snapshot());
88
+ }
89
+ }
90
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/graph/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,OAAO,YAAY;IACvB,iEAAiE;IAChD,MAAM,CAAsB;IAE7C;;OAEG;IACH,YAAY,OAAiC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAA;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,yDAAyD;IACzD,GAAG,CAAC,GAAW,EAAE,KAAc;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,GAAW,EAAE,YAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,YAAY,IAAI,EAAE,CAAA;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,GAAW,EAAE,YAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,YAAY,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACtC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,YAAY,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,GAAW,EAAE,YAAsB;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,YAAY,IAAI,KAAK,CAAA;QAC9B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACtC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAgC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Edge selection algorithm for the factory graph engine.
3
+ *
4
+ * Implements the 5-step Attractor spec priority order (Section 3.3):
5
+ * 1. Condition-matched edges (highest priority)
6
+ * 2. Preferred label match on unconditional edges
7
+ * 3. Suggested next IDs on unconditional edges
8
+ * 4. Highest weight among unconditional edges
9
+ * 5. Lexically-first target ID as tiebreak for Step 4
10
+ *
11
+ * Story 42-12.
12
+ */
13
+ import type { GraphNode, GraphEdge, Graph, IGraphContext, Outcome } from './types.js';
14
+ import type { TypedEventBus } from '@substrate-ai/core';
15
+ import type { FactoryEvents } from '../events.js';
16
+ /**
17
+ * Normalize an edge label for preferred-label matching.
18
+ *
19
+ * Lowercases and trims the input, then strips an accelerator prefix if present:
20
+ * - `[K] ` — bracket-enclosed single character followed by whitespace
21
+ * - `K) ` — single character followed by `)` and whitespace
22
+ * - `K - ` — single character followed by optional whitespace, `-`, optional whitespace
23
+ *
24
+ * Patterns are matched after lowercasing, so the regex uses only `[a-z]`.
25
+ *
26
+ * @param label - Raw edge label string.
27
+ * @returns Normalized label string.
28
+ */
29
+ export declare function normalizeLabel(label: string): string;
30
+ /**
31
+ * Return the "best" edge from a non-empty array:
32
+ * - highest `weight` (treating missing weight as 0)
33
+ * - lexically-first `toNode` as a tiebreak (ascending alphabetical)
34
+ *
35
+ * Does not mutate the input array.
36
+ *
37
+ * @param edges - Non-empty array of candidate edges (caller guarantees length ≥ 1).
38
+ * @returns The winning `GraphEdge`.
39
+ */
40
+ export declare function bestByWeightThenLexical(edges: GraphEdge[]): GraphEdge;
41
+ /**
42
+ * Optional configuration for `selectEdge`.
43
+ */
44
+ export interface SelectEdgeOptions {
45
+ /**
46
+ * Injectable LLM call function for testability.
47
+ * In production, defaults to calling `callLLM` from `@substrate-ai/core`
48
+ * using the node's `llmModel` / `llmProvider` attributes.
49
+ */
50
+ llmCall?: (prompt: string) => Promise<string>;
51
+ /** Optional event bus for emitting graph:llm-edge-evaluated events (story 50-9). */
52
+ eventBus?: TypedEventBus<FactoryEvents>;
53
+ /** Optional run identifier included in emitted event payloads (story 50-9). */
54
+ runId?: string;
55
+ }
56
+ /**
57
+ * Select the best outgoing edge from `node` according to the 5-step Attractor spec.
58
+ *
59
+ * Step 1: Condition-matched edges — highest weight, lexical tiebreak.
60
+ * Edges with `llm:` prefix conditions are evaluated via LLM call.
61
+ * Step 2: Preferred label match on unconditional edges — first match wins.
62
+ * Step 3: Suggested next IDs on unconditional edges — first suggestedNextId wins.
63
+ * Step 4: Highest weight among all unconditional edges.
64
+ * Step 5: Lexically-first target node ID as tiebreak for Step 4.
65
+ *
66
+ * @param node - The current graph node.
67
+ * @param outcome - The outcome returned by the node's handler.
68
+ * @param context - The current execution context (used for condition evaluation).
69
+ * @param graph - The full graph (source of edges).
70
+ * @param options - Optional injectable overrides (e.g. llmCall for testing).
71
+ * @returns The selected `GraphEdge`, or `null` if no outgoing edges exist.
72
+ */
73
+ export declare function selectEdge(node: GraphNode, outcome: Outcome, context: IGraphContext, graph: Graph, options?: SelectEdgeOptions): Promise<GraphEdge | null>;
74
+ //# sourceMappingURL=edge-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-selector.d.ts","sourceRoot":"","sources":["../../src/graph/edge-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAIrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAMjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CASrE;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,oFAAoF;IACpF,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IACvC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAsG3B"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Edge selection algorithm for the factory graph engine.
3
+ *
4
+ * Implements the 5-step Attractor spec priority order (Section 3.3):
5
+ * 1. Condition-matched edges (highest priority)
6
+ * 2. Preferred label match on unconditional edges
7
+ * 3. Suggested next IDs on unconditional edges
8
+ * 4. Highest weight among unconditional edges
9
+ * 5. Lexically-first target ID as tiebreak for Step 4
10
+ *
11
+ * Story 42-12.
12
+ */
13
+ import { evaluateCondition } from './condition-parser.js';
14
+ import { isLlmCondition, extractLlmQuestion, evaluateLlmCondition } from './llm-evaluator.js';
15
+ import { callLLM } from '@substrate-ai/core';
16
+ // ---------------------------------------------------------------------------
17
+ // normalizeLabel
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Normalize an edge label for preferred-label matching.
21
+ *
22
+ * Lowercases and trims the input, then strips an accelerator prefix if present:
23
+ * - `[K] ` — bracket-enclosed single character followed by whitespace
24
+ * - `K) ` — single character followed by `)` and whitespace
25
+ * - `K - ` — single character followed by optional whitespace, `-`, optional whitespace
26
+ *
27
+ * Patterns are matched after lowercasing, so the regex uses only `[a-z]`.
28
+ *
29
+ * @param label - Raw edge label string.
30
+ * @returns Normalized label string.
31
+ */
32
+ export function normalizeLabel(label) {
33
+ const s = label.toLowerCase().trim();
34
+ // Apply accelerator prefix strips in order; only one will match per label.
35
+ return s
36
+ .replace(/^[a-z]\)\s+/, '')
37
+ .replace(/^\[[a-z]\]\s+/, '')
38
+ .replace(/^[a-z]\s*-\s*/, '')
39
+ .trim();
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // bestByWeightThenLexical
43
+ // ---------------------------------------------------------------------------
44
+ /**
45
+ * Return the "best" edge from a non-empty array:
46
+ * - highest `weight` (treating missing weight as 0)
47
+ * - lexically-first `toNode` as a tiebreak (ascending alphabetical)
48
+ *
49
+ * Does not mutate the input array.
50
+ *
51
+ * @param edges - Non-empty array of candidate edges (caller guarantees length ≥ 1).
52
+ * @returns The winning `GraphEdge`.
53
+ */
54
+ export function bestByWeightThenLexical(edges) {
55
+ const sorted = [...edges].sort((a, b) => {
56
+ // Descending by weight
57
+ const weightDiff = (b.weight ?? 0) - (a.weight ?? 0);
58
+ if (weightDiff !== 0)
59
+ return weightDiff;
60
+ // Ascending by target node ID (lexical)
61
+ return a.toNode.localeCompare(b.toNode);
62
+ });
63
+ return sorted[0];
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // selectEdge
67
+ // ---------------------------------------------------------------------------
68
+ /**
69
+ * Select the best outgoing edge from `node` according to the 5-step Attractor spec.
70
+ *
71
+ * Step 1: Condition-matched edges — highest weight, lexical tiebreak.
72
+ * Edges with `llm:` prefix conditions are evaluated via LLM call.
73
+ * Step 2: Preferred label match on unconditional edges — first match wins.
74
+ * Step 3: Suggested next IDs on unconditional edges — first suggestedNextId wins.
75
+ * Step 4: Highest weight among all unconditional edges.
76
+ * Step 5: Lexically-first target node ID as tiebreak for Step 4.
77
+ *
78
+ * @param node - The current graph node.
79
+ * @param outcome - The outcome returned by the node's handler.
80
+ * @param context - The current execution context (used for condition evaluation).
81
+ * @param graph - The full graph (source of edges).
82
+ * @param options - Optional injectable overrides (e.g. llmCall for testing).
83
+ * @returns The selected `GraphEdge`, or `null` if no outgoing edges exist.
84
+ */
85
+ export async function selectEdge(node, outcome, context, graph, options) {
86
+ // Collect all edges originating from this node.
87
+ const outgoing = graph.edges.filter((e) => e.fromNode === node.id);
88
+ // AC5: No outgoing edges → return null immediately.
89
+ if (outgoing.length === 0)
90
+ return null;
91
+ // Build default llmCall binding using node attributes.
92
+ const defaultLlmCall = (prompt) => callLLM({
93
+ model: node.llmModel || 'claude-haiku-4-5',
94
+ provider: node.llmProvider || 'anthropic',
95
+ reasoningEffort: 'low',
96
+ prompt,
97
+ }).then((r) => r.text);
98
+ const llmCall = options?.llmCall ?? defaultLlmCall;
99
+ // Step 1: Condition-matched edges (AC1, AC7).
100
+ const conditionMatches = [];
101
+ const snapshot = context.snapshot();
102
+ for (const edge of outgoing) {
103
+ if (edge.condition && edge.condition.trim() !== '') {
104
+ if (isLlmCondition(edge.condition)) {
105
+ // LLM-evaluated condition — wrap llmCall to capture error messages for context
106
+ const question = extractLlmQuestion(edge.condition);
107
+ let evalError = null;
108
+ const trackingLlmCall = async (prompt) => {
109
+ try {
110
+ return await llmCall(prompt);
111
+ }
112
+ catch (err) {
113
+ evalError = err instanceof Error ? err.message : String(err);
114
+ throw err; // re-throw so evaluateLlmCondition catches it and returns false
115
+ }
116
+ };
117
+ const matched = await evaluateLlmCondition(question, snapshot, trackingLlmCall);
118
+ // Emit graph:llm-edge-evaluated for every LLM call attempt (story 50-9 AC3)
119
+ // matched will be false on error-fallback path, so this single emission covers all cases
120
+ options?.eventBus?.emit('graph:llm-edge-evaluated', {
121
+ runId: options.runId ?? 'unknown',
122
+ nodeId: node.id,
123
+ question,
124
+ result: matched,
125
+ });
126
+ // Increment LLM evaluation count regardless of success/failure (AC6)
127
+ context.set('llm.edge_eval_count', context.getNumber('llm.edge_eval_count', 0) + 1);
128
+ // On error, append message to llm.edge_eval_errors array (AC5)
129
+ if (evalError !== null) {
130
+ const existing = context.get('llm.edge_eval_errors');
131
+ const errors = Array.isArray(existing) ? existing : [];
132
+ errors.push(evalError);
133
+ context.set('llm.edge_eval_errors', errors);
134
+ }
135
+ if (matched) {
136
+ conditionMatches.push(edge);
137
+ }
138
+ }
139
+ else {
140
+ try {
141
+ if (evaluateCondition(edge.condition, snapshot)) {
142
+ conditionMatches.push(edge);
143
+ }
144
+ }
145
+ catch {
146
+ // Parse errors or evaluation errors → treat as non-matching.
147
+ }
148
+ }
149
+ }
150
+ }
151
+ if (conditionMatches.length > 0) {
152
+ return bestByWeightThenLexical(conditionMatches);
153
+ }
154
+ // Step 2: Preferred label match on unconditional edges (AC2).
155
+ if (outcome.preferredLabel && outcome.preferredLabel.trim() !== '') {
156
+ const normalizedPreferred = normalizeLabel(outcome.preferredLabel);
157
+ for (const edge of outgoing) {
158
+ if (!edge.condition && normalizeLabel(edge.label) === normalizedPreferred) {
159
+ return edge;
160
+ }
161
+ }
162
+ }
163
+ // Step 3: Suggested next IDs on unconditional edges (AC3).
164
+ if (outcome.suggestedNextIds && outcome.suggestedNextIds.length > 0) {
165
+ for (const id of outcome.suggestedNextIds) {
166
+ const match = outgoing.find((e) => !e.condition && e.toNode === id);
167
+ if (match !== undefined)
168
+ return match;
169
+ }
170
+ }
171
+ // Steps 4 & 5: Highest weight with lexical tiebreak among unconditional edges (AC4).
172
+ const unconditional = outgoing.filter((e) => !e.condition);
173
+ if (unconditional.length > 0) {
174
+ return bestByWeightThenLexical(unconditional);
175
+ }
176
+ return null;
177
+ }
178
+ //# sourceMappingURL=edge-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-selector.js","sourceRoot":"","sources":["../../src/graph/edge-selector.ts"],"names":[],"mappings":"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"}