@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,477 +0,0 @@
1
- /**
2
- * Mixed Array Conditions Example
3
- *
4
- * This example demonstrates using mixed array conditions that combine both
5
- * AI context strings and programmatic functions for sophisticated routing logic.
6
- * This hybrid approach provides the best of both worlds.
7
- *
8
- * Key concepts:
9
- * - Array conditions combine strings and functions
10
- * - Strings provide AI context for decision making
11
- * - Functions provide programmatic validation
12
- * - AND logic for when conditions (all must be true)
13
- * - OR logic for skipIf conditions (any can trigger skip)
14
- */
15
-
16
- import {
17
- Agent,
18
- GeminiProvider,
19
- type Guideline,
20
- } from "../../src/index";
21
-
22
- // Context for a healthcare appointment system
23
- interface HealthcareContext {
24
- patientId: string;
25
- patientType: "new" | "returning" | "emergency";
26
- insuranceVerified: boolean;
27
- lastVisit?: string;
28
- medicalHistory: string[];
29
- currentSymptoms?: string[];
30
- }
31
-
32
- // Appointment data schema
33
- interface AppointmentData {
34
- appointmentType?: "consultation" | "followup" | "emergency" | "routine";
35
- preferredDate?: string;
36
- preferredTime?: string;
37
- symptoms?: string;
38
- urgencyLevel?: "low" | "medium" | "high" | "critical";
39
- doctorPreference?: string;
40
- insuranceApproved?: boolean;
41
- appointmentConfirmed?: boolean;
42
- }
43
-
44
- const appointmentSchema = {
45
- type: "object",
46
- properties: {
47
- appointmentType: { type: "string", enum: ["consultation", "followup", "emergency", "routine"] },
48
- preferredDate: { type: "string" },
49
- preferredTime: { type: "string" },
50
- symptoms: { type: "string" },
51
- urgencyLevel: { type: "string", enum: ["low", "medium", "high", "critical"] },
52
- doctorPreference: { type: "string" },
53
- insuranceApproved: { type: "boolean" },
54
- appointmentConfirmed: { type: "boolean" },
55
- },
56
- };
57
-
58
- // Create agent with mixed array condition examples
59
- const agent = new Agent<HealthcareContext, AppointmentData>({
60
- name: "HealthcareBot",
61
- description: "A healthcare appointment bot using mixed condition logic",
62
- provider: new GeminiProvider({
63
- apiKey: process.env.GEMINI_API_KEY || "demo-key",
64
- model: "models/gemini-2.5-flash",
65
- }),
66
- context: {
67
- patientId: "pat_12345",
68
- patientType: "returning",
69
- insuranceVerified: true,
70
- lastVisit: "2024-09-15",
71
- medicalHistory: ["hypertension", "diabetes"],
72
- currentSymptoms: ["headache", "fatigue"],
73
- },
74
- schema: appointmentSchema,
75
- });
76
-
77
- // Guidelines with mixed array conditions
78
- const guidelines: Guideline<HealthcareContext, AppointmentData>[] = [
79
- {
80
- // Mixed condition: AI context + programmatic validation
81
- condition: [
82
- "Patient mentions severe pain or emergency symptoms",
83
- (ctx) => ctx.data?.urgencyLevel === "critical" || ctx.data?.urgencyLevel === "high"
84
- ],
85
- action: "Immediately escalate to emergency protocols and offer urgent appointment slots",
86
- tags: ["emergency", "urgent"],
87
- },
88
- {
89
- // Mixed condition: AI understanding + insurance check
90
- condition: [
91
- "Patient asks about costs or insurance coverage",
92
- (ctx) => ctx.context?.insuranceVerified === false
93
- ],
94
- action: "Provide insurance verification assistance and cost estimates",
95
- tags: ["insurance", "billing"],
96
- },
97
- {
98
- // Mixed condition: AI context + medical history check
99
- condition: [
100
- "Patient mentions chronic condition management",
101
- (ctx) => (ctx.context?.medicalHistory?.length || 0) > 0
102
- ],
103
- action: "Reference their medical history and suggest appropriate follow-up care",
104
- tags: ["chronic-care", "history"],
105
- },
106
- ];
107
-
108
- // Add guidelines to agent
109
- guidelines.forEach(guideline => agent.createGuideline(guideline));
110
-
111
- // Route 1: Emergency Appointment - Mixed array condition
112
- agent.createRoute({
113
- title: "Emergency Appointment",
114
- description: "Handle urgent medical appointments",
115
- // Mixed when condition: AI context + programmatic urgency check
116
- when: [
117
- "Patient has urgent medical needs or emergency symptoms",
118
- "Patient mentions severe pain, difficulty breathing, or critical symptoms",
119
- (ctx) => ctx.data?.urgencyLevel === "critical" || ctx.data?.urgencyLevel === "high"
120
- ],
121
- // Skip if already confirmed or if it's a routine matter
122
- skipIf: [
123
- "appointment already confirmed or patient needs routine care",
124
- (ctx) => ctx.data?.appointmentConfirmed === true,
125
- (ctx) => ctx.data?.urgencyLevel === "low"
126
- ],
127
- requiredFields: ["appointmentType", "symptoms", "urgencyLevel"],
128
- steps: [
129
- {
130
- id: "assess_emergency",
131
- description: "Assess emergency situation",
132
- prompt: "I understand this is urgent. Can you describe your symptoms so I can find the earliest available appointment?",
133
- collect: ["symptoms", "urgencyLevel"],
134
- // Mixed when condition for step
135
- when: [
136
- "need to understand the urgency of the situation",
137
- (ctx) => !ctx.data?.symptoms || !ctx.data?.urgencyLevel
138
- ],
139
- },
140
- {
141
- id: "emergency_scheduling",
142
- description: "Schedule emergency appointment",
143
- prompt: "Based on your symptoms, I'm scheduling you for an emergency appointment. Let me find the next available slot.",
144
- requires: ["symptoms", "urgencyLevel"],
145
- },
146
- ],
147
- });
148
-
149
- // Route 2: Follow-up Appointment - Mixed array condition
150
- agent.createRoute({
151
- title: "Follow-up Appointment",
152
- description: "Schedule follow-up appointments for existing patients",
153
- // Mixed when condition: AI context + patient history check
154
- when: [
155
- "Patient wants to schedule a follow-up appointment",
156
- "Patient mentions previous visit or ongoing treatment",
157
- (ctx) => ctx.context?.patientType === "returning",
158
- (ctx) => !!ctx.context?.lastVisit
159
- ],
160
- // Skip if it's clearly an emergency or new patient
161
- skipIf: [
162
- "patient has emergency symptoms or is a new patient",
163
- (ctx) => ctx.context?.patientType === "new",
164
- (ctx) => ctx.data?.urgencyLevel === "critical"
165
- ],
166
- requiredFields: ["appointmentType", "preferredDate"],
167
- optionalFields: ["preferredTime", "doctorPreference"],
168
- steps: [
169
- {
170
- id: "review_history",
171
- description: "Review patient history",
172
- prompt: "I see you were last here on your previous visit. How are you feeling since then?",
173
- // Mixed when condition: AI context + history availability
174
- when: [
175
- "need to understand patient's current condition",
176
- (ctx) => !!ctx.context?.lastVisit
177
- ],
178
- },
179
- {
180
- id: "schedule_followup",
181
- description: "Schedule follow-up appointment",
182
- prompt: "When would you like to schedule your follow-up appointment?",
183
- collect: ["preferredDate", "preferredTime"],
184
- // Mixed skipIf: AI context + data check
185
- skipIf: [
186
- "appointment details already provided",
187
- (ctx) => !!ctx.data?.preferredDate && !!ctx.data?.preferredTime
188
- ],
189
- },
190
- ],
191
- });
192
-
193
- // Route 3: New Patient Onboarding - Mixed array condition
194
- agent.createRoute({
195
- title: "New Patient Onboarding",
196
- description: "Handle new patient registration and first appointment",
197
- // Mixed when condition: AI context + patient type check
198
- when: [
199
- "Patient is new to the practice or needs to register",
200
- "Patient mentions first visit or being a new patient",
201
- (ctx) => ctx.context?.patientType === "new"
202
- ],
203
- // Skip if patient is already established
204
- skipIf: [
205
- "patient is already registered and has visit history",
206
- (ctx) => ctx.context?.patientType === "returning",
207
- (ctx) => (ctx.context?.medicalHistory?.length || 0) > 0
208
- ],
209
- requiredFields: ["appointmentType"],
210
- optionalFields: ["symptoms", "doctorPreference"],
211
- steps: [
212
- {
213
- id: "welcome_new_patient",
214
- description: "Welcome new patient",
215
- prompt: "Welcome to our practice! As a new patient, I'll help you get registered and schedule your first appointment.",
216
- // Mixed when condition for welcoming
217
- when: [
218
- "patient needs welcome and orientation",
219
- (ctx) => ctx.context?.patientType === "new"
220
- ],
221
- },
222
- {
223
- id: "collect_appointment_info",
224
- description: "Collect appointment information",
225
- prompt: "What type of appointment would you like to schedule?",
226
- collect: ["appointmentType"],
227
- // Mixed skipIf: AI context + data availability
228
- skipIf: [
229
- "appointment type already specified",
230
- (ctx) => !!ctx.data?.appointmentType
231
- ],
232
- },
233
- ],
234
- });
235
-
236
- // Route 4: Insurance Verification - Mixed array condition
237
- agent.createRoute({
238
- title: "Insurance Verification",
239
- description: "Handle insurance verification and approval",
240
- // Mixed when condition: AI context + insurance status check
241
- when: [
242
- "Patient asks about insurance coverage or verification",
243
- "Patient mentions insurance concerns or billing questions",
244
- (ctx) => ctx.context?.insuranceVerified === false,
245
- (ctx) => !ctx.data?.insuranceApproved
246
- ],
247
- // Skip if insurance is already verified
248
- skipIf: [
249
- "insurance already verified and approved",
250
- (ctx) => ctx.context?.insuranceVerified === true,
251
- (ctx) => ctx.data?.insuranceApproved === true
252
- ],
253
- optionalFields: ["insuranceApproved"],
254
- steps: [
255
- {
256
- id: "verify_insurance",
257
- description: "Verify insurance coverage",
258
- prompt: "Let me verify your insurance coverage for this appointment.",
259
- collect: ["insuranceApproved"],
260
- // Mixed when condition: AI context + verification needed
261
- when: [
262
- "insurance verification is required",
263
- (ctx) => ctx.context?.insuranceVerified === false
264
- ],
265
- },
266
- ],
267
- });
268
-
269
- // Route 5: Routine Appointment - Mixed array condition
270
- agent.createRoute({
271
- title: "Routine Appointment",
272
- description: "Schedule routine check-ups and preventive care",
273
- // Mixed when condition: AI context + routine care indicators
274
- when: [
275
- "Patient wants routine check-up or preventive care",
276
- "Patient mentions annual exam, screening, or wellness visit",
277
- (ctx) => ctx.data?.urgencyLevel === "low" || !ctx.data?.urgencyLevel,
278
- (ctx) => !ctx.context?.currentSymptoms || ctx.context.currentSymptoms.length === 0
279
- ],
280
- // Skip if urgent care is needed
281
- skipIf: [
282
- "patient has urgent symptoms or emergency needs",
283
- (ctx) => ctx.data?.urgencyLevel === "high" || ctx.data?.urgencyLevel === "critical",
284
- (ctx) => (ctx.context?.currentSymptoms?.length || 0) > 2
285
- ],
286
- requiredFields: ["appointmentType", "preferredDate"],
287
- steps: [
288
- {
289
- id: "routine_scheduling",
290
- description: "Schedule routine appointment",
291
- prompt: "I'd be happy to help you schedule a routine appointment. When would work best for you?",
292
- collect: ["preferredDate", "preferredTime"],
293
- // Mixed when condition: AI context + scheduling needs
294
- when: [
295
- "need to find convenient appointment time",
296
- (ctx) => !ctx.data?.preferredDate
297
- ],
298
- },
299
- ],
300
- });
301
-
302
- // Route 6: Appointment Confirmation - Mixed array condition
303
- agent.createRoute({
304
- title: "Appointment Confirmation",
305
- description: "Confirm and finalize appointment details",
306
- // Mixed when condition: AI context + completion readiness
307
- when: [
308
- "Ready to confirm appointment with all details collected",
309
- "Patient has provided necessary information for scheduling",
310
- (ctx) => !!ctx.data?.appointmentType && !!ctx.data?.preferredDate,
311
- (ctx) => !ctx.data?.appointmentConfirmed
312
- ],
313
- // Skip if already confirmed or missing critical info
314
- skipIf: [
315
- "appointment already confirmed or missing required information",
316
- (ctx) => ctx.data?.appointmentConfirmed === true,
317
- (ctx) => !ctx.data?.appointmentType
318
- ],
319
- steps: [
320
- {
321
- id: "confirm_appointment",
322
- description: "Confirm appointment details",
323
- prompt: "Perfect! Let me confirm your appointment details and send you a confirmation.",
324
- requires: ["appointmentType", "preferredDate"],
325
- // Mixed when condition: AI context + confirmation readiness
326
- when: [
327
- "all required information collected for confirmation",
328
- (ctx) => !!ctx.data?.appointmentType && !!ctx.data?.preferredDate
329
- ],
330
- },
331
- ],
332
- });
333
-
334
- // Demonstration function
335
- async function demonstrateMixedArrayConditions() {
336
- console.log("=== Mixed Array Conditions Demo ===\n");
337
- console.log("This demo shows how mixed conditions combine AI context with programmatic logic.\n");
338
-
339
- const testScenarios = [
340
- {
341
- name: "Emergency Situation",
342
- context: {
343
- patientType: "returning" as const,
344
- insuranceVerified: true,
345
- currentSymptoms: ["chest pain", "shortness of breath"]
346
- },
347
- data: { urgencyLevel: "critical" as const },
348
- message: "I'm having severe chest pain and trouble breathing",
349
- expectedRoute: "Emergency Appointment"
350
- },
351
- {
352
- name: "Follow-up Visit",
353
- context: {
354
- patientType: "returning" as const,
355
- insuranceVerified: true,
356
- lastVisit: "2024-10-01",
357
- medicalHistory: ["diabetes"]
358
- },
359
- message: "I need to schedule a follow-up for my diabetes check",
360
- expectedRoute: "Follow-up Appointment"
361
- },
362
- {
363
- name: "New Patient",
364
- context: {
365
- patientType: "new" as const,
366
- insuranceVerified: false,
367
- medicalHistory: []
368
- },
369
- message: "Hi, I'm new to this practice and need to schedule my first appointment",
370
- expectedRoute: "New Patient Onboarding"
371
- },
372
- {
373
- name: "Insurance Issue",
374
- context: {
375
- patientType: "returning" as const,
376
- insuranceVerified: false
377
- },
378
- message: "I'm not sure if my insurance covers this appointment",
379
- expectedRoute: "Insurance Verification"
380
- },
381
- {
382
- name: "Routine Check-up",
383
- context: {
384
- patientType: "returning" as const,
385
- insuranceVerified: true,
386
- currentSymptoms: []
387
- },
388
- data: { urgencyLevel: "low" as const },
389
- message: "I'd like to schedule my annual physical exam",
390
- expectedRoute: "Routine Appointment"
391
- },
392
- {
393
- name: "Ready for Confirmation",
394
- context: {
395
- patientType: "returning" as const,
396
- insuranceVerified: true
397
- },
398
- data: {
399
- appointmentType: "routine" as const,
400
- preferredDate: "2024-11-15",
401
- preferredTime: "10:00 AM"
402
- },
403
- message: "Yes, that appointment time works for me",
404
- expectedRoute: "Appointment Confirmation"
405
- },
406
- ];
407
-
408
- for (const scenario of testScenarios) {
409
- console.log(`🔍 Testing: ${scenario.name}`);
410
- console.log(`📝 Message: "${scenario.message}"`);
411
-
412
- // Create agent with specific context for this scenario
413
- const testAgent = new Agent<HealthcareContext, AppointmentData>({
414
- name: "TestHealthBot",
415
- description: "Test bot for mixed conditions",
416
- provider: new GeminiProvider({
417
- apiKey: process.env.GEMINI_API_KEY || "demo-key",
418
- model: "models/gemini-2.5-flash",
419
- }),
420
- context: {
421
- patientId: "test_patient",
422
- medicalHistory: [],
423
- ...scenario.context,
424
- },
425
- schema: appointmentSchema,
426
- });
427
-
428
- // Add guidelines to test agent
429
- guidelines.forEach(guideline => testAgent.createGuideline(guideline));
430
-
431
- try {
432
- const response = await testAgent.respond({
433
- history: [
434
- {
435
- role: "user",
436
- content: scenario.message,
437
- name: "Patient",
438
- },
439
- ],
440
- session: scenario.data ? {
441
- id: "test-session",
442
- data: scenario.data,
443
- } : undefined,
444
- });
445
-
446
- console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
447
- console.log(`✅ Expected: ${scenario.expectedRoute}`);
448
- console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
449
- console.log();
450
- } catch (error) {
451
- console.log(`❌ Error: ${error}`);
452
- console.log();
453
- }
454
- }
455
-
456
- console.log("💡 Key Benefits of Mixed Array Conditions:");
457
- console.log(" - Combines AI understanding with programmatic validation");
458
- console.log(" - Flexible routing that adapts to both context and data");
459
- console.log(" - Natural language processing enhanced by business logic");
460
- console.log(" - Robust decision making with multiple validation layers");
461
- console.log(" - Best of both worlds: AI context + precise logic");
462
- }
463
-
464
- // Run demonstration
465
- async function main() {
466
- try {
467
- await demonstrateMixedArrayConditions();
468
- } catch (error) {
469
- console.error("Error:", error);
470
- }
471
- }
472
-
473
- if (import.meta.url === `file://${process.argv[1]}`) {
474
- main().catch(console.error);
475
- }
476
-
477
- export { agent, demonstrateMixedArrayConditions };