@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
@@ -0,0 +1,787 @@
1
+ # Agent Architecture
2
+
3
+ ## Overview
4
+
5
+ The `Agent<TContext, TData>` class is the central orchestrator of @falai/agent, providing a strongly-typed, context-aware AI agent framework with intelligent routing and agent-level schema-driven data collection.
6
+
7
+ ## Core Responsibilities
8
+
9
+ - **AI Provider Management**: Unified interface to multiple AI providers (OpenAI, Gemini, Anthropic, etc.)
10
+ - **Intelligent Routing**: AI-powered route and step selection based on conversation context
11
+ - **Context Lifecycle**: Dynamic context management with provider functions and lifecycle hooks
12
+ - **Session Management**: Conversation state persistence and multi-turn dialogue support
13
+ - **Tool Orchestration**: Hierarchical tool execution (agent → route → step level)
14
+ - **Agent-Level Data Collection**: Centralized schema-driven information extraction shared across all routes
15
+
16
+ ## Agent Configuration
17
+
18
+ ### Basic Agent Setup
19
+
20
+ ```typescript
21
+ import { Agent, OpenAIProvider } from "@falai/agent";
22
+
23
+ const agent = new Agent({
24
+ name: "Customer Support Bot",
25
+ description: "AI assistant for customer inquiries",
26
+ provider: new OpenAIProvider({
27
+ apiKey: process.env.OPENAI_API_KEY,
28
+ model: "gpt-4",
29
+ }),
30
+ });
31
+ ```
32
+
33
+ ### Advanced Configuration
34
+
35
+ ```typescript
36
+ interface CustomerContext {
37
+ userId: string;
38
+ accountTier: "free" | "premium" | "enterprise";
39
+ lastLogin: Date;
40
+ preferences: {
41
+ language: string;
42
+ notifications: boolean;
43
+ };
44
+ }
45
+
46
+ interface CustomerData {
47
+ customerName?: string;
48
+ email?: string;
49
+ phone?: string;
50
+ issueType?: 'booking' | 'billing' | 'technical' | 'other';
51
+ issueDescription?: string;
52
+ priority?: 'low' | 'medium' | 'high';
53
+ rating?: number;
54
+ comments?: string;
55
+ }
56
+
57
+ const agent = new Agent<CustomerContext, CustomerData>({
58
+ // Identity
59
+ name: "Premium Support Assistant",
60
+ description: "24/7 AI support for premium customers",
61
+ goal: "Resolve customer issues efficiently while maintaining satisfaction",
62
+
63
+ // AI Provider with backup models
64
+ provider: new OpenAIProvider({
65
+ apiKey: process.env.OPENAI_API_KEY,
66
+ model: "gpt-5",
67
+ backupModels: ["gpt-4"],
68
+ }),
69
+
70
+ // Agent-level data schema (NEW)
71
+ schema: {
72
+ type: "object",
73
+ properties: {
74
+ customerName: { type: "string" },
75
+ email: { type: "string", format: "email" },
76
+ phone: { type: "string" },
77
+ issueType: { type: "string", enum: ["booking", "billing", "technical", "other"] },
78
+ issueDescription: { type: "string" },
79
+ priority: { type: "string", enum: ["low", "medium", "high"] },
80
+ rating: { type: "number", minimum: 1, maximum: 5 },
81
+ comments: { type: "string" }
82
+ }
83
+ },
84
+
85
+ // Static context (can be overridden by contextProvider)
86
+ context: {
87
+ userId: "anonymous",
88
+ accountTier: "free",
89
+ lastLogin: new Date(),
90
+ preferences: {
91
+ language: "en",
92
+ notifications: true,
93
+ },
94
+ },
95
+
96
+ // Dynamic context provider (takes precedence over static context)
97
+ contextProvider: async () => {
98
+ const user = await authenticateUser(request);
99
+ return {
100
+ userId: user.id,
101
+ accountTier: user.tier,
102
+ lastLogin: user.lastLogin,
103
+ preferences: user.preferences,
104
+ };
105
+ },
106
+
107
+ // Lifecycle hooks for context and data management
108
+ hooks: {
109
+ // Refresh context before each response
110
+ beforeRespond: async (currentContext) => {
111
+ const freshUser = await db.getUser(currentContext.userId);
112
+ return {
113
+ ...currentContext,
114
+ accountTier: freshUser.tier,
115
+ lastLogin: freshUser.lastLogin,
116
+ };
117
+ },
118
+
119
+ // Handle context updates from tools or responses
120
+ onContextUpdate: async (newContext, previousContext) => {
121
+ if (newContext.accountTier !== previousContext.accountTier) {
122
+ await auditLog.log({
123
+ type: "tier_change",
124
+ userId: newContext.userId,
125
+ from: previousContext.accountTier,
126
+ to: newContext.accountTier,
127
+ });
128
+ }
129
+ },
130
+
131
+ // Validate and enrich collected data (NEW: Agent-level data hooks)
132
+ onDataUpdate: async (data, previousData) => {
133
+ // Data validation against agent schema
134
+ if (data.email && !isValidEmail(data.email)) {
135
+ throw new Error("Invalid email format");
136
+ }
137
+
138
+ // Data enrichment using agent-level data
139
+ if (data.customerName && !data.customerId) {
140
+ data.customerId = await lookupCustomerId(data.customerName);
141
+ }
142
+
143
+ // Auto-set priority based on issue type
144
+ if (data.issueType === 'billing' && !data.priority) {
145
+ data.priority = 'high';
146
+ }
147
+
148
+ return data;
149
+ },
150
+ },
151
+
152
+ // Optional sessionId for automatic session loading/creation
153
+ sessionId: "user-123", // Agent will automatically load or create this session
154
+
155
+ // Optional persistence configuration
156
+ persistence: {
157
+ adapter: new RedisAdapter(redisClient),
158
+ autoSave: true, // Auto-save after each response
159
+ userId: "global", // Or dynamic based on context
160
+ },
161
+
162
+ // Domain knowledge
163
+ terms: [
164
+ {
165
+ name: "Premium Support",
166
+ description: "24/7 priority assistance with 1-hour response guarantee",
167
+ synonyms: ["priority support", "vip assistance"],
168
+ },
169
+ ],
170
+
171
+ // Behavioral guidelines
172
+ guidelines: [
173
+ {
174
+ condition: "Customer seems frustrated",
175
+ action: "Apologize sincerely and offer to escalate to human agent",
176
+ enabled: true,
177
+ },
178
+ {
179
+ condition: "Premium customer requests",
180
+ action: "Provide expedited service and additional options",
181
+ enabled: true,
182
+ },
183
+ ],
184
+
185
+ // Global tools available to all routes
186
+ tools: [searchTool, userLookupTool],
187
+
188
+ // Knowledge base for AI context
189
+ knowledgeBase: {
190
+ company: {
191
+ name: "Acme Corp",
192
+ supportHours: "24/7 for premium, 9-5 for free",
193
+ refundPolicy: "30 days for all purchases",
194
+ },
195
+ products: {
196
+ basic: {
197
+ price: "$9.99/month",
198
+ features: ["Email support", "5GB storage"],
199
+ },
200
+ premium: {
201
+ price: "$29.99/month",
202
+ features: ["24/7 support", "100GB storage", "Priority queue"],
203
+ },
204
+ },
205
+ },
206
+ });
207
+ ```
208
+
209
+ ## Context Management
210
+
211
+ ### Static Context
212
+
213
+ Fixed context available throughout the conversation:
214
+
215
+ ```typescript
216
+ const agent = new Agent({
217
+ context: {
218
+ companyName: "Acme Corp",
219
+ supportEmail: "support@acme.com",
220
+ currentDate: new Date().toISOString(),
221
+ },
222
+ });
223
+ ```
224
+
225
+ ### Dynamic Context Provider
226
+
227
+ Fresh context fetched before each response:
228
+
229
+ ```typescript
230
+ const agent = new Agent({
231
+ contextProvider: async () => {
232
+ // Fetch real-time data
233
+ const weather = await weatherAPI.getCurrentWeather();
234
+ const user = await auth.getCurrentUser();
235
+
236
+ return {
237
+ currentWeather: weather,
238
+ userProfile: user,
239
+ serverTime: new Date(),
240
+ };
241
+ },
242
+ });
243
+ ```
244
+
245
+ ### Context Updates
246
+
247
+ Context can be modified during conversation:
248
+
249
+ ```typescript
250
+ // From tool execution
251
+ const updateLocationTool: Tool<
252
+ { currentLocation?: string; lastLocationUpdate?: Date },
253
+ [],
254
+ string,
255
+ { location: string }
256
+ > = {
257
+ id: "update_location",
258
+ description: "Update user's current location",
259
+ parameters: {
260
+ type: "object",
261
+ properties: {
262
+ location: { type: "string", description: "New location to set" },
263
+ },
264
+ required: ["location"],
265
+ },
266
+ handler: async ({ context }, { location }) => {
267
+ return {
268
+ data: `Location updated to ${location}`,
269
+ contextUpdate: {
270
+ currentLocation: location,
271
+ lastLocationUpdate: new Date(),
272
+ },
273
+ };
274
+ },
275
+ };
276
+
277
+ // Programmatically
278
+ await agent.updateContext({
279
+ userStatus: "premium",
280
+ lastActivity: new Date(),
281
+ });
282
+ ```
283
+
284
+ ## Session Management
285
+
286
+ ### Automatic Session Management
287
+
288
+ Sessions are automatically managed through the integrated `SessionManager`:
289
+
290
+ ```typescript
291
+ // Agent with automatic session management
292
+ const agent = new Agent({
293
+ name: "Assistant",
294
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
295
+ persistence: { adapter: new PrismaAdapter({ prisma }) },
296
+ sessionId: "user-123" // Automatically loads or creates this session
297
+ });
298
+
299
+ // Access session manager
300
+ const sessionManager = agent.session;
301
+
302
+ // Get or create session (handles existing, new, or auto-generated IDs)
303
+ await sessionManager.getOrCreate("user-456");
304
+ await sessionManager.getOrCreate(); // Auto-generates ID
305
+
306
+ // Session data access
307
+ const data = sessionManager.getData<MyDataType>();
308
+ await sessionManager.setData({ field: "value" });
309
+
310
+ // History management
311
+ await sessionManager.addMessage("user", "Hello");
312
+ const history = sessionManager.getHistory();
313
+ sessionManager.clearHistory();
314
+ ```
315
+
316
+ ### Session Persistence
317
+
318
+ Sessions are automatically persisted when using persistence adapters:
319
+
320
+ ```typescript
321
+ const agent = new Agent({
322
+ persistence: {
323
+ adapter: new RedisAdapter(redisClient),
324
+ autoSave: true, // Auto-save after each response (default)
325
+ },
326
+ sessionId: "user-123" // Automatically loads from persistence
327
+ });
328
+
329
+ // Sessions are automatically saved after each message
330
+ const response = await agent.respond("Hello");
331
+ // Session state automatically persisted
332
+
333
+ // Manual session operations (if needed)
334
+ await agent.session.save(); // Manual save
335
+ await agent.session.delete(); // Delete session
336
+ const newSession = await agent.session.reset(true); // Reset with history preserved
337
+ ```
338
+
339
+ ### Session Access Methods
340
+
341
+ ```typescript
342
+ // Access current session data
343
+ const data = agent.session.getData<MyDataType>();
344
+ await agent.session.setData({ field: "value" });
345
+
346
+ // Session information
347
+ console.log(agent.session.id); // Current session ID
348
+ console.log(agent.session.current); // Full session state
349
+
350
+ // History management
351
+ const history = agent.session.getHistory();
352
+ await agent.session.addMessage("user", "New message");
353
+ agent.session.clearHistory();
354
+ ```
355
+
356
+ ## Route Management
357
+
358
+ ### Declarative Route Creation
359
+
360
+ ```typescript
361
+ const agent = new Agent<CustomerContext, CustomerData>({
362
+ // Agent-level schema defines all possible data fields
363
+ schema: { /* comprehensive schema */ },
364
+
365
+ routes: [
366
+ {
367
+ title: "Technical Support",
368
+ description: "Help with technical issues",
369
+ conditions: ["user reports technical problem"],
370
+ // NEW: Routes specify required fields instead of schemas
371
+ requiredFields: ["customerName", "email", "issueType", "issueDescription"],
372
+ optionalFields: ["phone", "priority"],
373
+ initialStep: {
374
+ prompt:
375
+ "I understand you're having a technical issue. Can you describe what's happening?",
376
+ collect: ["issueType", "issueDescription"], // Collects into agent-level data
377
+ },
378
+ },
379
+ {
380
+ title: "Billing Inquiry",
381
+ description: "Handle billing and payment questions",
382
+ conditions: ["user asks about billing or payment"],
383
+ requiredFields: ["customerName", "email", "issueType"],
384
+ initialStep: {
385
+ prompt:
386
+ "I'd be happy to help with your billing question. What can I assist with?",
387
+ collect: ["issueType"], // Maps to agent schema field
388
+ },
389
+ },
390
+ ],
391
+ });
392
+ ```
393
+
394
+ ### Programmatic Route Creation
395
+
396
+ ```typescript
397
+ // Create routes dynamically with required fields
398
+ const supportRoute = agent
399
+ .createRoute({
400
+ title: "Customer Support",
401
+ requiredFields: ["customerName", "email", "issueType"], // NEW: Required fields
402
+ optionalFields: ["phone"], // NEW: Optional fields
403
+ initialStep: {
404
+ prompt: "How can I help you today?",
405
+ collect: ["customerName", "email"], // Collects into agent-level data
406
+ },
407
+ })
408
+ .nextStep({
409
+ prompt: "I understand you need help, {{customerName}}. What type of issue are you experiencing?",
410
+ collect: ["issueType"],
411
+ requires: ["customerName", "email"], // Prerequisites from agent data
412
+ });
413
+
414
+ // Access created routes
415
+ const routes = agent.getRoutes();
416
+ console.log(routes.map((r) => r.title)); // ["Customer Support", ...]
417
+ ```
418
+
419
+ ## Tool Integration
420
+
421
+ ### Agent-Level Tools
422
+
423
+ Available to all routes and steps:
424
+
425
+ ```typescript
426
+ const agent = new Agent({
427
+ tools: [searchTool, calculatorTool, translationTool],
428
+ });
429
+ ```
430
+
431
+ ### Route-Level Tools
432
+
433
+ Specific to a route:
434
+
435
+ ```typescript
436
+ const route = agent.createRoute({
437
+ title: "Order Management",
438
+ tools: [orderLookupTool, orderUpdateTool, refundTool],
439
+ });
440
+ ```
441
+
442
+ ### Tool Resolution Priority
443
+
444
+ 1. **Step-level tools** (highest priority)
445
+ 2. **Route-level tools**
446
+ 3. **Agent-level tools** (lowest priority)
447
+
448
+ ## Agent-Level Data Collection
449
+
450
+ ### Centralized Data Schema
451
+
452
+ The new architecture centralizes data collection at the agent level, allowing all routes to work with the same data structure:
453
+
454
+ ```typescript
455
+ interface ComprehensiveData {
456
+ // Customer identification
457
+ customerId?: string;
458
+ customerName?: string;
459
+ email?: string;
460
+ phone?: string;
461
+
462
+ // Issue tracking
463
+ issueType?: 'booking' | 'billing' | 'technical' | 'other';
464
+ issueDescription?: string;
465
+ priority?: 'low' | 'medium' | 'high';
466
+
467
+ // Feedback
468
+ rating?: number;
469
+ comments?: string;
470
+ recommendToFriend?: boolean;
471
+ }
472
+
473
+ const agent = new Agent<Context, ComprehensiveData>({
474
+ name: "Customer Service Agent",
475
+ schema: {
476
+ type: "object",
477
+ properties: {
478
+ customerId: { type: "string" },
479
+ customerName: { type: "string" },
480
+ email: { type: "string", format: "email" },
481
+ phone: { type: "string" },
482
+ issueType: { type: "string", enum: ["booking", "billing", "technical", "other"] },
483
+ issueDescription: { type: "string" },
484
+ priority: { type: "string", enum: ["low", "medium", "high"] },
485
+ rating: { type: "number", minimum: 1, maximum: 5 },
486
+ comments: { type: "string" },
487
+ recommendToFriend: { type: "boolean" }
488
+ }
489
+ }
490
+ });
491
+ ```
492
+
493
+ ### Route Completion Based on Required Fields
494
+
495
+ Routes now specify which fields they need to complete, enabling cross-route data sharing:
496
+
497
+ ```typescript
498
+ // Support route needs basic info + issue details
499
+ const supportRoute = agent.createRoute({
500
+ title: "Customer Support",
501
+ requiredFields: ["customerName", "email", "issueType", "issueDescription"],
502
+ optionalFields: ["phone", "priority"]
503
+ });
504
+
505
+ // Feedback route needs basic info + rating
506
+ const feedbackRoute = agent.createRoute({
507
+ title: "Feedback Collection",
508
+ requiredFields: ["customerName", "email", "rating"],
509
+ optionalFields: ["comments", "recommendToFriend"]
510
+ });
511
+
512
+ // Routes can complete when their required data is available,
513
+ // regardless of which route collected it
514
+ ```
515
+
516
+ ### Cross-Route Data Sharing
517
+
518
+ Data collected by any route is available to all other routes:
519
+
520
+ ```typescript
521
+ // User starts with support, provides name and email
522
+ const response1 = await agent.respond("I need help, my name is John Doe, email john@example.com");
523
+ // Agent data now contains: { customerName: "John Doe", email: "john@example.com" }
524
+
525
+ // User switches to feedback - already has 2/3 required fields
526
+ const response2 = await agent.respond("Actually, I want to leave feedback. I'd rate you 5 stars.");
527
+ // Feedback route completes immediately with: { customerName: "John Doe", email: "john@example.com", rating: 5 }
528
+ ```
529
+
530
+ ### Agent Data Management Methods
531
+
532
+ Access and update agent-level data programmatically:
533
+
534
+ ```typescript
535
+ // Get current collected data
536
+ const currentData = agent.getCollectedData();
537
+ console.log(currentData); // { customerName: "John", email: "john@example.com" }
538
+
539
+ // Update data programmatically
540
+ await agent.updateCollectedData({
541
+ customerId: "CUST-12345",
542
+ priority: "high"
543
+ });
544
+
545
+ // Validate data against schema
546
+ const validation = agent.validateData({ email: "invalid-email" });
547
+ if (!validation.valid) {
548
+ console.log(validation.errors); // Detailed validation errors
549
+ }
550
+ ```
551
+
552
+ ## Response Generation
553
+
554
+ ### Simple Response API
555
+
556
+ ```typescript
557
+ // Simple message-based API (recommended)
558
+ const response = await agent.respond("How do I reset my password?");
559
+ console.log(response.message);
560
+ console.log(agent.session.getData<CustomerData>()); // Agent-level collected data
561
+ console.log(response.toolCalls); // Any tool calls made
562
+ console.log(response.isRouteComplete); // Whether route finished
563
+
564
+ // Advanced usage with history override
565
+ const response = await agent.respond("Hello", {
566
+ history: [
567
+ { role: "user", content: "Previous context" },
568
+ { role: "assistant", content: "I understand" }
569
+ ]
570
+ });
571
+ ```
572
+
573
+ ### Streaming Response
574
+
575
+ ```typescript
576
+ const stream = agent.respondStream("Tell me about your services");
577
+
578
+ for await (const chunk of stream) {
579
+ if (chunk.delta) {
580
+ process.stdout.write(chunk.delta); // Real-time output
581
+ }
582
+
583
+ if (chunk.done) {
584
+ console.log("\nSession ID:", agent.session.id);
585
+ console.log("Tool calls:", chunk.toolCalls);
586
+ }
587
+ }
588
+ ```
589
+
590
+ ### Response with Custom Context
591
+
592
+ ```typescript
593
+ const response = await agent.respond("Hola", {
594
+ contextOverride: {
595
+ language: "es", // Override context for this response
596
+ debug: true,
597
+ }
598
+ });
599
+ ```
600
+
601
+ ## Advanced Features
602
+
603
+ ### Route Transitions
604
+
605
+ ```typescript
606
+ // Manual route transition
607
+ await agent.nextStepRoute("premium-support", session);
608
+
609
+ // Route completion transitions
610
+ const supportRoute = agent.createRoute({
611
+ title: "Basic Support",
612
+ onComplete: "feedback-survey", // Auto-transition when complete
613
+ });
614
+
615
+ // Dynamic transitions
616
+ const dynamicRoute = agent.createRoute({
617
+ title: "Workflow",
618
+ onComplete: async (session, context) => {
619
+ if (session.data.success) {
620
+ return "success-route";
621
+ }
622
+ return "retry-route";
623
+ },
624
+ });
625
+ ```
626
+
627
+ ### Debugging
628
+
629
+ ```typescript
630
+ const debugAgent = new Agent({
631
+ name: "Debug Agent",
632
+ debug: true, // Enables detailed logging
633
+ provider: openaiProvider,
634
+ });
635
+
636
+ // Logs will show:
637
+ // [Agent] Selected route: Technical Support
638
+ // [Agent] Entered step: initial_step
639
+ // [Agent] Tool executed: search_kb (success: true)
640
+ // [RoutingEngine] AI selected step: detailed_help
641
+ ```
642
+
643
+ ## Agent and Route Option Merging
644
+
645
+ @fai/agent supports hierarchical configuration where route-level options can override or merge with agent-level options. Understanding this behavior is crucial for effective agent design.
646
+
647
+ ### Guidelines and Terms
648
+
649
+ **Guidelines** are combined from both agent and route levels:
650
+
651
+ - Agent-level guidelines are applied first
652
+ - Route-level guidelines are added after agent guidelines
653
+ - All guidelines are evaluated together during response generation
654
+
655
+ ```typescript
656
+ const agent = new Agent({
657
+ guidelines: [
658
+ { id: "polite", action: "Always be polite and professional" },
659
+ { id: "accurate", action: "Provide accurate information" },
660
+ ],
661
+ });
662
+
663
+ const route = agent.createRoute({
664
+ guidelines: [
665
+ {
666
+ id: "domain_specific",
667
+ action: "Use technical terminology appropriately",
668
+ },
669
+ ],
670
+ });
671
+ // Result: All 3 guidelines (polite, accurate, domain_specific) are used
672
+ ```
673
+
674
+ **Terms** use route-level precedence:
675
+
676
+ - Agent-level terms are loaded first
677
+ - Route-level terms with the same name override agent-level terms
678
+ - This allows routes to provide domain-specific definitions
679
+
680
+ ```typescript
681
+ const agent = new Agent({
682
+ terms: [{ name: "API", description: "Application Programming Interface" }],
683
+ });
684
+
685
+ const route = agent.createRoute({
686
+ terms: [
687
+ {
688
+ name: "API",
689
+ description: "In this context, API refers to our REST API endpoints",
690
+ },
691
+ ],
692
+ });
693
+ // Result: Route's definition of "API" takes precedence
694
+ ```
695
+
696
+ ### Tools
697
+
698
+ **Tools** follow a hierarchical priority system:
699
+
700
+ 1. Step-level tools (highest priority)
701
+ 2. Route-level tools
702
+ 3. Agent-level tools (lowest priority)
703
+
704
+ Tools with the same ID at different levels will be resolved by priority, with higher-level tools taking precedence.
705
+
706
+ ### Lifecycle Hooks
707
+
708
+ **Lifecycle hooks** are called at both agent and route levels:
709
+
710
+ - Agent-level hooks are called for all routes
711
+ - Route-level hooks are called only for that specific route
712
+ - Both types of hooks can modify context and data
713
+
714
+ ## Best Practices
715
+
716
+ ### Context Design
717
+
718
+ - **Keep context focused**: Only include data needed across conversations
719
+ - **Use providers for freshness**: Prefer `contextProvider` over static context for dynamic data
720
+ - **Handle updates gracefully**: Use lifecycle hooks for validation and side effects
721
+
722
+ ### Session Management
723
+
724
+ - **Set up persistence early**: Configure persistence for production use
725
+ - **Use meaningful session IDs**: Include user/context identifiers
726
+ - **Clean up old sessions**: Implement retention policies
727
+
728
+ ### Route Organization
729
+
730
+ - **Single responsibility**: Each route should serve one clear user intent
731
+ - **Progressive disclosure**: Collect information in logical order
732
+ - **Clear completion criteria**: Define when routes should end
733
+
734
+ ### Tool Management
735
+
736
+ - **Hierarchical scoping**: Use appropriate tool levels for security and performance
737
+ - **Error handling**: Implement robust error recovery in tools
738
+ - **Performance monitoring**: Track tool usage and response times
739
+
740
+ ### Performance Optimization
741
+
742
+ - **Limit concurrent sessions**: Implement session limits for high-traffic scenarios
743
+ - **Cache context data**: Avoid redundant API calls in context providers
744
+ - **Batch operations**: Group related tool calls when possible
745
+
746
+ ## Migration from Legacy Agents
747
+
748
+ ### From Domain-Based to Route-Based
749
+
750
+ ```typescript
751
+ // Legacy (domain-based)
752
+ const legacyAgent = new Agent({
753
+ domains: ["calendar", "email"],
754
+ });
755
+
756
+ // New (route-based)
757
+ const newAgent = new Agent({
758
+ routes: [
759
+ {
760
+ title: "Calendar Management",
761
+ tools: [calendarTool], // Route-specific tools
762
+ },
763
+ {
764
+ title: "Email Management",
765
+ tools: [emailTool],
766
+ },
767
+ ],
768
+ });
769
+ ```
770
+
771
+ ### From Static to Dynamic Context
772
+
773
+ ```typescript
774
+ // Legacy (static context)
775
+ const staticAgent = new Agent({
776
+ context: { userId: "123" },
777
+ });
778
+
779
+ // New (dynamic context)
780
+ const dynamicAgent = new Agent({
781
+ contextProvider: async () => {
782
+ return { userId: await auth.getCurrentUserId() };
783
+ },
784
+ });
785
+ ```
786
+
787
+ The Agent class provides a comprehensive foundation for building intelligent, context-aware AI applications with robust conversation management and data collection capabilities.