@falai/agent 1.2.8 → 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 (499) 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/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. package/src/types/route.ts +0 -392
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Signals — pre-phase escalation with halt + replyWith, post-phase entity capture with extract.
3
+ * Teaches: Signal, SignalContext, SignalDirective, behavior: 'cooldown', extract schema.
4
+ * Read next: docs/reference/signals.md
5
+ */
6
+
7
+ import {
8
+ createAgent,
9
+ GeminiProvider,
10
+ createSession,
11
+ type Signal,
12
+ type SignalContext,
13
+ type SignalDirective,
14
+ type SignalFiring,
15
+ } from "@falai/agent";
16
+
17
+ // ─── Types ───────────────────────────────────────────────────────────────────
18
+
19
+ interface AppContext {
20
+ supportTier: "free" | "premium";
21
+ }
22
+
23
+ interface AppData {
24
+ topic: string;
25
+ sentiment: string;
26
+ contactName: string;
27
+ contactEmail: string;
28
+ }
29
+
30
+ // ─── Signal 1: Pre-phase escalation with cooldown ────────────────────────────
31
+ // Detects angry messages BEFORE the LLM responds. Halts normal flow and
32
+ // replies with an escalation notice. Cooldown prevents re-triggering for 60s.
33
+
34
+ const escalationSignal: Signal<AppContext, AppData> = {
35
+ id: "escalation",
36
+ title: "Anger Escalation",
37
+ description: "Detects user frustration and halts to escalate.",
38
+ phase: "pre",
39
+
40
+ when: "The user is expressing strong frustration, anger, or threats to leave",
41
+
42
+ behavior: "cooldown",
43
+ cooldownMs: 60_000,
44
+
45
+ handler(ctx: SignalContext<AppContext, AppData>): SignalDirective<AppContext, AppData> {
46
+ // halt: stops the LLM call from running
47
+ // replyWith: sends a canned response instead
48
+ return {
49
+ halt: true,
50
+ replyWith: "I can see this is frustrating — let me connect you with a specialist right away.",
51
+ dataUpdate: { sentiment: "escalated" },
52
+ stopOtherSignals: true,
53
+ };
54
+ },
55
+ };
56
+
57
+ // ─── Signal 2: Post-phase entity capture with extract ────────────────────────
58
+ // After the LLM responds, extracts contact info the user may have provided.
59
+ // Uses `extract` schema so the classifier pulls structured data alongside
60
+ // the match decision.
61
+
62
+ interface ContactExtract {
63
+ name: string | null;
64
+ email: string | null;
65
+ }
66
+
67
+ const contactCaptureSignal: Signal<AppContext, AppData, ContactExtract> = {
68
+ id: "contact_capture",
69
+ title: "Contact Info Capture",
70
+ description: "Extracts name and email from the conversation when mentioned.",
71
+ phase: "post",
72
+
73
+ when: "The user has provided their name or email address in this message",
74
+
75
+ extract: {
76
+ type: "object",
77
+ properties: {
78
+ name: { type: ["string", "null"], description: "The user's full name, or null if not provided" },
79
+ email: { type: ["string", "null"], description: "The user's email address, or null if not provided" },
80
+ },
81
+ required: ["name", "email"],
82
+ } as const,
83
+
84
+ async handler(ctx: SignalContext<AppContext, AppData, ContactExtract>): Promise<void> {
85
+ const { extracted } = ctx;
86
+
87
+ // Only update fields that were actually extracted
88
+ if (extracted.name) {
89
+ await ctx.updateData({ contactName: extracted.name });
90
+ }
91
+ if (extracted.email) {
92
+ await ctx.updateData({ contactEmail: extracted.email });
93
+ }
94
+ },
95
+ };
96
+
97
+ // ─── Agent ───────────────────────────────────────────────────────────────────
98
+
99
+ const agent = createAgent<AppContext, AppData>({
100
+ name: "SupportAgent",
101
+ provider: new GeminiProvider({
102
+ apiKey: process.env.GEMINI_API_KEY!,
103
+ model: "models/gemini-2.5-flash",
104
+ }),
105
+ context: { supportTier: "free" },
106
+ schema: {
107
+ type: "object",
108
+ properties: {
109
+ topic: { type: "string" },
110
+ sentiment: { type: "string" },
111
+ contactName: { type: "string" },
112
+ contactEmail: { type: "string" },
113
+ },
114
+ },
115
+ signals: [escalationSignal, contactCaptureSignal],
116
+ flows: [
117
+ {
118
+ title: "Support",
119
+ when: "User needs help with a product issue",
120
+ steps: [
121
+ { id: "triage", prompt: "Identify the user's issue and ask clarifying questions.", collect: ["topic"] },
122
+ { id: "resolve", prompt: "Provide a solution based on the identified topic." },
123
+ ],
124
+ },
125
+ ],
126
+ });
127
+
128
+ // ─── Run ─────────────────────────────────────────────────────────────────────
129
+
130
+ const session = createSession<AppData>("signals-demo");
131
+
132
+ const response = await agent.respond({
133
+ history: [{ role: "user", content: "This is ridiculous! I've been waiting 3 days. My name is Alex and my email is alex@example.com." }],
134
+ session,
135
+ });
136
+
137
+ console.log(response.message);
138
+
139
+ // Observability: log which signals fired this turn
140
+ if (response.triggeredSignals?.length) {
141
+ for (const firing of response.triggeredSignals as SignalFiring[]) {
142
+ console.log(`[signal] ${firing.id} (${firing.phase}) — ${firing.reason ?? "no reason"}`);
143
+ }
144
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "lib": [
6
+ "ES2022",
7
+ "DOM"
8
+ ],
9
+ "moduleResolution": "bundler",
10
+ "types": [
11
+ "@types/bun"
12
+ ],
13
+ "strict": true,
14
+ "esModuleInterop": true,
15
+ "skipLibCheck": true,
16
+ "forceConsistentCasingInFileNames": true,
17
+ "resolveJsonModule": true,
18
+ "allowSyntheticDefaultImports": true,
19
+ "noEmit": true,
20
+ "paths": {
21
+ "@falai/agent": [
22
+ "../src/index.ts"
23
+ ]
24
+ },
25
+ "baseUrl": "."
26
+ },
27
+ "include": [
28
+ "./*.ts"
29
+ ]
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "1.2.8",
3
+ "version": "2.0.0",
4
4
  "description": "Standalone, strongly-typed AI Agent framework with route DSL and AI provider strategy",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -44,6 +44,7 @@
44
44
  "fix:cjs": "echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
45
45
  "dev": "tsc --watch",
46
46
  "typecheck": "tsc --noEmit",
47
+ "typecheck:examples": "tsc --noEmit --project examples/tsconfig.json",
47
48
  "lint": "eslint src/**/*.ts",
48
49
  "lint:fix": "eslint src/**/*.ts --fix",
49
50
  "clean": "rm -rf dist",
@@ -171,14 +171,14 @@ class MemorySessionRepository<TData = Record<string, unknown>>
171
171
  return Promise.resolve(null);
172
172
  }
173
173
 
174
- async updateRouteStep(
174
+ async updateFlowStep(
175
175
  id: string,
176
- route?: string,
176
+ flow?: string,
177
177
  step?: string
178
178
  ): Promise<SessionData<TData> | null> {
179
179
  const session = this.sessions.get(id);
180
180
  if (session) {
181
- session.currentRoute = route;
181
+ session.currentFlow = flow;
182
182
  session.currentStep = step;
183
183
  this.sessions.set(id, cloneDeep(session));
184
184
  return Promise.resolve(cloneDeep(session));
@@ -213,13 +213,13 @@ class MongoSessionRepository<TData = Record<string, unknown>>
213
213
  return await this.update(id, { collectedData });
214
214
  }
215
215
 
216
- async updateRouteStep(
216
+ async updateFlowStep(
217
217
  id: string,
218
- route?: string,
218
+ flow?: string,
219
219
  step?: string
220
220
  ): Promise<SessionData<TData> | null> {
221
221
  return await this.update(id, {
222
- currentRoute: route,
222
+ currentFlow: flow,
223
223
  currentStep: step,
224
224
  });
225
225
  }
@@ -194,9 +194,11 @@ export class OpenSearchAdapter<TData = Record<string, unknown>> implements Persi
194
194
  userId: { type: "keyword" },
195
195
  agentName: { type: "keyword" },
196
196
  status: { type: "keyword" },
197
- currentRoute: { type: "keyword" },
197
+ currentFlow: { type: "keyword" },
198
198
  currentStep: { type: "keyword" },
199
199
  collectedData: { type: "object", enabled: false },
200
+ pendingDirective: { type: "object", enabled: false },
201
+ signals: { type: "object", enabled: false },
200
202
  messageCount: { type: "integer" },
201
203
  createdAt: { type: "date" },
202
204
  updatedAt: { type: "date" },
@@ -224,7 +226,7 @@ export class OpenSearchAdapter<TData = Record<string, unknown>> implements Persi
224
226
  userId: { type: "keyword" },
225
227
  role: { type: "keyword" },
226
228
  content: { type: "text" },
227
- route: { type: "keyword" },
229
+ flow: { type: "keyword" },
228
230
  step: { type: "keyword" },
229
231
  toolCalls: { type: "object", enabled: false },
230
232
  event: { type: "object", enabled: false },
@@ -407,17 +409,17 @@ class OpenSearchSessionRepository<TData = Record<string, unknown>>
407
409
  return await this.findById(id);
408
410
  }
409
411
 
410
- async updateRouteStep(
412
+ async updateFlowStep(
411
413
  id: string,
412
- route?: string,
414
+ flow?: string,
413
415
  step?: string
414
416
  ): Promise<SessionData<TData> | null> {
415
417
  const doc: Record<string, unknown> = {
416
418
  updatedAt: new Date().toISOString(),
417
419
  };
418
420
 
419
- if (route !== undefined) {
420
- doc.currentRoute = route;
421
+ if (flow !== undefined) {
422
+ doc.currentFlow = flow;
421
423
  }
422
424
  if (step !== undefined) {
423
425
  doc.currentStep = step;
@@ -479,7 +481,7 @@ class OpenSearchSessionRepository<TData = Record<string, unknown>>
479
481
  userId: doc.userId as string | undefined,
480
482
  agentName: doc.agentName as string | undefined,
481
483
  status: doc.status as SessionData<TData>["status"],
482
- currentRoute: doc.currentRoute as string | undefined,
484
+ currentFlow: doc.currentFlow as string | undefined,
483
485
  currentStep: doc.currentStep as string | undefined,
484
486
  collectedData: doc.collectedData as CollectedStateData<TData> | undefined,
485
487
  messageCount: (doc.messageCount as number) || 0,
@@ -647,7 +649,7 @@ class OpenSearchMessageRepository implements MessageRepository {
647
649
  userId: doc.userId as string | undefined,
648
650
  role: doc.role as MessageData["role"],
649
651
  content: doc.content as string,
650
- route: doc.route as string | undefined,
652
+ flow: doc.flow as string | undefined,
651
653
  step: doc.step as string | undefined,
652
654
  toolCalls: doc.toolCalls as
653
655
  | Array<{ toolName: string; arguments: Record<string, unknown> }>
@@ -1,6 +1,20 @@
1
1
  /**
2
2
  * PostgreSQL adapter for persistence
3
3
  * Raw SQL adapter for PostgreSQL with custom schemas
4
+ *
5
+ * ## v2 Migration
6
+ *
7
+ * If upgrading from v1, run the following migration on your sessions table:
8
+ *
9
+ * ```sql
10
+ * ALTER TABLE agent_sessions DROP COLUMN IF EXISTS pending_transition;
11
+ * ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS pending_directive JSONB;
12
+ * ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS signals JSONB;
13
+ * ```
14
+ *
15
+ * `pending_directive` stores the serialized `Directive` that the pipeline
16
+ * applies at the start of the next turn. `signals` is a reserved JSONB column
17
+ * for the v2.x Signals feature — pass-through only in v2.0.
4
18
  */
5
19
 
6
20
  import type {
@@ -111,9 +125,11 @@ export class PostgreSQLAdapter<TData = Record<string, unknown>> implements Persi
111
125
  user_id VARCHAR(255),
112
126
  agent_name VARCHAR(255),
113
127
  status VARCHAR(50) DEFAULT 'active',
114
- current_route VARCHAR(255),
128
+ current_flow VARCHAR(255),
115
129
  current_step VARCHAR(255),
116
130
  collected_data JSONB,
131
+ pending_directive JSONB,
132
+ signals JSONB,
117
133
  message_count INTEGER DEFAULT 0,
118
134
  last_message_at TIMESTAMP,
119
135
  completed_at TIMESTAMP,
@@ -134,7 +150,7 @@ export class PostgreSQLAdapter<TData = Record<string, unknown>> implements Persi
134
150
  user_id VARCHAR(255),
135
151
  role VARCHAR(50) NOT NULL,
136
152
  content TEXT NOT NULL,
137
- route VARCHAR(255),
153
+ flow VARCHAR(255),
138
154
  step VARCHAR(255),
139
155
  tool_calls JSONB,
140
156
  event JSONB,
@@ -242,9 +258,9 @@ class PostgreSQLSessionRepository<TData = Record<string, unknown>>
242
258
  fields.push(`collected_data = $${paramIndex++}`);
243
259
  values.push(JSON.stringify(data.collectedData));
244
260
  }
245
- if (data.currentRoute !== undefined) {
246
- fields.push(`current_route = $${paramIndex++}`);
247
- values.push(data.currentRoute);
261
+ if (data.currentFlow !== undefined) {
262
+ fields.push(`current_flow = $${paramIndex++}`);
263
+ values.push(data.currentFlow);
248
264
  }
249
265
  if (data.currentStep !== undefined) {
250
266
  fields.push(`current_step = $${paramIndex++}`);
@@ -294,13 +310,13 @@ class PostgreSQLSessionRepository<TData = Record<string, unknown>>
294
310
  return await this.update(id, { collectedData });
295
311
  }
296
312
 
297
- async updateRouteStep(
313
+ async updateFlowStep(
298
314
  id: string,
299
- route?: string,
315
+ flow?: string,
300
316
  step?: string
301
317
  ): Promise<SessionData<TData> | null> {
302
318
  return await this.update(id, {
303
- currentRoute: route,
319
+ currentFlow: flow,
304
320
  currentStep: step,
305
321
  });
306
322
  }
@@ -342,7 +358,7 @@ class PostgreSQLMessageRepository implements MessageRepository {
342
358
 
343
359
  const result = await this.client.query<MessageData>(
344
360
  `INSERT INTO ${this.tableName}
345
- (id, session_id, user_id, role, content, route, step, tool_calls, event, created_at)
361
+ (id, session_id, user_id, role, content, flow, step, tool_calls, event, created_at)
346
362
  VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW())
347
363
  RETURNING *`,
348
364
  [
@@ -351,7 +367,7 @@ class PostgreSQLMessageRepository implements MessageRepository {
351
367
  data.userId || null,
352
368
  data.role,
353
369
  data.content,
354
- data.route || null,
370
+ data.flow || null,
355
371
  data.step || null,
356
372
  JSON.stringify(data.toolCalls || null),
357
373
  JSON.stringify(data.event || null),
@@ -248,7 +248,7 @@ class PrismaSessionRepository<TData = Record<string, unknown>>
248
248
  userId: unmapped.userId as string | undefined,
249
249
  agentName: unmapped.agentName as string | undefined,
250
250
  status: unmapped.status as "active" | "completed" | "abandoned",
251
- currentRoute: unmapped.currentRoute as string | undefined,
251
+ currentFlow: unmapped.currentFlow as string | undefined,
252
252
  currentStep: unmapped.currentStep as string | undefined,
253
253
  collectedData: unmapped.collectedData as CollectedStateData<TData>,
254
254
  messageCount: unmapped.messageCount as number | undefined,
@@ -360,16 +360,16 @@ class PrismaSessionRepository<TData = Record<string, unknown>>
360
360
  return this.unmapFields(result);
361
361
  }
362
362
 
363
- async updateRouteStep(
363
+ async updateFlowStep(
364
364
  id: string,
365
- route?: string,
365
+ flow?: string,
366
366
  step?: string
367
367
  ): Promise<SessionData<TData> | null> {
368
368
  const data: Record<string, unknown> = {
369
369
  [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
370
370
  };
371
- if (route !== undefined) {
372
- data[this.fieldMap.currentRoute || "currentRoute"] = route;
371
+ if (flow !== undefined) {
372
+ data[this.fieldMap.currentFlow || "currentFlow"] = flow;
373
373
  }
374
374
  if (step !== undefined) {
375
375
  data[this.fieldMap.currentStep || "currentStep"] = step;
@@ -460,7 +460,7 @@ class PrismaMessageRepository implements MessageRepository {
460
460
  userId: unmapped.userId as string | undefined,
461
461
  role: unmapped.role as MessageRole,
462
462
  content: unmapped.content as string,
463
- route: unmapped.route as string | undefined,
463
+ flow: unmapped.flow as string | undefined,
464
464
  step: unmapped.step as string | undefined,
465
465
  toolCalls: unmapped.toolCalls as
466
466
  | Array<{ toolName: string; arguments: Record<string, unknown> }>
@@ -232,12 +232,12 @@ class RedisSessionRepository<TData = Record<string, unknown>>
232
232
  return this.update(id, { collectedData });
233
233
  }
234
234
 
235
- async updateRouteStep(
235
+ async updateFlowStep(
236
236
  id: string,
237
- route?: string,
237
+ flow?: string,
238
238
  step?: string
239
239
  ): Promise<SessionData<TData> | null> {
240
- return this.update(id, { currentRoute: route, currentStep: step });
240
+ return this.update(id, { currentFlow: flow, currentStep: step });
241
241
  }
242
242
 
243
243
  async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
@@ -1,6 +1,23 @@
1
1
  /**
2
2
  * SQLite adapter for persistence
3
3
  * Lightweight, file-based database perfect for local development
4
+ *
5
+ * ## v2 Migration
6
+ *
7
+ * If upgrading from v1, run the following migration on your sessions table:
8
+ *
9
+ * ```sql
10
+ * -- SQLite 3.35.0+ supports DROP COLUMN:
11
+ * ALTER TABLE agent_sessions DROP COLUMN pending_transition;
12
+ * -- For older versions, recreate the table without pending_transition.
13
+ *
14
+ * ALTER TABLE agent_sessions ADD COLUMN pending_directive TEXT;
15
+ * ALTER TABLE agent_sessions ADD COLUMN signals TEXT;
16
+ * ```
17
+ *
18
+ * `pending_directive` stores the JSON-serialized `Directive` that the pipeline
19
+ * applies at the start of the next turn. `signals` is a reserved TEXT (JSON)
20
+ * column for the v2.x Signals feature — pass-through only in v2.0.
4
21
  */
5
22
 
6
23
  import type {
@@ -100,9 +117,11 @@ export class SQLiteAdapter<TData = Record<string, unknown>> implements Persisten
100
117
  user_id TEXT,
101
118
  agent_name TEXT,
102
119
  status TEXT DEFAULT 'active',
103
- current_route TEXT,
120
+ current_flow TEXT,
104
121
  current_step TEXT,
105
122
  collected_data TEXT,
123
+ pending_directive TEXT,
124
+ signals TEXT,
106
125
  message_count INTEGER DEFAULT 0,
107
126
  last_message_at TEXT,
108
127
  completed_at TEXT,
@@ -125,7 +144,7 @@ export class SQLiteAdapter<TData = Record<string, unknown>> implements Persisten
125
144
  user_id TEXT,
126
145
  role TEXT NOT NULL,
127
146
  content TEXT NOT NULL,
128
- route TEXT,
147
+ flow TEXT,
129
148
  step TEXT,
130
149
  tool_calls TEXT,
131
150
  event TEXT,
@@ -233,9 +252,9 @@ class SQLiteSessionRepository<TData = Record<string, unknown>>
233
252
  fields.push("collected_data = ?");
234
253
  values.push(JSON.stringify(data.collectedData));
235
254
  }
236
- if (data.currentRoute !== undefined) {
237
- fields.push("current_route = ?");
238
- values.push(data.currentRoute);
255
+ if (data.currentFlow !== undefined) {
256
+ fields.push("current_flow = ?");
257
+ values.push(data.currentFlow);
239
258
  }
240
259
  if (data.currentStep !== undefined) {
241
260
  fields.push("current_step = ?");
@@ -286,13 +305,13 @@ class SQLiteSessionRepository<TData = Record<string, unknown>>
286
305
  return await this.update(id, { collectedData });
287
306
  }
288
307
 
289
- async updateRouteStep(
308
+ async updateFlowStep(
290
309
  id: string,
291
- route?: string,
310
+ flow?: string,
292
311
  step?: string
293
312
  ): Promise<SessionData<TData> | null> {
294
313
  return await this.update(id, {
295
- currentRoute: route,
314
+ currentFlow: flow,
296
315
  currentStep: step,
297
316
  });
298
317
  }
@@ -325,7 +344,7 @@ class SQLiteSessionRepository<TData = Record<string, unknown>>
325
344
  userId: (row.user_id as string) || undefined,
326
345
  agentName: (row.agent_name as string) || undefined,
327
346
  status: row.status as SessionStatus,
328
- currentRoute: (row.current_route as string) || undefined,
347
+ currentFlow: (row.current_flow as string) || undefined,
329
348
  currentStep: (row.current_step as string) || undefined,
330
349
  collectedData: row.collected_data
331
350
  ? (JSON.parse(
@@ -363,7 +382,7 @@ class SQLiteMessageRepository implements MessageRepository {
363
382
 
364
383
  const stmt = this.db.prepare(`
365
384
  INSERT INTO ${this.tableName}
366
- (id, session_id, user_id, role, content, route, step, tool_calls, event, created_at)
385
+ (id, session_id, user_id, role, content, flow, step, tool_calls, event, created_at)
367
386
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
368
387
  `);
369
388
 
@@ -373,7 +392,7 @@ class SQLiteMessageRepository implements MessageRepository {
373
392
  data.userId || null,
374
393
  data.role,
375
394
  data.content,
376
- data.route || null,
395
+ data.flow || null,
377
396
  data.step || null,
378
397
  JSON.stringify(data.toolCalls || null),
379
398
  JSON.stringify(data.event || null),
@@ -442,7 +461,7 @@ class SQLiteMessageRepository implements MessageRepository {
442
461
  userId: (row.user_id as string) || undefined,
443
462
  role: row.role as MessageData["role"],
444
463
  content: row.content as string,
445
- route: (row.route as string) || undefined,
464
+ flow: (row.flow as string) || undefined,
446
465
  step: (row.step as string) || undefined,
447
466
  toolCalls: row.tool_calls
448
467
  ? (JSON.parse(row.tool_calls as string) as MessageData["toolCalls"])
@@ -1,10 +1,2 @@
1
- /**
2
- * Special marker to end a route/journey
3
- */
4
- export const END_ROUTE = Symbol("END_ROUTE");
5
-
6
- /**
7
- * String constant for END_ROUTE comparisons
8
- * Use this when checking if currentStep.id has reached END_ROUTE
9
- */
10
- export const END_ROUTE_ID = "END_ROUTE";
1
+ // Constants module - intentionally empty after END_FLOW removal in v2
2
+ // Flow completion is now implicit: the last step in a flow terminates it.