@falai/agent 0.8.1 → 0.9.0-alpha-2

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 (665) hide show
  1. package/README.md +332 -147
  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/cjs/src/core/Agent.d.ts +223 -0
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1660 -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 +73 -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 +32 -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 +171 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +514 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +145 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/src/core/Route.js +343 -0
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +86 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +217 -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 +45 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
  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 +80 -41
  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 +38 -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/src/types/route.d.ts +235 -0
  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 +65 -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/{types → cjs/src/types}/tool.d.ts +17 -13
  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 +35 -32
  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/src/core/Agent.d.ts +223 -0
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1656 -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 +71 -18
  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 +32 -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 +171 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +510 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +145 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/src/core/Route.js +339 -0
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/src/core/RoutingEngine.d.ts +129 -0
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +211 -113
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +86 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +213 -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 +45 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +80 -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 +80 -41
  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 +38 -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/src/types/route.d.ts +235 -0
  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 +65 -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/{cjs → src}/types/tool.d.ts +17 -13
  289. package/dist/src/types/tool.d.ts.map +1 -0
  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 +33 -32
  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} +925 -255
  320. package/docs/api/overview.md +952 -0
  321. package/docs/core/agent/README.md +787 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
  324. package/docs/core/ai-integration/prompt-composition.md +220 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +176 -0
  327. package/docs/core/conversation-flows/data-collection.md +623 -0
  328. package/docs/core/conversation-flows/route-dsl.md +502 -0
  329. package/docs/core/conversation-flows/routes.md +117 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +154 -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 +348 -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 +406 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
  343. package/examples/ai-providers/anthropic-integration.ts +384 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
  345. package/examples/conversation-flows/completion-transitions.ts +277 -0
  346. package/examples/core-concepts/basic-agent.ts +443 -0
  347. package/examples/core-concepts/schema-driven-extraction.ts +305 -0
  348. package/examples/core-concepts/session-management.ts +406 -0
  349. package/examples/integrations/database-integration.ts +630 -0
  350. package/examples/integrations/healthcare-integration.ts +609 -0
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
  352. package/examples/integrations/server-session-management.ts +307 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
  355. package/examples/persistence/memory-sessions.ts +495 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/persistence/redis-persistence.ts +490 -0
  358. package/examples/tools/basic-tools.ts +561 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
  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 +1431 -526
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +103 -49
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +128 -46
  373. package/src/core/ResponsePipeline.ts +830 -0
  374. package/src/core/Route.ts +222 -53
  375. package/src/core/RoutingEngine.ts +345 -229
  376. package/src/core/SessionManager.ts +265 -0
  377. package/src/core/Step.ts +157 -67
  378. package/src/core/ToolExecutor.ts +52 -43
  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 +81 -46
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +45 -7
  388. package/src/types/persistence.ts +45 -28
  389. package/src/types/route.ts +122 -57
  390. package/src/types/session.ts +20 -220
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +23 -19
  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 +204 -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 +0 -197
  432. package/dist/cjs/core/Agent.d.ts.map +0 -1
  433. package/dist/cjs/core/Agent.js +0 -966
  434. package/dist/cjs/core/Agent.js.map +0 -1
  435. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  436. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  437. package/dist/cjs/core/DomainRegistry.js +0 -72
  438. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  439. package/dist/cjs/core/Events.d.ts +0 -41
  440. package/dist/cjs/core/Events.d.ts.map +0 -1
  441. package/dist/cjs/core/Events.js +0 -99
  442. package/dist/cjs/core/Events.js.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  444. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  445. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  446. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  447. package/dist/cjs/core/PromptComposer.js +0 -127
  448. package/dist/cjs/core/PromptComposer.js.map +0 -1
  449. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  450. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  451. package/dist/cjs/core/ResponseEngine.js +0 -56
  452. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  453. package/dist/cjs/core/Route.d.ts +0 -90
  454. package/dist/cjs/core/Route.d.ts.map +0 -1
  455. package/dist/cjs/core/Route.js +0 -203
  456. package/dist/cjs/core/Route.js.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.d.ts +0 -109
  458. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  459. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  460. package/dist/cjs/core/Step.d.ts +0 -72
  461. package/dist/cjs/core/Step.d.ts.map +0 -1
  462. package/dist/cjs/core/Step.js +0 -150
  463. package/dist/cjs/core/Step.js.map +0 -1
  464. package/dist/cjs/core/Tool.d.ts +0 -39
  465. package/dist/cjs/core/Tool.d.ts.map +0 -1
  466. package/dist/cjs/core/Tool.js +0 -34
  467. package/dist/cjs/core/Tool.js.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  469. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  470. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  471. package/dist/cjs/core/Transition.d.ts +0 -32
  472. package/dist/cjs/core/Transition.d.ts.map +0 -1
  473. package/dist/cjs/core/Transition.js +0 -89
  474. package/dist/cjs/core/Transition.js.map +0 -1
  475. package/dist/cjs/index.d.ts.map +0 -1
  476. package/dist/cjs/index.js.map +0 -1
  477. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  478. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  479. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  480. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  481. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  482. package/dist/cjs/providers/index.js.map +0 -1
  483. package/dist/cjs/types/agent.d.ts.map +0 -1
  484. package/dist/cjs/types/agent.js.map +0 -1
  485. package/dist/cjs/types/ai.d.ts.map +0 -1
  486. package/dist/cjs/types/history.d.ts.map +0 -1
  487. package/dist/cjs/types/history.js +0 -37
  488. package/dist/cjs/types/history.js.map +0 -1
  489. package/dist/cjs/types/index.d.ts +0 -12
  490. package/dist/cjs/types/index.d.ts.map +0 -1
  491. package/dist/cjs/types/index.js +0 -12
  492. package/dist/cjs/types/index.js.map +0 -1
  493. package/dist/cjs/types/persistence.d.ts.map +0 -1
  494. package/dist/cjs/types/persistence.js.map +0 -1
  495. package/dist/cjs/types/route.d.ts +0 -175
  496. package/dist/cjs/types/route.d.ts.map +0 -1
  497. package/dist/cjs/types/session.d.ts +0 -104
  498. package/dist/cjs/types/session.d.ts.map +0 -1
  499. package/dist/cjs/types/session.js.map +0 -1
  500. package/dist/cjs/types/tool.d.ts.map +0 -1
  501. package/dist/cjs/utils/event.js.map +0 -1
  502. package/dist/cjs/utils/id.js.map +0 -1
  503. package/dist/cjs/utils/logger.js.map +0 -1
  504. package/dist/cjs/utils/retry.js.map +0 -1
  505. package/dist/constants/index.d.ts.map +0 -1
  506. package/dist/constants/index.js.map +0 -1
  507. package/dist/core/Agent.d.ts +0 -197
  508. package/dist/core/Agent.d.ts.map +0 -1
  509. package/dist/core/Agent.js +0 -962
  510. package/dist/core/Agent.js.map +0 -1
  511. package/dist/core/DomainRegistry.d.ts +0 -36
  512. package/dist/core/DomainRegistry.d.ts.map +0 -1
  513. package/dist/core/DomainRegistry.js +0 -68
  514. package/dist/core/DomainRegistry.js.map +0 -1
  515. package/dist/core/Events.d.ts +0 -41
  516. package/dist/core/Events.d.ts.map +0 -1
  517. package/dist/core/Events.js +0 -94
  518. package/dist/core/Events.js.map +0 -1
  519. package/dist/core/PersistenceManager.d.ts.map +0 -1
  520. package/dist/core/PersistenceManager.js.map +0 -1
  521. package/dist/core/PromptComposer.d.ts +0 -24
  522. package/dist/core/PromptComposer.d.ts.map +0 -1
  523. package/dist/core/PromptComposer.js +0 -123
  524. package/dist/core/PromptComposer.js.map +0 -1
  525. package/dist/core/ResponseEngine.d.ts +0 -14
  526. package/dist/core/ResponseEngine.d.ts.map +0 -1
  527. package/dist/core/ResponseEngine.js +0 -52
  528. package/dist/core/ResponseEngine.js.map +0 -1
  529. package/dist/core/Route.d.ts +0 -90
  530. package/dist/core/Route.d.ts.map +0 -1
  531. package/dist/core/Route.js +0 -199
  532. package/dist/core/Route.js.map +0 -1
  533. package/dist/core/RoutingEngine.d.ts +0 -109
  534. package/dist/core/RoutingEngine.d.ts.map +0 -1
  535. package/dist/core/RoutingEngine.js.map +0 -1
  536. package/dist/core/Step.d.ts +0 -72
  537. package/dist/core/Step.d.ts.map +0 -1
  538. package/dist/core/Step.js +0 -146
  539. package/dist/core/Step.js.map +0 -1
  540. package/dist/core/Tool.d.ts +0 -39
  541. package/dist/core/Tool.d.ts.map +0 -1
  542. package/dist/core/Tool.js +0 -31
  543. package/dist/core/Tool.js.map +0 -1
  544. package/dist/core/ToolExecutor.d.ts +0 -29
  545. package/dist/core/ToolExecutor.d.ts.map +0 -1
  546. package/dist/core/ToolExecutor.js +0 -69
  547. package/dist/core/ToolExecutor.js.map +0 -1
  548. package/dist/core/Transition.d.ts +0 -32
  549. package/dist/core/Transition.d.ts.map +0 -1
  550. package/dist/core/Transition.js +0 -85
  551. package/dist/core/Transition.js.map +0 -1
  552. package/dist/index.d.ts.map +0 -1
  553. package/dist/index.js.map +0 -1
  554. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  555. package/dist/providers/AnthropicProvider.js.map +0 -1
  556. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  557. package/dist/providers/GeminiProvider.js.map +0 -1
  558. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  559. package/dist/providers/OpenAIProvider.js.map +0 -1
  560. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  561. package/dist/providers/OpenRouterProvider.js.map +0 -1
  562. package/dist/providers/index.d.ts.map +0 -1
  563. package/dist/providers/index.js.map +0 -1
  564. package/dist/types/agent.d.ts.map +0 -1
  565. package/dist/types/agent.js.map +0 -1
  566. package/dist/types/ai.d.ts.map +0 -1
  567. package/dist/types/ai.js.map +0 -1
  568. package/dist/types/history.d.ts.map +0 -1
  569. package/dist/types/history.js +0 -34
  570. package/dist/types/history.js.map +0 -1
  571. package/dist/types/index.d.ts +0 -12
  572. package/dist/types/index.d.ts.map +0 -1
  573. package/dist/types/index.js +0 -6
  574. package/dist/types/index.js.map +0 -1
  575. package/dist/types/persistence.d.ts.map +0 -1
  576. package/dist/types/persistence.js.map +0 -1
  577. package/dist/types/route.d.ts +0 -175
  578. package/dist/types/route.d.ts.map +0 -1
  579. package/dist/types/routing.d.ts.map +0 -1
  580. package/dist/types/schema.d.ts.map +0 -1
  581. package/dist/types/session.d.ts +0 -104
  582. package/dist/types/session.d.ts.map +0 -1
  583. package/dist/types/session.js.map +0 -1
  584. package/dist/types/tool.d.ts.map +0 -1
  585. package/dist/utils/event.d.ts.map +0 -1
  586. package/dist/utils/event.js.map +0 -1
  587. package/dist/utils/id.d.ts.map +0 -1
  588. package/dist/utils/id.js.map +0 -1
  589. package/dist/utils/logger.d.ts.map +0 -1
  590. package/dist/utils/logger.js.map +0 -1
  591. package/dist/utils/retry.d.ts.map +0 -1
  592. package/dist/utils/retry.js.map +0 -1
  593. package/docs/AGENT.md +0 -535
  594. package/docs/DOCS.md +0 -263
  595. package/docs/DOMAINS.md +0 -735
  596. package/docs/EXAMPLES.md +0 -467
  597. package/docs/GETTING_STARTED.md +0 -424
  598. package/docs/PERSISTENCE.md +0 -815
  599. package/docs/PROVIDERS.md +0 -612
  600. package/docs/ROUTES.md +0 -1085
  601. package/docs/STEPS.md +0 -883
  602. package/examples/business-onboarding.ts +0 -791
  603. package/examples/custom-database-persistence.ts +0 -574
  604. package/examples/declarative-agent.ts +0 -401
  605. package/examples/domain-scoping.ts +0 -366
  606. package/examples/healthcare-agent.ts +0 -511
  607. package/examples/redis-persistence.ts +0 -525
  608. package/examples/route-transitions.ts +0 -266
  609. package/examples/travel-agent.ts +0 -584
  610. package/src/core/DomainRegistry.ts +0 -80
  611. package/src/core/Tool.ts +0 -112
  612. package/src/core/Transition.ts +0 -115
  613. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  614. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  615. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  616. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  617. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  618. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  619. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  620. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  621. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  622. /package/dist/cjs/{types → src/types}/route.js +0 -0
  623. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  624. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  625. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  626. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  627. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  628. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  629. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  630. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  631. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  632. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  633. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  634. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  635. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  636. /package/dist/{adapters → src/adapters}/index.js +0 -0
  637. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  638. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  639. /package/dist/{constants → src/constants}/index.js +0 -0
  640. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  641. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  642. /package/dist/{providers → src/providers}/index.js +0 -0
  643. /package/dist/{types → src/types}/agent.js +0 -0
  644. /package/dist/{types → src/types}/ai.js +0 -0
  645. /package/dist/{types → src/types}/persistence.js +0 -0
  646. /package/dist/{types → src/types}/route.js +0 -0
  647. /package/dist/{types → src/types}/routing.d.ts +0 -0
  648. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  649. /package/dist/{types → src/types}/routing.js +0 -0
  650. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  651. /package/dist/{types → src/types}/schema.d.ts +0 -0
  652. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  653. /package/dist/{types → src/types}/schema.js +0 -0
  654. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  655. /package/dist/{types → src/types}/tool.js +0 -0
  656. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  657. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  658. /package/dist/{utils → src/utils}/id.js +0 -0
  659. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  660. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  661. /package/dist/{utils → src/utils}/logger.js +0 -0
  662. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  663. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  664. /package/dist/{utils → src/utils}/retry.js +0 -0
  665. /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, FlightData, [], void> =
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, FlightData, [], void> = {
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, FlightData, [], void> = {
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, FlightData, [], void> = {
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);
@@ -248,7 +252,45 @@ async function onDataUpdate(
248
252
  // AGENT SETUP
249
253
  // ==============================================================================
250
254
 
251
- const agent = new Agent<FlightBookingContext>({
255
+ // Define flight booking schema
256
+ const flightBookingSchema = {
257
+ type: "object",
258
+ properties: {
259
+ destination: {
260
+ type: "string",
261
+ description: "City or airport the user wants to fly to",
262
+ },
263
+ destinationCode: {
264
+ type: "string",
265
+ description: "IATA airport code (enriched by tool)",
266
+ },
267
+ departureDate: {
268
+ type: "string",
269
+ description: "When the user wants to depart",
270
+ },
271
+ departureDateParsed: {
272
+ type: "string",
273
+ description: "Parsed ISO date (enriched by tool)",
274
+ },
275
+ passengers: {
276
+ type: "number",
277
+ minimum: 1,
278
+ maximum: 9,
279
+ },
280
+ cabinClass: {
281
+ type: "string",
282
+ enum: ["economy", "business", "first"],
283
+ default: "economy",
284
+ },
285
+ shouldSearchFlights: {
286
+ type: "boolean",
287
+ description: "Flag to trigger flight search",
288
+ },
289
+ },
290
+ required: ["destination", "departureDate", "passengers"],
291
+ };
292
+
293
+ const agent = new Agent<FlightBookingContext, FlightData>({
252
294
  name: "Flight Booking Agent",
253
295
  goal: "Help users book flights efficiently",
254
296
  description: "I help you find and book flights",
@@ -257,112 +299,82 @@ const agent = new Agent<FlightBookingContext>({
257
299
  model: "gpt-5o-mini",
258
300
  }),
259
301
  context: {},
302
+ // NEW: Agent-level schema
303
+ schema: flightBookingSchema,
260
304
  hooks: {
261
305
  onDataUpdate, // Validation & enrichment hook
262
306
  },
263
307
  });
264
308
 
265
309
  // Define route with data extraction
266
- const bookingRoute = agent.createRoute<FlightData>({
310
+ const bookingRoute = agent.createRoute({
267
311
  title: "Book Flight",
268
312
  description: "Help user book a flight",
269
313
  conditions: [
270
314
  "User wants to book a flight",
271
315
  "User mentions flying, traveling, or booking",
272
316
  ],
273
- schema: {
274
- type: "object",
275
- properties: {
276
- destination: {
277
- type: "string",
278
- description: "City or airport the user wants to fly to",
279
- },
280
- destinationCode: {
281
- type: "string",
282
- description: "IATA airport code (enriched by tool)",
283
- },
284
- departureDate: {
285
- type: "string",
286
- description: "When the user wants to depart",
287
- },
288
- departureDateParsed: {
289
- type: "string",
290
- description: "Parsed ISO date (enriched by tool)",
291
- },
292
- passengers: {
293
- type: "number",
294
- minimum: 1,
295
- maximum: 9,
296
- },
297
- cabinClass: {
298
- type: "string",
299
- enum: ["economy", "business", "first"],
300
- default: "economy",
301
- },
302
- shouldSearchFlights: {
303
- type: "boolean",
304
- description: "Flag to trigger flight search",
305
- },
306
- },
307
- required: ["destination", "departureDate", "passengers"],
308
- },
317
+ // NEW: Required fields for route completion
318
+ requiredFields: ["destination", "departureDate", "passengers"],
319
+ // NEW: Optional fields that enhance the experience
320
+ optionalFields: ["destinationCode", "departureDateParsed", "cabinClass", "shouldSearchFlights"],
309
321
  });
310
322
 
311
323
  // Step 1: Collect destination
312
324
  const collectDestination = bookingRoute.initialStep.nextStep({
313
- instructions: "Ask where they want to fly",
325
+ prompt: "Ask where they want to fly",
314
326
  collect: ["destination"],
315
327
  skipIf: (data) => !!data.destination,
316
328
  });
317
329
 
318
330
  // Step 2: Enrich destination (tool execution)
319
331
  const enrichDestination = collectDestination.nextStep({
320
- tool: enrichDestinationTool,
332
+ tools: [enrichDestinationTool],
321
333
  requires: ["destination"],
322
334
  });
323
335
 
324
336
  // Step 3: Collect date
325
337
  const collectDate = enrichDestination.nextStep({
326
- instructions: "Ask when they want to depart",
338
+ prompt: "Ask when they want to depart",
327
339
  collect: ["departureDate"],
328
340
  skipIf: (data) => !!data.departureDate,
329
341
  });
330
342
 
331
343
  // Step 4: Validate/parse date (tool execution)
332
344
  const validateDate = collectDate.nextStep({
333
- tool: validateDateTool,
345
+ tools: [validateDateTool],
334
346
  requires: ["departureDate"],
335
347
  });
336
348
 
337
349
  // Step 5: Collect passengers
338
350
  const collectPassengers = validateDate.nextStep({
339
- instructions: "Ask how many passengers",
351
+ prompt: "Ask how many passengers",
340
352
  collect: ["passengers"],
341
353
  skipIf: (data) => !!data.passengers,
342
354
  });
343
355
 
344
356
  // Step 6: Search flights (triggered by hook setting shouldSearchFlights)
345
357
  const searchFlights = collectPassengers.nextStep({
346
- tool: searchFlightsTool,
358
+ tools: [searchFlightsTool],
347
359
  // This step is entered when shouldSearchFlights is true
348
360
  // The hook automatically sets this flag when all data is collected
349
361
  });
350
362
 
351
363
  // Step 7: Present results
352
364
  const presentResults = searchFlights.nextStep({
353
- instructions: "Present available flights to the user",
365
+ prompt: "Present available flights to the user",
354
366
  });
355
367
 
356
368
  // Step 8: Confirm booking
357
369
  const confirmBooking = presentResults.nextStep({
358
- instructions: "Ask user to confirm the booking",
370
+ prompt: "Ask user to confirm the booking",
359
371
  requires: ["destinationCode", "departureDateParsed", "passengers"],
360
372
  });
361
373
 
362
374
  // Step 9: Finalize booking
363
375
  const finalizeBooking = confirmBooking.nextStep({
364
- tool: bookFlightTool,
365
- condition: "User confirms the booking",
376
+ tools: [bookFlightTool],
377
+ when: "User confirms the booking",
366
378
  });
367
379
 
368
380
  // Step 10: End of conversation
@@ -373,27 +385,26 @@ finalizeBooking.nextStep({ step: END_ROUTE });
373
385
  // ==============================================================================
374
386
 
375
387
  async function main() {
376
- let session = createSession<FlightData>();
388
+ // Session is automatically managed by the agent
389
+ console.log("✨ Session ready:", agent.session.id);
377
390
 
378
391
  // 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
- ];
392
+ await agent.session.addMessage("user", "I want to fly to Paris tomorrow with 2 passengers");
386
393
 
387
- const response = await agent.respond({ history, session });
394
+ const response = await agent.respond({
395
+ history: agent.session.getHistory()
396
+ });
388
397
 
389
398
  console.log("\n=== RESPONSE ===");
390
399
  console.log("Message:", response.message);
391
- console.log("Data:", response.session?.data);
400
+ console.log("Data:", agent.session.getData());
392
401
  console.log("Context:", agent["context"]);
393
402
 
403
+ await agent.session.addMessage("assistant", response.message);
404
+
394
405
  if (response.isRouteComplete) {
395
406
  console.log("\n✅ Flight booking complete!");
396
- await sendBookingConfirmation(response.session?.data);
407
+ await sendBookingConfirmation(agent.session.getData());
397
408
  }
398
409
 
399
410
  /*
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-2",
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> {