@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
@@ -11,14 +11,10 @@
11
11
 
12
12
  import {
13
13
  Agent,
14
- createSession,
15
- EventSource,
16
- createMessageEvent,
17
14
  END_ROUTE,
18
15
  OpenAIProvider,
19
- } from "../src";
20
- import type { Event } from "../src/types";
21
- import type { ToolRef } from "../src/types/tool";
16
+ type Tool,
17
+ } from "../../src";
22
18
 
23
19
  // ==============================================================================
24
20
  // CONTEXT & COLLECTED DATA TYPES
@@ -49,53 +45,55 @@ interface FlightData {
49
45
  // ==============================================================================
50
46
 
51
47
  // Tool 1: Convert city names to airport codes
52
- const enrichDestinationTool: ToolRef<
53
- FlightBookingContext,
54
- [],
55
- void,
56
- FlightData
57
- > = {
58
- id: "enrich_destination",
59
- name: "Enrich Destination",
60
- description: "Convert city names to IATA airport codes",
61
- handler: async (context) => {
62
- const { data } = context;
63
- const destination = (data as Partial<FlightData>)?.destination;
64
-
65
- if (!destination) {
66
- return { data: undefined };
67
- }
68
-
69
- // Simulate airport code lookup
70
- const airportCodes: Record<string, string> = {
71
- Paris: "CDG",
72
- London: "LHR",
73
- "New York": "JFK",
74
- Tokyo: "NRT",
75
- "Los Angeles": "LAX",
76
- };
77
-
78
- const destinationCode = airportCodes[destination];
79
-
80
- console.log(`[Tool] Enriched: ${destination} → ${destinationCode}`);
81
-
82
- return {
83
- data: undefined,
84
- dataUpdate: {
85
- destinationCode,
86
- } as Partial<FlightData>,
87
- };
88
- },
89
- };
48
+ const enrichDestinationTool: Tool<FlightBookingContext, [], void, FlightData> =
49
+ {
50
+ id: "enrich_destination",
51
+ name: "Destination Code Lookup",
52
+ description: "Convert city names to IATA airport codes",
53
+ parameters: {
54
+ type: "object",
55
+ properties: {},
56
+ },
57
+ handler: ({ data }: { data?: Partial<FlightData> }) => {
58
+ const destination = (data as Partial<FlightData>)?.destination;
59
+
60
+ if (!destination) {
61
+ return { data: undefined };
62
+ }
63
+
64
+ // Simulate airport code lookup
65
+ const airportCodes: Record<string, string> = {
66
+ Paris: "CDG",
67
+ London: "LHR",
68
+ "New York": "JFK",
69
+ Tokyo: "NRT",
70
+ "Los Angeles": "LAX",
71
+ };
72
+
73
+ const destinationCode = airportCodes[destination];
74
+
75
+ console.log(`[Tool] Enriched: ${destination} → ${destinationCode}`);
76
+
77
+ return {
78
+ data: undefined,
79
+ dataUpdate: {
80
+ destinationCode,
81
+ } as Partial<FlightData>,
82
+ };
83
+ },
84
+ };
90
85
 
91
86
  // Tool 2: Parse and validate dates
92
- const validateDateTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
87
+ const validateDateTool: Tool<FlightBookingContext, [], void, FlightData> = {
93
88
  id: "validate_date",
94
- name: "Validate Date",
89
+ name: "Date Parser & Validator",
95
90
  description:
96
91
  "Parse relative dates (today, tomorrow) to ISO format and validate",
97
- handler: async (context) => {
98
- const { data } = context;
92
+ parameters: {
93
+ type: "object",
94
+ properties: {},
95
+ },
96
+ handler: ({ data }: { data?: Partial<FlightData> }) => {
99
97
  const departureDate = (data as Partial<FlightData>)?.departureDate;
100
98
 
101
99
  if (!departureDate) {
@@ -141,12 +139,15 @@ const validateDateTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
141
139
  };
142
140
 
143
141
  // Tool 3: Search for flights (triggered by flag)
144
- const searchFlightsTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
142
+ const searchFlightsTool: Tool<FlightBookingContext, [], void, FlightData> = {
145
143
  id: "search_flights",
146
- name: "Search Flights",
144
+ name: "Flight Availability Search",
147
145
  description: "Search for available flights based on collected data",
148
- handler: async (context) => {
149
- const { data } = context;
146
+ parameters: {
147
+ type: "object",
148
+ properties: {},
149
+ },
150
+ handler: ({ data }: { data?: Partial<FlightData> }) => {
150
151
  const flightData = data as Partial<FlightData>;
151
152
 
152
153
  if (!flightData?.destinationCode || !flightData?.departureDateParsed) {
@@ -187,12 +188,15 @@ const searchFlightsTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
187
188
  };
188
189
 
189
190
  // Tool 4: Book the flight
190
- const bookFlightTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
191
+ const bookFlightTool: Tool<FlightBookingContext, [], void, FlightData> = {
191
192
  id: "book_flight",
192
- name: "Book Flight",
193
+ name: "Flight Booking Processor",
193
194
  description: "Finalize the flight booking",
194
- handler: async (context) => {
195
- const { data } = context;
195
+ parameters: {
196
+ type: "object",
197
+ properties: {},
198
+ },
199
+ handler: ({ data }: { data?: Partial<FlightData> }) => {
196
200
  const flightData = data as Partial<FlightData>;
197
201
  console.log("[Tool] Booking flight with data:", flightData);
198
202
  // Simulate booking API call
@@ -204,10 +208,10 @@ const bookFlightTool: ToolRef<FlightBookingContext, [], void, FlightData> = {
204
208
  // LIFECYCLE HOOKS: Data Validation & Business Logic (RESPONSE Phase)
205
209
  // ==============================================================================
206
210
 
207
- async function onDataUpdate(
211
+ function onDataUpdate(
208
212
  data: Record<string, unknown>,
209
213
  previousData: Record<string, unknown>
210
- ): Promise<Record<string, unknown>> {
214
+ ): Record<string, unknown> {
211
215
  console.log("[Hook] onDataUpdate called");
212
216
  console.log(" Previous:", previousData);
213
217
  console.log(" New:", data);
@@ -310,59 +314,59 @@ const bookingRoute = agent.createRoute<FlightData>({
310
314
 
311
315
  // Step 1: Collect destination
312
316
  const collectDestination = bookingRoute.initialStep.nextStep({
313
- instructions: "Ask where they want to fly",
317
+ prompt: "Ask where they want to fly",
314
318
  collect: ["destination"],
315
319
  skipIf: (data) => !!data.destination,
316
320
  });
317
321
 
318
322
  // Step 2: Enrich destination (tool execution)
319
323
  const enrichDestination = collectDestination.nextStep({
320
- tool: enrichDestinationTool,
324
+ tools: [enrichDestinationTool],
321
325
  requires: ["destination"],
322
326
  });
323
327
 
324
328
  // Step 3: Collect date
325
329
  const collectDate = enrichDestination.nextStep({
326
- instructions: "Ask when they want to depart",
330
+ prompt: "Ask when they want to depart",
327
331
  collect: ["departureDate"],
328
332
  skipIf: (data) => !!data.departureDate,
329
333
  });
330
334
 
331
335
  // Step 4: Validate/parse date (tool execution)
332
336
  const validateDate = collectDate.nextStep({
333
- tool: validateDateTool,
337
+ tools: [validateDateTool],
334
338
  requires: ["departureDate"],
335
339
  });
336
340
 
337
341
  // Step 5: Collect passengers
338
342
  const collectPassengers = validateDate.nextStep({
339
- instructions: "Ask how many passengers",
343
+ prompt: "Ask how many passengers",
340
344
  collect: ["passengers"],
341
345
  skipIf: (data) => !!data.passengers,
342
346
  });
343
347
 
344
348
  // Step 6: Search flights (triggered by hook setting shouldSearchFlights)
345
349
  const searchFlights = collectPassengers.nextStep({
346
- tool: searchFlightsTool,
350
+ tools: [searchFlightsTool],
347
351
  // This step is entered when shouldSearchFlights is true
348
352
  // The hook automatically sets this flag when all data is collected
349
353
  });
350
354
 
351
355
  // Step 7: Present results
352
356
  const presentResults = searchFlights.nextStep({
353
- instructions: "Present available flights to the user",
357
+ prompt: "Present available flights to the user",
354
358
  });
355
359
 
356
360
  // Step 8: Confirm booking
357
361
  const confirmBooking = presentResults.nextStep({
358
- instructions: "Ask user to confirm the booking",
362
+ prompt: "Ask user to confirm the booking",
359
363
  requires: ["destinationCode", "departureDateParsed", "passengers"],
360
364
  });
361
365
 
362
366
  // Step 9: Finalize booking
363
367
  const finalizeBooking = confirmBooking.nextStep({
364
- tool: bookFlightTool,
365
- condition: "User confirms the booking",
368
+ tools: [bookFlightTool],
369
+ when: "User confirms the booking",
366
370
  });
367
371
 
368
372
  // Step 10: End of conversation
@@ -373,27 +377,26 @@ finalizeBooking.nextStep({ step: END_ROUTE });
373
377
  // ==============================================================================
374
378
 
375
379
  async function main() {
376
- let session = createSession<FlightData>();
380
+ // Session is automatically managed by the agent
381
+ console.log("✨ Session ready:", agent.session.id);
377
382
 
378
383
  // Turn 1: User provides everything at once
379
- const history: Event[] = [
380
- createMessageEvent(
381
- EventSource.CUSTOMER,
382
- "User",
383
- "I want to fly to Paris tomorrow with 2 passengers"
384
- ),
385
- ];
384
+ await agent.session.addMessage("user", "I want to fly to Paris tomorrow with 2 passengers");
386
385
 
387
- const response = await agent.respond({ history, session });
386
+ const response = await agent.respond({
387
+ history: agent.session.getHistory()
388
+ });
388
389
 
389
390
  console.log("\n=== RESPONSE ===");
390
391
  console.log("Message:", response.message);
391
- console.log("Data:", response.session?.data);
392
+ console.log("Data:", agent.session.getData<FlightData>());
392
393
  console.log("Context:", agent["context"]);
393
394
 
395
+ await agent.session.addMessage("assistant", response.message);
396
+
394
397
  if (response.isRouteComplete) {
395
398
  console.log("\n✅ Flight booking complete!");
396
- await sendBookingConfirmation(response.session?.data);
399
+ await sendBookingConfirmation(agent.session.getData<FlightData>());
397
400
  }
398
401
 
399
402
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "0.8.1",
3
+ "version": "0.9.0-alpha-1",
4
4
  "description": "Standalone, strongly-typed AI Agent framework with route DSL and AI provider strategy",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "repository": {
33
33
  "type": "git",
34
- "url": "https://github.com/falai-dev/agent.git"
34
+ "url": "git+https://github.com/falai-dev/agent.git"
35
35
  },
36
36
  "bugs": {
37
37
  "url": "https://github.com/falai-dev/agent/issues"
@@ -52,8 +52,9 @@
52
52
  "release:patch": "npm version patch && npm publish",
53
53
  "release:minor": "npm version minor && npm publish",
54
54
  "release:major": "npm version major && npm publish",
55
+ "release:alpha": "npm publish --tag alpha",
55
56
  "release": "npm publish",
56
- "test": "echo \"Error: no test specified\" && exit 1"
57
+ "test": "bun run tests/*.test.ts"
57
58
  },
58
59
  "keywords": [
59
60
  "ai",
@@ -70,27 +71,30 @@
70
71
  "author": "Gustavo Salomé <gusnips>",
71
72
  "license": "MIT",
72
73
  "devDependencies": {
73
- "@types/node": "^20.11.0",
74
74
  "@eslint/js": "^9.17.0",
75
+ "@types/bun": "^1.3.0",
76
+ "@types/node": "^20.19.22",
75
77
  "eslint": "^9.17.0",
76
78
  "typescript": "^5.3.3",
77
- "typescript-eslint": "^8.18.2"
79
+ "typescript-eslint": "^8.18.2",
80
+ "vitest": "^3.2.4"
78
81
  },
79
82
  "dependencies": {
80
83
  "@anthropic-ai/sdk": "^0.65.0",
81
84
  "@google/genai": "^0.3.0",
85
+ "@types/pg": "^8.15.5",
82
86
  "@types/redis": "^4.0.11",
83
87
  "loglevel": "^1.9.2",
84
88
  "openai": "^6.3.0"
85
89
  },
86
90
  "peerDependencies": {
91
+ "@opensearch-project/opensearch": "^2.0.0",
87
92
  "@prisma/client": "^6.0.0",
88
- "ioredis": "^5.7.0",
89
- "mongodb": "^6.0.0 || ^7.0.0",
90
- "pg": "^8.11.0",
91
- "mysql2": "^3.2.0",
92
93
  "better-sqlite3": "^11.0.0 || ^12.0.0",
93
- "@opensearch-project/opensearch": "^2.0.0"
94
+ "ioredis": "",
95
+ "mongodb": "",
96
+ "mysql2": "^3.2.0",
97
+ "pg": ""
94
98
  },
95
99
  "peerDependenciesMeta": {
96
100
  "@prisma/client": {
@@ -4,13 +4,16 @@
4
4
  */
5
5
 
6
6
  import type {
7
- SessionRepository,
7
+ CollectedStateData,
8
+ MessageData,
8
9
  MessageRepository,
10
+ PersistenceAdapter,
9
11
  SessionData,
10
- MessageData,
12
+ SessionRepository,
11
13
  SessionStatus,
12
- PersistenceAdapter,
13
- } from "../types/persistence";
14
+ CreateSessionData,
15
+ } from "../types";
16
+ import { cloneDeep } from "../utils/clone";
14
17
 
15
18
  /**
16
19
  * Memory Adapter - Provider-style API for in-memory persistence
@@ -35,17 +38,19 @@ import type {
35
38
  * });
36
39
  * ```
37
40
  */
38
- export class MemoryAdapter implements PersistenceAdapter {
39
- public readonly sessionRepository: SessionRepository;
41
+ export class MemoryAdapter<TData = Record<string, unknown>>
42
+ implements PersistenceAdapter<TData>
43
+ {
44
+ public readonly sessionRepository: SessionRepository<TData>;
40
45
  public readonly messageRepository: MessageRepository;
41
- private sessions: Map<string, SessionData>;
46
+ private sessions: Map<string, SessionData<TData>>;
42
47
  private messages: Map<string, MessageData>;
43
48
 
44
49
  constructor() {
45
50
  this.sessions = new Map();
46
51
  this.messages = new Map();
47
52
 
48
- this.sessionRepository = new MemorySessionRepository(this.sessions);
53
+ this.sessionRepository = new MemorySessionRepository<TData>(this.sessions);
49
54
  this.messageRepository = new MemoryMessageRepository(this.messages);
50
55
  }
51
56
 
@@ -61,7 +66,7 @@ export class MemoryAdapter implements PersistenceAdapter {
61
66
  * Get data snapshot (useful for debugging)
62
67
  */
63
68
  getSnapshot(): {
64
- sessions: SessionData[];
69
+ sessions: SessionData<TData>[];
65
70
  messages: MessageData[];
66
71
  } {
67
72
  return {
@@ -74,16 +79,17 @@ export class MemoryAdapter implements PersistenceAdapter {
74
79
  /**
75
80
  * Memory Session Repository
76
81
  */
77
- class MemorySessionRepository implements SessionRepository {
78
- constructor(private sessions: Map<string, SessionData>) {}
79
-
80
- async create(
81
- data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
82
- ): Promise<SessionData> {
83
- const id = `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
82
+ class MemorySessionRepository<TData = Record<string, unknown>>
83
+ implements SessionRepository<TData>
84
+ {
85
+ constructor(private sessions: Map<string, SessionData<TData>>) {}
86
+
87
+ create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
88
+ const id =
89
+ data.id || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
84
90
  const now = new Date();
85
91
 
86
- const session: SessionData = {
92
+ const session: SessionData<TData> = {
87
93
  ...data,
88
94
  id,
89
95
  status: data.status || "active",
@@ -92,16 +98,16 @@ class MemorySessionRepository implements SessionRepository {
92
98
  updatedAt: now,
93
99
  };
94
100
 
95
- this.sessions.set(id, session);
96
- return Promise.resolve(session);
101
+ this.sessions.set(id, cloneDeep(session));
102
+ return Promise.resolve(cloneDeep(session));
97
103
  }
98
104
 
99
- async findById(id: string): Promise<SessionData | null> {
100
- const session = this.sessions.get(id) || null;
101
- return Promise.resolve(session);
105
+ findById(id: string): Promise<SessionData<TData> | null> {
106
+ const session = this.sessions.get(id);
107
+ return Promise.resolve(session ? cloneDeep(session) : null);
102
108
  }
103
109
 
104
- async findActiveByUserId(userId: string): Promise<SessionData | null> {
110
+ async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
105
111
  const sessions = Array.from(this.sessions.values())
106
112
  .filter((s) => s.userId === userId && s.status === "active")
107
113
  .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
@@ -109,7 +115,10 @@ class MemorySessionRepository implements SessionRepository {
109
115
  return Promise.resolve(sessions[0] || null);
110
116
  }
111
117
 
112
- async findByUserId(userId: string, limit = 100): Promise<SessionData[]> {
118
+ async findByUserId(
119
+ userId: string,
120
+ limit = 100
121
+ ): Promise<SessionData<TData>[]> {
113
122
  const sessions = Array.from(this.sessions.values())
114
123
  .filter((s) => s.userId === userId)
115
124
  .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
@@ -119,55 +128,74 @@ class MemorySessionRepository implements SessionRepository {
119
128
 
120
129
  async update(
121
130
  id: string,
122
- data: Partial<Omit<SessionData, "id" | "createdAt">>
123
- ): Promise<SessionData | null> {
131
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
132
+ ): Promise<SessionData<TData> | null> {
124
133
  const existing = this.sessions.get(id);
125
134
  if (!existing) return null;
126
135
 
127
- const updated: SessionData = {
136
+ const updated: SessionData<TData> = {
128
137
  ...existing,
129
138
  ...data,
130
139
  updatedAt: new Date(),
131
140
  };
132
141
 
133
- this.sessions.set(id, updated);
134
- return Promise.resolve(updated);
142
+ this.sessions.set(id, cloneDeep(updated));
143
+ return Promise.resolve(cloneDeep(updated));
135
144
  }
136
145
 
137
146
  async updateStatus(
138
147
  id: string,
139
148
  status: SessionStatus,
140
149
  completedAt?: Date
141
- ): Promise<SessionData | null> {
142
- return await this.update(id, { status, completedAt });
150
+ ): Promise<SessionData<TData> | null> {
151
+ const session = this.sessions.get(id);
152
+ if (session) {
153
+ session.status = status;
154
+ if (completedAt) {
155
+ session.completedAt = completedAt;
156
+ }
157
+ this.sessions.set(id, cloneDeep(session));
158
+ return Promise.resolve(cloneDeep(session));
159
+ }
160
+ return Promise.resolve(null);
143
161
  }
144
162
 
145
163
  async updateCollectedData(
146
164
  id: string,
147
- collectedData: Record<string, unknown>
148
- ): Promise<SessionData | null> {
149
- return await this.update(id, { collectedData });
165
+ collectedData: CollectedStateData<TData>
166
+ ): Promise<SessionData<TData> | null> {
167
+ const session = this.sessions.get(id);
168
+ if (session) {
169
+ session.collectedData = collectedData;
170
+ this.sessions.set(id, cloneDeep(session));
171
+ return Promise.resolve(cloneDeep(session));
172
+ }
173
+ return Promise.resolve(null);
150
174
  }
151
175
 
152
176
  async updateRouteStep(
153
177
  id: string,
154
178
  route?: string,
155
179
  step?: string
156
- ): Promise<SessionData | null> {
157
- return await this.update(id, {
158
- currentRoute: route,
159
- currentStep: step,
160
- });
180
+ ): Promise<SessionData<TData> | null> {
181
+ const session = this.sessions.get(id);
182
+ if (session) {
183
+ session.currentRoute = route;
184
+ session.currentStep = step;
185
+ this.sessions.set(id, cloneDeep(session));
186
+ return Promise.resolve(cloneDeep(session));
187
+ }
188
+ return Promise.resolve(null);
161
189
  }
162
190
 
163
- async incrementMessageCount(id: string): Promise<SessionData | null> {
191
+ async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
164
192
  const session = this.sessions.get(id);
165
- if (!session) return null;
166
-
167
- return await this.update(id, {
168
- messageCount: (session.messageCount || 0) + 1,
169
- lastMessageAt: new Date(),
170
- });
193
+ if (session) {
194
+ session.messageCount = (session.messageCount || 0) + 1;
195
+ this.sessions.set(id, cloneDeep(session));
196
+ return Promise.resolve(cloneDeep(session));
197
+ }
198
+ return Promise.resolve(null);
171
199
  }
172
200
 
173
201
  async delete(id: string): Promise<boolean> {