@falai/agent 0.8.1 → 0.9.0-alpha-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (665) hide show
  1. package/README.md +332 -147
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/cjs/src/core/Agent.d.ts +223 -0
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1660 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +514 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +145 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/src/core/Route.js +343 -0
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +86 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +217 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/src/types/route.d.ts +235 -0
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +65 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +35 -32
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/src/core/Agent.d.ts +223 -0
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1656 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +71 -18
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +32 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +171 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +510 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +145 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/src/core/Route.js +339 -0
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/src/core/RoutingEngine.d.ts +129 -0
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +211 -113
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +86 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +213 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +45 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +80 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +80 -41
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +38 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/src/types/route.d.ts +235 -0
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +65 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{cjs → src}/types/tool.d.ts +17 -13
  289. package/dist/src/types/tool.d.ts.map +1 -0
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +33 -32
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +925 -255
  320. package/docs/api/overview.md +952 -0
  321. package/docs/core/agent/README.md +787 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
  324. package/docs/core/ai-integration/prompt-composition.md +220 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +176 -0
  327. package/docs/core/conversation-flows/data-collection.md +623 -0
  328. package/docs/core/conversation-flows/route-dsl.md +502 -0
  329. package/docs/core/conversation-flows/routes.md +117 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +154 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +348 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +406 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
  343. package/examples/ai-providers/anthropic-integration.ts +384 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
  345. package/examples/conversation-flows/completion-transitions.ts +277 -0
  346. package/examples/core-concepts/basic-agent.ts +443 -0
  347. package/examples/core-concepts/schema-driven-extraction.ts +305 -0
  348. package/examples/core-concepts/session-management.ts +406 -0
  349. package/examples/integrations/database-integration.ts +630 -0
  350. package/examples/integrations/healthcare-integration.ts +609 -0
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
  352. package/examples/integrations/server-session-management.ts +307 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
  355. package/examples/persistence/memory-sessions.ts +495 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/persistence/redis-persistence.ts +490 -0
  358. package/examples/tools/basic-tools.ts +561 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1431 -526
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +103 -49
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +128 -46
  373. package/src/core/ResponsePipeline.ts +830 -0
  374. package/src/core/Route.ts +222 -53
  375. package/src/core/RoutingEngine.ts +345 -229
  376. package/src/core/SessionManager.ts +265 -0
  377. package/src/core/Step.ts +157 -67
  378. package/src/core/ToolExecutor.ts +52 -43
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +81 -46
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +45 -7
  388. package/src/types/persistence.ts +45 -28
  389. package/src/types/route.ts +122 -57
  390. package/src/types/session.ts +20 -220
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +23 -19
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +204 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts +0 -197
  432. package/dist/cjs/core/Agent.d.ts.map +0 -1
  433. package/dist/cjs/core/Agent.js +0 -966
  434. package/dist/cjs/core/Agent.js.map +0 -1
  435. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  436. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  437. package/dist/cjs/core/DomainRegistry.js +0 -72
  438. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  439. package/dist/cjs/core/Events.d.ts +0 -41
  440. package/dist/cjs/core/Events.d.ts.map +0 -1
  441. package/dist/cjs/core/Events.js +0 -99
  442. package/dist/cjs/core/Events.js.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  444. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  445. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  446. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  447. package/dist/cjs/core/PromptComposer.js +0 -127
  448. package/dist/cjs/core/PromptComposer.js.map +0 -1
  449. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  450. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  451. package/dist/cjs/core/ResponseEngine.js +0 -56
  452. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  453. package/dist/cjs/core/Route.d.ts +0 -90
  454. package/dist/cjs/core/Route.d.ts.map +0 -1
  455. package/dist/cjs/core/Route.js +0 -203
  456. package/dist/cjs/core/Route.js.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.d.ts +0 -109
  458. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  459. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  460. package/dist/cjs/core/Step.d.ts +0 -72
  461. package/dist/cjs/core/Step.d.ts.map +0 -1
  462. package/dist/cjs/core/Step.js +0 -150
  463. package/dist/cjs/core/Step.js.map +0 -1
  464. package/dist/cjs/core/Tool.d.ts +0 -39
  465. package/dist/cjs/core/Tool.d.ts.map +0 -1
  466. package/dist/cjs/core/Tool.js +0 -34
  467. package/dist/cjs/core/Tool.js.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  469. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  470. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  471. package/dist/cjs/core/Transition.d.ts +0 -32
  472. package/dist/cjs/core/Transition.d.ts.map +0 -1
  473. package/dist/cjs/core/Transition.js +0 -89
  474. package/dist/cjs/core/Transition.js.map +0 -1
  475. package/dist/cjs/index.d.ts.map +0 -1
  476. package/dist/cjs/index.js.map +0 -1
  477. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  478. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  479. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  480. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  481. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  482. package/dist/cjs/providers/index.js.map +0 -1
  483. package/dist/cjs/types/agent.d.ts.map +0 -1
  484. package/dist/cjs/types/agent.js.map +0 -1
  485. package/dist/cjs/types/ai.d.ts.map +0 -1
  486. package/dist/cjs/types/history.d.ts.map +0 -1
  487. package/dist/cjs/types/history.js +0 -37
  488. package/dist/cjs/types/history.js.map +0 -1
  489. package/dist/cjs/types/index.d.ts +0 -12
  490. package/dist/cjs/types/index.d.ts.map +0 -1
  491. package/dist/cjs/types/index.js +0 -12
  492. package/dist/cjs/types/index.js.map +0 -1
  493. package/dist/cjs/types/persistence.d.ts.map +0 -1
  494. package/dist/cjs/types/persistence.js.map +0 -1
  495. package/dist/cjs/types/route.d.ts +0 -175
  496. package/dist/cjs/types/route.d.ts.map +0 -1
  497. package/dist/cjs/types/session.d.ts +0 -104
  498. package/dist/cjs/types/session.d.ts.map +0 -1
  499. package/dist/cjs/types/session.js.map +0 -1
  500. package/dist/cjs/types/tool.d.ts.map +0 -1
  501. package/dist/cjs/utils/event.js.map +0 -1
  502. package/dist/cjs/utils/id.js.map +0 -1
  503. package/dist/cjs/utils/logger.js.map +0 -1
  504. package/dist/cjs/utils/retry.js.map +0 -1
  505. package/dist/constants/index.d.ts.map +0 -1
  506. package/dist/constants/index.js.map +0 -1
  507. package/dist/core/Agent.d.ts +0 -197
  508. package/dist/core/Agent.d.ts.map +0 -1
  509. package/dist/core/Agent.js +0 -962
  510. package/dist/core/Agent.js.map +0 -1
  511. package/dist/core/DomainRegistry.d.ts +0 -36
  512. package/dist/core/DomainRegistry.d.ts.map +0 -1
  513. package/dist/core/DomainRegistry.js +0 -68
  514. package/dist/core/DomainRegistry.js.map +0 -1
  515. package/dist/core/Events.d.ts +0 -41
  516. package/dist/core/Events.d.ts.map +0 -1
  517. package/dist/core/Events.js +0 -94
  518. package/dist/core/Events.js.map +0 -1
  519. package/dist/core/PersistenceManager.d.ts.map +0 -1
  520. package/dist/core/PersistenceManager.js.map +0 -1
  521. package/dist/core/PromptComposer.d.ts +0 -24
  522. package/dist/core/PromptComposer.d.ts.map +0 -1
  523. package/dist/core/PromptComposer.js +0 -123
  524. package/dist/core/PromptComposer.js.map +0 -1
  525. package/dist/core/ResponseEngine.d.ts +0 -14
  526. package/dist/core/ResponseEngine.d.ts.map +0 -1
  527. package/dist/core/ResponseEngine.js +0 -52
  528. package/dist/core/ResponseEngine.js.map +0 -1
  529. package/dist/core/Route.d.ts +0 -90
  530. package/dist/core/Route.d.ts.map +0 -1
  531. package/dist/core/Route.js +0 -199
  532. package/dist/core/Route.js.map +0 -1
  533. package/dist/core/RoutingEngine.d.ts +0 -109
  534. package/dist/core/RoutingEngine.d.ts.map +0 -1
  535. package/dist/core/RoutingEngine.js.map +0 -1
  536. package/dist/core/Step.d.ts +0 -72
  537. package/dist/core/Step.d.ts.map +0 -1
  538. package/dist/core/Step.js +0 -146
  539. package/dist/core/Step.js.map +0 -1
  540. package/dist/core/Tool.d.ts +0 -39
  541. package/dist/core/Tool.d.ts.map +0 -1
  542. package/dist/core/Tool.js +0 -31
  543. package/dist/core/Tool.js.map +0 -1
  544. package/dist/core/ToolExecutor.d.ts +0 -29
  545. package/dist/core/ToolExecutor.d.ts.map +0 -1
  546. package/dist/core/ToolExecutor.js +0 -69
  547. package/dist/core/ToolExecutor.js.map +0 -1
  548. package/dist/core/Transition.d.ts +0 -32
  549. package/dist/core/Transition.d.ts.map +0 -1
  550. package/dist/core/Transition.js +0 -85
  551. package/dist/core/Transition.js.map +0 -1
  552. package/dist/index.d.ts.map +0 -1
  553. package/dist/index.js.map +0 -1
  554. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  555. package/dist/providers/AnthropicProvider.js.map +0 -1
  556. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  557. package/dist/providers/GeminiProvider.js.map +0 -1
  558. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  559. package/dist/providers/OpenAIProvider.js.map +0 -1
  560. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  561. package/dist/providers/OpenRouterProvider.js.map +0 -1
  562. package/dist/providers/index.d.ts.map +0 -1
  563. package/dist/providers/index.js.map +0 -1
  564. package/dist/types/agent.d.ts.map +0 -1
  565. package/dist/types/agent.js.map +0 -1
  566. package/dist/types/ai.d.ts.map +0 -1
  567. package/dist/types/ai.js.map +0 -1
  568. package/dist/types/history.d.ts.map +0 -1
  569. package/dist/types/history.js +0 -34
  570. package/dist/types/history.js.map +0 -1
  571. package/dist/types/index.d.ts +0 -12
  572. package/dist/types/index.d.ts.map +0 -1
  573. package/dist/types/index.js +0 -6
  574. package/dist/types/index.js.map +0 -1
  575. package/dist/types/persistence.d.ts.map +0 -1
  576. package/dist/types/persistence.js.map +0 -1
  577. package/dist/types/route.d.ts +0 -175
  578. package/dist/types/route.d.ts.map +0 -1
  579. package/dist/types/routing.d.ts.map +0 -1
  580. package/dist/types/schema.d.ts.map +0 -1
  581. package/dist/types/session.d.ts +0 -104
  582. package/dist/types/session.d.ts.map +0 -1
  583. package/dist/types/session.js.map +0 -1
  584. package/dist/types/tool.d.ts.map +0 -1
  585. package/dist/utils/event.d.ts.map +0 -1
  586. package/dist/utils/event.js.map +0 -1
  587. package/dist/utils/id.d.ts.map +0 -1
  588. package/dist/utils/id.js.map +0 -1
  589. package/dist/utils/logger.d.ts.map +0 -1
  590. package/dist/utils/logger.js.map +0 -1
  591. package/dist/utils/retry.d.ts.map +0 -1
  592. package/dist/utils/retry.js.map +0 -1
  593. package/docs/AGENT.md +0 -535
  594. package/docs/DOCS.md +0 -263
  595. package/docs/DOMAINS.md +0 -735
  596. package/docs/EXAMPLES.md +0 -467
  597. package/docs/GETTING_STARTED.md +0 -424
  598. package/docs/PERSISTENCE.md +0 -815
  599. package/docs/PROVIDERS.md +0 -612
  600. package/docs/ROUTES.md +0 -1085
  601. package/docs/STEPS.md +0 -883
  602. package/examples/business-onboarding.ts +0 -791
  603. package/examples/custom-database-persistence.ts +0 -574
  604. package/examples/declarative-agent.ts +0 -401
  605. package/examples/domain-scoping.ts +0 -366
  606. package/examples/healthcare-agent.ts +0 -511
  607. package/examples/redis-persistence.ts +0 -525
  608. package/examples/route-transitions.ts +0 -266
  609. package/examples/travel-agent.ts +0 -584
  610. package/src/core/DomainRegistry.ts +0 -80
  611. package/src/core/Tool.ts +0 -112
  612. package/src/core/Transition.ts +0 -115
  613. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  614. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  615. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  616. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  617. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  618. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  619. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  620. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  621. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  622. /package/dist/cjs/{types → src/types}/route.js +0 -0
  623. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  624. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  625. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  626. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  627. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  628. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  629. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  630. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  631. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  632. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  633. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  634. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  635. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  636. /package/dist/{adapters → src/adapters}/index.js +0 -0
  637. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  638. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  639. /package/dist/{constants → src/constants}/index.js +0 -0
  640. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  641. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  642. /package/dist/{providers → src/providers}/index.js +0 -0
  643. /package/dist/{types → src/types}/agent.js +0 -0
  644. /package/dist/{types → src/types}/ai.js +0 -0
  645. /package/dist/{types → src/types}/persistence.js +0 -0
  646. /package/dist/{types → src/types}/route.js +0 -0
  647. /package/dist/{types → src/types}/routing.d.ts +0 -0
  648. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  649. /package/dist/{types → src/types}/routing.js +0 -0
  650. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  651. /package/dist/{types → src/types}/schema.d.ts +0 -0
  652. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  653. /package/dist/{types → src/types}/schema.js +0 -0
  654. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  655. /package/dist/{types → src/types}/tool.js +0 -0
  656. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  657. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  658. /package/dist/{utils → src/utils}/id.js +0 -0
  659. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  660. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  661. /package/dist/{utils → src/utils}/logger.js +0 -0
  662. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  663. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  664. /package/dist/{utils → src/utils}/retry.js +0 -0
  665. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Schema-Driven Data Extraction Example
3
+ *
4
+ * This example demonstrates how to use JSON Schema to define data contracts
5
+ * and extract structured data reliably from conversations.
6
+ *
7
+ * Key concepts:
8
+ * - Schema-first data definition
9
+ * - Type-safe data extraction
10
+ * - Automatic validation
11
+ * - SkipIf conditions for smart flow control
12
+ */
13
+
14
+ import { Agent, GeminiProvider, type Tool } from "../../src/index";
15
+
16
+ // Define the data structure we want to collect
17
+ interface UserProfileData {
18
+ name: string;
19
+ email: string;
20
+ age: number;
21
+ interests: string[];
22
+ preferredContact: "email" | "phone" | "sms";
23
+ newsletterOptIn: boolean;
24
+ }
25
+
26
+ // Define a tool that uses the collected data
27
+ const saveUserProfile: Tool<unknown, UserProfileData, [], string> = {
28
+ id: "save_user_profile",
29
+ description: "Save the collected user profile information",
30
+ parameters: {
31
+ type: "object",
32
+ properties: {},
33
+ },
34
+ handler: ({ data }) => {
35
+ console.log("Saving user profile:", data);
36
+
37
+ // Simulate saving to database
38
+ console.log("Profile data:", data);
39
+
40
+ return {
41
+ data: `Profile saved successfully! Welcome ${data?.name}!`,
42
+ };
43
+ },
44
+ };
45
+
46
+ // Define the schema for data validation and extraction
47
+ const userProfileSchema = {
48
+ type: "object",
49
+ properties: {
50
+ name: {
51
+ type: "string",
52
+ description: "The user's full name",
53
+ minLength: 2,
54
+ maxLength: 100,
55
+ },
56
+ email: {
57
+ type: "string",
58
+ format: "email",
59
+ description: "The user's email address",
60
+ },
61
+ age: {
62
+ type: "number",
63
+ description: "The user's age in years",
64
+ minimum: 13,
65
+ maximum: 120,
66
+ },
67
+ interests: {
68
+ type: "array",
69
+ items: { type: "string" },
70
+ description: "User's interests and hobbies",
71
+ minItems: 1,
72
+ maxItems: 10,
73
+ },
74
+ preferredContact: {
75
+ type: "string",
76
+ enum: ["email", "phone", "sms"],
77
+ description: "Preferred contact method",
78
+ default: "email",
79
+ },
80
+ newsletterOptIn: {
81
+ type: "boolean",
82
+ description: "Whether user wants to receive newsletters",
83
+ default: false,
84
+ },
85
+ },
86
+ required: ["name", "email"],
87
+ };
88
+
89
+ // Create the agent with agent-level schema
90
+ const agent = new Agent<unknown, UserProfileData>({
91
+ name: "ProfileBot",
92
+ description:
93
+ "A bot that collects user profile information using schema-driven extraction",
94
+ provider: new GeminiProvider({
95
+ apiKey: process.env.GEMINI_API_KEY!,
96
+ model: "models/gemini-2.5-flash",
97
+ }),
98
+ // NEW: Agent-level schema definition
99
+ schema: userProfileSchema,
100
+ });
101
+
102
+ // Create a route that collects profile information step by step
103
+ agent.createRoute({
104
+ title: "User Profile Collection",
105
+ description: "Collect comprehensive user profile information",
106
+ // NEW: Required fields for route completion (instead of schema)
107
+ requiredFields: ["name", "email"],
108
+ // NEW: Optional fields that enhance the experience
109
+ optionalFields: ["age", "interests", "preferredContact", "newsletterOptIn"],
110
+ // Use sequential steps for a linear flow with smart skipIf conditions
111
+ steps: [
112
+ {
113
+ id: "ask_name",
114
+ description: "Ask for user's name",
115
+ prompt: "Hi! I'd like to create a profile for you. What's your name?",
116
+ collect: ["name"],
117
+ skipIf: (data: Partial<UserProfileData>) => !!data.name,
118
+ },
119
+ {
120
+ id: "ask_email",
121
+ description: "Ask for user's email",
122
+ prompt: "What's your email address?",
123
+ collect: ["email"],
124
+ requires: ["name"],
125
+ skipIf: (data: Partial<UserProfileData>) => !!data.email,
126
+ },
127
+ {
128
+ id: "ask_age",
129
+ description: "Ask for user's age (optional)",
130
+ prompt: "How old are you? (optional)",
131
+ collect: ["age"],
132
+ requires: ["name", "email"],
133
+ skipIf: (data: Partial<UserProfileData>) => data.age !== undefined,
134
+ },
135
+ {
136
+ id: "ask_interests",
137
+ description: "Ask for user's interests (optional)",
138
+ prompt: "What are your interests or hobbies? (optional)",
139
+ collect: ["interests"],
140
+ requires: ["name", "email"],
141
+ skipIf: (data: Partial<UserProfileData>) =>
142
+ !!(data.interests && data.interests.length > 0),
143
+ },
144
+ {
145
+ id: "ask_contact_preference",
146
+ description: "Ask for preferred contact method",
147
+ prompt: "What's your preferred contact method?",
148
+ collect: ["preferredContact"],
149
+ requires: ["name", "email"],
150
+ skipIf: (data: Partial<UserProfileData>) => !!data.preferredContact,
151
+ },
152
+ {
153
+ id: "ask_newsletter",
154
+ description: "Ask about newsletter subscription",
155
+ prompt: "Would you like to subscribe to our newsletter?",
156
+ collect: ["newsletterOptIn"],
157
+ requires: ["name", "email"],
158
+ skipIf: (data: Partial<UserProfileData>) =>
159
+ data.newsletterOptIn !== undefined,
160
+ },
161
+ {
162
+ id: "save_profile",
163
+ description: "Save the collected profile",
164
+ prompt:
165
+ "Thanks for providing your information! Let me save your profile.",
166
+ tools: [saveUserProfile],
167
+ requires: ["name", "email"],
168
+ },
169
+ ],
170
+ });
171
+
172
+ // Example conversation demonstrating schema-driven extraction
173
+ async function demonstrateSchemaExtraction() {
174
+ console.log("=== Schema-Driven Data Extraction Demo ===\n");
175
+
176
+ // First message - user provides name and email
177
+ console.log("User: Hi, I'm John Doe and my email is john@example.com");
178
+ const response1 = await agent.respond({
179
+ history: [
180
+ {
181
+ role: "user",
182
+ content: "Hi, I'm John Doe and my email is john@example.com",
183
+ name: "John",
184
+ },
185
+ ],
186
+ });
187
+
188
+ console.log("Bot:", response1.message);
189
+ console.log(
190
+ "Collected data:",
191
+ JSON.stringify(response1.session?.data as Partial<UserProfileData>, null, 2)
192
+ );
193
+
194
+ // Second message - user provides more information
195
+ console.log(
196
+ "\nUser: I'm 30 years old and I like hiking, reading, and photography"
197
+ );
198
+ const response2 = await agent.respond({
199
+ history: [
200
+ {
201
+ role: "user",
202
+ content: "Hi, I'm John Doe and my email is john@example.com",
203
+ name: "John",
204
+ },
205
+ {
206
+ role: "assistant",
207
+ content: response1.message,
208
+ },
209
+ {
210
+ role: "user",
211
+ content: "I'm 30 years old and I like hiking, reading, and photography",
212
+ name: "John",
213
+ },
214
+ ],
215
+ session: response1.session,
216
+ });
217
+
218
+ console.log("Bot:", response2.message);
219
+ console.log(
220
+ "Collected data:",
221
+ JSON.stringify(response2.session?.data as Partial<UserProfileData>, null, 2)
222
+ );
223
+
224
+ // Third message - user provides contact preference and completes profile
225
+ console.log(
226
+ "\nUser: Please contact me by email and yes, I'd like the newsletter"
227
+ );
228
+ const response3 = await agent.respond({
229
+ history: [
230
+ {
231
+ role: "user",
232
+ content: "Hi, I'm John Doe and my email is john@example.com",
233
+ name: "John",
234
+ },
235
+ {
236
+ role: "assistant",
237
+ content: response1.message,
238
+ },
239
+ {
240
+ role: "user",
241
+ content: "I'm 30 years old and I like hiking, reading, and photography",
242
+ name: "John",
243
+ },
244
+ {
245
+ role: "assistant",
246
+ content: response2.message,
247
+ },
248
+ {
249
+ role: "user",
250
+ content: "Please contact me by email and yes, I'd like the newsletter",
251
+ name: "John",
252
+ },
253
+ ],
254
+ session: response2.session,
255
+ });
256
+
257
+ console.log("Bot:", response3.message);
258
+ console.log(
259
+ "Final collected data:",
260
+ JSON.stringify(response3.session?.data as Partial<UserProfileData>, null, 2)
261
+ );
262
+ console.log("Route complete:", response3.isRouteComplete);
263
+ }
264
+
265
+ // Demonstrate with a single comprehensive message
266
+ async function demonstrateSmartSkipping() {
267
+ console.log("\n=== Smart Skipping Demo ===\n");
268
+
269
+ console.log("User provides everything in one message:");
270
+ console.log(
271
+ "User: I'm Sarah Johnson, sarah@email.com, 28 years old. I enjoy cooking, travel, and music. Contact me by phone and yes to newsletter."
272
+ );
273
+
274
+ const response = await agent.respond({
275
+ history: [
276
+ {
277
+ role: "user",
278
+ content:
279
+ "I'm Sarah Johnson, sarah@email.com, 28 years old. I enjoy cooking, travel, and music. Contact me by phone and yes to newsletter.",
280
+ name: "Sarah",
281
+ },
282
+ ],
283
+ });
284
+
285
+ console.log("Bot:", response.message);
286
+ console.log(
287
+ "Collected data:",
288
+ JSON.stringify(response.session?.data as Partial<UserProfileData>, null, 2)
289
+ );
290
+ console.log("Route complete:", response.isRouteComplete);
291
+ }
292
+
293
+ // Run the demonstrations
294
+ async function main() {
295
+ try {
296
+ await demonstrateSchemaExtraction();
297
+ await demonstrateSmartSkipping();
298
+ } catch (error) {
299
+ console.error("Error:", error);
300
+ }
301
+ }
302
+
303
+ if (import.meta.url === `file://${process.argv[1]}`) {
304
+ main().catch(console.error);
305
+ }
@@ -0,0 +1,406 @@
1
+ /**
2
+ * Session Management Example
3
+ *
4
+ * This example demonstrates how to manage conversation state across multiple turns
5
+ * using session management, persistence, and state restoration.
6
+ *
7
+ * Key concepts:
8
+ * - Session state management
9
+ * - Multi-turn conversations
10
+ * - Data persistence across turns
11
+ * - Session restoration
12
+ * - Route transitions with session state
13
+ */
14
+
15
+ import {
16
+ Agent,
17
+ GeminiProvider,
18
+ MemoryAdapter,
19
+ type Tool,
20
+ } from "../../src/index";
21
+
22
+ // Define data types for our multi-step process
23
+ interface OrderData {
24
+ customerName: string;
25
+ productType: "laptop" | "phone" | "tablet";
26
+ budget: number;
27
+ preferredColor?: string;
28
+ urgentDelivery: boolean;
29
+ orderId?: string;
30
+ }
31
+
32
+ interface OrderContext {
33
+ userId: string;
34
+ userName: string;
35
+ isVip: boolean;
36
+ }
37
+
38
+ interface PaymentData {
39
+ orderId: string;
40
+ paymentMethod: "credit_card" | "paypal" | "bank_transfer";
41
+ amount: number;
42
+ confirmed: boolean;
43
+ }
44
+
45
+ // Tools for order processing
46
+ const createOrder: Tool<unknown, UnifiedOrderData, [], string> = {
47
+ id: "create_order",
48
+ description: "Create a new order from the collected order data",
49
+ parameters: {
50
+ type: "object",
51
+ properties: {},
52
+ },
53
+ handler: ({ data }) => {
54
+ const orderId = `ORD-${Date.now()}`;
55
+ console.log(`Creating order ${orderId} for ${data?.customerName}`);
56
+
57
+ return {
58
+ data: `Order ${orderId} created successfully!`,
59
+ dataUpdate: {
60
+ orderId,
61
+ },
62
+ };
63
+ },
64
+ };
65
+
66
+ const processPayment: Tool<unknown, UnifiedOrderData, [], string> = {
67
+ id: "process_payment",
68
+ description: "Process payment for an order",
69
+ parameters: {
70
+ type: "object",
71
+ properties: {},
72
+ },
73
+ handler: ({ data }) => {
74
+ console.log(`Processing payment for order ${data?.orderId}`);
75
+
76
+ // Simulate payment processing
77
+ const success = Math.random() > 0.1; // 90% success rate
78
+
79
+ if (success) {
80
+ return {
81
+ data: `Payment processed successfully! Order ${data?.orderId} is now confirmed.`,
82
+ dataUpdate: {
83
+ confirmed: true,
84
+ },
85
+ };
86
+ } else {
87
+ return {
88
+ data: "Payment failed. Please try again or contact support.",
89
+ dataUpdate: {
90
+ confirmed: false,
91
+ },
92
+ };
93
+ }
94
+ },
95
+ };
96
+
97
+ // Define unified data schema for all order-related interactions
98
+ interface UnifiedOrderData extends OrderData, PaymentData {}
99
+
100
+ const orderSchema = {
101
+ type: "object",
102
+ properties: {
103
+ // Order fields
104
+ customerName: { type: "string" },
105
+ productType: { type: "string", enum: ["laptop", "phone", "tablet"] },
106
+ budget: { type: "number", minimum: 100 },
107
+ preferredColor: { type: "string" },
108
+ urgentDelivery: { type: "boolean" },
109
+ orderId: { type: "string" },
110
+ // Payment fields
111
+ paymentMethod: {
112
+ type: "string",
113
+ enum: ["credit_card", "paypal", "bank_transfer"],
114
+ },
115
+ amount: { type: "number" },
116
+ confirmed: { type: "boolean" },
117
+ },
118
+ };
119
+
120
+ // Create agent with persistence and agent-level schema
121
+ const agent = new Agent<unknown, UnifiedOrderData>({
122
+ name: "OrderBot",
123
+ description:
124
+ "A bot that handles multi-step order processing with session management",
125
+ provider: new GeminiProvider({
126
+ apiKey: process.env.GEMINI_API_KEY!,
127
+ model: "models/gemini-2.5-flash",
128
+ }),
129
+ // NEW: Agent-level schema
130
+ schema: orderSchema,
131
+ persistence: {
132
+ adapter: new MemoryAdapter(), // In production, use RedisAdapter, PrismaAdapter, etc.
133
+ },
134
+ });
135
+
136
+ // Order collection route with sequential steps
137
+ agent.createRoute({
138
+ title: "Product Order",
139
+ description: "Collect order details and create an order",
140
+ // NEW: Required fields for route completion
141
+ requiredFields: ["customerName", "productType", "budget"],
142
+ // NEW: Optional fields that enhance the experience
143
+ optionalFields: ["preferredColor", "urgentDelivery", "orderId"],
144
+ // Sequential steps for order collection
145
+ steps: [
146
+ {
147
+ id: "ask_name",
148
+ description: "Ask for customer name",
149
+ prompt: "Hi! I'd like to help you place an order. What's your name?",
150
+ collect: ["customerName"],
151
+ skipIf: (data: Partial<UnifiedOrderData>) => !!data.customerName,
152
+ },
153
+ {
154
+ id: "ask_product",
155
+ description: "Ask for product type",
156
+ prompt: "What would you like to order? (laptop, phone, or tablet)",
157
+ collect: ["productType"],
158
+ requires: ["customerName"],
159
+ skipIf: (data: Partial<UnifiedOrderData>) => !!data.productType,
160
+ },
161
+ {
162
+ id: "ask_budget",
163
+ description: "Ask for budget",
164
+ prompt: "What's your budget for this purchase?",
165
+ collect: ["budget"],
166
+ requires: ["customerName", "productType"],
167
+ skipIf: (data: Partial<UnifiedOrderData>) => data.budget !== undefined,
168
+ },
169
+ {
170
+ id: "ask_color",
171
+ description: "Ask for preferred color",
172
+ prompt: "Do you have a preferred color?",
173
+ collect: ["preferredColor"],
174
+ requires: ["customerName", "productType", "budget"],
175
+ skipIf: (data: Partial<UnifiedOrderData>) => !!data.preferredColor,
176
+ },
177
+ {
178
+ id: "ask_urgent",
179
+ description: "Ask about urgent delivery",
180
+ prompt: "Do you need urgent delivery?",
181
+ collect: ["urgentDelivery"],
182
+ requires: ["customerName", "productType", "budget"],
183
+ skipIf: (data: Partial<UnifiedOrderData>) => data.urgentDelivery !== undefined,
184
+ },
185
+ {
186
+ id: "create_order",
187
+ description: "Create the order",
188
+ prompt: "Great! Let me create your order.",
189
+ tools: [createOrder],
190
+ requires: ["customerName", "productType", "budget"],
191
+ },
192
+ ],
193
+ onComplete: {
194
+ nextStep: "Payment Processing",
195
+ condition: "Order has been created successfully",
196
+ },
197
+ });
198
+
199
+ // Payment route with sequential steps
200
+ agent.createRoute({
201
+ title: "Payment Processing",
202
+ description: "Process payment for an order",
203
+ // NEW: Required fields for route completion
204
+ requiredFields: ["orderId", "paymentMethod", "amount"],
205
+ // NEW: Optional fields
206
+ optionalFields: ["confirmed"],
207
+ // Sequential steps for payment processing
208
+ steps: [
209
+ {
210
+ id: "ask_payment_method",
211
+ description: "Ask for payment method",
212
+ prompt:
213
+ "Now let's process payment for your order. What payment method would you prefer?",
214
+ collect: ["paymentMethod"],
215
+ skipIf: (data: Partial<UnifiedOrderData>) => !!data.paymentMethod,
216
+ },
217
+ {
218
+ id: "ask_amount",
219
+ description: "Ask for payment amount",
220
+ prompt: "What's the payment amount?",
221
+ collect: ["amount"],
222
+ requires: ["paymentMethod"],
223
+ skipIf: (data: Partial<UnifiedOrderData>) => data.amount !== undefined,
224
+ },
225
+ {
226
+ id: "process_payment",
227
+ description: "Process the payment",
228
+ prompt: "Processing your payment...",
229
+ tools: [processPayment],
230
+ requires: ["orderId", "paymentMethod", "amount"],
231
+ },
232
+ ],
233
+ onComplete: "Order Complete", // End conversation when payment is complete
234
+ });
235
+
236
+ // Demonstration of automatic session management
237
+ async function demonstrateSessionManagement() {
238
+ console.log("=== Automatic Session Management Demo ===\n");
239
+
240
+ // Create agent with automatic session management
241
+ const sessionAgent = new Agent<unknown, UnifiedOrderData>({
242
+ name: "OrderBot",
243
+ description: "A bot that handles multi-step order processing",
244
+ provider: new GeminiProvider({
245
+ apiKey: process.env.GEMINI_API_KEY!,
246
+ model: "models/gemini-2.5-flash",
247
+ }),
248
+ // NEW: Agent-level schema
249
+ schema: orderSchema,
250
+ persistence: {
251
+ adapter: new MemoryAdapter(),
252
+ },
253
+ sessionId: "user-alice-123", // Automatically creates/loads this session
254
+ });
255
+
256
+ // Copy routes to the session agent
257
+ agent.getRoutes().forEach(route => {
258
+ sessionAgent.createRoute(route);
259
+ });
260
+
261
+ // Turn 1: Start order process - simple message API
262
+ console.log("Turn 1: Starting order process");
263
+ console.log("User: Hi, I'm Alice and I want to buy a laptop");
264
+
265
+ const response1 = await sessionAgent.chat("Hi, I'm Alice and I want to buy a laptop");
266
+
267
+ console.log("Bot:", response1.message);
268
+ console.log("Session ID:", sessionAgent.session.id);
269
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData<UnifiedOrderData>(), null, 2));
270
+ console.log("History length:", sessionAgent.session.getHistory().length);
271
+ console.log();
272
+
273
+ // Turn 2: Provide budget - session automatically maintained
274
+ console.log("Turn 2: Providing budget");
275
+ console.log("User: My budget is $1500");
276
+
277
+ const response2 = await sessionAgent.chat("My budget is $1500");
278
+
279
+ console.log("Bot:", response2.message);
280
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData<UnifiedOrderData>(), null, 2));
281
+ console.log("History length:", sessionAgent.session.getHistory().length);
282
+ console.log();
283
+
284
+ // Turn 3: Complete order details - session automatically updated
285
+ console.log("Turn 3: Completing order and transitioning to payment");
286
+ console.log("User: I want black color and urgent delivery please");
287
+
288
+ const response3 = await sessionAgent.chat("I want black color and urgent delivery please");
289
+
290
+ console.log("Bot:", response3.message);
291
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData<UnifiedOrderData>(), null, 2));
292
+ console.log("Route complete:", response3.isRouteComplete);
293
+ console.log("History length:", sessionAgent.session.getHistory().length);
294
+ console.log();
295
+
296
+ // Turn 4: Process payment - automatic route transition
297
+ console.log("Turn 4: Processing payment in transitioned route");
298
+ console.log("User: I'll pay with credit card, amount is $1599");
299
+
300
+ const response4 = await sessionAgent.chat("I'll pay with credit card, amount is $1599");
301
+
302
+ console.log("Bot:", response4.message);
303
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData<UnifiedOrderData>(), null, 2));
304
+ console.log("Route complete:", response4.isRouteComplete);
305
+ console.log("Final history length:", sessionAgent.session.getHistory().length);
306
+ }
307
+
308
+ // Demonstrate automatic session persistence and restoration
309
+ async function demonstrateSessionPersistence() {
310
+ console.log("\n=== Automatic Session Persistence Demo ===\n");
311
+
312
+ // Create agent with specific sessionId for demonstration
313
+ const sessionId = "demo-session-456";
314
+ const persistentAgent = new Agent<OrderContext, UnifiedOrderData>({
315
+ name: "Order Assistant",
316
+ description: "Help customers place orders with automatic persistence",
317
+ provider: new GeminiProvider({
318
+ apiKey: process.env.GEMINI_API_KEY!,
319
+ model: "models/gemini-2.5-flash",
320
+ }),
321
+ context: {
322
+ userId: "user_alice",
323
+ userName: "Alice",
324
+ isVip: false,
325
+ },
326
+ // NEW: Agent-level schema
327
+ schema: orderSchema,
328
+ persistence: {
329
+ adapter: new MemoryAdapter(),
330
+ autoSave: true, // Automatic persistence
331
+ },
332
+ sessionId, // Agent automatically loads or creates this session
333
+ });
334
+
335
+ // Copy routes to the persistent agent
336
+ agent.getRoutes().forEach(route => {
337
+ persistentAgent.createRoute(route);
338
+ });
339
+
340
+ console.log("Session ready:", persistentAgent.session.id);
341
+
342
+ // Start conversation - session automatically managed
343
+ const response1 = await persistentAgent.chat("I want to buy a phone for $800");
344
+
345
+ console.log("After first interaction:");
346
+ console.log("🤖 Agent:", response1.message);
347
+ console.log("Session data:", JSON.stringify(persistentAgent.session.getData<UnifiedOrderData>(), null, 2));
348
+ console.log("History length:", persistentAgent.session.getHistory().length);
349
+ console.log("Session automatically saved to persistence ✓");
350
+
351
+ // Simulate server restart - create new agent instance with same sessionId
352
+ console.log("\n🔄 Simulating server restart - creating new agent instance...");
353
+
354
+ const restoredAgent = new Agent<OrderContext, UnifiedOrderData>({
355
+ name: "Order Assistant",
356
+ provider: new GeminiProvider({
357
+ apiKey: process.env.GEMINI_API_KEY!,
358
+ model: "models/gemini-2.5-flash",
359
+ }),
360
+ context: {
361
+ userId: "user_alice",
362
+ userName: "Alice",
363
+ isVip: false,
364
+ },
365
+ // NEW: Agent-level schema
366
+ schema: orderSchema,
367
+ persistence: {
368
+ adapter: new MemoryAdapter(), // Same adapter instance for demo
369
+ autoSave: true,
370
+ },
371
+ sessionId, // Same sessionId - automatically loads existing session
372
+ });
373
+
374
+ // Copy routes to the restored agent
375
+ agent.getRoutes().forEach(route => {
376
+ restoredAgent.createRoute(route);
377
+ });
378
+
379
+ console.log("Session automatically restored:");
380
+ console.log("- Session ID:", restoredAgent.session.id);
381
+ console.log("- History length:", restoredAgent.session.getHistory().length);
382
+ console.log("- Restored data:", JSON.stringify(restoredAgent.session.getData<UnifiedOrderData>(), null, 2));
383
+
384
+ // Continue conversation seamlessly
385
+ const response2 = await restoredAgent.chat("Actually, make it urgent delivery");
386
+
387
+ console.log("\nAfter continuing with restored session:");
388
+ console.log("🤖 Agent:", response2.message);
389
+ console.log("Session data:", JSON.stringify(restoredAgent.session.getData<UnifiedOrderData>(), null, 2));
390
+ console.log("History length:", restoredAgent.session.getHistory().length);
391
+ console.log("Session automatically saved again ✓");
392
+ }
393
+
394
+ // Run demonstrations
395
+ async function main() {
396
+ try {
397
+ await demonstrateSessionManagement();
398
+ await demonstrateSessionPersistence();
399
+ } catch (error) {
400
+ console.error("Error:", error);
401
+ }
402
+ }
403
+
404
+ if (import.meta.url === `file://${process.argv[1]}`) {
405
+ main().catch(console.error);
406
+ }