@falai/agent 1.2.8 → 2.0.0

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