@falai/agent 1.2.7 → 2.0.0

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 (508) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1196 -1015
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +524 -134
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/GeminiProvider.d.ts +3 -3
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +16 -14
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/types/agent.d.ts +183 -54
  130. package/dist/cjs/types/agent.d.ts.map +1 -1
  131. package/dist/cjs/types/agent.js +0 -6
  132. package/dist/cjs/types/agent.js.map +1 -1
  133. package/dist/cjs/types/ai.d.ts +3 -3
  134. package/dist/cjs/types/ai.d.ts.map +1 -1
  135. package/dist/cjs/types/errors.d.ts +15 -0
  136. package/dist/cjs/types/errors.d.ts.map +1 -0
  137. package/dist/cjs/types/errors.js +22 -0
  138. package/dist/cjs/types/errors.js.map +1 -0
  139. package/dist/cjs/types/flow.d.ts +513 -0
  140. package/dist/cjs/types/flow.d.ts.map +1 -0
  141. package/dist/cjs/types/{route.js → flow.js} +2 -2
  142. package/dist/cjs/types/flow.js.map +1 -0
  143. package/dist/cjs/types/index.d.ts +7 -6
  144. package/dist/cjs/types/index.d.ts.map +1 -1
  145. package/dist/cjs/types/index.js +6 -2
  146. package/dist/cjs/types/index.js.map +1 -1
  147. package/dist/cjs/types/persistence.d.ts +11 -7
  148. package/dist/cjs/types/persistence.d.ts.map +1 -1
  149. package/dist/cjs/types/routing.d.ts +1 -1
  150. package/dist/cjs/types/routing.d.ts.map +1 -1
  151. package/dist/cjs/types/session.d.ts +24 -23
  152. package/dist/cjs/types/session.d.ts.map +1 -1
  153. package/dist/cjs/types/signals.d.ts +248 -0
  154. package/dist/cjs/types/signals.d.ts.map +1 -0
  155. package/dist/cjs/types/signals.js +11 -0
  156. package/dist/cjs/types/signals.js.map +1 -0
  157. package/dist/cjs/types/template.d.ts +2 -8
  158. package/dist/cjs/types/template.d.ts.map +1 -1
  159. package/dist/cjs/types/tool.d.ts +36 -29
  160. package/dist/cjs/types/tool.d.ts.map +1 -1
  161. package/dist/cjs/types/tool.js +1 -1
  162. package/dist/cjs/types/tool.js.map +1 -1
  163. package/dist/cjs/utils/condition.d.ts +7 -1
  164. package/dist/cjs/utils/condition.d.ts.map +1 -1
  165. package/dist/cjs/utils/condition.js.map +1 -1
  166. package/dist/cjs/utils/id.d.ts +13 -5
  167. package/dist/cjs/utils/id.d.ts.map +1 -1
  168. package/dist/cjs/utils/id.js +24 -10
  169. package/dist/cjs/utils/id.js.map +1 -1
  170. package/dist/cjs/utils/index.d.ts +2 -2
  171. package/dist/cjs/utils/index.d.ts.map +1 -1
  172. package/dist/cjs/utils/index.js +7 -3
  173. package/dist/cjs/utils/index.js.map +1 -1
  174. package/dist/cjs/utils/session.d.ts +44 -5
  175. package/dist/cjs/utils/session.d.ts.map +1 -1
  176. package/dist/cjs/utils/session.js +197 -38
  177. package/dist/cjs/utils/session.js.map +1 -1
  178. package/dist/constants/index.d.ts +0 -9
  179. package/dist/constants/index.d.ts.map +1 -1
  180. package/dist/constants/index.js +3 -9
  181. package/dist/constants/index.js.map +1 -1
  182. package/dist/core/Agent.d.ts +119 -153
  183. package/dist/core/Agent.d.ts.map +1 -1
  184. package/dist/core/Agent.js +472 -325
  185. package/dist/core/Agent.js.map +1 -1
  186. package/dist/core/AutoChainExecutor.d.ts +107 -0
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  188. package/dist/core/AutoChainExecutor.js +293 -0
  189. package/dist/core/AutoChainExecutor.js.map +1 -0
  190. package/dist/core/BranchEvaluator.d.ts +54 -0
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  192. package/dist/core/BranchEvaluator.js +126 -0
  193. package/dist/core/BranchEvaluator.js.map +1 -0
  194. package/dist/core/DirectiveBus.d.ts +88 -0
  195. package/dist/core/DirectiveBus.d.ts.map +1 -0
  196. package/dist/core/DirectiveBus.js +192 -0
  197. package/dist/core/DirectiveBus.js.map +1 -0
  198. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  199. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  200. package/dist/core/DirectiveChainTracker.js +117 -0
  201. package/dist/core/DirectiveChainTracker.js.map +1 -0
  202. package/dist/core/Flow.d.ts +186 -0
  203. package/dist/core/Flow.d.ts.map +1 -0
  204. package/dist/core/Flow.js +546 -0
  205. package/dist/core/Flow.js.map +1 -0
  206. package/dist/core/FlowRouter.d.ts +182 -0
  207. package/dist/core/FlowRouter.d.ts.map +1 -0
  208. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  209. package/dist/core/FlowRouter.js.map +1 -0
  210. package/dist/core/PersistenceManager.d.ts +2 -2
  211. package/dist/core/PersistenceManager.d.ts.map +1 -1
  212. package/dist/core/PersistenceManager.js +7 -7
  213. package/dist/core/PersistenceManager.js.map +1 -1
  214. package/dist/core/PromptComposer.d.ts +21 -8
  215. package/dist/core/PromptComposer.d.ts.map +1 -1
  216. package/dist/core/PromptComposer.js +183 -106
  217. package/dist/core/PromptComposer.js.map +1 -1
  218. package/dist/core/PromptSectionCache.d.ts +1 -1
  219. package/dist/core/PromptSectionCache.js +1 -1
  220. package/dist/core/ResponseEngine.d.ts +18 -8
  221. package/dist/core/ResponseEngine.d.ts.map +1 -1
  222. package/dist/core/ResponseEngine.js +38 -36
  223. package/dist/core/ResponseEngine.js.map +1 -1
  224. package/dist/core/ResponseModal.d.ts +73 -56
  225. package/dist/core/ResponseModal.d.ts.map +1 -1
  226. package/dist/core/ResponseModal.js +1198 -1017
  227. package/dist/core/ResponseModal.js.map +1 -1
  228. package/dist/core/ResponsePipeline.d.ts +124 -26
  229. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  230. package/dist/core/ResponsePipeline.js +524 -135
  231. package/dist/core/ResponsePipeline.js.map +1 -1
  232. package/dist/core/SignalEvaluator.d.ts +86 -0
  233. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  234. package/dist/core/SignalEvaluator.js +326 -0
  235. package/dist/core/SignalEvaluator.js.map +1 -0
  236. package/dist/core/SignalProcessor.d.ts +152 -0
  237. package/dist/core/SignalProcessor.d.ts.map +1 -0
  238. package/dist/core/SignalProcessor.js +555 -0
  239. package/dist/core/SignalProcessor.js.map +1 -0
  240. package/dist/core/Step.d.ts +43 -32
  241. package/dist/core/Step.d.ts.map +1 -1
  242. package/dist/core/Step.js +220 -126
  243. package/dist/core/Step.js.map +1 -1
  244. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  245. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  246. package/dist/core/StreamingToolExecutor.js.map +1 -1
  247. package/dist/core/ToolManager.d.ts +44 -13
  248. package/dist/core/ToolManager.d.ts.map +1 -1
  249. package/dist/core/ToolManager.js +174 -91
  250. package/dist/core/ToolManager.js.map +1 -1
  251. package/dist/core/createAgent.d.ts +35 -0
  252. package/dist/core/createAgent.d.ts.map +1 -0
  253. package/dist/core/createAgent.js +36 -0
  254. package/dist/core/createAgent.js.map +1 -0
  255. package/dist/core/flow-namespace.d.ts +49 -0
  256. package/dist/core/flow-namespace.d.ts.map +1 -0
  257. package/dist/core/flow-namespace.js +168 -0
  258. package/dist/core/flow-namespace.js.map +1 -0
  259. package/dist/index.d.ts +11 -14
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +9 -12
  262. package/dist/index.js.map +1 -1
  263. package/dist/providers/GeminiProvider.d.ts +3 -3
  264. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  265. package/dist/providers/GeminiProvider.js +16 -14
  266. package/dist/providers/GeminiProvider.js.map +1 -1
  267. package/dist/types/agent.d.ts +183 -54
  268. package/dist/types/agent.d.ts.map +1 -1
  269. package/dist/types/agent.js +0 -6
  270. package/dist/types/agent.js.map +1 -1
  271. package/dist/types/ai.d.ts +3 -3
  272. package/dist/types/ai.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +15 -0
  274. package/dist/types/errors.d.ts.map +1 -0
  275. package/dist/types/errors.js +18 -0
  276. package/dist/types/errors.js.map +1 -0
  277. package/dist/types/flow.d.ts +513 -0
  278. package/dist/types/flow.d.ts.map +1 -0
  279. package/dist/types/flow.js +5 -0
  280. package/dist/types/flow.js.map +1 -0
  281. package/dist/types/index.d.ts +7 -6
  282. package/dist/types/index.d.ts.map +1 -1
  283. package/dist/types/index.js +4 -1
  284. package/dist/types/index.js.map +1 -1
  285. package/dist/types/persistence.d.ts +11 -7
  286. package/dist/types/persistence.d.ts.map +1 -1
  287. package/dist/types/routing.d.ts +1 -1
  288. package/dist/types/routing.d.ts.map +1 -1
  289. package/dist/types/session.d.ts +24 -23
  290. package/dist/types/session.d.ts.map +1 -1
  291. package/dist/types/signals.d.ts +248 -0
  292. package/dist/types/signals.d.ts.map +1 -0
  293. package/dist/types/signals.js +10 -0
  294. package/dist/types/signals.js.map +1 -0
  295. package/dist/types/template.d.ts +2 -8
  296. package/dist/types/template.d.ts.map +1 -1
  297. package/dist/types/tool.d.ts +36 -29
  298. package/dist/types/tool.d.ts.map +1 -1
  299. package/dist/types/tool.js +1 -1
  300. package/dist/types/tool.js.map +1 -1
  301. package/dist/utils/condition.d.ts +7 -1
  302. package/dist/utils/condition.d.ts.map +1 -1
  303. package/dist/utils/condition.js.map +1 -1
  304. package/dist/utils/id.d.ts +13 -5
  305. package/dist/utils/id.d.ts.map +1 -1
  306. package/dist/utils/id.js +22 -9
  307. package/dist/utils/id.js.map +1 -1
  308. package/dist/utils/index.d.ts +2 -2
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +2 -2
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/session.d.ts +44 -5
  313. package/dist/utils/session.d.ts.map +1 -1
  314. package/dist/utils/session.js +193 -37
  315. package/dist/utils/session.js.map +1 -1
  316. package/docs/README.md +15 -202
  317. package/docs/concepts/architecture.md +281 -0
  318. package/docs/concepts/directives.md +400 -0
  319. package/docs/concepts/pipeline.md +399 -0
  320. package/docs/guides/branching.md +263 -0
  321. package/docs/guides/compaction.md +163 -0
  322. package/docs/guides/conditions.md +167 -0
  323. package/docs/guides/error-handling.md +176 -0
  324. package/docs/guides/flow-control.md +409 -0
  325. package/docs/guides/instructions.md +210 -0
  326. package/docs/guides/persistence.md +182 -0
  327. package/docs/guides/streaming.md +137 -0
  328. package/docs/migration/README.md +15 -0
  329. package/docs/migration/route-to-flow.md +560 -0
  330. package/docs/migration/v1-to-v2.md +909 -0
  331. package/docs/reference/adapters.md +481 -0
  332. package/docs/reference/branches.md +241 -0
  333. package/docs/reference/create-agent.md +186 -0
  334. package/docs/reference/directive.md +243 -0
  335. package/docs/reference/errors.md +122 -0
  336. package/docs/reference/flow.md +238 -0
  337. package/docs/reference/instruction.md +177 -0
  338. package/docs/reference/pre-directive.md +131 -0
  339. package/docs/reference/providers.md +227 -0
  340. package/docs/reference/signals.md +356 -0
  341. package/docs/reference/step.md +339 -0
  342. package/docs/reference/tool.md +269 -0
  343. package/docs/start/01-install.md +81 -0
  344. package/docs/start/02-first-agent.md +196 -0
  345. package/docs/start/03-collect-data.md +222 -0
  346. package/docs/start/04-add-tools.md +276 -0
  347. package/docs/start/05-go-to-production.md +216 -0
  348. package/examples/01-quickstart.ts +20 -0
  349. package/examples/02-data-extraction.ts +90 -0
  350. package/examples/03-tools.ts +136 -0
  351. package/examples/04-instructions.ts +100 -0
  352. package/examples/05-branching.ts +140 -0
  353. package/examples/06-flow-control.ts +103 -0
  354. package/examples/07-streaming.ts +69 -0
  355. package/examples/08-persistence.ts +98 -0
  356. package/examples/09-signals.ts +144 -0
  357. package/examples/tsconfig.json +30 -0
  358. package/package.json +2 -1
  359. package/src/adapters/MemoryAdapter.ts +3 -3
  360. package/src/adapters/MongoAdapter.ts +3 -3
  361. package/src/adapters/OpenSearchAdapter.ts +10 -8
  362. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  363. package/src/adapters/PrismaAdapter.ts +6 -6
  364. package/src/adapters/RedisAdapter.ts +3 -3
  365. package/src/adapters/SQLiteAdapter.ts +31 -12
  366. package/src/constants/index.ts +2 -10
  367. package/src/core/Agent.ts +585 -374
  368. package/src/core/AutoChainExecutor.ts +440 -0
  369. package/src/core/BranchEvaluator.ts +167 -0
  370. package/src/core/DirectiveBus.ts +248 -0
  371. package/src/core/DirectiveChainTracker.ts +144 -0
  372. package/src/core/Flow.ts +666 -0
  373. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  374. package/src/core/PersistenceManager.ts +8 -8
  375. package/src/core/PromptComposer.ts +209 -140
  376. package/src/core/PromptSectionCache.ts +1 -1
  377. package/src/core/ResponseEngine.ts +61 -46
  378. package/src/core/ResponseModal.ts +1458 -1241
  379. package/src/core/ResponsePipeline.ts +675 -173
  380. package/src/core/SignalEvaluator.ts +420 -0
  381. package/src/core/SignalProcessor.ts +723 -0
  382. package/src/core/Step.ts +279 -176
  383. package/src/core/StreamingToolExecutor.ts +4 -4
  384. package/src/core/ToolManager.ts +200 -97
  385. package/src/core/createAgent.ts +40 -0
  386. package/src/core/flow-namespace.ts +219 -0
  387. package/src/index.ts +42 -36
  388. package/src/providers/GeminiProvider.ts +17 -15
  389. package/src/types/agent.ts +182 -53
  390. package/src/types/ai.ts +3 -3
  391. package/src/types/errors.ts +18 -0
  392. package/src/types/flow.ts +590 -0
  393. package/src/types/index.ts +43 -16
  394. package/src/types/persistence.ts +12 -8
  395. package/src/types/routing.ts +1 -1
  396. package/src/types/session.ts +26 -23
  397. package/src/types/signals.ts +321 -0
  398. package/src/types/template.ts +3 -11
  399. package/src/types/tool.ts +50 -42
  400. package/src/utils/condition.ts +13 -4
  401. package/src/utils/id.ts +27 -9
  402. package/src/utils/index.ts +6 -2
  403. package/src/utils/session.ts +238 -42
  404. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  405. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  406. package/dist/cjs/core/BatchExecutor.js +0 -861
  407. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  408. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  409. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  410. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  411. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  412. package/dist/cjs/core/Route.d.ts +0 -180
  413. package/dist/cjs/core/Route.d.ts.map +0 -1
  414. package/dist/cjs/core/Route.js +0 -542
  415. package/dist/cjs/core/Route.js.map +0 -1
  416. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  417. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  418. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  419. package/dist/cjs/types/route.d.ts +0 -336
  420. package/dist/cjs/types/route.d.ts.map +0 -1
  421. package/dist/cjs/types/route.js.map +0 -1
  422. package/dist/core/BatchExecutor.d.ts +0 -359
  423. package/dist/core/BatchExecutor.d.ts.map +0 -1
  424. package/dist/core/BatchExecutor.js +0 -856
  425. package/dist/core/BatchExecutor.js.map +0 -1
  426. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  427. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  428. package/dist/core/BatchPromptBuilder.js +0 -219
  429. package/dist/core/BatchPromptBuilder.js.map +0 -1
  430. package/dist/core/Route.d.ts +0 -180
  431. package/dist/core/Route.d.ts.map +0 -1
  432. package/dist/core/Route.js +0 -538
  433. package/dist/core/Route.js.map +0 -1
  434. package/dist/core/RoutingEngine.d.ts +0 -185
  435. package/dist/core/RoutingEngine.d.ts.map +0 -1
  436. package/dist/core/RoutingEngine.js.map +0 -1
  437. package/dist/types/route.d.ts +0 -336
  438. package/dist/types/route.d.ts.map +0 -1
  439. package/dist/types/route.js +0 -5
  440. package/dist/types/route.js.map +0 -1
  441. package/docs/CONTRIBUTING.md +0 -521
  442. package/docs/api/README.md +0 -3299
  443. package/docs/api/overview.md +0 -1410
  444. package/docs/architecture/data-extraction-flow.md +0 -360
  445. package/docs/architecture/multi-step-execution.md +0 -277
  446. package/docs/core/agent/README.md +0 -938
  447. package/docs/core/agent/context-management.md +0 -796
  448. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  449. package/docs/core/agent/session-management.md +0 -693
  450. package/docs/core/ai-integration/prompt-composition.md +0 -355
  451. package/docs/core/ai-integration/providers.md +0 -515
  452. package/docs/core/ai-integration/response-processing.md +0 -433
  453. package/docs/core/conversation-flows/data-collection.md +0 -772
  454. package/docs/core/conversation-flows/route-dsl.md +0 -509
  455. package/docs/core/conversation-flows/routes.md +0 -249
  456. package/docs/core/conversation-flows/step-transitions.md +0 -731
  457. package/docs/core/conversation-flows/steps.md +0 -268
  458. package/docs/core/error-handling.md +0 -830
  459. package/docs/core/persistence/adapters.md +0 -255
  460. package/docs/core/persistence/session-storage.md +0 -656
  461. package/docs/core/routing/intelligent-routing.md +0 -470
  462. package/docs/core/tools/enhanced-tool.md +0 -186
  463. package/docs/core/tools/streaming-execution.md +0 -161
  464. package/docs/core/tools/tool-definition.md +0 -970
  465. package/docs/core/tools/tool-scoping.md +0 -819
  466. package/docs/guides/advanced-patterns/publishing.md +0 -186
  467. package/docs/guides/context-compaction.md +0 -96
  468. package/docs/guides/error-handling-patterns.md +0 -578
  469. package/docs/guides/getting-started/README.md +0 -795
  470. package/docs/guides/migration/README.md +0 -101
  471. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  472. package/docs/guides/migration/multi-step-execution.md +0 -393
  473. package/docs/guides/migration/response-modal-refactor.md +0 -518
  474. package/docs/guides/prompt-optimization.md +0 -164
  475. package/examples/advanced-patterns/context-compaction.ts +0 -223
  476. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  477. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  478. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  479. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  480. package/examples/ai-providers/anthropic-integration.ts +0 -388
  481. package/examples/ai-providers/openai-integration.ts +0 -228
  482. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  483. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  484. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  485. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  486. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  487. package/examples/conversation-flows/completion-transitions.ts +0 -318
  488. package/examples/core-concepts/basic-agent.ts +0 -503
  489. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  490. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  491. package/examples/core-concepts/session-management.ts +0 -494
  492. package/examples/integrations/database-integration.ts +0 -631
  493. package/examples/integrations/healthcare-integration.ts +0 -595
  494. package/examples/integrations/search-integration.ts +0 -530
  495. package/examples/integrations/server-session-management.ts +0 -307
  496. package/examples/persistence/custom-adapter.ts +0 -526
  497. package/examples/persistence/database-persistence.ts +0 -583
  498. package/examples/persistence/memory-sessions.ts +0 -495
  499. package/examples/persistence/prisma-schema.example.prisma +0 -74
  500. package/examples/persistence/redis-persistence.ts +0 -488
  501. package/examples/tools/basic-tools.ts +0 -765
  502. package/examples/tools/data-enrichment-tools.ts +0 -593
  503. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  504. package/examples/tools/streaming-tool-execution.ts +0 -283
  505. package/src/core/BatchExecutor.ts +0 -1187
  506. package/src/core/BatchPromptBuilder.ts +0 -299
  507. package/src/core/Route.ts +0 -678
  508. package/src/types/route.ts +0 -392
@@ -1,503 +0,0 @@
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
- }