@falai/agent 1.2.7 → 2.0.0

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