@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
package/README.md CHANGED
@@ -97,9 +97,9 @@ After building production AI applications, we found existing solutions either:
97
97
 
98
98
  ### 🔧 **Tools & Data Integration**
99
99
 
100
- - **Data-Aware Tools** - Tools access collected data directly via `data` context
101
- - **Enrichment Hooks** - Tools can modify collected data with `dataUpdate`
102
- - **Action Flags** - Tools set flags for conditional execution
100
+ - **Advanced Tool System** - Context-aware tools with data access and lifecycle integration
101
+ - **Dynamic Tool Calling** - AI can call tools during streaming responses
102
+ - **Tool Result Processing** - Tools update context and collected data automatically
103
103
 
104
104
  </td>
105
105
  </tr>
@@ -119,6 +119,28 @@ After building production AI applications, we found existing solutions either:
119
119
 
120
120
  - **Always-On Routing** - Users can change their mind mid-conversation
121
121
  - **Context Awareness** - Router sees current progress and collected data
122
+
123
+ </td>
124
+ </tr>
125
+ <tr>
126
+ <td width="50%">
127
+
128
+ ### 🚀 **Advanced Features**
129
+
130
+ - **Streaming Responses** - Real-time response generation with tool execution
131
+ - **Lifecycle Hooks** - `prepare`/`finalize` functions or tools on steps, context/data update hooks
132
+ - **Sequential Steps** - Define linear conversation flows with `steps` array
133
+ - **Route Transitions** - Automatic flow transitions when routes complete
134
+ - **Smart Step Control** - `skipIf` and `requires` for data-driven flow control
135
+
136
+ </td>
137
+ <td width="50%">
138
+
139
+ ### 🎨 **Behavioral Control**
140
+
141
+ - **Guidelines & Rules** - Define agent behavior patterns and restrictions
142
+ - **Route-Specific Logic** - Different rules for different conversation contexts
143
+ - **Knowledge Base** - Structured information available to AI during responses
122
144
  - **Session Step** - Track conversation progress across turns
123
145
 
124
146
  </td>
@@ -151,7 +173,12 @@ yarn add @falai/agent
151
173
  Create a minimal conversational agent:
152
174
 
153
175
  ```typescript
154
- import { Agent, GeminiProvider } from "@falai/agent";
176
+ import {
177
+ Agent,
178
+ GeminiProvider,
179
+ createMessageEvent,
180
+ EventSource,
181
+ } from "@falai/agent";
155
182
 
156
183
  // Create your agent
157
184
  const agent = new Agent({
@@ -159,24 +186,26 @@ const agent = new Agent({
159
186
  description: "A helpful assistant",
160
187
  provider: new GeminiProvider({
161
188
  apiKey: process.env.GEMINI_API_KEY,
162
- model: "models/gemini-2.0-flash-exp",
189
+ model: "models/gemini-2.5-flash",
163
190
  }),
164
191
  });
165
192
 
166
- // Create a simple route
193
+ // Create a simple route with sequential steps
167
194
  agent.createRoute({
168
195
  title: "General Help",
169
196
  description: "Answers user questions",
170
197
  conditions: ["User needs help or asks a question"],
171
- initialStep: {
172
- instructions: "Answer the user's question helpfully",
173
- },
198
+ steps: [
199
+ {
200
+ id: "answer_question",
201
+ description: "Answer the user's question helpfully",
202
+ prompt: "Answer the user's question helpfully",
203
+ },
204
+ ],
174
205
  });
175
206
 
176
- // Start chatting
177
- const response = await agent.respond({
178
- history: [{ source: "customer", name: "Alice", content: "What can you do?" }],
179
- });
207
+ // Start chatting - simple message-based API
208
+ const response = await agent.respond("What can you do?");
180
209
 
181
210
  console.log(response.message);
182
211
  ```
@@ -185,6 +214,60 @@ console.log(response.message);
185
214
 
186
215
  ---
187
216
 
217
+ ## 🔧 Advanced Step Configuration
218
+
219
+ ### Using Tools as Prepare/Finalize Hooks
220
+
221
+ Steps can use tools for `prepare` and `finalize` lifecycle hooks, enabling powerful data processing and side effects:
222
+
223
+ ```typescript
224
+ // Define a preparation tool
225
+ const validateUser = {
226
+ id: "validate_user",
227
+ description: "Validate user data before processing",
228
+ parameters: { type: "object", properties: {} },
229
+ handler: ({ context, data }) => {
230
+ // Validation logic
231
+ if (!data.email?.includes("@")) {
232
+ throw new Error("Invalid email address");
233
+ }
234
+ return { data: "User validated" };
235
+ },
236
+ };
237
+
238
+ // Use tools in step lifecycle
239
+ agent.createRoute({
240
+ title: "User Registration",
241
+ schema: {
242
+ /* ... */
243
+ },
244
+ steps: [
245
+ {
246
+ id: "collect_info",
247
+ description: "Collect user information",
248
+ collect: ["name", "email"],
249
+ prompt: "Please provide your name and email.",
250
+ finalize: validateUser, // Tool validates data after collection
251
+ },
252
+ {
253
+ id: "send_welcome",
254
+ description: "Send welcome email",
255
+ prompt: "Welcome! Check your email for confirmation.",
256
+ prepare: "send_welcome_email", // Tool ID string - sends email before AI responds
257
+ },
258
+ ],
259
+ });
260
+ ```
261
+
262
+ **Benefits:**
263
+
264
+ - ✅ **Reusable Logic** - Tools can be shared across steps and routes
265
+ - ✅ **Error Handling** - Tool execution includes automatic error handling
266
+ - ✅ **Context Access** - Tools receive full context and collected data
267
+ - ✅ **Data Updates** - Tools can modify collected data or agent context
268
+
269
+ ---
270
+
188
271
  ### Level 2: Data Extraction (The Real Power)
189
272
 
190
273
  Now let's build an agent that intelligently collects structured data:
@@ -193,11 +276,9 @@ Now let's build an agent that intelligently collects structured data:
193
276
  import {
194
277
  Agent,
195
278
  OpenAIProvider,
196
- defineTool,
197
279
  createMessageEvent,
198
280
  EventSource,
199
- END_ROUTE,
200
- type ToolContext,
281
+ type Tool,
201
282
  } from "@falai/agent";
202
283
 
203
284
  // 1️⃣ Define the data you want to collect
@@ -207,93 +288,100 @@ interface HotelBookingData {
207
288
  guests: number;
208
289
  }
209
290
 
210
- // 2️⃣ Create your agent
211
- const agent = new Agent({
291
+ // 2️⃣ Create your agent with centralized data schema
292
+ const agent = new Agent<{}, HotelBookingData>({
212
293
  name: "BookingBot",
213
294
  description: "A hotel booking assistant that collects information.",
214
295
  provider: new OpenAIProvider({
215
296
  apiKey: process.env.OPENAI_API_KEY,
216
- model: "gpt-5", // or your preferred model
297
+ model: "gpt-4", // or your preferred model
217
298
  }),
299
+
300
+ // Agent-level schema defines all possible data fields
301
+ schema: {
302
+ type: "object",
303
+ properties: {
304
+ hotelName: { type: "string", description: "The name of the hotel." },
305
+ date: { type: "string", description: "The desired booking date." },
306
+ guests: { type: "number", description: "The number of guests." },
307
+ },
308
+ required: ["hotelName", "date", "guests"],
309
+ },
310
+
311
+ // Agent-level data validation and enrichment
312
+ hooks: {
313
+ onDataUpdate: async (data, previousData) => {
314
+ // Auto-validate and enrich data
315
+ if (data.guests && data.guests > 10) {
316
+ throw new Error("Maximum 10 guests allowed");
317
+ }
318
+ return data;
319
+ }
320
+ }
218
321
  });
219
322
 
220
- // 3️⃣ Define a tool that uses the collected data
221
- const bookHotel = defineTool(
222
- "book_hotel",
223
- async ({ data }: ToolContext<{}, HotelBookingData>) => {
224
- // Logic to book the hotel...
323
+ // 3️⃣ Define a tool that uses the agent-level collected data
324
+ const bookHotel: Tool<unknown, [], string, HotelBookingData> = {
325
+ id: "book_hotel",
326
+ description: "Books a hotel once all information is collected.",
327
+ parameters: { type: "object", properties: {} },
328
+ handler: ({ data }) => {
329
+ // Tool receives complete agent data
225
330
  return {
226
- data: `Booking confirmed for ${data?.guests} at ${data?.hotelName} on ${data?.date}!`,
331
+ data: `Booking confirmed for ${data.guests} guests at ${data.hotelName} on ${data.date}!`,
227
332
  };
228
333
  },
229
- { description: "Books a hotel once all information is collected." }
230
- );
231
-
232
- const schema = {
233
- type: "object",
234
- properties: {
235
- hotelName: { type: "string", description: "The name of the hotel." },
236
- date: { type: "string", description: "The desired booking date." },
237
- guests: { type: "number", description: "The number of guests." },
238
- },
239
- required: ["hotelName", "date", "guests"],
240
334
  };
241
335
 
242
- // 4️⃣ Create a data-driven route
243
- const bookingRoute = agent.createRoute<HotelBookingData>({
336
+ // 4️⃣ Create a route with required fields specification
337
+ agent.createRoute({
244
338
  title: "Book Hotel",
245
339
  description: "Guides the user through the hotel booking process.",
246
340
  conditions: ["User wants to book a hotel"],
247
- schema,
248
- endStep: {
249
- instructions: "Confirm the booking details warmly and thank the user",
250
- },
251
- });
252
-
253
- // 5️⃣ Build the flow to collect data step-by-step
254
- const askHotel = bookingRoute.initialStep.nextStep({
255
- instructions: "Ask which hotel they want to book",
256
- collect: ["hotelName"],
257
- skipIf: (data) => !!data.hotelName, // Skip if we already have it
258
- });
259
-
260
- const askDate = askHotel.nextStep({
261
- instructions: "Ask for the booking date",
262
- collect: ["date"],
263
- skipIf: (data) => !!data.date,
264
- });
265
-
266
- const askGuests = askDate.nextStep({
267
- instructions: "Ask for the number of guests",
268
- collect: ["guests"],
269
- skipIf: (data) => !!data.guests,
270
- });
271
-
272
- const confirmBooking = askGuests.nextStep({
273
- tool: bookHotel,
274
- condition:
275
- "All required information (hotel, date, guests) has been collected.",
276
- });
277
-
278
- confirmBooking.nextStep({
279
- step: END_ROUTE, // End the conversation flow
280
- });
281
-
282
- // 6️⃣ Start conversing
283
- const response = await agent.respond({
284
- history: [
285
- createMessageEvent(
286
- EventSource.CUSTOMER,
287
- "Alice",
288
- "I want to book a room at the Grand Hotel for 2 people."
289
- ),
341
+ requiredFields: ["hotelName", "date", "guests"], // Required for route completion
342
+
343
+ // 5️⃣ Define the flow to collect data step-by-step
344
+ steps: [
345
+ {
346
+ id: "ask_hotel",
347
+ description: "Ask which hotel they want to book",
348
+ prompt: "Which hotel would you like to book?",
349
+ collect: ["hotelName"],
350
+ skipIf: (data: Partial<HotelBookingData>) => !!data.hotelName,
351
+ },
352
+ {
353
+ id: "ask_date",
354
+ description: "Ask for the booking date",
355
+ prompt: "What date would you like to book for?",
356
+ collect: ["date"],
357
+ requires: ["hotelName"], // Prerequisites from agent data
358
+ skipIf: (data: Partial<HotelBookingData>) => !!data.date,
359
+ },
360
+ {
361
+ id: "ask_guests",
362
+ description: "Ask for the number of guests",
363
+ prompt: "How many guests will be staying?",
364
+ collect: ["guests"],
365
+ requires: ["hotelName", "date"], // Prerequisites from agent data
366
+ skipIf: (data: Partial<HotelBookingData>) => data.guests !== undefined,
367
+ },
368
+ {
369
+ id: "confirm_booking",
370
+ description: "Confirm and book the hotel",
371
+ prompt: "Let me confirm your booking details.",
372
+ tools: [bookHotel], // Tool accesses complete agent data
373
+ requires: ["hotelName", "date", "guests"],
374
+ },
290
375
  ],
291
376
  });
292
377
 
378
+ // 5️⃣ Start conversing - simple message API
379
+ const response = await agent.respond("I want to book a room at the Grand Hotel for 2 people.");
380
+
293
381
  // The agent sees that `hotelName` and `guests` are provided,
294
382
  // skips the first and third steps, and only asks for the date.
295
383
  console.log(response.message);
296
- // Expected: "Sure, for what date would you like to book at the Grand Hotel?"
384
+ // Expected: "What date would you like to book for?"
297
385
  ```
298
386
 
299
387
  **That's it!** The data-driven agent will:
@@ -306,32 +394,61 @@ console.log(response.message);
306
394
 
307
395
  This creates a flexible and natural conversation, guided by a clear data structure.
308
396
 
309
- 📖 **[See more examples →](./docs/EXAMPLES.md)** | **[Full tutorial →](./docs/GETTING_STARTED.md)**
397
+ 📖 **[See more examples →](./examples/)** | **[Full tutorial →](./docs/guides/getting-started/README.md)**
310
398
 
311
399
  ### ⚡ Advanced Features
312
400
 
313
401
  **Streaming responses** for real-time UX:
314
402
 
315
403
  ```typescript
316
- for await (const chunk of agent.respondStream({ history })) {
404
+ for await (const chunk of agent.respondStream("Hello")) {
317
405
  process.stdout.write(chunk.delta);
406
+ if (chunk.done) {
407
+ console.log("\nTool calls:", chunk.toolCalls);
408
+ }
318
409
  }
319
410
  ```
320
411
 
321
- **Session step** for multi-turn conversations:
412
+ **Automatic session management** for multi-turn conversations:
322
413
 
323
414
  ```typescript
324
- let session = createSession<MyData>();
325
- const response = await agent.respond({ history, session });
326
- session = response.session!; // Tracks progress across turns, you can use it to save the current step in your database
415
+ // Server-side: Create agent with sessionId
416
+ const agent = new Agent({
417
+ name: "Assistant",
418
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
419
+ persistence: { adapter: new PrismaAdapter({ prisma }) },
420
+ sessionId: "user-123" // Automatically loads or creates session
421
+ });
422
+
423
+ // Simple conversation - no manual session management needed
424
+ const response = await agent.respond("Hello, how are you?");
425
+ console.log(response.message);
426
+ console.log(agent.session.id); // Session ID for client
327
427
  ```
328
428
 
329
- **Database persistence** with any adapter:
429
+ **Automatic session persistence** with any adapter:
330
430
 
331
431
  ```typescript
332
432
  import { PrismaAdapter } from "@falai/agent";
333
- const agent = new Agent({
334
- persistence: { adapter: new PrismaAdapter({ prisma }) },
433
+
434
+ // Server endpoint - sessions managed automatically
435
+ app.post('/chat', async (req, res) => {
436
+ const { sessionId, message } = req.body;
437
+
438
+ const agent = new Agent({
439
+ name: "ChatBot",
440
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
441
+ persistence: { adapter: new PrismaAdapter({ prisma }) },
442
+ sessionId // Automatically loads or creates this session
443
+ });
444
+
445
+ const response = await agent.respond(message);
446
+
447
+ res.json({
448
+ message: response.message,
449
+ sessionId: agent.session.id, // Return session ID to client
450
+ isComplete: response.isRouteComplete
451
+ });
335
452
  });
336
453
  ```
337
454
 
@@ -341,104 +458,172 @@ const agent = new Agent({
341
458
 
342
459
  ## 📚 Documentation
343
460
 
344
- 📋 **[Complete Documentation Index →](docs/DOCS.md)** - Searchable index of all docs
461
+ 📋 **[Complete Documentation Index →](docs/README.md)** - Searchable index of all docs
462
+
463
+ ### 🚀 Getting Started
464
+
465
+ - **[Quick Start Guide](./docs/guides/getting-started/README.md)** - Build your first agent in 15 minutes
466
+
467
+ ### 🏗️ Core Framework
345
468
 
346
- **Core Guides:**
469
+ - **[Agent Orchestration](./docs/core/agent/README.md)** - Agent lifecycle, configuration & hooks
470
+ - **[Context Management](./docs/core/agent/context-management.md)** - Dynamic context providers & updates
471
+ - **[Session Management](./docs/core/agent/session-management.md)** - Session persistence & state
347
472
 
348
- - 📘 **[Getting Started](./docs/GETTING_STARTED.md)** - Build your first agent in 5 minutes
349
- - 🏗️ **[Architecture](./docs/ARCHITECTURE.md)** - Design principles & philosophy
350
- - 🔧 **[API Reference](./docs/API_REFERENCE.md)** - Complete API documentation
351
- - 📝 **[Examples](./docs/EXAMPLES.md)** - Production-ready code examples
473
+ ### 💬 Conversation Flows
352
474
 
353
- **Feature Guides:**
475
+ - **[Routes](./docs/core/conversation-flows/routes.md)** - Route definition & lifecycle
476
+ - **[Steps](./docs/core/conversation-flows/steps.md)** - Step transitions & logic
354
477
 
355
- - 🛤️ **[Routes](./docs/ROUTES.md)** - Creating conversational routes & flows
356
- - 🔄 **[Steps](./docs/STEPS.md)** - Managing steps & transitions
357
- - 💾 **[Persistence](./docs/PERSISTENCE.md)** - Database integration with adapters
358
- - 🔒 **[Domains](./docs/DOMAINS.md)** - Optional tool security & organization
359
- - 🎛️ **[Agent](./docs/AGENT.md)** - Configuration patterns
360
- - 📊 **[Context Management](./docs/CONTEXT_MANAGEMENT.md)** - Session step & lifecycle hooks
361
- - 🤖 **[AI Providers](./docs/PROVIDERS.md)** - Anthropic, OpenAI, Gemini, OpenRouter
478
+ ### 🤖 AI Integration
479
+
480
+ - **[AI Providers](./docs/core/ai-integration/providers.md)** - Gemini, OpenAI, Anthropic, OpenRouter
481
+ - **[Prompt Composition](./docs/core/ai-integration/prompt-composition/)** - How prompts are built
482
+ - **[Response Processing](./docs/core/ai-integration/response-processing/)** - Schema extraction & tool calls
483
+
484
+ ### 🔧 Tools & Data
485
+
486
+ - **[Tool Definition](./docs/core/tools/tool-definition.md)** - Creating and configuring tools
487
+ - **[Tool Execution](./docs/core/tools/tool-execution.md)** - Dynamic tool calling and context updates
488
+ - **[Tool Scoping](./docs/core/tools/tool-scoping.md)** - Agent, route, and step-level tool management
489
+
490
+ ### 💾 Persistence
491
+
492
+ - **[Session Storage](./docs/core/persistence/session-storage.md)** - Session persistence patterns
493
+ - **[Database Adapters](./docs/core/persistence/adapters.md)** - Built-in adapter configurations
494
+
495
+ ### 🚀 Advanced Guides
496
+
497
+ - **[Building Agents](./docs/guides/building-agents/)** - Complete agent construction patterns
498
+ - **[Advanced Patterns](./docs/guides/advanced-patterns/)** - Complex use cases & integrations
499
+ - **[API Reference](./docs/api/overview.md)** - Complete API documentation
362
500
 
363
501
  ---
364
502
 
365
- ## 🎯 Examples - Pick Your Use Case
503
+ ## 🎯 Examples - By Domain
504
+
505
+ ### 🏗️ Core Concepts
506
+
507
+ Fundamental patterns every agent needs:
508
+
509
+ - **[Basic Agent](./examples/core-concepts/basic-agent.ts)** - Minimal agent setup and configuration
510
+ - **[Schema-Driven Extraction](./examples/core-concepts/schema-driven-extraction.ts)** - Type-safe data collection with JSON Schema
511
+ - **[Session Management](./examples/core-concepts/session-management.ts)** - Multi-turn conversations with persistence
512
+ - **[Context Providers](./examples/core-concepts/context-providers.ts)** - Dynamic context fetching and updates
513
+
514
+ ### 💬 Conversation Flows
366
515
 
367
- ### 🤖 Conversational Flows
516
+ Building intelligent dialogue systems:
368
517
 
369
- Build intelligent data-collecting conversations:
518
+ - **[Simple Route](./examples/conversation-flows/simple-route.ts)** - Basic route with linear step progression
519
+ - **[Data-Driven Flows](./examples/conversation-flows/data-driven-flows.ts)** - Conditional logic with skipIf and requires
520
+ - **[Conditional Branching](./examples/conversation-flows/conditional-branching.ts)** - AI-powered branching decisions
521
+ - **[Completion Transitions](./examples/conversation-flows/completion-transitions.ts)** - Route transitions when flows complete
370
522
 
371
- - 🏢 **[Business Onboarding](./examples/business-onboarding.ts)** - Multi-step company setup with conditional branching
372
- - ✈️ **[Travel Agent](./examples/travel-agent.ts)** - Flight & hotel booking with session step
373
- - 🏥 **[Healthcare Assistant](./examples/healthcare-agent.ts)** - Appointment scheduling & lab result delivery
523
+ ### 🤖 AI Providers
374
524
 
375
- ### 🏢 Production Patterns
525
+ Integrating different AI services:
376
526
 
377
- Enterprise-ready features:
527
+ - **[Gemini Integration](./examples/ai-providers/gemini-integration.ts)** - Google Gemini with advanced features
528
+ - **[OpenAI Integration](./examples/ai-providers/openai-integration.ts)** - GPT-4 and GPT-3.5 Turbo
529
+ - **[Anthropic Integration](./examples/ai-providers/anthropic-integration.ts)** - Claude with streaming and tool calling
530
+ - **[Custom Provider](./examples/ai-providers/custom-provider.ts)** - Build your own AI provider integration
378
531
 
379
- - 💾 **[Prisma Persistence](./examples/prisma-persistence.ts)** - Auto-save sessions with Prisma ORM
380
- - ⚡ **[Redis Persistence](./examples/redis-persistence.ts)** - High-performance in-memory sessions
381
- - 🔐 **[Domain Scoping](./examples/domain-scoping.ts)** - Tool security & access control
532
+ ### 💾 Persistence
382
533
 
383
- ### Advanced Techniques
534
+ Session storage and data persistence:
384
535
 
385
- Power-user features:
536
+ - **[Memory Sessions](./examples/persistence/memory-sessions.ts)** - In-memory session management
537
+ - **[Redis Persistence](./examples/persistence/redis-persistence.ts)** - High-performance Redis storage
538
+ - **[Database Persistence](./examples/persistence/database-persistence.ts)** - SQL/NoSQL database integration
539
+ - **[Custom Adapter](./examples/persistence/custom-adapter.ts)** - Build custom persistence adapters
386
540
 
387
- - 📋 **[Declarative Agent](./examples/declarative-agent.ts)** - Full constructor-based configuration
388
- - ⚡ **[Streaming Responses](./examples/streaming-agent.ts)** - Real-time response streaming
389
- - 📜 **[Rules & Prohibitions](./examples/rules-prohibitions.ts)** - Fine-grained behavior control
541
+ ### 🔧 Tools
390
542
 
391
- 📖 **[See all examples with detailed explanations →](./docs/EXAMPLES.md)**
543
+ Tool creation and data manipulation:
544
+
545
+ - **[Basic Tools](./examples/tools/basic-tools.ts)** - Simple tool creation and execution
546
+ - **[Data Enrichment Tools](./examples/tools/data-enrichment-tools.ts)** - Tools that modify collected data
547
+ - **[Context Updating Tools](./examples/tools/context-updating-tools.ts)** - Tools that modify agent context
548
+ - **[Domain Scoped Tools](./examples/tools/domain-scoped-tools.ts)** - Tool security and access control
549
+
550
+ ### 🚀 Advanced Patterns
551
+
552
+ Complex use cases and integrations:
553
+
554
+ - **[Multi-Turn Conversations](./examples/advanced-patterns/multi-turn-conversations.ts)** - Complex dialogue flows with backtracking
555
+ - **[Streaming Responses](./examples/advanced-patterns/streaming-responses.ts)** - Real-time response streaming
556
+ - **[Route Lifecycle Hooks](./examples/advanced-patterns/route-lifecycle-hooks.ts)** - Custom route behavior
557
+ - **[Custom Response Schemas](./examples/advanced-patterns/custom-response-schemas.ts)** - Advanced schema patterns
558
+
559
+ ### 🔗 Integrations
560
+
561
+ External service integrations:
562
+
563
+ - **[Server Deployment](./examples/integrations/server-deployment.ts)** - HTTP API with WebSocket streaming
564
+ - **[Database Integration](./examples/integrations/database-integration.ts)** - Direct database access patterns
565
+ - **[Webhook Integration](./examples/integrations/webhook-integration.ts)** - HTTP webhook handling
566
+ - **[API Integration](./examples/integrations/api-integration.ts)** - External API calls and responses
567
+
568
+ 📖 **[See all examples with detailed explanations →](./examples/)**
392
569
 
393
570
  ---
394
571
 
395
572
  ## 🏗️ How It Works
396
573
 
397
- `@falai/agent` uses a **schema-first, step machine-driven architecture**:
574
+ `@falai/agent` uses a **schema-first, pipeline-driven architecture** with sophisticated data extraction and lifecycle management:
398
575
 
399
576
  ```
400
- User Message
577
+ User Message + Session State
401
578
 
402
579
  ┌─────────────────────────────────────────┐
403
- │ 1. PREPARATION (Tools)
404
- │ • Execute tools for current step
405
- │ • Update context with results
406
- │ • Enrich collected data
580
+ │ 1. RESPONSE PIPELINE
581
+ │ • Prepare context & session
582
+ │ • Handle pending transitions
583
+ │ • Execute step prepare() functions
407
584
  └─────────────────────────────────────────┘
408
585
 
409
586
  ┌─────────────────────────────────────────┐
410
- │ 2. ROUTING (AI-Driven)
411
- │ • Evaluate all routes
412
- │ • Consider session context
413
- │ • Select best route (0-100 score)
587
+ │ 2. ROUTING + STEP SELECTION
588
+ │ • Evaluate routes (AI scoring)
589
+ │ • Filter steps (skipIf, requires)
590
+ │ • Select best route & step
414
591
  └─────────────────────────────────────────┘
415
592
 
416
593
  ┌─────────────────────────────────────────┐
417
- │ 3. STEP SELECTION (Code + AI)
418
- │ • Filter steps with skipIf (code)
419
- │ • AI picks best from valid steps
420
- │ • Update session step
594
+ │ 3. RESPONSE GENERATION
595
+ │ • Build prompt with context/schema
596
+ │ • Stream or generate AI response
597
+ │ • Extract data via JSON Schema
598
+ │ • Execute dynamic tools (streaming) │
421
599
  └─────────────────────────────────────────┘
422
600
 
423
601
  ┌─────────────────────────────────────────┐
424
- │ 4. RESPONSE (AI + Schema)
425
- │ • Extract data via JSON Schema
426
- │ • Generate natural message
427
- │ • Update session with new data
602
+ │ 4. POST-PROCESSING
603
+ │ • Run finalize() functions
604
+ │ • Update context/data (lifecycle)
605
+ │ • Auto-save session
606
+ │ • Handle route completion/transitions│
428
607
  └─────────────────────────────────────────┘
429
608
 
430
- Response with Structured Data
609
+ Response + Updated Session State
431
610
  ```
432
611
 
433
612
  ### Key Principles:
434
613
 
435
- ✅ **AI decides:** Route selection, step selection (from valid options), message generation, data extraction
436
- ✅ **Code decides:** Tool execution, step filtering (`skipIf`), data validation, flow control
614
+ ✅ **AI decides:** Route selection, message generation, data extraction, tool calling
615
+ ✅ **Code decides:** Step flow control (`skipIf`/`requires`), tool execution, lifecycle hooks, data validation
437
616
  ✅ **Result:** Predictable, testable agents with natural conversations
438
617
 
439
- **This architecture delivers 1-2 LLM calls per turn** (vs 3-5 in traditional approaches) while maintaining complete type safety.
618
+ ### New Features:
619
+
620
+ 🚀 **Streaming Support**: Real-time response generation with tool execution
621
+ 🔄 **Lifecycle Hooks**: `prepare`/`finalize` functions or tools, context/data update hooks
622
+ 📊 **Data-Driven Flows**: Smart step skipping, prerequisite checking, schema validation
623
+ 🛠️ **Advanced Tools**: Context-aware tools with data access and lifecycle integration
624
+ 💾 **Session Management**: Automatic persistence, state restoration, route transitions
440
625
 
441
- 📖 **[Read the full architecture guide →](./docs/ARCHITECTURE.md)**
626
+ 📖 **[Read the architecture docs →](./docs/core/agent/README.md)**
442
627
 
443
628
  ---
444
629
 
@@ -469,8 +654,8 @@ MIT © 2025
469
654
 
470
655
  **Choose your path:**
471
656
 
472
- 👶 **New to AI agents?** → [5-minute tutorial](./docs/GETTING_STARTED.md)
473
- 🏗️ **Building production app?** → [Architecture guide](./docs/ARCHITECTURE.md)
657
+ 👶 **New to AI agents?** → [Quick Start Guide](./docs/guides/getting-started/README.md)
658
+ 🏗️ **Building production app?** → [Agent Architecture](./docs/core/agent/README.md)
474
659
  💡 **Have questions?** → [Open a discussion](https://github.com/falai-dev/agent/discussions)
475
660
 
476
661
  ---