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