@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,791 +0,0 @@
1
- /**
2
- * Business Onboarding Example
3
- * Updated for v2 architecture with session step management and schema-first data extraction
4
- *
5
- * Real-world example showing:
6
- * - Complex multi-step onboarding flow with schema-based data extraction
7
- * - Tools with enhanced context access for automatic step management
8
- * - Lifecycle hooks for data validation and persistence
9
- * - Branching logic (physical vs online business) with skipIf conditions
10
- * - Code-based step progression instead of fuzzy conditions
11
- */
12
-
13
- import {
14
- Agent,
15
- defineTool,
16
- END_ROUTE,
17
- EventSource,
18
- createMessageEvent,
19
- OpenAIProvider,
20
- createSession,
21
- type ToolContext,
22
- } from "../src/index";
23
-
24
- // ==================== Types ====================
25
-
26
- interface BusinessInfo {
27
- businessName?: string;
28
- businessDescription?: string;
29
- businessSector?: string;
30
- }
31
-
32
- interface LocationInfo {
33
- address?: string;
34
- city?: string;
35
- step?: string;
36
- hasPhysicalStore?: boolean;
37
- }
38
-
39
- interface ContactInfo {
40
- website?: string;
41
- openingHours?: string;
42
- }
43
-
44
- interface PaymentInfo {
45
- paymentMethods?: string[];
46
- pixInfo?: {
47
- pixKey: string;
48
- pixType: "cpf" | "cnpj" | "email" | "phone" | "random";
49
- };
50
- installmentOptions?: string;
51
- }
52
-
53
- interface ProductsInfo {
54
- products?: string[];
55
- services?: string[];
56
- targetAudience?: string;
57
- }
58
-
59
- interface RouteInfo {
60
- title: string;
61
- description: string;
62
- keywords: string[];
63
- responseStyle: "formal" | "casual" | "professional" | "friendly";
64
- actions: string[];
65
- }
66
-
67
- interface OnboardingData {
68
- business?: BusinessInfo;
69
- location?: LocationInfo;
70
- contact?: ContactInfo;
71
- payment?: PaymentInfo;
72
- productsServices?: ProductsInfo;
73
- routes: RouteInfo[];
74
- }
75
-
76
- interface OnboardingContext {
77
- userId: string;
78
- userName: string;
79
- sessionId: string;
80
- collectedData: OnboardingData;
81
- }
82
-
83
- // ==================== Tools ====================
84
-
85
- /**
86
- * Save business information
87
- */
88
- const saveBusinessInfo = defineTool<
89
- OnboardingContext,
90
- [name: string, description: string, sector: string],
91
- boolean
92
- >(
93
- "save_business_info",
94
- async (
95
- toolContext: ToolContext<OnboardingContext>,
96
- name: string,
97
- description: string,
98
- sector: string
99
- ) => {
100
- // Return contextUpdate to automatically update context
101
- return {
102
- data: true,
103
- contextUpdate: {
104
- collectedData: {
105
- ...toolContext.context.collectedData,
106
- business: {
107
- businessName: name,
108
- businessDescription: description,
109
- businessSector: sector,
110
- },
111
- },
112
- },
113
- };
114
- },
115
- {
116
- description:
117
- "Save basic business information: company name, description, and sector",
118
- }
119
- );
120
-
121
- /**
122
- * Save products and services information
123
- */
124
- const saveProductsServices = defineTool<
125
- OnboardingContext,
126
- [products: string[], services: string[], targetAudience: string],
127
- boolean
128
- >(
129
- "save_products_services",
130
- async (
131
- toolContext: ToolContext<OnboardingContext>,
132
- products: string[],
133
- services: string[],
134
- targetAudience: string
135
- ) => {
136
- return {
137
- data: true,
138
- contextUpdate: {
139
- collectedData: {
140
- ...toolContext.context.collectedData,
141
- productsServices: {
142
- products,
143
- services,
144
- targetAudience,
145
- },
146
- },
147
- },
148
- };
149
- },
150
- {
151
- description: "Save products, services offered, and target audience",
152
- }
153
- );
154
-
155
- /**
156
- * Save location information
157
- */
158
- const saveLocationInfo = defineTool<
159
- OnboardingContext,
160
- [address: string, city: string, step: string, hasPhysicalStore: boolean],
161
- boolean
162
- >(
163
- "save_location_info",
164
- async (
165
- toolContext: ToolContext<OnboardingContext>,
166
- address: string,
167
- city: string,
168
- step: string,
169
- hasPhysicalStore: boolean
170
- ) => {
171
- return {
172
- data: true,
173
- contextUpdate: {
174
- collectedData: {
175
- ...toolContext.context.collectedData,
176
- location: {
177
- address,
178
- city,
179
- step,
180
- hasPhysicalStore,
181
- },
182
- },
183
- },
184
- };
185
- },
186
- {
187
- description:
188
- "Save location information: full address, city, step, and physical store status",
189
- }
190
- );
191
-
192
- /**
193
- * Save contact information
194
- */
195
- const saveContactInfo = defineTool<
196
- OnboardingContext,
197
- [website: string, openingHours: string],
198
- boolean
199
- >(
200
- "save_contact_info",
201
- async (
202
- toolContext: ToolContext<OnboardingContext>,
203
- website: string,
204
- openingHours: string
205
- ) => {
206
- return {
207
- data: true,
208
- contextUpdate: {
209
- collectedData: {
210
- ...toolContext.context.collectedData,
211
- contact: {
212
- website,
213
- openingHours,
214
- },
215
- },
216
- },
217
- };
218
- },
219
- {
220
- description: "Save contact information: website/URL and business hours",
221
- }
222
- );
223
-
224
- /**
225
- * Save payment information
226
- */
227
- const savePaymentInfo = defineTool<
228
- OnboardingContext,
229
- [
230
- paymentMethods: string[],
231
- pixKey: string,
232
- pixType: string,
233
- installmentOptions: string
234
- ],
235
- boolean
236
- >(
237
- "save_payment_info",
238
- async (
239
- toolContext: ToolContext<OnboardingContext>,
240
- paymentMethods: string[],
241
- pixKey: string,
242
- pixType: string,
243
- installmentOptions: string
244
- ) => {
245
- const pixInfo =
246
- pixKey && pixType
247
- ? {
248
- pixKey,
249
- pixType: ["cpf", "cnpj", "email", "phone", "random"].includes(
250
- pixType.toLowerCase()
251
- )
252
- ? (pixType.toLowerCase() as
253
- | "cpf"
254
- | "cnpj"
255
- | "email"
256
- | "phone"
257
- | "random")
258
- : ("random" as const),
259
- }
260
- : undefined;
261
-
262
- return {
263
- data: true,
264
- contextUpdate: {
265
- collectedData: {
266
- ...toolContext.context.collectedData,
267
- payment: {
268
- paymentMethods,
269
- pixInfo,
270
- installmentOptions,
271
- },
272
- },
273
- },
274
- };
275
- },
276
- {
277
- description:
278
- "Save payment information: accepted methods, Pix key with type (cpf/cnpj/email/phone/random), and installment options",
279
- }
280
- );
281
-
282
- /**
283
- * Add a conversation route
284
- */
285
- const addConversationRoute = defineTool<
286
- OnboardingContext,
287
- [
288
- title: string,
289
- description: string,
290
- keywords: string[],
291
- responseStyle: string
292
- ],
293
- boolean
294
- >(
295
- "add_conversation_route",
296
- async (
297
- toolContext: ToolContext<OnboardingContext>,
298
- title: string,
299
- description: string,
300
- keywords: string[],
301
- responseStyle: string
302
- ) => {
303
- const validResponseStyles = [
304
- "formal",
305
- "casual",
306
- "professional",
307
- "friendly",
308
- ];
309
- const normalizedStyle = responseStyle.toLowerCase();
310
-
311
- const route: RouteInfo = {
312
- title,
313
- description,
314
- keywords,
315
- responseStyle: validResponseStyles.includes(normalizedStyle)
316
- ? (normalizedStyle as "formal" | "casual" | "professional" | "friendly")
317
- : "professional",
318
- actions: [],
319
- };
320
-
321
- const existingRoutes = toolContext.context.collectedData.routes || [];
322
-
323
- return {
324
- data: true,
325
- contextUpdate: {
326
- collectedData: {
327
- ...toolContext.context.collectedData,
328
- routes: [...existingRoutes, route],
329
- },
330
- },
331
- };
332
- },
333
- {
334
- description:
335
- "Add a new conversation route with title, description, keywords, and response style",
336
- }
337
- );
338
-
339
- /**
340
- * Get all collected data for review
341
- */
342
- const getData = defineTool<OnboardingContext, [], OnboardingData>(
343
- "get_collected_data",
344
- async (toolContext: ToolContext<OnboardingContext>) => {
345
- return { data: toolContext.context.collectedData };
346
- },
347
- {
348
- description: "Retrieve all collected data for review",
349
- }
350
- );
351
-
352
- // ==================== Agent Creation ====================
353
-
354
- /**
355
- * Create a business onboarding agent with lifecycle hooks
356
- * This demonstrates a real-world pattern with:
357
- * - beforeRespond: Load fresh context before each response
358
- * - onContextUpdate: Automatically persist context changes
359
- */
360
- async function createBusinessOnboardingAgent(
361
- userId: string,
362
- userName: string,
363
- sessionId: string,
364
- initialData: OnboardingData = { routes: [] }
365
- ): Promise<Agent<OnboardingContext>> {
366
- const provider = new OpenAIProvider({
367
- apiKey: process.env.OPENAI_API_KEY || "test-key",
368
- model: "gpt-5",
369
- backupModels: ["gpt-5-mini"],
370
- retryConfig: {
371
- timeout: 60000,
372
- retries: 3,
373
- },
374
- });
375
-
376
- // Create agent with lifecycle hooks for automatic persistence
377
- const agent = new Agent<OnboardingContext>({
378
- name: "Business Onboarding Assistant",
379
- description:
380
- "A specialized assistant that helps businesses set up intelligent conversation routes for their customers.",
381
- goal: "Collect comprehensive business information and create personalized conversation routes",
382
- provider: provider,
383
- context: {
384
- userId,
385
- userName,
386
- sessionId,
387
- collectedData: initialData,
388
- },
389
- // Lifecycle hooks enable agent caching!
390
- hooks: {
391
- // Load fresh context before each response
392
- beforeRespond: async (currentContext) => {
393
- // In a real app, fetch from database here
394
- console.log(
395
- `[beforeRespond] Loading fresh context for session ${sessionId}`
396
- );
397
- // Return updated context
398
- return currentContext;
399
- },
400
-
401
- // Automatically persist context updates
402
- onContextUpdate: async (newContext) => {
403
- // In a real app, save to database here
404
- console.log(
405
- `[onContextUpdate] Persisting context for session ${sessionId}`
406
- );
407
- console.log(
408
- "Updated data:",
409
- JSON.stringify(newContext.collectedData, null, 2)
410
- );
411
- },
412
- },
413
- });
414
-
415
- // Create the main onboarding route
416
- const onboardingRoute = agent.createRoute({
417
- title: "Business Onboarding",
418
- description: "Complete onboarding process to configure personalized routes",
419
- conditions: ["User is starting the onboarding process"],
420
- endStep: {
421
- instructions:
422
- "🎉 Perfect! Setup complete! Your WhatsApp assistant is ready and will use all this information to automatically serve your customers. If you have any questions or need adjustments, just let me know!",
423
- },
424
- });
425
-
426
- // ==================== Build the Flow ====================
427
-
428
- // For complex flows with branching, we use step-by-step approach
429
- // This makes it easier to reference steps for branching logic
430
-
431
- // Step 0: Welcome
432
- const welcome = onboardingRoute.initialStep.nextStep({
433
- instructions: `Hello ${userName}! 👋 I'm your setup assistant. I'll help you configure your WhatsApp assistant by collecting practical information about your business. ${
434
- initialData.business?.businessName
435
- ? `I see your company is "${initialData.business.businessName}".`
436
- : ""
437
- } Let's begin! This will only take a few minutes.`,
438
- });
439
-
440
- // Step 1: Business basics - Ask
441
- const askBusiness = welcome.nextStep({
442
- instructions:
443
- initialData.business?.businessName &&
444
- initialData.business?.businessDescription &&
445
- initialData.business?.businessSector
446
- ? `Please confirm: your company is "${initialData.business.businessName}", operates in "${initialData.business.businessSector}", and "${initialData.business.businessDescription}". Is this correct?`
447
- : initialData.business?.businessName
448
- ? `Your company "${initialData.business.businessName}" - what sector do you operate in? And what exactly do you do? (brief description)`
449
- : "First, the basics: what's your company name, sector, and what do you do? (e.g., 'Store X, retail, we sell women's clothing')",
450
- });
451
-
452
- // Step 1: Business basics - Save
453
- const saveBusiness = askBusiness.nextStep({
454
- tool: saveBusinessInfo,
455
- condition: "User provided company name, sector, and description",
456
- });
457
-
458
- // Step 2: Products/Services - Ask
459
- const askProducts = saveBusiness.nextStep({
460
- instructions:
461
- "Perfect! Now tell me: what are the main products or services you offer? And who is your target audience? (e.g., 'We sell women's clothing and accessories for women aged 25-45')",
462
- });
463
-
464
- // Step 2: Products/Services - Save
465
- const saveProducts = askProducts.nextStep({
466
- tool: saveProductsServices,
467
- condition: "User listed products/services and target audience",
468
- });
469
-
470
- // Step 3: Location - Branch point
471
- const askLocation = saveProducts.nextStep({
472
- instructions:
473
- "Great! Do you have a physical store or in-person service location? (answer 'yes' or 'no')",
474
- });
475
-
476
- // Step 3a: Physical store path
477
- const askPhysicalLocation = askLocation.nextStep({
478
- instructions:
479
- "I see! Since you have a physical presence, I need the complete address (street, number, city, and step) and business hours. This is important for your assistant to inform customers. (e.g., 'José Silva Street, 123, São Paulo - SP - Mon to Fri: 9am to 6pm')",
480
- condition: "User has a physical store",
481
- });
482
-
483
- const savePhysicalLocation = askPhysicalLocation.nextStep({
484
- tool: saveLocationInfo,
485
- condition: "User provided physical address",
486
- });
487
-
488
- // Step 3b: Online-only path
489
- const askOnlineLocation = askLocation.nextStep({
490
- instructions:
491
- "Perfect! Since it's online only, please share your main website or social media where customers can find you? And what are your support hours? (e.g., 'www.example.com - 24/7 support' or 'Instagram @mycompany - Mon to Fri: 9am-6pm')",
492
- condition: "User does not have a physical store",
493
- });
494
-
495
- const saveOnlineLocation = askOnlineLocation.nextStep({
496
- tool: saveContactInfo,
497
- condition: "User provided website/social media and support hours",
498
- });
499
-
500
- // Step 4: Contact info (convergence point for physical stores)
501
- const askContact = savePhysicalLocation.nextStep({
502
- instructions:
503
- "Do you also have a website or social media? If yes, which one? (if not, you can skip by saying 'I don't have one')",
504
- });
505
-
506
- const saveContact = askContact.nextStep({
507
- tool: saveContactInfo,
508
- condition: "User provided website/social media",
509
- });
510
-
511
- // Step 5: Payment info (convergence point from both paths)
512
- const askPayment = saveContact.nextStep({
513
- instructions:
514
- "Now about payment: do you sell products/services that customers pay for? If yes, what payment methods do you accept? If you accept Pix, provide the key and type (CPF, CNPJ, email, phone). Do you offer installments? (e.g., 'Pix CPF: 12345678900, Credit card up to 12x, Bank slip' - or say 'not applicable' if you don't sell)",
515
- });
516
-
517
- // Also connect online path to payment
518
- saveOnlineLocation.nextStep({ step: askPayment });
519
-
520
- const savePayment = askPayment.nextStep({
521
- tool: savePaymentInfo,
522
- condition: "User provided payment methods or said not applicable",
523
- });
524
-
525
- // Step 6: Suggest automatic routes
526
- const suggestRoutes = savePayment.nextStep({
527
- instructions:
528
- "Perfect! Now I'll create the essential routes. Based on what you told me, I'll automatically create:\n\n1. **Products and Services** - for when they ask what you offer\n2. **Pricing and Quotes** - for questions about prices\n3. **Payment Information** - payment methods and installments\n4. **Location and Contact** - address, website, and hours\n\nThese are the most important routes for any business. I'll create them automatically with the information you provided. Sound good?",
529
- });
530
-
531
- const createRoutes = suggestRoutes.nextStep({
532
- tool: addConversationRoute,
533
- condition: "User approved automatic route creation",
534
- });
535
-
536
- // Step 7: Review collected data
537
- const reviewData = createRoutes.nextStep({
538
- tool: getData,
539
- condition: "Routes created successfully",
540
- });
541
-
542
- // Step 8: Summary and options
543
- const summary = reviewData.nextStep({
544
- instructions:
545
- "Done! ✅ I've configured everything:\n\n✓ Business information\n✓ Products/services and target audience\n✓ Location and contact\n✓ Payment methods\n✓ Essential conversation routes\n\nYour assistant is ready! It will use this information to automatically respond when customers ask. Do you want to add any custom routes or is everything good?",
546
- });
547
-
548
- // Step 9a: Add more routes
549
- const askCustomRoute = summary.nextStep({
550
- instructions:
551
- "Got it! Tell me about this additional route: what's the title, what kind of questions should it answer, and what keywords do customers use? (e.g., 'Warranty and Exchange - answers about warranty, exchange, and returns - keywords: warranty, exchange, return')",
552
- condition: "User wants to add more routes",
553
- });
554
-
555
- const saveCustomRoute = askCustomRoute.nextStep({
556
- tool: addConversationRoute,
557
- condition: "User provided custom route information",
558
- });
559
-
560
- // Loop back to summary after adding custom route
561
- saveCustomRoute.nextStep({ step: summary });
562
-
563
- // Step 9b: Final confirmation - transition to END_ROUTE (uses route-level endStep)
564
- summary.nextStep({
565
- step: END_ROUTE,
566
- condition: "User confirmed everything is okay",
567
- });
568
-
569
- // ==================== Alternative: Sequential Steps ====================
570
- // For simpler linear flows, you can use the new sequential steps approach:
571
-
572
- // Example 1: Using steps array (NEW!)
573
- agent.createRoute({
574
- title: "Collect Feedback",
575
- description: "Quick feedback collection from completed onboarding",
576
- conditions: ["User wants to provide feedback"],
577
- steps: [
578
- {
579
- id: "ask_rating",
580
- instructions:
581
- "How would you rate your onboarding experience? (1-5 stars)",
582
- },
583
- {
584
- id: "ask_liked_most",
585
- instructions: "What did you like most about the process?",
586
- },
587
- {
588
- id: "ask_improve",
589
- instructions: "Is there anything we could improve?",
590
- },
591
- {
592
- id: "thank_you",
593
- instructions: "Thank you for your feedback! It helps us improve. 🙏",
594
- },
595
- ],
596
- });
597
-
598
- // Example 2: Traditional chaining approach (still supported)
599
- const manualFeedbackRoute = agent.createRoute({
600
- title: "Manual Feedback Route",
601
- description: "Same flow using traditional chaining",
602
- conditions: ["User wants manual feedback flow"],
603
- endStep: {
604
- instructions: "Thank you for your feedback! It helps us improve. 🙏",
605
- },
606
- });
607
-
608
- manualFeedbackRoute.initialStep
609
- .nextStep({
610
- id: "ask_rating",
611
- instructions:
612
- "How would you rate your onboarding experience? (1-5 stars)",
613
- })
614
- .nextStep({
615
- id: "ask_liked_most",
616
- instructions: "What did you like most about the process?",
617
- })
618
- .nextStep({
619
- id: "ask_improve",
620
- instructions: "Is there anything we could improve?",
621
- condition: "User wants to provide feedback",
622
- })
623
- .nextStep({ step: END_ROUTE }); // Uses route-level endStep
624
-
625
- // ==================== Global Guidelines ====================
626
-
627
- agent
628
- .createGuideline({
629
- id: "guideline_confused",
630
- condition: "User seems confused or doesn't understand something",
631
- action:
632
- "Be patient and provide practical examples of what you need. E.g., 'José Silva Street, 123, São Paulo - SP' for address",
633
- })
634
- .createGuideline({
635
- id: "guideline_incomplete",
636
- condition: "User provides incomplete or very vague information",
637
- action:
638
- "Politely ask for the missing specific details. E.g., 'You mentioned the address, but what's the city and step?'",
639
- })
640
- .createGuideline({
641
- id: "guideline_skip",
642
- condition:
643
- "User wants to skip information saying they don't have it or it doesn't apply",
644
- action:
645
- "Be smart: if the information is critical for their business type (e.g., address for physical store, website for e-commerce), explain the importance. If not critical, accept it and move forward saying 'no problem, that's fine'",
646
- })
647
- .createGuideline({
648
- id: "guideline_physical_online",
649
- condition: "User has physical store but said online-only or vice versa",
650
- action:
651
- "Adjust the flow dynamically: if they have a physical store, prioritize address and hours. If online-only, prioritize website/social media and digital support hours. Don't ask for irrelevant information",
652
- })
653
- .createGuideline({
654
- id: "guideline_why",
655
- condition: "User asks why they need to provide certain information",
656
- action:
657
- "Explain practically: 'This information will help your assistant automatically answer customers when they ask about this. E.g., when they ask about payment methods, the assistant will inform automatically'",
658
- })
659
- .createGuideline({
660
- id: "guideline_edit",
661
- condition:
662
- "User wants to edit or correct something they already provided",
663
- action:
664
- "Accept promptly and update the information: 'Of course! I'll update to...'. Use the appropriate tool to save the correction",
665
- })
666
- .createGuideline({
667
- id: "guideline_unrelated",
668
- condition: "User asks a question unrelated to onboarding",
669
- action:
670
- "Answer briefly and redirect: 'I understand, but let's finish the setup first? We're almost there!'",
671
- });
672
-
673
- return agent;
674
- }
675
-
676
- // ==================== Example Usage ====================
677
-
678
- async function main() {
679
- console.log("=".repeat(60));
680
- console.log("Business Onboarding Agent - Example");
681
- console.log("=".repeat(60));
682
-
683
- // Create agent with sample initial data
684
- const agent = await createBusinessOnboardingAgent(
685
- "user_123",
686
- "Alice",
687
- "session_456",
688
- {
689
- routes: [],
690
- // Optionally pre-populate some data:
691
- // business: {
692
- // businessName: "Alice's Boutique",
693
- // }
694
- }
695
- );
696
-
697
- console.log("\nAgent:", agent.name);
698
- console.log("Description:", agent.description);
699
- console.log("Routes:", agent.getRoutes().length);
700
- console.log("Guidelines:", agent.getGuidelines().length);
701
-
702
- // Print route structure
703
- console.log("\n" + "=".repeat(60));
704
- const routes = agent.getRoutes();
705
- for (const route of routes) {
706
- console.log("\n" + route.describe());
707
- }
708
-
709
- // Simulate a conversation
710
- console.log("\n" + "=".repeat(60));
711
- console.log("Conversation Simulation");
712
- console.log("=".repeat(60) + "\n");
713
-
714
- const history = [
715
- createMessageEvent(
716
- EventSource.CUSTOMER,
717
- "Alice",
718
- "Hi, I want to set up my assistant"
719
- ),
720
- ];
721
-
722
- // Generate response (requires valid API key)
723
- try {
724
- // Initialize session step for multi-turn conversation
725
- let session = createSession<OnboardingData>();
726
- agent.setCurrentSession(session);
727
-
728
- const response = await agent.respond({ history });
729
- console.log("Agent:", response.message);
730
- console.log("\nRoute:", response.session?.currentRoute?.title);
731
-
732
- // After the conversation, you can get the collected data
733
- const dataData = agent.getData<OnboardingData>();
734
- console.log("Data:", dataData);
735
-
736
- // Update session with progress
737
- session = response.session!;
738
-
739
- // You can also pass the session to the agent constructor
740
- // const agentWithSession = await createBusinessOnboardingAgent("user_123", "Alice", "session_456", {}, session);
741
- // const response2 = await agentWithSession.respond({ history });
742
-
743
- if (response.isRouteComplete) {
744
- console.log("\n✅ Onboarding route complete!");
745
- // Here you would typically save the complete data to your database
746
- await processOnboardingData(agent.getData());
747
- } else {
748
- console.log("\n⏳ Onboarding route in progress...");
749
- }
750
-
751
- console.log("\n✅ Session step benefits:");
752
- console.log(" - Data extraction tracked across turns");
753
- console.log(" - Step progression managed automatically");
754
- console.log(" - Always-on routing respects intent changes");
755
- } catch (error: any) {
756
- console.log("\n(Skipping AI response - requires valid API key)");
757
- console.log("Error:", error.message);
758
- }
759
- }
760
-
761
- /**
762
- * Mock function to process completed onboarding data
763
- * @param data - The complete onboarding data
764
- */
765
- async function processOnboardingData(data: Partial<OnboardingData>) {
766
- console.log("\n" + "=".repeat(60));
767
- console.log("🚀 Processing Completed Onboarding Data...");
768
- console.log("=".repeat(60));
769
- console.log("Received data:", JSON.stringify(data, null, 2));
770
-
771
- // Example: Save to a database
772
- console.log("\n💾 Saving to database...");
773
- await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate async operation
774
- console.log(" - Business Info:", data.business?.businessName);
775
- console.log(" - Contact Info:", data.contact?.website);
776
- console.log(" - Location Info:", data.location?.address);
777
-
778
- // Example: Triggering a welcome email
779
- console.log("\n📧 Sending welcome email...");
780
- await new Promise((resolve) => setTimeout(resolve, 1000));
781
- console.log(` - Email sent to user associated with the account.`);
782
-
783
- console.log("\n✨ Onboarding processing complete!");
784
- }
785
-
786
- // Run if executed directly
787
- if (import.meta.url === `file://${process.argv[1]}`) {
788
- main().catch(console.error);
789
- }
790
-
791
- export { createBusinessOnboardingAgent };