@falai/agent 1.2.8 → 2.0.1

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