@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
@@ -1,656 +0,0 @@
1
- # Session Storage & Persistence
2
-
3
- @falai/agent provides **automatic session management** through the integrated `SessionManager` class, eliminating manual session lifecycle management while providing comprehensive persistence capabilities for conversation state and history.
4
-
5
- ## Overview
6
-
7
- The automatic session management system provides:
8
-
9
- - **Zero-Boilerplate Sessions**: Automatic session creation, loading, and persistence
10
- - **Built-in History Management**: Conversation history automatically maintained within sessions
11
- - **Multi-Adapter Support**: Choose from multiple database backends
12
- - **Server-Friendly Design**: Perfect for stateless server environments
13
- - **Automatic Persistence**: Sessions auto-saved after each interaction
14
- - **Type-Safe Operations**: Full TypeScript support with generics
15
-
16
- ## Enhanced Session State Structure
17
-
18
- Sessions now include automatic conversation history management:
19
-
20
- ```typescript
21
- interface SessionState<TData = unknown> {
22
- id: string; // Session identifier (always present)
23
- data: Partial<TData>; // Collected data from conversation
24
- dataByRoute: Record<string, Partial<TData>>; // Per-route data
25
- routeHistory: RouteHistoryEntry[]; // Route transition history
26
- currentRoute?: RouteRef; // Active route
27
- currentStep?: StepRef; // Active step
28
- history?: History; // Automatic conversation history
29
- metadata?: SessionMetadata; // Timestamps and custom data
30
- }
31
-
32
- // History is automatically managed
33
- interface HistoryItem {
34
- role: 'user' | 'assistant' | 'system';
35
- content: string;
36
- name?: string;
37
- timestamp?: string; // ISO string
38
- }
39
- ```
40
-
41
- ### What Gets Automatically Persisted
42
-
43
- - **Collected Data**: All information gathered via `collect` fields and schemas
44
- - **Conversation Progress**: Current route, step, and route history
45
- - **Conversation History**: Automatic message history within sessions
46
- - **Metadata**: Creation/update timestamps and custom fields
47
- - **Session State**: Complete session state after each interaction
48
-
49
- ## Quick Start
50
-
51
- ### Automatic Session Management with Prisma
52
-
53
- ```typescript
54
- import { Agent, PrismaAdapter } from "@falai/agent";
55
- import { PrismaClient } from "@prisma/client";
56
-
57
- const prisma = new PrismaClient();
58
-
59
- // Server endpoint with automatic session management
60
- app.post('/chat', async (req, res) => {
61
- const { sessionId, message } = req.body;
62
-
63
- const agent = new Agent({
64
- name: "Customer Support",
65
- provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
66
- persistence: { adapter: new PrismaAdapter({ prisma }) },
67
- sessionId // Automatically loads or creates this session
68
- });
69
-
70
- const response = await agent.respond(message);
71
-
72
- res.json({
73
- message: response.message,
74
- sessionId: agent.session.id,
75
- isComplete: response.isRouteComplete
76
- });
77
- });
78
- ```
79
-
80
- ### SessionManager API
81
-
82
- The `SessionManager` provides a clean API for session operations:
83
-
84
- ```typescript
85
- // Access the session manager
86
- const sessionManager = agent.session;
87
-
88
- // Get or create session (works for existing, new, or auto-generated IDs)
89
- await sessionManager.getOrCreate("user-123");
90
- await sessionManager.getOrCreate(); // Auto-generates ID
91
-
92
- // History management (automatically persisted)
93
- await sessionManager.addMessage("user", "Hello");
94
- await sessionManager.addMessage("assistant", "Hi there!");
95
- const history = sessionManager.getHistory();
96
- sessionManager.clearHistory();
97
-
98
- // Data access
99
- const data = sessionManager.getData<MyDataType>();
100
- await sessionManager.setData({ field: "value" });
101
-
102
- // Session operations
103
- await sessionManager.save(); // Manual save (auto-saves on addMessage)
104
- await sessionManager.delete();
105
- const newSession = await sessionManager.reset(true); // Preserve history
106
- ```
107
-
108
- ### Database Schema
109
-
110
- ```prisma
111
- model AgentSession {
112
- id String @id @default(cuid())
113
- userId String? @map("user_id")
114
- agentName String? @map("agent_name")
115
- status String @default("active")
116
- currentRoute String? @map("current_route")
117
- currentStep String? @map("current_step")
118
- collectedData Json? @map("collected_data")
119
- messageCount Int @default(0) @map("message_count")
120
- lastMessageAt DateTime? @map("last_message_at")
121
- completedAt DateTime? @map("completed_at")
122
- createdAt DateTime @default(now()) @map("created_at")
123
- updatedAt DateTime @updatedAt @map("updated_at")
124
-
125
- messages AgentMessage[]
126
-
127
- @@index([userId, status])
128
- @@map("agent_sessions")
129
- }
130
-
131
- model AgentMessage {
132
- id String @id @default(cuid())
133
- sessionId String @map("session_id")
134
- userId String? @map("user_id")
135
- role String
136
- content String @db.Text
137
- route String?
138
- step String?
139
- toolCalls Json? @map("tool_calls")
140
- event Json?
141
- createdAt DateTime @default(now()) @map("created_at")
142
-
143
- session AgentSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
144
-
145
- @@index([sessionId])
146
- @@map("agent_messages")
147
- }
148
- ```
149
-
150
- ## Advanced Session Management
151
-
152
- ### Manual Session Operations
153
-
154
- While sessions are managed automatically, you can perform manual operations when needed:
155
-
156
- ```typescript
157
- import { createSession, createSessionId } from "@falai/agent";
158
-
159
- // Access session manager directly
160
- const sessionManager = agent.session;
161
-
162
- // Create session with specific ID
163
- await sessionManager.getOrCreate("custom-session-id");
164
-
165
- // Generate a session ID without creating a session object
166
- const id = createSessionId();
167
-
168
- // Create a pre-populated session using the partial state overload
169
- const restoredSession = createSession<MyDataType>({
170
- id: "custom-session-id",
171
- data: { userName: "John" },
172
- history: previousHistory,
173
- });
174
-
175
- // Session data management
176
- await sessionManager.setData({
177
- userName: "John",
178
- preferences: { theme: "dark" },
179
- });
180
-
181
- // Get current session data
182
- const data = sessionManager.getData<MyDataType>();
183
- console.log(data.userName); // "John"
184
-
185
- // Session information
186
- console.log(sessionManager.id); // Current session ID
187
- console.log(sessionManager.current); // Full session state
188
- ```
189
-
190
- ### History Management
191
-
192
- ```typescript
193
- // Add messages to history (automatically persisted)
194
- await sessionManager.addMessage("user", "Hello there");
195
- await sessionManager.addMessage("assistant", "Hi! How can I help?");
196
-
197
- // Get conversation history
198
- const history = sessionManager.getHistory();
199
- console.log(history); // Array of HistoryItem objects
200
-
201
- // Set entire history (for migration or testing)
202
- sessionManager.setHistory([
203
- { role: "user", content: "Previous message" },
204
- { role: "assistant", content: "Previous response" }
205
- ]);
206
-
207
- // Clear history
208
- sessionManager.clearHistory();
209
- ```
210
-
211
- ## Persistence Configuration
212
-
213
- ### Automatic Persistence Setup
214
-
215
- ```typescript
216
- const agent = new Agent({
217
- name: "Assistant",
218
- provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
219
- persistence: {
220
- adapter: new PrismaAdapter({ prisma }),
221
- autoSave: true, // Auto-save after each interaction (default)
222
- },
223
- sessionId: "user-123" // Automatically loads or creates this session
224
- });
225
-
226
- // Sessions are automatically persisted - no manual save needed
227
- const response = await agent.respond("Hello");
228
- ```
229
-
230
- ### Manual Session Operations (Advanced)
231
-
232
- ```typescript
233
- // Access persistence manager if needed
234
- const persistence = agent.session.getPersistenceManager();
235
-
236
- // Manual save (usually not needed due to auto-save)
237
- await agent.session.save();
238
-
239
- // Delete session
240
- await agent.session.delete();
241
-
242
- // Reset session (creates new session, optionally preserving history)
243
- const newSession = await agent.session.reset(true); // Preserve history
244
- ```
245
-
246
- ## Auto-Save Behavior
247
-
248
- Sessions are automatically persisted after each interaction:
249
-
250
- ```typescript
251
- const agent = new Agent({
252
- persistence: {
253
- adapter: new RedisAdapter(redisClient),
254
- autoSave: true, // Default behavior
255
- },
256
- sessionId: "user-123"
257
- });
258
-
259
- // Session automatically saved after each respond call
260
- const response = await agent.respond("Hello");
261
- // Session state automatically saved to Redis
262
-
263
- // History automatically saved when messages are added
264
- await agent.session.addMessage("user", "Follow-up question");
265
- // Automatically persisted
266
- ```
267
-
268
- ### What Gets Auto-Saved
269
-
270
- - **Collected Data**: All data from `collect` fields and schemas
271
- - **Route Progress**: Current route and step
272
- - **Route History**: Transition log
273
- - **Conversation History**: Complete message history within sessions
274
- - **Metadata**: Timestamps and custom fields
275
-
276
- ## Data Recovery & Resumption
277
-
278
- ### Automatic Session Loading
279
-
280
- ```typescript
281
- // Agent automatically loads existing session
282
- const agent = new Agent({
283
- name: "Assistant",
284
- provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
285
- persistence: { adapter: new PrismaAdapter({ prisma }) },
286
- sessionId: "existing-session-123" // Automatically loads this session
287
- });
288
-
289
- // Session and history automatically restored
290
- const response = await agent.respond("Continue our conversation");
291
- console.log(agent.session.getHistory()); // Previous conversation history
292
- ```
293
-
294
- ### Session Queries
295
-
296
- ```typescript
297
- // Find active session for user
298
- const activeSession = await persistence.findActiveSessionByUserId(userId);
299
-
300
- // Get all sessions for user
301
- const userSessions = await persistence.findSessionsByUserId(userId, {
302
- limit: 10,
303
- });
304
-
305
- // Get session by ID
306
- const session = await persistence.findSessionById(sessionId);
307
- ```
308
-
309
- ## Message Persistence
310
-
311
- ### Automatic Message Saving
312
-
313
- ```typescript
314
- const agent = new Agent({
315
- persistence: {
316
- adapter: new PrismaAdapter({ prisma }),
317
- autoSave: true, // Default - saves sessions and history
318
- },
319
- sessionId: "user-123"
320
- });
321
-
322
- // Messages automatically saved as part of session history
323
- const response = await agent.respond("Hello");
324
- // Both session state and conversation history automatically persisted
325
- ```
326
-
327
- ### Manual Message Operations
328
-
329
- ```typescript
330
- // Save message manually
331
- await persistence.saveMessage({
332
- sessionId: session.id,
333
- role: "user",
334
- content: "Hello!",
335
- route: session.currentRoute?.id,
336
- step: session.currentStep?.id,
337
- });
338
-
339
- // Load messages
340
- const messages = await persistence.findMessagesBySessionId(session.id);
341
-
342
- // Convert to Event format for agent
343
- const history = await persistence.loadSessionHistory(session.id);
344
- ```
345
-
346
- ## Database Adapters
347
-
348
- ### Prisma Adapter
349
-
350
- Full-featured ORM integration:
351
-
352
- ```typescript
353
- import { PrismaAdapter } from "@falai/agent";
354
-
355
- const adapter = new PrismaAdapter({
356
- prisma,
357
- tables: {
358
- sessions: "custom_sessions", // Custom table names
359
- messages: "custom_messages",
360
- },
361
- fieldMappings: {
362
- sessions: {
363
- userId: "user_id",
364
- createdAt: "created_at",
365
- },
366
- },
367
- });
368
- ```
369
-
370
- ### Redis Adapter
371
-
372
- High-performance key-value storage:
373
-
374
- ```typescript
375
- import { RedisAdapter } from "@falai/agent";
376
-
377
- const adapter = new RedisAdapter({
378
- redis: redisClient,
379
- keyPrefix: "agent:", // Key prefix
380
- sessionTTL: 86400, // 24 hours
381
- messageTTL: 604800, // 7 days
382
- });
383
- ```
384
-
385
- ### MongoDB Adapter
386
-
387
- Document-based flexible storage:
388
-
389
- ```typescript
390
- import { MongoAdapter } from "@falai/agent";
391
-
392
- const adapter = new MongoAdapter({
393
- client: mongoClient,
394
- databaseName: "myapp",
395
- collections: {
396
- sessions: "agent_sessions",
397
- messages: "agent_messages",
398
- },
399
- });
400
- ```
401
-
402
- ### PostgreSQL Adapter
403
-
404
- Raw SQL with auto-table creation:
405
-
406
- ```typescript
407
- import { PostgreSQLAdapter } from "@falai/agent";
408
-
409
- const adapter = new PostgreSQLAdapter({
410
- client: pgClient,
411
- tables: {
412
- sessions: "agent_sessions",
413
- messages: "agent_messages",
414
- },
415
- });
416
-
417
- // Auto-create tables
418
- await adapter.initialize();
419
- ```
420
-
421
- ### SQLite Adapter
422
-
423
- Lightweight file-based database:
424
-
425
- ```typescript
426
- import { SQLiteAdapter } from "@falai/agent";
427
-
428
- const adapter = new SQLiteAdapter({
429
- db: sqliteDb,
430
- });
431
-
432
- // Auto-create tables
433
- await adapter.initialize();
434
- ```
435
-
436
- ### OpenSearch Adapter
437
-
438
- Full-text search and analytics:
439
-
440
- ```typescript
441
- import { OpenSearchAdapter } from "@falai/agent";
442
-
443
- const adapter = new OpenSearchAdapter(client, {
444
- indices: {
445
- sessions: "agent_sessions",
446
- messages: "agent_messages",
447
- },
448
- autoCreateIndices: true,
449
- });
450
- ```
451
-
452
- ### Memory Adapter
453
-
454
- Testing and development:
455
-
456
- ```typescript
457
- import { MemoryAdapter } from "@falai/agent";
458
-
459
- const adapter = new MemoryAdapter();
460
-
461
- // Useful for testing
462
- const snapshot = adapter.getSnapshot();
463
- adapter.clear();
464
- ```
465
-
466
- ## Advanced Patterns
467
-
468
- ### Context Synchronization
469
-
470
- Auto-sync agent context with database:
471
-
472
- ```typescript
473
- const agent = new Agent({
474
- context: { userId: "123", preferences: {} },
475
- hooks: {
476
- beforeRespond: async (context) => {
477
- // Load fresh context from database
478
- const session = await persistence.loadSessionState(context.sessionId);
479
- return {
480
- ...context,
481
- preferences: session?.data?.preferences || {},
482
- };
483
- },
484
- onContextUpdate: async (newContext, previousContext) => {
485
- // Save context changes
486
- if (newContext.preferences !== previousContext.preferences) {
487
- await persistence.updateCollectedData(newContext.sessionId, {
488
- preferences: newContext.preferences,
489
- });
490
- }
491
- },
492
- },
493
- persistence: {
494
- adapter: new PrismaAdapter({ prisma }),
495
- autoSave: true,
496
- },
497
- });
498
- ```
499
-
500
- ### Session Lifecycle Management
501
-
502
- ```typescript
503
- // Complete a session
504
- await persistence.updateSessionStatus(sessionId, "completed", new Date());
505
-
506
- // Abandon a session
507
- await persistence.updateSessionStatus(sessionId, "abandoned");
508
-
509
- // Clean up old sessions
510
- const oldSessions = await persistence.findSessionsByUserId(userId, {
511
- status: "completed",
512
- olderThan: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 30 days ago
513
- });
514
-
515
- for (const session of oldSessions) {
516
- await persistence.deleteSession(session.id);
517
- }
518
- ```
519
-
520
- ### Custom Adapters
521
-
522
- Create adapters for any database:
523
-
524
- ```typescript
525
- import {
526
- PersistenceAdapter,
527
- SessionRepository,
528
- MessageRepository,
529
- } from "@falai/agent";
530
-
531
- class CustomAdapter implements PersistenceAdapter {
532
- sessionRepository: SessionRepository;
533
- messageRepository: MessageRepository;
534
-
535
- constructor(config: CustomConfig) {
536
- this.sessionRepository = new CustomSessionRepository(config);
537
- this.messageRepository = new CustomMessageRepository(config);
538
- }
539
-
540
- async initialize?(): Promise<void> {
541
- // Setup database schema
542
- }
543
- }
544
- ```
545
-
546
- ## Performance Optimization
547
-
548
- ### Connection Pooling
549
-
550
- ```typescript
551
- // Reuse database connections
552
- const prisma = new PrismaClient({
553
- datasources: {
554
- db: { url: process.env.DATABASE_URL },
555
- },
556
- });
557
-
558
- // Single adapter instance per application
559
- const adapter = new PrismaAdapter({ prisma });
560
- ```
561
-
562
- ### Indexing Strategy
563
-
564
- Ensure proper database indexes:
565
-
566
- ```sql
567
- -- Essential indexes for performance
568
- CREATE INDEX idx_sessions_user_status ON agent_sessions(user_id, status);
569
- CREATE INDEX idx_sessions_updated ON agent_sessions(updated_at);
570
- CREATE INDEX idx_messages_session ON agent_messages(session_id);
571
- CREATE INDEX idx_messages_created ON agent_messages(created_at);
572
- ```
573
-
574
- ### Batch Operations
575
-
576
- ```typescript
577
- // Batch save multiple messages
578
- const messages = [
579
- { sessionId, role: "user", content: "Hi" },
580
- { sessionId, role: "assistant", content: "Hello!" },
581
- ];
582
-
583
- await Promise.all(messages.map((msg) => persistence.saveMessage(msg)));
584
- ```
585
-
586
- ## Monitoring & Debugging
587
-
588
- ### Persistence Health Checks
589
-
590
- ```typescript
591
- // Check adapter connectivity
592
- try {
593
- await adapter.sessionRepository.findById("nonexistent");
594
- console.log("Persistence adapter is healthy");
595
- } catch (error) {
596
- console.error("Persistence adapter error:", error);
597
- }
598
- ```
599
-
600
- ### Session State Inspection
601
-
602
- ```typescript
603
- // Debug session state
604
- console.log("Session data:", session.data);
605
- console.log("Current route:", session.currentRoute);
606
- console.log("Current step:", session.currentStep);
607
- console.log("Route history:", session.routeHistory);
608
-
609
- // Validate session integrity
610
- const isValid = session.id && session.data && session.metadata;
611
- ```
612
-
613
- ### Performance Monitoring
614
-
615
- ```typescript
616
- // Monitor persistence operations
617
- const startTime = Date.now();
618
- await persistence.saveSessionState(sessionId, session);
619
- const duration = Date.now() - startTime;
620
-
621
- if (duration > 1000) {
622
- console.warn(`Slow persistence operation: ${duration}ms`);
623
- }
624
- ```
625
-
626
- ## Best Practices
627
-
628
- ### Session Management
629
-
630
- - **Always Set Session IDs**: Ensure sessions have unique identifiers
631
- - **Use Auto-Save**: Enable `autoSave: true` for seamless persistence
632
- - **Validate Data**: Use lifecycle hooks to validate collected data
633
- - **Handle Errors**: Wrap persistence operations in error handling
634
-
635
- ### Database Design
636
-
637
- - **Use Appropriate Indexes**: Index frequently queried fields
638
- - **Plan Retention**: Implement session cleanup policies
639
- - **Monitor Usage**: Track storage growth and query performance
640
- - **Backup Regularly**: Ensure session data is backed up
641
-
642
- ### Performance
643
-
644
- - **Connection Reuse**: Share database connections across requests
645
- - **Batch Writes**: Group multiple operations when possible
646
- - **Cache Frequently Read Data**: Cache session metadata if needed
647
- - **Optimize Queries**: Use selective field retrieval
648
-
649
- ### Security
650
-
651
- - **Validate User Access**: Ensure users can only access their sessions
652
- - **Sanitize Data**: Clean user input before persistence
653
- - **Audit Logging**: Log sensitive operations
654
- - **Encryption**: Encrypt sensitive session data at rest
655
-
656
- The persistence system enables robust, scalable conversational AI applications with reliable state management and comprehensive data recovery capabilities.