@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
@@ -0,0 +1,560 @@
1
+ ---
2
+ title: "Route → Flow rename"
3
+ description: "Rename the Route domain noun to Flow across symbols, config, persistence, and generated IDs, with per-adapter data migration steps."
4
+ type: migration
5
+ order: 2
6
+ ---
7
+
8
+ # Migration Guide: Route → Flow Rename
9
+
10
+ **Version:** Minor breaking bump (ships before v2 overhaul)
11
+ **CHANGELOG:** See the [breaking-change entry in CHANGELOG.md](../../CHANGELOG.md)
12
+
13
+ ## Summary
14
+
15
+ The `Route` domain noun has been renamed to `Flow` across the entire `@falai/agent` package. This is a clean break with no compatibility shims, no dual-naming layer, and no runtime fallback for legacy field names. Every public symbol, configuration option, persisted column/field, adapter method, constant, error class, and utility function that referenced "Route" as a noun now uses "Flow". The verb form `route()` and the gerund "routing" (as used in prose and the `routing.ts` module) are preserved — routing-as-an-action remains the correct verb for selecting a flow.
16
+
17
+ ---
18
+
19
+ ## Symbol Rename Table
20
+
21
+ | Old | New | Layer | Action |
22
+ |-----|-----|-------|--------|
23
+ | `Route` (class) | `Flow` | Core | Update imports and instantiation |
24
+ | `RouteOptions` | `FlowOptions` | Type | Update type annotations |
25
+ | `RouteRef` | `FlowRef` | Type | Update type annotations |
26
+ | `RouteTransitionConfig` | `FlowTransitionConfig` | Type | Update type annotations |
27
+ | `RouteCompletionHandler` | `FlowCompletionHandler` | Type | Update type annotations |
28
+ | `RouteLifecycleHooks` | `FlowLifecycleHooks` | Type | Update type annotations |
29
+ | `RoutingEngine` | `FlowRouter` | Core | Update imports and references |
30
+ | `RoutingEngineOptions` | `FlowRouterOptions` | Type | Update type annotations |
31
+ | `RoutingDecisionOutput` | `FlowRoutingDecisionOutput` | Type | Update type annotations |
32
+ | `RouteConfigurationError` | `FlowConfigurationError` | Error | Update catch blocks |
33
+ | `END_ROUTE` | Removed | Constant | Implicit terminus — remove all references |
34
+ | `END_ROUTE_ID` | Removed | Constant | Implicit terminus — remove all references |
35
+ | `generateRouteId` | `generateFlowId` | Utility | Update calls |
36
+ | `enterRoute` | `enterFlow` | Utility | Update calls |
37
+ | `StepRef.routeId` | `StepRef.flowId` | Type | Update field access |
38
+
39
+ ### Preserved (verb-form carve-outs)
40
+
41
+ These are **not** renamed:
42
+
43
+ - `route()` method on `FlowRouter` (verb form)
44
+ - `RoutingDecision` type (describes the act of routing)
45
+ - `RoutingSchemaOptions` type
46
+ - `buildRoutingPrompt` method
47
+ - `getCandidateStepsWithConditions` method (returns Steps)
48
+ - `src/types/routing.ts` file path
49
+ - All "routing" prose in documentation
50
+
51
+ ---
52
+
53
+ ## Configuration Rename Table
54
+
55
+ | Old | New | Location |
56
+ |-----|-----|----------|
57
+ | `AgentOptions.routes` | `AgentOptions.flows` | Agent constructor |
58
+ | `AgentOptions.routeSwitchMargin` | `AgentOptions.flowSwitchMargin` | Agent constructor |
59
+ | `agent.routeSwitchMargin` | `agent.flowSwitchMargin` | Getter/setter |
60
+ | `agent.createRoute(...)` | `agent.createFlow(...)` | Method call |
61
+ | `agent.getRoutes()` | `agent.getFlows()` | Method call |
62
+ | `agent.nextStepRoute(...)` | `agent.nextStepFlow(...)` | Method call |
63
+ | `agent.getRoutingEngine()` | `agent.getFlowRouter()` | Method call |
64
+ | `agent.routes` | `agent.flows` | Getter |
65
+ | `Guideline.scope: 'route'` | `Guideline.scope: 'flow'` | Guideline config |
66
+ | `Guideline.route` | `Guideline.flow` | Guideline config |
67
+ | `RoutingDecision.routes` | `RoutingDecision.flows` | Field access |
68
+
69
+ ---
70
+
71
+ ## Session State Rename Table
72
+
73
+ | Old | New | Notes |
74
+ |-----|-----|-------|
75
+ | `SessionState.currentRoute` | `SessionState.currentFlow` | Runtime shape |
76
+ | `SessionState.routeHistory` | `SessionState.flowHistory` | Runtime shape |
77
+ | `flowHistory[].routeId` | `flowHistory[].flowId` | History item shape |
78
+ | `PendingTransition.targetRouteId` | `PendingTransition.targetFlowId` | Transition config |
79
+ | `PendingTransition.reason: "route_complete"` | `PendingTransition.reason: "flow_complete"` | String literal |
80
+ | `SessionData.currentRoute` | `SessionData.currentFlow` | Persistence shape |
81
+ | `CollectedStateData.routeHistory` | `CollectedStateData.flowHistory` | Persistence shape |
82
+ | `CollectedStateData.currentRouteTitle` | `CollectedStateData.currentFlowTitle` | Persistence shape |
83
+ | `MessageData.route` | `MessageData.flow` | Persistence shape |
84
+ | `SaveMessageOptions.route` | `SaveMessageOptions.flow` | Persistence shape |
85
+
86
+ ### StoppedReason Literals
87
+
88
+ | Old | New |
89
+ |-----|-----|
90
+ | `'end_route'` | Removed — use `'last_step'` or `'completed'` |
91
+ | `'route_complete'` | `'last_step'` (no successor) or `'completed'` (explicit directive) |
92
+
93
+ ---
94
+
95
+ ## Adapter Method Rename Table
96
+
97
+ | Adapter | Old Method | New Method |
98
+ |---------|-----------|------------|
99
+ | `MemoryAdapter` | `updateRouteStep()` | `updateFlowStep()` |
100
+ | `PrismaAdapter` | `updateRouteStep()` | `updateFlowStep()` |
101
+ | `RedisAdapter` | `updateRouteStep()` | `updateFlowStep()` |
102
+ | `MongoAdapter` | `updateRouteStep()` | `updateFlowStep()` |
103
+ | `PostgreSQLAdapter` | `updateRouteStep()` | `updateFlowStep()` |
104
+ | `SQLiteAdapter` | `updateRouteStep()` | `updateFlowStep()` |
105
+ | `OpenSearchAdapter` | `updateRouteStep()` | `updateFlowStep()` |
106
+ | `PersistenceManager` | `updateRouteStep()` | `updateFlowStep()` |
107
+ | `SessionRepository` (interface) | `updateRouteStep()` | `updateFlowStep()` |
108
+
109
+ If you implement a custom adapter, rename your `updateRouteStep` method to `updateFlowStep`.
110
+
111
+ ---
112
+
113
+ ## Per-Adapter Data Migration
114
+
115
+ The framework no longer reads or writes the legacy field/column names. You must migrate your persisted data before deploying the new version.
116
+
117
+ ### PostgreSQL
118
+
119
+ ```sql
120
+ -- Sessions table
121
+ ALTER TABLE sessions RENAME COLUMN current_route TO current_flow;
122
+
123
+ -- Messages table
124
+ ALTER TABLE messages RENAME COLUMN route TO flow;
125
+ ```
126
+
127
+ ### SQLite
128
+
129
+ SQLite 3.25+ supports `ALTER TABLE ... RENAME COLUMN`:
130
+
131
+ ```sql
132
+ -- Sessions table
133
+ ALTER TABLE sessions RENAME COLUMN current_route TO current_flow;
134
+
135
+ -- Messages table
136
+ ALTER TABLE messages RENAME COLUMN route TO flow;
137
+ ```
138
+
139
+ For SQLite versions older than 3.25, use the copy-and-rename pattern:
140
+
141
+ ```sql
142
+ -- 1. Create new table with correct column names
143
+ CREATE TABLE sessions_new (
144
+ id TEXT PRIMARY KEY,
145
+ user_id TEXT,
146
+ agent_name TEXT,
147
+ status TEXT DEFAULT 'active',
148
+ current_flow TEXT,
149
+ current_step TEXT,
150
+ collected_data TEXT,
151
+ message_count INTEGER DEFAULT 0,
152
+ last_message_at TEXT,
153
+ completed_at TEXT,
154
+ created_at TEXT NOT NULL,
155
+ updated_at TEXT NOT NULL
156
+ );
157
+
158
+ -- 2. Copy data
159
+ INSERT INTO sessions_new SELECT
160
+ id, user_id, agent_name, status,
161
+ current_route AS current_flow,
162
+ current_step, collected_data, message_count,
163
+ last_message_at, completed_at, created_at, updated_at
164
+ FROM sessions;
165
+
166
+ -- 3. Drop old table and rename
167
+ DROP TABLE sessions;
168
+ ALTER TABLE sessions_new RENAME TO sessions;
169
+
170
+ -- Repeat for messages table (route → flow column)
171
+ ```
172
+
173
+ ### Prisma
174
+
175
+ Update your Prisma schema model fields:
176
+
177
+ ```diff
178
+ model Session {
179
+ id String @id
180
+ userId String?
181
+ agentName String?
182
+ status String @default("active")
183
+ - currentRoute String? @map("current_route")
184
+ + currentFlow String? @map("current_flow")
185
+ currentStep String? @map("current_step")
186
+ collectedData Json? @map("collected_data")
187
+ // ...
188
+ }
189
+
190
+ model Message {
191
+ id String @id
192
+ sessionId String @map("session_id")
193
+ // ...
194
+ - route String?
195
+ + flow String?
196
+ step String?
197
+ // ...
198
+ }
199
+ ```
200
+
201
+ Then generate and apply the migration:
202
+
203
+ ```bash
204
+ npx prisma migrate dev --name route-to-flow-rename
205
+ ```
206
+
207
+ If you use a custom `fieldMappings` config in `PrismaAdapter`, update the key from `currentRoute` to `currentFlow`:
208
+
209
+ ```typescript
210
+ // Before
211
+ fieldMappings: { currentRoute: 'currentRoute', ... }
212
+
213
+ // After
214
+ fieldMappings: { currentFlow: 'currentFlow', ... }
215
+ ```
216
+
217
+ ### MongoDB
218
+
219
+ ```javascript
220
+ // Rename session fields
221
+ db.sessions.updateMany({}, {
222
+ $rename: {
223
+ "currentRoute": "currentFlow"
224
+ }
225
+ });
226
+
227
+ // Rename collected state fields (if stored at top level)
228
+ db.sessions.updateMany({}, {
229
+ $rename: {
230
+ "collectedData.routeHistory": "collectedData.flowHistory",
231
+ "collectedData.currentRouteTitle": "collectedData.currentFlowTitle"
232
+ }
233
+ });
234
+
235
+ // Rename message fields
236
+ db.messages.updateMany({}, {
237
+ $rename: {
238
+ "route": "flow"
239
+ }
240
+ });
241
+ ```
242
+
243
+ ### Redis
244
+
245
+ Redis stores sessions as serialized JSON. Use a Lua script to rewrite the payload in-place:
246
+
247
+ ```lua
248
+ -- redis-migrate-route-to-flow.lua
249
+ -- Run with: redis-cli --eval redis-migrate-route-to-flow.lua
250
+
251
+ local cursor = "0"
252
+ repeat
253
+ local result = redis.call("SCAN", cursor, "MATCH", "session:*", "COUNT", 100)
254
+ cursor = result[1]
255
+ local keys = result[2]
256
+ for _, key in ipairs(keys) do
257
+ local val = redis.call("GET", key)
258
+ if val then
259
+ -- Replace field names in JSON payload
260
+ val = val:gsub('"currentRoute"', '"currentFlow"')
261
+ val = val:gsub('"routeHistory"', '"flowHistory"')
262
+ val = val:gsub('"currentRouteTitle"', '"currentFlowTitle"')
263
+ redis.call("SET", key, val)
264
+ end
265
+ end
266
+ until cursor == "0"
267
+
268
+ -- If using hash layout instead of JSON:
269
+ -- Rename hash fields per session key
270
+ local cursor2 = "0"
271
+ repeat
272
+ local result = redis.call("SCAN", cursor2, "MATCH", "session:*", "COUNT", 100)
273
+ cursor2 = result[1]
274
+ local keys = result[2]
275
+ for _, key in ipairs(keys) do
276
+ local typ = redis.call("TYPE", key)["ok"]
277
+ if typ == "hash" then
278
+ local oldVal = redis.call("HGET", key, "currentRoute")
279
+ if oldVal then
280
+ redis.call("HSET", key, "currentFlow", oldVal)
281
+ redis.call("HDEL", key, "currentRoute")
282
+ end
283
+ end
284
+ end
285
+ until cursor2 == "0"
286
+ ```
287
+
288
+ For message keys, apply the same pattern replacing `"route"` with `"flow"` in the JSON payload or hash field.
289
+
290
+ ### OpenSearch
291
+
292
+ Use the `_reindex` API with a painless script to rename fields:
293
+
294
+ ```json
295
+ POST _reindex
296
+ {
297
+ "source": {
298
+ "index": "sessions"
299
+ },
300
+ "dest": {
301
+ "index": "sessions_v2"
302
+ },
303
+ "script": {
304
+ "source": """
305
+ // Rename currentRoute → currentFlow
306
+ if (ctx._source.containsKey('currentRoute')) {
307
+ ctx._source.currentFlow = ctx._source.remove('currentRoute');
308
+ }
309
+ // Rename routeHistory → flowHistory in collectedData
310
+ if (ctx._source.containsKey('collectedData') && ctx._source.collectedData.containsKey('routeHistory')) {
311
+ ctx._source.collectedData.flowHistory = ctx._source.collectedData.remove('routeHistory');
312
+ }
313
+ if (ctx._source.containsKey('collectedData') && ctx._source.collectedData.containsKey('currentRouteTitle')) {
314
+ ctx._source.collectedData.currentFlowTitle = ctx._source.collectedData.remove('currentRouteTitle');
315
+ }
316
+ """,
317
+ "lang": "painless"
318
+ }
319
+ }
320
+ ```
321
+
322
+ Then swap the alias:
323
+
324
+ ```json
325
+ POST _aliases
326
+ {
327
+ "actions": [
328
+ { "remove": { "index": "sessions", "alias": "sessions_active" } },
329
+ { "add": { "index": "sessions_v2", "alias": "sessions_active" } }
330
+ ]
331
+ }
332
+ ```
333
+
334
+ For the messages index, apply the same reindex pattern renaming the `route` field to `flow`:
335
+
336
+ ```json
337
+ POST _reindex
338
+ {
339
+ "source": {
340
+ "index": "messages"
341
+ },
342
+ "dest": {
343
+ "index": "messages_v2"
344
+ },
345
+ "script": {
346
+ "source": """
347
+ if (ctx._source.containsKey('route')) {
348
+ ctx._source.flow = ctx._source.remove('route');
349
+ }
350
+ """,
351
+ "lang": "painless"
352
+ }
353
+ }
354
+ ```
355
+
356
+ ---
357
+
358
+ ## ID Prefix Migration
359
+
360
+ The `generateFlowId()` function now produces IDs with the prefix `flow_` instead of `route_`. Existing sessions stored under the legacy `route_*` prefix will not be recognized by the framework's flow-matching logic unless migrated.
361
+
362
+ **Run this migration during a maintenance window.** In-flight sessions will lose their step pointer if the rename is not atomic with the adapter restart.
363
+
364
+ ### PostgreSQL / SQLite
365
+
366
+ ```sql
367
+ UPDATE sessions
368
+ SET current_flow = REPLACE(current_flow, 'route_', 'flow_')
369
+ WHERE current_flow LIKE 'route\_%' ESCAPE '\';
370
+ ```
371
+
372
+ If your `collected_data` JSON contains `flowHistory` entries with old IDs (stored as `routeId` before the field rename), update those as well:
373
+
374
+ ```sql
375
+ -- PostgreSQL (JSONB)
376
+ UPDATE sessions
377
+ SET collected_data = REPLACE(collected_data::text, '"route_', '"flow_')::jsonb
378
+ WHERE collected_data::text LIKE '%"route_%';
379
+ ```
380
+
381
+ ### MongoDB
382
+
383
+ ```javascript
384
+ db.sessions.updateMany(
385
+ { currentFlow: { $regex: "^route_" } },
386
+ [{
387
+ $set: {
388
+ currentFlow: {
389
+ $replaceOne: {
390
+ input: "$currentFlow",
391
+ find: "route_",
392
+ replacement: "flow_"
393
+ }
394
+ }
395
+ }
396
+ }]
397
+ );
398
+
399
+ // Also update flowHistory entries
400
+ db.sessions.updateMany(
401
+ { "collectedData.flowHistory.flowId": { $regex: "^route_" } },
402
+ [{
403
+ $set: {
404
+ "collectedData.flowHistory": {
405
+ $map: {
406
+ input: "$collectedData.flowHistory",
407
+ as: "entry",
408
+ in: {
409
+ $mergeObjects: [
410
+ "$$entry",
411
+ {
412
+ flowId: {
413
+ $replaceOne: {
414
+ input: "$$entry.flowId",
415
+ find: "route_",
416
+ replacement: "flow_"
417
+ }
418
+ }
419
+ }
420
+ ]
421
+ }
422
+ }
423
+ }
424
+ }
425
+ }]
426
+ );
427
+ ```
428
+
429
+ ### Redis
430
+
431
+ Extend the Lua script above to also replace ID prefixes in the JSON payload:
432
+
433
+ ```lua
434
+ -- Add to the existing migration script
435
+ val = val:gsub('"route_', '"flow_')
436
+ ```
437
+
438
+ ### OpenSearch
439
+
440
+ Include the prefix replacement in the reindex painless script:
441
+
442
+ ```json
443
+ POST _reindex
444
+ {
445
+ "source": { "index": "sessions_v2" },
446
+ "dest": { "index": "sessions_v3" },
447
+ "script": {
448
+ "source": """
449
+ if (ctx._source.containsKey('currentFlow') && ctx._source.currentFlow != null && ctx._source.currentFlow.startsWith('route_')) {
450
+ ctx._source.currentFlow = 'flow_' + ctx._source.currentFlow.substring(6);
451
+ }
452
+ """,
453
+ "lang": "painless"
454
+ }
455
+ }
456
+ ```
457
+
458
+ ---
459
+
460
+ ## Code-Side Migration Recipe
461
+
462
+ For downstream TypeScript consumers, here's a sed/codemod summary covering the most common public-API touchpoints:
463
+
464
+ ```bash
465
+ # Symbol renames (imports and references)
466
+ sed -i '' 's/\bRoute\b/Flow/g; s/\bRouteOptions\b/FlowOptions/g; s/\bRouteRef\b/FlowRef/g' src/**/*.ts
467
+ sed -i '' 's/\bRouteTransitionConfig\b/FlowTransitionConfig/g' src/**/*.ts
468
+ sed -i '' 's/\bRouteCompletionHandler\b/FlowCompletionHandler/g' src/**/*.ts
469
+ sed -i '' 's/\bRouteLifecycleHooks\b/FlowLifecycleHooks/g' src/**/*.ts
470
+ sed -i '' 's/\bRouteConfigurationError\b/FlowConfigurationError/g' src/**/*.ts
471
+ sed -i '' 's/\bRoutingEngine\b/FlowRouter/g' src/**/*.ts
472
+
473
+ # Constants (END_ROUTE removed — delete all references)
474
+ # END_ROUTE/END_FLOW are no longer needed. Remove imports and usages.
475
+ # The last step in a flow is the implicit terminus.
476
+ sed -i '' '/END_ROUTE/d; /END_FLOW/d' src/**/*.ts
477
+
478
+ # Methods and fields
479
+ sed -i '' 's/\.createRoute(/\.createFlow(/g' src/**/*.ts
480
+ sed -i '' 's/\.getRoutes(/\.getFlows(/g' src/**/*.ts
481
+ sed -i '' 's/\.nextStepRoute(/\.nextStepFlow(/g' src/**/*.ts
482
+ sed -i '' 's/\.getRoutingEngine(/\.getFlowRouter(/g' src/**/*.ts
483
+ sed -i '' 's/\brouteSwitchMargin\b/flowSwitchMargin/g' src/**/*.ts
484
+ sed -i '' 's/\bgenerateRouteId\b/generateFlowId/g' src/**/*.ts
485
+ sed -i '' 's/\benterRoute\b/enterFlow/g' src/**/*.ts
486
+
487
+ # Session state fields
488
+ sed -i '' 's/\.currentRoute/\.currentFlow/g' src/**/*.ts
489
+ sed -i '' 's/\.routeHistory/\.flowHistory/g' src/**/*.ts
490
+ sed -i '' 's/\btargetRouteId\b/targetFlowId/g' src/**/*.ts
491
+
492
+ # String literals
493
+ sed -i '' "s/'end_route'/'last_step'/g" src/**/*.ts
494
+ sed -i '' "s/'route_complete'/'completed'/g" src/**/*.ts
495
+
496
+ # Configuration
497
+ sed -i '' 's/routes:/flows:/g' src/**/*.ts # Be careful — review matches manually
498
+
499
+ # Import paths (if importing from @falai/agent internals)
500
+ sed -i '' 's/core\/Route/core\/Flow/g' src/**/*.ts
501
+ sed -i '' 's/core\/RoutingEngine/core\/FlowRouter/g' src/**/*.ts
502
+ sed -i '' 's/types\/route/types\/flow/g' src/**/*.ts
503
+ ```
504
+
505
+ **Important:** These sed commands are aggressive. Run them, then use `tsc --noEmit` to catch any false positives (e.g., `routes` in an HTTP router context). Review the diff before committing.
506
+
507
+ For a safer approach, use a TypeScript-aware codemod tool like [jscodeshift](https://github.com/facebook/jscodeshift) or rely on your IDE's "Find and Replace with Regex" with word-boundary matching.
508
+
509
+ ---
510
+
511
+ ## Verification
512
+
513
+ After migrating your code, run this ripgrep command to confirm no legacy references remain:
514
+
515
+ ```bash
516
+ rg -n '\b(Route|RouteOptions|RouteRef|RouteConfigurationError|RoutingEngine|END_ROUTE|currentRoute|routeHistory|createRoute|generateRouteId|enterRoute|nextStepRoute|getRoutes|routeSwitchMargin)\b' \
517
+ --glob '**/*.ts' \
518
+ --glob '**/*.tsx' \
519
+ --glob '!node_modules/**' \
520
+ --glob '!dist/**'
521
+ ```
522
+
523
+ Expected output: **zero matches**.
524
+
525
+ If you have historical migration notes or changelog entries that reference the old names, exclude them:
526
+
527
+ ```bash
528
+ rg -n '\b(Route|RouteOptions|RouteRef|RouteConfigurationError|RoutingEngine|END_ROUTE|currentRoute|routeHistory|createRoute|generateRouteId|enterRoute|nextStepRoute|getRoutes|routeSwitchMargin)\b' \
529
+ --glob '**/*.ts' \
530
+ --glob '**/*.tsx' \
531
+ --glob '!node_modules/**' \
532
+ --glob '!dist/**' \
533
+ --glob '!**/CHANGELOG*' \
534
+ --glob '!**/migration/**'
535
+ ```
536
+
537
+ Then run your type checker to confirm everything compiles:
538
+
539
+ ```bash
540
+ npx tsc --noEmit
541
+ ```
542
+
543
+ ---
544
+
545
+ ## FAQ
546
+
547
+ **Q: Is there a compatibility shim or deprecation period?**
548
+ No. This is a clean break. The old names are removed entirely.
549
+
550
+ **Q: Do I need to migrate my database before deploying?**
551
+ Yes. The framework no longer reads or writes the legacy column/field names. Deploy the data migration first, then deploy the new code.
552
+
553
+ **Q: What about the `route()` method I see on `FlowRouter`?**
554
+ That's the verb form — it means "to route a message to a flow." It is intentionally preserved.
555
+
556
+ **Q: My tests assert on `'end_route'` or `'route_complete'` — what do I do?**
557
+ `'end_route'` has been removed entirely (implicit terminus replaces it). Update to `'last_step'`. `'route_complete'` becomes `'last_step'` (no successor) or `'completed'` (explicit directive). TypeScript will flag these as type errors if you miss any.
558
+
559
+ **Q: I have custom IDs that don't use the `route_` prefix — do I need to migrate them?**
560
+ Only IDs generated by `generateRouteId()` (now `generateFlowId()`) use the prefix. If you set custom IDs on your flows, they are unaffected by the prefix change.