@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,595 +0,0 @@
1
- /**
2
- * Healthcare agent example demonstrating route-based
3
- * Updated for v2 architecture with session step management and schema-first data extraction
4
- */
5
-
6
- import {
7
- Agent,
8
- type Tool,
9
- AnthropicProvider,
10
- END_ROUTE,
11
- } from "../../src";
12
-
13
- // Context type
14
- interface HealthcareContext {
15
- patientId: string;
16
- patientName: string;
17
- }
18
-
19
- // Data extraction types for healthcare scenarios
20
- interface AppointmentData {
21
- appointmentReason?: string;
22
- urgency?: "low" | "medium" | "high";
23
- preferredTime?: string;
24
- preferredDate?: string;
25
- appointmentType?: "checkup" | "consultation" | "followup";
26
- }
27
-
28
- interface LabResultsData {
29
- testType?: string;
30
- testDate?: string;
31
- resultsNeeded?: boolean;
32
- }
33
-
34
- interface SatisfactionData {
35
- rating?: number;
36
- easeOfScheduling?: number;
37
- comments?: string;
38
- }
39
-
40
- // Tools
41
-
42
- const getUpcomingSlots: Tool<HealthcareContext, HealthcareData> = {
43
- id: "get_upcoming_slots",
44
- name: "Available Appointment Slots",
45
- description: "Get upcoming appointment slots",
46
- parameters: {
47
- type: "object",
48
- properties: {},
49
- },
50
- handler: (context, args) => {
51
- return { data: "Available slots: Monday 10 AM, Tuesday 2 PM, Wednesday 1 PM" };
52
- },
53
- };
54
-
55
- const getLaterSlots: Tool<HealthcareContext, HealthcareData> = {
56
- id: "get_later_slots",
57
- name: "Extended Appointment Slots",
58
- description: "Get later appointment slots",
59
- parameters: {
60
- type: "object",
61
- properties: {},
62
- },
63
- handler: (context, args) => {
64
- return { data: "Later slots: November 3, 11:30 AM, November 12, 3 PM" };
65
- },
66
- };
67
-
68
- const scheduleAppointment: Tool<HealthcareContext, HealthcareData> = {
69
- id: "schedule_appointment",
70
- name: "Appointment Scheduler",
71
- description: "Schedule an appointment with a healthcare provider",
72
- parameters: {
73
- type: "object",
74
- properties: {
75
- datetime: { type: "string", description: "Appointment date and time" },
76
- },
77
- required: ["datetime"],
78
- },
79
- handler: (context, args) => {
80
- if (!context.data?.preferredDate || !context.data?.preferredTime) {
81
- return {
82
- data: "Please specify preferred date and time for the appointment",
83
- };
84
- }
85
- return {
86
- data: `Appointment scheduled for ${context.data.preferredDate} at ${
87
- context.data.preferredTime
88
- } for ${context.data.appointmentReason || "consultation"}`,
89
- };
90
- },
91
- };
92
-
93
- const getLabResults: Tool<HealthcareContext, HealthcareData> = {
94
- id: "get_lab_results",
95
- name: "Lab Results Retriever",
96
- description: "Get lab test results",
97
- parameters: {
98
- type: "object",
99
- properties: {},
100
- },
101
- handler: (context, args) => {
102
- return {
103
- data: `Lab results for ${context.data?.testType || "general"} tests: All tests are within the valid range for ${context.context.patientName}`,
104
- };
105
- },
106
- };
107
-
108
- // Define unified healthcare data schema
109
- interface HealthcareData extends AppointmentData, LabResultsData, SatisfactionData {}
110
-
111
- const healthcareSchema = {
112
- type: "object",
113
- properties: {
114
- // Appointment fields
115
- appointmentReason: {
116
- type: "string",
117
- description: "Reason for the appointment",
118
- },
119
- urgency: {
120
- type: "string",
121
- enum: ["low", "medium", "high"],
122
- default: "medium",
123
- },
124
- preferredTime: {
125
- type: "string",
126
- description: "Preferred time slot",
127
- },
128
- preferredDate: {
129
- type: "string",
130
- description: "Preferred date",
131
- },
132
- appointmentType: {
133
- type: "string",
134
- enum: ["checkup", "consultation", "followup"],
135
- default: "consultation",
136
- },
137
- // Lab results fields
138
- testType: {
139
- type: "string",
140
- description: "Type of lab test",
141
- },
142
- testDate: {
143
- type: "string",
144
- description: "Date of the lab test",
145
- },
146
- resultsNeeded: {
147
- type: "boolean",
148
- default: true,
149
- description: "Whether detailed results are needed",
150
- },
151
- // Satisfaction fields
152
- rating: {
153
- type: "number",
154
- description: "Overall satisfaction rating 1-5",
155
- },
156
- easeOfScheduling: {
157
- type: "number",
158
- description: "Ease of scheduling process 1-5",
159
- },
160
- comments: {
161
- type: "string",
162
- description: "Optional feedback comments",
163
- },
164
- },
165
- };
166
-
167
- function createHealthcareAgent() {
168
- const provider = new AnthropicProvider({
169
- apiKey: process.env.ANTHROPIC_API_KEY || "test-key",
170
- model: "claude-sonnet-4-5",
171
- });
172
-
173
- const agent = new Agent<HealthcareContext, HealthcareData>({
174
- name: "Healthcare Agent",
175
- description: "Is empathetic and calming to the patient.",
176
- identity:
177
- "I am the Healthcare Agent, a compassionate AI assistant dedicated to providing excellent patient care. With deep knowledge of medical procedures and a focus on patient comfort, I'm here to help you navigate your healthcare journey with empathy and expertise.",
178
- provider: provider,
179
- // NEW: Agent-level schema
180
- schema: healthcareSchema,
181
-
182
- // Knowledge base with healthcare-specific information
183
- knowledgeBase: {
184
- medicalProcedures: {
185
- checkup: {
186
- duration: "30 minutes",
187
- preparation: "No special preparation needed",
188
- frequency: "Annual or as recommended by doctor",
189
- },
190
- consultation: {
191
- duration: "45-60 minutes",
192
- preparation: "Bring medical history and current medications",
193
- frequency: "As needed",
194
- },
195
- followup: {
196
- duration: "15-30 minutes",
197
- preparation: "Review previous visit notes",
198
- frequency: "2-4 weeks after initial treatment",
199
- },
200
- },
201
- insurancePolicies: {
202
- acceptedProviders: ["Mega Insurance", "Acme Insurance", "Blue Cross"],
203
- coverageTypes: ["HMO", "PPO", "Medicare"],
204
- requirements: {
205
- referral: "Required for specialist visits",
206
- copay: "$25 per visit",
207
- deductible: "$500 annual",
208
- },
209
- },
210
- emergencyGuidelines: [
211
- "Call 911 for life-threatening emergencies",
212
- "Go to nearest ER for severe symptoms",
213
- "Contact office for urgent but non-life-threatening issues",
214
- "Use telemedicine for minor concerns during office hours",
215
- ],
216
- patientResources: {
217
- patientPortal: "Available 24/7 for appointments and records",
218
- educationalMaterials: "Available in English, Spanish, and Portuguese",
219
- supportGroups: "Weekly sessions for chronic conditions",
220
- },
221
- },
222
- context: {
223
- patientId: "patient-123",
224
- patientName: "Test Patient",
225
- },
226
- });
227
-
228
- // Add domain glossary
229
- agent.createTerm({
230
- name: "Office Phone Number",
231
- description: "The phone number of our office, at +1-234-567-8900",
232
- });
233
-
234
- agent.createTerm({
235
- name: "Office Hours",
236
- description: "Office hours are Monday to Friday, 9 AM to 5 PM",
237
- });
238
-
239
- agent.createTerm({
240
- name: "Charles Xavier",
241
- synonyms: ["Professor X"],
242
- description:
243
- "The doctor who specializes in neurology and is available on Mondays and Tuesdays.",
244
- });
245
-
246
- // Create scheduling route with data extraction schema
247
- // NEW: Added onComplete to automatically transition to satisfaction survey after booking
248
- const schedulingRoute = agent.createRoute({
249
- title: "Schedule an Appointment",
250
- description: "Helps the patient find a time for their appointment.",
251
- when: ["The patient wants to schedule an appointment"],
252
- // Route-level identity for healthcare scheduling
253
- identity:
254
- "You are a compassionate healthcare scheduling assistant who helps patients book appointments. Be empathetic, prioritize urgent cases, and ensure patients feel supported throughout the process.",
255
- // Healthcare-specific terms
256
- terms: [
257
- {
258
- name: "HIPAA",
259
- description:
260
- "Health Insurance Portability and Accountability Act - protects patient privacy and medical records",
261
- },
262
- {
263
- name: "PHI",
264
- description:
265
- "Protected Health Information - any medical data that can identify a patient",
266
- },
267
- {
268
- name: "Telemedicine",
269
- description: "Remote healthcare consultation via video call or phone",
270
- },
271
- ],
272
- // NEW: Required fields for route completion
273
- requiredFields: ["appointmentReason"],
274
- // NEW: Optional fields that enhance the experience
275
- optionalFields: ["urgency", "preferredTime", "preferredDate", "appointmentType"],
276
- // NEW: Automatically collect feedback after successful scheduling
277
- onComplete: "Satisfaction Survey",
278
- });
279
-
280
- // Step 1: Collect appointment reason
281
- const collectReason = schedulingRoute.initialStep.nextStep({
282
- prompt: "Ask what the patient needs an appointment for",
283
- collect: ["appointmentReason"],
284
- skipIf: (ctx) => !!ctx.data?.appointmentReason,
285
- when: "Patient hasn't specified reason for appointment yet",
286
- });
287
-
288
- // Step 2: Check urgency and show available slots
289
- const checkUrgency = collectReason.nextStep({
290
- prompt: "Check if this is urgent and show available slots",
291
- collect: ["urgency"],
292
- skipIf: (ctx) => !!ctx.data?.urgency,
293
- requires: ["appointmentReason"],
294
- when: "Reason provided, now assess urgency level",
295
- });
296
-
297
- const showSlots = checkUrgency.nextStep({
298
- tools: [getUpcomingSlots],
299
- });
300
-
301
- // Step 3: Present available times
302
- const presentTimes = showSlots.nextStep({
303
- prompt: "List available times and ask which one works for them",
304
- });
305
-
306
- // Step 4: Collect preferred time and date
307
- const collectPreferences = presentTimes.nextStep({
308
- prompt: "Collect preferred time and date",
309
- collect: ["preferredTime", "preferredDate"],
310
- skipIf: (ctx) => !!ctx.data?.preferredTime && !!ctx.data?.preferredDate,
311
- });
312
-
313
- // Step 5: Confirm details and schedule
314
- const confirmDetails = collectPreferences.nextStep({
315
- prompt: "Confirm the details with the patient before scheduling",
316
- collect: ["appointmentType"],
317
- skipIf: (ctx) => !!ctx.data?.appointmentType,
318
- requires: ["appointmentReason", "preferredTime", "preferredDate"],
319
- });
320
-
321
- const schedule = confirmDetails.nextStep({
322
- tools: [scheduleAppointment],
323
- requires: ["appointmentReason", "preferredTime", "preferredDate"],
324
- when: "All details confirmed, book the appointment",
325
- });
326
-
327
- const confirmation = schedule.nextStep({
328
- prompt: "Confirm the appointment has been scheduled",
329
- });
330
-
331
- confirmation.nextStep({
332
- step: END_ROUTE,
333
- when: "Appointment booked successfully",
334
- });
335
-
336
- // Alternative path: no times work - show later slots
337
- const laterSlots = presentTimes.nextStep({
338
- tools: [getLaterSlots],
339
- });
340
-
341
- laterSlots.nextStep({
342
- prompt: "List later times and ask if any of them works",
343
- });
344
-
345
- // If no times work at all, end route
346
- laterSlots
347
- .nextStep({
348
- prompt: "Ask the patient to call the office to schedule an appointment",
349
- })
350
- .nextStep({ step: END_ROUTE });
351
-
352
- schedulingRoute.createGuideline({
353
- condition: "The patient says their visit is urgent",
354
- action: "Tell them to call the office immediately",
355
- });
356
-
357
- // Create lab results route with data extraction schema
358
- const labResultsRoute = agent.createRoute({
359
- title: "Lab Results",
360
- description: "Retrieves the patient's lab results and explains them.",
361
- when: ["The patient wants to see their lab results"],
362
- // NEW: Required fields for route completion
363
- requiredFields: ["testType"],
364
- // NEW: Optional fields
365
- optionalFields: ["testDate", "resultsNeeded"],
366
- });
367
-
368
- // Step 1: Collect test information
369
- const collectTestInfo = labResultsRoute.initialStep.nextStep({
370
- prompt: "Ask what type of test results they want to see",
371
- collect: ["testType"],
372
- skipIf: (ctx) => !!ctx.data?.testType,
373
- });
374
-
375
- // Step 2: Optional: collect test date
376
- const collectTestDate = collectTestInfo.nextStep({
377
- prompt: "Ask for the test date if they remember it",
378
- collect: ["testDate"],
379
- skipIf: (ctx) => !!ctx.data?.testDate,
380
- requires: ["testType"],
381
- });
382
-
383
- // Step 3: Get lab results
384
- const getResults = collectTestDate.nextStep({
385
- tools: [getLabResults],
386
- requires: ["testType"],
387
- });
388
-
389
- // Step 4: Present results based on status
390
- const presentResults = getResults.nextStep({
391
- prompt: "Present the lab results and explain what they mean",
392
- });
393
-
394
- presentResults.nextStep({ step: END_ROUTE });
395
-
396
- labResultsRoute.createGuideline({
397
- condition:
398
- "The patient presses you for more conclusions about the lab results",
399
- action:
400
- "Assertively tell them that you cannot help and they should call the office",
401
- });
402
-
403
- // NEW: Satisfaction Survey route - collects feedback after appointment scheduling
404
- const satisfactionRoute = agent.createRoute({
405
- title: "Satisfaction Survey",
406
- description: "Quick satisfaction survey after scheduling",
407
- when: ["Collect patient satisfaction feedback"],
408
-
409
- // Route-specific knowledge base for patient feedback
410
- knowledgeBase: {
411
- surveyBestPractices: [
412
- "Keep surveys short (3-5 questions maximum)",
413
- "Use clear rating scales (1-5 stars)",
414
- "Ask specific questions about what can be improved",
415
- "Always thank patients for their feedback",
416
- "Follow up on critical feedback within 24 hours",
417
- ],
418
- commonFeedbackThemes: {
419
- positive: ["Friendly staff", "Quick response", "Easy scheduling"],
420
- improvement: ["Wait times", "Communication", "Facility cleanliness"],
421
- urgent: ["Medical errors", "Billing issues", "Privacy concerns"],
422
- },
423
- npsCalculation: {
424
- promoters: "9-10 rating",
425
- passives: "7-8 rating",
426
- detractors: "0-6 rating",
427
- formula: "(Promoters - Detractors) / Total Responses * 100",
428
- },
429
- followUpActions: {
430
- critical: "Immediate review by practice manager",
431
- improvement: "Add to quarterly improvement plan",
432
- positive: "Share with staff as recognition",
433
- },
434
- },
435
- // NEW: Required fields for route completion
436
- requiredFields: ["rating"],
437
- // NEW: Optional fields
438
- optionalFields: ["easeOfScheduling", "comments"],
439
- });
440
-
441
- const askRating = satisfactionRoute.initialStep.nextStep({
442
- prompt:
443
- "Ask for overall satisfaction rating from 1 to 5 with the scheduling experience",
444
- collect: ["rating"],
445
- skipIf: (ctx) => !!ctx.data?.rating,
446
- });
447
-
448
- const askComments = askRating.nextStep({
449
- prompt: "Ask if they have any additional comments or feedback (optional)",
450
- collect: ["comments"],
451
- });
452
-
453
- const thankYou = askComments.nextStep({
454
- prompt:
455
- "Thank them for their feedback and confirm their appointment details one more time",
456
- });
457
-
458
- thankYou.nextStep({ step: END_ROUTE });
459
-
460
- // Global guidelines
461
- agent.createGuideline({
462
- condition: "The patient asks about insurance",
463
- action:
464
- "List the insurance providers we accept, and tell them to call the office for more details",
465
- });
466
-
467
- agent.createGuideline({
468
- condition: "The patient asks to talk to a human agent",
469
- action: "Ask them to call the office, providing the phone number",
470
- });
471
-
472
- agent.createGuideline({
473
- condition:
474
- "The patient inquires about something that has nothing to do with our healthcare",
475
- action:
476
- "Kindly tell them you cannot assist with off-topic inquiries - do not engage with their request.",
477
- });
478
-
479
- return agent;
480
- }
481
-
482
- // Example usage with session step management
483
- async function main() {
484
- const agent = createHealthcareAgent();
485
-
486
- // Session is automatically managed by the agent
487
- console.log("✨ Session ready:", agent.session.id);
488
-
489
- console.log("Agent:", agent.name);
490
- console.log("Description:", agent.description);
491
- console.log("\nRoutes:", agent.getRoutes().length);
492
- console.log("Terms:", agent.getTerms().length);
493
- console.log("Guidelines:", agent.getGuidelines().length);
494
-
495
- // Print routes
496
- const routes = agent.getRoutes();
497
- for (const route of routes) {
498
- console.log("\n" + route.describe());
499
- }
500
-
501
- // Example conversation with session management
502
- console.log("\n=== EXAMPLE CONVERSATION ===");
503
-
504
- // Turn 1: Patient wants to follow up
505
- await agent.session.addMessage("user", "Hi, I need to follow up on my visit", "Patient");
506
-
507
- const history = agent.session.getHistory()
508
- const response1 = await agent.respond({
509
- history,
510
- });
511
-
512
- console.log("Patient: Hi, I need to follow up on my visit");
513
- console.log("Agent:", response1.message);
514
- console.log("Route:", response1.session?.currentRoute?.title);
515
- console.log("Data:", agent.session.getData());
516
-
517
- await agent.session.addMessage("assistant", response1.message);
518
-
519
- // Turn 2: Patient specifies they want to schedule an appointment
520
- if (response1.session?.currentRoute?.title === "Schedule an Appointment") {
521
- const history2 = [
522
- ...history,
523
- {
524
- role: "user" as const,
525
- content: "I need to schedule a checkup for next week",
526
- name: "Patient",
527
- },
528
- ];
529
-
530
- const response2 = await agent.respond({ history: history2 });
531
- console.log("\nPatient: I need to schedule a checkup for next week");
532
- console.log("Agent:", response2.message);
533
- console.log("Updated data:", response2.session?.data);
534
- console.log("Current step:", response2.session?.currentStep?.id);
535
-
536
-
537
- // NEW: Check if route is complete - will auto-transition to satisfaction survey
538
- if (response2.isRouteComplete) {
539
- console.log("\n✓ Appointment scheduling complete!");
540
- console.log("Pending transition:", response2.session?.pendingTransition);
541
- console.log(
542
- "Next respond() will auto-transition to:",
543
- response2.session?.pendingTransition?.targetRouteId
544
- );
545
- }
546
-
547
- // Turn 3: Patient provides final details
548
- const history3 = [
549
- ...history2,
550
- {
551
- role: "user" as const,
552
- content: "Tuesday at 2 PM works for me.",
553
- name: "Patient",
554
- },
555
- ];
556
-
557
- const response3 = await agent.respond({ history: history3 });
558
- console.log("\nPatient: Tuesday at 2 PM works for me.");
559
- console.log("Agent:", response3.message);
560
- console.log("Updated data:", response3.session?.data);
561
- console.log("Current step:", response3.session?.currentStep?.id);
562
-
563
- // Check for route completion
564
- if (response3.isRouteComplete) {
565
- console.log("\n✅ Appointment scheduling complete!");
566
- await sendAppointmentReminder(
567
- agent.getCollectedData() as HealthcareData
568
- );
569
- }
570
- }
571
- }
572
-
573
- /**
574
- * Mock function to send an appointment reminder.
575
- * @param data - The healthcare data.
576
- */
577
- async function sendAppointmentReminder(data: HealthcareData) {
578
- console.log("\n" + "=".repeat(60));
579
- console.log("🚀 Sending Appointment Reminder...");
580
- console.log("=".repeat(60));
581
- console.log("Appointment Details:", JSON.stringify(data, null, 2));
582
- console.log(
583
- ` - Sending reminder for ${data.appointmentReason} on ${data.preferredDate} at ${data.preferredTime}.`
584
- );
585
- await new Promise((resolve) => setTimeout(resolve, 1000));
586
- console.log("✨ Reminder sent!");
587
- }
588
-
589
- if (import.meta.url === `file://${process.argv[1]}`) {
590
- main().catch(console.error);
591
- }
592
-
593
- export { createHealthcareAgent };
594
-
595
- main().catch(console.error);