@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
@@ -10,7 +10,11 @@ import type {
10
10
  MessageData,
11
11
  SessionStatus,
12
12
  PersistenceAdapter,
13
- } from "../types/persistence";
13
+ CollectedStateData,
14
+ MessageRole,
15
+ Event,
16
+ CreateSessionData,
17
+ } from "../types";
14
18
 
15
19
  /**
16
20
  * Prisma model operations
@@ -115,8 +119,10 @@ export interface PrismaAdapterOptions {
115
119
  * });
116
120
  * ```
117
121
  */
118
- export class PrismaAdapter implements PersistenceAdapter {
119
- public readonly sessionRepository: SessionRepository;
122
+ export class PrismaAdapter<TData = Record<string, unknown>>
123
+ implements PersistenceAdapter<TData>
124
+ {
125
+ public readonly sessionRepository: SessionRepository<TData>;
120
126
  public readonly messageRepository: MessageRepository;
121
127
  private prisma: PrismaClient;
122
128
  private options: Required<Omit<PrismaAdapterOptions, "fieldMappings">> & {
@@ -137,7 +143,7 @@ export class PrismaAdapter implements PersistenceAdapter {
137
143
  };
138
144
 
139
145
  // Initialize repositories
140
- this.sessionRepository = new PrismaSessionRepository(
146
+ this.sessionRepository = new PrismaSessionRepository<TData>(
141
147
  this.prisma,
142
148
  this.options.tables.sessions!,
143
149
  this.options.fieldMappings?.sessions
@@ -191,15 +197,17 @@ export class PrismaAdapter implements PersistenceAdapter {
191
197
  * Prisma Session Repository
192
198
  * Internal implementation - users should use PrismaAdapter instead
193
199
  */
194
- class PrismaSessionRepository implements SessionRepository {
200
+ class PrismaSessionRepository<TData = Record<string, unknown>>
201
+ implements SessionRepository<TData>
202
+ {
195
203
  private prisma: PrismaClient;
196
204
  private tableName: string;
197
- private fieldMap: Partial<Record<keyof SessionData, string>>;
205
+ private fieldMap: Partial<Record<keyof SessionData<TData>, string>>;
198
206
 
199
207
  constructor(
200
208
  prismaClient: PrismaClient,
201
209
  tableName: string,
202
- fieldMappings?: Partial<Record<keyof SessionData, string>>
210
+ fieldMappings?: Partial<Record<keyof SessionData<TData>, string>>
203
211
  ) {
204
212
  this.prisma = prismaClient;
205
213
  this.tableName = tableName;
@@ -212,7 +220,7 @@ class PrismaSessionRepository implements SessionRepository {
212
220
  private mapFields(data: Record<string, unknown>): Record<string, unknown> {
213
221
  const mapped: Record<string, unknown> = {};
214
222
  for (const [key, value] of Object.entries(data)) {
215
- const mappedKey = this.fieldMap[key as keyof SessionData] || key;
223
+ const mappedKey = this.fieldMap[key as keyof SessionData<TData>] || key;
216
224
  mapped[mappedKey] = value;
217
225
  }
218
226
  return mapped;
@@ -221,8 +229,8 @@ class PrismaSessionRepository implements SessionRepository {
221
229
  /**
222
230
  * Map custom schema field names back to our standard field names
223
231
  */
224
- private unmapFields(data: Record<string, unknown>): SessionData {
225
- if (!data) return data as SessionData;
232
+ private unmapFields(data: Record<string, unknown>): SessionData<TData> {
233
+ if (!data) throw new Error("Data cannot be null");
226
234
 
227
235
  const reverseMap: Record<string, string> = {};
228
236
  for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
@@ -235,31 +243,48 @@ class PrismaSessionRepository implements SessionRepository {
235
243
  unmapped[unmappedKey] = value;
236
244
  }
237
245
 
238
- return unmapped as unknown as SessionData;
246
+ // Construct proper SessionData object
247
+ return {
248
+ id: unmapped.id as string,
249
+ userId: unmapped.userId as string | undefined,
250
+ agentName: unmapped.agentName as string | undefined,
251
+ status: unmapped.status as "active" | "completed" | "abandoned",
252
+ currentRoute: unmapped.currentRoute as string | undefined,
253
+ currentStep: unmapped.currentStep as string | undefined,
254
+ collectedData: unmapped.collectedData as CollectedStateData<TData>,
255
+ messageCount: unmapped.messageCount as number | undefined,
256
+ lastMessageAt: unmapped.lastMessageAt as Date | undefined,
257
+ completedAt: unmapped.completedAt as Date | undefined,
258
+ createdAt: unmapped.createdAt as Date,
259
+ updatedAt: unmapped.updatedAt as Date,
260
+ };
239
261
  }
240
262
 
241
263
  private getModel(): PrismaModel {
242
264
  return this.prisma[this.tableName] as PrismaModel;
243
265
  }
244
266
 
245
- async create(
246
- data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
247
- ): Promise<SessionData> {
248
- const mapped = this.mapFields(data as Record<string, unknown>);
267
+ async create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
268
+ const mapped = this.mapFields({
269
+ ...data,
270
+ id:
271
+ data.id ||
272
+ `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
273
+ });
249
274
  const result = await this.getModel().create({
250
275
  data: mapped,
251
276
  });
252
277
  return this.unmapFields(result);
253
278
  }
254
279
 
255
- async findById(id: string): Promise<SessionData | null> {
280
+ async findById(id: string): Promise<SessionData<TData> | null> {
256
281
  const result = await this.getModel().findUnique({
257
282
  where: { [this.fieldMap.id || "id"]: id },
258
283
  });
259
284
  return result ? this.unmapFields(result) : null;
260
285
  }
261
286
 
262
- async findActiveByUserId(userId: string): Promise<SessionData | null> {
287
+ async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
263
288
  const result = await this.getModel().findFirst({
264
289
  where: {
265
290
  [this.fieldMap.userId || "userId"]: userId,
@@ -272,7 +297,10 @@ class PrismaSessionRepository implements SessionRepository {
272
297
  return result ? this.unmapFields(result) : null;
273
298
  }
274
299
 
275
- async findByUserId(userId: string, limit = 100): Promise<SessionData[]> {
300
+ async findByUserId(
301
+ userId: string,
302
+ limit = 100
303
+ ): Promise<SessionData<TData>[]> {
276
304
  const results = await this.getModel().findMany({
277
305
  where: {
278
306
  [this.fieldMap.userId || "userId"]: userId,
@@ -287,8 +315,8 @@ class PrismaSessionRepository implements SessionRepository {
287
315
 
288
316
  async update(
289
317
  id: string,
290
- data: Partial<Omit<SessionData, "id" | "createdAt">>
291
- ): Promise<SessionData | null> {
318
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
319
+ ): Promise<SessionData<TData> | null> {
292
320
  const mapped = this.mapFields(data as Record<string, unknown>);
293
321
  const result = await this.getModel().update({
294
322
  where: { [this.fieldMap.id || "id"]: id },
@@ -304,7 +332,7 @@ class PrismaSessionRepository implements SessionRepository {
304
332
  id: string,
305
333
  status: SessionStatus,
306
334
  completedAt?: Date
307
- ): Promise<SessionData | null> {
335
+ ): Promise<SessionData<TData> | null> {
308
336
  const data: Record<string, unknown> = {
309
337
  [this.fieldMap.status || "status"]: status,
310
338
  [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
@@ -321,8 +349,8 @@ class PrismaSessionRepository implements SessionRepository {
321
349
 
322
350
  async updateCollectedData(
323
351
  id: string,
324
- collectedData: Record<string, unknown>
325
- ): Promise<SessionData | null> {
352
+ collectedData: CollectedStateData<TData>
353
+ ): Promise<SessionData<TData> | null> {
326
354
  const result = await this.getModel().update({
327
355
  where: { [this.fieldMap.id || "id"]: id },
328
356
  data: {
@@ -337,7 +365,7 @@ class PrismaSessionRepository implements SessionRepository {
337
365
  id: string,
338
366
  route?: string,
339
367
  step?: string
340
- ): Promise<SessionData | null> {
368
+ ): Promise<SessionData<TData> | null> {
341
369
  const data: Record<string, unknown> = {
342
370
  [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
343
371
  };
@@ -354,7 +382,7 @@ class PrismaSessionRepository implements SessionRepository {
354
382
  return this.unmapFields(result);
355
383
  }
356
384
 
357
- async incrementMessageCount(id: string): Promise<SessionData | null> {
385
+ async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
358
386
  const result = await this.getModel().update({
359
387
  where: { [this.fieldMap.id || "id"]: id },
360
388
  data: {
@@ -413,7 +441,7 @@ class PrismaMessageRepository implements MessageRepository {
413
441
  * Map custom schema field names back to our standard field names
414
442
  */
415
443
  private unmapFields(data: Record<string, unknown>): MessageData {
416
- if (!data) return data as MessageData;
444
+ if (!data) throw new Error("Data cannot be null");
417
445
 
418
446
  const reverseMap: Record<string, string> = {};
419
447
  for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
@@ -426,7 +454,21 @@ class PrismaMessageRepository implements MessageRepository {
426
454
  unmapped[unmappedKey] = value;
427
455
  }
428
456
 
429
- return unmapped as unknown as MessageData;
457
+ // Construct proper MessageData object
458
+ return {
459
+ id: unmapped.id as string,
460
+ sessionId: unmapped.sessionId as string,
461
+ userId: unmapped.userId as string | undefined,
462
+ role: unmapped.role as MessageRole,
463
+ content: unmapped.content as string,
464
+ route: unmapped.route as string | undefined,
465
+ step: unmapped.step as string | undefined,
466
+ toolCalls: unmapped.toolCalls as
467
+ | Array<{ toolName: string; arguments: Record<string, unknown> }>
468
+ | undefined,
469
+ event: unmapped.event as Event | undefined,
470
+ createdAt: unmapped.createdAt as Date,
471
+ };
430
472
  }
431
473
 
432
474
  private getModel(): PrismaModel {
@@ -4,13 +4,15 @@
4
4
  */
5
5
 
6
6
  import type {
7
- SessionRepository,
7
+ MessageData,
8
8
  MessageRepository,
9
+ PersistenceAdapter,
9
10
  SessionData,
10
- MessageData,
11
+ SessionRepository,
11
12
  SessionStatus,
12
- PersistenceAdapter,
13
- } from "../types/persistence";
13
+ CollectedStateData,
14
+ } from "../types";
15
+ import { createSessionId } from "../utils";
14
16
 
15
17
  /**
16
18
  * Redis client interface - matches ioredis/redis clients
@@ -72,8 +74,10 @@ export interface RedisAdapterOptions {
72
74
  * });
73
75
  * ```
74
76
  */
75
- export class RedisAdapter implements PersistenceAdapter {
76
- public readonly sessionRepository: SessionRepository;
77
+ export class RedisAdapter<TData = Record<string, unknown>>
78
+ implements PersistenceAdapter<TData>
79
+ {
80
+ public readonly sessionRepository: SessionRepository<TData>;
77
81
  public readonly messageRepository: MessageRepository;
78
82
  private redis: RedisClient;
79
83
  private keyPrefix: string;
@@ -86,7 +90,7 @@ export class RedisAdapter implements PersistenceAdapter {
86
90
  this.sessionTTL = options.sessionTTL || 7 * 24 * 60 * 60; // 7 days
87
91
  this.messageTTL = options.messageTTL || 30 * 24 * 60 * 60; // 30 days
88
92
 
89
- this.sessionRepository = new RedisSessionRepository(
93
+ this.sessionRepository = new RedisSessionRepository<TData>(
90
94
  this.redis,
91
95
  this.keyPrefix,
92
96
  this.sessionTTL
@@ -107,7 +111,9 @@ export class RedisAdapter implements PersistenceAdapter {
107
111
  /**
108
112
  * Redis Session Repository
109
113
  */
110
- class RedisSessionRepository implements SessionRepository {
114
+ class RedisSessionRepository<TData = Record<string, unknown>>
115
+ implements SessionRepository<TData>
116
+ {
111
117
  constructor(
112
118
  private redis: RedisClient,
113
119
  private keyPrefix: string,
@@ -123,11 +129,13 @@ class RedisSessionRepository implements SessionRepository {
123
129
  }
124
130
 
125
131
  async create(
126
- data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
127
- ): Promise<SessionData> {
128
- const id = `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
132
+ data: Omit<SessionData<TData>, "createdAt" | "updatedAt"> & {
133
+ id?: string;
134
+ }
135
+ ): Promise<SessionData<TData>> {
136
+ const id = data.id || createSessionId();
129
137
  const now = new Date();
130
- const session: SessionData = {
138
+ const session: SessionData<TData> = {
131
139
  ...data,
132
140
  id,
133
141
  createdAt: now,
@@ -150,18 +158,18 @@ class RedisSessionRepository implements SessionRepository {
150
158
  return session;
151
159
  }
152
160
 
153
- async findById(id: string): Promise<SessionData | null> {
161
+ async findById(id: string): Promise<SessionData<TData> | null> {
154
162
  const data = await this.redis.get(this.getKey(id));
155
163
  if (!data) return null;
156
164
  try {
157
- return JSON.parse(data) as SessionData;
165
+ return JSON.parse(data) as SessionData<TData>;
158
166
  } catch (error) {
159
167
  console.error(`Error parsing session data for id ${id}:`, error);
160
168
  return null;
161
169
  }
162
170
  }
163
171
 
164
- async findActiveByUserId(userId: string): Promise<SessionData | null> {
172
+ async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
165
173
  const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
166
174
 
167
175
  for (const sessionId of Object.keys(sessionIds)) {
@@ -174,9 +182,12 @@ class RedisSessionRepository implements SessionRepository {
174
182
  return null;
175
183
  }
176
184
 
177
- async findByUserId(userId: string, limit = 100): Promise<SessionData[]> {
185
+ async findByUserId(
186
+ userId: string,
187
+ limit = 100
188
+ ): Promise<SessionData<TData>[]> {
178
189
  const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
179
- const sessions: SessionData[] = [];
190
+ const sessions: SessionData<TData>[] = [];
180
191
 
181
192
  for (const sessionId of Object.keys(sessionIds).slice(0, limit)) {
182
193
  const session = await this.findById(sessionId);
@@ -186,18 +197,19 @@ class RedisSessionRepository implements SessionRepository {
186
197
  }
187
198
 
188
199
  return sessions.sort(
189
- (a, b) => b.createdAt.getTime() - a.createdAt.getTime()
200
+ (a, b) =>
201
+ new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
190
202
  );
191
203
  }
192
204
 
193
205
  async update(
194
206
  id: string,
195
- data: Partial<Omit<SessionData, "id" | "createdAt">>
196
- ): Promise<SessionData | null> {
207
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
208
+ ): Promise<SessionData<TData> | null> {
197
209
  const existing = await this.findById(id);
198
210
  if (!existing) return null;
199
211
 
200
- const updated: SessionData = {
212
+ const updated: SessionData<TData> = {
201
213
  ...existing,
202
214
  ...data,
203
215
  updatedAt: new Date(),
@@ -212,14 +224,14 @@ class RedisSessionRepository implements SessionRepository {
212
224
  id: string,
213
225
  status: SessionStatus,
214
226
  completedAt?: Date
215
- ): Promise<SessionData | null> {
227
+ ): Promise<SessionData<TData> | null> {
216
228
  return this.update(id, { status, completedAt });
217
229
  }
218
230
 
219
231
  async updateCollectedData(
220
232
  id: string,
221
- collectedData: Record<string, unknown>
222
- ): Promise<SessionData | null> {
233
+ collectedData: CollectedStateData<TData>
234
+ ): Promise<SessionData<TData> | null> {
223
235
  return this.update(id, { collectedData });
224
236
  }
225
237
 
@@ -227,11 +239,11 @@ class RedisSessionRepository implements SessionRepository {
227
239
  id: string,
228
240
  route?: string,
229
241
  step?: string
230
- ): Promise<SessionData | null> {
242
+ ): Promise<SessionData<TData> | null> {
231
243
  return this.update(id, { currentRoute: route, currentStep: step });
232
244
  }
233
245
 
234
- async incrementMessageCount(id: string): Promise<SessionData | null> {
246
+ async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
235
247
  const session = await this.findById(id);
236
248
  if (!session) return null;
237
249
 
@@ -10,7 +10,10 @@ import type {
10
10
  MessageData,
11
11
  SessionStatus,
12
12
  PersistenceAdapter,
13
- } from "../types/persistence";
13
+ CollectedStateData,
14
+ CreateSessionData,
15
+ } from "../types";
16
+ import { createSessionId } from "../utils";
14
17
 
15
18
  /**
16
19
  * SQLite database interface - matches better-sqlite3
@@ -68,8 +71,10 @@ export interface SQLiteAdapterOptions {
68
71
  * });
69
72
  * ```
70
73
  */
71
- export class SQLiteAdapter implements PersistenceAdapter {
72
- public readonly sessionRepository: SessionRepository;
74
+ export class SQLiteAdapter<TData = Record<string, unknown>>
75
+ implements PersistenceAdapter<TData>
76
+ {
77
+ public readonly sessionRepository: SessionRepository<TData>;
73
78
  public readonly messageRepository: MessageRepository;
74
79
  private db: SqliteDatabase;
75
80
 
@@ -79,7 +84,10 @@ export class SQLiteAdapter implements PersistenceAdapter {
79
84
  const sessionTable = options.tables?.sessions || "agent_sessions";
80
85
  const messageTable = options.tables?.messages || "agent_messages";
81
86
 
82
- this.sessionRepository = new SQLiteSessionRepository(this.db, sessionTable);
87
+ this.sessionRepository = new SQLiteSessionRepository<TData>(
88
+ this.db,
89
+ sessionTable
90
+ );
83
91
  this.messageRepository = new SQLiteMessageRepository(this.db, messageTable);
84
92
  }
85
93
 
@@ -145,16 +153,16 @@ export class SQLiteAdapter implements PersistenceAdapter {
145
153
  /**
146
154
  * SQLite Session Repository
147
155
  */
148
- class SQLiteSessionRepository implements SessionRepository {
156
+ class SQLiteSessionRepository<TData = Record<string, unknown>>
157
+ implements SessionRepository<TData>
158
+ {
149
159
  constructor(private db: SqliteDatabase, private tableName: string) {}
150
160
 
151
- create(
152
- data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
153
- ): Promise<SessionData> {
154
- const id = `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
161
+ create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
162
+ const id = data.id || createSessionId();
155
163
  const now = new Date();
156
164
 
157
- const session: SessionData = {
165
+ const session: SessionData<TData> = {
158
166
  ...data,
159
167
  id,
160
168
  status: data.status || "active",
@@ -183,7 +191,7 @@ class SQLiteSessionRepository implements SessionRepository {
183
191
  return Promise.resolve(session);
184
192
  }
185
193
 
186
- findById(id: string): Promise<SessionData | null> {
194
+ findById(id: string): Promise<SessionData<TData> | null> {
187
195
  const stmt = this.db.prepare(
188
196
  `SELECT * FROM ${this.tableName} WHERE id = ?`
189
197
  );
@@ -191,7 +199,7 @@ class SQLiteSessionRepository implements SessionRepository {
191
199
  return Promise.resolve(row ? this.deserializeSession(row) : null);
192
200
  }
193
201
 
194
- findActiveByUserId(userId: string): Promise<SessionData | null> {
202
+ findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
195
203
  const stmt = this.db.prepare(
196
204
  `SELECT * FROM ${this.tableName}
197
205
  WHERE user_id = ? AND status = 'active'
@@ -202,7 +210,7 @@ class SQLiteSessionRepository implements SessionRepository {
202
210
  return Promise.resolve(row ? this.deserializeSession(row) : null);
203
211
  }
204
212
 
205
- findByUserId(userId: string, limit = 100): Promise<SessionData[]> {
213
+ findByUserId(userId: string, limit = 100): Promise<SessionData<TData>[]> {
206
214
  const stmt = this.db.prepare(
207
215
  `SELECT * FROM ${this.tableName}
208
216
  WHERE user_id = ?
@@ -215,8 +223,8 @@ class SQLiteSessionRepository implements SessionRepository {
215
223
 
216
224
  async update(
217
225
  id: string,
218
- data: Partial<Omit<SessionData, "id" | "createdAt">>
219
- ): Promise<SessionData | null> {
226
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
227
+ ): Promise<SessionData<TData> | null> {
220
228
  const fields: string[] = [];
221
229
  const values: unknown[] = [];
222
230
 
@@ -270,14 +278,14 @@ class SQLiteSessionRepository implements SessionRepository {
270
278
  id: string,
271
279
  status: SessionStatus,
272
280
  completedAt?: Date
273
- ): Promise<SessionData | null> {
281
+ ): Promise<SessionData<TData> | null> {
274
282
  return await this.update(id, { status, completedAt });
275
283
  }
276
284
 
277
285
  async updateCollectedData(
278
286
  id: string,
279
- collectedData: Record<string, unknown>
280
- ): Promise<SessionData | null> {
287
+ collectedData: CollectedStateData<TData>
288
+ ): Promise<SessionData<TData> | null> {
281
289
  return await this.update(id, { collectedData });
282
290
  }
283
291
 
@@ -285,14 +293,14 @@ class SQLiteSessionRepository implements SessionRepository {
285
293
  id: string,
286
294
  route?: string,
287
295
  step?: string
288
- ): Promise<SessionData | null> {
296
+ ): Promise<SessionData<TData> | null> {
289
297
  return await this.update(id, {
290
298
  currentRoute: route,
291
299
  currentStep: step,
292
300
  });
293
301
  }
294
302
 
295
- async incrementMessageCount(id: string): Promise<SessionData | null> {
303
+ async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
296
304
  const stmt = this.db.prepare(
297
305
  `UPDATE ${this.tableName}
298
306
  SET message_count = message_count + 1,
@@ -314,7 +322,7 @@ class SQLiteSessionRepository implements SessionRepository {
314
322
  return Promise.resolve(result.changes > 0);
315
323
  }
316
324
 
317
- private deserializeSession(row: Record<string, unknown>): SessionData {
325
+ private deserializeSession(row: Record<string, unknown>): SessionData<TData> {
318
326
  return {
319
327
  id: row.id as string,
320
328
  userId: (row.user_id as string) || undefined,
@@ -323,7 +331,9 @@ class SQLiteSessionRepository implements SessionRepository {
323
331
  currentRoute: (row.current_route as string) || undefined,
324
332
  currentStep: (row.current_step as string) || undefined,
325
333
  collectedData: row.collected_data
326
- ? (JSON.parse(row.collected_data as string) as Record<string, unknown>)
334
+ ? (JSON.parse(
335
+ row.collected_data as string
336
+ ) as CollectedStateData<TData>)
327
337
  : undefined,
328
338
  messageCount: (row.message_count as number) || 0,
329
339
  lastMessageAt: row.last_message_at