@falai/agent 0.1.0-alpha2

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 (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,494 @@
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
+ * - NEW: Flexible ConditionTemplate patterns for session-aware routing:
14
+ * - String-only conditions: "user wants to order" (AI context only)
15
+ * - Function-only conditions: (ctx) => !!ctx.data?.orderId (session state checks)
16
+ * - Mixed arrays: ["payment needed", (ctx) => !ctx.data?.confirmed] (hybrid)
17
+ * - Session-aware skipIf conditions for flow control
18
+ */
19
+
20
+ import {
21
+ Agent,
22
+ GeminiProvider,
23
+ MemoryAdapter,
24
+ type Tool,
25
+ ValidationError,
26
+ } from "../../src/index";
27
+
28
+ // Define data types for our multi-step process
29
+ interface OrderData {
30
+ customerName: string;
31
+ productType: "laptop" | "phone" | "tablet";
32
+ budget: number;
33
+ preferredColor?: string;
34
+ urgentDelivery: boolean;
35
+ orderId?: string;
36
+ }
37
+
38
+ interface OrderContext {
39
+ userId: string;
40
+ userName: string;
41
+ isVip: boolean;
42
+ }
43
+
44
+ interface PaymentData {
45
+ orderId?: string; // Make this optional to match OrderData
46
+ paymentMethod: "credit_card" | "paypal" | "bank_transfer";
47
+ amount: number;
48
+ confirmed: boolean;
49
+ }
50
+
51
+ // Tools for order processing - using unified Tool interface
52
+ const createOrderTool: Tool<unknown, UnifiedOrderData> = {
53
+ id: "create_order",
54
+ description: "Create a new order from the collected order data",
55
+ parameters: {
56
+ type: "object",
57
+ properties: {},
58
+ },
59
+ handler: (context, args) => {
60
+ const orderId = `ORD-${Date.now()}`;
61
+ console.log(`Creating order ${orderId} for ${context.data?.customerName}`);
62
+
63
+ return {
64
+ data: `Order ${orderId} created successfully!`,
65
+ dataUpdate: {
66
+ orderId,
67
+ },
68
+ };
69
+ },
70
+ };
71
+
72
+ const processPaymentTool: Tool<unknown, UnifiedOrderData> = {
73
+ id: "process_payment",
74
+ description: "Process payment for an order",
75
+ parameters: {
76
+ type: "object",
77
+ properties: {},
78
+ },
79
+ handler: (context, args) => {
80
+ console.log(`Processing payment for order ${context.data?.orderId}`);
81
+
82
+ // Simulate payment processing
83
+ const success = Math.random() > 0.1; // 90% success rate
84
+
85
+ if (success) {
86
+ return {
87
+ data: `Payment processed successfully! Order ${context.data?.orderId} is now confirmed.`,
88
+ dataUpdate: {
89
+ confirmed: true,
90
+ },
91
+ };
92
+ } else {
93
+ return {
94
+ data: "Payment failed. Please try again or contact support.",
95
+ dataUpdate: {
96
+ confirmed: false,
97
+ },
98
+ };
99
+ }
100
+ },
101
+ };
102
+
103
+ // Define unified data schema for all order-related interactions
104
+ interface UnifiedOrderData extends OrderData, PaymentData { }
105
+
106
+ const orderSchema = {
107
+ type: "object",
108
+ properties: {
109
+ // Order fields
110
+ customerName: { type: "string" },
111
+ productType: { type: "string", enum: ["laptop", "phone", "tablet"] },
112
+ budget: { type: "number", minimum: 100 },
113
+ preferredColor: { type: "string" },
114
+ urgentDelivery: { type: "boolean" },
115
+ orderId: { type: "string" },
116
+ // Payment fields
117
+ paymentMethod: {
118
+ type: "string",
119
+ enum: ["credit_card", "paypal", "bank_transfer"],
120
+ },
121
+ amount: { type: "number" },
122
+ confirmed: { type: "boolean" },
123
+ },
124
+ };
125
+
126
+ // Create agent with persistence and agent-level schema
127
+ const agent = new Agent<unknown, UnifiedOrderData>({
128
+ name: "OrderBot",
129
+ description:
130
+ "A bot that handles multi-step order processing with session management",
131
+ provider: new GeminiProvider({
132
+ apiKey: process.env.GEMINI_API_KEY!,
133
+ model: "models/gemini-2.5-flash",
134
+ }),
135
+ // NEW: Agent-level schema
136
+ schema: orderSchema,
137
+ persistence: {
138
+ adapter: new MemoryAdapter(), // In production, use RedisAdapter, PrismaAdapter, etc.
139
+ },
140
+ });
141
+
142
+ // Demonstrate different tool registration patterns
143
+
144
+ // Method 1: Register tools for ID-based reference in steps
145
+ agent.tool.register(createOrderTool);
146
+ agent.tool.register(processPaymentTool);
147
+
148
+ // Method 2: Create specialized validation tool
149
+ const orderValidationTool = agent.tool.createValidation({
150
+ id: "validate_order",
151
+ fields: ["customerName", "productType", "budget"] as const,
152
+ validator: async (context, data) => {
153
+ const errors: ValidationError[] = [];
154
+ if (!data.customerName || data.customerName.length < 2) {
155
+ errors.push({
156
+ field: "customerName",
157
+ value: data.customerName,
158
+ message: "Customer name must be at least 2 characters",
159
+ schemaPath: "customerName"
160
+ });
161
+ }
162
+ if (!data.budget || data.budget < 100) {
163
+ errors.push({
164
+ field: "budget",
165
+ value: data.budget,
166
+ message: "Budget must be at least $100",
167
+ schemaPath: "budget"
168
+ });
169
+ }
170
+ return {
171
+ valid: errors.length === 0,
172
+ errors,
173
+ warnings: [],
174
+ };
175
+ },
176
+ });
177
+
178
+ // Method 3: Create data enrichment tool
179
+ const orderEnrichmentTool = agent.tool.createDataEnrichment({
180
+ id: "enrich_order",
181
+ fields: ["productType", "budget"] as const,
182
+ enricher: async (context, data) => {
183
+ // Enrich with fields that exist in UnifiedOrderData
184
+ const urgentDelivery = data.budget > 1000; // Premium orders get urgent delivery
185
+ const preferredColor = data.productType === "laptop" ? "silver" : "black";
186
+
187
+ return {
188
+ urgentDelivery,
189
+ preferredColor,
190
+ };
191
+ },
192
+ });
193
+
194
+ // Order collection route with sequential steps
195
+ agent.createRoute({
196
+ title: "Product Order",
197
+ description: "Collect order details and create an order",
198
+ // Mixed condition: AI context + programmatic validation
199
+ when: [
200
+ "user wants to place an order or buy something",
201
+ (ctx) => {
202
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
203
+ return message.includes('order') || message.includes('buy') || message.includes('purchase');
204
+ }
205
+ ],
206
+ // Skip if user already has a pending order
207
+ skipIf: [
208
+ "user already has an active order",
209
+ (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed
210
+ ],
211
+ // NEW: Required fields for route completion
212
+ requiredFields: ["customerName", "productType", "budget"],
213
+ // NEW: Optional fields that enhance the experience
214
+ optionalFields: ["preferredColor", "urgentDelivery", "orderId"],
215
+ // Sequential steps for order collection
216
+ steps: [
217
+ {
218
+ id: "ask_name",
219
+ description: "Ask for customer name",
220
+ prompt: "Hi! I'd like to help you place an order. What's your name?",
221
+ collect: ["customerName"],
222
+ // String-only skipIf for AI context
223
+ skipIf: "customer name already provided",
224
+ },
225
+ {
226
+ id: "ask_product",
227
+ description: "Ask for product type",
228
+ prompt: "What would you like to order? (laptop, phone, or tablet)",
229
+ collect: ["productType"],
230
+ requires: ["customerName"],
231
+ // Function-only skipIf for programmatic check
232
+ skipIf: (ctx) => !!ctx.data?.productType,
233
+ },
234
+ {
235
+ id: "ask_budget",
236
+ description: "Ask for budget",
237
+ prompt: "What's your budget for this purchase?",
238
+ collect: ["budget"],
239
+ requires: ["customerName", "productType"],
240
+ // Mixed skipIf: AI context + programmatic logic
241
+ skipIf: [
242
+ "budget already specified",
243
+ (ctx) => ctx.data?.budget !== undefined
244
+ ],
245
+ },
246
+ {
247
+ id: "ask_color",
248
+ description: "Ask for preferred color",
249
+ prompt: "Do you have a preferred color?",
250
+ collect: ["preferredColor"],
251
+ requires: ["customerName", "productType", "budget"],
252
+ // Function-only skipIf
253
+ skipIf: (ctx) => !!ctx.data?.preferredColor,
254
+ },
255
+ {
256
+ id: "ask_urgent",
257
+ description: "Ask about urgent delivery",
258
+ prompt: "Do you need urgent delivery?",
259
+ collect: ["urgentDelivery"],
260
+ requires: ["customerName", "productType", "budget"],
261
+ // String-only skipIf for simple cases
262
+ skipIf: "delivery preference already collected",
263
+ },
264
+ {
265
+ id: "create_order",
266
+ description: "Create the order",
267
+ prompt: "Great! Let me create your order.",
268
+ tools: ["create_order"], // Reference by ID
269
+ requires: ["customerName", "productType", "budget"],
270
+ },
271
+ ],
272
+ onComplete: {
273
+ nextStep: "Payment Processing",
274
+ condition: "Order has been created successfully",
275
+ },
276
+ });
277
+
278
+ // Payment route with sequential steps
279
+ agent.createRoute({
280
+ title: "Payment Processing",
281
+ description: "Process payment for an order",
282
+ // Function-only condition for programmatic logic
283
+ when: (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed,
284
+ // Skip if payment already processed
285
+ skipIf: (ctx) => !!ctx.data?.confirmed,
286
+ // NEW: Required fields for route completion
287
+ requiredFields: ["orderId", "paymentMethod", "amount"],
288
+ // NEW: Optional fields
289
+ optionalFields: ["confirmed"],
290
+ // Sequential steps for payment processing
291
+ steps: [
292
+ {
293
+ id: "ask_payment_method",
294
+ description: "Ask for payment method",
295
+ prompt:
296
+ "Now let's process payment for your order. What payment method would you prefer?",
297
+ collect: ["paymentMethod"],
298
+ // Mixed skipIf: AI context + programmatic check
299
+ skipIf: [
300
+ "payment method already selected",
301
+ (ctx) => !!ctx.data?.paymentMethod
302
+ ],
303
+ },
304
+ {
305
+ id: "ask_amount",
306
+ description: "Ask for payment amount",
307
+ prompt: "What's the payment amount?",
308
+ collect: ["amount"],
309
+ requires: ["paymentMethod"],
310
+ // Function-only skipIf
311
+ skipIf: (ctx) => ctx.data?.amount !== undefined,
312
+ },
313
+ {
314
+ id: "process_payment",
315
+ description: "Process the payment",
316
+ prompt: "Processing your payment...",
317
+ tools: ["process_payment"], // Reference by ID
318
+ requires: ["orderId", "paymentMethod", "amount"],
319
+ },
320
+ ],
321
+ onComplete: "Order Complete", // End conversation when payment is complete
322
+ });
323
+
324
+ // Demonstration of automatic session management
325
+ async function demonstrateSessionManagement() {
326
+ console.log("=== Automatic Session Management Demo ===\n");
327
+
328
+ // Create agent with automatic session management
329
+ const sessionAgent = new Agent<unknown, UnifiedOrderData>({
330
+ name: "OrderBot",
331
+ description: "A bot that handles multi-step order processing",
332
+ provider: new GeminiProvider({
333
+ apiKey: process.env.GEMINI_API_KEY!,
334
+ model: "models/gemini-2.5-flash",
335
+ }),
336
+ // NEW: Agent-level schema
337
+ schema: orderSchema,
338
+ persistence: {
339
+ adapter: new MemoryAdapter(),
340
+ },
341
+ sessionId: "user-alice-123", // Automatically creates/loads this session
342
+ });
343
+
344
+ // Copy routes to the session agent
345
+ agent.getRoutes().forEach(route => {
346
+ sessionAgent.createRoute(route.toOptions());
347
+ });
348
+
349
+ // Turn 1: Start order process - simple message API
350
+ console.log("Turn 1: Starting order process");
351
+ console.log("User: Hi, I'm Alice and I want to buy a laptop");
352
+
353
+ const response1 = await sessionAgent.chat("Hi, I'm Alice and I want to buy a laptop");
354
+
355
+ console.log("Bot:", response1.message);
356
+ console.log("Session ID:", sessionAgent.session.id);
357
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
358
+ console.log("History length:", sessionAgent.session.getHistory().length);
359
+ console.log();
360
+
361
+ // Turn 2: Provide budget - session automatically maintained
362
+ console.log("Turn 2: Providing budget");
363
+ console.log("User: My budget is $1500");
364
+
365
+ const response2 = await sessionAgent.chat("My budget is $1500");
366
+
367
+ console.log("Bot:", response2.message);
368
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
369
+ console.log("History length:", sessionAgent.session.getHistory().length);
370
+ console.log();
371
+
372
+ // Turn 3: Complete order details - session automatically updated
373
+ console.log("Turn 3: Completing order and transitioning to payment");
374
+ console.log("User: I want black color and urgent delivery please");
375
+
376
+ const response3 = await sessionAgent.chat("I want black color and urgent delivery please");
377
+
378
+ console.log("Bot:", response3.message);
379
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
380
+ console.log("Route complete:", response3.isRouteComplete);
381
+ console.log("History length:", sessionAgent.session.getHistory().length);
382
+ console.log();
383
+
384
+ // Turn 4: Process payment - automatic route transition
385
+ console.log("Turn 4: Processing payment in transitioned route");
386
+ console.log("User: I'll pay with credit card, amount is $1599");
387
+
388
+ const response4 = await sessionAgent.chat("I'll pay with credit card, amount is $1599");
389
+
390
+ console.log("Bot:", response4.message);
391
+ console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
392
+ console.log("Route complete:", response4.isRouteComplete);
393
+ console.log("Final history length:", sessionAgent.session.getHistory().length);
394
+ }
395
+
396
+ // Demonstrate automatic session persistence and restoration
397
+ async function demonstrateSessionPersistence() {
398
+ console.log("\n=== Automatic Session Persistence Demo ===\n");
399
+
400
+ // Create agent with specific sessionId for demonstration
401
+ const sessionId = "demo-session-456";
402
+ const persistentAgent = new Agent<OrderContext, UnifiedOrderData>({
403
+ name: "Order Assistant",
404
+ description: "Help customers place orders with automatic persistence",
405
+ provider: new GeminiProvider({
406
+ apiKey: process.env.GEMINI_API_KEY!,
407
+ model: "models/gemini-2.5-flash",
408
+ }),
409
+ context: {
410
+ userId: "user_alice",
411
+ userName: "Alice",
412
+ isVip: false,
413
+ },
414
+ // NEW: Agent-level schema
415
+ schema: orderSchema,
416
+ persistence: {
417
+ adapter: new MemoryAdapter(),
418
+ autoSave: true, // Automatic persistence
419
+ },
420
+ sessionId, // Agent automatically loads or creates this session
421
+ });
422
+
423
+ // Copy routes to the persistent agent
424
+ agent.getRoutes().forEach(route => {
425
+ persistentAgent.createRoute(route.toOptions());
426
+ });
427
+
428
+ console.log("Session ready:", persistentAgent.session.id);
429
+
430
+ // Start conversation - session automatically managed
431
+ const response1 = await persistentAgent.chat("I want to buy a phone for $800");
432
+
433
+ console.log("After first interaction:");
434
+ console.log("šŸ¤– Agent:", response1.message);
435
+ console.log("Session data:", JSON.stringify(persistentAgent.session.getData(), null, 2));
436
+ console.log("History length:", persistentAgent.session.getHistory().length);
437
+ console.log("Session automatically saved to persistence āœ“");
438
+
439
+ // Simulate server restart - create new agent instance with same sessionId
440
+ console.log("\nšŸ”„ Simulating server restart - creating new agent instance...");
441
+
442
+ const restoredAgent = new Agent<OrderContext, UnifiedOrderData>({
443
+ name: "Order Assistant",
444
+ provider: new GeminiProvider({
445
+ apiKey: process.env.GEMINI_API_KEY!,
446
+ model: "models/gemini-2.5-flash",
447
+ }),
448
+ context: {
449
+ userId: "user_alice",
450
+ userName: "Alice",
451
+ isVip: false,
452
+ },
453
+ // NEW: Agent-level schema
454
+ schema: orderSchema,
455
+ persistence: {
456
+ adapter: new MemoryAdapter(), // Same adapter instance for demo
457
+ autoSave: true,
458
+ },
459
+ sessionId, // Same sessionId - automatically loads existing session
460
+ });
461
+
462
+ // Copy routes to the restored agent
463
+ agent.getRoutes().forEach(route => {
464
+ restoredAgent.createRoute(route.toOptions());
465
+ });
466
+
467
+ console.log("Session automatically restored:");
468
+ console.log("- Session ID:", restoredAgent.session.id);
469
+ console.log("- History length:", restoredAgent.session.getHistory().length);
470
+ console.log("- Restored data:", JSON.stringify(restoredAgent.session.getData(), null, 2));
471
+
472
+ // Continue conversation seamlessly
473
+ const response2 = await restoredAgent.chat("Actually, make it urgent delivery");
474
+
475
+ console.log("\nAfter continuing with restored session:");
476
+ console.log("šŸ¤– Agent:", response2.message);
477
+ console.log("Session data:", JSON.stringify(restoredAgent.session.getData(), null, 2));
478
+ console.log("History length:", restoredAgent.session.getHistory().length);
479
+ console.log("Session automatically saved again āœ“");
480
+ }
481
+
482
+ // Run demonstrations
483
+ async function main() {
484
+ try {
485
+ await demonstrateSessionManagement();
486
+ await demonstrateSessionPersistence();
487
+ } catch (error) {
488
+ console.error("Error:", error);
489
+ }
490
+ }
491
+
492
+ if (import.meta.url === `file://${process.argv[1]}`) {
493
+ main().catch(console.error);
494
+ }