@falai/agent 0.9.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +281 -42
  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/cjs/{src/core → core}/Agent.d.ts +16 -1
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +63 -2
  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 +850 -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 +217 -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 +211 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +34 -5
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/{src/core → core}/Route.js +196 -19
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/cjs/core/SessionManager.js.map +1 -0
  70. package/dist/{src → cjs}/core/Step.d.ts +31 -10
  71. package/dist/cjs/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/{src/core → core}/Step.js +105 -10
  73. package/dist/cjs/core/Step.js.map +1 -0
  74. package/dist/cjs/core/ToolManager.js.map +1 -0
  75. package/dist/{src → cjs}/index.d.ts +4 -1
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/{src/index.js → index.js} +12 -1
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  80. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  81. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  82. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  83. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  84. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  85. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  86. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  87. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  88. package/dist/cjs/providers/index.js.map +1 -0
  89. package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
  90. package/dist/cjs/types/agent.d.ts.map +1 -0
  91. package/dist/cjs/types/agent.js.map +1 -0
  92. package/dist/{src → cjs}/types/ai.js.map +1 -1
  93. package/dist/cjs/types/history.js.map +1 -0
  94. package/dist/cjs/{src/types → types}/index.d.ts +2 -1
  95. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  96. package/dist/cjs/{src/types → types}/index.js +6 -1
  97. package/dist/cjs/types/index.js.map +1 -0
  98. package/dist/cjs/types/persistence.js.map +1 -0
  99. package/dist/cjs/{src/types → types}/route.d.ts +111 -12
  100. package/dist/cjs/types/route.d.ts.map +1 -0
  101. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  102. package/dist/cjs/types/session.js.map +1 -0
  103. package/dist/cjs/types/template.d.ts +88 -0
  104. package/dist/cjs/types/template.d.ts.map +1 -0
  105. package/dist/cjs/types/tool.js.map +1 -0
  106. package/dist/cjs/utils/clone.js.map +1 -0
  107. package/dist/cjs/utils/condition.d.ts +38 -0
  108. package/dist/cjs/utils/condition.d.ts.map +1 -0
  109. package/dist/cjs/utils/condition.js +168 -0
  110. package/dist/cjs/utils/condition.js.map +1 -0
  111. package/dist/cjs/utils/event.js.map +1 -0
  112. package/dist/cjs/utils/history.js.map +1 -0
  113. package/dist/cjs/utils/id.js.map +1 -0
  114. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  115. package/dist/cjs/utils/index.d.ts.map +1 -0
  116. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  117. package/dist/cjs/utils/index.js.map +1 -0
  118. package/dist/cjs/utils/json.d.ts +16 -0
  119. package/dist/cjs/utils/json.d.ts.map +1 -0
  120. package/dist/cjs/utils/json.js +47 -0
  121. package/dist/cjs/utils/json.js.map +1 -0
  122. package/dist/cjs/utils/logger.js.map +1 -0
  123. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  124. package/dist/cjs/utils/retry.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  126. package/dist/cjs/utils/retry.js.map +1 -0
  127. package/dist/cjs/utils/session.js.map +1 -0
  128. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  129. package/dist/cjs/utils/template.d.ts.map +1 -0
  130. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  131. package/dist/cjs/utils/template.js.map +1 -0
  132. package/dist/constants/index.d.ts.map +1 -0
  133. package/dist/constants/index.js.map +1 -0
  134. package/dist/{src/core → core}/Agent.d.ts +16 -1
  135. package/dist/core/Agent.d.ts.map +1 -0
  136. package/dist/{src/core → core}/Agent.js +64 -3
  137. package/dist/core/Agent.js.map +1 -0
  138. package/dist/core/BatchExecutor.d.ts +353 -0
  139. package/dist/core/BatchExecutor.d.ts.map +1 -0
  140. package/dist/core/BatchExecutor.js +845 -0
  141. package/dist/core/BatchExecutor.js.map +1 -0
  142. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  143. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  144. package/dist/core/BatchPromptBuilder.js +213 -0
  145. package/dist/core/BatchPromptBuilder.js.map +1 -0
  146. package/dist/core/Events.d.ts.map +1 -0
  147. package/dist/core/Events.js.map +1 -0
  148. package/dist/core/PersistenceManager.d.ts.map +1 -0
  149. package/dist/core/PersistenceManager.js.map +1 -0
  150. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  151. package/dist/core/PromptComposer.d.ts.map +1 -0
  152. package/dist/{src/core → core}/PromptComposer.js +45 -8
  153. package/dist/core/PromptComposer.js.map +1 -0
  154. package/dist/core/ResponseEngine.d.ts.map +1 -0
  155. package/dist/core/ResponseEngine.js +207 -0
  156. package/dist/core/ResponseEngine.js.map +1 -0
  157. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
  158. package/dist/core/ResponseModal.d.ts.map +1 -0
  159. package/dist/{src/core → core}/ResponseModal.js +752 -74
  160. package/dist/core/ResponseModal.js.map +1 -0
  161. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
  162. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  163. package/dist/{src/core → core}/ResponsePipeline.js +13 -6
  164. package/dist/core/ResponsePipeline.js.map +1 -0
  165. package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
  166. package/dist/core/Route.d.ts.map +1 -0
  167. package/dist/{src/core → core}/Route.js +195 -18
  168. package/dist/core/Route.js.map +1 -0
  169. package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
  170. package/dist/core/RoutingEngine.d.ts.map +1 -0
  171. package/dist/{src/core → core}/RoutingEngine.js +310 -60
  172. package/dist/core/RoutingEngine.js.map +1 -0
  173. package/dist/core/SessionManager.d.ts.map +1 -0
  174. package/dist/core/SessionManager.js.map +1 -0
  175. package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
  176. package/dist/core/Step.d.ts.map +1 -0
  177. package/dist/{src/core → core}/Step.js +104 -9
  178. package/dist/core/Step.js.map +1 -0
  179. package/dist/core/ToolManager.d.ts.map +1 -0
  180. package/dist/core/ToolManager.js.map +1 -0
  181. package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/{src/index.js → index.js} +3 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  186. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  187. package/dist/providers/AnthropicProvider.js.map +1 -0
  188. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  189. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  190. package/dist/providers/GeminiProvider.js.map +1 -0
  191. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  192. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  193. package/dist/providers/OpenAIProvider.js.map +1 -0
  194. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  195. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  196. package/dist/providers/OpenRouterProvider.js.map +1 -0
  197. package/dist/providers/index.d.ts.map +1 -0
  198. package/dist/providers/index.js.map +1 -0
  199. package/dist/{src/types → types}/agent.d.ts +15 -3
  200. package/dist/types/agent.d.ts.map +1 -0
  201. package/dist/types/agent.js.map +1 -0
  202. package/dist/types/ai.d.ts.map +1 -0
  203. package/dist/types/ai.js.map +1 -0
  204. package/dist/types/history.d.ts.map +1 -0
  205. package/dist/types/history.js.map +1 -0
  206. package/dist/{src/types → types}/index.d.ts +2 -1
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/{src/types → types}/index.js +1 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/persistence.d.ts.map +1 -0
  211. package/dist/types/persistence.js.map +1 -0
  212. package/dist/{src/types → types}/route.d.ts +111 -12
  213. package/dist/types/route.d.ts.map +1 -0
  214. package/dist/{src/types → types}/route.js.map +1 -1
  215. package/dist/types/routing.d.ts.map +1 -0
  216. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  217. package/dist/types/schema.d.ts.map +1 -0
  218. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  219. package/dist/types/session.d.ts.map +1 -0
  220. package/dist/{src/types → types}/session.js.map +1 -1
  221. package/dist/types/template.d.ts +88 -0
  222. package/dist/types/template.d.ts.map +1 -0
  223. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  224. package/dist/types/tool.d.ts.map +1 -0
  225. package/dist/types/tool.js.map +1 -0
  226. package/dist/utils/clone.d.ts.map +1 -0
  227. package/dist/utils/clone.js.map +1 -0
  228. package/dist/utils/condition.d.ts +38 -0
  229. package/dist/utils/condition.d.ts.map +1 -0
  230. package/dist/utils/condition.js +161 -0
  231. package/dist/utils/condition.js.map +1 -0
  232. package/dist/utils/event.d.ts.map +1 -0
  233. package/dist/utils/event.js.map +1 -0
  234. package/dist/utils/history.d.ts.map +1 -0
  235. package/dist/utils/history.js.map +1 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js.map +1 -0
  238. package/dist/{src/utils → utils}/index.d.ts +3 -1
  239. package/dist/utils/index.d.ts.map +1 -0
  240. package/dist/{src/utils → utils}/index.js +5 -1
  241. package/dist/utils/index.js.map +1 -0
  242. package/dist/utils/json.d.ts +16 -0
  243. package/dist/utils/json.d.ts.map +1 -0
  244. package/dist/utils/json.js +43 -0
  245. package/dist/utils/json.js.map +1 -0
  246. package/dist/utils/logger.d.ts.map +1 -0
  247. package/dist/utils/logger.js.map +1 -0
  248. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  249. package/dist/utils/retry.d.ts.map +1 -0
  250. package/dist/{src/utils → utils}/retry.js +5 -4
  251. package/dist/utils/retry.js.map +1 -0
  252. package/dist/utils/session.d.ts.map +1 -0
  253. package/dist/utils/session.js.map +1 -0
  254. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  255. package/dist/utils/template.d.ts.map +1 -0
  256. package/dist/{src/utils → utils}/template.js +98 -0
  257. package/dist/utils/template.js.map +1 -0
  258. package/docs/README.md +1 -0
  259. package/docs/api/README.md +237 -12
  260. package/docs/api/overview.md +206 -3
  261. package/docs/architecture/data-extraction-flow.md +363 -0
  262. package/docs/architecture/multi-step-execution.md +243 -0
  263. package/docs/core/agent/README.md +156 -5
  264. package/docs/core/agent/rules-and-prohibitions.md +113 -0
  265. package/docs/core/agent/session-management.md +1 -1
  266. package/docs/core/ai-integration/prompt-composition.md +135 -0
  267. package/docs/core/ai-integration/response-processing.md +146 -0
  268. package/docs/core/conversation-flows/data-collection.md +143 -0
  269. package/docs/core/conversation-flows/routes.md +2 -2
  270. package/docs/core/conversation-flows/step-transitions.md +132 -0
  271. package/docs/core/conversation-flows/steps.md +112 -0
  272. package/docs/core/error-handling.md +193 -0
  273. package/docs/core/routing/intelligent-routing.md +118 -0
  274. package/docs/guides/getting-started/README.md +284 -3
  275. package/docs/guides/migration/README.md +27 -0
  276. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  277. package/docs/guides/migration/multi-step-execution.md +373 -0
  278. package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
  279. package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
  280. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  281. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  282. package/examples/ai-providers/anthropic-integration.ts +4 -4
  283. package/examples/ai-providers/openai-integration.ts +1 -1
  284. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  285. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  286. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  287. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  288. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  289. package/examples/conversation-flows/completion-transitions.ts +48 -7
  290. package/examples/core-concepts/basic-agent.ts +54 -33
  291. package/examples/core-concepts/schema-driven-extraction.ts +33 -9
  292. package/examples/core-concepts/session-management.ts +51 -16
  293. package/examples/integrations/database-integration.ts +6 -6
  294. package/examples/integrations/healthcare-integration.ts +10 -10
  295. package/examples/integrations/search-integration.ts +8 -8
  296. package/examples/integrations/server-session-management.ts +8 -8
  297. package/examples/persistence/database-persistence.ts +15 -15
  298. package/examples/persistence/memory-sessions.ts +3 -3
  299. package/examples/persistence/redis-persistence.ts +7 -9
  300. package/examples/tools/data-enrichment-tools.ts +4 -4
  301. package/package.json +6 -4
  302. package/src/adapters/PrismaAdapter.ts +3 -2
  303. package/src/adapters/RedisAdapter.ts +3 -3
  304. package/src/core/Agent.ts +78 -2
  305. package/src/core/BatchExecutor.ts +1166 -0
  306. package/src/core/BatchPromptBuilder.ts +293 -0
  307. package/src/core/PromptComposer.ts +53 -16
  308. package/src/core/ResponseEngine.ts +168 -29
  309. package/src/core/ResponseModal.ts +954 -74
  310. package/src/core/ResponsePipeline.ts +17 -9
  311. package/src/core/Route.ts +223 -22
  312. package/src/core/RoutingEngine.ts +426 -83
  313. package/src/core/Step.ts +144 -16
  314. package/src/index.ts +19 -0
  315. package/src/providers/AnthropicProvider.ts +17 -17
  316. package/src/providers/GeminiProvider.ts +129 -60
  317. package/src/providers/OpenAIProvider.ts +18 -18
  318. package/src/providers/OpenRouterProvider.ts +18 -18
  319. package/src/types/agent.ts +15 -3
  320. package/src/types/index.ts +12 -1
  321. package/src/types/route.ts +131 -12
  322. package/src/types/template.ts +70 -2
  323. package/src/utils/condition.ts +190 -0
  324. package/src/utils/index.ts +12 -0
  325. package/src/utils/json.ts +46 -0
  326. package/src/utils/retry.ts +5 -4
  327. package/src/utils/template.ts +109 -0
  328. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  329. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  330. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  331. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  332. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  333. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  334. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  335. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  336. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  337. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  338. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  339. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  340. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  341. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  342. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  343. package/dist/cjs/src/adapters/index.js.map +0 -1
  344. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  345. package/dist/cjs/src/constants/index.js.map +0 -1
  346. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  347. package/dist/cjs/src/core/Agent.js.map +0 -1
  348. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  349. package/dist/cjs/src/core/Events.js.map +0 -1
  350. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  351. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  352. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  353. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  354. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  355. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  356. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  357. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  358. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  359. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  360. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  361. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  362. package/dist/cjs/src/core/Route.js.map +0 -1
  363. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  364. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  365. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  366. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  367. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  368. package/dist/cjs/src/core/Step.js.map +0 -1
  369. package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
  370. package/dist/cjs/src/core/ToolManager.js.map +0 -1
  371. package/dist/cjs/src/index.d.ts.map +0 -1
  372. package/dist/cjs/src/index.js.map +0 -1
  373. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  374. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  375. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  376. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  377. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  378. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  379. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  380. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  381. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  382. package/dist/cjs/src/providers/index.js.map +0 -1
  383. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  384. package/dist/cjs/src/types/agent.js.map +0 -1
  385. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  386. package/dist/cjs/src/types/ai.js.map +0 -1
  387. package/dist/cjs/src/types/history.d.ts.map +0 -1
  388. package/dist/cjs/src/types/history.js.map +0 -1
  389. package/dist/cjs/src/types/index.d.ts.map +0 -1
  390. package/dist/cjs/src/types/index.js.map +0 -1
  391. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  392. package/dist/cjs/src/types/persistence.js.map +0 -1
  393. package/dist/cjs/src/types/route.d.ts.map +0 -1
  394. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  395. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  396. package/dist/cjs/src/types/session.d.ts.map +0 -1
  397. package/dist/cjs/src/types/session.js.map +0 -1
  398. package/dist/cjs/src/types/template.d.ts +0 -30
  399. package/dist/cjs/src/types/template.d.ts.map +0 -1
  400. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  401. package/dist/cjs/src/types/tool.js.map +0 -1
  402. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  403. package/dist/cjs/src/utils/clone.js.map +0 -1
  404. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  405. package/dist/cjs/src/utils/event.js.map +0 -1
  406. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  407. package/dist/cjs/src/utils/history.js.map +0 -1
  408. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  409. package/dist/cjs/src/utils/id.js.map +0 -1
  410. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  411. package/dist/cjs/src/utils/index.js.map +0 -1
  412. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  413. package/dist/cjs/src/utils/logger.js.map +0 -1
  414. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  415. package/dist/cjs/src/utils/retry.js.map +0 -1
  416. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  417. package/dist/cjs/src/utils/session.js.map +0 -1
  418. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  419. package/dist/cjs/src/utils/template.js.map +0 -1
  420. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  421. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  422. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  423. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  424. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  426. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  427. package/dist/src/adapters/index.js.map +0 -1
  428. package/dist/src/constants/index.js.map +0 -1
  429. package/dist/src/core/Agent.d.ts.map +0 -1
  430. package/dist/src/core/Agent.js.map +0 -1
  431. package/dist/src/core/Events.js.map +0 -1
  432. package/dist/src/core/PersistenceManager.js.map +0 -1
  433. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  434. package/dist/src/core/PromptComposer.js.map +0 -1
  435. package/dist/src/core/ResponseEngine.js +0 -80
  436. package/dist/src/core/ResponseEngine.js.map +0 -1
  437. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  438. package/dist/src/core/ResponseModal.js.map +0 -1
  439. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  440. package/dist/src/core/ResponsePipeline.js.map +0 -1
  441. package/dist/src/core/Route.d.ts.map +0 -1
  442. package/dist/src/core/Route.js.map +0 -1
  443. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  444. package/dist/src/core/RoutingEngine.js.map +0 -1
  445. package/dist/src/core/SessionManager.js.map +0 -1
  446. package/dist/src/core/Step.d.ts.map +0 -1
  447. package/dist/src/core/Step.js.map +0 -1
  448. package/dist/src/core/ToolManager.js.map +0 -1
  449. package/dist/src/index.d.ts.map +0 -1
  450. package/dist/src/index.js.map +0 -1
  451. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  452. package/dist/src/providers/GeminiProvider.js.map +0 -1
  453. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  454. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  455. package/dist/src/providers/index.js.map +0 -1
  456. package/dist/src/types/agent.d.ts.map +0 -1
  457. package/dist/src/types/agent.js.map +0 -1
  458. package/dist/src/types/history.js.map +0 -1
  459. package/dist/src/types/index.js.map +0 -1
  460. package/dist/src/types/persistence.js.map +0 -1
  461. package/dist/src/types/route.d.ts.map +0 -1
  462. package/dist/src/types/template.d.ts +0 -30
  463. package/dist/src/types/template.d.ts.map +0 -1
  464. package/dist/src/types/tool.js.map +0 -1
  465. package/dist/src/utils/clone.js.map +0 -1
  466. package/dist/src/utils/event.js.map +0 -1
  467. package/dist/src/utils/history.js.map +0 -1
  468. package/dist/src/utils/id.js.map +0 -1
  469. package/dist/src/utils/index.d.ts.map +0 -1
  470. package/dist/src/utils/index.js.map +0 -1
  471. package/dist/src/utils/logger.js.map +0 -1
  472. package/dist/src/utils/retry.d.ts.map +0 -1
  473. package/dist/src/utils/retry.js.map +0 -1
  474. package/dist/src/utils/session.js.map +0 -1
  475. package/dist/src/utils/template.d.ts.map +0 -1
  476. package/dist/src/utils/template.js.map +0 -1
  477. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  478. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  479. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  480. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  481. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  482. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  483. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  484. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  485. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  486. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  487. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  488. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  489. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  490. /package/dist/{src/adapters → adapters}/index.js +0 -0
  491. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  492. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  493. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  494. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  495. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  496. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  497. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  498. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  499. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  500. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  501. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  502. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  503. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  504. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  505. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  506. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  507. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  508. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  509. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  510. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  511. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  512. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  513. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  514. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  515. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  516. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  517. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  518. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  519. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  520. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  521. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  522. /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
  523. /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
  524. /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
  525. /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
  526. /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
  527. /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
  528. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  529. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  530. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  531. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  532. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  533. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  534. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  535. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  536. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  537. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  538. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  539. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  540. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  541. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  542. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  543. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  544. /package/dist/cjs/{src/types → types}/history.js +0 -0
  545. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  546. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  547. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  548. /package/dist/cjs/{src/types → types}/route.js +0 -0
  549. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  550. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  551. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  552. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  553. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  554. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  555. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  556. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  557. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  558. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  559. /package/dist/cjs/{src/types → types}/session.js +0 -0
  560. /package/dist/cjs/{src/types → types}/template.js +0 -0
  561. /package/dist/{src → cjs}/types/template.js.map +0 -0
  562. /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
  563. /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
  564. /package/dist/cjs/{src/types → types}/tool.js +0 -0
  565. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  566. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  567. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  568. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  569. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  570. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  571. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  572. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  573. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  574. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  575. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  576. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  577. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  578. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  579. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  580. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  581. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  582. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  583. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  584. /package/dist/{src/constants → constants}/index.js +0 -0
  585. /package/dist/{src/core → core}/Events.d.ts +0 -0
  586. /package/dist/{src/core → core}/Events.js +0 -0
  587. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  588. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  589. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  590. /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
  591. /package/dist/{src/core → core}/SessionManager.js +0 -0
  592. /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
  593. /package/dist/{src/core → core}/ToolManager.js +0 -0
  594. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  595. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  596. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  597. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  598. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  599. /package/dist/{src/providers → providers}/index.js +0 -0
  600. /package/dist/{src/types → types}/agent.js +0 -0
  601. /package/dist/{src/types → types}/ai.d.ts +0 -0
  602. /package/dist/{src/types → types}/ai.js +0 -0
  603. /package/dist/{src/types → types}/history.d.ts +0 -0
  604. /package/dist/{src/types → types}/history.js +0 -0
  605. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  606. /package/dist/{src/types → types}/persistence.js +0 -0
  607. /package/dist/{src/types → types}/route.js +0 -0
  608. /package/dist/{src/types → types}/routing.d.ts +0 -0
  609. /package/dist/{src/types → types}/routing.js +0 -0
  610. /package/dist/{src/types → types}/schema.d.ts +0 -0
  611. /package/dist/{src/types → types}/schema.js +0 -0
  612. /package/dist/{src/types → types}/session.d.ts +0 -0
  613. /package/dist/{src/types → types}/session.js +0 -0
  614. /package/dist/{src/types → types}/template.js +0 -0
  615. /package/dist/{src/types → types}/tool.d.ts +0 -0
  616. /package/dist/{src/types → types}/tool.js +0 -0
  617. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  618. /package/dist/{src/utils → utils}/clone.js +0 -0
  619. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  620. /package/dist/{src/utils → utils}/event.js +0 -0
  621. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  622. /package/dist/{src/utils → utils}/history.js +0 -0
  623. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  624. /package/dist/{src/utils → utils}/id.js +0 -0
  625. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  626. /package/dist/{src/utils → utils}/logger.js +0 -0
  627. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  628. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -0,0 +1,296 @@
1
+ /**
2
+ * String-Only Conditions Example
3
+ *
4
+ * This example demonstrates using string-only conditions for AI context-driven routing.
5
+ * String conditions are perfect when you want the AI to make routing decisions based
6
+ * on natural language understanding rather than programmatic logic.
7
+ *
8
+ * Key concepts:
9
+ * - String conditions provide AI context only
10
+ * - No programmatic evaluation - pure AI decision making
11
+ * - Perfect for natural language routing scenarios
12
+ * - Ideal for conversational flows where intent matters more than data
13
+ */
14
+
15
+ import {
16
+ Agent,
17
+ GeminiProvider,
18
+ type Guideline,
19
+ } from "../../src/index";
20
+
21
+ // Context for a customer service chatbot
22
+ interface CustomerContext {
23
+ customerId: string;
24
+ customerTier: "basic" | "premium" | "enterprise";
25
+ previousInteractions: number;
26
+ }
27
+
28
+ // Simple data schema for customer interactions
29
+ interface CustomerData {
30
+ issueType?: string;
31
+ satisfactionRating?: number;
32
+ followUpNeeded?: boolean;
33
+ }
34
+
35
+ const customerSchema = {
36
+ type: "object",
37
+ properties: {
38
+ issueType: { type: "string" },
39
+ satisfactionRating: { type: "number", minimum: 1, maximum: 5 },
40
+ followUpNeeded: { type: "boolean" },
41
+ },
42
+ };
43
+
44
+ // Create agent with string-only condition examples
45
+ const agent = new Agent<CustomerContext, CustomerData>({
46
+ name: "CustomerServiceBot",
47
+ description: "A customer service bot that uses AI context for routing decisions",
48
+ provider: new GeminiProvider({
49
+ apiKey: process.env.GEMINI_API_KEY || "demo-key",
50
+ model: "models/gemini-2.5-flash",
51
+ }),
52
+ context: {
53
+ customerId: "cust_12345",
54
+ customerTier: "premium",
55
+ previousInteractions: 3,
56
+ },
57
+ schema: customerSchema,
58
+ });
59
+
60
+ // Guidelines with string-only conditions for AI context
61
+ const guidelines: Guideline<CustomerContext>[] = [
62
+ {
63
+ // String-only condition - AI interprets the context
64
+ condition: "Customer is expressing frustration or anger",
65
+ action: "Acknowledge their feelings, apologize for the inconvenience, and escalate to a human agent if needed",
66
+ tags: ["empathy", "escalation"],
67
+ },
68
+ {
69
+ // String-only condition - AI understands satisfaction cues
70
+ condition: "Customer seems satisfied with the resolution",
71
+ action: "Thank them for their patience and ask if there's anything else you can help with",
72
+ tags: ["satisfaction", "closure"],
73
+ },
74
+ {
75
+ // String-only condition - AI detects urgency
76
+ condition: "Customer indicates this is an urgent or time-sensitive issue",
77
+ action: "Prioritize their request and provide immediate assistance or escalation",
78
+ tags: ["urgency", "priority"],
79
+ },
80
+ ];
81
+
82
+ // Add guidelines to agent
83
+ guidelines.forEach(guideline => agent.createGuideline(guideline));
84
+
85
+ // Route 1: Billing Issues - String-only condition
86
+ agent.createRoute({
87
+ title: "Billing Support",
88
+ description: "Handle billing questions and payment issues",
89
+ // String-only condition - AI interprets billing-related intent
90
+ when: "Customer has questions about billing, payments, charges, or invoices",
91
+ steps: [
92
+ {
93
+ id: "understand_billing_issue",
94
+ description: "Understand the specific billing concern",
95
+ prompt: "I'd be happy to help with your billing question. Can you tell me more about the specific issue you're experiencing?",
96
+ collect: ["issueType"],
97
+ },
98
+ {
99
+ id: "resolve_billing",
100
+ description: "Provide billing assistance",
101
+ prompt: "Let me help resolve your billing concern. Based on what you've told me, here's what I can do...",
102
+ requires: ["issueType"],
103
+ },
104
+ ],
105
+ });
106
+
107
+ // Route 2: Technical Support - String-only condition
108
+ agent.createRoute({
109
+ title: "Technical Support",
110
+ description: "Help with technical problems and troubleshooting",
111
+ // String-only condition - AI understands technical issues
112
+ when: "Customer is experiencing technical difficulties, errors, or product malfunctions",
113
+ steps: [
114
+ {
115
+ id: "diagnose_technical_issue",
116
+ description: "Understand the technical problem",
117
+ prompt: "I'm here to help with your technical issue. Can you describe what's happening and when the problem started?",
118
+ collect: ["issueType"],
119
+ },
120
+ {
121
+ id: "provide_technical_solution",
122
+ description: "Offer technical assistance",
123
+ prompt: "Based on your description, let me walk you through some troubleshooting steps...",
124
+ requires: ["issueType"],
125
+ },
126
+ ],
127
+ });
128
+
129
+ // Route 3: Account Management - String-only condition
130
+ agent.createRoute({
131
+ title: "Account Management",
132
+ description: "Handle account changes, updates, and settings",
133
+ // String-only condition - AI recognizes account-related requests
134
+ when: "Customer wants to make changes to their account, update information, or modify settings",
135
+ steps: [
136
+ {
137
+ id: "identify_account_request",
138
+ description: "Understand what account changes are needed",
139
+ prompt: "I can help you with your account. What changes would you like to make?",
140
+ collect: ["issueType"],
141
+ },
142
+ {
143
+ id: "process_account_changes",
144
+ description: "Assist with account modifications",
145
+ prompt: "I'll help you make those account changes. Let me guide you through the process...",
146
+ requires: ["issueType"],
147
+ },
148
+ ],
149
+ });
150
+
151
+ // Route 4: General Inquiry - String-only condition
152
+ agent.createRoute({
153
+ title: "General Information",
154
+ description: "Answer general questions about products and services",
155
+ // String-only condition - AI handles general questions
156
+ when: "Customer has general questions about products, services, or company information",
157
+ steps: [
158
+ {
159
+ id: "answer_general_question",
160
+ description: "Provide information and answer questions",
161
+ prompt: "I'd be happy to answer your question. Let me provide you with the information you need...",
162
+ },
163
+ ],
164
+ });
165
+
166
+ // Route 5: Feedback Collection - String-only condition
167
+ agent.createRoute({
168
+ title: "Customer Feedback",
169
+ description: "Collect customer feedback and satisfaction ratings",
170
+ // String-only condition - AI detects feedback intent
171
+ when: "Customer wants to provide feedback, leave a review, or share their experience",
172
+ requiredFields: ["satisfactionRating"],
173
+ optionalFields: ["followUpNeeded"],
174
+ steps: [
175
+ {
176
+ id: "collect_satisfaction_rating",
177
+ description: "Ask for satisfaction rating",
178
+ prompt: "Thank you for wanting to share feedback! On a scale of 1 to 5, how satisfied are you with our service today?",
179
+ collect: ["satisfactionRating"],
180
+ },
181
+ {
182
+ id: "ask_for_follow_up",
183
+ description: "Check if follow-up is needed",
184
+ prompt: "Thank you for the rating! Would you like someone from our team to follow up with you about your experience?",
185
+ collect: ["followUpNeeded"],
186
+ requires: ["satisfactionRating"],
187
+ },
188
+ {
189
+ id: "thank_for_feedback",
190
+ description: "Thank customer for feedback",
191
+ prompt: "We really appreciate your feedback! It helps us improve our service for all customers.",
192
+ requires: ["satisfactionRating"],
193
+ },
194
+ ],
195
+ });
196
+
197
+ // Route 6: Greeting and Welcome - String-only condition
198
+ agent.createRoute({
199
+ title: "Welcome and Greeting",
200
+ description: "Welcome new customers and handle greetings",
201
+ // String-only condition - AI recognizes greetings and welcomes
202
+ when: "Customer is greeting, saying hello, or appears to be new to the service",
203
+ steps: [
204
+ {
205
+ id: "welcome_customer",
206
+ description: "Provide warm welcome",
207
+ prompt: "Hello! Welcome to our customer service. I'm here to help you with any questions or concerns you might have. How can I assist you today?",
208
+ },
209
+ ],
210
+ });
211
+
212
+ // Demonstration function
213
+ async function demonstrateStringOnlyConditions() {
214
+ console.log("=== String-Only Conditions Demo ===\n");
215
+ console.log("This demo shows how string conditions let the AI make routing decisions based on natural language understanding.\n");
216
+
217
+ const testScenarios = [
218
+ {
219
+ name: "Billing Issue",
220
+ message: "Hi, I was charged twice for my subscription this month and I need help getting a refund",
221
+ expectedRoute: "Billing Support"
222
+ },
223
+ {
224
+ name: "Technical Problem",
225
+ message: "My app keeps crashing every time I try to upload a file, can you help me fix this?",
226
+ expectedRoute: "Technical Support"
227
+ },
228
+ {
229
+ name: "Account Changes",
230
+ message: "I need to update my email address and change my password on my account",
231
+ expectedRoute: "Account Management"
232
+ },
233
+ {
234
+ name: "General Question",
235
+ message: "What are your business hours and do you offer phone support?",
236
+ expectedRoute: "General Information"
237
+ },
238
+ {
239
+ name: "Feedback",
240
+ message: "I had a great experience with your support team yesterday and wanted to leave some positive feedback",
241
+ expectedRoute: "Customer Feedback"
242
+ },
243
+ {
244
+ name: "Greeting",
245
+ message: "Hello! I'm new to your service and not sure where to start",
246
+ expectedRoute: "Welcome and Greeting"
247
+ },
248
+ ];
249
+
250
+ for (const scenario of testScenarios) {
251
+ console.log(`🔍 Testing: ${scenario.name}`);
252
+ console.log(`📝 Message: "${scenario.message}"`);
253
+
254
+ try {
255
+ const response = await agent.respond({
256
+ history: [
257
+ {
258
+ role: "user",
259
+ content: scenario.message,
260
+ name: "Customer",
261
+ },
262
+ ],
263
+ });
264
+
265
+ console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
266
+ console.log(`✅ Expected: ${scenario.expectedRoute}`);
267
+ console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
268
+ console.log();
269
+ } catch (error) {
270
+ console.log(`❌ Error: ${error}`);
271
+ console.log();
272
+ }
273
+ }
274
+
275
+ console.log("💡 Key Benefits of String-Only Conditions:");
276
+ console.log(" - Natural language understanding for routing");
277
+ console.log(" - No need to write complex programmatic logic");
278
+ console.log(" - AI handles intent recognition automatically");
279
+ console.log(" - Easy to maintain and update conditions");
280
+ console.log(" - Perfect for conversational, intent-based routing");
281
+ }
282
+
283
+ // Run demonstration
284
+ async function main() {
285
+ try {
286
+ await demonstrateStringOnlyConditions();
287
+ } catch (error) {
288
+ console.error("Error:", error);
289
+ }
290
+ }
291
+
292
+ if (import.meta.url === `file://${process.argv[1]}`) {
293
+ main().catch(console.error);
294
+ }
295
+
296
+ export { agent, demonstrateStringOnlyConditions };
@@ -6,6 +6,12 @@
6
6
  * - Post-booking feedback collection
7
7
  * - Upsell after purchase
8
8
  * - Satisfaction surveys after support
9
+ *
10
+ * NEW: Enhanced with flexible ConditionTemplate patterns:
11
+ * - Mixed route conditions: ["AI context", (ctx) => programmatic_check]
12
+ * - Route skipIf examples: Dynamic route exclusion based on state
13
+ * - Step skipIf examples: Enhanced conditional step skipping
14
+ * - AI context strings in action for better routing decisions
9
15
  */
10
16
 
11
17
  import {
@@ -43,7 +49,7 @@ async function main() {
43
49
  };
44
50
 
45
51
  // Create agent with unified schema
46
- const agent = new Agent<unknown, UnifiedBookingData>({
52
+ const agent = new Agent<any, UnifiedBookingData>({
47
53
  name: "HotelBot",
48
54
  description: "A hotel booking assistant with feedback collection",
49
55
  provider: new GeminiProvider({
@@ -58,7 +64,23 @@ async function main() {
58
64
  agent.createRoute({
59
65
  title: "Book Hotel",
60
66
  description: "Collects hotel booking information",
61
- conditions: ["User wants to book a hotel"],
67
+ // Mixed condition: AI context + programmatic validation
68
+ when: [
69
+ "User wants to book a hotel",
70
+ (ctx) => {
71
+ const event = ctx.history?.[ctx.history.length - 1]
72
+ if(event && "content" in event){
73
+ const message = (event.content as string).toLocaleLowerCase() || '';
74
+ return message.includes('book') || message.includes('hotel') || message.includes('reservation');
75
+ }
76
+ return false;
77
+ }
78
+ ],
79
+ // Skip if user already has a booking
80
+ skipIf: [
81
+ "user already has an active booking",
82
+ (ctx) => !!ctx.data?.hotelName && !!ctx.data?.date
83
+ ],
62
84
  // NEW: Required fields for route completion
63
85
  requiredFields: ["hotelName", "date", "guests"],
64
86
  // Sequential steps for booking flow
@@ -68,7 +90,8 @@ async function main() {
68
90
  description: "Ask for hotel preference",
69
91
  prompt: "Which hotel would you like to book?",
70
92
  collect: ["hotelName"],
71
- skipIf: (data: Partial<UnifiedBookingData>) => !!data.hotelName,
93
+ // String-only skipIf for AI context
94
+ skipIf: "hotel already selected",
72
95
  },
73
96
  {
74
97
  id: "ask_date",
@@ -76,7 +99,8 @@ async function main() {
76
99
  prompt: "What date would you like to book for?",
77
100
  collect: ["date"],
78
101
  requires: ["hotelName"],
79
- skipIf: (data: Partial<UnifiedBookingData>) => !!data.date,
102
+ // Function-only skipIf for programmatic check
103
+ skipIf: (data) => !!data.context.date,
80
104
  },
81
105
  {
82
106
  id: "ask_guests",
@@ -84,7 +108,11 @@ async function main() {
84
108
  prompt: "How many guests will be staying?",
85
109
  collect: ["guests"],
86
110
  requires: ["hotelName", "date"],
87
- skipIf: (data: Partial<UnifiedBookingData>) => data.guests !== undefined,
111
+ // Mixed skipIf: AI context + programmatic logic
112
+ skipIf: [
113
+ "guest count already provided",
114
+ (data) => data.context.guests !== undefined
115
+ ],
88
116
  },
89
117
  {
90
118
  id: "confirm_booking",
@@ -102,7 +130,16 @@ async function main() {
102
130
  agent.createRoute({
103
131
  title: "Collect Feedback",
104
132
  description: "Collects user feedback after booking",
105
- conditions: ["User wants to provide feedback"],
133
+ // Function-only condition for programmatic logic
134
+ when: (ctx) => {
135
+ // Only activate if we have booking data but no feedback yet
136
+ return !!ctx.data?.hotelName && ctx.data?.rating === undefined;
137
+ },
138
+ // Skip if feedback already collected
139
+ skipIf: [
140
+ "feedback already provided",
141
+ (ctx) => ctx.data?.rating !== undefined
142
+ ],
106
143
  // NEW: Required fields for route completion
107
144
  requiredFields: ["rating"],
108
145
  // NEW: Optional fields that enhance the experience
@@ -114,7 +151,11 @@ async function main() {
114
151
  description: "Ask for rating",
115
152
  prompt: "How would you rate your booking experience from 1 to 5?",
116
153
  collect: ["rating"],
117
- skipIf: (data: Partial<UnifiedBookingData>) => data.rating !== undefined,
154
+ // Mixed skipIf: AI context + programmatic check
155
+ skipIf: [
156
+ "rating already provided",
157
+ (data) => data.context.rating !== undefined
158
+ ],
118
159
  },
119
160
  {
120
161
  id: "ask_comments",
@@ -4,10 +4,16 @@
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 {
@@ -17,7 +23,6 @@ import {
17
23
  ValidationError,
18
24
  type Term,
19
25
  type Guideline,
20
- type RouteOptions,
21
26
  } from "../../src/index";
22
27
 
23
28
  // Context type
@@ -130,19 +135,32 @@ const terms: Term<HealthcareContext>[] = [
130
135
 
131
136
  const guidelines: Guideline<HealthcareContext>[] = [
132
137
  {
138
+ // String-only condition for AI context
133
139
  condition: "The patient asks about insurance",
134
140
  action:
135
141
  "List the insurance providers we accept and tell them to call the office for more details",
136
142
  tags: ["insurance", "billing"],
137
143
  },
138
144
  {
139
- 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
+ ],
140
150
  action: ({ context }: { context?: HealthcareContext }) =>
141
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}.`,
142
152
  tags: ["escalation"],
143
153
  },
144
154
  {
145
- 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
+ },
146
164
  action:
147
165
  "Kindly tell them you cannot assist with off-topic inquiries - do not engage",
148
166
  tags: ["off-topic"],
@@ -154,7 +172,16 @@ const routes = [
154
172
  id: "route_schedule_appointment",
155
173
  title: "Schedule Appointment",
156
174
  description: "Helps the patient schedule an appointment",
157
- 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
+ ],
158
185
  // NEW: Required fields for route completion (instead of schema)
159
186
  requiredFields: ["appointmentType", "preferredDate", "preferredTime"],
160
187
  // NEW: Optional fields that enhance the experience
@@ -188,14 +215,17 @@ const routes = [
188
215
  description: "Ask about symptoms",
189
216
  prompt: "Are you experiencing any symptoms?",
190
217
  collect: ["symptoms"],
191
- skipIf: (data: Partial<HealthcareData>) =>
192
- 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
+ ],
193
223
  },
194
224
  {
195
225
  id: "schedule_appointment",
196
226
  description: "Schedule the appointment",
197
227
  prompt: "I'll schedule your appointment now.",
198
- tools: ["healthcare_schedule_appointment"], // Reference by ID
228
+ tools: [scheduleAppointmentTool], // Inline tool - only available on this step
199
229
  requires: ["preferredDate", "preferredTime"],
200
230
  prepare: "healthcare_insurance_providers", // Reference by ID
201
231
  finalize: "finalize_appointment", // Reference by ID - will be registered later
@@ -207,7 +237,13 @@ const routes = [
207
237
  id: "route_check_lab_results",
208
238
  title: "Check Lab Results",
209
239
  description: "Retrieves and explains patient lab results",
210
- 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,
211
247
  // NEW: Required fields for route completion
212
248
  requiredFields: ["testType"],
213
249
  // NEW: Optional fields
@@ -225,7 +261,8 @@ const routes = [
225
261
  {
226
262
  title: "General Healthcare Questions",
227
263
  description: "Answer general healthcare questions",
228
- conditions: ["Patient asks general healthcare questions"],
264
+ // String-only condition for AI context
265
+ when: "Patient asks general healthcare questions",
229
266
  // No required fields - conversational Q&A
230
267
  },
231
268
  ];
@@ -294,16 +331,19 @@ const agent = new Agent<HealthcareContext, HealthcareData>({
294
331
  // Declarative initialization
295
332
  terms,
296
333
  guidelines,
334
+ // Enable debug logging
335
+ debug: true,
297
336
  });
298
337
 
299
338
  // Demonstrate different tool registration approaches
300
339
 
301
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
302
342
  agent.tool.registerMany([
303
343
  getInsuranceProvidersTool,
304
344
  getAvailableSlotsTool,
305
345
  getLabResultsTool,
306
- scheduleAppointmentTool,
346
+ // scheduleAppointmentTool, // Commented out - will be added to specific step only
307
347
  ]);
308
348
 
309
349
  // Method 2: Create and register specialized tools
@@ -398,45 +438,26 @@ async function main() {
398
438
 
399
439
  // Turn 1 - Agent responds and routes to appropriate flow
400
440
  console.log("🔄 Turn 1: Initial inquiry");
401
- await agent.session.addMessage("user", "Hi, I need to follow up on my recent visit", "Alice");
402
-
403
- const response1 = await agent.respond({
404
- history: agent.session.getHistory()
405
- });
441
+ const response1 = await agent.chat("Hi, I need to follow up on my recent visit");
406
442
 
407
443
  console.log("🤖 Agent:", response1.message);
408
444
  console.log("🛤️ Route chosen:", response1.session?.currentRoute?.title);
409
445
 
410
- await agent.session.addMessage("assistant", response1.message);
411
-
412
446
  // Turn 2 - User provides more details
413
447
  console.log("\n🔄 Turn 2: Providing appointment details");
414
- await agent.session.addMessage("user", "I need a checkup next Tuesday at 2 PM", "Alice");
415
-
416
- const response2 = await agent.respond({
417
- history: agent.session.getHistory()
418
- });
448
+ const response2 = await agent.chat("I need a checkup next Tuesday at 2 PM");
419
449
 
420
450
  console.log("🤖 Agent:", response2.message);
421
451
  console.log("📊 Collected data:", agent.session.getData());
422
452
  console.log("📍 Current step:", response2.session?.currentStep?.id);
423
453
 
424
- await agent.session.addMessage("assistant", response2.message);
425
-
426
454
  // Turn 3 - Continue the conversation flow
427
455
  console.log("\n🔄 Turn 3: Continuing appointment booking");
428
-
429
- await agent.session.addMessage("user", "I'm feeling a bit anxious about the visit", "Alice");
430
-
431
- const response3 = await agent.respond({
432
- history: agent.session.getHistory()
433
- });
456
+ const response3 = await agent.chat("I'm feeling a bit anxious about the visit");
434
457
 
435
458
  console.log("🤖 Agent:", response3.message);
436
459
  console.log("📊 Updated data:", agent.session.getData());
437
460
  console.log("📍 Current step:", response3.session?.currentStep?.id);
438
-
439
- await agent.session.addMessage("assistant", response3.message);
440
461
 
441
462
  // Check for route completion
442
463
  if (response3.isRouteComplete && response3.session) {