@falai/agent 0.1.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,553 @@
1
+ /**
2
+ * Prisma adapter for persistence
3
+ * Simple, provider-like API with automatic schema creation
4
+ */
5
+
6
+ import type {
7
+ SessionRepository,
8
+ MessageRepository,
9
+ SessionData,
10
+ MessageData,
11
+ SessionStatus,
12
+ PersistenceAdapter,
13
+ CollectedStateData,
14
+ MessageRole,
15
+ Event,
16
+ CreateSessionData,
17
+ } from "../types";
18
+ import { logger } from '../utils'
19
+
20
+ /**
21
+ * Prisma model operations
22
+ */
23
+ export interface PrismaModel {
24
+ create: (params: {
25
+ data: Record<string, unknown>;
26
+ }) => Promise<Record<string, unknown>>;
27
+ findUnique: (params: {
28
+ where: Record<string, unknown>;
29
+ }) => Promise<Record<string, unknown> | null>;
30
+ findFirst: (params: {
31
+ where: Record<string, unknown>;
32
+ orderBy?: Record<string, string>;
33
+ }) => Promise<Record<string, unknown> | null>;
34
+ findMany: (params: {
35
+ where: Record<string, unknown>;
36
+ orderBy?: Record<string, string>;
37
+ take?: number;
38
+ }) => Promise<Array<Record<string, unknown>>>;
39
+ update: (params: {
40
+ where: Record<string, unknown>;
41
+ data: Record<string, unknown>;
42
+ }) => Promise<Record<string, unknown>>;
43
+ delete: (params: {
44
+ where: Record<string, unknown>;
45
+ }) => Promise<Record<string, unknown>>;
46
+ deleteMany: (params: {
47
+ where: Record<string, unknown>;
48
+ }) => Promise<{ count: number }>;
49
+ }
50
+
51
+ /**
52
+ * Prisma client interface - matches the shape of a generated Prisma client
53
+ */
54
+ export interface PrismaClient extends Record<string, unknown> {
55
+ $queryRaw?: <T = unknown>(
56
+ query: TemplateStringsArray | string,
57
+ ...values: unknown[]
58
+ ) => Promise<T>;
59
+ $executeRaw?: (
60
+ query: TemplateStringsArray | string,
61
+ ...values: unknown[]
62
+ ) => Promise<number>;
63
+ $disconnect?: () => Promise<void>;
64
+ }
65
+
66
+ /**
67
+ * Configuration for field mappings
68
+ */
69
+ export interface FieldMappings {
70
+ sessions?: Partial<Record<keyof SessionData, string>>;
71
+ messages?: Partial<Record<keyof MessageData, string>>;
72
+ }
73
+
74
+ /**
75
+ * Options for creating a Prisma adapter
76
+ */
77
+ export interface PrismaAdapterOptions {
78
+ /**
79
+ * Prisma client instance
80
+ */
81
+ prisma: PrismaClient;
82
+
83
+ /**
84
+ * Table/model names (defaults to 'agentSession' and 'agentMessage')
85
+ */
86
+ tables?: {
87
+ sessions?: string;
88
+ messages?: string;
89
+ };
90
+
91
+ /**
92
+ * Field mappings (optional, if your schema uses different field names)
93
+ */
94
+ fieldMappings?: FieldMappings;
95
+
96
+ /**
97
+ * Whether to auto-create tables if they don't exist (default: false)
98
+ * Note: Only works if your Prisma client has $executeRaw method
99
+ */
100
+ autoMigrate?: boolean;
101
+ }
102
+
103
+ /**
104
+ * Prisma Adapter - Provider-style API for Prisma persistence
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * import { PrismaClient } from '@prisma/client';
109
+ * import { Agent, PrismaAdapter } from '@falai/agent';
110
+ *
111
+ * const prisma = new PrismaClient();
112
+ *
113
+ * const agent = new Agent({
114
+ * name: "My Agent",
115
+ * provider: provider,
116
+ * persistence: {
117
+ * adapter: new PrismaAdapter({ prisma }),
118
+ * userId: "user_123",
119
+ * },
120
+ * });
121
+ * ```
122
+ */
123
+ export class PrismaAdapter<TData = Record<string, unknown>>
124
+ implements PersistenceAdapter<TData>
125
+ {
126
+ public readonly sessionRepository: SessionRepository<TData>;
127
+ public readonly messageRepository: MessageRepository;
128
+ private prisma: PrismaClient;
129
+ private options: Required<Omit<PrismaAdapterOptions, "fieldMappings">> & {
130
+ fieldMappings?: FieldMappings;
131
+ };
132
+ private initialized = false;
133
+
134
+ constructor(options: PrismaAdapterOptions) {
135
+ this.prisma = options.prisma;
136
+ this.options = {
137
+ prisma: options.prisma,
138
+ tables: {
139
+ sessions: options.tables?.sessions || "agentSession",
140
+ messages: options.tables?.messages || "agentMessage",
141
+ },
142
+ fieldMappings: options.fieldMappings,
143
+ autoMigrate: options.autoMigrate ?? false,
144
+ };
145
+
146
+ // Initialize repositories
147
+ this.sessionRepository = new PrismaSessionRepository<TData>(
148
+ this.prisma,
149
+ this.options.tables.sessions!,
150
+ this.options.fieldMappings?.sessions
151
+ );
152
+
153
+ this.messageRepository = new PrismaMessageRepository(
154
+ this.prisma,
155
+ this.options.tables.messages!,
156
+ this.options.fieldMappings?.messages
157
+ );
158
+
159
+ // Auto-initialize if configured
160
+ if (this.options.autoMigrate) {
161
+ this.initialize().catch((error) => {
162
+ logger.error("[PrismaAdapter] Auto-migration failed:", error);
163
+ });
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Initialize the adapter (check/create tables)
169
+ * Called automatically if autoMigrate is enabled
170
+ */
171
+ async initialize(): Promise<void> {
172
+ if (this.initialized) return;
173
+
174
+ if (this.options.autoMigrate && this.prisma.$executeRaw) {
175
+ // Note: This is a simplified example. In production, use Prisma Migrate.
176
+ logger.warn(
177
+ "[PrismaAdapter] autoMigrate is experimental. Use Prisma Migrate for production."
178
+ );
179
+ // Table creation would go here, but it's database-specific
180
+ // Better to rely on Prisma Migrate
181
+ await Promise.resolve(); // Satisfy async requirement
182
+ }
183
+
184
+ this.initialized = true;
185
+ }
186
+
187
+ /**
188
+ * Disconnect from the database
189
+ */
190
+ async disconnect(): Promise<void> {
191
+ if (this.prisma.$disconnect) {
192
+ await this.prisma.$disconnect();
193
+ }
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Prisma Session Repository
199
+ * Internal implementation - users should use PrismaAdapter instead
200
+ */
201
+ class PrismaSessionRepository<TData = Record<string, unknown>>
202
+ implements SessionRepository<TData>
203
+ {
204
+ private prisma: PrismaClient;
205
+ private tableName: string;
206
+ private fieldMap: Partial<Record<keyof SessionData<TData>, string>>;
207
+
208
+ constructor(
209
+ prismaClient: PrismaClient,
210
+ tableName: string,
211
+ fieldMappings?: Partial<Record<keyof SessionData<TData>, string>>
212
+ ) {
213
+ this.prisma = prismaClient;
214
+ this.tableName = tableName;
215
+ this.fieldMap = fieldMappings || {};
216
+ }
217
+
218
+ /**
219
+ * Map our standard field names to custom schema field names
220
+ */
221
+ private mapFields(data: Record<string, unknown>): Record<string, unknown> {
222
+ const mapped: Record<string, unknown> = {};
223
+ for (const [key, value] of Object.entries(data)) {
224
+ const mappedKey = this.fieldMap[key as keyof SessionData<TData>] || key;
225
+ mapped[mappedKey] = value;
226
+ }
227
+ return mapped;
228
+ }
229
+
230
+ /**
231
+ * Map custom schema field names back to our standard field names
232
+ */
233
+ private unmapFields(data: Record<string, unknown>): SessionData<TData> {
234
+ if (!data) throw new Error("Data cannot be null");
235
+
236
+ const reverseMap: Record<string, string> = {};
237
+ for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
238
+ reverseMap[customKey] = standardKey;
239
+ }
240
+
241
+ const unmapped: Record<string, unknown> = {};
242
+ for (const [key, value] of Object.entries(data)) {
243
+ const unmappedKey = reverseMap[key] || key;
244
+ unmapped[unmappedKey] = value;
245
+ }
246
+
247
+ // Construct proper SessionData object
248
+ return {
249
+ id: unmapped.id as string,
250
+ userId: unmapped.userId as string | undefined,
251
+ agentName: unmapped.agentName as string | undefined,
252
+ status: unmapped.status as "active" | "completed" | "abandoned",
253
+ currentRoute: unmapped.currentRoute as string | undefined,
254
+ currentStep: unmapped.currentStep as string | undefined,
255
+ collectedData: unmapped.collectedData as CollectedStateData<TData>,
256
+ messageCount: unmapped.messageCount as number | undefined,
257
+ lastMessageAt: unmapped.lastMessageAt as Date | undefined,
258
+ completedAt: unmapped.completedAt as Date | undefined,
259
+ createdAt: unmapped.createdAt as Date,
260
+ updatedAt: unmapped.updatedAt as Date,
261
+ };
262
+ }
263
+
264
+ private getModel(): PrismaModel {
265
+ return this.prisma[this.tableName] as PrismaModel;
266
+ }
267
+
268
+ async create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
269
+ const mapped = this.mapFields({
270
+ ...data,
271
+ id:
272
+ data.id ||
273
+ `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
274
+ });
275
+ const result = await this.getModel().create({
276
+ data: mapped,
277
+ });
278
+ return this.unmapFields(result);
279
+ }
280
+
281
+ async findById(id: string): Promise<SessionData<TData> | null> {
282
+ const result = await this.getModel().findUnique({
283
+ where: { [this.fieldMap.id || "id"]: id },
284
+ });
285
+ return result ? this.unmapFields(result) : null;
286
+ }
287
+
288
+ async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
289
+ const result = await this.getModel().findFirst({
290
+ where: {
291
+ [this.fieldMap.userId || "userId"]: userId,
292
+ [this.fieldMap.status || "status"]: "active",
293
+ },
294
+ orderBy: {
295
+ [this.fieldMap.createdAt || "createdAt"]: "desc",
296
+ },
297
+ });
298
+ return result ? this.unmapFields(result) : null;
299
+ }
300
+
301
+ async findByUserId(
302
+ userId: string,
303
+ limit = 100
304
+ ): Promise<SessionData<TData>[]> {
305
+ const results = await this.getModel().findMany({
306
+ where: {
307
+ [this.fieldMap.userId || "userId"]: userId,
308
+ },
309
+ orderBy: {
310
+ [this.fieldMap.createdAt || "createdAt"]: "desc",
311
+ },
312
+ take: limit,
313
+ });
314
+ return results.map((r) => this.unmapFields(r));
315
+ }
316
+
317
+ async update(
318
+ id: string,
319
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
320
+ ): Promise<SessionData<TData> | null> {
321
+ const mapped = this.mapFields(data as Record<string, unknown>);
322
+ const result = await this.getModel().update({
323
+ where: { [this.fieldMap.id || "id"]: id },
324
+ data: {
325
+ ...mapped,
326
+ [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
327
+ },
328
+ });
329
+ return this.unmapFields(result);
330
+ }
331
+
332
+ async updateStatus(
333
+ id: string,
334
+ status: SessionStatus,
335
+ completedAt?: Date
336
+ ): Promise<SessionData<TData> | null> {
337
+ const data: Record<string, unknown> = {
338
+ [this.fieldMap.status || "status"]: status,
339
+ [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
340
+ };
341
+ if (completedAt) {
342
+ data[this.fieldMap.completedAt || "completedAt"] = completedAt;
343
+ }
344
+ const result = await this.getModel().update({
345
+ where: { [this.fieldMap.id || "id"]: id },
346
+ data,
347
+ });
348
+ return this.unmapFields(result);
349
+ }
350
+
351
+ async updateCollectedData(
352
+ id: string,
353
+ collectedData: CollectedStateData<TData>
354
+ ): Promise<SessionData<TData> | null> {
355
+ const result = await this.getModel().update({
356
+ where: { [this.fieldMap.id || "id"]: id },
357
+ data: {
358
+ [this.fieldMap.collectedData || "collectedData"]: collectedData,
359
+ [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
360
+ },
361
+ });
362
+ return this.unmapFields(result);
363
+ }
364
+
365
+ async updateRouteStep(
366
+ id: string,
367
+ route?: string,
368
+ step?: string
369
+ ): Promise<SessionData<TData> | null> {
370
+ const data: Record<string, unknown> = {
371
+ [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
372
+ };
373
+ if (route !== undefined) {
374
+ data[this.fieldMap.currentRoute || "currentRoute"] = route;
375
+ }
376
+ if (step !== undefined) {
377
+ data[this.fieldMap.currentStep || "currentStep"] = step;
378
+ }
379
+ const result = await this.getModel().update({
380
+ where: { [this.fieldMap.id || "id"]: id },
381
+ data,
382
+ });
383
+ return this.unmapFields(result);
384
+ }
385
+
386
+ async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
387
+ const result = await this.getModel().update({
388
+ where: { [this.fieldMap.id || "id"]: id },
389
+ data: {
390
+ [this.fieldMap.messageCount || "messageCount"]: { increment: 1 },
391
+ [this.fieldMap.lastMessageAt || "lastMessageAt"]: new Date(),
392
+ [this.fieldMap.updatedAt || "updatedAt"]: new Date(),
393
+ },
394
+ });
395
+ return this.unmapFields(result);
396
+ }
397
+
398
+ async delete(id: string): Promise<boolean> {
399
+ try {
400
+ await this.getModel().delete({
401
+ where: { [this.fieldMap.id || "id"]: id },
402
+ });
403
+ return true;
404
+ } catch {
405
+ return false;
406
+ }
407
+ }
408
+ }
409
+
410
+ /**
411
+ * Prisma Message Repository
412
+ * Internal implementation - users should use PrismaAdapter instead
413
+ */
414
+ class PrismaMessageRepository implements MessageRepository {
415
+ private prisma: PrismaClient;
416
+ private tableName: string;
417
+ private fieldMap: Partial<Record<keyof MessageData, string>>;
418
+
419
+ constructor(
420
+ prismaClient: PrismaClient,
421
+ tableName: string,
422
+ fieldMappings?: Partial<Record<keyof MessageData, string>>
423
+ ) {
424
+ this.prisma = prismaClient;
425
+ this.tableName = tableName;
426
+ this.fieldMap = fieldMappings || {};
427
+ }
428
+
429
+ /**
430
+ * Map our standard field names to custom schema field names
431
+ */
432
+ private mapFields(data: Record<string, unknown>): Record<string, unknown> {
433
+ const mapped: Record<string, unknown> = {};
434
+ for (const [key, value] of Object.entries(data)) {
435
+ const mappedKey = this.fieldMap[key as keyof MessageData] || key;
436
+ mapped[mappedKey] = value;
437
+ }
438
+ return mapped;
439
+ }
440
+
441
+ /**
442
+ * Map custom schema field names back to our standard field names
443
+ */
444
+ private unmapFields(data: Record<string, unknown>): MessageData {
445
+ if (!data) throw new Error("Data cannot be null");
446
+
447
+ const reverseMap: Record<string, string> = {};
448
+ for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
449
+ reverseMap[customKey] = standardKey;
450
+ }
451
+
452
+ const unmapped: Record<string, unknown> = {};
453
+ for (const [key, value] of Object.entries(data)) {
454
+ const unmappedKey = reverseMap[key] || key;
455
+ unmapped[unmappedKey] = value;
456
+ }
457
+
458
+ // Construct proper MessageData object
459
+ return {
460
+ id: unmapped.id as string,
461
+ sessionId: unmapped.sessionId as string,
462
+ userId: unmapped.userId as string | undefined,
463
+ role: unmapped.role as MessageRole,
464
+ content: unmapped.content as string,
465
+ route: unmapped.route as string | undefined,
466
+ step: unmapped.step as string | undefined,
467
+ toolCalls: unmapped.toolCalls as
468
+ | Array<{ toolName: string; arguments: Record<string, unknown> }>
469
+ | undefined,
470
+ event: unmapped.event as Event | undefined,
471
+ createdAt: unmapped.createdAt as Date,
472
+ };
473
+ }
474
+
475
+ private getModel(): PrismaModel {
476
+ return this.prisma[this.tableName] as PrismaModel;
477
+ }
478
+
479
+ async create(
480
+ data: Omit<MessageData, "id" | "createdAt">
481
+ ): Promise<MessageData> {
482
+ const mapped = this.mapFields(data as Record<string, unknown>);
483
+ const result = await this.getModel().create({
484
+ data: mapped,
485
+ });
486
+ return this.unmapFields(result);
487
+ }
488
+
489
+ async findById(id: string): Promise<MessageData | null> {
490
+ const result = await this.getModel().findUnique({
491
+ where: { [this.fieldMap.id || "id"]: id },
492
+ });
493
+ return result ? this.unmapFields(result) : null;
494
+ }
495
+
496
+ async findBySessionId(
497
+ sessionId: string,
498
+ limit = 1000
499
+ ): Promise<MessageData[]> {
500
+ const results = await this.getModel().findMany({
501
+ where: {
502
+ [this.fieldMap.sessionId || "sessionId"]: sessionId,
503
+ },
504
+ orderBy: {
505
+ [this.fieldMap.createdAt || "createdAt"]: "asc",
506
+ },
507
+ take: limit,
508
+ });
509
+ return results.map((r) => this.unmapFields(r));
510
+ }
511
+
512
+ async findByUserId(userId: string, limit = 100): Promise<MessageData[]> {
513
+ const results = await this.getModel().findMany({
514
+ where: {
515
+ [this.fieldMap.userId || "userId"]: userId,
516
+ },
517
+ orderBy: {
518
+ [this.fieldMap.createdAt || "createdAt"]: "desc",
519
+ },
520
+ take: limit,
521
+ });
522
+ return results.map((r) => this.unmapFields(r));
523
+ }
524
+
525
+ async delete(id: string): Promise<boolean> {
526
+ try {
527
+ await this.getModel().delete({
528
+ where: { [this.fieldMap.id || "id"]: id },
529
+ });
530
+ return true;
531
+ } catch {
532
+ return false;
533
+ }
534
+ }
535
+
536
+ async deleteBySessionId(sessionId: string): Promise<number> {
537
+ const result = await this.getModel().deleteMany({
538
+ where: {
539
+ [this.fieldMap.sessionId || "sessionId"]: sessionId,
540
+ },
541
+ });
542
+ return result.count || 0;
543
+ }
544
+
545
+ async deleteByUserId(userId: string): Promise<number> {
546
+ const result = await this.getModel().deleteMany({
547
+ where: {
548
+ [this.fieldMap.userId || "userId"]: userId,
549
+ },
550
+ });
551
+ return result.count || 0;
552
+ }
553
+ }