@falai/agent 1.2.7 → 2.0.0

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