@falai/agent 0.9.0 → 1.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 (654) hide show
  1. package/README.md +304 -72
  2. package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
  3. package/dist/adapters/MemoryAdapter.js.map +1 -0
  4. package/dist/adapters/MongoAdapter.d.ts.map +1 -0
  5. package/dist/adapters/MongoAdapter.js.map +1 -0
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
  7. package/dist/adapters/OpenSearchAdapter.js.map +1 -0
  8. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  9. package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
  10. package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
  11. package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  12. package/dist/adapters/PrismaAdapter.js.map +1 -0
  13. package/dist/adapters/RedisAdapter.d.ts.map +1 -0
  14. package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
  15. package/dist/adapters/RedisAdapter.js.map +1 -0
  16. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  17. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/index.js.map +1 -0
  20. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  21. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  22. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  23. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  24. package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
  25. package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  26. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  27. package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
  28. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/index.js.map +1 -0
  31. package/dist/cjs/constants/index.js.map +1 -0
  32. package/dist/{src → cjs}/core/Agent.d.ts +25 -6
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +121 -37
  35. package/dist/cjs/core/Agent.js.map +1 -0
  36. package/dist/cjs/core/BatchExecutor.d.ts +353 -0
  37. package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
  38. package/dist/cjs/core/BatchExecutor.js +842 -0
  39. package/dist/cjs/core/BatchExecutor.js.map +1 -0
  40. package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
  41. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
  42. package/dist/cjs/core/BatchPromptBuilder.js +201 -0
  43. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
  44. package/dist/cjs/core/Events.js.map +1 -0
  45. package/dist/cjs/core/PersistenceManager.js.map +1 -0
  46. package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
  47. package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
  49. package/dist/cjs/core/PromptComposer.js.map +1 -0
  50. package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
  51. package/dist/cjs/core/ResponseEngine.js +202 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +46 -10
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/core/Route.js +541 -0
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
  70. package/dist/cjs/core/SessionManager.d.ts.map +1 -0
  71. package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
  72. package/dist/cjs/core/SessionManager.js.map +1 -0
  73. package/dist/cjs/core/Step.d.ts +170 -0
  74. package/dist/cjs/core/Step.d.ts.map +1 -0
  75. package/dist/cjs/core/Step.js +448 -0
  76. package/dist/cjs/core/Step.js.map +1 -0
  77. package/dist/cjs/core/ToolManager.d.ts +234 -0
  78. package/dist/cjs/core/ToolManager.d.ts.map +1 -0
  79. package/dist/cjs/core/ToolManager.js +1117 -0
  80. package/dist/cjs/core/ToolManager.js.map +1 -0
  81. package/dist/{src → cjs}/index.d.ts +5 -3
  82. package/dist/cjs/index.d.ts.map +1 -0
  83. package/dist/cjs/{src/index.js → index.js} +16 -3
  84. package/dist/cjs/index.js.map +1 -0
  85. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  86. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  87. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  88. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  89. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  91. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  92. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  93. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  94. package/dist/cjs/providers/index.js.map +1 -0
  95. package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
  96. package/dist/cjs/types/agent.d.ts.map +1 -0
  97. package/dist/cjs/types/agent.js.map +1 -0
  98. package/dist/{src → cjs}/types/ai.js.map +1 -1
  99. package/dist/cjs/types/history.js.map +1 -0
  100. package/dist/cjs/{src/types → types}/index.d.ts +5 -3
  101. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  102. package/dist/cjs/{src/types → types}/index.js +8 -1
  103. package/dist/cjs/types/index.js.map +1 -0
  104. package/dist/cjs/types/persistence.js.map +1 -0
  105. package/dist/cjs/{src/types → types}/route.d.ts +116 -15
  106. package/dist/cjs/types/route.d.ts.map +1 -0
  107. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  108. package/dist/cjs/types/session.js.map +1 -0
  109. package/dist/cjs/types/template.d.ts +88 -0
  110. package/dist/cjs/types/template.d.ts.map +1 -0
  111. package/dist/cjs/types/tool.d.ts +130 -0
  112. package/dist/cjs/types/tool.d.ts.map +1 -0
  113. package/dist/cjs/types/tool.js +19 -0
  114. package/dist/cjs/types/tool.js.map +1 -0
  115. package/dist/cjs/utils/clone.js.map +1 -0
  116. package/dist/cjs/utils/condition.d.ts +38 -0
  117. package/dist/cjs/utils/condition.d.ts.map +1 -0
  118. package/dist/cjs/utils/condition.js +168 -0
  119. package/dist/cjs/utils/condition.js.map +1 -0
  120. package/dist/cjs/utils/event.js.map +1 -0
  121. package/dist/cjs/utils/history.js.map +1 -0
  122. package/dist/cjs/utils/id.js.map +1 -0
  123. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  124. package/dist/cjs/utils/index.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  126. package/dist/cjs/utils/index.js.map +1 -0
  127. package/dist/cjs/utils/json.d.ts +16 -0
  128. package/dist/cjs/utils/json.d.ts.map +1 -0
  129. package/dist/cjs/utils/json.js +47 -0
  130. package/dist/cjs/utils/json.js.map +1 -0
  131. package/dist/cjs/utils/logger.js.map +1 -0
  132. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  133. package/dist/cjs/utils/retry.d.ts.map +1 -0
  134. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  135. package/dist/cjs/utils/retry.js.map +1 -0
  136. package/dist/cjs/utils/session.js.map +1 -0
  137. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  138. package/dist/cjs/utils/template.d.ts.map +1 -0
  139. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  140. package/dist/cjs/utils/template.js.map +1 -0
  141. package/dist/constants/index.d.ts.map +1 -0
  142. package/dist/constants/index.js.map +1 -0
  143. package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
  144. package/dist/core/Agent.d.ts.map +1 -0
  145. package/dist/{src/core → core}/Agent.js +122 -38
  146. package/dist/core/Agent.js.map +1 -0
  147. package/dist/core/BatchExecutor.d.ts +353 -0
  148. package/dist/core/BatchExecutor.d.ts.map +1 -0
  149. package/dist/core/BatchExecutor.js +837 -0
  150. package/dist/core/BatchExecutor.js.map +1 -0
  151. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  152. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  153. package/dist/core/BatchPromptBuilder.js +197 -0
  154. package/dist/core/BatchPromptBuilder.js.map +1 -0
  155. package/dist/core/Events.d.ts.map +1 -0
  156. package/dist/core/Events.js.map +1 -0
  157. package/dist/core/PersistenceManager.d.ts.map +1 -0
  158. package/dist/core/PersistenceManager.js.map +1 -0
  159. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  160. package/dist/core/PromptComposer.d.ts.map +1 -0
  161. package/dist/{src/core → core}/PromptComposer.js +45 -8
  162. package/dist/core/PromptComposer.js.map +1 -0
  163. package/dist/core/ResponseEngine.d.ts.map +1 -0
  164. package/dist/core/ResponseEngine.js +198 -0
  165. package/dist/core/ResponseEngine.js.map +1 -0
  166. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
  167. package/dist/core/ResponseModal.d.ts.map +1 -0
  168. package/dist/{src/core → core}/ResponseModal.js +807 -121
  169. package/dist/core/ResponseModal.js.map +1 -0
  170. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
  171. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  172. package/dist/{src/core → core}/ResponsePipeline.js +60 -25
  173. package/dist/core/ResponsePipeline.js.map +1 -0
  174. package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
  175. package/dist/core/Route.d.ts.map +1 -0
  176. package/dist/core/Route.js +537 -0
  177. package/dist/core/Route.js.map +1 -0
  178. package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
  179. package/dist/core/RoutingEngine.d.ts.map +1 -0
  180. package/dist/{src/core → core}/RoutingEngine.js +343 -81
  181. package/dist/core/RoutingEngine.js.map +1 -0
  182. package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
  183. package/dist/core/SessionManager.d.ts.map +1 -0
  184. package/dist/{src/core → core}/SessionManager.js +27 -5
  185. package/dist/core/SessionManager.js.map +1 -0
  186. package/dist/core/Step.d.ts +170 -0
  187. package/dist/core/Step.d.ts.map +1 -0
  188. package/dist/core/Step.js +444 -0
  189. package/dist/core/Step.js.map +1 -0
  190. package/dist/core/ToolManager.d.ts +234 -0
  191. package/dist/core/ToolManager.d.ts.map +1 -0
  192. package/dist/core/ToolManager.js +1111 -0
  193. package/dist/core/ToolManager.js.map +1 -0
  194. package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
  195. package/dist/index.d.ts.map +1 -0
  196. package/dist/{src/index.js → index.js} +4 -1
  197. package/dist/index.js.map +1 -0
  198. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  199. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  200. package/dist/providers/AnthropicProvider.js.map +1 -0
  201. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  202. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  203. package/dist/providers/GeminiProvider.js.map +1 -0
  204. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  205. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  206. package/dist/providers/OpenAIProvider.js.map +1 -0
  207. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  208. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  209. package/dist/providers/OpenRouterProvider.js.map +1 -0
  210. package/dist/providers/index.d.ts.map +1 -0
  211. package/dist/providers/index.js.map +1 -0
  212. package/dist/{src/types → types}/agent.d.ts +12 -4
  213. package/dist/types/agent.d.ts.map +1 -0
  214. package/dist/types/agent.js.map +1 -0
  215. package/dist/types/ai.d.ts.map +1 -0
  216. package/dist/types/ai.js.map +1 -0
  217. package/dist/types/history.d.ts.map +1 -0
  218. package/dist/types/history.js.map +1 -0
  219. package/dist/{src/types → types}/index.d.ts +5 -3
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/{src/types → types}/index.js +2 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/dist/types/persistence.d.ts.map +1 -0
  224. package/dist/types/persistence.js.map +1 -0
  225. package/dist/{src/types → types}/route.d.ts +116 -15
  226. package/dist/types/route.d.ts.map +1 -0
  227. package/dist/{src/types → types}/route.js.map +1 -1
  228. package/dist/types/routing.d.ts.map +1 -0
  229. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  230. package/dist/types/schema.d.ts.map +1 -0
  231. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  232. package/dist/types/session.d.ts.map +1 -0
  233. package/dist/{src/types → types}/session.js.map +1 -1
  234. package/dist/types/template.d.ts +88 -0
  235. package/dist/types/template.d.ts.map +1 -0
  236. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  237. package/dist/types/tool.d.ts +130 -0
  238. package/dist/types/tool.d.ts.map +1 -0
  239. package/dist/types/tool.js +16 -0
  240. package/dist/types/tool.js.map +1 -0
  241. package/dist/utils/clone.d.ts.map +1 -0
  242. package/dist/utils/clone.js.map +1 -0
  243. package/dist/utils/condition.d.ts +38 -0
  244. package/dist/utils/condition.d.ts.map +1 -0
  245. package/dist/utils/condition.js +161 -0
  246. package/dist/utils/condition.js.map +1 -0
  247. package/dist/utils/event.d.ts.map +1 -0
  248. package/dist/utils/event.js.map +1 -0
  249. package/dist/utils/history.d.ts.map +1 -0
  250. package/dist/utils/history.js.map +1 -0
  251. package/dist/utils/id.d.ts.map +1 -0
  252. package/dist/utils/id.js.map +1 -0
  253. package/dist/{src/utils → utils}/index.d.ts +3 -1
  254. package/dist/utils/index.d.ts.map +1 -0
  255. package/dist/{src/utils → utils}/index.js +5 -1
  256. package/dist/utils/index.js.map +1 -0
  257. package/dist/utils/json.d.ts +16 -0
  258. package/dist/utils/json.d.ts.map +1 -0
  259. package/dist/utils/json.js +43 -0
  260. package/dist/utils/json.js.map +1 -0
  261. package/dist/utils/logger.d.ts.map +1 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  264. package/dist/utils/retry.d.ts.map +1 -0
  265. package/dist/{src/utils → utils}/retry.js +5 -4
  266. package/dist/utils/retry.js.map +1 -0
  267. package/dist/utils/session.d.ts.map +1 -0
  268. package/dist/utils/session.js.map +1 -0
  269. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  270. package/dist/utils/template.d.ts.map +1 -0
  271. package/dist/{src/utils → utils}/template.js +98 -0
  272. package/dist/utils/template.js.map +1 -0
  273. package/docs/CONTRIBUTING.md +40 -0
  274. package/docs/README.md +12 -5
  275. package/docs/api/README.md +295 -56
  276. package/docs/api/overview.md +272 -31
  277. package/docs/architecture/data-extraction-flow.md +363 -0
  278. package/docs/architecture/multi-step-execution.md +243 -0
  279. package/docs/core/agent/README.md +120 -5
  280. package/docs/core/agent/session-management.md +153 -6
  281. package/docs/core/ai-integration/prompt-composition.md +135 -0
  282. package/docs/core/ai-integration/response-processing.md +261 -4
  283. package/docs/core/conversation-flows/data-collection.md +143 -0
  284. package/docs/core/conversation-flows/routes.md +132 -2
  285. package/docs/core/conversation-flows/step-transitions.md +132 -0
  286. package/docs/core/conversation-flows/steps.md +112 -0
  287. package/docs/core/error-handling.md +831 -0
  288. package/docs/core/routing/intelligent-routing.md +118 -0
  289. package/docs/core/tools/tool-definition.md +684 -60
  290. package/docs/core/tools/tool-scoping.md +244 -53
  291. package/docs/guides/error-handling-patterns.md +578 -0
  292. package/docs/guides/getting-started/README.md +423 -31
  293. package/docs/guides/migration/README.md +23 -0
  294. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  295. package/docs/guides/migration/multi-step-execution.md +303 -0
  296. package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
  297. package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
  298. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  299. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  300. package/examples/ai-providers/anthropic-integration.ts +13 -9
  301. package/examples/ai-providers/openai-integration.ts +12 -8
  302. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  303. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  304. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  305. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  306. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  307. package/examples/conversation-flows/completion-transitions.ts +48 -7
  308. package/examples/core-concepts/basic-agent.ts +158 -98
  309. package/examples/core-concepts/schema-driven-extraction.ts +43 -16
  310. package/examples/core-concepts/session-management.ts +117 -29
  311. package/examples/integrations/database-integration.ts +6 -6
  312. package/examples/integrations/healthcare-integration.ts +25 -39
  313. package/examples/integrations/search-integration.ts +8 -8
  314. package/examples/integrations/server-session-management.ts +11 -11
  315. package/examples/persistence/database-persistence.ts +15 -15
  316. package/examples/persistence/memory-sessions.ts +6 -6
  317. package/examples/persistence/redis-persistence.ts +7 -9
  318. package/examples/tools/basic-tools.ts +293 -89
  319. package/examples/tools/data-enrichment-tools.ts +189 -79
  320. package/package.json +6 -4
  321. package/src/adapters/PrismaAdapter.ts +3 -2
  322. package/src/adapters/RedisAdapter.ts +3 -3
  323. package/src/core/Agent.ts +152 -46
  324. package/src/core/BatchExecutor.ts +1156 -0
  325. package/src/core/BatchPromptBuilder.ts +275 -0
  326. package/src/core/PromptComposer.ts +53 -16
  327. package/src/core/ResponseEngine.ts +143 -4
  328. package/src/core/ResponseModal.ts +1035 -137
  329. package/src/core/ResponsePipeline.ts +99 -65
  330. package/src/core/Route.ts +262 -34
  331. package/src/core/RoutingEngine.ts +467 -120
  332. package/src/core/SessionManager.ts +39 -7
  333. package/src/core/Step.ts +338 -32
  334. package/src/core/ToolManager.ts +1394 -0
  335. package/src/index.ts +27 -3
  336. package/src/providers/AnthropicProvider.ts +17 -17
  337. package/src/providers/GeminiProvider.ts +129 -60
  338. package/src/providers/OpenAIProvider.ts +18 -18
  339. package/src/providers/OpenRouterProvider.ts +18 -18
  340. package/src/types/agent.ts +12 -4
  341. package/src/types/index.ts +25 -3
  342. package/src/types/route.ts +136 -15
  343. package/src/types/template.ts +70 -2
  344. package/src/types/tool.ts +116 -25
  345. package/src/utils/condition.ts +190 -0
  346. package/src/utils/index.ts +12 -0
  347. package/src/utils/json.ts +46 -0
  348. package/src/utils/retry.ts +5 -4
  349. package/src/utils/template.ts +109 -0
  350. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  351. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  352. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  353. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  354. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  355. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  356. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  357. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  358. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  359. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  360. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  361. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  362. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  363. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  364. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  365. package/dist/cjs/src/adapters/index.js.map +0 -1
  366. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  367. package/dist/cjs/src/constants/index.js.map +0 -1
  368. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  369. package/dist/cjs/src/core/Agent.js.map +0 -1
  370. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  371. package/dist/cjs/src/core/Events.js.map +0 -1
  372. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  373. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  374. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  375. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  376. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  377. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  378. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  379. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  380. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  381. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  382. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  383. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  384. package/dist/cjs/src/core/Route.js +0 -343
  385. package/dist/cjs/src/core/Route.js.map +0 -1
  386. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  387. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  388. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  389. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  390. package/dist/cjs/src/core/Step.d.ts +0 -96
  391. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  392. package/dist/cjs/src/core/Step.js +0 -206
  393. package/dist/cjs/src/core/Step.js.map +0 -1
  394. package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
  395. package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
  396. package/dist/cjs/src/core/ToolExecutor.js +0 -84
  397. package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
  398. package/dist/cjs/src/index.d.ts.map +0 -1
  399. package/dist/cjs/src/index.js.map +0 -1
  400. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  401. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  402. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  403. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  404. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  405. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  406. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  407. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  408. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  409. package/dist/cjs/src/providers/index.js.map +0 -1
  410. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  411. package/dist/cjs/src/types/agent.js.map +0 -1
  412. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  413. package/dist/cjs/src/types/ai.js.map +0 -1
  414. package/dist/cjs/src/types/history.d.ts.map +0 -1
  415. package/dist/cjs/src/types/history.js.map +0 -1
  416. package/dist/cjs/src/types/index.d.ts.map +0 -1
  417. package/dist/cjs/src/types/index.js.map +0 -1
  418. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  419. package/dist/cjs/src/types/persistence.js.map +0 -1
  420. package/dist/cjs/src/types/route.d.ts.map +0 -1
  421. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  422. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  423. package/dist/cjs/src/types/session.d.ts.map +0 -1
  424. package/dist/cjs/src/types/session.js.map +0 -1
  425. package/dist/cjs/src/types/template.d.ts +0 -30
  426. package/dist/cjs/src/types/template.d.ts.map +0 -1
  427. package/dist/cjs/src/types/tool.d.ts +0 -60
  428. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  429. package/dist/cjs/src/types/tool.js +0 -6
  430. package/dist/cjs/src/types/tool.js.map +0 -1
  431. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  432. package/dist/cjs/src/utils/clone.js.map +0 -1
  433. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  434. package/dist/cjs/src/utils/event.js.map +0 -1
  435. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  436. package/dist/cjs/src/utils/history.js.map +0 -1
  437. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  438. package/dist/cjs/src/utils/id.js.map +0 -1
  439. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  440. package/dist/cjs/src/utils/index.js.map +0 -1
  441. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  442. package/dist/cjs/src/utils/logger.js.map +0 -1
  443. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  444. package/dist/cjs/src/utils/retry.js.map +0 -1
  445. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  446. package/dist/cjs/src/utils/session.js.map +0 -1
  447. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  448. package/dist/cjs/src/utils/template.js.map +0 -1
  449. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  450. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  451. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  452. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  453. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  454. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  455. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  456. package/dist/src/adapters/index.js.map +0 -1
  457. package/dist/src/constants/index.js.map +0 -1
  458. package/dist/src/core/Agent.d.ts.map +0 -1
  459. package/dist/src/core/Agent.js.map +0 -1
  460. package/dist/src/core/Events.js.map +0 -1
  461. package/dist/src/core/PersistenceManager.js.map +0 -1
  462. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  463. package/dist/src/core/PromptComposer.js.map +0 -1
  464. package/dist/src/core/ResponseEngine.js +0 -80
  465. package/dist/src/core/ResponseEngine.js.map +0 -1
  466. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  467. package/dist/src/core/ResponseModal.js.map +0 -1
  468. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  469. package/dist/src/core/ResponsePipeline.js.map +0 -1
  470. package/dist/src/core/Route.d.ts.map +0 -1
  471. package/dist/src/core/Route.js +0 -339
  472. package/dist/src/core/Route.js.map +0 -1
  473. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  474. package/dist/src/core/RoutingEngine.js.map +0 -1
  475. package/dist/src/core/SessionManager.d.ts.map +0 -1
  476. package/dist/src/core/SessionManager.js.map +0 -1
  477. package/dist/src/core/Step.d.ts +0 -96
  478. package/dist/src/core/Step.d.ts.map +0 -1
  479. package/dist/src/core/Step.js +0 -202
  480. package/dist/src/core/Step.js.map +0 -1
  481. package/dist/src/core/ToolExecutor.d.ts +0 -45
  482. package/dist/src/core/ToolExecutor.d.ts.map +0 -1
  483. package/dist/src/core/ToolExecutor.js +0 -80
  484. package/dist/src/core/ToolExecutor.js.map +0 -1
  485. package/dist/src/index.d.ts.map +0 -1
  486. package/dist/src/index.js.map +0 -1
  487. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  488. package/dist/src/providers/GeminiProvider.js.map +0 -1
  489. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  490. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  491. package/dist/src/providers/index.js.map +0 -1
  492. package/dist/src/types/agent.d.ts.map +0 -1
  493. package/dist/src/types/agent.js.map +0 -1
  494. package/dist/src/types/history.js.map +0 -1
  495. package/dist/src/types/index.js.map +0 -1
  496. package/dist/src/types/persistence.js.map +0 -1
  497. package/dist/src/types/route.d.ts.map +0 -1
  498. package/dist/src/types/template.d.ts +0 -30
  499. package/dist/src/types/template.d.ts.map +0 -1
  500. package/dist/src/types/tool.d.ts +0 -60
  501. package/dist/src/types/tool.d.ts.map +0 -1
  502. package/dist/src/types/tool.js +0 -5
  503. package/dist/src/types/tool.js.map +0 -1
  504. package/dist/src/utils/clone.js.map +0 -1
  505. package/dist/src/utils/event.js.map +0 -1
  506. package/dist/src/utils/history.js.map +0 -1
  507. package/dist/src/utils/id.js.map +0 -1
  508. package/dist/src/utils/index.d.ts.map +0 -1
  509. package/dist/src/utils/index.js.map +0 -1
  510. package/dist/src/utils/logger.js.map +0 -1
  511. package/dist/src/utils/retry.d.ts.map +0 -1
  512. package/dist/src/utils/retry.js.map +0 -1
  513. package/dist/src/utils/session.js.map +0 -1
  514. package/dist/src/utils/template.d.ts.map +0 -1
  515. package/dist/src/utils/template.js.map +0 -1
  516. package/docs/core/tools/tool-execution.md +0 -815
  517. package/src/core/ToolExecutor.ts +0 -126
  518. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  519. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  520. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  521. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  522. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  523. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  524. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  525. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  526. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  527. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  528. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  529. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  530. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  531. /package/dist/{src/adapters → adapters}/index.js +0 -0
  532. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  533. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  534. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  535. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  536. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  537. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  538. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  539. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  540. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  541. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  542. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  543. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  544. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  545. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  546. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  547. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  548. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  549. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  550. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  551. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  552. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  553. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  554. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  555. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  556. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  557. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  558. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  559. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  560. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  561. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  562. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  563. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  564. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  565. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  566. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  567. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  568. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  569. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  570. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  571. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  572. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  573. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  574. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  575. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  576. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  577. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  578. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  579. /package/dist/cjs/{src/types → types}/history.js +0 -0
  580. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  581. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  582. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  583. /package/dist/cjs/{src/types → types}/route.js +0 -0
  584. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  585. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  586. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  587. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  588. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  589. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  590. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  591. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  592. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  593. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  594. /package/dist/cjs/{src/types → types}/session.js +0 -0
  595. /package/dist/cjs/{src/types → types}/template.js +0 -0
  596. /package/dist/{src → cjs}/types/template.js.map +0 -0
  597. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  598. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  599. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  600. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  601. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  602. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  603. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  604. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  605. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  606. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  607. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  608. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  609. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  610. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  611. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  612. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  613. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  614. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  615. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  616. /package/dist/{src/constants → constants}/index.js +0 -0
  617. /package/dist/{src/core → core}/Events.d.ts +0 -0
  618. /package/dist/{src/core → core}/Events.js +0 -0
  619. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  620. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  621. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  622. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  623. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  624. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  625. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  626. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  627. /package/dist/{src/providers → providers}/index.js +0 -0
  628. /package/dist/{src/types → types}/agent.js +0 -0
  629. /package/dist/{src/types → types}/ai.d.ts +0 -0
  630. /package/dist/{src/types → types}/ai.js +0 -0
  631. /package/dist/{src/types → types}/history.d.ts +0 -0
  632. /package/dist/{src/types → types}/history.js +0 -0
  633. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  634. /package/dist/{src/types → types}/persistence.js +0 -0
  635. /package/dist/{src/types → types}/route.js +0 -0
  636. /package/dist/{src/types → types}/routing.d.ts +0 -0
  637. /package/dist/{src/types → types}/routing.js +0 -0
  638. /package/dist/{src/types → types}/schema.d.ts +0 -0
  639. /package/dist/{src/types → types}/schema.js +0 -0
  640. /package/dist/{src/types → types}/session.d.ts +0 -0
  641. /package/dist/{src/types → types}/session.js +0 -0
  642. /package/dist/{src/types → types}/template.js +0 -0
  643. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  644. /package/dist/{src/utils → utils}/clone.js +0 -0
  645. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  646. /package/dist/{src/utils → utils}/event.js +0 -0
  647. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  648. /package/dist/{src/utils → utils}/history.js +0 -0
  649. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  650. /package/dist/{src/utils → utils}/id.js +0 -0
  651. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  652. /package/dist/{src/utils → utils}/logger.js +0 -0
  653. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  654. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -8,6 +8,12 @@
8
8
  * 3. Session step management even for stepless conversations
9
9
  * 4. Always-on routing with context awareness
10
10
  * 5. Three-phase pipeline: PREPARATION → ROUTING → RESPONSE
11
+ * 6. NEW: Complex ConditionTemplate patterns for intelligent routing:
12
+ * - Mixed conditions: ["AI context", (ctx) => programmatic_check]
13
+ * - Route skipIf: Dynamic route exclusion based on message content
14
+ * - Function-only conditions: (ctx) => sophisticated_logic
15
+ * - String-only conditions: "simple AI context"
16
+ * - Fallback routing with programmatic logic
11
17
  */
12
18
 
13
19
  import {
@@ -65,11 +71,11 @@ interface FeedbackData {
65
71
  // ==============================================================================
66
72
 
67
73
  // Tool: Fetch latest company news (context enrichment)
68
- const fetchNewsTool: Tool<CompanyContext, UnifiedData, [], void> = {
74
+ const fetchNewsTool: Tool<CompanyContext, UnifiedData> = {
69
75
  id: "fetch_news",
70
76
  name: "Company News Fetcher",
71
77
  description: "Retrieve latest company news and updates",
72
- handler: () => {
78
+ handler: (context, args) => {
73
79
  // Simulate API call to news service
74
80
  const news = [
75
81
  {
@@ -87,7 +93,7 @@ const fetchNewsTool: Tool<CompanyContext, UnifiedData, [], void> = {
87
93
  console.log(`[Tool] Fetched ${news.length} news articles`);
88
94
 
89
95
  return {
90
- data: undefined,
96
+ data: `Fetched ${news.length} latest news articles`,
91
97
  contextUpdate: {
92
98
  recentNews: news,
93
99
  },
@@ -96,12 +102,12 @@ const fetchNewsTool: Tool<CompanyContext, UnifiedData, [], void> = {
96
102
  };
97
103
 
98
104
  // Tool: Search knowledge base (context enrichment)
99
- const searchKnowledgeTool: Tool<CompanyContext,UnifiedData, [], string> = {
105
+ const searchKnowledgeTool: Tool<CompanyContext, UnifiedData> = {
100
106
  id: "search_knowledge",
101
107
  name: "Knowledge Base Search",
102
108
  description: "Search FAQs and documentation",
103
- handler: (context) => {
104
- const { history } = context;
109
+ handler: (toolContext, args) => {
110
+ const { history } = toolContext;
105
111
 
106
112
  // Get last user message
107
113
  const lastMessage = history
@@ -119,7 +125,7 @@ const searchKnowledgeTool: Tool<CompanyContext,UnifiedData, [], string> = {
119
125
  ).message.toLowerCase();
120
126
 
121
127
  // Simple keyword matching (in real app, use vector search)
122
- const relevantFaqs = context.context.faqs.filter(
128
+ const relevantFaqs = toolContext.context.faqs.filter(
123
129
  (faq) =>
124
130
  faq.question.toLowerCase().includes(query) ||
125
131
  faq.answer.toLowerCase().includes(query)
@@ -262,12 +268,25 @@ const agent = new Agent<CompanyContext, UnifiedData>({
262
268
  agent.createRoute({
263
269
  title: "Company Information",
264
270
  description: "Answer general questions about Acme Corp",
265
- conditions: [
271
+ // Mixed condition: AI context + programmatic validation
272
+ when: [
266
273
  "User asks about the company",
267
274
  "Questions about company history, size, location",
268
275
  "When was the company founded",
269
276
  "How many employees",
270
277
  "Where is the headquarters",
278
+ (ctx) => {
279
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
280
+ return message.includes('company') || message.includes('acme') || message.includes('founded');
281
+ }
282
+ ],
283
+ // Skip if user is asking about specific products instead
284
+ skipIf: [
285
+ "user is asking about specific products or services",
286
+ (ctx) => {
287
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
288
+ return message.includes('widget') || message.includes('gadget') || message.includes('product');
289
+ }
271
290
  ],
272
291
  // Route-specific knowledge base for company information
273
292
  knowledgeBase: {
@@ -299,12 +318,18 @@ agent.createRoute({
299
318
  agent.createRoute({
300
319
  title: "Product Information",
301
320
  description: "Answer questions about products",
302
- conditions: [
303
- "User asks about products",
304
- "Questions about features, pricing, availability",
305
- "What products do you offer",
306
- "Tell me about your widgets",
307
- ],
321
+ // Function-only condition for programmatic logic
322
+ when: (ctx) => {
323
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
324
+ return message.includes('product') || message.includes('widget') ||
325
+ message.includes('gadget') || message.includes('price') ||
326
+ message.includes('feature');
327
+ },
328
+ // Skip if user is asking about company policies instead
329
+ skipIf: (ctx) => {
330
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
331
+ return message.includes('policy') || message.includes('return') || message.includes('warranty');
332
+ },
308
333
  // NO schema - just answering questions
309
334
  });
310
335
 
@@ -315,11 +340,25 @@ agent.createRoute({
315
340
  agent.createRoute({
316
341
  title: "Policy Information",
317
342
  description: "Answer questions about company policies",
318
- conditions: [
343
+ // Mixed condition: AI context + programmatic check
344
+ when: [
319
345
  "User asks about policies",
320
346
  "Return policy",
321
- "Shipping information",
347
+ "Shipping information",
322
348
  "Warranty questions",
349
+ (ctx) => {
350
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
351
+ return message.includes('policy') || message.includes('return') ||
352
+ message.includes('shipping') || message.includes('warranty');
353
+ }
354
+ ],
355
+ // Skip if user is asking about news or updates
356
+ skipIf: [
357
+ "user wants latest news or updates",
358
+ (ctx) => {
359
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
360
+ return message.includes('news') || message.includes('update') || message.includes('new');
361
+ }
323
362
  ],
324
363
  // NO schema
325
364
  });
@@ -330,12 +369,13 @@ agent.createRoute({
330
369
  const newsRoute = agent.createRoute({
331
370
  title: "Company News",
332
371
  description: "Share latest company news and updates",
333
- conditions: [
334
- "User asks about news",
335
- "What's new",
336
- "Recent updates",
337
- "Latest announcements",
338
- ],
372
+ // String-only condition for AI context
373
+ when: "User asks about news, updates, or recent announcements",
374
+ // Skip if user is asking about general FAQ topics
375
+ skipIf: (ctx) => {
376
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
377
+ return message.includes('how do i') || message.includes('can i') || message.includes('is there');
378
+ },
339
379
  });
340
380
 
341
381
  // Add tool to initial step to fetch news
@@ -351,11 +391,25 @@ fetchNews.nextStep({
351
391
  const faqRoute = agent.createRoute({
352
392
  title: "FAQ Search",
353
393
  description: "Search FAQs for relevant answers",
354
- conditions: [
394
+ // Mixed condition: AI context + programmatic pattern matching
395
+ when: [
355
396
  "User has a question that might be in FAQs",
356
397
  "How do I...",
357
398
  "Can I...",
358
399
  "Is there...",
400
+ (ctx) => {
401
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
402
+ return message.startsWith('how ') || message.startsWith('can ') ||
403
+ message.startsWith('is ') || message.includes('?');
404
+ }
405
+ ],
406
+ // Skip if user is clearly asking for news or company info
407
+ skipIf: [
408
+ "user wants company news or general company information",
409
+ (ctx) => {
410
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
411
+ return message.includes('news') || message.includes('company') || message.includes('founded');
412
+ }
359
413
  ],
360
414
  });
361
415
 
@@ -372,12 +426,15 @@ searchFaqs.nextStep({
372
426
  agent.createRoute({
373
427
  title: "General Conversation",
374
428
  description: "Handle general conversation or unclear questions",
375
- conditions: [
376
- "User message doesn't match other routes",
377
- "Greetings",
378
- "Small talk",
379
- "Unclear intent",
380
- ],
429
+ // Function-only condition for fallback logic
430
+ when: (ctx) => {
431
+ // This route catches everything that doesn't match other routes
432
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
433
+ return !message.includes('product') && !message.includes('policy') &&
434
+ !message.includes('news') && !message.includes('company');
435
+ },
436
+ // Never skip the fallback route
437
+ skipIf: ()=>false,
381
438
  });
382
439
 
383
440
  // Initial step is enough for fallback conversations
@@ -386,7 +443,27 @@ agent.createRoute({
386
443
  const feedbackRoute = agent.createRoute({
387
444
  title: "Collect Feedback",
388
445
  description: "Collect user feedback about their experience",
389
- conditions: ["User wants to leave feedback", "User seems satisfied or upset"],
446
+ // Mixed condition: AI context + sentiment analysis
447
+ when: [
448
+ "User wants to leave feedback",
449
+ "User seems satisfied or upset",
450
+ (ctx) => {
451
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
452
+ return message.includes('feedback') || message.includes('review') ||
453
+ message.includes('satisfied') || message.includes('disappointed');
454
+ }
455
+ ],
456
+ // Skip if user is in the middle of another task
457
+ skipIf: [
458
+ "user is actively getting help with something else",
459
+ (ctx) => {
460
+ const recentMessages = ctx.history?.filter((m) => "content" in m).slice(-3) || [];
461
+ return recentMessages.some(msg =>
462
+ (msg.content as string)?.toLowerCase().includes('help') ||
463
+ (msg.content as string)?.toLowerCase().includes('problem')
464
+ );
465
+ }
466
+ ],
390
467
  // NEW: Required fields for route completion
391
468
  requiredFields: ["rating", "comments"],
392
469
  // NEW: Optional fields
@@ -1,6 +1,13 @@
1
1
  /**
2
2
  * Persistent multi-turn onboarding agent example
3
3
  * Updated for v2 architecture with session step management and schema-first data extraction
4
+ *
5
+ * NEW: Enhanced with flexible ConditionTemplate patterns:
6
+ * - Mixed route conditions: ["AI context", (ctx) => state_check]
7
+ * - Route skipIf: Skip if onboarding already complete
8
+ * - Step skipIf: Enhanced conditional step skipping with AI context
9
+ * - Programmatic when conditions: (ctx) => data_validation
10
+ * - Performance patterns for condition evaluation
4
11
  */
5
12
 
6
13
  import {
@@ -228,12 +235,7 @@ function createPersistentOnboardingAgent(sessionId: string) {
228
235
  // ============================================================================
229
236
 
230
237
  // OPTION 1: Using contextUpdate in return value
231
- const saveBusinessInfo: Tool<
232
- OnboardingContext,
233
- OnboardingData,
234
- unknown[],
235
- unknown
236
- > = {
238
+ const saveBusinessInfo: Tool<OnboardingContext, OnboardingData> = {
237
239
  id: "save_business_info",
238
240
  name: "Business Info Saver",
239
241
  description: "Save business name and description",
@@ -245,12 +247,13 @@ function createPersistentOnboardingAgent(sessionId: string) {
245
247
  },
246
248
  required: ["name", "description"],
247
249
  },
248
- handler: (toolContext, ...args) => {
249
- const [name, description] = args as [string, string];
250
+ handler: (toolContext, args) => {
251
+ const name = args?.name as string;
252
+ const description = args?.description as string;
250
253
  console.log(`📝 Saving business info: ${name}`);
251
254
 
252
255
  return {
253
- data: true,
256
+ data: "Business information saved successfully",
254
257
  // Context update is automatically persisted via onContextUpdate hook
255
258
  contextUpdate: {
256
259
  collectedData: {
@@ -267,13 +270,8 @@ function createPersistentOnboardingAgent(sessionId: string) {
267
270
  },
268
271
  };
269
272
 
270
- // OPTION 2: Using updateContext method directly
271
- const saveIndustry: Tool<
272
- OnboardingContext,
273
- OnboardingData,
274
- unknown[],
275
- unknown
276
- > = {
273
+ // OPTION 2: Using contextUpdate in return value
274
+ const saveIndustry: Tool<OnboardingContext, OnboardingData> = {
277
275
  id: "save_industry",
278
276
  name: "Industry Classifier",
279
277
  description: "Save business industry",
@@ -284,29 +282,24 @@ function createPersistentOnboardingAgent(sessionId: string) {
284
282
  },
285
283
  required: ["industry"],
286
284
  },
287
- handler: async (toolContext, ...args) => {
288
- const [industry] = args as [string];
285
+ handler: async (toolContext, args) => {
286
+ const industry = args?.industry as string;
289
287
  console.log(`🏭 Saving industry: ${industry}`);
290
288
 
291
- // Direct context update (triggers onContextUpdate hook)
292
- await toolContext.updateContext({
293
- collectedData: {
294
- ...toolContext.context.collectedData,
295
- industry,
289
+ return {
290
+ data: "Industry information saved successfully",
291
+ contextUpdate: {
292
+ collectedData: {
293
+ ...toolContext.context.collectedData,
294
+ industry,
295
+ },
296
+ completedSteps: [...toolContext.context.completedSteps, "industry"],
296
297
  },
297
- completedSteps: [...toolContext.context.completedSteps, "industry"],
298
- });
299
-
300
- return { data: true };
298
+ };
301
299
  },
302
300
  };
303
301
 
304
- const saveContactEmail: Tool<
305
- OnboardingContext,
306
- OnboardingData,
307
- unknown[],
308
- unknown
309
- > = {
302
+ const saveContactEmail: Tool<OnboardingContext, OnboardingData> = {
310
303
  id: "save_contact_email",
311
304
  name: "Contact Email Saver",
312
305
  description: "Save contact email",
@@ -317,19 +310,20 @@ function createPersistentOnboardingAgent(sessionId: string) {
317
310
  },
318
311
  required: ["email"],
319
312
  },
320
- handler: async (toolContext, ...args) => {
321
- const [email] = args as [string];
313
+ handler: async (toolContext, args) => {
314
+ const email = args?.email as string;
322
315
  console.log(`📧 Saving contact email: ${email}`);
323
316
 
324
- await toolContext.updateContext({
325
- collectedData: {
326
- ...toolContext.context.collectedData,
327
- contactEmail: email,
317
+ return {
318
+ data: "Contact email saved successfully",
319
+ contextUpdate: {
320
+ collectedData: {
321
+ ...toolContext.context.collectedData,
322
+ contactEmail: email,
323
+ },
324
+ completedSteps: [...toolContext.context.completedSteps, "contact"],
328
325
  },
329
- completedSteps: [...toolContext.context.completedSteps, "contact"],
330
- });
331
-
332
- return { data: true };
326
+ };
333
327
  },
334
328
  };
335
329
 
@@ -340,7 +334,24 @@ function createPersistentOnboardingAgent(sessionId: string) {
340
334
  const onboardingRoute = agent.createRoute({
341
335
  title: "Business Onboarding",
342
336
  description: "Guide user through business information collection",
343
- conditions: ["User is onboarding their business"],
337
+ // Mixed condition: AI context + programmatic validation
338
+ when: [
339
+ "User is onboarding their business",
340
+ (ctx) => {
341
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
342
+ return message.includes('onboard') || message.includes('register') ||
343
+ message.includes('business') || message.includes('start');
344
+ }
345
+ ],
346
+ // Skip if user already has complete business info
347
+ skipIf: [
348
+ "business information already complete",
349
+ (ctx) => {
350
+ const data = ctx.data;
351
+ return !!(data?.businessName && data?.businessDescription &&
352
+ data?.industry && data?.contactEmail);
353
+ }
354
+ ],
344
355
  // NEW: Required fields for route completion
345
356
  requiredFields: ["businessName", "businessDescription"],
346
357
  // NEW: Optional fields that enhance the experience
@@ -355,7 +366,12 @@ function createPersistentOnboardingAgent(sessionId: string) {
355
366
  const collectBusinessInfo = onboardingRoute.initialStep.nextStep({
356
367
  prompt: "Ask for business name and a brief description",
357
368
  collect: ["businessName", "businessDescription"],
358
- skipIf: (data) => !!data.businessName && !!data.businessDescription,
369
+ // Mixed skipIf: AI context + programmatic check
370
+ skipIf: [
371
+ "business name and description already provided",
372
+ (ctx) => !!ctx.data?.businessName && !!ctx.data.businessDescription
373
+ ],
374
+ // String-only when condition for AI context
359
375
  when: "Need to collect basic business information first",
360
376
  });
361
377
 
@@ -363,14 +379,19 @@ function createPersistentOnboardingAgent(sessionId: string) {
363
379
  const saveBusiness = collectBusinessInfo.nextStep({
364
380
  tools: [saveBusinessInfo],
365
381
  requires: ["businessName", "businessDescription"],
366
- when: "Business name and description provided, save to database",
382
+ // Function-only when condition for programmatic logic
383
+ when: (ctx) => !!ctx.data?.businessName && !!ctx.data?.businessDescription,
367
384
  });
368
385
 
369
386
  // Step 3: Collect industry
370
387
  const collectIndustry = saveBusiness.nextStep({
371
388
  prompt: "Ask what industry the business operates in",
372
389
  collect: ["industry"],
373
- skipIf: (data) => !!data.industry,
390
+ // Mixed skipIf: AI context + programmatic logic
391
+ skipIf: [
392
+ "industry already specified",
393
+ (ctx) => !!ctx.data?.industry
394
+ ],
374
395
  });
375
396
 
376
397
  // Step 4: Save industry (tool execution)
@@ -383,7 +404,8 @@ function createPersistentOnboardingAgent(sessionId: string) {
383
404
  const collectContact = saveIndustryStep.nextStep({
384
405
  prompt: "Ask for their contact email",
385
406
  collect: ["contactEmail"],
386
- skipIf: (data) => !!data.contactEmail,
407
+ // Function-only skipIf for programmatic check
408
+ skipIf: (ctx) => !!ctx.data?.contactEmail,
387
409
  });
388
410
 
389
411
  // Step 6: Save contact (tool execution)
@@ -4,6 +4,14 @@
4
4
  *
5
5
  * Demonstrates how to use rules and prohibitions to control agent behavior
6
6
  * in different conversation routes (e.g., WhatsApp bot with different styles)
7
+ *
8
+ * NEW: Enhanced with complex ConditionTemplate patterns:
9
+ * - Mixed conditions: ["AI context", (ctx) => keyword_detection]
10
+ * - Route skipIf: Dynamic route exclusion based on message analysis
11
+ * - Function-only conditions: (ctx) => sophisticated_routing_logic
12
+ * - String-only conditions: "simple AI context for general chat"
13
+ * - Emergency routing with never-skip logic (skipIf: false)
14
+ * - Performance patterns for real-time condition evaluation
7
15
  */
8
16
 
9
17
  import { Agent, type History, END_ROUTE, OpenAIProvider } from "../../src";
@@ -112,7 +120,23 @@ const agent = new Agent<unknown, ServiceData>({
112
120
  agent.createRoute({
113
121
  title: "Quick Support",
114
122
  description: "Fast answers for common questions",
115
- conditions: ["User has a simple question", "User wants quick help"],
123
+ // Mixed condition: AI context + programmatic validation
124
+ when: [
125
+ "User has a simple question",
126
+ "User wants quick help",
127
+ (ctx) => {
128
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
129
+ return message.includes('quick') || message.includes('simple') || message.length < 50;
130
+ }
131
+ ],
132
+ // Skip if user seems to need detailed help
133
+ skipIf: [
134
+ "user needs detailed or complex assistance",
135
+ (ctx) => {
136
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
137
+ return message.includes('detailed') || message.includes('complex') || message.length > 100;
138
+ }
139
+ ],
116
140
  rules: [
117
141
  "Keep messages extremely short (1-2 lines maximum)",
118
142
  "Use bullet points for lists",
@@ -130,9 +154,21 @@ agent.createRoute({
130
154
  agent.createRoute({
131
155
  title: "Sales Consultation",
132
156
  description: "Help customer discover needs and present solutions",
133
- conditions: [
134
- "User is interested in buying",
135
- "User wants product information",
157
+ // Function-only condition for programmatic sales detection
158
+ when: (ctx) => {
159
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
160
+ return message.includes('buy') || message.includes('purchase') ||
161
+ message.includes('price') || message.includes('cost') ||
162
+ message.includes('product') || message.includes('interested');
163
+ },
164
+ // Skip if user is having technical issues
165
+ skipIf: [
166
+ "user has technical problems that need solving first",
167
+ (ctx) => {
168
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
169
+ return message.includes('broken') || message.includes('error') ||
170
+ message.includes('not working') || message.includes('problem');
171
+ }
136
172
  ],
137
173
  rules: [
138
174
  "Ask open-ended questions to discover needs",
@@ -169,7 +205,22 @@ agent.createRoute({
169
205
  agent.createRoute({
170
206
  title: "Technical Support",
171
207
  description: "Help with technical issues and troubleshooting",
172
- conditions: ["User has technical problem", "User needs step-by-step help"],
208
+ // Mixed condition: AI context + technical keyword detection
209
+ when: [
210
+ "User has technical problem",
211
+ "User needs step-by-step help",
212
+ (ctx) => {
213
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
214
+ return message.includes('help') || message.includes('problem') ||
215
+ message.includes('error') || message.includes('not working') ||
216
+ message.includes('broken') || message.includes('fix');
217
+ }
218
+ ],
219
+ // Skip if user is just browsing or asking about sales
220
+ skipIf: (ctx) => {
221
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
222
+ return message.includes('price') || message.includes('buy') || message.includes('cost');
223
+ },
173
224
  rules: [
174
225
  "Provide clear, numbered steps",
175
226
  "Use simple language for technical concepts",
@@ -209,7 +260,19 @@ techSupportRoute.initialStep
209
260
  agent.createRoute({
210
261
  title: "Emergency Support",
211
262
  description: "Handle urgent customer issues",
212
- conditions: ["Customer is frustrated", "Urgent issue", "Service down"],
263
+ // Mixed condition: AI context + urgency detection
264
+ when: [
265
+ "Customer is frustrated",
266
+ "Urgent issue",
267
+ "Service down",
268
+ (ctx) => {
269
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
270
+ const urgentWords = ['urgent', 'emergency', 'critical', 'down', 'broken', 'frustrated', 'angry'];
271
+ return urgentWords.some(word => message.includes(word)) || message.includes('!!!');
272
+ }
273
+ ],
274
+ // Never skip emergency support
275
+ skipIf: ()=>false,
213
276
  rules: [
214
277
  "Acknowledge the urgency immediately",
215
278
  "Express empathy and understanding",
@@ -229,7 +292,14 @@ agent.createRoute({
229
292
  agent.createRoute({
230
293
  title: "General Chat",
231
294
  description: "Casual conversation and general questions",
232
- conditions: ["User is just chatting", "Greeting", "General question"],
295
+ // String-only condition for AI context
296
+ when: "User is just chatting, greeting, or asking general questions",
297
+ // Skip if user has specific needs that other routes can handle
298
+ skipIf: (ctx) => {
299
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
300
+ return message.includes('help') || message.includes('buy') ||
301
+ message.includes('problem') || message.includes('urgent');
302
+ },
233
303
  rules: [
234
304
  "Be friendly and conversational",
235
305
  "Use emojis naturally 😊",
@@ -262,7 +332,7 @@ async function demonstrateRulesAndProhibitions() {
262
332
  agent.createRoute({
263
333
  title: "Quick Support",
264
334
  description: "Fast answers for common questions",
265
- conditions: ["User has a simple question", "User wants quick help"],
335
+ when: ["User has a simple question", "User wants quick help"],
266
336
  rules: [
267
337
  "Keep messages extremely short (1-2 lines maximum)",
268
338
  "Use bullet points for lists",
@@ -280,7 +350,7 @@ async function demonstrateRulesAndProhibitions() {
280
350
  agent.createRoute({
281
351
  title: "Sales Consultation",
282
352
  description: "Help customer discover needs and present solutions",
283
- conditions: [
353
+ when: [
284
354
  "User is interested in buying",
285
355
  "User wants product information",
286
356
  ],
@@ -303,7 +373,7 @@ async function demonstrateRulesAndProhibitions() {
303
373
  agent.createRoute({
304
374
  title: "Technical Support",
305
375
  description: "Help with technical issues and troubleshooting",
306
- conditions: ["User has technical problem", "User needs step-by-step help"],
376
+ when: ["User has technical problem", "User needs step-by-step help"],
307
377
  rules: [
308
378
  "Provide clear, numbered steps",
309
379
  "Use simple language for technical concepts",
@@ -343,7 +413,7 @@ async function demonstrateRulesAndProhibitions() {
343
413
  agent.createRoute({
344
414
  title: "Emergency Support",
345
415
  description: "Handle urgent customer issues",
346
- conditions: ["Customer is frustrated", "Urgent issue", "Service down"],
416
+ when: ["Customer is frustrated", "Urgent issue", "Service down"],
347
417
  rules: [
348
418
  "Acknowledge the urgency immediately",
349
419
  "Express empathy and understanding",
@@ -363,7 +433,7 @@ async function demonstrateRulesAndProhibitions() {
363
433
  agent.createRoute({
364
434
  title: "General Chat",
365
435
  description: "Casual conversation and general questions",
366
- conditions: ["User is just chatting", "Greeting", "General question"],
436
+ when: ["User is just chatting", "Greeting", "General question"],
367
437
  rules: [
368
438
  "Be friendly and conversational",
369
439
  "Use emojis naturally 😊",
@@ -361,7 +361,7 @@ async function modernStreamingWithRoutes() {
361
361
  const supportRoute = agent.createRoute({
362
362
  title: "Product Support",
363
363
  description: "Help users with product questions",
364
- conditions: ["User asks about product features or issues"],
364
+ when: ["User asks about product features or issues"],
365
365
  });
366
366
 
367
367
  supportRoute.initialStep.nextStep({
@@ -372,7 +372,7 @@ async function modernStreamingWithRoutes() {
372
372
  agent.createRoute({
373
373
  title: "Collect Feedback",
374
374
  description: "Collect user feedback on their support experience",
375
- conditions: ["User wants to provide feedback"],
375
+ when: ["User wants to provide feedback"],
376
376
  // NEW: Required fields for route completion
377
377
  requiredFields: ["rating"],
378
378
  // NEW: Optional fields