@falai/agent 0.8.0 → 0.9.0-alpha-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/README.md +306 -133
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/{core → cjs/src/core}/Agent.d.ts +67 -69
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +54 -35
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/{types → src/types}/route.d.ts +85 -31
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +70 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +36 -13
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/{cjs → src}/core/Agent.d.ts +67 -69
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/src/core/PersistenceManager.d.ts +98 -0
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +56 -26
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +31 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +54 -35
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +39 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/{types → src/types}/route.d.ts +85 -31
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +70 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +34 -13
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +902 -263
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1102 -487
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +87 -57
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +50 -38
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +229 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts +0 -96
  443. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  444. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  445. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  446. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  447. package/dist/cjs/core/PromptComposer.js +0 -127
  448. package/dist/cjs/core/PromptComposer.js.map +0 -1
  449. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  450. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  451. package/dist/cjs/core/ResponseEngine.js +0 -56
  452. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  453. package/dist/cjs/core/Route.d.ts +0 -90
  454. package/dist/cjs/core/Route.d.ts.map +0 -1
  455. package/dist/cjs/core/Route.js.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  458. package/dist/cjs/core/Step.d.ts +0 -72
  459. package/dist/cjs/core/Step.d.ts.map +0 -1
  460. package/dist/cjs/core/Step.js +0 -150
  461. package/dist/cjs/core/Step.js.map +0 -1
  462. package/dist/cjs/core/Tool.d.ts +0 -39
  463. package/dist/cjs/core/Tool.d.ts.map +0 -1
  464. package/dist/cjs/core/Tool.js +0 -34
  465. package/dist/cjs/core/Tool.js.map +0 -1
  466. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  467. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  469. package/dist/cjs/core/Transition.d.ts +0 -32
  470. package/dist/cjs/core/Transition.d.ts.map +0 -1
  471. package/dist/cjs/core/Transition.js +0 -89
  472. package/dist/cjs/core/Transition.js.map +0 -1
  473. package/dist/cjs/index.d.ts.map +0 -1
  474. package/dist/cjs/index.js.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  476. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  477. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  479. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  480. package/dist/cjs/providers/index.js.map +0 -1
  481. package/dist/cjs/types/agent.d.ts.map +0 -1
  482. package/dist/cjs/types/agent.js.map +0 -1
  483. package/dist/cjs/types/ai.d.ts.map +0 -1
  484. package/dist/cjs/types/history.d.ts.map +0 -1
  485. package/dist/cjs/types/history.js +0 -37
  486. package/dist/cjs/types/history.js.map +0 -1
  487. package/dist/cjs/types/index.d.ts +0 -12
  488. package/dist/cjs/types/index.d.ts.map +0 -1
  489. package/dist/cjs/types/index.js +0 -12
  490. package/dist/cjs/types/index.js.map +0 -1
  491. package/dist/cjs/types/persistence.d.ts.map +0 -1
  492. package/dist/cjs/types/persistence.js.map +0 -1
  493. package/dist/cjs/types/route.d.ts.map +0 -1
  494. package/dist/cjs/types/session.d.ts +0 -104
  495. package/dist/cjs/types/session.d.ts.map +0 -1
  496. package/dist/cjs/types/session.js.map +0 -1
  497. package/dist/cjs/utils/event.js.map +0 -1
  498. package/dist/cjs/utils/id.js.map +0 -1
  499. package/dist/cjs/utils/logger.js.map +0 -1
  500. package/dist/cjs/utils/retry.js.map +0 -1
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js.map +0 -1
  503. package/dist/core/Agent.d.ts.map +0 -1
  504. package/dist/core/Agent.js +0 -962
  505. package/dist/core/Agent.js.map +0 -1
  506. package/dist/core/DomainRegistry.d.ts +0 -36
  507. package/dist/core/DomainRegistry.d.ts.map +0 -1
  508. package/dist/core/DomainRegistry.js +0 -68
  509. package/dist/core/DomainRegistry.js.map +0 -1
  510. package/dist/core/Events.d.ts +0 -41
  511. package/dist/core/Events.d.ts.map +0 -1
  512. package/dist/core/Events.js +0 -94
  513. package/dist/core/Events.js.map +0 -1
  514. package/dist/core/PersistenceManager.d.ts +0 -96
  515. package/dist/core/PersistenceManager.d.ts.map +0 -1
  516. package/dist/core/PersistenceManager.js.map +0 -1
  517. package/dist/core/PromptComposer.d.ts +0 -24
  518. package/dist/core/PromptComposer.d.ts.map +0 -1
  519. package/dist/core/PromptComposer.js +0 -123
  520. package/dist/core/PromptComposer.js.map +0 -1
  521. package/dist/core/ResponseEngine.d.ts +0 -14
  522. package/dist/core/ResponseEngine.d.ts.map +0 -1
  523. package/dist/core/ResponseEngine.js +0 -52
  524. package/dist/core/ResponseEngine.js.map +0 -1
  525. package/dist/core/Route.d.ts +0 -90
  526. package/dist/core/Route.d.ts.map +0 -1
  527. package/dist/core/Route.js.map +0 -1
  528. package/dist/core/RoutingEngine.d.ts.map +0 -1
  529. package/dist/core/RoutingEngine.js.map +0 -1
  530. package/dist/core/Step.d.ts +0 -72
  531. package/dist/core/Step.d.ts.map +0 -1
  532. package/dist/core/Step.js +0 -146
  533. package/dist/core/Step.js.map +0 -1
  534. package/dist/core/Tool.d.ts +0 -39
  535. package/dist/core/Tool.d.ts.map +0 -1
  536. package/dist/core/Tool.js +0 -31
  537. package/dist/core/Tool.js.map +0 -1
  538. package/dist/core/ToolExecutor.d.ts +0 -29
  539. package/dist/core/ToolExecutor.d.ts.map +0 -1
  540. package/dist/core/ToolExecutor.js +0 -69
  541. package/dist/core/ToolExecutor.js.map +0 -1
  542. package/dist/core/Transition.d.ts +0 -32
  543. package/dist/core/Transition.d.ts.map +0 -1
  544. package/dist/core/Transition.js +0 -85
  545. package/dist/core/Transition.js.map +0 -1
  546. package/dist/index.d.ts.map +0 -1
  547. package/dist/index.js.map +0 -1
  548. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  549. package/dist/providers/AnthropicProvider.js.map +0 -1
  550. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  551. package/dist/providers/GeminiProvider.js.map +0 -1
  552. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenAIProvider.js.map +0 -1
  554. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  555. package/dist/providers/OpenRouterProvider.js.map +0 -1
  556. package/dist/providers/index.d.ts.map +0 -1
  557. package/dist/providers/index.js.map +0 -1
  558. package/dist/types/agent.d.ts.map +0 -1
  559. package/dist/types/agent.js.map +0 -1
  560. package/dist/types/ai.d.ts.map +0 -1
  561. package/dist/types/ai.js.map +0 -1
  562. package/dist/types/history.d.ts.map +0 -1
  563. package/dist/types/history.js +0 -34
  564. package/dist/types/history.js.map +0 -1
  565. package/dist/types/index.d.ts +0 -12
  566. package/dist/types/index.d.ts.map +0 -1
  567. package/dist/types/index.js +0 -6
  568. package/dist/types/index.js.map +0 -1
  569. package/dist/types/persistence.d.ts.map +0 -1
  570. package/dist/types/persistence.js.map +0 -1
  571. package/dist/types/route.d.ts.map +0 -1
  572. package/dist/types/routing.d.ts.map +0 -1
  573. package/dist/types/schema.d.ts.map +0 -1
  574. package/dist/types/session.d.ts +0 -104
  575. package/dist/types/session.d.ts.map +0 -1
  576. package/dist/types/session.js.map +0 -1
  577. package/dist/types/tool.d.ts.map +0 -1
  578. package/dist/utils/event.d.ts.map +0 -1
  579. package/dist/utils/event.js.map +0 -1
  580. package/dist/utils/id.d.ts.map +0 -1
  581. package/dist/utils/id.js.map +0 -1
  582. package/dist/utils/logger.d.ts.map +0 -1
  583. package/dist/utils/logger.js.map +0 -1
  584. package/dist/utils/retry.d.ts.map +0 -1
  585. package/dist/utils/retry.js.map +0 -1
  586. package/docs/AGENT.md +0 -535
  587. package/docs/DOCS.md +0 -263
  588. package/docs/DOMAINS.md +0 -735
  589. package/docs/EXAMPLES.md +0 -467
  590. package/docs/GETTING_STARTED.md +0 -424
  591. package/docs/PERSISTENCE.md +0 -815
  592. package/docs/PROVIDERS.md +0 -612
  593. package/docs/ROUTES.md +0 -1085
  594. package/docs/STEPS.md +0 -883
  595. package/examples/business-onboarding.ts +0 -791
  596. package/examples/custom-database-persistence.ts +0 -574
  597. package/examples/domain-scoping.ts +0 -366
  598. package/examples/travel-agent.ts +0 -584
  599. package/src/core/DomainRegistry.ts +0 -80
  600. package/src/core/Tool.ts +0 -112
  601. package/src/core/Transition.ts +0 -115
  602. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  603. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  604. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  605. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  606. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  607. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  608. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  609. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  610. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  611. /package/dist/cjs/{types → src/types}/route.js +0 -0
  612. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  614. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  615. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  616. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  621. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  622. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  623. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  624. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  625. /package/dist/{adapters → src/adapters}/index.js +0 -0
  626. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  627. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  628. /package/dist/{constants → src/constants}/index.js +0 -0
  629. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  630. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  631. /package/dist/{providers → src/providers}/index.js +0 -0
  632. /package/dist/{types → src/types}/agent.js +0 -0
  633. /package/dist/{types → src/types}/ai.js +0 -0
  634. /package/dist/{types → src/types}/persistence.js +0 -0
  635. /package/dist/{types → src/types}/route.js +0 -0
  636. /package/dist/{types → src/types}/routing.d.ts +0 -0
  637. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  638. /package/dist/{types → src/types}/routing.js +0 -0
  639. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  640. /package/dist/{types → src/types}/schema.d.ts +0 -0
  641. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  642. /package/dist/{types → src/types}/schema.js +0 -0
  643. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  644. /package/dist/{types → src/types}/tool.js +0 -0
  645. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  646. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  647. /package/dist/{utils → src/utils}/id.js +0 -0
  648. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  649. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  650. /package/dist/{utils → src/utils}/logger.js +0 -0
  651. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  652. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  653. /package/dist/{utils → src/utils}/retry.js +0 -0
  654. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,584 +0,0 @@
1
- /**
2
- * Travel agent example with session step management
3
- * Demonstrates data-driven conversations with schema extraction and step progression
4
- */
5
-
6
- import {
7
- Agent,
8
- defineTool,
9
- OpenRouterProvider,
10
- END_ROUTE,
11
- EventSource,
12
- createMessageEvent,
13
- createSession,
14
- type ToolContext,
15
- } from "../src/index";
16
-
17
- // Context type for travel agent
18
- interface TravelContext {
19
- customerId: string;
20
- customerName: string;
21
- }
22
-
23
- // Data extraction types for travel booking
24
- interface FlightBookingData {
25
- destination: string;
26
- destinationCode?: string; // Enriched by tools
27
- departureDate: string;
28
- returnDate?: string;
29
- passengers: number;
30
- cabinClass: "economy" | "business" | "first";
31
- urgency: "low" | "medium" | "high";
32
- shouldSearchFlights?: boolean; // Action flag
33
- }
34
-
35
- interface BookingStatusData {
36
- confirmationNumber: string;
37
- email?: string;
38
- }
39
-
40
- interface TravelFeedbackData {
41
- rating: number;
42
- bookingExperience?: string;
43
- recommendToFriend?: boolean;
44
- }
45
-
46
- // Tools with data access
47
- const getAvailableDestinations = defineTool(
48
- "get_available_destinations",
49
- async ({ context }: ToolContext<TravelContext>) => {
50
- return {
51
- data: [
52
- "Paris, France",
53
- "Tokyo, Japan",
54
- "Bali, Indonesia",
55
- "New York, USA",
56
- ],
57
- };
58
- },
59
- {
60
- description: "Get list of available travel destinations",
61
- }
62
- );
63
-
64
- const lookupDestinationCode = defineTool(
65
- "lookup_destination_code",
66
- async ({ context, data }: ToolContext<TravelContext, FlightBookingData>) => {
67
- if (!data?.destination) {
68
- return { data: undefined };
69
- }
70
-
71
- // Simulate airport code lookup
72
- const codes: Record<string, string> = {
73
- "Paris, France": "CDG",
74
- "Tokyo, Japan": "NRT",
75
- "Bali, Indonesia": "DPS",
76
- "New York, USA": "JFK",
77
- };
78
-
79
- return {
80
- data: undefined,
81
- dataUpdate: {
82
- destinationCode: codes[data.destination],
83
- },
84
- };
85
- },
86
- {
87
- description: "Convert destination name to airport code",
88
- }
89
- );
90
-
91
- const searchFlights = defineTool(
92
- "search_flights",
93
- async ({ context, data }: ToolContext<TravelContext, FlightBookingData>) => {
94
- if (!data?.destination || !data?.departureDate) {
95
- return { data: [] };
96
- }
97
-
98
- // Simulate flight search based on collected data
99
- const flights = [
100
- `Flight 123 - ${data.departureDate}, 9:00 AM, $${
101
- 800 + Math.floor(Math.random() * 200)
102
- }`,
103
- `Flight 321 - ${data.departureDate}, 2:30 PM, $${
104
- 700 + Math.floor(Math.random() * 200)
105
- }`,
106
- `Flight 987 - ${data.departureDate}, 6:45 PM, $${
107
- 600 + Math.floor(Math.random() * 200)
108
- }`,
109
- ];
110
-
111
- return {
112
- data: flights,
113
- dataUpdate: {
114
- shouldSearchFlights: false, // Clear the flag
115
- },
116
- };
117
- },
118
- {
119
- description: "Search for flights based on data travel data",
120
- }
121
- );
122
-
123
- const bookFlight = defineTool(
124
- "book_flight",
125
- async ({ context, data }: ToolContext<TravelContext, FlightBookingData>) => {
126
- if (!data) {
127
- return { data: "Please provide flight details" };
128
- }
129
-
130
- const confirmationNumber = `TRV-${new Date()
131
- .toISOString()
132
- .slice(0, 10)
133
- .replace(/-/g, "")}-001`;
134
-
135
- return {
136
- data: `Flight booked for ${context.customerName} to ${data.destination}. Confirmation: ${confirmationNumber}`,
137
- };
138
- },
139
- {
140
- description: "Book a flight using data travel data",
141
- }
142
- );
143
-
144
- const getBookingStatus = defineTool<
145
- TravelContext,
146
- [],
147
- { status: string; details: string; notes?: string }
148
- >(
149
- "get_booking_status",
150
- async ({ context, data }: ToolContext<TravelContext, BookingStatusData>) => {
151
- if (!data?.confirmationNumber) {
152
- return {
153
- data: {
154
- status: "Error",
155
- details: "Please provide a confirmation number",
156
- },
157
- };
158
- }
159
-
160
- return {
161
- data: {
162
- status: "Confirmed",
163
- details: `Flight booking ${data.confirmationNumber} is confirmed.`,
164
- notes: "Check-in opens 24 hours before departure.",
165
- },
166
- };
167
- },
168
- {
169
- description: "Get booking status using data confirmation number",
170
- }
171
- );
172
-
173
- // Initialize agent
174
- async function createTravelAgent() {
175
- const provider = new OpenRouterProvider({
176
- apiKey: process.env.OPENROUTER_API_KEY || "test-key",
177
- model: "google/gemini-2.0-flash-exp",
178
- backupModels: ["anthropic/claude-sonnet-4-5", "openai/gpt-5"],
179
- siteUrl: "https://github.com/falai-dev/agent",
180
- siteName: "Falai Travel Agent Example",
181
- retryConfig: {
182
- timeout: 60000,
183
- retries: 3,
184
- },
185
- });
186
-
187
- const agent = new Agent<TravelContext>({
188
- name: "Walker",
189
- description:
190
- "A knowledgeable travel agent who helps book flights, answer travel questions, and manage reservations.",
191
- goal: "Help customers book travel and manage their reservations",
192
- provider: provider,
193
- context: {
194
- customerId: "test-123",
195
- customerName: "Test Customer",
196
- },
197
- debug: true,
198
- });
199
-
200
- // Add domain glossary
201
- agent.createTerm({
202
- name: "Office Phone Number",
203
- description:
204
- "The phone number of our travel agency office, at +1-800-TRAVEL-1",
205
- synonyms: ["contact number", "customer service number", "support line"],
206
- });
207
-
208
- agent.createTerm({
209
- name: "Travel Insurance",
210
- description:
211
- "An optional service that provides coverage for trip cancellations, medical emergencies, lost luggage, and other travel-related issues.",
212
- synonyms: ["insurance", "trip protection", "travel protection"],
213
- });
214
-
215
- // Create flight booking route with data extraction
216
- // NEW: Added onComplete to automatically collect feedback after booking
217
- const flightBookingRoute = agent.createRoute<FlightBookingData>({
218
- title: "Book a Flight",
219
- description:
220
- "Helps the customer find and book a flight to their desired destination.",
221
- conditions: ["The customer wants to book a flight"],
222
- // NEW: Transition to feedback collection after successful booking
223
- onComplete: (session) => {
224
- // Dynamic logic: only collect feedback if destination is known
225
- if (session.data?.destination) {
226
- return "Travel Feedback";
227
- }
228
- return undefined; // No transition
229
- },
230
- schema: {
231
- type: "object",
232
- properties: {
233
- destination: {
234
- type: "string",
235
- description: "Travel destination",
236
- },
237
- destinationCode: {
238
- type: "string",
239
- description: "Airport code (enriched by tool)",
240
- },
241
- departureDate: {
242
- type: "string",
243
- description: "Departure date",
244
- },
245
- returnDate: {
246
- type: "string",
247
- description: "Return date (optional)",
248
- },
249
- passengers: {
250
- type: "number",
251
- minimum: 1,
252
- maximum: 9,
253
- description: "Number of passengers",
254
- },
255
- cabinClass: {
256
- type: "string",
257
- enum: ["economy", "business", "first"],
258
- default: "economy",
259
- description: "Cabin class preference",
260
- },
261
- urgency: {
262
- type: "string",
263
- enum: ["low", "medium", "high"],
264
- default: "medium",
265
- description: "Travel urgency level",
266
- },
267
- shouldSearchFlights: {
268
- type: "boolean",
269
- description: "Flag to trigger flight search",
270
- },
271
- },
272
- required: ["destination", "departureDate", "passengers"],
273
- },
274
- });
275
-
276
- // Build the route flow with data extraction and smart step progression
277
- const askDestination = flightBookingRoute.initialStep.nextStep({
278
- instructions: "Ask about the destination",
279
- collect: ["destination"],
280
- skipIf: (data) => !!data.destination,
281
- condition: "Customer needs to specify their travel destination",
282
- });
283
-
284
- const enrichDestination = askDestination.nextStep({
285
- tool: lookupDestinationCode,
286
- requires: ["destination"],
287
- condition: "Destination provided, lookup airport code",
288
- });
289
-
290
- const askDates = enrichDestination.nextStep({
291
- instructions: "Ask about preferred travel dates",
292
- collect: ["departureDate"],
293
- skipIf: (data) => !!data.departureDate,
294
- requires: ["destination"],
295
- condition: "Destination confirmed, need travel dates",
296
- });
297
-
298
- const askPassengers = askDates.nextStep({
299
- instructions: "Ask for number of passengers",
300
- collect: ["passengers"],
301
- skipIf: (data) => !!data.passengers,
302
- requires: ["destination", "departureDate"],
303
- condition: "Dates confirmed, need passenger count",
304
- });
305
-
306
- const searchFlightsStep = askPassengers.nextStep({
307
- tool: searchFlights,
308
- // Triggered when shouldSearchFlights flag is set by hook
309
- condition: "All basic info collected, search for available flights",
310
- });
311
-
312
- const presentFlights = searchFlightsStep.nextStep({
313
- instructions: "Present available flights and ask which one works for them",
314
- condition: "Flight search complete, present options to customer",
315
- });
316
-
317
- // Happy path: customer selects a flight
318
- const confirmBooking = presentFlights.nextStep({
319
- instructions: "Confirm booking details before proceeding",
320
- collect: ["cabinClass", "urgency"], // Additional optional data
321
- condition: "Customer interested in a flight, confirm booking details",
322
- });
323
-
324
- const bookFlightStep = confirmBooking.nextStep({
325
- tool: bookFlight,
326
- condition: "Customer confirmed, proceed with booking",
327
- });
328
-
329
- const provideConfirmation = bookFlightStep.nextStep({
330
- instructions: "Provide confirmation number and booking summary",
331
- condition: "Booking completed successfully",
332
- });
333
-
334
- provideConfirmation.nextStep({
335
- step: END_ROUTE,
336
- condition: "Customer has confirmation, booking flow complete",
337
- });
338
-
339
- // Add route-specific guidelines
340
- flightBookingRoute.createGuideline({
341
- condition:
342
- "The customer mentions they need to travel urgently or it's an emergency",
343
- action:
344
- "Direct them to call our office immediately for priority booking assistance",
345
- });
346
-
347
- flightBookingRoute.createGuideline({
348
- condition: "The customer asks about visa requirements",
349
- action:
350
- "Inform them that visa requirements vary by destination and nationality, and suggest they check with the embassy or consulate",
351
- });
352
-
353
- // Create booking status route with data extraction
354
- const bookingStatusRoute = agent.createRoute<BookingStatusData>({
355
- title: "Check Booking Status",
356
- description:
357
- "Retrieves the customer's booking status and provides relevant information.",
358
- conditions: ["The customer wants to check their booking status"],
359
- schema: {
360
- type: "object",
361
- properties: {
362
- confirmationNumber: {
363
- type: "string",
364
- description: "Booking confirmation number",
365
- },
366
- email: {
367
- type: "string",
368
- description: "Email address associated with booking (optional)",
369
- },
370
- },
371
- required: ["confirmationNumber"],
372
- },
373
- });
374
-
375
- const askConfirmation = bookingStatusRoute.initialStep.nextStep({
376
- instructions: "Ask for the confirmation number or booking reference",
377
- collect: ["confirmationNumber"],
378
- skipIf: (data) => !!data.confirmationNumber,
379
- condition:
380
- "Customer wants to check booking status but hasn't provided confirmation number",
381
- });
382
-
383
- const checkStatus = askConfirmation.nextStep({
384
- tool: getBookingStatus,
385
- requires: ["confirmationNumber"],
386
- condition: "Confirmation number provided, look up booking details",
387
- });
388
-
389
- const provideStatus = checkStatus.nextStep({
390
- instructions: "Provide booking status and relevant information",
391
- condition: "Booking status retrieved successfully",
392
- });
393
-
394
- provideStatus.nextStep({
395
- step: END_ROUTE,
396
- condition: "Booking information provided to customer",
397
- });
398
-
399
- // NEW: Travel Feedback route - collects feedback after booking
400
- const feedbackRoute = agent.createRoute<TravelFeedbackData>({
401
- title: "Travel Feedback",
402
- description: "Collects customer feedback after flight booking",
403
- conditions: ["Collect travel booking feedback"],
404
- schema: {
405
- type: "object",
406
- properties: {
407
- rating: {
408
- type: "number",
409
- description: "Overall booking experience rating 1-5",
410
- },
411
- bookingExperience: {
412
- type: "string",
413
- description: "Description of booking experience",
414
- },
415
- recommendToFriend: {
416
- type: "boolean",
417
- description: "Would they recommend us to a friend",
418
- },
419
- },
420
- required: ["rating"],
421
- },
422
- });
423
-
424
- const askFeedbackRating = feedbackRoute.initialStep.nextStep({
425
- instructions:
426
- "Ask for overall rating from 1 to 5 for the booking experience",
427
- collect: ["rating"],
428
- skipIf: (data) => !!data.rating,
429
- });
430
-
431
- const askRecommendation = askFeedbackRating.nextStep({
432
- instructions:
433
- "Ask if they would recommend our service to a friend (yes/no)",
434
- collect: ["recommendToFriend"],
435
- });
436
-
437
- const thankForFeedback = askRecommendation.nextStep({
438
- instructions: "Thank them for their feedback and wish them a great trip!",
439
- });
440
-
441
- thankForFeedback.nextStep({ step: END_ROUTE });
442
-
443
- // Global guidelines
444
- agent.createGuideline({
445
- condition: "The customer asks about travel insurance",
446
- action:
447
- "Explain our travel insurance options, coverage details, and pricing, then offer to add it to their booking",
448
- });
449
-
450
- agent.createGuideline({
451
- condition: "The customer asks to speak with a human agent",
452
- action:
453
- "Provide the office phone number and office hours, and offer to help them with anything else in the meantime",
454
- });
455
-
456
- agent.createGuideline({
457
- condition:
458
- "The customer inquires about something that has nothing to do with travel",
459
- action:
460
- "Kindly tell them you cannot assist with off-topic inquiries - do not engage with their request.",
461
- });
462
-
463
- return agent;
464
- }
465
-
466
- // Example usage with session step
467
- async function main() {
468
- const agent = await createTravelAgent();
469
-
470
- // Initialize session step
471
- let session = createSession<FlightBookingData | BookingStatusData>();
472
-
473
- // Simulate a conversation
474
- const history = [
475
- createMessageEvent(
476
- EventSource.CUSTOMER,
477
- "Alice",
478
- "Hi, I want to book a flight to Paris next week with 2 passengers"
479
- ),
480
- ];
481
-
482
- console.info("Agent:", agent.name);
483
- console.info("Description:", agent.description);
484
-
485
- // Turn 1 - Agent extracts data and starts booking flow
486
- const response1 = await agent.respond({ history, session });
487
- console.info("\n=== TURN 1 ===");
488
- console.info("Agent:", response1.message);
489
- console.info("Route:", response1.session?.currentRoute?.title);
490
- console.info("Step:", response1.session?.currentStep?.id);
491
- console.info("Data:", response1.session?.data);
492
-
493
- // Session step updated with progress
494
- session = response1.session!;
495
-
496
- // Turn 2 - Continue with session step
497
- if (response1.session?.currentRoute?.title === "Book a Flight") {
498
- const history2 = [
499
- ...history,
500
- createMessageEvent(EventSource.AI_AGENT, "Agent", response1.message),
501
- createMessageEvent(EventSource.CUSTOMER, "Alice", "Economy class please"),
502
- ];
503
-
504
- const response2 = await agent.respond({ history: history2, session });
505
- console.info("\n=== TURN 2 ===");
506
- console.info("Agent:", response2.message);
507
- console.info("Updated data:", response2.session?.data);
508
- console.info("Current step:", response2.session?.currentStep?.id);
509
- }
510
-
511
- // Demonstrate booking status check
512
- const statusHistory = [
513
- createMessageEvent(
514
- EventSource.CUSTOMER,
515
- "Bob",
516
- "Can you check my booking status? Confirmation number TRV-20251015-001"
517
- ),
518
- ];
519
-
520
- let statusSession = createSession<BookingStatusData>();
521
- const statusResponse = await agent.respond({
522
- history: statusHistory,
523
- session: statusSession,
524
- });
525
- console.info("\n=== BOOKING STATUS CHECK ===");
526
- console.info("Agent:", statusResponse.message);
527
- console.info("Route:", statusResponse.session?.currentRoute?.title);
528
- console.info("Data:", statusResponse.session?.data);
529
-
530
- // Show session step management benefits
531
- console.info("\n=== SESSION STEP BENEFITS ===");
532
- console.info("✅ Always-on routing - respects user intent changes");
533
- console.info("✅ Data persistence - collected data survives across turns");
534
- console.info(
535
- "✅ Step progression - intelligent flow based on collected data"
536
- );
537
- console.info("✅ Context awareness - router sees current progress");
538
-
539
- if (statusResponse.isRouteComplete) {
540
- console.info("\n✅ Booking status check complete!");
541
- await logBookingStatusCheck(
542
- agent.getData(statusResponse.session?.id) as unknown as BookingStatusData
543
- );
544
- }
545
- }
546
-
547
- /**
548
- * Mock function to send a booking confirmation.
549
- * @param data - The flight booking data.
550
- */
551
- async function sendBookingConfirmation(data: FlightBookingData) {
552
- console.info("\n" + "=".repeat(60));
553
- console.info("🚀 Sending Booking Confirmation...");
554
- console.info("=".repeat(60));
555
- console.info("Booking Details:", JSON.stringify(data, null, 2));
556
- console.info(
557
- ` - Sending confirmation for ${data.passengers} passengers to ${data.destination}.`
558
- );
559
- await new Promise((resolve) => setTimeout(resolve, 1000));
560
- console.info("✨ Confirmation sent!");
561
- }
562
-
563
- /**
564
- * Mock function to log a booking status check.
565
- * @param data - The booking status data.
566
- */
567
- async function logBookingStatusCheck(data: BookingStatusData) {
568
- console.info("\n" + "=".repeat(60));
569
- console.info("📝 Logging Booking Status Check...");
570
- console.info("=".repeat(60));
571
- console.info("Check Details:", JSON.stringify(data, null, 2));
572
- console.info(
573
- ` - Logging status check for confirmation #${data.confirmationNumber}.`
574
- );
575
- await new Promise((resolve) => setTimeout(resolve, 500));
576
- console.info("✨ Status check logged!");
577
- }
578
-
579
- // Run if executed directly
580
- if (import.meta.url === `file://${process.argv[1]}`) {
581
- main().catch((err) => console.error(err));
582
- }
583
-
584
- export { createTravelAgent };
@@ -1,80 +0,0 @@
1
- /**
2
- * Domain registry for organizing agent capabilities by domain
3
- */
4
-
5
- /**
6
- * Registry that holds domain-specific tools and methods
7
- */
8
- export class DomainRegistry {
9
- private domains: Map<string, Record<string, unknown>> = new Map();
10
-
11
- /**
12
- * Register a new domain with its methods/tools
13
- */
14
- register<TDomain extends Record<string, unknown>>(
15
- name: string,
16
- domain: TDomain
17
- ): void {
18
- if (this.domains.has(name)) {
19
- throw new Error(`Domain "${name}" is already registered`);
20
- }
21
- this.domains.set(name, domain);
22
- }
23
-
24
- /**
25
- * Get a registered domain
26
- */
27
- get<TDomain extends Record<string, unknown>>(
28
- name: string
29
- ): TDomain | undefined {
30
- return this.domains.get(name) as TDomain | undefined;
31
- }
32
-
33
- /**
34
- * Check if a domain is registered
35
- */
36
- has(name: string): boolean {
37
- return this.domains.has(name);
38
- }
39
-
40
- /**
41
- * Get all registered domains as a single object
42
- */
43
- all(): Record<string, Record<string, unknown>> {
44
- const result: Record<string, Record<string, unknown>> = {};
45
- for (const [name, domain] of this.domains) {
46
- result[name] = domain;
47
- }
48
- return result;
49
- }
50
-
51
- /**
52
- * Get filtered domains by names
53
- * @param allowedNames - Array of domain names to include (undefined = all domains)
54
- * @returns Object with only the specified domains
55
- */
56
- getFiltered(
57
- allowedNames?: string[]
58
- ): Record<string, Record<string, unknown>> {
59
- // If no filter specified, return all domains
60
- if (!allowedNames) {
61
- return this.all();
62
- }
63
-
64
- const result: Record<string, Record<string, unknown>> = {};
65
- for (const name of allowedNames) {
66
- const domain = this.domains.get(name);
67
- if (domain) {
68
- result[name] = domain;
69
- }
70
- }
71
- return result;
72
- }
73
-
74
- /**
75
- * Get list of all registered domain names
76
- */
77
- getDomainNames(): string[] {
78
- return Array.from(this.domains.keys());
79
- }
80
- }