@falai/agent 0.8.0 → 0.9.0-alpha-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/README.md +306 -133
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/{core → cjs/src/core}/Agent.d.ts +67 -69
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +54 -35
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/{types → src/types}/route.d.ts +85 -31
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +70 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +36 -13
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/{cjs → src}/core/Agent.d.ts +67 -69
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/src/core/PersistenceManager.d.ts +98 -0
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +56 -26
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +31 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +54 -35
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +39 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/{types → src/types}/route.d.ts +85 -31
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +70 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +34 -13
  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} +902 -263
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1102 -487
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +87 -57
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +50 -38
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +229 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts +0 -96
  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.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  458. package/dist/cjs/core/Step.d.ts +0 -72
  459. package/dist/cjs/core/Step.d.ts.map +0 -1
  460. package/dist/cjs/core/Step.js +0 -150
  461. package/dist/cjs/core/Step.js.map +0 -1
  462. package/dist/cjs/core/Tool.d.ts +0 -39
  463. package/dist/cjs/core/Tool.d.ts.map +0 -1
  464. package/dist/cjs/core/Tool.js +0 -34
  465. package/dist/cjs/core/Tool.js.map +0 -1
  466. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  467. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  469. package/dist/cjs/core/Transition.d.ts +0 -32
  470. package/dist/cjs/core/Transition.d.ts.map +0 -1
  471. package/dist/cjs/core/Transition.js +0 -89
  472. package/dist/cjs/core/Transition.js.map +0 -1
  473. package/dist/cjs/index.d.ts.map +0 -1
  474. package/dist/cjs/index.js.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  476. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  477. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  479. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  480. package/dist/cjs/providers/index.js.map +0 -1
  481. package/dist/cjs/types/agent.d.ts.map +0 -1
  482. package/dist/cjs/types/agent.js.map +0 -1
  483. package/dist/cjs/types/ai.d.ts.map +0 -1
  484. package/dist/cjs/types/history.d.ts.map +0 -1
  485. package/dist/cjs/types/history.js +0 -37
  486. package/dist/cjs/types/history.js.map +0 -1
  487. package/dist/cjs/types/index.d.ts +0 -12
  488. package/dist/cjs/types/index.d.ts.map +0 -1
  489. package/dist/cjs/types/index.js +0 -12
  490. package/dist/cjs/types/index.js.map +0 -1
  491. package/dist/cjs/types/persistence.d.ts.map +0 -1
  492. package/dist/cjs/types/persistence.js.map +0 -1
  493. package/dist/cjs/types/route.d.ts.map +0 -1
  494. package/dist/cjs/types/session.d.ts +0 -104
  495. package/dist/cjs/types/session.d.ts.map +0 -1
  496. package/dist/cjs/types/session.js.map +0 -1
  497. package/dist/cjs/utils/event.js.map +0 -1
  498. package/dist/cjs/utils/id.js.map +0 -1
  499. package/dist/cjs/utils/logger.js.map +0 -1
  500. package/dist/cjs/utils/retry.js.map +0 -1
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js.map +0 -1
  503. package/dist/core/Agent.d.ts.map +0 -1
  504. package/dist/core/Agent.js +0 -962
  505. package/dist/core/Agent.js.map +0 -1
  506. package/dist/core/DomainRegistry.d.ts +0 -36
  507. package/dist/core/DomainRegistry.d.ts.map +0 -1
  508. package/dist/core/DomainRegistry.js +0 -68
  509. package/dist/core/DomainRegistry.js.map +0 -1
  510. package/dist/core/Events.d.ts +0 -41
  511. package/dist/core/Events.d.ts.map +0 -1
  512. package/dist/core/Events.js +0 -94
  513. package/dist/core/Events.js.map +0 -1
  514. package/dist/core/PersistenceManager.d.ts +0 -96
  515. package/dist/core/PersistenceManager.d.ts.map +0 -1
  516. package/dist/core/PersistenceManager.js.map +0 -1
  517. package/dist/core/PromptComposer.d.ts +0 -24
  518. package/dist/core/PromptComposer.d.ts.map +0 -1
  519. package/dist/core/PromptComposer.js +0 -123
  520. package/dist/core/PromptComposer.js.map +0 -1
  521. package/dist/core/ResponseEngine.d.ts +0 -14
  522. package/dist/core/ResponseEngine.d.ts.map +0 -1
  523. package/dist/core/ResponseEngine.js +0 -52
  524. package/dist/core/ResponseEngine.js.map +0 -1
  525. package/dist/core/Route.d.ts +0 -90
  526. package/dist/core/Route.d.ts.map +0 -1
  527. package/dist/core/Route.js.map +0 -1
  528. package/dist/core/RoutingEngine.d.ts.map +0 -1
  529. package/dist/core/RoutingEngine.js.map +0 -1
  530. package/dist/core/Step.d.ts +0 -72
  531. package/dist/core/Step.d.ts.map +0 -1
  532. package/dist/core/Step.js +0 -146
  533. package/dist/core/Step.js.map +0 -1
  534. package/dist/core/Tool.d.ts +0 -39
  535. package/dist/core/Tool.d.ts.map +0 -1
  536. package/dist/core/Tool.js +0 -31
  537. package/dist/core/Tool.js.map +0 -1
  538. package/dist/core/ToolExecutor.d.ts +0 -29
  539. package/dist/core/ToolExecutor.d.ts.map +0 -1
  540. package/dist/core/ToolExecutor.js +0 -69
  541. package/dist/core/ToolExecutor.js.map +0 -1
  542. package/dist/core/Transition.d.ts +0 -32
  543. package/dist/core/Transition.d.ts.map +0 -1
  544. package/dist/core/Transition.js +0 -85
  545. package/dist/core/Transition.js.map +0 -1
  546. package/dist/index.d.ts.map +0 -1
  547. package/dist/index.js.map +0 -1
  548. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  549. package/dist/providers/AnthropicProvider.js.map +0 -1
  550. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  551. package/dist/providers/GeminiProvider.js.map +0 -1
  552. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenAIProvider.js.map +0 -1
  554. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  555. package/dist/providers/OpenRouterProvider.js.map +0 -1
  556. package/dist/providers/index.d.ts.map +0 -1
  557. package/dist/providers/index.js.map +0 -1
  558. package/dist/types/agent.d.ts.map +0 -1
  559. package/dist/types/agent.js.map +0 -1
  560. package/dist/types/ai.d.ts.map +0 -1
  561. package/dist/types/ai.js.map +0 -1
  562. package/dist/types/history.d.ts.map +0 -1
  563. package/dist/types/history.js +0 -34
  564. package/dist/types/history.js.map +0 -1
  565. package/dist/types/index.d.ts +0 -12
  566. package/dist/types/index.d.ts.map +0 -1
  567. package/dist/types/index.js +0 -6
  568. package/dist/types/index.js.map +0 -1
  569. package/dist/types/persistence.d.ts.map +0 -1
  570. package/dist/types/persistence.js.map +0 -1
  571. package/dist/types/route.d.ts.map +0 -1
  572. package/dist/types/routing.d.ts.map +0 -1
  573. package/dist/types/schema.d.ts.map +0 -1
  574. package/dist/types/session.d.ts +0 -104
  575. package/dist/types/session.d.ts.map +0 -1
  576. package/dist/types/session.js.map +0 -1
  577. package/dist/types/tool.d.ts.map +0 -1
  578. package/dist/utils/event.d.ts.map +0 -1
  579. package/dist/utils/event.js.map +0 -1
  580. package/dist/utils/id.d.ts.map +0 -1
  581. package/dist/utils/id.js.map +0 -1
  582. package/dist/utils/logger.d.ts.map +0 -1
  583. package/dist/utils/logger.js.map +0 -1
  584. package/dist/utils/retry.d.ts.map +0 -1
  585. package/dist/utils/retry.js.map +0 -1
  586. package/docs/AGENT.md +0 -535
  587. package/docs/DOCS.md +0 -263
  588. package/docs/DOMAINS.md +0 -735
  589. package/docs/EXAMPLES.md +0 -467
  590. package/docs/GETTING_STARTED.md +0 -424
  591. package/docs/PERSISTENCE.md +0 -815
  592. package/docs/PROVIDERS.md +0 -612
  593. package/docs/ROUTES.md +0 -1085
  594. package/docs/STEPS.md +0 -883
  595. package/examples/business-onboarding.ts +0 -791
  596. package/examples/custom-database-persistence.ts +0 -574
  597. package/examples/domain-scoping.ts +0 -366
  598. package/examples/travel-agent.ts +0 -584
  599. package/src/core/DomainRegistry.ts +0 -80
  600. package/src/core/Tool.ts +0 -112
  601. package/src/core/Transition.ts +0 -115
  602. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  603. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  604. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  605. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  606. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  607. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  608. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  609. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  610. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  611. /package/dist/cjs/{types → src/types}/route.js +0 -0
  612. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  614. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  615. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  616. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  621. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  622. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  623. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  624. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  625. /package/dist/{adapters → src/adapters}/index.js +0 -0
  626. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  627. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  628. /package/dist/{constants → src/constants}/index.js +0 -0
  629. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  630. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  631. /package/dist/{providers → src/providers}/index.js +0 -0
  632. /package/dist/{types → src/types}/agent.js +0 -0
  633. /package/dist/{types → src/types}/ai.js +0 -0
  634. /package/dist/{types → src/types}/persistence.js +0 -0
  635. /package/dist/{types → src/types}/route.js +0 -0
  636. /package/dist/{types → src/types}/routing.d.ts +0 -0
  637. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  638. /package/dist/{types → src/types}/routing.js +0 -0
  639. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  640. /package/dist/{types → src/types}/schema.d.ts +0 -0
  641. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  642. /package/dist/{types → src/types}/schema.js +0 -0
  643. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  644. /package/dist/{types → src/types}/tool.js +0 -0
  645. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  646. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  647. /package/dist/{utils → src/utils}/id.js +0 -0
  648. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  649. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  650. /package/dist/{utils → src/utils}/logger.js +0 -0
  651. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  652. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  653. /package/dist/{utils → src/utils}/retry.js +0 -0
  654. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,22 +1,21 @@
1
- # Session Step & Data Management
1
+ # Context & Session Management
2
2
 
3
3
  ## Overview
4
4
 
5
- The `@falai/agent` framework provides **session step management** for tracking conversation progress, collected data, and user intent across multiple turns. This enables sophisticated data-driven conversations with intelligent step progression.
5
+ The `@falai/agent` framework provides **automatic session management** through the integrated `SessionManager` class, tracking conversation progress, collected data, and user intent across multiple turns. This enables sophisticated data-driven conversations with zero boilerplate code.
6
6
 
7
7
  ---
8
8
 
9
- ## 🎯 Session Step: The Foundation
9
+ ## 🎯 Automatic Session Management
10
10
 
11
- Session step tracks three key aspects of a conversation:
11
+ The `SessionManager` automatically tracks three key aspects of a conversation:
12
12
 
13
13
  1. **Current Route** - Which conversation flow the user is in
14
14
  2. **Current Step** - Where in the flow they currently are
15
15
  3. **Collected data** - Structured data collected so far
16
+ 4. **Conversation History** - Complete message history within the session
16
17
 
17
18
  ```typescript
18
- import { createSession, SessionStep } from "@falai/agent";
19
-
20
19
  // Define your data extraction type
21
20
  interface FlightData {
22
21
  destination: string;
@@ -25,66 +24,70 @@ interface FlightData {
25
24
  cabinClass: "economy" | "business" | "first";
26
25
  }
27
26
 
28
- // Initialize session step
29
- let session = createSession<FlightData>();
30
-
31
- // Session starts empty
32
- console.log(session.currentRoute); // undefined
33
- console.log(session.currentStep); // undefined
34
- console.log(session.data); // {}
27
+ // Agent with automatic session management
28
+ const agent = new Agent({
29
+ name: "Travel Agent",
30
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
31
+ persistence: { adapter: new PrismaAdapter({ prisma }) },
32
+ sessionId: "user-123" // Automatically loads or creates session
33
+ });
35
34
 
36
- // Use in conversation
37
- const response = await agent.respond({ history, session });
35
+ // Simple conversation - session managed automatically
36
+ const response = await agent.respond("I want to book a flight to Paris");
38
37
 
39
- // Session updated with progress and collected data
40
- console.log(response.session?.currentRoute?.title); // "Book Flight"
41
- console.log(response.session?.currentStep?.id); // "ask_destination"
42
- console.log(response.session?.data); // { destination: "Paris", ... }
38
+ // Access session information
39
+ console.log(agent.session.id); // "user-123"
40
+ console.log(agent.session.getData<FlightData>()); // { destination: "Paris", ... }
41
+ console.log(agent.session.getHistory()); // Conversation history
43
42
  ```
44
43
 
45
- **Benefits of Session Step:**
44
+ **Benefits of Automatic Session Management:**
46
45
 
46
+ - **Zero Boilerplate** - No manual session creation or persistence code
47
47
  - **Always-On Routing** - Users can change their mind mid-conversation
48
- - **Data Persistence** - Collected data survives across turns
48
+ - **Data Persistence** - Collected data automatically saved and restored
49
49
  - **Context Awareness** - Router sees current progress and collected data
50
- - **Step Recovery** - Resume conversations from any point
50
+ - **History Management** - Conversation history automatically maintained
51
+ - **Server-Friendly** - Perfect for stateless server environments
51
52
 
52
53
  ---
53
54
 
54
- ## 🔄 Session Step Helpers
55
+ ## 🔄 SessionManager API
55
56
 
56
- ### Creating and Managing Sessions
57
+ ### Session Operations
57
58
 
58
59
  ```typescript
59
- import {
60
- createSession,
61
- enterRoute,
62
- enterStep,
63
- mergeData,
64
- type SessionStep,
65
- } from "@falai/agent";
66
-
67
- // Create a new session
68
- let session = createSession<FlightData>();
60
+ // Access the session manager
61
+ const sessionManager = agent.session;
69
62
 
70
- // Enter a route (when routing decides to switch)
71
- session = enterRoute(session, "book_flight", "Book Flight");
63
+ // Get or create session (works for existing, new, or auto-generated IDs)
64
+ await sessionManager.getOrCreate("user-123");
65
+ await sessionManager.getOrCreate(); // Auto-generates ID
72
66
 
73
- // Enter a step (when progressing through the flow)
74
- session = enterStep(session, "ask_destination", "Ask where they want to fly");
75
-
76
- // Merge collected data (when AI extracts new information)
77
- session = mergeData(session, {
67
+ // Data management
68
+ const data = sessionManager.getData<FlightData>();
69
+ await sessionManager.setData({
78
70
  destination: "Paris",
79
71
  departureDate: "2025-10-15",
80
72
  passengers: 2,
81
73
  });
74
+
75
+ // History management
76
+ await sessionManager.addMessage("user", "I want to book a flight");
77
+ await sessionManager.addMessage("assistant", "Where would you like to go?");
78
+ const history = sessionManager.getHistory();
79
+ sessionManager.clearHistory();
80
+
81
+ // Session operations
82
+ await sessionManager.save(); // Manual save (auto-saves on addMessage)
83
+ await sessionManager.delete();
84
+ const newSession = await sessionManager.reset(true); // Preserve history
82
85
  ```
83
86
 
84
87
  ### Session Step Structure
85
88
 
86
89
  ```typescript
87
- interface SessionStep<TData = unknown> {
90
+ interface SessionState<TData = unknown> {
88
91
  currentRoute?: {
89
92
  id: string;
90
93
  title: string;
@@ -205,7 +208,7 @@ const route = agent.createRoute<FlightData>({
205
208
  ```typescript
206
209
  // Step with code-based logic (no fuzzy LLM conditions!)
207
210
  const askDestination = route.initialStep.nextStep({
208
- instructions: "Ask where they want to fly",
211
+ prompt: "Ask where they want to fly",
209
212
  collect: ["destination"],
210
213
  skipIf: (data) => !!data.destination, // Skip if already have destination
211
214
  });
@@ -216,7 +219,7 @@ const enrichDestination = askDestination.nextStep({
216
219
  });
217
220
 
218
221
  const askDates = enrichDestination.nextStep({
219
- instructions: "Ask about travel dates",
222
+ prompt: "Ask about travel dates",
220
223
  collect: ["departureDate"],
221
224
  skipIf: (data) => !!data.departureDate,
222
225
  requires: ["destination"], // Must have destination first
@@ -228,7 +231,7 @@ const validateDate = askDates.nextStep({
228
231
  });
229
232
 
230
233
  const askPassengers = validateDate.nextStep({
231
- instructions: "How many passengers?",
234
+ prompt: "How many passengers?",
232
235
  collect: ["passengers"],
233
236
  skipIf: (data) => !!data.passengers,
234
237
  });
@@ -242,15 +245,23 @@ const searchFlights = askPassengers.nextStep({
242
245
  ### 3. Tools Access Collected data
243
246
 
244
247
  ```typescript
245
- const searchFlights = defineTool<Context, [], void, FlightData>(
246
- "search_flights",
247
- async ({ context, data }) => {
248
+ const searchFlights: Tool<Context, [], void, FlightData> = {
249
+ id: "search_flights",
250
+ description: "Search for available flights based on collected data",
251
+ parameters: {
252
+ type: "object",
253
+ properties: {},
254
+ },
255
+ handler: async (toolContext) => {
248
256
  // Access collected data directly (no LLM extraction needed!)
249
- if (!data.destination || !data.departureDate) {
257
+ if (!toolContext.data.destination || !toolContext.data.departureDate) {
250
258
  return { data: undefined };
251
259
  }
252
260
 
253
- const flights = await searchFlightAPI(data.destination, data.departureDate);
261
+ const flights = await searchFlightAPI(
262
+ toolContext.data.destination,
263
+ toolContext.data.departureDate
264
+ );
254
265
 
255
266
  return {
256
267
  data: undefined,
@@ -259,8 +270,8 @@ const searchFlights = defineTool<Context, [], void, FlightData>(
259
270
  shouldSearchFlights: false, // Clear the flag
260
271
  },
261
272
  };
262
- }
263
- );
273
+ },
274
+ };
264
275
  ```
265
276
 
266
277
  ### 4. Lifecycle Hooks for Validation & Enrichment
@@ -298,11 +309,10 @@ Routing happens every turn with full session context:
298
309
  // User starts booking a flight
299
310
  const response1 = await agent.respond({
300
311
  history: [
301
- createMessageEvent(
302
- EventSource.CUSTOMER,
303
- "User",
304
- "I want to fly to Paris tomorrow with 2 people"
305
- ),
312
+ {
313
+ role: "user",
314
+ content: "I want to fly to Paris tomorrow with 2 people",
315
+ },
306
316
  ],
307
317
  session,
308
318
  });
@@ -311,11 +321,10 @@ const response1 = await agent.respond({
311
321
  const response2 = await agent.respond({
312
322
  history: [
313
323
  ...previousHistory,
314
- createMessageEvent(
315
- EventSource.CUSTOMER,
316
- "User",
317
- "Actually, make that Tokyo instead"
318
- ),
324
+ {
325
+ role: "user",
326
+ content: "Actually, make that Tokyo instead",
327
+ },
319
328
  ],
320
329
  session: response1.session, // Router sees context and switches appropriately
321
330
  });
@@ -370,18 +379,26 @@ Tools can update context in **two ways**:
370
379
  ### Option A: Return `contextUpdate`
371
380
 
372
381
  ```typescript
373
- const saveName = defineTool<MyContext, [name: string], boolean>(
374
- "save_name",
375
- async (toolContext, name) => {
382
+ const saveName: Tool<MyContext, [name: string], boolean> = {
383
+ id: "save_name",
384
+ description: "Save the user's name to context",
385
+ parameters: {
386
+ type: "object",
387
+ properties: {
388
+ name: { type: "string", description: "The user's name" },
389
+ },
390
+ required: ["name"],
391
+ },
392
+ handler: async (toolContext, args) => {
376
393
  return {
377
394
  data: true,
378
395
  contextUpdate: {
379
- userName: name,
396
+ userName: args.name,
380
397
  updatedAt: new Date(),
381
398
  },
382
399
  };
383
- }
384
- );
400
+ },
401
+ };
385
402
  ```
386
403
 
387
404
  **Pros:**
@@ -393,17 +410,25 @@ const saveName = defineTool<MyContext, [name: string], boolean>(
393
410
  ### Option B: Call `updateContext()` directly
394
411
 
395
412
  ```typescript
396
- const saveName = defineTool<MyContext, [name: string], boolean>(
397
- "save_name",
398
- async (toolContext, name) => {
413
+ const saveName: Tool<MyContext, [name: string], boolean> = {
414
+ id: "save_name",
415
+ description: "Save the user's name to context using direct update",
416
+ parameters: {
417
+ type: "object",
418
+ properties: {
419
+ name: { type: "string", description: "The user's name" },
420
+ },
421
+ required: ["name"],
422
+ },
423
+ handler: async (toolContext, args) => {
399
424
  await toolContext.updateContext({
400
- userName: name,
425
+ userName: args.name,
401
426
  updatedAt: new Date(),
402
427
  });
403
428
 
404
429
  return { data: true };
405
- }
406
- );
430
+ },
431
+ };
407
432
  ```
408
433
 
409
434
  **Pros:**
@@ -456,7 +481,7 @@ const agent = new Agent({
456
481
  ## 🎯 Complete Example: Multi-Turn Onboarding
457
482
 
458
483
  ```typescript
459
- import { Agent, defineTool } from "@falai/agent";
484
+ import { Agent, type Tool } from "@falai/agent";
460
485
 
461
486
  interface OnboardingContext {
462
487
  sessionId: string;
@@ -509,31 +534,50 @@ async function createOnboardingAgent(sessionId: string) {
509
534
  });
510
535
 
511
536
  // Define tools with context updates
512
- const saveBusinessName = defineTool(
513
- "save_business_name",
514
- async (ctx, name: string) => {
537
+ const saveBusinessName: Tool<OnboardingContext, [name: string], boolean> = {
538
+ id: "save_business_name",
539
+ description: "Save the business name and mark step as completed",
540
+ parameters: {
541
+ type: "object",
542
+ properties: {
543
+ name: { type: "string", description: "The business name" },
544
+ },
545
+ required: ["name"],
546
+ },
547
+ handler: async (toolContext, args) => {
515
548
  return {
516
549
  data: true,
517
550
  contextUpdate: {
518
- businessName: name,
519
- completedSteps: [...ctx.context.completedSteps, "business_name"],
551
+ businessName: args.name,
552
+ completedSteps: [
553
+ ...toolContext.context.completedSteps,
554
+ "business_name",
555
+ ],
520
556
  },
521
557
  };
522
- }
523
- );
558
+ },
559
+ };
524
560
 
525
- const saveIndustry = defineTool(
526
- "save_industry",
527
- async (ctx, industry: string) => {
561
+ const saveIndustry: Tool<OnboardingContext, [industry: string], boolean> = {
562
+ id: "save_industry",
563
+ description: "Save the industry and mark step as completed",
564
+ parameters: {
565
+ type: "object",
566
+ properties: {
567
+ industry: { type: "string", description: "The business industry" },
568
+ },
569
+ required: ["industry"],
570
+ },
571
+ handler: async (toolContext, args) => {
528
572
  // Alternative: use updateContext directly
529
- await ctx.updateContext({
530
- industry,
531
- completedSteps: [...ctx.context.completedSteps, "industry"],
573
+ await toolContext.updateContext({
574
+ industry: args.industry,
575
+ completedSteps: [...toolContext.context.completedSteps, "industry"],
532
576
  });
533
577
 
534
578
  return { data: true };
535
- }
536
- );
579
+ },
580
+ };
537
581
 
538
582
  // Build conversation routes...
539
583
  const route = agent.createRoute({ title: "Onboarding" });
@@ -548,7 +592,12 @@ async function handleUserMessage(sessionId: string, message: string) {
548
592
  const agent = await createOnboardingAgent(sessionId);
549
593
 
550
594
  const response = await agent.respond({
551
- history: [createMessageEvent(EventSource.CUSTOMER, "User", message)],
595
+ history: [
596
+ {
597
+ role: "user",
598
+ content: message,
599
+ },
600
+ ],
552
601
  });
553
602
 
554
603
  return response.message;
@@ -701,9 +750,9 @@ hooks: {
701
750
  ## 📚 Related Resources
702
751
 
703
752
  - [Complete Example: Persistent Onboarding](../examples/persistent-onboarding.ts)
704
- - [API Reference: AgentOptions](./API_REFERENCE.md#agentoptions)
705
- - [API Reference: ContextLifecycleHooks](./API_REFERENCE.md#contextlifecyclehooks)
706
- - [Getting Started](./GETTING_STARTED.md)
753
+ - [API Reference: AgentOptions](../api/overview.md#agentoptions)
754
+ - [API Reference: ContextLifecycleHooks](../api/overview.md#contextlifecyclehooks)
755
+ - [Getting Started](../guides/getting-started/README.md)
707
756
 
708
757
  ---
709
758
 
@@ -712,7 +761,7 @@ hooks: {
712
761
  If you're still having issues:
713
762
 
714
763
  1. Check the [examples](../examples/) for working implementations
715
- 2. Review the [API Reference](./API_REFERENCE.md) for detailed type information
764
+ 2. Review the [API Reference](../api/README.md) for detailed type information
716
765
  3. Open an issue on GitHub with your use case
717
766
 
718
767
  **Remember:** The key to persistent conversations is:
@@ -1,8 +1,8 @@
1
- # Architecture & Design Principles
1
+ # Session Management
2
2
 
3
3
  ## Overview
4
4
 
5
- `@falai/agent` is built on a **schema-first, data-driven architecture** that prioritizes type safety, structured data extraction, and code-based step management over fuzzy LLM conditions. This creates predictable, maintainable, and efficient conversational AI agents.
5
+ The `@falai/agent` framework provides **automatic session management** through the `SessionManager` class, eliminating the need for manual session creation, persistence, and state management. Sessions are automatically created, loaded, and saved, allowing developers to focus on building conversation logic rather than managing session lifecycle.
6
6
 
7
7
  ## Core Design Principles
8
8
 
@@ -46,60 +46,66 @@ const route = agent.createRoute<FlightData>({
46
46
  - **Predictability** - Same data structure every time
47
47
  - **Efficiency** - Extract multiple fields in one LLM call
48
48
 
49
- ### 2. 📊 Session Step Management
49
+ ### 2. 🤖 Automatic Session Management
50
50
 
51
- Track conversation progress and collected data across turns:
51
+ Sessions are automatically managed through the `SessionManager` class integrated into every `Agent`:
52
52
 
53
53
  ```typescript
54
- import { createSession, enterRoute, enterStep, mergeData } from "@falai/agent";
55
-
56
- // Create session with optional metadata including session ID
57
- let session = createSession<FlightData>(sessionId, {
58
- userId: "user_456",
59
- createdAt: new Date(),
54
+ // Server-side: Agent with automatic session management
55
+ const agent = new Agent({
56
+ name: "Travel Agent",
57
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
58
+ persistence: { adapter: new PrismaAdapter({ prisma }) },
59
+ sessionId: "user-123" // Automatically loads or creates this session
60
60
  });
61
61
 
62
- // Turn 1 - Extract data
63
- const response1 = await agent.respond({ history, session });
64
- session = response1.session!; // Updated with collected data
62
+ // Simple conversation - no manual session management
63
+ const response1 = await agent.respond("I want to book a flight to Paris");
64
+ console.log(agent.session.id); // Session ID
65
+ console.log(agent.session.getData()); // Collected data
65
66
 
66
- // Turn 2 - User changes mind (always-on routing)
67
- const response2 = await agent.respond({ history, session: response1.session });
68
- session = response2.session!; // Route/step updated if user changed direction
69
-
70
- // Access session metadata
71
- console.log(session.metadata?.sessionId); // "unique-session-123"
67
+ // Continue conversation - session automatically maintained
68
+ const response2 = await agent.respond("Make that Tokyo instead");
69
+ // Session automatically updated with new data
72
70
  ```
73
71
 
74
- **Session with Persistence:**
72
+ **SessionManager API:**
75
73
 
76
- When using persistence adapters, set the session ID from the database:
74
+ The `SessionManager` provides a clean API for session operations:
77
75
 
78
76
  ```typescript
79
- // Create database session and in-memory session step
80
- const { sessionData, sessionStep } =
81
- await persistence.createSessionWithStep<FlightData>({
82
- userId: "user_123",
83
- agentName: "Travel Agent",
84
- });
85
-
86
- // sessionStep.metadata.sessionId is automatically set to sessionData.id
87
- console.log(sessionStep.metadata?.sessionId); // "cuid_from_database"
88
-
89
- // Use it in conversation
90
- const response = await agent.respond({
91
- history,
92
- session: sessionStep, // Auto-saves to database!
93
- });
77
+ // Access the session manager
78
+ const sessionManager = agent.session;
79
+
80
+ // Get or create session (works for existing, new, or auto-generated IDs)
81
+ await sessionManager.getOrCreate("user-123");
82
+ await sessionManager.getOrCreate(); // Auto-generates ID
83
+
84
+ // History management
85
+ await sessionManager.addMessage("user", "Hello");
86
+ await sessionManager.addMessage("assistant", "Hi there!");
87
+ const history = sessionManager.getHistory();
88
+ sessionManager.clearHistory();
89
+
90
+ // Data access
91
+ const data = sessionManager.getData<FlightData>();
92
+ await sessionManager.setData({ destination: "Paris" });
93
+
94
+ // Session operations
95
+ await sessionManager.save(); // Manual save (auto-saves on addMessage)
96
+ await sessionManager.delete();
97
+ const newSession = await sessionManager.reset(true); // Preserve history
94
98
  ```
95
99
 
96
- **Why?** Session step enables:
100
+ **Why?** Automatic session management provides:
97
101
 
102
+ - **Zero Boilerplate** - No manual session creation or persistence code
103
+ - **Server-Friendly** - Perfect for stateless server environments
98
104
  - **Always-on Routing** - Users can change their mind mid-conversation
99
105
  - **Context Awareness** - Router sees current progress and collected data
100
- - **Data Persistence** - Collected data survives across turns
101
- - **Step Recovery** - Resume conversations from any point
102
- - **Session Tracking** - Track conversations via session ID in database
106
+ - **Data Persistence** - Collected data automatically saved and restored
107
+ - **History Management** - Conversation history automatically maintained
108
+ - **Session Tracking** - Easy session identification for client/server communication
103
109
 
104
110
  ### 3. 🔧 Code-Based Step Logic + AI-Driven Transitions
105
111
 
@@ -109,7 +115,7 @@ Use TypeScript functions for deterministic flow control AND text conditions for
109
115
  // Step with smart bypassing based on collected data
110
116
  const askDestination = route.initialStep.nextStep({
111
117
  id: "ask_destination", // Optional: custom step ID
112
- instructions: "Ask where they want to fly",
118
+ prompt: "Ask where they want to fly",
113
119
  collect: ["destination"],
114
120
  skipIf: (data) => !!data.destination, // Code-based condition!
115
121
  condition: "Customer hasn't specified destination yet", // Text condition for AI
@@ -117,7 +123,7 @@ const askDestination = route.initialStep.nextStep({
117
123
 
118
124
  const askDate = askDestination.nextStep({
119
125
  id: "ask_date", // Optional: custom step ID for easier tracking
120
- instructions: "Ask about travel dates",
126
+ prompt: "Ask about travel dates",
121
127
  collect: ["departureDate"],
122
128
  skipIf: (data) => !!data.departureDate,
123
129
  requires: ["destination"], // Prerequisites
@@ -133,7 +139,7 @@ You can optionally provide custom IDs for steps to make them easier to track and
133
139
  ```typescript
134
140
  const confirmBooking = askDate.nextStep({
135
141
  id: "confirm_booking", // ✅ Custom ID instead of auto-generated
136
- instructions: "Confirm all booking details",
142
+ prompt: "Confirm all booking details",
137
143
  requires: ["destination", "departureDate", "passengers"],
138
144
  });
139
145
  ```
@@ -170,9 +176,16 @@ If you don't provide an ID, one is automatically generated from the route ID and
170
176
  Tools execute with full context including collected data:
171
177
 
172
178
  ```typescript
173
- const searchFlights = defineTool<Context, [], void, FlightData>(
174
- "search_flights",
175
- async (toolContext) => {
179
+ import { Tool } from "@falai/agent";
180
+
181
+ const searchFlights: Tool<Context, [], void, FlightData> = {
182
+ id: "search_flights",
183
+ description: "Search for available flights based on collected data",
184
+ parameters: {
185
+ type: "object",
186
+ properties: {},
187
+ },
188
+ handler: async (toolContext) => {
176
189
  const { data, context, history } = toolContext;
177
190
 
178
191
  // Access collected data directly
@@ -188,8 +201,8 @@ const searchFlights = defineTool<Context, [], void, FlightData>(
188
201
  departureDateParsed: parseDate(data.departureDate),
189
202
  },
190
203
  };
191
- }
192
- );
204
+ },
205
+ };
193
206
  ```
194
207
 
195
208
  **Why?** Tools with data access enable:
@@ -207,7 +220,10 @@ Routing happens every turn, allowing users to change direction:
207
220
  // User starts booking a flight
208
221
  const response1 = await agent.respond({
209
222
  history: [
210
- createMessageEvent(EventSource.CUSTOMER, "User", "I want to fly to Paris"),
223
+ {
224
+ role: "user",
225
+ content: "I want to fly to Paris",
226
+ },
211
227
  ],
212
228
  session,
213
229
  });
@@ -216,11 +232,10 @@ const response1 = await agent.respond({
216
232
  const response2 = await agent.respond({
217
233
  history: [
218
234
  ...previousHistory,
219
- createMessageEvent(
220
- EventSource.CUSTOMER,
221
- "User",
222
- "Actually, make that Tokyo instead"
223
- ),
235
+ {
236
+ role: "user",
237
+ content: "Actually, make that Tokyo instead",
238
+ },
224
239
  ],
225
240
  session: response1.session, // Router sees context and switches appropriately
226
241
  });
@@ -372,7 +387,7 @@ const bookingRoute = agent.createRoute<BookingData>({
372
387
 
373
388
  bookingRoute.initialStep
374
389
  .nextStep({
375
- instructions: "Ask destination",
390
+ prompt: "Ask destination",
376
391
  collect: ["destination"],
377
392
  skipIf: (data) => !!data.destination,
378
393
  })
@@ -381,7 +396,7 @@ bookingRoute.initialStep
381
396
  requires: ["destination"],
382
397
  })
383
398
  .nextStep({
384
- instructions: "Ask dates",
399
+ prompt: "Ask dates",
385
400
  collect: ["dates"],
386
401
  skipIf: (data) => !!data.dates,
387
402
  });
@@ -399,7 +414,7 @@ const qnaRoute = agent.createRoute({
399
414
  });
400
415
 
401
416
  // Just use initial step
402
- qnaRoute.initialStep.instructions = "Answer from knowledge base";
417
+ qnaRoute.initialStep.prompt = "Answer from knowledge base";
403
418
  ```
404
419
 
405
420
  ### Mixed Architecture
@@ -436,9 +451,9 @@ This framework draws inspiration from:
436
451
 
437
452
  ## Further Reading
438
453
 
439
- - [Getting Started Guide](./GETTING_STARTED.md) - Build your first agent
454
+ - [Getting Started Guide](../guides/getting-started/README.md) - Build your first agent
440
455
  - [Session Step Guide](./CONTEXT_MANAGEMENT.md) - Session management patterns
441
- - [API Reference](./API_REFERENCE.md) - Complete API documentation
456
+ - [API Reference](../api/README.md) - Complete API documentation
442
457
  - [Examples](../examples/) - Real-world implementations
443
458
 
444
459
  ---