@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
@@ -4,19 +4,25 @@
4
4
  * This example demonstrates how to configure an entire agent
5
5
  * using declarative syntax in the constructor, including:
6
6
  * - Terms (domain glossary)
7
- * - Guidelines (behavior rules)
7
+ * - Guidelines (behavior rules) with flexible ConditionTemplate patterns
8
8
  * - Tools (capabilities)
9
9
  * - Routes with data extraction schemas and sequential steps
10
10
  * - Session management for multi-turn conversations
11
+ * - NEW: Flexible routing conditions with ConditionTemplate patterns:
12
+ * - String-only conditions: "user wants to book" (AI context only)
13
+ * - Function-only conditions: (ctx) => ctx.data?.hasPayment (programmatic only)
14
+ * - Mixed arrays: ["user wants to book", (ctx) => !ctx.data?.complete] (hybrid)
15
+ * - Route skipIf: Dynamic route exclusion based on conditions
16
+ * - Step skipIf: Enhanced conditional step skipping
11
17
  */
12
18
 
13
19
  import {
14
20
  Agent,
15
21
  GeminiProvider,
22
+ Tool,
23
+ ValidationError,
16
24
  type Term,
17
25
  type Guideline,
18
- type Tool,
19
- type RouteOptions,
20
26
  } from "../../src/index";
21
27
 
22
28
  // Context type
@@ -40,98 +46,71 @@ interface LabData {
40
46
  resultsNeeded: boolean;
41
47
  }
42
48
 
43
- // Define tools using the new Tool interface
44
- const getInsuranceProviders: Tool<HealthcareContext, HealthcareData, [], string[]> = {
49
+ // Define tools using unified Tool interface
50
+ const getInsuranceProvidersTool: Tool<HealthcareContext, HealthcareData> = {
45
51
  id: "healthcare_insurance_providers",
46
52
  description: "Retrieves list of accepted insurance providers",
47
53
  parameters: {
48
54
  type: "object",
49
55
  properties: {},
50
56
  },
51
- handler: () => {
57
+ handler: async (context, args) => {
52
58
  return {
53
- data: ["MegaCare Insurance", "HealthFirst", "WellnessPlus"],
59
+ data: "Available insurance providers: MegaCare Insurance, HealthFirst, WellnessPlus",
54
60
  };
55
61
  },
56
62
  };
57
63
 
58
- const getAvailableSlots: Tool<
59
- HealthcareContext,
60
- HealthcareData,
61
- [],
62
- { date: string; time: string }[]
63
- > = {
64
+ const getAvailableSlotsTool: Tool<HealthcareContext, HealthcareData> = {
64
65
  id: "healthcare_available_slots",
65
66
  description: "Gets available appointment slots",
66
67
  parameters: {
67
68
  type: "object",
68
69
  properties: {},
69
70
  },
70
- handler: () => {
71
+ handler: async (context, args) => {
71
72
  return {
72
- data: [
73
- { date: "2025-10-20", time: "10:00 AM" },
74
- { date: "2025-10-20", time: "2:00 PM" },
75
- { date: "2025-10-21", time: "1:00 PM" },
76
- ],
73
+ data: "Available slots: Oct 20 at 10:00 AM, Oct 20 at 2:00 PM, Oct 21 at 1:00 PM",
77
74
  };
78
75
  },
79
76
  };
80
77
 
81
- const getLabResults: Tool<
82
- HealthcareContext,
83
- HealthcareData,
84
- [],
85
- { report: string; status: string }
86
- > = {
78
+ const getLabResultsTool: Tool<HealthcareContext, HealthcareData> = {
87
79
  id: "healthcare_lab_results",
88
80
  description: "Retrieves patient lab results",
89
81
  parameters: {
90
82
  type: "object",
91
83
  properties: {},
92
84
  },
93
- handler: ({ context, data }) => {
85
+ handler: async (toolContext, args) => {
94
86
  // Tools can access collected data and context
95
- if (data?.testType) {
87
+ if (toolContext.data?.testType) {
96
88
  return {
97
- data: {
98
- report: `${data.testType} results for ${context.patientName}`,
99
- status: "All values within normal range",
100
- },
89
+ data: `${toolContext.data.testType} results for ${toolContext.context.patientName}: All values within normal range`,
101
90
  };
102
91
  }
103
92
 
104
93
  return {
105
- data: {
106
- report: `Lab results for ${context.patientName}`,
107
- status: "All values within normal range",
108
- },
94
+ data: `Lab results for ${toolContext.context.patientName}: All values within normal range`,
109
95
  };
110
96
  },
111
97
  };
112
98
 
113
- const scheduleAppointment: Tool<
114
- HealthcareContext,
115
- HealthcareData,
116
- [],
117
- { confirmation: string }
118
- > = {
99
+ const scheduleAppointmentTool: Tool<HealthcareContext, HealthcareData> = {
119
100
  id: "healthcare_schedule_appointment",
120
101
  description: "Schedules patient appointments",
121
102
  parameters: {
122
103
  type: "object",
123
104
  properties: {},
124
105
  },
125
- handler: ({ data }) => {
106
+ handler: async (context, args) => {
126
107
  // Tools access collected appointment data
127
- if (!data?.preferredDate || !data?.preferredTime) {
128
- return { data: { confirmation: "Please provide appointment details" } };
108
+ if (!context.data?.preferredDate || !context.data?.preferredTime) {
109
+ return { data: "Please provide appointment details" };
129
110
  }
130
111
 
131
112
  return {
132
- data: {
133
- confirmation: `Appointment scheduled for ${data.preferredDate} at ${data.preferredTime}`,
134
- },
113
+ data: `Appointment scheduled for ${context.data.preferredDate} at ${context.data.preferredTime}`,
135
114
  };
136
115
  },
137
116
  };
@@ -156,31 +135,53 @@ const terms: Term<HealthcareContext>[] = [
156
135
 
157
136
  const guidelines: Guideline<HealthcareContext>[] = [
158
137
  {
138
+ // String-only condition for AI context
159
139
  condition: "The patient asks about insurance",
160
140
  action:
161
141
  "List the insurance providers we accept and tell them to call the office for more details",
162
142
  tags: ["insurance", "billing"],
163
143
  },
164
144
  {
165
- condition: "The patient asks to talk to a human agent",
145
+ // Mixed condition: AI context + programmatic check
146
+ condition: [
147
+ "The patient asks to talk to a human agent",
148
+ (ctx) => ctx.context?.patientName !== undefined // Only if we have patient info
149
+ ],
166
150
  action: ({ context }: { context?: HealthcareContext }) =>
167
151
  `Of course. You can reach our office at +1-234-567-8900 during office hours (Monday to Friday, 9 AM to 5 PM). I've noted that you'd like to speak with someone, and I can have a representative call you back if you'd like, ${context?.patientName}.`,
168
152
  tags: ["escalation"],
169
153
  },
170
154
  {
171
- condition: "The patient inquires about something unrelated to healthcare",
155
+ // Function-only condition for programmatic logic
156
+ condition: (ctx) => {
157
+ const event = ctx.history?.[ctx.history.length - 1]
158
+ if(event && "content" in event){
159
+ const message = (event.content as string).toLocaleLowerCase() || '';
160
+ return !message.includes('health') && !message.includes('medical') && !message.includes('appointment');
161
+ }
162
+ return false
163
+ },
172
164
  action:
173
165
  "Kindly tell them you cannot assist with off-topic inquiries - do not engage",
174
166
  tags: ["off-topic"],
175
167
  },
176
168
  ];
177
169
 
178
- const routes: RouteOptions<HealthcareContext, HealthcareData>[] = [
170
+ const routes = [
179
171
  {
180
172
  id: "route_schedule_appointment",
181
173
  title: "Schedule Appointment",
182
174
  description: "Helps the patient schedule an appointment",
183
- conditions: ["The patient wants to schedule an appointment"],
175
+ // Mixed condition: AI context + programmatic check
176
+ when: [
177
+ "The patient wants to schedule an appointment",
178
+ (ctx) => !ctx.data?.orderId // Only if no existing order
179
+ ],
180
+ // Skip if patient already has urgent medical needs
181
+ skipIf: [
182
+ "patient has urgent medical emergency",
183
+ (ctx) => ctx.data?.urgency === "high"
184
+ ],
184
185
  // NEW: Required fields for route completion (instead of schema)
185
186
  requiredFields: ["appointmentType", "preferredDate", "preferredTime"],
186
187
  // NEW: Optional fields that enhance the experience
@@ -214,40 +215,35 @@ const routes: RouteOptions<HealthcareContext, HealthcareData>[] = [
214
215
  description: "Ask about symptoms",
215
216
  prompt: "Are you experiencing any symptoms?",
216
217
  collect: ["symptoms"],
217
- skipIf: (data: Partial<HealthcareData>) =>
218
- data.appointmentType === "checkup", // Skip for checkups
218
+ // Mixed skipIf: AI context + programmatic logic
219
+ skipIf: [
220
+ "routine checkup doesn't need symptom details",
221
+ (data: Partial<HealthcareData>) => data.appointmentType === "checkup"
222
+ ],
219
223
  },
220
224
  {
221
225
  id: "schedule_appointment",
222
226
  description: "Schedule the appointment",
223
227
  prompt: "I'll schedule your appointment now.",
224
- tools: [scheduleAppointment], // Use the scheduling tool
228
+ tools: [scheduleAppointmentTool], // Inline tool - only available on this step
225
229
  requires: ["preferredDate", "preferredTime"],
226
- prepare: getInsuranceProviders, // Use existing tool to prepare insurance info
227
- finalize: {
228
- // Inline tool to handle appointment finalization
229
- id: "finalize_appointment",
230
- description: "Complete the appointment booking process",
231
- parameters: { type: "object", properties: {} },
232
- handler: ({ context, data }) => {
233
- console.log(`✅ Appointment finalized for ${context.patientName}`);
234
- console.log(`📅 Details: ${JSON.stringify(data, null, 2)}`);
235
-
236
- // Could send confirmation email, update calendar, etc.
237
- return {
238
- data: `Appointment confirmed for ${context.patientName}`,
239
- };
240
- },
241
- },
230
+ prepare: "healthcare_insurance_providers", // Reference by ID
231
+ finalize: "finalize_appointment", // Reference by ID - will be registered later
242
232
  },
243
233
  ],
244
- tools: [getAvailableSlots], // Route-level tools available to all steps
234
+ tools: ["healthcare_available_slots"], // Reference by ID
245
235
  },
246
236
  {
247
237
  id: "route_check_lab_results",
248
238
  title: "Check Lab Results",
249
239
  description: "Retrieves and explains patient lab results",
250
- conditions: ["The patient wants to see their lab results"],
240
+ // Function-only condition for programmatic logic
241
+ when: (ctx) => {
242
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
243
+ return message.includes('lab') || message.includes('test') || message.includes('results');
244
+ },
245
+ // Skip if no patient ID available
246
+ skipIf: (ctx) => !ctx.context?.patientId,
251
247
  // NEW: Required fields for route completion
252
248
  requiredFields: ["testType"],
253
249
  // NEW: Optional fields
@@ -260,12 +256,13 @@ const routes: RouteOptions<HealthcareContext, HealthcareData>[] = [
260
256
  tags: ["escalation"],
261
257
  },
262
258
  ],
263
- tools: [getLabResults], // Route-level tools
259
+ tools: ["healthcare_lab_results"], // Reference by ID
264
260
  },
265
261
  {
266
262
  title: "General Healthcare Questions",
267
263
  description: "Answer general healthcare questions",
268
- conditions: ["Patient asks general healthcare questions"],
264
+ // String-only condition for AI context
265
+ when: "Patient asks general healthcare questions",
269
266
  // No required fields - conversational Q&A
270
267
  },
271
268
  ];
@@ -334,8 +331,90 @@ const agent = new Agent<HealthcareContext, HealthcareData>({
334
331
  // Declarative initialization
335
332
  terms,
336
333
  guidelines,
337
- tools: [getInsuranceProviders], // Agent-level tools
338
- routes,
334
+ // Enable debug logging
335
+ debug: true,
336
+ });
337
+
338
+ // Demonstrate different tool registration approaches
339
+
340
+ // Method 1: Register tools for ID-based reference in routes
341
+ // Note: scheduleAppointmentTool is NOT registered globally - it's only available on the specific step
342
+ agent.tool.registerMany([
343
+ getInsuranceProvidersTool,
344
+ getAvailableSlotsTool,
345
+ getLabResultsTool,
346
+ // scheduleAppointmentTool, // Commented out - will be added to specific step only
347
+ ]);
348
+
349
+ // Method 2: Create and register specialized tools
350
+ const appointmentValidator = agent.tool.createValidation({
351
+ id: "validate_appointment",
352
+ fields: ["appointmentType", "preferredDate", "preferredTime"] as const,
353
+ validator: async (context, data) => {
354
+ const errors: ValidationError[] = [];
355
+ if (!data.appointmentType) errors.push({
356
+ field: "appointmentType",
357
+ value: data.appointmentType,
358
+ message: "Appointment type is required",
359
+ schemaPath: "appointmentType"
360
+ });
361
+ if (!data.preferredDate) errors.push({
362
+ field: "preferredDate",
363
+ value: data.preferredDate,
364
+ message: "Preferred date is required",
365
+ schemaPath: "preferredDate"
366
+ });
367
+ if (!data.preferredTime) errors.push({
368
+ field: "preferredTime",
369
+ value: data.preferredTime,
370
+ message: "Preferred time is required",
371
+ schemaPath: "preferredTime"
372
+ });
373
+
374
+ return {
375
+ valid: errors.length === 0,
376
+ errors,
377
+ warnings: [],
378
+ };
379
+ },
380
+ });
381
+
382
+ // Method 3: Create data enrichment tool
383
+ const patientDataEnricher = agent.tool.createDataEnrichment({
384
+ id: "enrich_patient_data",
385
+ fields: ["appointmentType", "symptoms"] as const,
386
+ enricher: async (context, data) => {
387
+ // Add urgency classification based on symptoms - return fields that exist in HealthcareData
388
+ const urgentKeywords = ["chest pain", "difficulty breathing", "severe", "emergency"];
389
+ const hasUrgentSymptoms = data.symptoms && urgentKeywords.some(keyword =>
390
+ data.symptoms!.toLowerCase().includes(keyword)
391
+ );
392
+
393
+ return {
394
+ urgency: hasUrgentSymptoms ? "high" : "medium", // This matches the urgency field in HealthcareData
395
+ };
396
+ },
397
+ });
398
+
399
+ // Method 4: Create tool using tool.create()
400
+ const finalizeAppointmentTool = agent.tool.create({
401
+ id: "finalize_appointment",
402
+ description: "Complete the appointment booking process",
403
+ parameters: { type: "object", properties: {} },
404
+ handler: async (context, args) => {
405
+ console.log(`✅ Appointment finalized for ${context.context.patientName}`);
406
+ console.log(`📅 Details: ${JSON.stringify(context.data, null, 2)}`);
407
+
408
+ // Could send confirmation email, update calendar, etc.
409
+ return {
410
+ data: `Appointment confirmed for ${context.context.patientName}`,
411
+ };
412
+ },
413
+ });
414
+
415
+ // Add routes after tools are registered
416
+ routes.forEach((route: any) => {
417
+ agent.createRoute(route);
339
418
  });
340
419
 
341
420
  // You can still add more dynamically after construction
@@ -359,45 +438,26 @@ async function main() {
359
438
 
360
439
  // Turn 1 - Agent responds and routes to appropriate flow
361
440
  console.log("🔄 Turn 1: Initial inquiry");
362
- await agent.session.addMessage("user", "Hi, I need to follow up on my recent visit", "Alice");
363
-
364
- const response1 = await agent.respond({
365
- history: agent.session.getHistory()
366
- });
441
+ const response1 = await agent.chat("Hi, I need to follow up on my recent visit");
367
442
 
368
443
  console.log("🤖 Agent:", response1.message);
369
444
  console.log("🛤️ Route chosen:", response1.session?.currentRoute?.title);
370
445
 
371
- await agent.session.addMessage("assistant", response1.message);
372
-
373
446
  // Turn 2 - User provides more details
374
447
  console.log("\n🔄 Turn 2: Providing appointment details");
375
- await agent.session.addMessage("user", "I need a checkup next Tuesday at 2 PM", "Alice");
376
-
377
- const response2 = await agent.respond({
378
- history: agent.session.getHistory()
379
- });
448
+ const response2 = await agent.chat("I need a checkup next Tuesday at 2 PM");
380
449
 
381
450
  console.log("🤖 Agent:", response2.message);
382
451
  console.log("📊 Collected data:", agent.session.getData());
383
452
  console.log("📍 Current step:", response2.session?.currentStep?.id);
384
453
 
385
- await agent.session.addMessage("assistant", response2.message);
386
-
387
454
  // Turn 3 - Continue the conversation flow
388
455
  console.log("\n🔄 Turn 3: Continuing appointment booking");
389
-
390
- await agent.session.addMessage("user", "I'm feeling a bit anxious about the visit", "Alice");
391
-
392
- const response3 = await agent.respond({
393
- history: agent.session.getHistory()
394
- });
456
+ const response3 = await agent.chat("I'm feeling a bit anxious about the visit");
395
457
 
396
458
  console.log("🤖 Agent:", response3.message);
397
459
  console.log("📊 Updated data:", agent.session.getData());
398
460
  console.log("📍 Current step:", response3.session?.currentStep?.id);
399
-
400
- await agent.session.addMessage("assistant", response3.message);
401
461
 
402
462
  // Check for route completion
403
463
  if (response3.isRouteComplete && response3.session) {
@@ -8,7 +8,11 @@
8
8
  * - Schema-first data definition
9
9
  * - Type-safe data extraction
10
10
  * - Automatic validation
11
- * - SkipIf conditions for smart flow control
11
+ * - NEW: Flexible ConditionTemplate patterns for routing and step control:
12
+ * - String-only conditions: "user wants to register" (AI context only)
13
+ * - Function-only conditions: (ctx) => ctx.data?.complete (programmatic only)
14
+ * - Mixed arrays: ["user provided info", (ctx) => !!ctx.data?.name] (hybrid)
15
+ * - Enhanced skipIf conditions for smart flow control
12
16
  */
13
17
 
14
18
  import { Agent, GeminiProvider, type Tool } from "../../src/index";
@@ -23,22 +27,22 @@ interface UserProfileData {
23
27
  newsletterOptIn: boolean;
24
28
  }
25
29
 
26
- // Define a tool that uses the collected data
27
- const saveUserProfile: Tool<unknown, UserProfileData, [], string> = {
30
+ // Define a tool that uses the collected data - using unified Tool interface
31
+ const saveUserProfileTool: Tool<unknown, UserProfileData> = {
28
32
  id: "save_user_profile",
29
33
  description: "Save the collected user profile information",
30
34
  parameters: {
31
35
  type: "object",
32
36
  properties: {},
33
37
  },
34
- handler: ({ data }) => {
35
- console.log("Saving user profile:", data);
38
+ handler: async (context, args) => {
39
+ console.log("Saving user profile:", context.data);
36
40
 
37
41
  // Simulate saving to database
38
- console.log("Profile data:", data);
42
+ console.log("Profile data:", context.data);
39
43
 
40
44
  return {
41
- data: `Profile saved successfully! Welcome ${data?.name}!`,
45
+ data: `Profile saved successfully! Welcome ${context.data?.name}!`,
42
46
  };
43
47
  },
44
48
  };
@@ -99,10 +103,23 @@ const agent = new Agent<unknown, UserProfileData>({
99
103
  schema: userProfileSchema,
100
104
  });
101
105
 
106
+ // Add tool using unified interface
107
+ agent.addTool(saveUserProfileTool);
108
+
102
109
  // Create a route that collects profile information step by step
103
110
  agent.createRoute({
104
111
  title: "User Profile Collection",
105
112
  description: "Collect comprehensive user profile information",
113
+ // Mixed condition: AI context + programmatic validation
114
+ when: [
115
+ "user wants to create a profile or register",
116
+ (ctx) => {
117
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
118
+ return message.includes('profile') || message.includes('register') || message.includes('sign up');
119
+ }
120
+ ],
121
+ // Skip if user already has a complete profile
122
+ skipIf: (ctx) => Boolean(ctx.data?.name && ctx.data?.email && ctx.data?.age),
106
123
  // NEW: Required fields for route completion (instead of schema)
107
124
  requiredFields: ["name", "email"],
108
125
  // NEW: Optional fields that enhance the experience
@@ -114,7 +131,8 @@ agent.createRoute({
114
131
  description: "Ask for user's name",
115
132
  prompt: "Hi! I'd like to create a profile for you. What's your name?",
116
133
  collect: ["name"],
117
- skipIf: (data: Partial<UserProfileData>) => !!data.name,
134
+ // String-only skipIf for AI context
135
+ skipIf: "user already provided their name",
118
136
  },
119
137
  {
120
138
  id: "ask_email",
@@ -122,7 +140,8 @@ agent.createRoute({
122
140
  prompt: "What's your email address?",
123
141
  collect: ["email"],
124
142
  requires: ["name"],
125
- skipIf: (data: Partial<UserProfileData>) => !!data.email,
143
+ // Function-only skipIf for programmatic logic
144
+ skipIf: (ctx) => !!ctx.data?.email,
126
145
  },
127
146
  {
128
147
  id: "ask_age",
@@ -130,7 +149,11 @@ agent.createRoute({
130
149
  prompt: "How old are you? (optional)",
131
150
  collect: ["age"],
132
151
  requires: ["name", "email"],
133
- skipIf: (data: Partial<UserProfileData>) => data.age !== undefined,
152
+ // Mixed skipIf: AI context + programmatic check
153
+ skipIf: [
154
+ "age already collected",
155
+ (ctx) => ctx.data?.age !== undefined
156
+ ],
134
157
  },
135
158
  {
136
159
  id: "ask_interests",
@@ -138,8 +161,11 @@ agent.createRoute({
138
161
  prompt: "What are your interests or hobbies? (optional)",
139
162
  collect: ["interests"],
140
163
  requires: ["name", "email"],
141
- skipIf: (data: Partial<UserProfileData>) =>
142
- !!(data.interests && data.interests.length > 0),
164
+ // Mixed skipIf with complex logic
165
+ skipIf: [
166
+ "interests already provided",
167
+ (ctx) => !!(ctx.data?.interests && ctx.data.interests.length > 0)
168
+ ],
143
169
  },
144
170
  {
145
171
  id: "ask_contact_preference",
@@ -147,7 +173,8 @@ agent.createRoute({
147
173
  prompt: "What's your preferred contact method?",
148
174
  collect: ["preferredContact"],
149
175
  requires: ["name", "email"],
150
- skipIf: (data: Partial<UserProfileData>) => !!data.preferredContact,
176
+ // Function-only skipIf
177
+ skipIf: (ctx) => !!ctx.data?.preferredContact,
151
178
  },
152
179
  {
153
180
  id: "ask_newsletter",
@@ -155,15 +182,15 @@ agent.createRoute({
155
182
  prompt: "Would you like to subscribe to our newsletter?",
156
183
  collect: ["newsletterOptIn"],
157
184
  requires: ["name", "email"],
158
- skipIf: (data: Partial<UserProfileData>) =>
159
- data.newsletterOptIn !== undefined,
185
+ // String-only skipIf for simple cases
186
+ skipIf: "newsletter preference already collected",
160
187
  },
161
188
  {
162
189
  id: "save_profile",
163
190
  description: "Save the collected profile",
164
191
  prompt:
165
192
  "Thanks for providing your information! Let me save your profile.",
166
- tools: [saveUserProfile],
193
+ tools: ["save_user_profile"], // Reference by ID
167
194
  requires: ["name", "email"],
168
195
  },
169
196
  ],