@falai/agent 0.1.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,503 @@
1
+ /**
2
+ * Example: Declarative Agent Configuration with Sequential Steps
3
+ *
4
+ * This example demonstrates how to configure an entire agent
5
+ * using declarative syntax in the constructor, including:
6
+ * - Terms (domain glossary)
7
+ * - Guidelines (behavior rules) with flexible ConditionTemplate patterns
8
+ * - Tools (capabilities)
9
+ * - Routes with data extraction schemas and sequential steps
10
+ * - Session management for multi-turn conversations
11
+ * - NEW: Flexible routing conditions with ConditionTemplate patterns:
12
+ * - String-only conditions: "user wants to book" (AI context only)
13
+ * - Function-only conditions: (ctx) => ctx.data?.hasPayment (programmatic only)
14
+ * - Mixed arrays: ["user wants to book", (ctx) => !ctx.data?.complete] (hybrid)
15
+ * - Route skipIf: Dynamic route exclusion based on conditions
16
+ * - Step skipIf: Enhanced conditional step skipping
17
+ */
18
+
19
+ import {
20
+ Agent,
21
+ GeminiProvider,
22
+ Tool,
23
+ ValidationError,
24
+ type Term,
25
+ type Guideline,
26
+ } from "../../src/index";
27
+
28
+ // Context type
29
+ interface HealthcareContext {
30
+ patientId: string;
31
+ patientName: string;
32
+ }
33
+
34
+ // Data extraction types
35
+ interface AppointmentData {
36
+ appointmentType: "checkup" | "consultation" | "followup";
37
+ preferredDate: string;
38
+ preferredTime: string;
39
+ symptoms?: string;
40
+ urgency: "low" | "medium" | "high";
41
+ }
42
+
43
+ interface LabData {
44
+ testType: string;
45
+ testDate: string;
46
+ resultsNeeded: boolean;
47
+ }
48
+
49
+ // Define tools using unified Tool interface
50
+ const getInsuranceProvidersTool: Tool<HealthcareContext, HealthcareData> = {
51
+ id: "healthcare_insurance_providers",
52
+ description: "Retrieves list of accepted insurance providers",
53
+ parameters: {
54
+ type: "object",
55
+ properties: {},
56
+ },
57
+ handler: async (context, args) => {
58
+ return {
59
+ data: "Available insurance providers: MegaCare Insurance, HealthFirst, WellnessPlus",
60
+ };
61
+ },
62
+ };
63
+
64
+ const getAvailableSlotsTool: Tool<HealthcareContext, HealthcareData> = {
65
+ id: "healthcare_available_slots",
66
+ description: "Gets available appointment slots",
67
+ parameters: {
68
+ type: "object",
69
+ properties: {},
70
+ },
71
+ handler: async (context, args) => {
72
+ return {
73
+ data: "Available slots: Oct 20 at 10:00 AM, Oct 20 at 2:00 PM, Oct 21 at 1:00 PM",
74
+ };
75
+ },
76
+ };
77
+
78
+ const getLabResultsTool: Tool<HealthcareContext, HealthcareData> = {
79
+ id: "healthcare_lab_results",
80
+ description: "Retrieves patient lab results",
81
+ parameters: {
82
+ type: "object",
83
+ properties: {},
84
+ },
85
+ handler: async (toolContext, args) => {
86
+ // Tools can access collected data and context
87
+ if (toolContext.data?.testType) {
88
+ return {
89
+ data: `${toolContext.data.testType} results for ${toolContext.context.patientName}: All values within normal range`,
90
+ };
91
+ }
92
+
93
+ return {
94
+ data: `Lab results for ${toolContext.context.patientName}: All values within normal range`,
95
+ };
96
+ },
97
+ };
98
+
99
+ const scheduleAppointmentTool: Tool<HealthcareContext, HealthcareData> = {
100
+ id: "healthcare_schedule_appointment",
101
+ description: "Schedules patient appointments",
102
+ parameters: {
103
+ type: "object",
104
+ properties: {},
105
+ },
106
+ handler: async (context, args) => {
107
+ // Tools access collected appointment data
108
+ if (!context.data?.preferredDate || !context.data?.preferredTime) {
109
+ return { data: "Please provide appointment details" };
110
+ }
111
+
112
+ return {
113
+ data: `Appointment scheduled for ${context.data.preferredDate} at ${context.data.preferredTime}`,
114
+ };
115
+ },
116
+ };
117
+
118
+ // Declarative configuration
119
+ const terms: Term<HealthcareContext>[] = [
120
+ {
121
+ name: "Office Phone Number",
122
+ description: "The phone number of our office, at +1-234-567-8900",
123
+ },
124
+ {
125
+ name: "Office Hours",
126
+ description: "Office hours are Monday to Friday, 9 AM to 5 PM",
127
+ },
128
+ {
129
+ name: "Dr. Charles Xavier",
130
+ description: ({ context }) =>
131
+ `Neurologist specializing in brain disorders for patient ${context?.patientName}`,
132
+ synonyms: ["Professor X", "Dr. Xavier"],
133
+ },
134
+ ];
135
+
136
+ const guidelines: Guideline<HealthcareContext>[] = [
137
+ {
138
+ // String-only condition for AI context
139
+ condition: "The patient asks about insurance",
140
+ action:
141
+ "List the insurance providers we accept and tell them to call the office for more details",
142
+ tags: ["insurance", "billing"],
143
+ },
144
+ {
145
+ // Mixed condition: AI context + programmatic check
146
+ condition: [
147
+ "The patient asks to talk to a human agent",
148
+ (ctx) => ctx.context?.patientName !== undefined // Only if we have patient info
149
+ ],
150
+ action: ({ context }: { context?: HealthcareContext }) =>
151
+ `Of course. You can reach our office at +1-234-567-8900 during office hours (Monday to Friday, 9 AM to 5 PM). I've noted that you'd like to speak with someone, and I can have a representative call you back if you'd like, ${context?.patientName}.`,
152
+ tags: ["escalation"],
153
+ },
154
+ {
155
+ // Function-only condition for programmatic logic
156
+ condition: (ctx) => {
157
+ const event = ctx.history?.[ctx.history.length - 1]
158
+ if(event && "content" in event){
159
+ const message = (event.content as string).toLocaleLowerCase() || '';
160
+ return !message.includes('health') && !message.includes('medical') && !message.includes('appointment');
161
+ }
162
+ return false
163
+ },
164
+ action:
165
+ "Kindly tell them you cannot assist with off-topic inquiries - do not engage",
166
+ tags: ["off-topic"],
167
+ },
168
+ ];
169
+
170
+ const routes = [
171
+ {
172
+ id: "route_schedule_appointment",
173
+ title: "Schedule Appointment",
174
+ description: "Helps the patient schedule an appointment",
175
+ // Mixed condition: AI context + programmatic check
176
+ when: [
177
+ "The patient wants to schedule an appointment",
178
+ (ctx) => !ctx.data?.orderId // Only if no existing order
179
+ ],
180
+ // Skip if patient already has urgent medical needs
181
+ skipIf: [
182
+ "patient has urgent medical emergency",
183
+ (ctx) => ctx.data?.urgency === "high"
184
+ ],
185
+ // NEW: Required fields for route completion (instead of schema)
186
+ requiredFields: ["appointmentType", "preferredDate", "preferredTime"],
187
+ // NEW: Optional fields that enhance the experience
188
+ optionalFields: ["symptoms", "urgency"],
189
+ guidelines: [
190
+ {
191
+ condition: "The patient says their visit is urgent",
192
+ action: "Tell them to call the office immediately",
193
+ tags: ["urgent"],
194
+ enabled: true,
195
+ },
196
+ ],
197
+ // Sequential steps for a linear booking flow
198
+ steps: [
199
+ {
200
+ id: "ask_appointment_type",
201
+ description: "Ask for appointment type",
202
+ prompt:
203
+ "What type of appointment do you need? (checkup, consultation, or followup)",
204
+ collect: ["appointmentType"],
205
+ },
206
+ {
207
+ id: "ask_date_time",
208
+ description: "Ask for preferred date and time",
209
+ prompt: "When would you like to come in?",
210
+ collect: ["preferredDate", "preferredTime"],
211
+ requires: ["appointmentType"], // Must have appointment type first
212
+ },
213
+ {
214
+ id: "ask_symptoms",
215
+ description: "Ask about symptoms",
216
+ prompt: "Are you experiencing any symptoms?",
217
+ collect: ["symptoms"],
218
+ // Mixed skipIf: AI context + programmatic logic
219
+ skipIf: [
220
+ "routine checkup doesn't need symptom details",
221
+ (data: Partial<HealthcareData>) => data.appointmentType === "checkup"
222
+ ],
223
+ },
224
+ {
225
+ id: "schedule_appointment",
226
+ description: "Schedule the appointment",
227
+ prompt: "I'll schedule your appointment now.",
228
+ tools: [scheduleAppointmentTool], // Inline tool - only available on this step
229
+ requires: ["preferredDate", "preferredTime"],
230
+ prepare: "healthcare_insurance_providers", // Reference by ID
231
+ finalize: "finalize_appointment", // Reference by ID - will be registered later
232
+ },
233
+ ],
234
+ tools: ["healthcare_available_slots"], // Reference by ID
235
+ },
236
+ {
237
+ id: "route_check_lab_results",
238
+ title: "Check Lab Results",
239
+ description: "Retrieves and explains patient lab results",
240
+ // Function-only condition for programmatic logic
241
+ when: (ctx) => {
242
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
243
+ return message.includes('lab') || message.includes('test') || message.includes('results');
244
+ },
245
+ // Skip if no patient ID available
246
+ skipIf: (ctx) => !ctx.context?.patientId,
247
+ // NEW: Required fields for route completion
248
+ requiredFields: ["testType"],
249
+ // NEW: Optional fields
250
+ optionalFields: ["testDate", "resultsNeeded"],
251
+ guidelines: [
252
+ {
253
+ condition: "The patient presses for more conclusions about results",
254
+ action:
255
+ "Assertively tell them they should call the office to speak with a doctor",
256
+ tags: ["escalation"],
257
+ },
258
+ ],
259
+ tools: ["healthcare_lab_results"], // Reference by ID
260
+ },
261
+ {
262
+ title: "General Healthcare Questions",
263
+ description: "Answer general healthcare questions",
264
+ // String-only condition for AI context
265
+ when: "Patient asks general healthcare questions",
266
+ // No required fields - conversational Q&A
267
+ },
268
+ ];
269
+
270
+ // Define a unified data schema for all healthcare interactions
271
+ interface HealthcareData extends AppointmentData, LabData {}
272
+
273
+ const healthcareSchema = {
274
+ type: "object",
275
+ properties: {
276
+ // Appointment fields
277
+ appointmentType: {
278
+ type: "string",
279
+ enum: ["checkup", "consultation", "followup"],
280
+ description: "Type of appointment needed",
281
+ },
282
+ preferredDate: {
283
+ type: "string",
284
+ description: "Preferred appointment date",
285
+ },
286
+ preferredTime: {
287
+ type: "string",
288
+ description: "Preferred appointment time",
289
+ },
290
+ symptoms: {
291
+ type: "string",
292
+ description: "Description of symptoms (if applicable)",
293
+ },
294
+ urgency: {
295
+ type: "string",
296
+ enum: ["low", "medium", "high"],
297
+ default: "medium",
298
+ },
299
+ // Lab fields
300
+ testType: {
301
+ type: "string",
302
+ description: "Type of lab test",
303
+ },
304
+ testDate: {
305
+ type: "string",
306
+ description: "Date of the lab test",
307
+ },
308
+ resultsNeeded: {
309
+ type: "boolean",
310
+ default: true,
311
+ description: "Whether detailed results are needed",
312
+ },
313
+ },
314
+ };
315
+
316
+ // Create the fully configured agent with agent-level schema
317
+ const agent = new Agent<HealthcareContext, HealthcareData>({
318
+ name: "HealthBot",
319
+ description: "A compassionate healthcare assistant",
320
+ goal: "Provide helpful information and assist with appointments",
321
+ context: {
322
+ patientId: "p_12345",
323
+ patientName: "Alice Johnson",
324
+ },
325
+ provider: new GeminiProvider({
326
+ apiKey: process.env.GEMINI_API_KEY || "demo-key",
327
+ model: "models/gemini-2.5-flash",
328
+ }),
329
+ // NEW: Agent-level schema
330
+ schema: healthcareSchema,
331
+ // Declarative initialization
332
+ terms,
333
+ guidelines,
334
+ // Enable debug logging
335
+ debug: true,
336
+ });
337
+
338
+ // Demonstrate different tool registration approaches
339
+
340
+ // Method 1: Register tools for ID-based reference in routes
341
+ // Note: scheduleAppointmentTool is NOT registered globally - it's only available on the specific step
342
+ agent.tool.registerMany([
343
+ getInsuranceProvidersTool,
344
+ getAvailableSlotsTool,
345
+ getLabResultsTool,
346
+ // scheduleAppointmentTool, // Commented out - will be added to specific step only
347
+ ]);
348
+
349
+ // Method 2: Create and register specialized tools
350
+ const appointmentValidator = agent.tool.createValidation({
351
+ id: "validate_appointment",
352
+ fields: ["appointmentType", "preferredDate", "preferredTime"] as const,
353
+ validator: async (context, data) => {
354
+ const errors: ValidationError[] = [];
355
+ if (!data.appointmentType) errors.push({
356
+ field: "appointmentType",
357
+ value: data.appointmentType,
358
+ message: "Appointment type is required",
359
+ schemaPath: "appointmentType"
360
+ });
361
+ if (!data.preferredDate) errors.push({
362
+ field: "preferredDate",
363
+ value: data.preferredDate,
364
+ message: "Preferred date is required",
365
+ schemaPath: "preferredDate"
366
+ });
367
+ if (!data.preferredTime) errors.push({
368
+ field: "preferredTime",
369
+ value: data.preferredTime,
370
+ message: "Preferred time is required",
371
+ schemaPath: "preferredTime"
372
+ });
373
+
374
+ return {
375
+ valid: errors.length === 0,
376
+ errors,
377
+ warnings: [],
378
+ };
379
+ },
380
+ });
381
+
382
+ // Method 3: Create data enrichment tool
383
+ const patientDataEnricher = agent.tool.createDataEnrichment({
384
+ id: "enrich_patient_data",
385
+ fields: ["appointmentType", "symptoms"] as const,
386
+ enricher: async (context, data) => {
387
+ // Add urgency classification based on symptoms - return fields that exist in HealthcareData
388
+ const urgentKeywords = ["chest pain", "difficulty breathing", "severe", "emergency"];
389
+ const hasUrgentSymptoms = data.symptoms && urgentKeywords.some(keyword =>
390
+ data.symptoms!.toLowerCase().includes(keyword)
391
+ );
392
+
393
+ return {
394
+ urgency: hasUrgentSymptoms ? "high" : "medium", // This matches the urgency field in HealthcareData
395
+ };
396
+ },
397
+ });
398
+
399
+ // Method 4: Create tool using tool.create()
400
+ const finalizeAppointmentTool = agent.tool.create({
401
+ id: "finalize_appointment",
402
+ description: "Complete the appointment booking process",
403
+ parameters: { type: "object", properties: {} },
404
+ handler: async (context, args) => {
405
+ console.log(`āœ… Appointment finalized for ${context.context.patientName}`);
406
+ console.log(`šŸ“… Details: ${JSON.stringify(context.data, null, 2)}`);
407
+
408
+ // Could send confirmation email, update calendar, etc.
409
+ return {
410
+ data: `Appointment confirmed for ${context.context.patientName}`,
411
+ };
412
+ },
413
+ });
414
+
415
+ // Add routes after tools are registered
416
+ routes.forEach((route: any) => {
417
+ agent.createRoute(route);
418
+ });
419
+
420
+ // You can still add more dynamically after construction
421
+ agent
422
+ .createGuideline({
423
+ condition: "The patient seems confused or distressed",
424
+ action: "Speak slowly, clearly, and offer to connect them with a human",
425
+ tags: ["empathy", "support"],
426
+ })
427
+ .createTerm({
428
+ name: "Telemedicine",
429
+ description: "Remote medical consultation via video call",
430
+ synonyms: ["virtual visit", "video appointment"],
431
+ });
432
+
433
+ // Example usage with session management
434
+
435
+ async function main() {
436
+ // Session is automatically managed by the agent
437
+ console.log("✨ Session ready:", agent.session.id);
438
+
439
+ // Turn 1 - Agent responds and routes to appropriate flow
440
+ console.log("šŸ”„ Turn 1: Initial inquiry");
441
+ const response1 = await agent.chat("Hi, I need to follow up on my recent visit");
442
+
443
+ console.log("šŸ¤– Agent:", response1.message);
444
+ console.log("šŸ›¤ļø Route chosen:", response1.session?.currentRoute?.title);
445
+
446
+ // Turn 2 - User provides more details
447
+ console.log("\nšŸ”„ Turn 2: Providing appointment details");
448
+ const response2 = await agent.chat("I need a checkup next Tuesday at 2 PM");
449
+
450
+ console.log("šŸ¤– Agent:", response2.message);
451
+ console.log("šŸ“Š Collected data:", agent.session.getData());
452
+ console.log("šŸ“ Current step:", response2.session?.currentStep?.id);
453
+
454
+ // Turn 3 - Continue the conversation flow
455
+ console.log("\nšŸ”„ Turn 3: Continuing appointment booking");
456
+ const response3 = await agent.chat("I'm feeling a bit anxious about the visit");
457
+
458
+ console.log("šŸ¤– Agent:", response3.message);
459
+ console.log("šŸ“Š Updated data:", agent.session.getData());
460
+ console.log("šŸ“ Current step:", response3.session?.currentStep?.id);
461
+
462
+ // Check for route completion
463
+ if (response3.isRouteComplete && response3.session) {
464
+ console.log("\nāœ… Appointment scheduling complete!");
465
+ await sendAppointmentConfirmation(
466
+ agent.getCollectedData() as HealthcareData
467
+ );
468
+ }
469
+
470
+ console.log("\nšŸ“‹ Session Summary:");
471
+ console.log(
472
+ "- Agent-level tools:",
473
+ agent.getTools().map((t) => t.id)
474
+ );
475
+ console.log(
476
+ "- Available routes:",
477
+ agent.getRoutes().map((r) => r.title)
478
+ );
479
+ console.log("- Agent guidelines:", agent.getGuidelines().length);
480
+ console.log("- Agent terms:", agent.getTerms().length);
481
+ }
482
+
483
+ /**
484
+ * Mock function to send an appointment confirmation.
485
+ * @param data - The healthcare data.
486
+ */
487
+ async function sendAppointmentConfirmation(data: HealthcareData) {
488
+ console.log("\n" + "=".repeat(60));
489
+ console.log("šŸš€ Sending Appointment Confirmation...");
490
+ console.log("=".repeat(60));
491
+ console.log("Appointment Details:", JSON.stringify(data, null, 2));
492
+ console.log(
493
+ ` - Confirmation sent for ${data.preferredDate} at ${data.preferredTime}`
494
+ );
495
+ await new Promise((resolve) => setTimeout(resolve, 500));
496
+ console.log("✨ Confirmation delivered!");
497
+ }
498
+
499
+ export { agent };
500
+
501
+ if (import.meta.url === `file://${process.argv[1]}`) {
502
+ main().catch(console.error);
503
+ }