@falai/agent 0.9.2 → 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 (626) hide show
  1. package/README.md +262 -38
  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 +6 -1
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +42 -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 +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 +45 -0
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +686 -66
  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 +11 -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 +6 -1
  135. package/dist/core/Agent.d.ts.map +1 -0
  136. package/dist/{src/core → core}/Agent.js +43 -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 +837 -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 +197 -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 +198 -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 +686 -66
  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 +11 -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/api/README.md +221 -12
  259. package/docs/api/overview.md +202 -3
  260. package/docs/architecture/data-extraction-flow.md +363 -0
  261. package/docs/architecture/multi-step-execution.md +243 -0
  262. package/docs/core/agent/README.md +120 -5
  263. package/docs/core/agent/session-management.md +1 -1
  264. package/docs/core/ai-integration/prompt-composition.md +135 -0
  265. package/docs/core/ai-integration/response-processing.md +146 -0
  266. package/docs/core/conversation-flows/data-collection.md +143 -0
  267. package/docs/core/conversation-flows/routes.md +2 -2
  268. package/docs/core/conversation-flows/step-transitions.md +132 -0
  269. package/docs/core/conversation-flows/steps.md +112 -0
  270. package/docs/core/error-handling.md +193 -0
  271. package/docs/core/routing/intelligent-routing.md +118 -0
  272. package/docs/guides/getting-started/README.md +284 -3
  273. package/docs/guides/migration/README.md +23 -0
  274. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  275. package/docs/guides/migration/multi-step-execution.md +303 -0
  276. package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
  277. package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
  278. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  279. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  280. package/examples/ai-providers/anthropic-integration.ts +4 -4
  281. package/examples/ai-providers/openai-integration.ts +1 -1
  282. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  283. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  284. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  285. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  286. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  287. package/examples/conversation-flows/completion-transitions.ts +48 -7
  288. package/examples/core-concepts/basic-agent.ts +54 -33
  289. package/examples/core-concepts/schema-driven-extraction.ts +33 -9
  290. package/examples/core-concepts/session-management.ts +51 -16
  291. package/examples/integrations/database-integration.ts +6 -6
  292. package/examples/integrations/healthcare-integration.ts +10 -10
  293. package/examples/integrations/search-integration.ts +8 -8
  294. package/examples/integrations/server-session-management.ts +8 -8
  295. package/examples/persistence/database-persistence.ts +15 -15
  296. package/examples/persistence/memory-sessions.ts +3 -3
  297. package/examples/persistence/redis-persistence.ts +7 -9
  298. package/examples/tools/data-enrichment-tools.ts +4 -4
  299. package/package.json +6 -4
  300. package/src/adapters/PrismaAdapter.ts +3 -2
  301. package/src/adapters/RedisAdapter.ts +3 -3
  302. package/src/core/Agent.ts +54 -2
  303. package/src/core/BatchExecutor.ts +1156 -0
  304. package/src/core/BatchPromptBuilder.ts +275 -0
  305. package/src/core/PromptComposer.ts +53 -16
  306. package/src/core/ResponseEngine.ts +143 -4
  307. package/src/core/ResponseModal.ts +888 -66
  308. package/src/core/ResponsePipeline.ts +17 -9
  309. package/src/core/Route.ts +223 -22
  310. package/src/core/RoutingEngine.ts +426 -83
  311. package/src/core/Step.ts +144 -16
  312. package/src/index.ts +19 -0
  313. package/src/providers/AnthropicProvider.ts +17 -17
  314. package/src/providers/GeminiProvider.ts +129 -60
  315. package/src/providers/OpenAIProvider.ts +18 -18
  316. package/src/providers/OpenRouterProvider.ts +18 -18
  317. package/src/types/agent.ts +11 -3
  318. package/src/types/index.ts +12 -1
  319. package/src/types/route.ts +131 -12
  320. package/src/types/template.ts +70 -2
  321. package/src/utils/condition.ts +190 -0
  322. package/src/utils/index.ts +12 -0
  323. package/src/utils/json.ts +46 -0
  324. package/src/utils/retry.ts +5 -4
  325. package/src/utils/template.ts +109 -0
  326. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  327. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  328. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  329. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  330. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  331. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  332. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  333. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  334. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  335. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  336. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  337. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  338. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  339. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  340. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  341. package/dist/cjs/src/adapters/index.js.map +0 -1
  342. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  343. package/dist/cjs/src/constants/index.js.map +0 -1
  344. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  345. package/dist/cjs/src/core/Agent.js.map +0 -1
  346. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  347. package/dist/cjs/src/core/Events.js.map +0 -1
  348. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  349. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  350. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  351. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  352. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  353. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  354. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  355. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  356. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  357. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  358. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  359. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  360. package/dist/cjs/src/core/Route.js.map +0 -1
  361. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  362. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  363. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  364. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  365. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  366. package/dist/cjs/src/core/Step.js.map +0 -1
  367. package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
  368. package/dist/cjs/src/core/ToolManager.js.map +0 -1
  369. package/dist/cjs/src/index.d.ts.map +0 -1
  370. package/dist/cjs/src/index.js.map +0 -1
  371. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  372. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  373. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  374. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  375. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  376. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  377. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  378. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  379. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  380. package/dist/cjs/src/providers/index.js.map +0 -1
  381. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  382. package/dist/cjs/src/types/agent.js.map +0 -1
  383. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  384. package/dist/cjs/src/types/ai.js.map +0 -1
  385. package/dist/cjs/src/types/history.d.ts.map +0 -1
  386. package/dist/cjs/src/types/history.js.map +0 -1
  387. package/dist/cjs/src/types/index.d.ts.map +0 -1
  388. package/dist/cjs/src/types/index.js.map +0 -1
  389. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  390. package/dist/cjs/src/types/persistence.js.map +0 -1
  391. package/dist/cjs/src/types/route.d.ts.map +0 -1
  392. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  393. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  394. package/dist/cjs/src/types/session.d.ts.map +0 -1
  395. package/dist/cjs/src/types/session.js.map +0 -1
  396. package/dist/cjs/src/types/template.d.ts +0 -30
  397. package/dist/cjs/src/types/template.d.ts.map +0 -1
  398. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  399. package/dist/cjs/src/types/tool.js.map +0 -1
  400. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  401. package/dist/cjs/src/utils/clone.js.map +0 -1
  402. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  403. package/dist/cjs/src/utils/event.js.map +0 -1
  404. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  405. package/dist/cjs/src/utils/history.js.map +0 -1
  406. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  407. package/dist/cjs/src/utils/id.js.map +0 -1
  408. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  409. package/dist/cjs/src/utils/index.js.map +0 -1
  410. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  411. package/dist/cjs/src/utils/logger.js.map +0 -1
  412. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  413. package/dist/cjs/src/utils/retry.js.map +0 -1
  414. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  415. package/dist/cjs/src/utils/session.js.map +0 -1
  416. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  417. package/dist/cjs/src/utils/template.js.map +0 -1
  418. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  419. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  420. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  422. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  423. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  424. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  425. package/dist/src/adapters/index.js.map +0 -1
  426. package/dist/src/constants/index.js.map +0 -1
  427. package/dist/src/core/Agent.d.ts.map +0 -1
  428. package/dist/src/core/Agent.js.map +0 -1
  429. package/dist/src/core/Events.js.map +0 -1
  430. package/dist/src/core/PersistenceManager.js.map +0 -1
  431. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  432. package/dist/src/core/PromptComposer.js.map +0 -1
  433. package/dist/src/core/ResponseEngine.js +0 -80
  434. package/dist/src/core/ResponseEngine.js.map +0 -1
  435. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  436. package/dist/src/core/ResponseModal.js.map +0 -1
  437. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  438. package/dist/src/core/ResponsePipeline.js.map +0 -1
  439. package/dist/src/core/Route.d.ts.map +0 -1
  440. package/dist/src/core/Route.js.map +0 -1
  441. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  442. package/dist/src/core/RoutingEngine.js.map +0 -1
  443. package/dist/src/core/SessionManager.js.map +0 -1
  444. package/dist/src/core/Step.d.ts.map +0 -1
  445. package/dist/src/core/Step.js.map +0 -1
  446. package/dist/src/core/ToolManager.js.map +0 -1
  447. package/dist/src/index.d.ts.map +0 -1
  448. package/dist/src/index.js.map +0 -1
  449. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  450. package/dist/src/providers/GeminiProvider.js.map +0 -1
  451. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  452. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  453. package/dist/src/providers/index.js.map +0 -1
  454. package/dist/src/types/agent.d.ts.map +0 -1
  455. package/dist/src/types/agent.js.map +0 -1
  456. package/dist/src/types/history.js.map +0 -1
  457. package/dist/src/types/index.js.map +0 -1
  458. package/dist/src/types/persistence.js.map +0 -1
  459. package/dist/src/types/route.d.ts.map +0 -1
  460. package/dist/src/types/template.d.ts +0 -30
  461. package/dist/src/types/template.d.ts.map +0 -1
  462. package/dist/src/types/tool.js.map +0 -1
  463. package/dist/src/utils/clone.js.map +0 -1
  464. package/dist/src/utils/event.js.map +0 -1
  465. package/dist/src/utils/history.js.map +0 -1
  466. package/dist/src/utils/id.js.map +0 -1
  467. package/dist/src/utils/index.d.ts.map +0 -1
  468. package/dist/src/utils/index.js.map +0 -1
  469. package/dist/src/utils/logger.js.map +0 -1
  470. package/dist/src/utils/retry.d.ts.map +0 -1
  471. package/dist/src/utils/retry.js.map +0 -1
  472. package/dist/src/utils/session.js.map +0 -1
  473. package/dist/src/utils/template.d.ts.map +0 -1
  474. package/dist/src/utils/template.js.map +0 -1
  475. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  476. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  477. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  478. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  479. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  480. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  481. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  482. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  483. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  484. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  485. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  486. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  487. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  488. /package/dist/{src/adapters → adapters}/index.js +0 -0
  489. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  490. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  491. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  492. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  493. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  494. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  495. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  496. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  497. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  498. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  499. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  500. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  501. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  502. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  503. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  504. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  505. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  506. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  507. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  508. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  509. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  510. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  511. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  512. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  513. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  514. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  515. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  516. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  517. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  518. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  519. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  520. /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
  521. /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
  522. /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
  523. /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
  524. /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
  525. /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
  526. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  527. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  528. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  529. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  530. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  531. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  532. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  533. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  534. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  535. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  536. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  537. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  538. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  539. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  540. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  541. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  542. /package/dist/cjs/{src/types → types}/history.js +0 -0
  543. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  544. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  545. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  546. /package/dist/cjs/{src/types → types}/route.js +0 -0
  547. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  548. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  549. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  550. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  551. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  552. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  553. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  554. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  555. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  556. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  557. /package/dist/cjs/{src/types → types}/session.js +0 -0
  558. /package/dist/cjs/{src/types → types}/template.js +0 -0
  559. /package/dist/{src → cjs}/types/template.js.map +0 -0
  560. /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
  561. /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
  562. /package/dist/cjs/{src/types → types}/tool.js +0 -0
  563. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  564. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  565. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  566. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  567. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  568. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  569. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  570. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  571. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  572. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  573. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  574. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  575. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  576. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  577. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  578. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  579. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  580. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  581. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  582. /package/dist/{src/constants → constants}/index.js +0 -0
  583. /package/dist/{src/core → core}/Events.d.ts +0 -0
  584. /package/dist/{src/core → core}/Events.js +0 -0
  585. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  586. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  587. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  588. /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
  589. /package/dist/{src/core → core}/SessionManager.js +0 -0
  590. /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
  591. /package/dist/{src/core → core}/ToolManager.js +0 -0
  592. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  593. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  594. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  595. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  596. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  597. /package/dist/{src/providers → providers}/index.js +0 -0
  598. /package/dist/{src/types → types}/agent.js +0 -0
  599. /package/dist/{src/types → types}/ai.d.ts +0 -0
  600. /package/dist/{src/types → types}/ai.js +0 -0
  601. /package/dist/{src/types → types}/history.d.ts +0 -0
  602. /package/dist/{src/types → types}/history.js +0 -0
  603. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  604. /package/dist/{src/types → types}/persistence.js +0 -0
  605. /package/dist/{src/types → types}/route.js +0 -0
  606. /package/dist/{src/types → types}/routing.d.ts +0 -0
  607. /package/dist/{src/types → types}/routing.js +0 -0
  608. /package/dist/{src/types → types}/schema.d.ts +0 -0
  609. /package/dist/{src/types → types}/schema.js +0 -0
  610. /package/dist/{src/types → types}/session.d.ts +0 -0
  611. /package/dist/{src/types → types}/session.js +0 -0
  612. /package/dist/{src/types → types}/template.js +0 -0
  613. /package/dist/{src/types → types}/tool.d.ts +0 -0
  614. /package/dist/{src/types → types}/tool.js +0 -0
  615. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  616. /package/dist/{src/utils → utils}/clone.js +0 -0
  617. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  618. /package/dist/{src/utils → utils}/event.js +0 -0
  619. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  620. /package/dist/{src/utils → utils}/history.js +0 -0
  621. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  622. /package/dist/{src/utils → utils}/id.js +0 -0
  623. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  624. /package/dist/{src/utils → utils}/logger.js +0 -0
  625. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  626. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -168,18 +168,26 @@ const agent = new Agent<CustomerContext, CustomerData>({
168
168
  },
169
169
  ],
170
170
 
171
- // Behavioral guidelines
171
+ // Enhanced behavioral guidelines with ConditionTemplate
172
172
  guidelines: [
173
173
  {
174
- condition: "Customer seems frustrated",
174
+ condition: [
175
+ "Customer seems frustrated or upset", // AI context
176
+ (ctx) => ctx.data?.priority === 'high' // Programmatic check
177
+ ],
175
178
  action: "Apologize sincerely and offer to escalate to human agent",
176
179
  enabled: true,
177
180
  },
178
181
  {
179
- condition: "Premium customer requests",
182
+ condition: (ctx) => ctx.accountTier === 'premium', // Function-only condition
180
183
  action: "Provide expedited service and additional options",
181
184
  enabled: true,
182
185
  },
186
+ {
187
+ condition: "User is asking for help with billing", // String-only condition
188
+ action: "Be extra careful with financial information and offer phone support",
189
+ enabled: true,
190
+ },
183
191
  ],
184
192
 
185
193
  // Global tools available to all routes
@@ -366,7 +374,7 @@ const agent = new Agent<CustomerContext, CustomerData>({
366
374
  {
367
375
  title: "Technical Support",
368
376
  description: "Help with technical issues",
369
- conditions: ["user reports technical problem"],
377
+ when: ["user reports technical problem"],
370
378
  // NEW: Routes specify required fields instead of schemas
371
379
  requiredFields: ["customerName", "email", "issueType", "issueDescription"],
372
380
  optionalFields: ["phone", "priority"],
@@ -379,7 +387,7 @@ const agent = new Agent<CustomerContext, CustomerData>({
379
387
  {
380
388
  title: "Billing Inquiry",
381
389
  description: "Handle billing and payment questions",
382
- conditions: ["user asks about billing or payment"],
390
+ when: ["user asks about billing or payment"],
383
391
  requiredFields: ["customerName", "email", "issueType"],
384
392
  initialStep: {
385
393
  prompt:
@@ -416,6 +424,113 @@ const routes = agent.getRoutes();
416
424
  console.log(routes.map((r) => r.title)); // ["Customer Support", ...]
417
425
  ```
418
426
 
427
+ ## Enhanced Guideline System
428
+
429
+ ### Flexible Guideline Conditions
430
+
431
+ Guidelines now support the powerful `ConditionTemplate` system, allowing for more sophisticated behavioral control:
432
+
433
+ ```typescript
434
+ // String-only condition (AI context)
435
+ agent.addGuideline({
436
+ condition: "User is asking for technical help",
437
+ action: "Provide detailed technical explanations with examples"
438
+ });
439
+
440
+ // Function-only condition (programmatic)
441
+ agent.addGuideline({
442
+ condition: (ctx) => ctx.data?.userType === 'premium',
443
+ action: "Offer priority support and additional features"
444
+ });
445
+
446
+ // Mixed array condition (hybrid approach)
447
+ agent.addGuideline({
448
+ condition: [
449
+ "User seems confused or needs clarification", // AI context
450
+ (ctx) => ctx.data?.attemptCount > 2 // Programmatic check
451
+ ],
452
+ action: "Slow down, use simpler language, and offer to connect with human support"
453
+ });
454
+
455
+ // Complex conditional guidelines
456
+ agent.addGuideline({
457
+ condition: [
458
+ "User is reporting a critical issue", // AI context
459
+ (ctx) => ctx.data?.accountTier === 'enterprise', // Account check
460
+ (ctx) => new Date().getHours() >= 9 && new Date().getHours() <= 17 // Business hours
461
+ ],
462
+ action: "Immediately escalate to senior technical support and provide direct contact information"
463
+ });
464
+ ```
465
+
466
+ ### Guideline Evaluation Logic
467
+
468
+ Guidelines use **AND logic** for arrays - all conditions must be met:
469
+
470
+ - **String conditions**: Provide context to AI for guideline matching
471
+ - **Function conditions**: Must return `true` for guideline to activate
472
+ - **Arrays**: All functions must return `true`, strings provide AI context
473
+
474
+ ### Context-Aware Guidelines
475
+
476
+ Guidelines can access both agent context and collected data:
477
+
478
+ ```typescript
479
+ interface SupportContext {
480
+ userTier: 'free' | 'premium' | 'enterprise';
481
+ supportTicketCount: number;
482
+ lastContactDate?: Date;
483
+ }
484
+
485
+ interface SupportData {
486
+ issueType?: string;
487
+ severity?: 'low' | 'medium' | 'high' | 'critical';
488
+ previousAttempts?: number;
489
+ }
490
+
491
+ agent.addGuideline({
492
+ condition: [
493
+ "User has contacted support multiple times recently", // AI context
494
+ (ctx) => ctx.context?.supportTicketCount > 3, // Context check
495
+ (ctx) => ctx.data?.severity === 'high' // Data check
496
+ ],
497
+ action: "Acknowledge their patience, apologize for the inconvenience, and prioritize their case"
498
+ });
499
+ ```
500
+
501
+ ### Dynamic Guideline Activation
502
+
503
+ Guidelines can be activated based on conversation state:
504
+
505
+ ```typescript
506
+ // Time-based guidelines
507
+ agent.addGuideline({
508
+ condition: (ctx) => {
509
+ const hour = new Date().getHours();
510
+ return hour < 9 || hour > 17; // Outside business hours
511
+ },
512
+ action: "Inform user that live support is available during business hours (9 AM - 5 PM)"
513
+ });
514
+
515
+ // Progress-based guidelines
516
+ agent.addGuideline({
517
+ condition: [
518
+ "User is making good progress", // AI context
519
+ (ctx) => Object.keys(ctx.data || {}).length > 3 // Has collected significant data
520
+ ],
521
+ action: "Acknowledge their cooperation and let them know we're almost done"
522
+ });
523
+
524
+ // Route-specific guidelines
525
+ agent.addGuideline({
526
+ condition: [
527
+ "User is in the payment process", // AI context
528
+ (ctx) => ctx.session?.currentRoute?.id === 'payment_flow' // Route check
529
+ ],
530
+ action: "Be extra careful with payment information and confirm all details before processing"
531
+ });
532
+ ```
533
+
419
534
  ## Tool Integration
420
535
 
421
536
  ### Agent-Level Tools
@@ -589,7 +589,7 @@ For simple question-answering without step:
589
589
  ```typescript
590
590
  const qnaRoute = agent.createRoute({
591
591
  title: "Company Q&A",
592
- conditions: ["User asks about company"],
592
+ when: ["User asks about company"],
593
593
  // NO schema - stepless!
594
594
  });
595
595
 
@@ -218,3 +218,138 @@ Prompts are optimized for token efficiency:
218
218
  - Leverage route-specific overrides for specialized behavior
219
219
  - Monitor token usage and optimize prompt length
220
220
  - Test prompts with different AI providers for consistency
221
+
222
+ ## BatchPromptBuilder for Multi-Step Execution
223
+
224
+ When multiple steps execute in a single batch, the `BatchPromptBuilder` combines their prompts into a single coherent prompt.
225
+
226
+ ### Combined Prompt Structure
227
+
228
+ ```
229
+ [Agent Identity & Personality]
230
+ [Route Context]
231
+
232
+ ## Current Conversation Flow
233
+
234
+ You are handling multiple aspects of this conversation in a single response.
235
+
236
+ ### Step 1: [Step Description]
237
+ [Step Prompt]
238
+
239
+ ### Step 2: [Step Description]
240
+ [Step Prompt]
241
+
242
+ [... additional steps ...]
243
+
244
+ ## Data Collection
245
+
246
+ Extract the following information from your response:
247
+ - field1 (type): description
248
+ - field2 (type): description
249
+
250
+ ## Response Format
251
+
252
+ Return JSON with:
253
+ - message: Your response to the user
254
+ - [collected fields as top-level properties]
255
+ ```
256
+
257
+ ### How Prompts Are Merged
258
+
259
+ The `BatchPromptBuilder` preserves each step's intent while creating a unified prompt:
260
+
261
+ ```typescript
262
+ // Individual step prompts
263
+ const step1 = { prompt: "What's your name?", collect: ["name"] };
264
+ const step2 = { prompt: "What's your email?", collect: ["email"] };
265
+ const step3 = { prompt: "How can I help?", collect: ["request"] };
266
+
267
+ // Combined prompt includes all three
268
+ const result = await batchPromptBuilder.buildBatchPrompt({
269
+ steps: [step1, step2, step3],
270
+ route,
271
+ history,
272
+ context,
273
+ session,
274
+ agentOptions,
275
+ });
276
+
277
+ // result.prompt contains unified prompt
278
+ // result.collectFields = ["name", "email", "request"]
279
+ // result.stepCount = 3
280
+ ```
281
+
282
+ ### Collect Fields Aggregation
283
+
284
+ All `collect` fields from all steps are combined and deduplicated:
285
+
286
+ ```typescript
287
+ // Steps with overlapping collect fields
288
+ const steps = [
289
+ { collect: ["name", "email"] },
290
+ { collect: ["email", "phone"] }, // email appears twice
291
+ { collect: ["preferences"] }
292
+ ];
293
+
294
+ // Combined collect fields (deduplicated)
295
+ // ["name", "email", "phone", "preferences"]
296
+ ```
297
+
298
+ ### Schema-Aware Field Descriptions
299
+
300
+ When the agent has a schema, field descriptions are included in the prompt:
301
+
302
+ ```typescript
303
+ // Agent schema
304
+ const schema = {
305
+ properties: {
306
+ email: { type: "string", format: "email", description: "User's email address" },
307
+ guests: { type: "number", minimum: 1, description: "Number of guests" }
308
+ }
309
+ };
310
+
311
+ // Generated data collection section:
312
+ // ## Data Collection
313
+ // Extract the following information from your response:
314
+ // - email (string): User's email address
315
+ // - guests (number): Number of guests
316
+ ```
317
+
318
+ ### Single vs Multi-Step Prompts
319
+
320
+ The prompt structure adapts based on batch size:
321
+
322
+ ```typescript
323
+ // Single step batch
324
+ // ## Current Step
325
+ // [Step prompt]
326
+
327
+ // Multi-step batch
328
+ // ## Current Conversation Flow
329
+ // You are handling multiple aspects of this conversation in a single response.
330
+ // ### Step 1: ...
331
+ // ### Step 2: ...
332
+ ```
333
+
334
+ ### Using BatchPromptBuilder
335
+
336
+ ```typescript
337
+ import { BatchPromptBuilder } from "@falai/agent";
338
+
339
+ const builder = new BatchPromptBuilder<MyContext, MyData>();
340
+
341
+ const result = await builder.buildBatchPrompt({
342
+ steps: batchResult.steps,
343
+ route: currentRoute,
344
+ history: conversationHistory,
345
+ context: agentContext,
346
+ session: currentSession,
347
+ agentOptions: agent.getAgentOptions(),
348
+ });
349
+
350
+ // Use result.prompt for LLM call
351
+ const llmResponse = await provider.generateMessage({
352
+ prompt: result.prompt,
353
+ // ...
354
+ });
355
+ ```
@@ -277,6 +277,150 @@ Built-in monitoring capabilities:
277
277
  - **Debug logging** - Detailed processing traces
278
278
  - **Performance profiling** - Identify bottlenecks
279
279
 
280
+ ## Batch Execution Response Fields
281
+
282
+ When using multi-step execution, the `AgentResponse` includes additional fields for batch execution information.
283
+
284
+ ### New AgentResponse Fields
285
+
286
+ ```typescript
287
+ interface AgentResponse<TData = unknown> {
288
+ /** The generated message */
289
+ message: string;
290
+ /** Updated session state */
291
+ session?: SessionState<TData>;
292
+ /** Tool calls made during response */
293
+ toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
294
+ /** Whether the route is complete */
295
+ isRouteComplete?: boolean;
296
+
297
+ // Multi-step execution fields
298
+ /** Steps executed in this response */
299
+ executedSteps?: StepRef[];
300
+ /** Why execution stopped */
301
+ stoppedReason?: StoppedReason;
302
+ }
303
+ ```
304
+
305
+ ### executedSteps Array
306
+
307
+ Lists all steps that were executed in the batch:
308
+
309
+ ```typescript
310
+ const response = await agent.respond("Book Grand Hotel for 2 on Friday");
311
+
312
+ console.log(response.executedSteps);
313
+ // [
314
+ // { id: "ask-hotel", routeId: "booking" },
315
+ // { id: "ask-guests", routeId: "booking" },
316
+ // { id: "ask-date", routeId: "booking" }
317
+ // ]
318
+ ```
319
+
320
+ Each `StepRef` contains:
321
+ - `id` - The step identifier
322
+ - `routeId` - The route this step belongs to
323
+
324
+ ### stoppedReason Field
325
+
326
+ Indicates why batch execution stopped:
327
+
328
+ ```typescript
329
+ type StoppedReason =
330
+ | 'needs_input' // Step requires uncollected data
331
+ | 'end_route' // Reached END_ROUTE
332
+ | 'route_complete' // All Steps processed
333
+ | 'prepare_error' // Error in prepare hook
334
+ | 'llm_error' // Error during LLM call
335
+ | 'validation_error' // Error validating collected data
336
+ | 'finalize_error'; // Error in finalize hook (non-fatal)
337
+ ```
338
+
339
+ ### BatchExecutionResult Structure
340
+
341
+ The internal batch execution result provides detailed information:
342
+
343
+ ```typescript
344
+ interface BatchExecutionResult<TData = unknown> {
345
+ /** The generated message */
346
+ message: string;
347
+ /** Updated session state */
348
+ session: SessionState<TData>;
349
+ /** Steps that were executed */
350
+ executedSteps: StepRef[];
351
+ /** Why execution stopped */
352
+ stoppedReason: StoppedReason;
353
+ /** Collected data from the batch */
354
+ collectedData?: Partial<TData>;
355
+ /** Any errors that occurred */
356
+ error?: BatchExecutionError;
357
+ }
358
+ ```
359
+
360
+ ### Error Information
361
+
362
+ When errors occur, detailed information is available:
363
+
364
+ ```typescript
365
+ interface BatchExecutionError {
366
+ /** Type of error that occurred */
367
+ type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
368
+ 'llm_call' | 'data_validation' | 'finalize_hook';
369
+ /** Error message */
370
+ message: string;
371
+ /** Step where error occurred (if applicable) */
372
+ stepId?: string;
373
+ /** Additional error details */
374
+ details?: unknown;
375
+ }
376
+ ```
377
+
378
+ ### Using Response Fields
379
+
380
+ ```typescript
381
+ const response = await agent.respond("Complete my booking");
382
+
383
+ // Check what was executed
384
+ console.log(`Executed ${response.executedSteps?.length || 0} steps`);
385
+
386
+ // Check why execution stopped
387
+ switch (response.stoppedReason) {
388
+ case 'needs_input':
389
+ console.log("Waiting for more information from user");
390
+ break;
391
+ case 'route_complete':
392
+ case 'end_route':
393
+ console.log("Route finished successfully");
394
+ break;
395
+ case 'validation_error':
396
+ console.log("Data validation issues:", response.error);
397
+ break;
398
+ default:
399
+ console.log("Stopped due to:", response.stoppedReason);
400
+ }
401
+
402
+ // Check route completion
403
+ if (response.isRouteComplete) {
404
+ console.log("All required data collected");
405
+ }
406
+ ```
407
+
408
+ ### Session State After Batch
409
+
410
+ The session state reflects the final step position:
411
+
412
+ ```typescript
413
+ const response = await agent.respond("Book for 2 guests");
414
+
415
+ // Session shows current position
416
+ console.log(response.session?.currentStep);
417
+ // { id: "ask-date", routeId: "booking" }
418
+
419
+ // Session data includes all collected values
420
+ console.log(response.session?.data);
421
+ // { hotel: "Grand Hotel", guests: 2 }
422
+ ```
423
+
280
424
  ## Best Practices
281
425
 
282
426
  - Design schemas for reliable AI extraction
@@ -285,3 +429,5 @@ Built-in monitoring capabilities:
285
429
  - Use streaming for better user experience
286
430
  - Leverage tool results for context enrichment
287
431
  - Validate data at multiple levels (schema + business rules)
432
+ - Check `executedSteps` to understand batch behavior
433
+ - Handle different `stoppedReason` values appropriately
@@ -13,6 +13,149 @@ The agent-level data collection system provides:
13
13
  - **Natural Conversations**: AI handles information gathering conversationally
14
14
  - **Validation & Enrichment**: Agent-level lifecycle hooks for data processing
15
15
  - **Session Persistence**: Data survives across conversation turns and route transitions
16
+ - **Batch Data Collection**: Multiple steps can collect data in a single LLM call
17
+
18
+ ## Data Collection Across Batched Steps
19
+
20
+ When multiple steps execute in a single batch, data collection works across all steps simultaneously.
21
+
22
+ ### How Batch Data Collection Works
23
+
24
+ 1. **Gather collect fields** - All `collect` fields from all steps in the batch are combined
25
+ 2. **Single LLM call** - The combined prompt instructs the LLM to extract all fields
26
+ 3. **Extract from response** - All specified fields are extracted from the LLM response
27
+ 4. **Validate against schema** - Collected data is validated against the agent schema
28
+ 5. **Update session** - All collected values are merged into session data
29
+
30
+ ```typescript
31
+ // Batch with 3 steps, each collecting different fields
32
+ const batch = [
33
+ { collect: ["name"] },
34
+ { collect: ["email", "phone"] },
35
+ { collect: ["preferences"] }
36
+ ];
37
+
38
+ // Combined collection: ["name", "email", "phone", "preferences"]
39
+ // Single LLM response extracts all fields at once
40
+ ```
41
+
42
+ ### Pre-Extraction and Batch Determination
43
+
44
+ Pre-extraction happens **before** batch determination and directly impacts which steps can be batched:
45
+
46
+ ```typescript
47
+ // User message: "I'm John, email john@example.com, I prefer dark mode"
48
+
49
+ // Phase 1: Pre-extraction
50
+ const preExtracted = {
51
+ name: "John",
52
+ email: "john@example.com",
53
+ preferences: { theme: "dark" }
54
+ };
55
+
56
+ // Phase 2: Batch determination (with pre-extracted data merged)
57
+ // Step 1: collect: ["name"] → name exists → doesn't need input
58
+ // Step 2: collect: ["email"] → email exists → doesn't need input
59
+ // Step 3: collect: ["preferences"] → preferences exists → doesn't need input
60
+ // Result: All 3 steps batched together
61
+ ```
62
+
63
+ ### Pre-Extraction Configuration
64
+
65
+ Pre-extraction is automatic when routes define data fields:
66
+
67
+ ```typescript
68
+ // Option 1: Route-level required fields
69
+ agent.createRoute({
70
+ title: "Booking",
71
+ requiredFields: ["hotel", "date", "guests"],
72
+ // Pre-extraction enabled automatically
73
+ });
74
+
75
+ // Option 2: Route-level optional fields
76
+ agent.createRoute({
77
+ title: "Booking",
78
+ optionalFields: ["specialRequests"],
79
+ // Pre-extraction enabled automatically
80
+ });
81
+
82
+ // Option 3: Steps with collect arrays
83
+ agent.createRoute({
84
+ title: "Booking",
85
+ steps: [
86
+ { collect: ["hotel"] }, // Pre-extraction enabled automatically
87
+ ]
88
+ });
89
+ ```
90
+
91
+ ### Batch Collection Example
92
+
93
+ ```typescript
94
+ const response = await agent.respond(
95
+ "I'm Alice, alice@example.com, and I want to book for 2 guests"
96
+ );
97
+
98
+ // Response includes all collected data
99
+ console.log(response.session.data);
100
+ // {
101
+ // name: "Alice",
102
+ // email: "alice@example.com",
103
+ // guests: 2
104
+ // }
105
+
106
+ // Shows which steps executed
107
+ console.log(response.executedSteps);
108
+ // [
109
+ // { id: "ask-name", routeId: "booking" },
110
+ // { id: "ask-email", routeId: "booking" },
111
+ // { id: "ask-guests", routeId: "booking" }
112
+ // ]
113
+ ```
114
+
115
+ ### Validation Across Batch
116
+
117
+ Data validation happens after collection for all fields:
118
+
119
+ ```typescript
120
+ // Agent schema defines validation rules
121
+ const agent = new Agent({
122
+ schema: {
123
+ type: "object",
124
+ properties: {
125
+ email: { type: "string", format: "email" },
126
+ guests: { type: "number", minimum: 1, maximum: 10 }
127
+ }
128
+ }
129
+ });
130
+
131
+ // If validation fails for any field:
132
+ const response = await agent.respond("Book for 100 guests");
133
+
134
+ // Response includes validation errors
135
+ if (response.stoppedReason === 'validation_error') {
136
+ console.log(response.error);
137
+ // {
138
+ // type: 'data_validation',
139
+ // message: 'Validation failed for 1 field(s): guests',
140
+ // details: [{ field: 'guests', message: 'Value exceeds maximum of 10' }]
141
+ // }
142
+ }
143
+ ```
144
+
145
+ ### Partial Data Preservation
146
+
147
+ Even when validation fails, valid partial data is preserved:
148
+
149
+ ```typescript
150
+ // User provides valid name but invalid email
151
+ const response = await agent.respond("I'm John, email: not-an-email");
152
+
153
+ // Valid data is still collected
154
+ console.log(response.session.data.name); // "John"
155
+
156
+ // Invalid data triggers validation error
157
+ console.log(response.stoppedReason); // "validation_error"
158
+ ```
16
159
 
17
160
  ## Agent-Level Schema Definition
18
161
 
@@ -44,7 +44,7 @@ const agent = new Agent<{}, HotelData>({
44
44
  const bookingRoute = agent.createRoute({
45
45
  title: "Hotel Booking",
46
46
  description: "Help users book hotel accommodations",
47
- conditions: ["User wants to book a hotel"],
47
+ when: ["User wants to book a hotel"],
48
48
  requiredFields: ["destination", "checkIn", "checkOut", "guests", "customerName", "email"],
49
49
  optionalFields: ["roomType", "phone", "specialRequests"]
50
50
  });
@@ -52,7 +52,7 @@ const bookingRoute = agent.createRoute({
52
52
  const customerServiceRoute = agent.createRoute({
53
53
  title: "Customer Service",
54
54
  description: "Help with booking issues",
55
- conditions: ["User needs help with existing booking"],
55
+ when: ["User needs help with existing booking"],
56
56
  requiredFields: ["customerName", "email"], // Minimal requirements
57
57
  optionalFields: ["phone", "destination"]
58
58
  });