@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,481 @@
1
+ ---
2
+ title: "Persistence adapters"
3
+ description: "Storage strategies that let an Agent persist sessions and messages across turns, processes, and machines."
4
+ type: reference
5
+ order: 11
6
+ ---
7
+
8
+ # Persistence adapters
9
+
10
+ > **Where this is introduced:** [Persistence](../guides/persistence.md)
11
+
12
+ A **persistence adapter** is the strategy plug between an `Agent` and a storage backend. Every adapter implements the same `PersistenceAdapter` interface, so the agent itself stays storage-agnostic. Pass an instance through `persistence.adapter` on the agent options and every turn auto-saves the session (flow position, collected data, pending directive, signals state) and the message log.
13
+
14
+ `@falai/agent` ships seven built-in adapters. `MemoryAdapter` is the **implicit default** — when `persistence` is omitted, the agent runs against an in-memory store automatically. Reach for the others when you need durability across processes.
15
+
16
+ | Adapter | Class | Backend | When to use |
17
+ |---------|-------|---------|-------------|
18
+ | Memory | `MemoryAdapter` | in-process Maps | Default. Tests, prototypes, single-process demos. |
19
+ | Prisma | `PrismaAdapter` | any Prisma-supported DB | You already have Prisma; want a typed schema. |
20
+ | Redis | `RedisAdapter` | Redis / KeyDB / Dragonfly | Fast, ephemeral, TTL-driven session storage. |
21
+ | MongoDB | `MongoAdapter` | MongoDB / Atlas | Document-shape; flexible session payloads. |
22
+ | PostgreSQL | `PostgreSQLAdapter` | Postgres (raw `pg`) | Single SQL backend without an ORM. |
23
+ | SQLite | `SQLiteAdapter` | `better-sqlite3` | Local dev, single-node deploys, CLI tools. |
24
+ | OpenSearch | `OpenSearchAdapter` | OpenSearch / Elasticsearch 7.x | Searchable session/message archive. |
25
+
26
+ ## Shared shape
27
+
28
+ Every adapter implements the same surface and the agent only ever talks to it through this contract:
29
+
30
+ ```typescript
31
+ interface PersistenceAdapter<TData> {
32
+ readonly sessionRepository: SessionRepository<TData>;
33
+ readonly messageRepository: MessageRepository;
34
+ initialize?(): Promise<void>;
35
+ disconnect?(): Promise<void>;
36
+ }
37
+
38
+ interface PersistenceConfig<TData> {
39
+ adapter: PersistenceAdapter<TData>;
40
+ autoSave?: boolean; // default: true
41
+ userId?: string; // attached to created sessions/messages
42
+ }
43
+ ```
44
+
45
+ The `SessionRepository` write methods accept a `CollectedStateData` payload that carries everything that needs to survive a process restart:
46
+
47
+ ```typescript
48
+ interface CollectedStateData<TData> {
49
+ data: Partial<TData>;
50
+ flowHistory: SessionState<TData>["flowHistory"];
51
+ history?: SessionState<TData>["history"];
52
+ metadata: SessionState<TData>["metadata"];
53
+ /** Persisted directive applied at the start of the next turn. */
54
+ pendingDirective?: SessionState<TData>["pendingDirective"];
55
+ /** Reserved for v2.x Signals — passed through bit-identical. */
56
+ signals?: SessionState<TData>["signals"];
57
+ }
58
+ ```
59
+
60
+ Two columns deserve special attention:
61
+
62
+ - **`pendingDirective`** — a serialized [`Directive`](./directive.md) the pipeline consumes at the start of the next turn (e.g., what `Agent.dispatch()` writes). Stored as JSON.
63
+ - **`signals`** — the [signals](./signals.md) runtime state (firing counts, cooldown timestamps, last-extracted payloads). Stored as JSON.
64
+
65
+ Both are **required columns** on every adapter's session schema. v1 schemas had a `pending_transition` column instead; v2 replaces it. See the per-adapter migration notes below and the consolidated [v1 → v2 migration](../migration/v1-to-v2.md).
66
+
67
+ ### Wiring with `sessionId`
68
+
69
+ Pass `sessionId` to the agent constructor or directly to a `respond` call to resume a conversation by id:
70
+
71
+ ```typescript
72
+ const agent = createAgent({
73
+ schema,
74
+ provider,
75
+ flows,
76
+ persistence: { adapter, userId: "user_123" },
77
+ sessionId: "user_123:thread_abc",
78
+ });
79
+
80
+ await agent.respond({ history: [{ role: "user", content: "Hi again" }] });
81
+ ```
82
+
83
+ The engine looks the id up via `sessionRepository.findById`, hydrates the full `SessionState` (including `pendingDirective` and `signals`), and continues the turn against the restored state. Unknown ids create a new session with that id — there's no "not found" error path.
84
+
85
+ ## MemoryAdapter
86
+
87
+ The implicit default. Omit `persistence` entirely to use it; instantiate explicitly only when you want to inspect or clear the store from tests.
88
+
89
+ ### Signature
90
+
91
+ ```typescript
92
+ new MemoryAdapter()
93
+
94
+ class MemoryAdapter<TData> implements PersistenceAdapter<TData> {
95
+ clear(): void;
96
+ getSnapshot(): { sessions: SessionData<TData>[]; messages: MessageData[] };
97
+ }
98
+ ```
99
+
100
+ ### Fields
101
+
102
+ No constructor options. `clear()` drops every session and message; `getSnapshot()` returns a read-only snapshot for assertions.
103
+
104
+ ### Examples
105
+
106
+ ```typescript
107
+ // Implicit — no setup at all.
108
+ const agent = createAgent({ schema, provider, flows });
109
+
110
+ // Explicit — when you need clear()/getSnapshot() in tests.
111
+ import { MemoryAdapter } from "@falai/agent";
112
+
113
+ const adapter = new MemoryAdapter();
114
+ const agent = createAgent({
115
+ schema, provider, flows,
116
+ persistence: { adapter, userId: "test_user" },
117
+ });
118
+
119
+ afterEach(() => adapter.clear());
120
+ ```
121
+
122
+ ## PrismaAdapter
123
+
124
+ Rides on top of any Prisma-supported database. You own the schema; the adapter does the reads and writes through your generated client.
125
+
126
+ ### Signature
127
+
128
+ ```typescript
129
+ new PrismaAdapter(options: PrismaAdapterOptions)
130
+
131
+ interface PrismaAdapterOptions {
132
+ prisma: PrismaClient;
133
+ tables?: { sessions?: string; messages?: string };
134
+ fieldMappings?: FieldMappings; // rename map for non-default column names
135
+ autoMigrate?: boolean;
136
+ }
137
+ ```
138
+
139
+ ### Fields
140
+
141
+ | Field | Type | Required | Default | Notes |
142
+ |-------|------|----------|---------|-------|
143
+ | `prisma` | `PrismaClient` | yes | — | Generated client from `@prisma/client`. |
144
+ | `tables.sessions` | `string` | no | `"agentSession"` | Prisma model name to use for sessions. |
145
+ | `tables.messages` | `string` | no | `"agentMessage"` | Prisma model name to use for messages. |
146
+ | `fieldMappings` | `FieldMappings` | no | — | Optional rename map when your model uses different column names than the standard `SessionData` / `MessageData` shapes. |
147
+ | `autoMigrate` | `boolean` | no | `false` | Experimental. Use `prisma migrate` in production. |
148
+
149
+ ### Schema requirements
150
+
151
+ Your `Session` model must declare `pendingDirective` and `signals` JSON columns alongside the standard fields:
152
+
153
+ ```prisma
154
+ model AgentSession {
155
+ id String @id
156
+ userId String?
157
+ agentName String?
158
+ status String @default("active")
159
+ currentFlow String?
160
+ currentStep String?
161
+ collectedData Json?
162
+ pendingDirective Json?
163
+ signals Json?
164
+ messageCount Int @default(0)
165
+ lastMessageAt DateTime?
166
+ completedAt DateTime?
167
+ createdAt DateTime @default(now())
168
+ updatedAt DateTime @updatedAt
169
+ }
170
+ ```
171
+
172
+ If your existing schema lacks these columns, see [v1 → v2 migration](../migration/v1-to-v2.md) for the column rename and DDL.
173
+
174
+ ### Examples
175
+
176
+ ```typescript
177
+ import { PrismaClient } from "@prisma/client";
178
+ import { createAgent, PrismaAdapter } from "@falai/agent";
179
+
180
+ const prisma = new PrismaClient();
181
+
182
+ const agent = createAgent({
183
+ schema, provider, flows,
184
+ persistence: {
185
+ adapter: new PrismaAdapter({ prisma }),
186
+ userId: "user_123",
187
+ },
188
+ });
189
+
190
+ // Custom table names + column rename:
191
+ new PrismaAdapter({
192
+ prisma,
193
+ tables: { sessions: "Conversation", messages: "ConversationMessage" },
194
+ fieldMappings: { sessions: { collectedData: "payload" } },
195
+ });
196
+ ```
197
+
198
+ ## RedisAdapter
199
+
200
+ Redis is the right pick when you want fast reads, automatic expiry, and don't need long-term archives. Sessions and messages are stored as JSON-serialized strings under prefixed keys.
201
+
202
+ ### Signature
203
+
204
+ ```typescript
205
+ new RedisAdapter(options: RedisAdapterOptions)
206
+
207
+ interface RedisAdapterOptions {
208
+ redis: RedisClient; // ioredis or node-redis
209
+ keyPrefix?: string;
210
+ sessionTTL?: number; // seconds
211
+ messageTTL?: number; // seconds
212
+ }
213
+ ```
214
+
215
+ ### Fields
216
+
217
+ | Field | Type | Required | Default | Notes |
218
+ |-------|------|----------|---------|-------|
219
+ | `redis` | `RedisClient` | yes | — | An `ioredis` or `node-redis` client. |
220
+ | `keyPrefix` | `string` | no | `"agent:"` | Namespace for every key the adapter writes. |
221
+ | `sessionTTL` | `number` | no | `604800` (7 days) | Per-session expiry. Pass a large number to effectively disable. |
222
+ | `messageTTL` | `number` | no | `2592000` (30 days) | Per-message expiry. |
223
+
224
+ ### Schema requirements
225
+
226
+ None. The adapter writes JSON strings — `pendingDirective` and `signals` ride along inside the session value transparently.
227
+
228
+ ### Examples
229
+
230
+ ```typescript
231
+ import Redis from "ioredis";
232
+ import { createAgent, RedisAdapter } from "@falai/agent";
233
+
234
+ const redis = new Redis(process.env.REDIS_URL!);
235
+
236
+ const agent = createAgent({
237
+ schema, provider, flows,
238
+ persistence: {
239
+ adapter: new RedisAdapter({
240
+ redis,
241
+ keyPrefix: "myapp:agent:",
242
+ sessionTTL: 60 * 60 * 24, // 1 day
243
+ }),
244
+ userId: "user_123",
245
+ },
246
+ });
247
+ ```
248
+
249
+ ## MongoAdapter
250
+
251
+ Document-shape storage. Indexes are not auto-created — add `{ id: 1 }`, `{ userId: 1, status: 1 }`, and `{ sessionId: 1, createdAt: 1 }` yourself.
252
+
253
+ ### Signature
254
+
255
+ ```typescript
256
+ new MongoAdapter(options: MongoAdapterOptions)
257
+
258
+ interface MongoAdapterOptions {
259
+ client: MongoClient;
260
+ databaseName: string;
261
+ collections?: { sessions?: string; messages?: string };
262
+ }
263
+ ```
264
+
265
+ ### Fields
266
+
267
+ | Field | Type | Required | Default | Notes |
268
+ |-------|------|----------|---------|-------|
269
+ | `client` | `MongoClient` | yes | — | Connected `mongodb` client. |
270
+ | `databaseName` | `string` | yes | — | Database to write into. |
271
+ | `collections.sessions` | `string` | no | `"agent_sessions"` | Collection name for sessions. |
272
+ | `collections.messages` | `string` | no | `"agent_messages"` | Collection name for messages. |
273
+
274
+ ### Schema requirements
275
+
276
+ Schemaless — v2 imposes no DDL changes. The session document gains `pendingDirective` and `signals` as top-level fields automatically.
277
+
278
+ ### Examples
279
+
280
+ ```typescript
281
+ import { MongoClient } from "mongodb";
282
+ import { createAgent, MongoAdapter } from "@falai/agent";
283
+
284
+ const client = new MongoClient(process.env.MONGO_URL!);
285
+ await client.connect();
286
+
287
+ const agent = createAgent({
288
+ schema, provider, flows,
289
+ persistence: {
290
+ adapter: new MongoAdapter({ client, databaseName: "myapp" }),
291
+ userId: "user_123",
292
+ },
293
+ });
294
+ ```
295
+
296
+ ## PostgreSQLAdapter
297
+
298
+ Raw SQL adapter on top of `pg`. `initialize()` creates v2 tables and indexes for you.
299
+
300
+ ### Signature
301
+
302
+ ```typescript
303
+ new PostgreSQLAdapter(options: PostgreSQLAdapterOptions)
304
+
305
+ interface PostgreSQLAdapterOptions {
306
+ client: PgClient; // pg.Client or pg.Pool
307
+ tables?: { sessions?: string; messages?: string };
308
+ }
309
+ ```
310
+
311
+ ### Fields
312
+
313
+ | Field | Type | Required | Default | Notes |
314
+ |-------|------|----------|---------|-------|
315
+ | `client` | `PgClient` | yes | — | Connected `pg.Client` or `pg.Pool`. |
316
+ | `tables.sessions` | `string` | no | `"agent_sessions"` | Override the sessions table name. |
317
+ | `tables.messages` | `string` | no | `"agent_messages"` | Override the messages table name. |
318
+
319
+ ### Schema requirements
320
+
321
+ `initialize()` creates tables with the v2 columns. Migrating from v1:
322
+
323
+ ```sql
324
+ ALTER TABLE agent_sessions DROP COLUMN IF EXISTS pending_transition;
325
+ ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS pending_directive JSONB;
326
+ ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS signals JSONB;
327
+ ```
328
+
329
+ ### Examples
330
+
331
+ ```typescript
332
+ import { Client } from "pg";
333
+ import { createAgent, PostgreSQLAdapter } from "@falai/agent";
334
+
335
+ const client = new Client({ connectionString: process.env.DATABASE_URL });
336
+ await client.connect();
337
+
338
+ const adapter = new PostgreSQLAdapter({ client });
339
+ await adapter.initialize();
340
+
341
+ const agent = createAgent({
342
+ schema, provider, flows,
343
+ persistence: { adapter, userId: "user_123" },
344
+ });
345
+ ```
346
+
347
+ ## SQLiteAdapter
348
+
349
+ Right pick for local dev, single-node deploys, and CLI tools. Built on `better-sqlite3` (synchronous, fast, zero-config).
350
+
351
+ ### Signature
352
+
353
+ ```typescript
354
+ new SQLiteAdapter(options: SQLiteAdapterOptions)
355
+
356
+ interface SQLiteAdapterOptions {
357
+ db: SqliteDatabase; // better-sqlite3 Database
358
+ tables?: { sessions?: string; messages?: string };
359
+ }
360
+ ```
361
+
362
+ ### Fields
363
+
364
+ | Field | Type | Required | Default | Notes |
365
+ |-------|------|----------|---------|-------|
366
+ | `db` | `SqliteDatabase` | yes | — | A `better-sqlite3` database. |
367
+ | `tables.sessions` | `string` | no | `"agent_sessions"` | Override the sessions table name. |
368
+ | `tables.messages` | `string` | no | `"agent_messages"` | Override the messages table name. |
369
+
370
+ ### Schema requirements
371
+
372
+ `initialize()` creates the v2 tables. Migrating from v1 (SQLite 3.35+):
373
+
374
+ ```sql
375
+ ALTER TABLE agent_sessions DROP COLUMN pending_transition;
376
+ ALTER TABLE agent_sessions ADD COLUMN pending_directive TEXT;
377
+ ALTER TABLE agent_sessions ADD COLUMN signals TEXT;
378
+ ```
379
+
380
+ `pending_directive` and `signals` are stored as JSON `TEXT`.
381
+
382
+ ### Examples
383
+
384
+ ```typescript
385
+ import Database from "better-sqlite3";
386
+ import { createAgent, SQLiteAdapter } from "@falai/agent";
387
+
388
+ const db = new Database("agent.db");
389
+ const adapter = new SQLiteAdapter({ db });
390
+ await adapter.initialize();
391
+
392
+ const agent = createAgent({
393
+ schema, provider, flows,
394
+ persistence: { adapter, userId: "user_123" },
395
+ });
396
+ ```
397
+
398
+ ## OpenSearchAdapter
399
+
400
+ Right pick when you want session and message archives that are searchable out of the box. Auto-creates indices with sensible mappings on `initialize()`. Compatible with OpenSearch 1.x/2.x and Elasticsearch 7.x.
401
+
402
+ ### Signature
403
+
404
+ ```typescript
405
+ new OpenSearchAdapter(client: OpenSearchClient, options?: OpenSearchAdapterOptions)
406
+
407
+ interface OpenSearchAdapterOptions {
408
+ indices?: { sessions?: string; messages?: string };
409
+ autoCreateIndices?: boolean; // default: true
410
+ refresh?: boolean | "wait_for"; // default: false
411
+ }
412
+ ```
413
+
414
+ ### Fields
415
+
416
+ | Field | Type | Required | Default | Notes |
417
+ |-------|------|----------|---------|-------|
418
+ | `client` (positional) | `OpenSearchClient` | yes | — | Connected `@opensearch-project/opensearch` client. |
419
+ | `indices.sessions` | `string` | no | `"agent_sessions"` | Override the sessions index. |
420
+ | `indices.messages` | `string` | no | `"agent_messages"` | Override the messages index. |
421
+ | `autoCreateIndices` | `boolean` | no | `true` | When `true`, `initialize()` creates indices with v2 mappings. |
422
+ | `refresh` | `boolean \| "wait_for"` | no | `false` | Refresh strategy on writes. `true` for tests; `"wait_for"` for a balanced default. |
423
+
424
+ ### Schema requirements
425
+
426
+ The auto-created mappings include `pendingDirective` and `signals` as opaque object fields (`enabled: false`). If you manage mappings yourself, mirror that shape:
427
+
428
+ ```json
429
+ {
430
+ "mappings": {
431
+ "properties": {
432
+ "id": { "type": "keyword" },
433
+ "userId": { "type": "keyword" },
434
+ "status": { "type": "keyword" },
435
+ "collectedData": { "type": "object", "enabled": false },
436
+ "pendingDirective": { "type": "object", "enabled": false },
437
+ "signals": { "type": "object", "enabled": false }
438
+ }
439
+ }
440
+ }
441
+ ```
442
+
443
+ ### Examples
444
+
445
+ ```typescript
446
+ import { Client } from "@opensearch-project/opensearch";
447
+ import { createAgent, OpenSearchAdapter } from "@falai/agent";
448
+
449
+ const client = new Client({
450
+ node: process.env.OPENSEARCH_URL!,
451
+ auth: { username: "admin", password: process.env.OPENSEARCH_PASS! },
452
+ });
453
+
454
+ const adapter = new OpenSearchAdapter(client, { autoCreateIndices: true });
455
+ await adapter.initialize();
456
+
457
+ const agent = createAgent({
458
+ schema, provider, flows,
459
+ persistence: { adapter, userId: "user_123" },
460
+ });
461
+ ```
462
+
463
+ ## Errors
464
+
465
+ Adapter errors propagate from the underlying driver — the agent does not wrap them. Your `try`/`catch` sees the native vendor error (e.g., `PrismaClientKnownRequestError`, `MongoServerError`, `ioredis.ReplyError`).
466
+
467
+ | When | Error | Why |
468
+ |------|-------|-----|
469
+ | `pendingDirective` or `signals` column missing on a v1 schema | Driver-specific column-not-found error | Run the v2 migration shown above for your adapter. |
470
+ | `findById` returns `null` for a `sessionId` you passed to `createAgent` | None — a new session is created with that id | Treat unknown ids as "first turn." |
471
+ | `initialize()` not called on Postgres / SQLite / OpenSearch | Driver-specific table/index-not-found error on first write | Call `await adapter.initialize()` once on boot, or run the equivalent DDL yourself. |
472
+ | Adapter `disconnect()` not called on shutdown | None at runtime — connection leak in long-lived processes | Call `await adapter.disconnect()` in your shutdown hook. |
473
+
474
+ ## Related
475
+
476
+ - [Persistence](../guides/persistence.md) — recipe for swapping memory for a real adapter
477
+ - [Architecture](../concepts/architecture.md) — where the adapter sits among the seven primitives
478
+ - [createAgent](./create-agent.md) — the `persistence` and `sessionId` fields
479
+ - [Directive](./directive.md) — what `pendingDirective` stores
480
+ - [Signals](./signals.md) — what the `signals` column stores
481
+ - [v1 → v2 migration](../migration/v1-to-v2.md) — column renames and DDL diffs