@falai/agent 0.8.1 → 0.9.0-alpha-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/README.md +306 -133
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/{core → cjs/src/core}/Agent.d.ts +65 -67
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +52 -33
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/{types → src/types}/route.d.ts +85 -31
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +70 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +34 -11
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/{cjs → src}/core/Agent.d.ts +65 -67
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +47 -17
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +31 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +52 -33
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +39 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/{types → src/types}/route.d.ts +85 -31
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +70 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +32 -11
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +890 -251
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +143 -94
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +112 -105
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1093 -478
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +77 -47
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +48 -36
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +229 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  444. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  445. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  446. package/dist/cjs/core/PromptComposer.js +0 -127
  447. package/dist/cjs/core/PromptComposer.js.map +0 -1
  448. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  449. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  450. package/dist/cjs/core/ResponseEngine.js +0 -56
  451. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  452. package/dist/cjs/core/Route.d.ts +0 -90
  453. package/dist/cjs/core/Route.d.ts.map +0 -1
  454. package/dist/cjs/core/Route.js.map +0 -1
  455. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  457. package/dist/cjs/core/Step.d.ts +0 -72
  458. package/dist/cjs/core/Step.d.ts.map +0 -1
  459. package/dist/cjs/core/Step.js +0 -150
  460. package/dist/cjs/core/Step.js.map +0 -1
  461. package/dist/cjs/core/Tool.d.ts +0 -39
  462. package/dist/cjs/core/Tool.d.ts.map +0 -1
  463. package/dist/cjs/core/Tool.js +0 -34
  464. package/dist/cjs/core/Tool.js.map +0 -1
  465. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  466. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  467. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  468. package/dist/cjs/core/Transition.d.ts +0 -32
  469. package/dist/cjs/core/Transition.d.ts.map +0 -1
  470. package/dist/cjs/core/Transition.js +0 -89
  471. package/dist/cjs/core/Transition.js.map +0 -1
  472. package/dist/cjs/index.d.ts.map +0 -1
  473. package/dist/cjs/index.js.map +0 -1
  474. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  476. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  477. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  479. package/dist/cjs/providers/index.js.map +0 -1
  480. package/dist/cjs/types/agent.d.ts.map +0 -1
  481. package/dist/cjs/types/agent.js.map +0 -1
  482. package/dist/cjs/types/ai.d.ts.map +0 -1
  483. package/dist/cjs/types/history.d.ts.map +0 -1
  484. package/dist/cjs/types/history.js +0 -37
  485. package/dist/cjs/types/history.js.map +0 -1
  486. package/dist/cjs/types/index.d.ts +0 -12
  487. package/dist/cjs/types/index.d.ts.map +0 -1
  488. package/dist/cjs/types/index.js +0 -12
  489. package/dist/cjs/types/index.js.map +0 -1
  490. package/dist/cjs/types/persistence.d.ts.map +0 -1
  491. package/dist/cjs/types/persistence.js.map +0 -1
  492. package/dist/cjs/types/route.d.ts.map +0 -1
  493. package/dist/cjs/types/session.d.ts +0 -104
  494. package/dist/cjs/types/session.d.ts.map +0 -1
  495. package/dist/cjs/types/session.js.map +0 -1
  496. package/dist/cjs/utils/event.js.map +0 -1
  497. package/dist/cjs/utils/id.js.map +0 -1
  498. package/dist/cjs/utils/logger.js.map +0 -1
  499. package/dist/cjs/utils/retry.js.map +0 -1
  500. package/dist/constants/index.d.ts.map +0 -1
  501. package/dist/constants/index.js.map +0 -1
  502. package/dist/core/Agent.d.ts.map +0 -1
  503. package/dist/core/Agent.js +0 -962
  504. package/dist/core/Agent.js.map +0 -1
  505. package/dist/core/DomainRegistry.d.ts +0 -36
  506. package/dist/core/DomainRegistry.d.ts.map +0 -1
  507. package/dist/core/DomainRegistry.js +0 -68
  508. package/dist/core/DomainRegistry.js.map +0 -1
  509. package/dist/core/Events.d.ts +0 -41
  510. package/dist/core/Events.d.ts.map +0 -1
  511. package/dist/core/Events.js +0 -94
  512. package/dist/core/Events.js.map +0 -1
  513. package/dist/core/PersistenceManager.d.ts.map +0 -1
  514. package/dist/core/PersistenceManager.js.map +0 -1
  515. package/dist/core/PromptComposer.d.ts +0 -24
  516. package/dist/core/PromptComposer.d.ts.map +0 -1
  517. package/dist/core/PromptComposer.js +0 -123
  518. package/dist/core/PromptComposer.js.map +0 -1
  519. package/dist/core/ResponseEngine.d.ts +0 -14
  520. package/dist/core/ResponseEngine.d.ts.map +0 -1
  521. package/dist/core/ResponseEngine.js +0 -52
  522. package/dist/core/ResponseEngine.js.map +0 -1
  523. package/dist/core/Route.d.ts +0 -90
  524. package/dist/core/Route.d.ts.map +0 -1
  525. package/dist/core/Route.js.map +0 -1
  526. package/dist/core/RoutingEngine.d.ts.map +0 -1
  527. package/dist/core/RoutingEngine.js.map +0 -1
  528. package/dist/core/Step.d.ts +0 -72
  529. package/dist/core/Step.d.ts.map +0 -1
  530. package/dist/core/Step.js +0 -146
  531. package/dist/core/Step.js.map +0 -1
  532. package/dist/core/Tool.d.ts +0 -39
  533. package/dist/core/Tool.d.ts.map +0 -1
  534. package/dist/core/Tool.js +0 -31
  535. package/dist/core/Tool.js.map +0 -1
  536. package/dist/core/ToolExecutor.d.ts +0 -29
  537. package/dist/core/ToolExecutor.d.ts.map +0 -1
  538. package/dist/core/ToolExecutor.js +0 -69
  539. package/dist/core/ToolExecutor.js.map +0 -1
  540. package/dist/core/Transition.d.ts +0 -32
  541. package/dist/core/Transition.d.ts.map +0 -1
  542. package/dist/core/Transition.js +0 -85
  543. package/dist/core/Transition.js.map +0 -1
  544. package/dist/index.d.ts.map +0 -1
  545. package/dist/index.js.map +0 -1
  546. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  547. package/dist/providers/AnthropicProvider.js.map +0 -1
  548. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  549. package/dist/providers/GeminiProvider.js.map +0 -1
  550. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  551. package/dist/providers/OpenAIProvider.js.map +0 -1
  552. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenRouterProvider.js.map +0 -1
  554. package/dist/providers/index.d.ts.map +0 -1
  555. package/dist/providers/index.js.map +0 -1
  556. package/dist/types/agent.d.ts.map +0 -1
  557. package/dist/types/agent.js.map +0 -1
  558. package/dist/types/ai.d.ts.map +0 -1
  559. package/dist/types/ai.js.map +0 -1
  560. package/dist/types/history.d.ts.map +0 -1
  561. package/dist/types/history.js +0 -34
  562. package/dist/types/history.js.map +0 -1
  563. package/dist/types/index.d.ts +0 -12
  564. package/dist/types/index.d.ts.map +0 -1
  565. package/dist/types/index.js +0 -6
  566. package/dist/types/index.js.map +0 -1
  567. package/dist/types/persistence.d.ts.map +0 -1
  568. package/dist/types/persistence.js.map +0 -1
  569. package/dist/types/route.d.ts.map +0 -1
  570. package/dist/types/routing.d.ts.map +0 -1
  571. package/dist/types/schema.d.ts.map +0 -1
  572. package/dist/types/session.d.ts +0 -104
  573. package/dist/types/session.d.ts.map +0 -1
  574. package/dist/types/session.js.map +0 -1
  575. package/dist/types/tool.d.ts.map +0 -1
  576. package/dist/utils/event.d.ts.map +0 -1
  577. package/dist/utils/event.js.map +0 -1
  578. package/dist/utils/id.d.ts.map +0 -1
  579. package/dist/utils/id.js.map +0 -1
  580. package/dist/utils/logger.d.ts.map +0 -1
  581. package/dist/utils/logger.js.map +0 -1
  582. package/dist/utils/retry.d.ts.map +0 -1
  583. package/dist/utils/retry.js.map +0 -1
  584. package/docs/AGENT.md +0 -535
  585. package/docs/DOCS.md +0 -263
  586. package/docs/DOMAINS.md +0 -735
  587. package/docs/EXAMPLES.md +0 -467
  588. package/docs/GETTING_STARTED.md +0 -424
  589. package/docs/PERSISTENCE.md +0 -815
  590. package/docs/PROVIDERS.md +0 -612
  591. package/docs/ROUTES.md +0 -1085
  592. package/docs/STEPS.md +0 -883
  593. package/examples/business-onboarding.ts +0 -791
  594. package/examples/custom-database-persistence.ts +0 -574
  595. package/examples/domain-scoping.ts +0 -366
  596. package/examples/travel-agent.ts +0 -584
  597. package/src/core/DomainRegistry.ts +0 -80
  598. package/src/core/Tool.ts +0 -112
  599. package/src/core/Transition.ts +0 -115
  600. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  601. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  602. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  603. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  604. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  605. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  606. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  607. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  608. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  609. /package/dist/cjs/{types → src/types}/route.js +0 -0
  610. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  611. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  612. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  614. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  615. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  616. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  621. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  622. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  623. /package/dist/{adapters → src/adapters}/index.js +0 -0
  624. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  625. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  626. /package/dist/{constants → src/constants}/index.js +0 -0
  627. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  628. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  629. /package/dist/{providers → src/providers}/index.js +0 -0
  630. /package/dist/{types → src/types}/agent.js +0 -0
  631. /package/dist/{types → src/types}/ai.js +0 -0
  632. /package/dist/{types → src/types}/persistence.js +0 -0
  633. /package/dist/{types → src/types}/route.js +0 -0
  634. /package/dist/{types → src/types}/routing.d.ts +0 -0
  635. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  636. /package/dist/{types → src/types}/routing.js +0 -0
  637. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  638. /package/dist/{types → src/types}/schema.d.ts +0 -0
  639. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  640. /package/dist/{types → src/types}/schema.js +0 -0
  641. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  642. /package/dist/{types → src/types}/tool.js +0 -0
  643. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  644. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  645. /package/dist/{utils → src/utils}/id.js +0 -0
  646. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  647. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  648. /package/dist/{utils → src/utils}/logger.js +0 -0
  649. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  650. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  651. /package/dist/{utils → src/utils}/retry.js +0 -0
  652. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,815 +0,0 @@
1
- # Persistence with @falai/agent
2
-
3
- The `@falai/agent` framework provides optional, flexible persistence for automatically saving conversation sessions, collected data, and messages to your database.
4
-
5
- ## Features
6
-
7
- - ✅ **Optional** - Persistence is completely optional
8
- - ✅ **Provider Pattern** - Simple API like AI providers (`new PrismaAdapter({ prisma })`)
9
- - ✅ **Type-safe** - Full TypeScript support with generics
10
- - ✅ **Session Step Integration** - Automatic saving of collected data and conversation progress
11
- - ✅ **Multiple Adapters** - Prisma, Redis, MongoDB, PostgreSQL, SQLite, OpenSearch, Memory
12
- - ✅ **Extensible** - Create adapters for any database
13
- - ✅ **Auto-save** - Automatic session step and message persistence
14
-
15
- ## Quick Start with Prisma
16
-
17
- ### 1. Install Dependencies
18
-
19
- ```bash
20
- npm install @prisma/client prisma
21
- npx prisma init
22
- ```
23
-
24
- ### 2. Set Up Schema
25
-
26
- Copy this schema to `prisma/schema.prisma`:
27
-
28
- ```prisma
29
- datasource db {
30
- provider = "postgresql"
31
- url = env("DATABASE_URL")
32
- }
33
-
34
- generator client {
35
- provider = "prisma-client-js"
36
- }
37
-
38
- model AgentSession {
39
- id String @id @default(cuid())
40
- userId String? @map("user_id")
41
- agentName String? @map("agent_name")
42
- status String @default("active")
43
- currentRoute String? @map("current_route")
44
- currentStep String? @map("current_step")
45
- collectedData Json? @map("collected_data")
46
- messageCount Int @default(0) @map("message_count")
47
- lastMessageAt DateTime? @map("last_message_at")
48
- completedAt DateTime? @map("completed_at")
49
- createdAt DateTime @default(now()) @map("created_at")
50
- updatedAt DateTime @updatedAt @map("updated_at")
51
-
52
- messages AgentMessage[]
53
-
54
- @@index([userId, status])
55
- @@map("agent_sessions")
56
- }
57
-
58
- model AgentMessage {
59
- id String @id @default(cuid())
60
- sessionId String @map("session_id")
61
- userId String? @map("user_id")
62
- role String
63
- content String @db.Text
64
- route String?
65
- step String?
66
- toolCalls Json? @map("tool_calls")
67
- event Json?
68
- createdAt DateTime @default(now()) @map("created_at")
69
-
70
- session AgentSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
71
-
72
- @@index([sessionId])
73
- @@map("agent_messages")
74
- }
75
- ```
76
-
77
- ### 3. Generate and Migrate
78
-
79
- ```bash
80
- npx prisma generate
81
- npx prisma migrate dev --name init
82
- ```
83
-
84
- ### 4. Use in Your Agent with Session Step (That's it!)
85
-
86
- ```typescript
87
- import { Agent, PrismaAdapter, GeminiProvider } from "@falai/agent";
88
- import { PrismaClient } from "@prisma/client";
89
-
90
- const prisma = new PrismaClient();
91
-
92
- // Define your collected data type
93
- interface BookingData {
94
- destination: string;
95
- date: string;
96
- passengers: number;
97
- }
98
-
99
- const agent = new Agent({
100
- name: "My Agent",
101
- provider: new GeminiProvider({ apiKey: "..." }),
102
- // ✨ Just add this!
103
- persistence: {
104
- adapter: new PrismaAdapter({ prisma }),
105
- userId: "user_123",
106
- autoSave: true, // Auto-saves session step!
107
- },
108
- });
109
-
110
- // Create a route with data extraction
111
- const bookingRoute = agent.createRoute<BookingData>({
112
- title: "Book Flight",
113
- schema: {
114
- type: "object",
115
- properties: {
116
- destination: { type: "string" },
117
- date: { type: "string" },
118
- passengers: { type: "number" },
119
- },
120
- required: ["destination", "date", "passengers"],
121
- },
122
- });
123
-
124
- // Define steps with smart data collecting and custom IDs
125
- bookingRoute.initialStep
126
- .nextStep({
127
- id: "collect_details", // ✅ Custom step ID for easier tracking
128
- instructions: "Collect booking details",
129
- collect: ["destination", "date", "passengers"],
130
- })
131
- .nextStep({
132
- id: "confirm_booking", // ✅ Custom step ID
133
- instructions: "Confirm all details",
134
- requires: ["destination", "date", "passengers"],
135
- });
136
-
137
- // Access persistence methods
138
- const persistence = agent.getPersistenceManager();
139
-
140
- // Create a session with step support
141
- const { sessionData, sessionStep } =
142
- await persistence.createSessionWithStep<BookingData>({
143
- userId: "user_123",
144
- agentName: "My Agent",
145
- });
146
-
147
- // Session ID is automatically set in metadata
148
- console.log("Session ID:", sessionStep.metadata?.sessionId);
149
- // Outputs: sessionData.id (e.g., "cuid_abc123")
150
-
151
- // Load history
152
- const history = await persistence.loadSessionHistory(sessionData.id);
153
-
154
- // Generate response with session step
155
- const response = await agent.respond({
156
- history,
157
- session: sessionStep, // Pass session step with ID
158
- });
159
-
160
- // Session step is auto-saved! ✨
161
- console.log("Collected data:", response.session?.data);
162
- console.log("Current step ID:", response.session?.currentStep?.id); // Custom or auto-generated ID
163
-
164
- // Save message
165
- await persistence.saveMessage({
166
- sessionId: sessionData.id,
167
- role: "agent",
168
- content: response.message,
169
- });
170
- ```
171
-
172
- ## Configuration Options
173
-
174
- ### Basic Configuration
175
-
176
- ```typescript
177
- new PrismaAdapter({
178
- prisma: prismaClient, // Required: Your Prisma client
179
- });
180
- ```
181
-
182
- ### Custom Table Names
183
-
184
- ```typescript
185
- new PrismaAdapter({
186
- prisma,
187
- tables: {
188
- sessions: "myCustomSessions",
189
- messages: "myCustomMessages",
190
- },
191
- });
192
- ```
193
-
194
- ### Custom Field Mappings
195
-
196
- If your database uses different field names:
197
-
198
- ```typescript
199
- new PrismaAdapter({
200
- prisma,
201
- fieldMappings: {
202
- sessions: {
203
- userId: "user_id",
204
- createdAt: "created_at",
205
- updatedAt: "updated_at",
206
- },
207
- messages: {
208
- sessionId: "session_id",
209
- createdAt: "created_at",
210
- },
211
- },
212
- });
213
- ```
214
-
215
- ## Auto-Save Messages
216
-
217
- Enable automatic message persistence:
218
-
219
- ```typescript
220
- const agent = new Agent({
221
- name: "My Agent",
222
- provider: provider,
223
- persistence: {
224
- adapter: new PrismaAdapter({ prisma }),
225
- autoSave: true, // Default: true
226
- userId: "user_123",
227
- },
228
- });
229
- ```
230
-
231
- ## Using with Lifecycle Hooks
232
-
233
- The most powerful pattern - auto-sync context with database:
234
-
235
- ```typescript
236
- const agent = new Agent({
237
- name: "Smart Assistant",
238
- provider: provider,
239
- context: {
240
- userId: "user_123",
241
- sessionId: session.id,
242
- preferences: { theme: "light" },
243
- },
244
- hooks: {
245
- // Load fresh context before each response
246
- beforeRespond: async (ctx) => {
247
- const persistence = agent.getPersistenceManager();
248
- const session = await persistence?.getSession(ctx.sessionId);
249
- return {
250
- ...ctx,
251
- preferences: session?.collectedData?.preferences || ctx.preferences,
252
- };
253
- },
254
- // Auto-save context updates
255
- onContextUpdate: async (ctx) => {
256
- const persistence = agent.getPersistenceManager();
257
- await persistence?.updateCollectedData(ctx.sessionId, {
258
- preferences: ctx.preferences,
259
- });
260
- },
261
- },
262
- persistence: {
263
- adapter: new PrismaAdapter({ prisma }),
264
- },
265
- });
266
-
267
- // Now context updates are automatically persisted!
268
- await agent.updateContext({ preferences: { theme: "dark" } });
269
- ```
270
-
271
- ## Session Step Integration
272
-
273
- The new architecture automatically saves and loads `SessionState<TData>` which includes:
274
-
275
- - **Current route and step** - Track conversation progress
276
- - **Collected data** - All data collected via `schema` and `collect` fields
277
- - **Route history** - History of route transitions
278
- - **Metadata** - Session timestamps and custom data
279
-
280
- ### How It Works
281
-
282
- 1. **Auto-Save**: When `autoSave: true`, session step is automatically persisted after each `respond()` call
283
- 2. **Conversion**: `SessionState` is automatically converted to `SessionData` for storage
284
- 3. **Recovery**: Load session step from database to resume conversations
285
-
286
- ### Create Session with Step
287
-
288
- ```typescript
289
- const { sessionData, sessionStep } =
290
- await persistence.createSessionWithStep<YourDataType>({
291
- userId: "user_123",
292
- agentName: "My Agent",
293
- initialData: {
294
- /* optional pre-filled data */
295
- },
296
- });
297
-
298
- // sessionData: Database record
299
- // sessionStep: In-memory session step ready to use
300
- ```
301
-
302
- ### Save Session Step
303
-
304
- ```typescript
305
- // Manual save (not needed if autoSave: true)
306
- await persistence.saveSessionState(sessionId, sessionStep);
307
- ```
308
-
309
- ### Load Session Step
310
-
311
- ```typescript
312
- // Load session step from database
313
- const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
314
-
315
- // Load message history
316
- const history = await persistence.loadSessionHistory(sessionId);
317
-
318
- // Resume conversation
319
- const response = await agent.respond({
320
- history,
321
- session: sessionStep,
322
- });
323
- ```
324
-
325
- ### What Gets Persisted
326
-
327
- The session step stores:
328
-
329
- ```typescript
330
- {
331
- currentRoute: {
332
- id: "book_flight",
333
- title: "Book a Flight",
334
- enteredAt: Date
335
- },
336
- currentStep: {
337
- id: "ask_dates",
338
- description: "Ask about travel dates",
339
- enteredAt: Date
340
- },
341
- data: {
342
- destination: "Paris",
343
- departureDate: "2025-06-15",
344
- passengers: 2
345
- },
346
- routeHistory: [
347
- { routeId: "book_flight", enteredAt: Date, completed: false }
348
- ],
349
- metadata: {
350
- sessionId: "session_123",
351
- createdAt: Date,
352
- lastUpdatedAt: Date
353
- }
354
- }
355
- ```
356
-
357
- This data is stored in `collectedData` field as JSON in the database.
358
-
359
- ## PersistenceManager API
360
-
361
- Access via `agent.getPersistenceManager()`:
362
-
363
- ### Session Methods
364
-
365
- ```typescript
366
- // Create session with step support (NEW!)
367
- const { sessionData, sessionStep } =
368
- await persistence.createSessionWithStep<YourDataType>({
369
- userId: "user_123",
370
- agentName: "My Agent",
371
- initialData: {
372
- /* optional */
373
- },
374
- });
375
-
376
- // Save session step (NEW!)
377
- await persistence.saveSessionState(sessionId, sessionStep);
378
-
379
- // Load session step (NEW!)
380
- const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
381
-
382
- // Create session (legacy)
383
- await persistence.createSession({
384
- userId: "user_123",
385
- agentName: "My Agent",
386
- initialData: { key: "value" },
387
- });
388
-
389
- // Get session
390
- await persistence.getSession(sessionId);
391
-
392
- // Find active session for user
393
- await persistence.findActiveSession(userId);
394
-
395
- // Get all user sessions
396
- await persistence.getUserSessions(userId);
397
-
398
- // Update session
399
- await persistence.updateSessionStatus(sessionId, "completed");
400
- await persistence.updateCollectedData(sessionId, { key: "value" });
401
- await persistence.updateRouteStep(sessionId, routeId, stepId);
402
-
403
- // Complete/abandon session
404
- await persistence.completeSession(sessionId);
405
- await persistence.abandonSession(sessionId);
406
-
407
- // Delete session
408
- await persistence.deleteSession(sessionId);
409
- ```
410
-
411
- ### Message Methods
412
-
413
- ```typescript
414
- // Save message
415
- await persistence.saveMessage({
416
- sessionId: session.id,
417
- userId: "user_123",
418
- role: "user" | "agent" | "system",
419
- content: "Hello!",
420
- route: "route_id",
421
- step: "step_id",
422
- toolCalls: [...],
423
- });
424
-
425
- // Get messages
426
- await persistence.getSessionMessages(sessionId);
427
- await persistence.getUserMessages(userId);
428
-
429
- // Load as Event history
430
- await persistence.loadSessionHistory(sessionId);
431
- ```
432
-
433
- ## Creating Custom Adapters
434
-
435
- Create adapters for any database:
436
-
437
- ```typescript
438
- import { PersistenceAdapter, SessionRepository, MessageRepository } from "@falai/agent";
439
-
440
- class MyDatabaseAdapter implements PersistenceAdapter {
441
- public readonly sessionRepository: SessionRepository;
442
- public readonly messageRepository: MessageRepository;
443
-
444
- constructor(config: MyConfig) {
445
- this.sessionRepository = new MySessionRepository(config);
446
- this.messageRepository = new MyMessageRepository(config);
447
- }
448
-
449
- async initialize?(): Promise<void> {
450
- // Optional: Setup tables/indexes
451
- }
452
-
453
- async disconnect?(): Promise<void> {
454
- // Optional: Cleanup
455
- }
456
- }
457
-
458
- // Use it
459
- const agent = new Agent({
460
- persistence: {
461
- adapter: new MyDatabaseAdapter({ ... }),
462
- },
463
- });
464
- ```
465
-
466
- ## Examples
467
-
468
- ### Complete Example
469
-
470
- See `examples/prisma-persistence.ts` for a full working example.
471
-
472
- ### Minimal Example
473
-
474
- ```typescript
475
- import { Agent, PrismaAdapter } from "@falai/agent";
476
- import { PrismaClient } from "@prisma/client";
477
-
478
- const prisma = new PrismaClient();
479
- const agent = new Agent({
480
- name: "Assistant",
481
- provider: provider,
482
- persistence: {
483
- adapter: new PrismaAdapter({ prisma }),
484
- },
485
- });
486
-
487
- const persistence = agent.getPersistenceManager();
488
- const session = await persistence.createSession({ userId: "user_123" });
489
- const history = await persistence.loadSessionHistory(session.id);
490
- const response = await agent.respond({ history });
491
- await persistence.saveMessage({
492
- sessionId: session.id,
493
- role: "agent",
494
- content: response.message,
495
- });
496
- ```
497
-
498
- ## Database Schema Details
499
-
500
- ### SessionData Fields
501
-
502
- - `id`: Unique session identifier
503
- - `userId`: Optional user identifier
504
- - `agentName`: Name of the agent
505
- - `status`: `"active" | "completed" | "abandoned"`
506
- - `currentRoute`: Current route ID
507
- - `currentStep`: Current step ID
508
- - `collectedData`: JSON object for custom data
509
- - `messageCount`: Number of messages in session
510
- - `lastMessageAt`: Timestamp of last message
511
- - `completedAt`: When session was completed
512
- - `createdAt`: Session creation time
513
- - `updatedAt`: Last update time
514
-
515
- ### MessageData Fields
516
-
517
- - `id`: Unique message identifier
518
- - `sessionId`: Reference to session
519
- - `userId`: Optional user identifier
520
- - `role`: `"user" | "agent" | "system"`
521
- - `content`: Message text
522
- - `route`: Route ID when message was sent
523
- - `step`: Step ID when message was sent
524
- - `toolCalls`: Array of tool calls (if any)
525
- - `event`: Full event data (optional)
526
- - `createdAt`: Message creation time
527
-
528
- ## Best Practices
529
-
530
- 1. ✅ **Use `createSessionWithStep()`** - Get both database record and session step in one call
531
- 2. ✅ **Enable `autoSave: true`** - Automatically persist session step after each response
532
- 3. ✅ **Define extraction schemas** - Use `schema` in routes for structured data collection
533
- 4. ✅ **Pass session step** - Always pass `session` parameter to `agent.respond()`
534
- 5. ✅ **Load session step** - Use `loadSessionState()` to resume conversations
535
- 6. ✅ **Store collected data** - Leverage `collectedData.data` for user input tracking
536
- 7. ✅ **Index frequently queried fields** - Add database indexes on `userId`, `status`, etc.
537
- 8. ✅ **Use cascading deletes** - Clean up messages automatically when deleting sessions
538
- 9. ✅ **Complete sessions** - Mark sessions as completed when conversation ends
539
- 10. ✅ **Handle errors gracefully** - Wrap persistence calls in try-catch blocks
540
-
541
- ## Troubleshooting
542
-
543
- ### "Cannot find module '@prisma/client'"
544
-
545
- Install Prisma:
546
-
547
- ```bash
548
- npm install @prisma/client prisma
549
- npx prisma generate
550
- ```
551
-
552
- ### "Table not found"
553
-
554
- Run migrations:
555
-
556
- ```bash
557
- npx prisma migrate dev
558
- ```
559
-
560
- ### Custom schema not working
561
-
562
- Check your field mappings match your actual database schema.
563
-
564
- ## Other Databases
565
-
566
- The adapter pattern works with any database. Built-in adapters:
567
-
568
- ### Redis
569
-
570
- Perfect for high-throughput, real-time applications:
571
-
572
- ```typescript
573
- import { RedisAdapter } from "@falai/agent";
574
- import Redis from "ioredis";
575
-
576
- const redis = new Redis();
577
-
578
- const agent = new Agent({
579
- persistence: {
580
- adapter: new RedisAdapter({
581
- redis,
582
- keyPrefix: "agent:", // Optional: custom prefix
583
- sessionTTL: 24 * 60 * 60, // Optional: 24 hours
584
- messageTTL: 7 * 24 * 60 * 60, // Optional: 7 days
585
- }),
586
- },
587
- });
588
- ```
589
-
590
- **Install:** `npm install ioredis` or `npm install redis`
591
-
592
- ### More Adapters
593
-
594
- All adapters are production-ready and available now:
595
-
596
- - **MongoDB**: Document-based storage ✅
597
- - **PostgreSQL**: Raw SQL for custom schemas ✅
598
- - **SQLite**: Lightweight file-based database ✅
599
- - **OpenSearch**: Full-text search & analytics ✅
600
- - **Memory**: Built-in for testing ✅
601
-
602
- Create your own adapter by implementing the `PersistenceAdapter` interface!
603
-
604
- ### MongoDB
605
-
606
- Document-based storage with flexible schema:
607
-
608
- ```typescript
609
- import { MongoAdapter } from "@falai/agent";
610
- import { MongoClient } from "mongodb";
611
-
612
- const client = new MongoClient("mongodb://localhost:27017");
613
- await client.connect();
614
-
615
- const agent = new Agent({
616
- persistence: {
617
- adapter: new MongoAdapter({
618
- client,
619
- databaseName: "myapp",
620
- collections: {
621
- // Optional: custom names
622
- sessions: "agent_sessions",
623
- messages: "agent_messages",
624
- },
625
- }),
626
- },
627
- });
628
- ```
629
-
630
- **Install:** `npm install mongodb`
631
-
632
- ### PostgreSQL
633
-
634
- Raw SQL adapter with auto-table creation:
635
-
636
- ```typescript
637
- import { PostgreSQLAdapter } from "@falai/agent";
638
- import { Client } from "pg";
639
-
640
- const client = new Client({
641
- host: "localhost",
642
- database: "myapp",
643
- user: "postgres",
644
- password: "password",
645
- });
646
- await client.connect();
647
-
648
- const adapter = new PostgreSQLAdapter({
649
- client,
650
- tables: {
651
- // Optional: custom names
652
- sessions: "agent_sessions",
653
- messages: "agent_messages",
654
- },
655
- });
656
-
657
- // Auto-create tables with indexes
658
- await adapter.initialize();
659
-
660
- const agent = new Agent({
661
- persistence: {
662
- adapter,
663
- },
664
- });
665
- ```
666
-
667
- **Install:** `npm install pg`
668
-
669
- **Note:** PostgreSQL adapter includes `initialize()` method to auto-create tables with proper indexes and foreign keys.
670
-
671
- ### SQLite
672
-
673
- Lightweight, file-based database for local development:
674
-
675
- ```typescript
676
- import { SQLiteAdapter } from "@falai/agent";
677
- import Database from "better-sqlite3";
678
-
679
- const db = new Database("agent.db");
680
-
681
- const adapter = new SQLiteAdapter({ db });
682
-
683
- // Auto-create tables
684
- await adapter.initialize();
685
-
686
- const agent = new Agent({
687
- persistence: { adapter },
688
- });
689
- ```
690
-
691
- **Install:** `npm install better-sqlite3`
692
-
693
- **Perfect for:**
694
-
695
- - Local development
696
- - Testing
697
- - Desktop applications
698
- - Single-user apps
699
-
700
- ### OpenSearch
701
-
702
- Full-text search and analytics-powered persistence. Also compatible with Elasticsearch 7.x:
703
-
704
- ```typescript
705
- import { OpenSearchAdapter } from "@falai/agent";
706
- import { Client } from "@opensearch-project/opensearch";
707
-
708
- const client = new Client({
709
- node: "https://localhost:9200",
710
- auth: {
711
- username: "admin",
712
- password: "admin",
713
- },
714
- });
715
-
716
- const adapter = new OpenSearchAdapter(client, {
717
- indices: {
718
- sessions: "agent_sessions",
719
- messages: "agent_messages",
720
- },
721
- autoCreateIndices: true, // Auto-create indices with mappings
722
- refresh: "wait_for", // Ensure documents are searchable immediately
723
- });
724
-
725
- // Auto-create indices with mappings
726
- await adapter.initialize();
727
-
728
- const agent = new Agent({
729
- persistence: { adapter },
730
- });
731
- ```
732
-
733
- **Install:** `npm install @opensearch-project/opensearch`
734
-
735
- **Perfect for:**
736
-
737
- - Full-text search across conversations
738
- - Analytics and aggregations
739
- - Time-series analysis
740
- - AWS OpenSearch Service
741
- - Elasticsearch 7.x users
742
-
743
- **Advanced features:**
744
-
745
- ```typescript
746
- // Get OpenSearch client for custom queries
747
- const pm = agent.getPersistenceManager();
748
- if (pm) {
749
- const messages = await pm.getSessionMessages(sessionId);
750
-
751
- // Now use the client directly for advanced queries
752
- const results = await client.search({
753
- index: "agent_messages",
754
- body: {
755
- query: {
756
- match: {
757
- content: "flight booking",
758
- },
759
- },
760
- aggregations: {
761
- by_route: {
762
- terms: { field: "route" },
763
- },
764
- },
765
- },
766
- });
767
- }
768
- ```
769
-
770
- ### Memory (Built-in)
771
-
772
- Zero-dependency in-memory storage for testing:
773
-
774
- ```typescript
775
- import { MemoryAdapter } from "@falai/agent";
776
-
777
- const agent = new Agent({
778
- persistence: {
779
- adapter: new MemoryAdapter(),
780
- userId: "test_user",
781
- },
782
- });
783
-
784
- // Perfect for unit tests - no database setup required!
785
- ```
786
-
787
- **Features:**
788
-
789
- - No installation required ✨
790
- - Perfect for testing
791
- - Data snapshot for debugging
792
- - Clear method for test cleanup
793
-
794
- **Example test:**
795
-
796
- ```typescript
797
- describe("Agent persistence", () => {
798
- const adapter = new MemoryAdapter();
799
-
800
- afterEach(() => {
801
- adapter.clear(); // Clean step between tests
802
- });
803
-
804
- it("should save session", async () => {
805
- const agent = new Agent({
806
- persistence: { adapter },
807
- });
808
-
809
- // Test your logic...
810
-
811
- const snapshot = adapter.getSnapshot();
812
- expect(snapshot.sessions).toHaveLength(1);
813
- });
814
- });
815
- ```