@falai/agent 1.2.8 → 2.0.1

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 (522) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1191 -1014
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +509 -136
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
  126. package/dist/cjs/providers/AnthropicProvider.js +1 -1
  127. package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
  128. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  129. package/dist/cjs/providers/GeminiProvider.js +1 -1
  130. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  131. package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
  132. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  133. package/dist/cjs/providers/OpenAIProvider.js +1 -1
  134. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  135. package/dist/cjs/types/agent.d.ts +183 -54
  136. package/dist/cjs/types/agent.d.ts.map +1 -1
  137. package/dist/cjs/types/agent.js +0 -6
  138. package/dist/cjs/types/agent.js.map +1 -1
  139. package/dist/cjs/types/ai.d.ts +3 -3
  140. package/dist/cjs/types/ai.d.ts.map +1 -1
  141. package/dist/cjs/types/errors.d.ts +15 -0
  142. package/dist/cjs/types/errors.d.ts.map +1 -0
  143. package/dist/cjs/types/errors.js +22 -0
  144. package/dist/cjs/types/errors.js.map +1 -0
  145. package/dist/cjs/types/flow.d.ts +513 -0
  146. package/dist/cjs/types/flow.d.ts.map +1 -0
  147. package/dist/cjs/types/{route.js → flow.js} +2 -2
  148. package/dist/cjs/types/flow.js.map +1 -0
  149. package/dist/cjs/types/index.d.ts +7 -6
  150. package/dist/cjs/types/index.d.ts.map +1 -1
  151. package/dist/cjs/types/index.js +6 -2
  152. package/dist/cjs/types/index.js.map +1 -1
  153. package/dist/cjs/types/persistence.d.ts +11 -7
  154. package/dist/cjs/types/persistence.d.ts.map +1 -1
  155. package/dist/cjs/types/routing.d.ts +1 -1
  156. package/dist/cjs/types/routing.d.ts.map +1 -1
  157. package/dist/cjs/types/session.d.ts +24 -23
  158. package/dist/cjs/types/session.d.ts.map +1 -1
  159. package/dist/cjs/types/signals.d.ts +248 -0
  160. package/dist/cjs/types/signals.d.ts.map +1 -0
  161. package/dist/cjs/types/signals.js +11 -0
  162. package/dist/cjs/types/signals.js.map +1 -0
  163. package/dist/cjs/types/template.d.ts +2 -8
  164. package/dist/cjs/types/template.d.ts.map +1 -1
  165. package/dist/cjs/types/tool.d.ts +36 -29
  166. package/dist/cjs/types/tool.d.ts.map +1 -1
  167. package/dist/cjs/types/tool.js +1 -1
  168. package/dist/cjs/types/tool.js.map +1 -1
  169. package/dist/cjs/utils/condition.d.ts +7 -1
  170. package/dist/cjs/utils/condition.d.ts.map +1 -1
  171. package/dist/cjs/utils/condition.js.map +1 -1
  172. package/dist/cjs/utils/id.d.ts +13 -5
  173. package/dist/cjs/utils/id.d.ts.map +1 -1
  174. package/dist/cjs/utils/id.js +24 -10
  175. package/dist/cjs/utils/id.js.map +1 -1
  176. package/dist/cjs/utils/index.d.ts +2 -2
  177. package/dist/cjs/utils/index.d.ts.map +1 -1
  178. package/dist/cjs/utils/index.js +7 -3
  179. package/dist/cjs/utils/index.js.map +1 -1
  180. package/dist/cjs/utils/session.d.ts +44 -5
  181. package/dist/cjs/utils/session.d.ts.map +1 -1
  182. package/dist/cjs/utils/session.js +197 -38
  183. package/dist/cjs/utils/session.js.map +1 -1
  184. package/dist/constants/index.d.ts +0 -9
  185. package/dist/constants/index.d.ts.map +1 -1
  186. package/dist/constants/index.js +3 -9
  187. package/dist/constants/index.js.map +1 -1
  188. package/dist/core/Agent.d.ts +119 -153
  189. package/dist/core/Agent.d.ts.map +1 -1
  190. package/dist/core/Agent.js +472 -325
  191. package/dist/core/Agent.js.map +1 -1
  192. package/dist/core/AutoChainExecutor.d.ts +107 -0
  193. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  194. package/dist/core/AutoChainExecutor.js +293 -0
  195. package/dist/core/AutoChainExecutor.js.map +1 -0
  196. package/dist/core/BranchEvaluator.d.ts +54 -0
  197. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  198. package/dist/core/BranchEvaluator.js +126 -0
  199. package/dist/core/BranchEvaluator.js.map +1 -0
  200. package/dist/core/DirectiveBus.d.ts +88 -0
  201. package/dist/core/DirectiveBus.d.ts.map +1 -0
  202. package/dist/core/DirectiveBus.js +192 -0
  203. package/dist/core/DirectiveBus.js.map +1 -0
  204. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  205. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  206. package/dist/core/DirectiveChainTracker.js +117 -0
  207. package/dist/core/DirectiveChainTracker.js.map +1 -0
  208. package/dist/core/Flow.d.ts +186 -0
  209. package/dist/core/Flow.d.ts.map +1 -0
  210. package/dist/core/Flow.js +546 -0
  211. package/dist/core/Flow.js.map +1 -0
  212. package/dist/core/FlowRouter.d.ts +182 -0
  213. package/dist/core/FlowRouter.d.ts.map +1 -0
  214. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  215. package/dist/core/FlowRouter.js.map +1 -0
  216. package/dist/core/PersistenceManager.d.ts +2 -2
  217. package/dist/core/PersistenceManager.d.ts.map +1 -1
  218. package/dist/core/PersistenceManager.js +7 -7
  219. package/dist/core/PersistenceManager.js.map +1 -1
  220. package/dist/core/PromptComposer.d.ts +21 -8
  221. package/dist/core/PromptComposer.d.ts.map +1 -1
  222. package/dist/core/PromptComposer.js +183 -106
  223. package/dist/core/PromptComposer.js.map +1 -1
  224. package/dist/core/PromptSectionCache.d.ts +1 -1
  225. package/dist/core/PromptSectionCache.js +1 -1
  226. package/dist/core/ResponseEngine.d.ts +18 -8
  227. package/dist/core/ResponseEngine.d.ts.map +1 -1
  228. package/dist/core/ResponseEngine.js +38 -36
  229. package/dist/core/ResponseEngine.js.map +1 -1
  230. package/dist/core/ResponseModal.d.ts +73 -56
  231. package/dist/core/ResponseModal.d.ts.map +1 -1
  232. package/dist/core/ResponseModal.js +1193 -1016
  233. package/dist/core/ResponseModal.js.map +1 -1
  234. package/dist/core/ResponsePipeline.d.ts +124 -26
  235. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  236. package/dist/core/ResponsePipeline.js +509 -137
  237. package/dist/core/ResponsePipeline.js.map +1 -1
  238. package/dist/core/SignalEvaluator.d.ts +86 -0
  239. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  240. package/dist/core/SignalEvaluator.js +326 -0
  241. package/dist/core/SignalEvaluator.js.map +1 -0
  242. package/dist/core/SignalProcessor.d.ts +152 -0
  243. package/dist/core/SignalProcessor.d.ts.map +1 -0
  244. package/dist/core/SignalProcessor.js +555 -0
  245. package/dist/core/SignalProcessor.js.map +1 -0
  246. package/dist/core/Step.d.ts +43 -32
  247. package/dist/core/Step.d.ts.map +1 -1
  248. package/dist/core/Step.js +220 -126
  249. package/dist/core/Step.js.map +1 -1
  250. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  251. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  252. package/dist/core/StreamingToolExecutor.js.map +1 -1
  253. package/dist/core/ToolManager.d.ts +44 -13
  254. package/dist/core/ToolManager.d.ts.map +1 -1
  255. package/dist/core/ToolManager.js +174 -91
  256. package/dist/core/ToolManager.js.map +1 -1
  257. package/dist/core/createAgent.d.ts +35 -0
  258. package/dist/core/createAgent.d.ts.map +1 -0
  259. package/dist/core/createAgent.js +36 -0
  260. package/dist/core/createAgent.js.map +1 -0
  261. package/dist/core/flow-namespace.d.ts +49 -0
  262. package/dist/core/flow-namespace.d.ts.map +1 -0
  263. package/dist/core/flow-namespace.js +168 -0
  264. package/dist/core/flow-namespace.js.map +1 -0
  265. package/dist/index.d.ts +11 -14
  266. package/dist/index.d.ts.map +1 -1
  267. package/dist/index.js +9 -12
  268. package/dist/index.js.map +1 -1
  269. package/dist/providers/AnthropicProvider.d.ts +1 -1
  270. package/dist/providers/AnthropicProvider.js +1 -1
  271. package/dist/providers/GeminiProvider.d.ts +1 -1
  272. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  273. package/dist/providers/GeminiProvider.js +1 -1
  274. package/dist/providers/GeminiProvider.js.map +1 -1
  275. package/dist/providers/OpenAIProvider.d.ts +1 -1
  276. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  277. package/dist/providers/OpenAIProvider.js +1 -1
  278. package/dist/providers/OpenAIProvider.js.map +1 -1
  279. package/dist/types/agent.d.ts +183 -54
  280. package/dist/types/agent.d.ts.map +1 -1
  281. package/dist/types/agent.js +0 -6
  282. package/dist/types/agent.js.map +1 -1
  283. package/dist/types/ai.d.ts +3 -3
  284. package/dist/types/ai.d.ts.map +1 -1
  285. package/dist/types/errors.d.ts +15 -0
  286. package/dist/types/errors.d.ts.map +1 -0
  287. package/dist/types/errors.js +18 -0
  288. package/dist/types/errors.js.map +1 -0
  289. package/dist/types/flow.d.ts +513 -0
  290. package/dist/types/flow.d.ts.map +1 -0
  291. package/dist/types/flow.js +5 -0
  292. package/dist/types/flow.js.map +1 -0
  293. package/dist/types/index.d.ts +7 -6
  294. package/dist/types/index.d.ts.map +1 -1
  295. package/dist/types/index.js +4 -1
  296. package/dist/types/index.js.map +1 -1
  297. package/dist/types/persistence.d.ts +11 -7
  298. package/dist/types/persistence.d.ts.map +1 -1
  299. package/dist/types/routing.d.ts +1 -1
  300. package/dist/types/routing.d.ts.map +1 -1
  301. package/dist/types/session.d.ts +24 -23
  302. package/dist/types/session.d.ts.map +1 -1
  303. package/dist/types/signals.d.ts +248 -0
  304. package/dist/types/signals.d.ts.map +1 -0
  305. package/dist/types/signals.js +10 -0
  306. package/dist/types/signals.js.map +1 -0
  307. package/dist/types/template.d.ts +2 -8
  308. package/dist/types/template.d.ts.map +1 -1
  309. package/dist/types/tool.d.ts +36 -29
  310. package/dist/types/tool.d.ts.map +1 -1
  311. package/dist/types/tool.js +1 -1
  312. package/dist/types/tool.js.map +1 -1
  313. package/dist/utils/condition.d.ts +7 -1
  314. package/dist/utils/condition.d.ts.map +1 -1
  315. package/dist/utils/condition.js.map +1 -1
  316. package/dist/utils/id.d.ts +13 -5
  317. package/dist/utils/id.d.ts.map +1 -1
  318. package/dist/utils/id.js +22 -9
  319. package/dist/utils/id.js.map +1 -1
  320. package/dist/utils/index.d.ts +2 -2
  321. package/dist/utils/index.d.ts.map +1 -1
  322. package/dist/utils/index.js +2 -2
  323. package/dist/utils/index.js.map +1 -1
  324. package/dist/utils/session.d.ts +44 -5
  325. package/dist/utils/session.d.ts.map +1 -1
  326. package/dist/utils/session.js +193 -37
  327. package/dist/utils/session.js.map +1 -1
  328. package/docs/README.md +22 -200
  329. package/docs/concepts/architecture.md +281 -0
  330. package/docs/concepts/directives.md +400 -0
  331. package/docs/concepts/pipeline.md +399 -0
  332. package/docs/guides/branching.md +263 -0
  333. package/docs/guides/compaction.md +163 -0
  334. package/docs/guides/conditions.md +167 -0
  335. package/docs/guides/error-handling.md +176 -0
  336. package/docs/guides/flow-control.md +409 -0
  337. package/docs/guides/instructions.md +210 -0
  338. package/docs/guides/persistence.md +182 -0
  339. package/docs/guides/streaming.md +137 -0
  340. package/docs/migration/README.md +14 -0
  341. package/docs/migration/route-to-flow.md +561 -0
  342. package/docs/migration/v1-to-v2.md +909 -0
  343. package/docs/reference/adapters.md +481 -0
  344. package/docs/reference/branches.md +241 -0
  345. package/docs/reference/create-agent.md +186 -0
  346. package/docs/reference/directive.md +243 -0
  347. package/docs/reference/errors.md +122 -0
  348. package/docs/reference/flow.md +238 -0
  349. package/docs/reference/instruction.md +177 -0
  350. package/docs/reference/pre-directive.md +131 -0
  351. package/docs/reference/providers.md +227 -0
  352. package/docs/reference/signals.md +356 -0
  353. package/docs/reference/step.md +339 -0
  354. package/docs/reference/tool.md +269 -0
  355. package/docs/start/01-install.md +81 -0
  356. package/docs/start/02-first-agent.md +196 -0
  357. package/docs/start/03-collect-data.md +222 -0
  358. package/docs/start/04-add-tools.md +276 -0
  359. package/docs/start/05-go-to-production.md +216 -0
  360. package/examples/01-quickstart.ts +20 -0
  361. package/examples/02-data-extraction.ts +90 -0
  362. package/examples/03-tools.ts +136 -0
  363. package/examples/04-instructions.ts +100 -0
  364. package/examples/05-branching.ts +140 -0
  365. package/examples/06-flow-control.ts +103 -0
  366. package/examples/07-streaming.ts +69 -0
  367. package/examples/08-persistence.ts +98 -0
  368. package/examples/09-signals.ts +144 -0
  369. package/examples/tsconfig.json +30 -0
  370. package/package.json +2 -1
  371. package/src/adapters/MemoryAdapter.ts +3 -3
  372. package/src/adapters/MongoAdapter.ts +3 -3
  373. package/src/adapters/OpenSearchAdapter.ts +10 -8
  374. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  375. package/src/adapters/PrismaAdapter.ts +6 -6
  376. package/src/adapters/RedisAdapter.ts +3 -3
  377. package/src/adapters/SQLiteAdapter.ts +31 -12
  378. package/src/constants/index.ts +2 -10
  379. package/src/core/Agent.ts +585 -374
  380. package/src/core/AutoChainExecutor.ts +440 -0
  381. package/src/core/BranchEvaluator.ts +167 -0
  382. package/src/core/DirectiveBus.ts +248 -0
  383. package/src/core/DirectiveChainTracker.ts +144 -0
  384. package/src/core/Flow.ts +666 -0
  385. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  386. package/src/core/PersistenceManager.ts +8 -8
  387. package/src/core/PromptComposer.ts +209 -140
  388. package/src/core/PromptSectionCache.ts +1 -1
  389. package/src/core/ResponseEngine.ts +61 -46
  390. package/src/core/ResponseModal.ts +1453 -1240
  391. package/src/core/ResponsePipeline.ts +655 -175
  392. package/src/core/SignalEvaluator.ts +420 -0
  393. package/src/core/SignalProcessor.ts +723 -0
  394. package/src/core/Step.ts +279 -176
  395. package/src/core/StreamingToolExecutor.ts +4 -4
  396. package/src/core/ToolManager.ts +200 -97
  397. package/src/core/createAgent.ts +40 -0
  398. package/src/core/flow-namespace.ts +219 -0
  399. package/src/index.ts +42 -36
  400. package/src/providers/AnthropicProvider.ts +2 -2
  401. package/src/providers/GeminiProvider.ts +2 -2
  402. package/src/providers/OpenAIProvider.ts +2 -2
  403. package/src/types/agent.ts +182 -53
  404. package/src/types/ai.ts +3 -3
  405. package/src/types/errors.ts +18 -0
  406. package/src/types/flow.ts +590 -0
  407. package/src/types/index.ts +43 -16
  408. package/src/types/persistence.ts +12 -8
  409. package/src/types/routing.ts +1 -1
  410. package/src/types/session.ts +26 -23
  411. package/src/types/signals.ts +321 -0
  412. package/src/types/template.ts +3 -11
  413. package/src/types/tool.ts +50 -42
  414. package/src/utils/condition.ts +13 -4
  415. package/src/utils/id.ts +27 -9
  416. package/src/utils/index.ts +6 -2
  417. package/src/utils/session.ts +238 -42
  418. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  419. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  420. package/dist/cjs/core/BatchExecutor.js +0 -861
  421. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  422. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  423. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  424. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  425. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  426. package/dist/cjs/core/Route.d.ts +0 -180
  427. package/dist/cjs/core/Route.d.ts.map +0 -1
  428. package/dist/cjs/core/Route.js +0 -542
  429. package/dist/cjs/core/Route.js.map +0 -1
  430. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  431. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  432. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  433. package/dist/cjs/types/route.d.ts +0 -336
  434. package/dist/cjs/types/route.d.ts.map +0 -1
  435. package/dist/cjs/types/route.js.map +0 -1
  436. package/dist/core/BatchExecutor.d.ts +0 -359
  437. package/dist/core/BatchExecutor.d.ts.map +0 -1
  438. package/dist/core/BatchExecutor.js +0 -856
  439. package/dist/core/BatchExecutor.js.map +0 -1
  440. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  441. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  442. package/dist/core/BatchPromptBuilder.js +0 -219
  443. package/dist/core/BatchPromptBuilder.js.map +0 -1
  444. package/dist/core/Route.d.ts +0 -180
  445. package/dist/core/Route.d.ts.map +0 -1
  446. package/dist/core/Route.js +0 -538
  447. package/dist/core/Route.js.map +0 -1
  448. package/dist/core/RoutingEngine.d.ts +0 -185
  449. package/dist/core/RoutingEngine.d.ts.map +0 -1
  450. package/dist/core/RoutingEngine.js.map +0 -1
  451. package/dist/types/route.d.ts +0 -336
  452. package/dist/types/route.d.ts.map +0 -1
  453. package/dist/types/route.js +0 -5
  454. package/dist/types/route.js.map +0 -1
  455. package/docs/CONTRIBUTING.md +0 -521
  456. package/docs/api/README.md +0 -3299
  457. package/docs/api/overview.md +0 -1410
  458. package/docs/architecture/data-extraction-flow.md +0 -360
  459. package/docs/architecture/multi-step-execution.md +0 -277
  460. package/docs/core/agent/README.md +0 -938
  461. package/docs/core/agent/context-management.md +0 -796
  462. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  463. package/docs/core/agent/session-management.md +0 -693
  464. package/docs/core/ai-integration/prompt-composition.md +0 -355
  465. package/docs/core/ai-integration/providers.md +0 -515
  466. package/docs/core/ai-integration/response-processing.md +0 -433
  467. package/docs/core/conversation-flows/data-collection.md +0 -772
  468. package/docs/core/conversation-flows/route-dsl.md +0 -509
  469. package/docs/core/conversation-flows/routes.md +0 -249
  470. package/docs/core/conversation-flows/step-transitions.md +0 -731
  471. package/docs/core/conversation-flows/steps.md +0 -268
  472. package/docs/core/error-handling.md +0 -830
  473. package/docs/core/persistence/adapters.md +0 -255
  474. package/docs/core/persistence/session-storage.md +0 -656
  475. package/docs/core/routing/intelligent-routing.md +0 -470
  476. package/docs/core/tools/enhanced-tool.md +0 -186
  477. package/docs/core/tools/streaming-execution.md +0 -161
  478. package/docs/core/tools/tool-definition.md +0 -970
  479. package/docs/core/tools/tool-scoping.md +0 -819
  480. package/docs/guides/advanced-patterns/publishing.md +0 -186
  481. package/docs/guides/context-compaction.md +0 -96
  482. package/docs/guides/error-handling-patterns.md +0 -578
  483. package/docs/guides/getting-started/README.md +0 -795
  484. package/docs/guides/migration/README.md +0 -101
  485. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  486. package/docs/guides/migration/multi-step-execution.md +0 -393
  487. package/docs/guides/migration/response-modal-refactor.md +0 -518
  488. package/docs/guides/prompt-optimization.md +0 -164
  489. package/examples/advanced-patterns/context-compaction.ts +0 -223
  490. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  491. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  492. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  493. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  494. package/examples/ai-providers/anthropic-integration.ts +0 -388
  495. package/examples/ai-providers/openai-integration.ts +0 -228
  496. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  497. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  498. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  499. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  500. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  501. package/examples/conversation-flows/completion-transitions.ts +0 -318
  502. package/examples/core-concepts/basic-agent.ts +0 -503
  503. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  504. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  505. package/examples/core-concepts/session-management.ts +0 -494
  506. package/examples/integrations/database-integration.ts +0 -631
  507. package/examples/integrations/healthcare-integration.ts +0 -595
  508. package/examples/integrations/search-integration.ts +0 -530
  509. package/examples/integrations/server-session-management.ts +0 -307
  510. package/examples/persistence/custom-adapter.ts +0 -526
  511. package/examples/persistence/database-persistence.ts +0 -583
  512. package/examples/persistence/memory-sessions.ts +0 -495
  513. package/examples/persistence/prisma-schema.example.prisma +0 -74
  514. package/examples/persistence/redis-persistence.ts +0 -488
  515. package/examples/tools/basic-tools.ts +0 -765
  516. package/examples/tools/data-enrichment-tools.ts +0 -593
  517. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  518. package/examples/tools/streaming-tool-execution.ts +0 -283
  519. package/src/core/BatchExecutor.ts +0 -1187
  520. package/src/core/BatchPromptBuilder.ts +0 -299
  521. package/src/core/Route.ts +0 -678
  522. package/src/types/route.ts +0 -392
@@ -1,26 +1,42 @@
1
1
  /**
2
2
  * Step in the route DSL
3
3
  */
4
- import type { StepRef, StepOptions, StepResult, BranchSpec, BranchResult, Guideline, GuidelineMatch, Tool, SessionState, Event } from "../types";
5
- import { ToolScope, Template, ConditionTemplate, TemplateContext } from "../types";
4
+ import type { StepRef, StepOptions, BranchMap, Instruction, Tool, PrepareResult } from "../types";
5
+ import type { StepResult, BranchSpec, BranchResult } from "../types/flow";
6
+ import { ToolScope, Template, TemplateContext } from "../types";
7
+ import type { ConditionWhen, ConditionIf } from "../types/flow";
6
8
  import { Agent } from './Agent';
9
+ /**
10
+ * Error thrown when a step's configuration violates auto-step constraints.
11
+ */
12
+ export declare class FlowConfigurationError extends Error {
13
+ constructor(message: string);
14
+ }
7
15
  /**
8
16
  * Represents a step within a route
9
17
  */
10
18
  export declare class Step<TContext = unknown, TData = unknown> {
11
19
  readonly id: string;
12
20
  private nextSteps;
13
- private guidelines;
14
- readonly routeId: string;
21
+ private _instructions;
22
+ readonly flowId: string;
15
23
  collect?: (keyof TData)[];
16
24
  description?: string;
17
- when?: ConditionTemplate<TContext, TData>;
18
- skipIf?: ConditionTemplate<TContext, TData>;
25
+ when?: ConditionWhen;
26
+ if?: ConditionIf<TContext, TData>;
27
+ skip?: ConditionIf<TContext, TData>;
19
28
  requires?: (keyof TData)[];
20
29
  prompt?: Template<TContext, TData>;
21
- prepare?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
22
- finalize?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
30
+ reply?: Template<TContext, TData>;
31
+ prepare?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
32
+ finalize?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
23
33
  tools?: (string | Tool<TContext, TData>)[];
34
+ private readonly _auto;
35
+ private readonly _branches?;
36
+ /** Whether this step runs without an LLM call (computational only). */
37
+ get auto(): boolean;
38
+ /** Explicit source-local fork entries, if declared. */
39
+ get branches(): BranchMap<TContext, TData> | undefined;
24
40
  private parentAgent?;
25
41
  constructor(routeId: string, options?: StepOptions<TContext, TData>, parentAgent?: Agent<TContext, TData>);
26
42
  /**
@@ -30,20 +46,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
30
46
  configure(config: {
31
47
  description?: string;
32
48
  collect?: (keyof TData)[];
33
- skipIf?: ConditionTemplate<TContext, TData>;
49
+ skip?: ConditionIf<TContext, TData>;
34
50
  requires?: (keyof TData)[];
35
51
  prompt?: Template<TContext, TData>;
36
52
  prepare?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
37
53
  finalize?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
38
54
  tools?: (string | Tool<TContext, TData>)[];
39
55
  }): this;
40
- /**
41
- * Shortcut to end the current route
42
- *
43
- * @param options - Optional step options for the end step
44
- * @returns Terminal step result
45
- */
46
- endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>;
47
56
  /**
48
57
  * Create a transition from this step to another
49
58
  *
@@ -59,18 +68,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
59
68
  */
60
69
  branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>;
61
70
  /**
62
- * Add a guideline specific to this step
71
+ * Add an instruction to this step.
63
72
  */
64
- addGuideline(guideline: Guideline<TContext, TData>): void;
73
+ addInstruction(instruction: Instruction<TContext, TData>): void;
65
74
  /**
66
- * Get guidelines for this step
75
+ * Get instructions for this step
67
76
  */
68
- getGuidelines(): Guideline<TContext, TData>[];
69
- /**
70
- * Evaluate and match active guidelines based on their conditions
71
- * Returns guidelines that should be active given the current context
72
- */
73
- evaluateGuidelines(context?: TContext, session?: SessionState<TData>, history?: Event[]): Promise<GuidelineMatch<TContext, TData>[]>;
77
+ getInstructions(): Instruction<TContext, TData>[];
74
78
  /**
75
79
  * Add a tool to this step using the unified Tool interface
76
80
  * Creates and adds the tool to step scope in one operation
@@ -126,7 +130,9 @@ export declare class Step<TContext = unknown, TData = unknown> {
126
130
  */
127
131
  getTransitions(): Step<TContext, TData>[];
128
132
  /**
129
- * Evaluate when condition using ConditionEvaluator
133
+ * Evaluate when/if conditions using the v2 split logic.
134
+ * `if` (code predicate) evaluates first (free); `when` (AI) evaluates only when `if` passes.
135
+ * Both are combined with AND semantics.
130
136
  */
131
137
  evaluateWhen(templateContext: TemplateContext<TContext, TData>): Promise<{
132
138
  shouldActivate: boolean;
@@ -134,9 +140,10 @@ export declare class Step<TContext = unknown, TData = unknown> {
134
140
  hasProgrammaticConditions: boolean;
135
141
  }>;
136
142
  /**
137
- * Evaluate skipIf condition using ConditionEvaluator
143
+ * Evaluate the skip condition (if-only shape — code predicates, OR semantics).
144
+ * Returns true if the step should be skipped.
138
145
  */
139
- evaluateSkipIf(templateContext: TemplateContext<TContext, TData>): Promise<{
146
+ evaluateSkip(templateContext: TemplateContext<TContext, TData>): Promise<{
140
147
  shouldSkip: boolean;
141
148
  aiContextStrings: string[];
142
149
  hasProgrammaticConditions: boolean;
@@ -153,10 +160,6 @@ export declare class Step<TContext = unknown, TData = unknown> {
153
160
  * Create a step reference with nextStep capability for chaining
154
161
  */
155
162
  private createStepRefWithTransition;
156
- /**
157
- * Create a terminal step reference (for END_ROUTE)
158
- */
159
- private createTerminalRef;
160
163
  /**
161
164
  * Create a transition result for this step
162
165
  */
@@ -166,5 +169,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
166
169
  * @returns StepOptions that can be used to create a new step with identical configuration
167
170
  */
168
171
  toOptions(): StepOptions<TContext, TData>;
172
+ /**
173
+ * Validate the branches array at construction time.
174
+ * Checks:
175
+ * - Non-empty array
176
+ * - Unconditional entries (no `when` and no `if`) only legal as the last entry
177
+ * - Directive `then` values: at most one position field, no empty `goTo: {}`
178
+ */
179
+ private validateBranches;
169
180
  }
170
181
  //# sourceMappingURL=Step.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/core/Step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/core/Step.ts"],"names":[],"mappings":"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"}
@@ -3,33 +3,104 @@
3
3
  * Step in the route DSL
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Step = void 0;
6
+ exports.Step = exports.FlowConfigurationError = void 0;
7
7
  const types_1 = require("../types");
8
8
  const utils_1 = require("../utils");
9
- const constants_1 = require("../constants");
9
+ /**
10
+ * Error thrown when a step's configuration violates auto-step constraints.
11
+ */
12
+ class FlowConfigurationError extends Error {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = "FlowConfigurationError";
16
+ }
17
+ }
18
+ exports.FlowConfigurationError = FlowConfigurationError;
10
19
  /**
11
20
  * Represents a step within a route
12
21
  */
13
22
  class Step {
23
+ /** Whether this step runs without an LLM call (computational only). */
24
+ get auto() {
25
+ return this._auto;
26
+ }
27
+ /** Explicit source-local fork entries, if declared. */
28
+ get branches() {
29
+ return this._branches;
30
+ }
14
31
  constructor(routeId, options = {}, parentAgent) {
15
32
  this.nextSteps = [];
16
- this.guidelines = [];
33
+ this._instructions = [];
17
34
  // Use provided ID or generate a deterministic one
18
35
  this.id = options.id || (0, utils_1.generateStepId)(routeId, options.description);
19
- this.routeId = routeId;
36
+ this.flowId = routeId;
20
37
  this.description = options.description;
38
+ this._auto = options.auto ?? false;
39
+ this._branches = options.branches;
21
40
  this.collect = options.collect;
22
- this.skipIf = options.skipIf;
41
+ this.skip = options.skip;
23
42
  this.requires = options.requires;
24
43
  this.prompt = options.prompt;
44
+ this.reply = options.reply;
25
45
  this.when = options.when;
46
+ this.if = options.if;
26
47
  this.prepare = options.prepare;
27
48
  this.finalize = options.finalize;
28
49
  this.tools = options.tools;
29
- // Initialize guidelines from options
30
- if (options.guidelines) {
31
- options.guidelines.forEach((guideline) => {
32
- this.addGuideline(guideline);
50
+ // Validate when/if split: functions belong on `if`, not `when`
51
+ if (this.when !== undefined) {
52
+ const whenValue = this.when;
53
+ if (typeof whenValue === 'function') {
54
+ throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" has a function on "when": functions belong on "if" only. Move the function to the "if" field.`);
55
+ }
56
+ if (Array.isArray(whenValue)) {
57
+ for (let i = 0; i < whenValue.length; i++) {
58
+ if (typeof whenValue[i] === 'function') {
59
+ throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" has a function at "when[${i}]": functions belong on "if" only. Move the function to the "if" field.`);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ // Validate auto-step shape: auto-steps cannot define prompt, collect, tools, or finalize
65
+ if (this._auto) {
66
+ const violatingFields = [];
67
+ if (this.prompt != null)
68
+ violatingFields.push('prompt');
69
+ if (this.collect != null && this.collect.length > 0)
70
+ violatingFields.push('collect');
71
+ if (this.tools != null && this.tools.length > 0)
72
+ violatingFields.push('tools');
73
+ if (this.finalize != null)
74
+ violatingFields.push('finalize');
75
+ if (violatingFields.length > 0) {
76
+ throw new FlowConfigurationError(`[FlowConfigurationError] Auto-step "${this.id}" cannot define: ${violatingFields.join(', ')}. Auto-steps run without an LLM call and must not declare prompt, collect, tools, or finalize. Remove these fields or set auto: false.`);
77
+ }
78
+ }
79
+ // Validate reply-step shape: reply steps cannot define prompt, collect, tools, finalize, or auto: true
80
+ if (this.reply != null) {
81
+ const conflictingFields = [];
82
+ if (this.prompt != null)
83
+ conflictingFields.push('prompt');
84
+ if (this.collect != null && this.collect.length > 0)
85
+ conflictingFields.push('collect');
86
+ if (this.tools != null && this.tools.length > 0)
87
+ conflictingFields.push('tools');
88
+ if (this.finalize != null)
89
+ conflictingFields.push('finalize');
90
+ if (this._auto)
91
+ conflictingFields.push('auto: true');
92
+ if (conflictingFields.length > 0) {
93
+ throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" sets "reply" together with conflicting fields: ${conflictingFields.join(', ')}. A reply step skips the LLM call and cannot define prompt, collect, tools, finalize, or auto: true.`);
94
+ }
95
+ }
96
+ // Validate branches shape
97
+ if (this._branches !== undefined) {
98
+ this.validateBranches(this._branches);
99
+ }
100
+ // Initialize instructions from options
101
+ if (options.instructions) {
102
+ options.instructions.forEach((instruction) => {
103
+ this.addInstruction(instruction);
33
104
  });
34
105
  }
35
106
  // Store reference to parent agent for ToolManager access
@@ -46,8 +117,8 @@ class Step {
46
117
  if (config.collect !== undefined) {
47
118
  this.collect = config.collect;
48
119
  }
49
- if (config.skipIf !== undefined) {
50
- this.skipIf = config.skipIf;
120
+ if (config.skip !== undefined) {
121
+ this.skip = config.skip;
51
122
  }
52
123
  if (config.requires !== undefined) {
53
124
  this.requires = config.requires;
@@ -66,18 +137,6 @@ class Step {
66
137
  }
67
138
  return this;
68
139
  }
69
- /**
70
- * Shortcut to end the current route
71
- *
72
- * @param options - Optional step options for the end step
73
- * @returns Terminal step result
74
- */
75
- endRoute(options = {}) {
76
- return this.nextStep({
77
- ...options,
78
- step: constants_1.END_ROUTE,
79
- });
80
- }
81
140
  /**
82
141
  * Create a transition from this step to another
83
142
  *
@@ -85,23 +144,8 @@ class Step {
85
144
  * @returns StepResult that supports chaining
86
145
  */
87
146
  nextStep(spec) {
88
- // Handle END_ROUTE
89
- if (spec.step && typeof spec.step === "symbol" && spec.step === constants_1.END_ROUTE) {
90
- const endStep = new Step(this.routeId, {
91
- ...spec,
92
- id: constants_1.END_ROUTE_ID,
93
- }, this.parentAgent);
94
- this.nextSteps.push(endStep);
95
- return this.createTerminalRef();
96
- }
97
- // Handle direct step reference
98
- if (spec.step && typeof spec.step !== "symbol") {
99
- // This is a bit tricky. We need to find the actual Step instance.
100
- // For now, let's assume the user will provide a Step instance directly.
101
- // This part might need to be revisited.
102
- }
103
147
  // Create new target step for prompt or tool
104
- const targetStep = new Step(this.routeId, spec, this.parentAgent);
148
+ const targetStep = new Step(this.flowId, spec, this.parentAgent);
105
149
  this.nextSteps.push(targetStep);
106
150
  return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
107
151
  }
@@ -119,7 +163,7 @@ class Step {
119
163
  ? { ...branchSpec.step, id: branchSpec.id }
120
164
  : branchSpec.step;
121
165
  // Create a new step for this branch
122
- const branchStep = new Step(this.routeId, stepOptions, this.parentAgent);
166
+ const branchStep = new Step(this.flowId, stepOptions, this.parentAgent);
123
167
  // Add it to our transitions
124
168
  this.nextSteps.push(branchStep);
125
169
  // Create a step result for chaining
@@ -129,56 +173,21 @@ class Step {
129
173
  return result;
130
174
  }
131
175
  /**
132
- * Add a guideline specific to this step
133
- */
134
- addGuideline(guideline) {
135
- this.guidelines.push(guideline);
136
- }
137
- /**
138
- * Get guidelines for this step
176
+ * Add an instruction to this step.
139
177
  */
140
- getGuidelines() {
141
- return [...this.guidelines];
178
+ addInstruction(instruction) {
179
+ this._instructions.push({
180
+ ...instruction,
181
+ kind: instruction.kind || 'should',
182
+ id: instruction.id || `instruction_${this.id}_${this._instructions.length}`,
183
+ enabled: instruction.enabled !== false, // Default to true
184
+ });
142
185
  }
143
186
  /**
144
- * Evaluate and match active guidelines based on their conditions
145
- * Returns guidelines that should be active given the current context
187
+ * Get instructions for this step
146
188
  */
147
- async evaluateGuidelines(context, session, history) {
148
- const templateContext = { context, session, history, data: session?.data || {} };
149
- const evaluator = (0, utils_1.createConditionEvaluator)(templateContext);
150
- const matches = [];
151
- for (const guideline of this.guidelines) {
152
- // Skip disabled guidelines
153
- if (guideline.enabled === false) {
154
- continue;
155
- }
156
- if (guideline.condition) {
157
- const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
158
- // Include guideline if:
159
- // 1. No programmatic conditions (only strings) - always active
160
- // 2. Programmatic conditions evaluate to true
161
- if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
162
- const rationale = evaluation.aiContextStrings.length > 0
163
- ? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
164
- : evaluation.hasProgrammaticConditions
165
- ? "Programmatic condition evaluated to true"
166
- : "Always active (no conditions)";
167
- matches.push({
168
- guideline,
169
- rationale
170
- });
171
- }
172
- }
173
- else {
174
- // No condition means always active
175
- matches.push({
176
- guideline,
177
- rationale: "Always active (no conditions)"
178
- });
179
- }
180
- }
181
- return matches;
189
+ getInstructions() {
190
+ return [...this._instructions];
182
191
  }
183
192
  /**
184
193
  * Add a tool to this step using the unified Tool interface
@@ -260,7 +269,7 @@ class Step {
260
269
  if (!this.parentAgent?.tool) {
261
270
  // Fallback to local resolution if no ToolManager available
262
271
  const resolved = this.resolveTools();
263
- return resolved.find(tool => tool.id === toolId || tool.name === toolId);
272
+ return resolved.find(tool => tool.id === toolId || tool.id === toolId);
264
273
  }
265
274
  // Use ToolManager to find the tool with proper scope resolution
266
275
  return this.parentAgent.tool.find(toolId, scope || types_1.ToolScope.ALL, this, undefined);
@@ -328,41 +337,107 @@ class Step {
328
337
  return [...this.nextSteps];
329
338
  }
330
339
  /**
331
- * Evaluate when condition using ConditionEvaluator
340
+ * Evaluate when/if conditions using the v2 split logic.
341
+ * `if` (code predicate) evaluates first (free); `when` (AI) evaluates only when `if` passes.
342
+ * Both are combined with AND semantics.
332
343
  */
333
344
  async evaluateWhen(templateContext) {
334
- if (!this.when) {
345
+ // If neither `when` nor `if` is set, step is always eligible
346
+ if (!this.when && !this.if) {
335
347
  return {
336
348
  shouldActivate: true,
337
349
  aiContextStrings: [],
338
350
  hasProgrammaticConditions: false
339
351
  };
340
352
  }
341
- const evaluator = (0, utils_1.createConditionEvaluator)(templateContext);
342
- const result = await evaluator.evaluateCondition(this.when, 'AND');
353
+ // Evaluate `if` first (free, code-only)
354
+ if (this.if) {
355
+ const predicates = Array.isArray(this.if) ? this.if : [this.if];
356
+ for (const predicate of predicates) {
357
+ try {
358
+ const result = await predicate({
359
+ data: templateContext.data,
360
+ context: templateContext.context,
361
+ session: templateContext.session,
362
+ history: templateContext.history || [],
363
+ });
364
+ if (!result) {
365
+ // `if` failed — short-circuit, don't bother with `when`
366
+ return {
367
+ shouldActivate: false,
368
+ aiContextStrings: [],
369
+ hasProgrammaticConditions: true
370
+ };
371
+ }
372
+ }
373
+ catch (error) {
374
+ utils_1.logger.warn(`[Step] "if" predicate failed for step "${this.id}":`, error);
375
+ return {
376
+ shouldActivate: false,
377
+ aiContextStrings: [],
378
+ hasProgrammaticConditions: true
379
+ };
380
+ }
381
+ }
382
+ }
383
+ // `if` passed (or was absent) — now evaluate `when` (AI-evaluated strings)
384
+ if (this.when) {
385
+ const whenStrings = Array.isArray(this.when) ? this.when : [this.when];
386
+ // `when` strings are handed to the AI — return them as aiContextStrings
387
+ // The programmatic result is true (strings don't fail programmatically;
388
+ // they're scored by the AI at routing time)
389
+ return {
390
+ shouldActivate: true,
391
+ aiContextStrings: whenStrings,
392
+ hasProgrammaticConditions: !!this.if
393
+ };
394
+ }
395
+ // Only `if` was set and it passed
343
396
  return {
344
- shouldActivate: result.programmaticResult,
345
- aiContextStrings: result.aiContextStrings,
346
- hasProgrammaticConditions: result.hasProgrammaticConditions
397
+ shouldActivate: true,
398
+ aiContextStrings: [],
399
+ hasProgrammaticConditions: true
347
400
  };
348
401
  }
349
402
  /**
350
- * Evaluate skipIf condition using ConditionEvaluator
403
+ * Evaluate the skip condition (if-only shape — code predicates, OR semantics).
404
+ * Returns true if the step should be skipped.
351
405
  */
352
- async evaluateSkipIf(templateContext) {
353
- if (!this.skipIf) {
406
+ async evaluateSkip(templateContext) {
407
+ if (!this.skip) {
354
408
  return {
355
409
  shouldSkip: false,
356
410
  aiContextStrings: [],
357
411
  hasProgrammaticConditions: false
358
412
  };
359
413
  }
360
- const evaluator = (0, utils_1.createConditionEvaluator)(templateContext);
361
- const result = await evaluator.evaluateCondition(this.skipIf, 'OR');
414
+ const predicates = Array.isArray(this.skip) ? this.skip : [this.skip];
415
+ // OR semantics: if ANY predicate returns true, skip
416
+ for (const predicate of predicates) {
417
+ try {
418
+ const result = await predicate({
419
+ data: templateContext.data,
420
+ context: templateContext.context,
421
+ session: templateContext.session,
422
+ history: templateContext.history || [],
423
+ });
424
+ if (result) {
425
+ return {
426
+ shouldSkip: true,
427
+ aiContextStrings: [],
428
+ hasProgrammaticConditions: true
429
+ };
430
+ }
431
+ }
432
+ catch (error) {
433
+ utils_1.logger.warn(`[Step] "skip" predicate failed for step "${this.id}":`, error);
434
+ // On error, default to not skipping (safe fallback)
435
+ }
436
+ }
362
437
  return {
363
- shouldSkip: result.programmaticResult,
364
- aiContextStrings: result.aiContextStrings,
365
- hasProgrammaticConditions: result.hasProgrammaticConditions
438
+ shouldSkip: false,
439
+ aiContextStrings: [],
440
+ hasProgrammaticConditions: true
366
441
  };
367
442
  }
368
443
  /**
@@ -379,7 +454,7 @@ class Step {
379
454
  getRef() {
380
455
  return {
381
456
  id: this.id,
382
- routeId: this.routeId,
457
+ flowId: this.flowId,
383
458
  };
384
459
  }
385
460
  /**
@@ -391,26 +466,6 @@ class Step {
391
466
  ...ref,
392
467
  nextStep: (spec) => stepInstance.nextStep(spec),
393
468
  branch: (branches) => stepInstance.branch(branches),
394
- endRoute: (options) => stepInstance.endRoute(options),
395
- };
396
- }
397
- /**
398
- * Create a terminal step reference (for END_ROUTE)
399
- */
400
- createTerminalRef() {
401
- const terminalRef = {
402
- id: constants_1.END_ROUTE_ID,
403
- routeId: this.routeId,
404
- };
405
- return {
406
- ...terminalRef,
407
- nextStep: () => {
408
- throw new Error("Cannot transition from END_ROUTE step");
409
- },
410
- branch: () => {
411
- throw new Error("Cannot branch from END_ROUTE step");
412
- },
413
- endRoute: (options) => this.endRoute(options),
414
469
  };
415
470
  }
416
471
  /**
@@ -421,7 +476,6 @@ class Step {
421
476
  ...this.getRef(),
422
477
  nextStep: (spec) => this.nextStep(spec),
423
478
  branch: (branches) => this.branch(branches),
424
- endRoute: (options) => this.endRoute(options),
425
479
  };
426
480
  }
427
481
  /**
@@ -432,17 +486,58 @@ class Step {
432
486
  return {
433
487
  id: this.id,
434
488
  description: this.description,
489
+ auto: this._auto,
490
+ branches: this._branches,
435
491
  prompt: this.prompt,
492
+ reply: this.reply,
436
493
  tools: this.tools,
437
494
  prepare: this.prepare,
438
495
  finalize: this.finalize,
439
496
  collect: this.collect,
440
- skipIf: this.skipIf,
497
+ skip: this.skip,
441
498
  requires: this.requires,
442
499
  when: this.when,
443
- guidelines: this.getGuidelines(),
500
+ if: this.if,
501
+ instructions: this.getInstructions(),
444
502
  };
445
503
  }
504
+ /**
505
+ * Validate the branches array at construction time.
506
+ * Checks:
507
+ * - Non-empty array
508
+ * - Unconditional entries (no `when` and no `if`) only legal as the last entry
509
+ * - Directive `then` values: at most one position field, no empty `goTo: {}`
510
+ */
511
+ validateBranches(branches) {
512
+ if (branches.length === 0) {
513
+ throw new FlowConfigurationError(`[FlowConfigurationError] Empty branches array on step "${this.id}": branches must contain at least one entry. Add branch entries or remove the branches field.`);
514
+ }
515
+ const POSITION_FIELDS = ['goTo', 'goToStep', 'complete', 'abort', 'reset'];
516
+ for (let i = 0; i < branches.length; i++) {
517
+ const entry = branches[i];
518
+ const isLast = i === branches.length - 1;
519
+ // Non-last entry without `when` or `if` is dead code — later entries are unreachable
520
+ if (!isLast && !entry.when && !entry.if) {
521
+ throw new FlowConfigurationError(`[FlowConfigurationError] Dead-code branch at index ${i}: branches[${i}] has neither "when" nor "if" and is not the last entry. Entries after index ${i} are unreachable. Move the unconditional entry to the end or add a condition.`);
522
+ }
523
+ // Validate Directive `then` values
524
+ if (entry.then && typeof entry.then === 'object') {
525
+ const directive = entry.then;
526
+ // Check for multiple position fields
527
+ const setPositionFields = POSITION_FIELDS.filter((field) => directive[field] !== undefined);
528
+ if (setPositionFields.length > 1) {
529
+ throw new FlowConfigurationError(`[FlowConfigurationError] Multiple position fields in branches[${i}].then: Directive sets ${setPositionFields.join(', ')}. At most one position field is allowed per Directive. Remove all but one.`);
530
+ }
531
+ // Check for empty goTo: {}
532
+ if (directive.goTo !== undefined && typeof directive.goTo === 'object' && directive.goTo !== null) {
533
+ const goToObj = directive.goTo;
534
+ if (Object.keys(goToObj).length === 0) {
535
+ throw new FlowConfigurationError(`[FlowConfigurationError] Empty goTo in branches[${i}].then: Directive has "goTo: {}" with no flow target. Provide at least a flow id or title.`);
536
+ }
537
+ }
538
+ }
539
+ }
540
+ }
446
541
  }
447
542
  exports.Step = Step;
448
543
  //# sourceMappingURL=Step.js.map