@falai/agent 1.2.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1196 -1015
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +524 -134
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/GeminiProvider.d.ts +3 -3
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +16 -14
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/types/agent.d.ts +183 -54
  130. package/dist/cjs/types/agent.d.ts.map +1 -1
  131. package/dist/cjs/types/agent.js +0 -6
  132. package/dist/cjs/types/agent.js.map +1 -1
  133. package/dist/cjs/types/ai.d.ts +3 -3
  134. package/dist/cjs/types/ai.d.ts.map +1 -1
  135. package/dist/cjs/types/errors.d.ts +15 -0
  136. package/dist/cjs/types/errors.d.ts.map +1 -0
  137. package/dist/cjs/types/errors.js +22 -0
  138. package/dist/cjs/types/errors.js.map +1 -0
  139. package/dist/cjs/types/flow.d.ts +513 -0
  140. package/dist/cjs/types/flow.d.ts.map +1 -0
  141. package/dist/cjs/types/{route.js → flow.js} +2 -2
  142. package/dist/cjs/types/flow.js.map +1 -0
  143. package/dist/cjs/types/index.d.ts +7 -6
  144. package/dist/cjs/types/index.d.ts.map +1 -1
  145. package/dist/cjs/types/index.js +6 -2
  146. package/dist/cjs/types/index.js.map +1 -1
  147. package/dist/cjs/types/persistence.d.ts +11 -7
  148. package/dist/cjs/types/persistence.d.ts.map +1 -1
  149. package/dist/cjs/types/routing.d.ts +1 -1
  150. package/dist/cjs/types/routing.d.ts.map +1 -1
  151. package/dist/cjs/types/session.d.ts +24 -23
  152. package/dist/cjs/types/session.d.ts.map +1 -1
  153. package/dist/cjs/types/signals.d.ts +248 -0
  154. package/dist/cjs/types/signals.d.ts.map +1 -0
  155. package/dist/cjs/types/signals.js +11 -0
  156. package/dist/cjs/types/signals.js.map +1 -0
  157. package/dist/cjs/types/template.d.ts +2 -8
  158. package/dist/cjs/types/template.d.ts.map +1 -1
  159. package/dist/cjs/types/tool.d.ts +36 -29
  160. package/dist/cjs/types/tool.d.ts.map +1 -1
  161. package/dist/cjs/types/tool.js +1 -1
  162. package/dist/cjs/types/tool.js.map +1 -1
  163. package/dist/cjs/utils/condition.d.ts +7 -1
  164. package/dist/cjs/utils/condition.d.ts.map +1 -1
  165. package/dist/cjs/utils/condition.js.map +1 -1
  166. package/dist/cjs/utils/id.d.ts +13 -5
  167. package/dist/cjs/utils/id.d.ts.map +1 -1
  168. package/dist/cjs/utils/id.js +24 -10
  169. package/dist/cjs/utils/id.js.map +1 -1
  170. package/dist/cjs/utils/index.d.ts +2 -2
  171. package/dist/cjs/utils/index.d.ts.map +1 -1
  172. package/dist/cjs/utils/index.js +7 -3
  173. package/dist/cjs/utils/index.js.map +1 -1
  174. package/dist/cjs/utils/session.d.ts +44 -5
  175. package/dist/cjs/utils/session.d.ts.map +1 -1
  176. package/dist/cjs/utils/session.js +197 -38
  177. package/dist/cjs/utils/session.js.map +1 -1
  178. package/dist/constants/index.d.ts +0 -9
  179. package/dist/constants/index.d.ts.map +1 -1
  180. package/dist/constants/index.js +3 -9
  181. package/dist/constants/index.js.map +1 -1
  182. package/dist/core/Agent.d.ts +119 -153
  183. package/dist/core/Agent.d.ts.map +1 -1
  184. package/dist/core/Agent.js +472 -325
  185. package/dist/core/Agent.js.map +1 -1
  186. package/dist/core/AutoChainExecutor.d.ts +107 -0
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  188. package/dist/core/AutoChainExecutor.js +293 -0
  189. package/dist/core/AutoChainExecutor.js.map +1 -0
  190. package/dist/core/BranchEvaluator.d.ts +54 -0
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  192. package/dist/core/BranchEvaluator.js +126 -0
  193. package/dist/core/BranchEvaluator.js.map +1 -0
  194. package/dist/core/DirectiveBus.d.ts +88 -0
  195. package/dist/core/DirectiveBus.d.ts.map +1 -0
  196. package/dist/core/DirectiveBus.js +192 -0
  197. package/dist/core/DirectiveBus.js.map +1 -0
  198. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  199. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  200. package/dist/core/DirectiveChainTracker.js +117 -0
  201. package/dist/core/DirectiveChainTracker.js.map +1 -0
  202. package/dist/core/Flow.d.ts +186 -0
  203. package/dist/core/Flow.d.ts.map +1 -0
  204. package/dist/core/Flow.js +546 -0
  205. package/dist/core/Flow.js.map +1 -0
  206. package/dist/core/FlowRouter.d.ts +182 -0
  207. package/dist/core/FlowRouter.d.ts.map +1 -0
  208. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  209. package/dist/core/FlowRouter.js.map +1 -0
  210. package/dist/core/PersistenceManager.d.ts +2 -2
  211. package/dist/core/PersistenceManager.d.ts.map +1 -1
  212. package/dist/core/PersistenceManager.js +7 -7
  213. package/dist/core/PersistenceManager.js.map +1 -1
  214. package/dist/core/PromptComposer.d.ts +21 -8
  215. package/dist/core/PromptComposer.d.ts.map +1 -1
  216. package/dist/core/PromptComposer.js +183 -106
  217. package/dist/core/PromptComposer.js.map +1 -1
  218. package/dist/core/PromptSectionCache.d.ts +1 -1
  219. package/dist/core/PromptSectionCache.js +1 -1
  220. package/dist/core/ResponseEngine.d.ts +18 -8
  221. package/dist/core/ResponseEngine.d.ts.map +1 -1
  222. package/dist/core/ResponseEngine.js +38 -36
  223. package/dist/core/ResponseEngine.js.map +1 -1
  224. package/dist/core/ResponseModal.d.ts +73 -56
  225. package/dist/core/ResponseModal.d.ts.map +1 -1
  226. package/dist/core/ResponseModal.js +1198 -1017
  227. package/dist/core/ResponseModal.js.map +1 -1
  228. package/dist/core/ResponsePipeline.d.ts +124 -26
  229. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  230. package/dist/core/ResponsePipeline.js +524 -135
  231. package/dist/core/ResponsePipeline.js.map +1 -1
  232. package/dist/core/SignalEvaluator.d.ts +86 -0
  233. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  234. package/dist/core/SignalEvaluator.js +326 -0
  235. package/dist/core/SignalEvaluator.js.map +1 -0
  236. package/dist/core/SignalProcessor.d.ts +152 -0
  237. package/dist/core/SignalProcessor.d.ts.map +1 -0
  238. package/dist/core/SignalProcessor.js +555 -0
  239. package/dist/core/SignalProcessor.js.map +1 -0
  240. package/dist/core/Step.d.ts +43 -32
  241. package/dist/core/Step.d.ts.map +1 -1
  242. package/dist/core/Step.js +220 -126
  243. package/dist/core/Step.js.map +1 -1
  244. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  245. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  246. package/dist/core/StreamingToolExecutor.js.map +1 -1
  247. package/dist/core/ToolManager.d.ts +44 -13
  248. package/dist/core/ToolManager.d.ts.map +1 -1
  249. package/dist/core/ToolManager.js +174 -91
  250. package/dist/core/ToolManager.js.map +1 -1
  251. package/dist/core/createAgent.d.ts +35 -0
  252. package/dist/core/createAgent.d.ts.map +1 -0
  253. package/dist/core/createAgent.js +36 -0
  254. package/dist/core/createAgent.js.map +1 -0
  255. package/dist/core/flow-namespace.d.ts +49 -0
  256. package/dist/core/flow-namespace.d.ts.map +1 -0
  257. package/dist/core/flow-namespace.js +168 -0
  258. package/dist/core/flow-namespace.js.map +1 -0
  259. package/dist/index.d.ts +11 -14
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +9 -12
  262. package/dist/index.js.map +1 -1
  263. package/dist/providers/GeminiProvider.d.ts +3 -3
  264. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  265. package/dist/providers/GeminiProvider.js +16 -14
  266. package/dist/providers/GeminiProvider.js.map +1 -1
  267. package/dist/types/agent.d.ts +183 -54
  268. package/dist/types/agent.d.ts.map +1 -1
  269. package/dist/types/agent.js +0 -6
  270. package/dist/types/agent.js.map +1 -1
  271. package/dist/types/ai.d.ts +3 -3
  272. package/dist/types/ai.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +15 -0
  274. package/dist/types/errors.d.ts.map +1 -0
  275. package/dist/types/errors.js +18 -0
  276. package/dist/types/errors.js.map +1 -0
  277. package/dist/types/flow.d.ts +513 -0
  278. package/dist/types/flow.d.ts.map +1 -0
  279. package/dist/types/flow.js +5 -0
  280. package/dist/types/flow.js.map +1 -0
  281. package/dist/types/index.d.ts +7 -6
  282. package/dist/types/index.d.ts.map +1 -1
  283. package/dist/types/index.js +4 -1
  284. package/dist/types/index.js.map +1 -1
  285. package/dist/types/persistence.d.ts +11 -7
  286. package/dist/types/persistence.d.ts.map +1 -1
  287. package/dist/types/routing.d.ts +1 -1
  288. package/dist/types/routing.d.ts.map +1 -1
  289. package/dist/types/session.d.ts +24 -23
  290. package/dist/types/session.d.ts.map +1 -1
  291. package/dist/types/signals.d.ts +248 -0
  292. package/dist/types/signals.d.ts.map +1 -0
  293. package/dist/types/signals.js +10 -0
  294. package/dist/types/signals.js.map +1 -0
  295. package/dist/types/template.d.ts +2 -8
  296. package/dist/types/template.d.ts.map +1 -1
  297. package/dist/types/tool.d.ts +36 -29
  298. package/dist/types/tool.d.ts.map +1 -1
  299. package/dist/types/tool.js +1 -1
  300. package/dist/types/tool.js.map +1 -1
  301. package/dist/utils/condition.d.ts +7 -1
  302. package/dist/utils/condition.d.ts.map +1 -1
  303. package/dist/utils/condition.js.map +1 -1
  304. package/dist/utils/id.d.ts +13 -5
  305. package/dist/utils/id.d.ts.map +1 -1
  306. package/dist/utils/id.js +22 -9
  307. package/dist/utils/id.js.map +1 -1
  308. package/dist/utils/index.d.ts +2 -2
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +2 -2
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/session.d.ts +44 -5
  313. package/dist/utils/session.d.ts.map +1 -1
  314. package/dist/utils/session.js +193 -37
  315. package/dist/utils/session.js.map +1 -1
  316. package/docs/README.md +15 -202
  317. package/docs/concepts/architecture.md +281 -0
  318. package/docs/concepts/directives.md +400 -0
  319. package/docs/concepts/pipeline.md +399 -0
  320. package/docs/guides/branching.md +263 -0
  321. package/docs/guides/compaction.md +163 -0
  322. package/docs/guides/conditions.md +167 -0
  323. package/docs/guides/error-handling.md +176 -0
  324. package/docs/guides/flow-control.md +409 -0
  325. package/docs/guides/instructions.md +210 -0
  326. package/docs/guides/persistence.md +182 -0
  327. package/docs/guides/streaming.md +137 -0
  328. package/docs/migration/README.md +15 -0
  329. package/docs/migration/route-to-flow.md +560 -0
  330. package/docs/migration/v1-to-v2.md +909 -0
  331. package/docs/reference/adapters.md +481 -0
  332. package/docs/reference/branches.md +241 -0
  333. package/docs/reference/create-agent.md +186 -0
  334. package/docs/reference/directive.md +243 -0
  335. package/docs/reference/errors.md +122 -0
  336. package/docs/reference/flow.md +238 -0
  337. package/docs/reference/instruction.md +177 -0
  338. package/docs/reference/pre-directive.md +131 -0
  339. package/docs/reference/providers.md +227 -0
  340. package/docs/reference/signals.md +356 -0
  341. package/docs/reference/step.md +339 -0
  342. package/docs/reference/tool.md +269 -0
  343. package/docs/start/01-install.md +81 -0
  344. package/docs/start/02-first-agent.md +196 -0
  345. package/docs/start/03-collect-data.md +222 -0
  346. package/docs/start/04-add-tools.md +276 -0
  347. package/docs/start/05-go-to-production.md +216 -0
  348. package/examples/01-quickstart.ts +20 -0
  349. package/examples/02-data-extraction.ts +90 -0
  350. package/examples/03-tools.ts +136 -0
  351. package/examples/04-instructions.ts +100 -0
  352. package/examples/05-branching.ts +140 -0
  353. package/examples/06-flow-control.ts +103 -0
  354. package/examples/07-streaming.ts +69 -0
  355. package/examples/08-persistence.ts +98 -0
  356. package/examples/09-signals.ts +144 -0
  357. package/examples/tsconfig.json +30 -0
  358. package/package.json +2 -1
  359. package/src/adapters/MemoryAdapter.ts +3 -3
  360. package/src/adapters/MongoAdapter.ts +3 -3
  361. package/src/adapters/OpenSearchAdapter.ts +10 -8
  362. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  363. package/src/adapters/PrismaAdapter.ts +6 -6
  364. package/src/adapters/RedisAdapter.ts +3 -3
  365. package/src/adapters/SQLiteAdapter.ts +31 -12
  366. package/src/constants/index.ts +2 -10
  367. package/src/core/Agent.ts +585 -374
  368. package/src/core/AutoChainExecutor.ts +440 -0
  369. package/src/core/BranchEvaluator.ts +167 -0
  370. package/src/core/DirectiveBus.ts +248 -0
  371. package/src/core/DirectiveChainTracker.ts +144 -0
  372. package/src/core/Flow.ts +666 -0
  373. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  374. package/src/core/PersistenceManager.ts +8 -8
  375. package/src/core/PromptComposer.ts +209 -140
  376. package/src/core/PromptSectionCache.ts +1 -1
  377. package/src/core/ResponseEngine.ts +61 -46
  378. package/src/core/ResponseModal.ts +1458 -1241
  379. package/src/core/ResponsePipeline.ts +675 -173
  380. package/src/core/SignalEvaluator.ts +420 -0
  381. package/src/core/SignalProcessor.ts +723 -0
  382. package/src/core/Step.ts +279 -176
  383. package/src/core/StreamingToolExecutor.ts +4 -4
  384. package/src/core/ToolManager.ts +200 -97
  385. package/src/core/createAgent.ts +40 -0
  386. package/src/core/flow-namespace.ts +219 -0
  387. package/src/index.ts +42 -36
  388. package/src/providers/GeminiProvider.ts +17 -15
  389. package/src/types/agent.ts +182 -53
  390. package/src/types/ai.ts +3 -3
  391. package/src/types/errors.ts +18 -0
  392. package/src/types/flow.ts +590 -0
  393. package/src/types/index.ts +43 -16
  394. package/src/types/persistence.ts +12 -8
  395. package/src/types/routing.ts +1 -1
  396. package/src/types/session.ts +26 -23
  397. package/src/types/signals.ts +321 -0
  398. package/src/types/template.ts +3 -11
  399. package/src/types/tool.ts +50 -42
  400. package/src/utils/condition.ts +13 -4
  401. package/src/utils/id.ts +27 -9
  402. package/src/utils/index.ts +6 -2
  403. package/src/utils/session.ts +238 -42
  404. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  405. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  406. package/dist/cjs/core/BatchExecutor.js +0 -861
  407. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  408. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  409. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  410. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  411. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  412. package/dist/cjs/core/Route.d.ts +0 -180
  413. package/dist/cjs/core/Route.d.ts.map +0 -1
  414. package/dist/cjs/core/Route.js +0 -542
  415. package/dist/cjs/core/Route.js.map +0 -1
  416. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  417. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  418. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  419. package/dist/cjs/types/route.d.ts +0 -336
  420. package/dist/cjs/types/route.d.ts.map +0 -1
  421. package/dist/cjs/types/route.js.map +0 -1
  422. package/dist/core/BatchExecutor.d.ts +0 -359
  423. package/dist/core/BatchExecutor.d.ts.map +0 -1
  424. package/dist/core/BatchExecutor.js +0 -856
  425. package/dist/core/BatchExecutor.js.map +0 -1
  426. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  427. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  428. package/dist/core/BatchPromptBuilder.js +0 -219
  429. package/dist/core/BatchPromptBuilder.js.map +0 -1
  430. package/dist/core/Route.d.ts +0 -180
  431. package/dist/core/Route.d.ts.map +0 -1
  432. package/dist/core/Route.js +0 -538
  433. package/dist/core/Route.js.map +0 -1
  434. package/dist/core/RoutingEngine.d.ts +0 -185
  435. package/dist/core/RoutingEngine.d.ts.map +0 -1
  436. package/dist/core/RoutingEngine.js.map +0 -1
  437. package/dist/types/route.d.ts +0 -336
  438. package/dist/types/route.d.ts.map +0 -1
  439. package/dist/types/route.js +0 -5
  440. package/dist/types/route.js.map +0 -1
  441. package/docs/CONTRIBUTING.md +0 -521
  442. package/docs/api/README.md +0 -3299
  443. package/docs/api/overview.md +0 -1410
  444. package/docs/architecture/data-extraction-flow.md +0 -360
  445. package/docs/architecture/multi-step-execution.md +0 -277
  446. package/docs/core/agent/README.md +0 -938
  447. package/docs/core/agent/context-management.md +0 -796
  448. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  449. package/docs/core/agent/session-management.md +0 -693
  450. package/docs/core/ai-integration/prompt-composition.md +0 -355
  451. package/docs/core/ai-integration/providers.md +0 -515
  452. package/docs/core/ai-integration/response-processing.md +0 -433
  453. package/docs/core/conversation-flows/data-collection.md +0 -772
  454. package/docs/core/conversation-flows/route-dsl.md +0 -509
  455. package/docs/core/conversation-flows/routes.md +0 -249
  456. package/docs/core/conversation-flows/step-transitions.md +0 -731
  457. package/docs/core/conversation-flows/steps.md +0 -268
  458. package/docs/core/error-handling.md +0 -830
  459. package/docs/core/persistence/adapters.md +0 -255
  460. package/docs/core/persistence/session-storage.md +0 -656
  461. package/docs/core/routing/intelligent-routing.md +0 -470
  462. package/docs/core/tools/enhanced-tool.md +0 -186
  463. package/docs/core/tools/streaming-execution.md +0 -161
  464. package/docs/core/tools/tool-definition.md +0 -970
  465. package/docs/core/tools/tool-scoping.md +0 -819
  466. package/docs/guides/advanced-patterns/publishing.md +0 -186
  467. package/docs/guides/context-compaction.md +0 -96
  468. package/docs/guides/error-handling-patterns.md +0 -578
  469. package/docs/guides/getting-started/README.md +0 -795
  470. package/docs/guides/migration/README.md +0 -101
  471. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  472. package/docs/guides/migration/multi-step-execution.md +0 -393
  473. package/docs/guides/migration/response-modal-refactor.md +0 -518
  474. package/docs/guides/prompt-optimization.md +0 -164
  475. package/examples/advanced-patterns/context-compaction.ts +0 -223
  476. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  477. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  478. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  479. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  480. package/examples/ai-providers/anthropic-integration.ts +0 -388
  481. package/examples/ai-providers/openai-integration.ts +0 -228
  482. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  483. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  484. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  485. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  486. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  487. package/examples/conversation-flows/completion-transitions.ts +0 -318
  488. package/examples/core-concepts/basic-agent.ts +0 -503
  489. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  490. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  491. package/examples/core-concepts/session-management.ts +0 -494
  492. package/examples/integrations/database-integration.ts +0 -631
  493. package/examples/integrations/healthcare-integration.ts +0 -595
  494. package/examples/integrations/search-integration.ts +0 -530
  495. package/examples/integrations/server-session-management.ts +0 -307
  496. package/examples/persistence/custom-adapter.ts +0 -526
  497. package/examples/persistence/database-persistence.ts +0 -583
  498. package/examples/persistence/memory-sessions.ts +0 -495
  499. package/examples/persistence/prisma-schema.example.prisma +0 -74
  500. package/examples/persistence/redis-persistence.ts +0 -488
  501. package/examples/tools/basic-tools.ts +0 -765
  502. package/examples/tools/data-enrichment-tools.ts +0 -593
  503. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  504. package/examples/tools/streaming-tool-execution.ts +0 -283
  505. package/src/core/BatchExecutor.ts +0 -1187
  506. package/src/core/BatchPromptBuilder.ts +0 -299
  507. package/src/core/Route.ts +0 -678
  508. package/src/types/route.ts +0 -392
@@ -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.