@falai/agent 1.2.8 → 2.0.1

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