@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
@@ -0,0 +1,375 @@
1
+ # Migration Guide: Flexible Routing Conditions
2
+
3
+ This guide helps you migrate from the previous routing condition system to the new `ConditionTemplate` system introduced in version X.X.X.
4
+
5
+ ## Overview of Changes
6
+
7
+ The routing system has been enhanced with a new `ConditionTemplate` type that supports:
8
+
9
+ - **String conditions**: AI context for routing decisions
10
+ - **Function conditions**: Programmatic boolean evaluation
11
+ - **Array conditions**: Mix of strings and functions with logical operators
12
+ - **Route skipIf**: New functionality to exclude routes dynamically
13
+ - **Enhanced Step conditions**: More flexible step control
14
+
15
+ ## Breaking Changes
16
+
17
+ ### 1. Route Conditions → Route When
18
+
19
+ **Before:**
20
+ ```typescript
21
+ agent.createRoute({
22
+ title: "Customer Support",
23
+ conditions: ["User needs help", "User asks questions"],
24
+ // ...
25
+ });
26
+ ```
27
+
28
+ **After:**
29
+ ```typescript
30
+ agent.createRoute({
31
+ title: "Customer Support",
32
+ when: ["User needs help", "User asks questions"], // Renamed from 'conditions'
33
+ // ...
34
+ });
35
+ ```
36
+
37
+ **Migration:** Simply rename `conditions` to `when` in all route definitions.
38
+
39
+ ### 2. Step When Conditions
40
+
41
+ **Before:**
42
+ ```typescript
43
+ // String-based when condition
44
+ step.nextStep({
45
+ when: "User wants to continue",
46
+ prompt: "Let's continue..."
47
+ });
48
+
49
+ // Function-based when condition (returned string)
50
+ step.nextStep({
51
+ when: (ctx) => ctx.data?.readyToContinue ? "Ready to proceed" : null,
52
+ prompt: "Let's continue..."
53
+ });
54
+ ```
55
+
56
+ **After:**
57
+ ```typescript
58
+ // String-based when condition (unchanged)
59
+ step.nextStep({
60
+ when: "User wants to continue",
61
+ prompt: "Let's continue..."
62
+ });
63
+
64
+ // Function-based when condition (now returns boolean)
65
+ step.nextStep({
66
+ when: (ctx) => ctx.data?.readyToContinue === true, // Returns boolean
67
+ prompt: "Let's continue..."
68
+ });
69
+
70
+ // Mixed array condition (new capability)
71
+ step.nextStep({
72
+ when: [
73
+ "User is ready to proceed", // AI context
74
+ (ctx) => ctx.data?.readyToContinue === true // Programmatic check
75
+ ],
76
+ prompt: "Let's continue..."
77
+ });
78
+ ```
79
+
80
+ **Migration:** Update function-based `when` conditions to return boolean instead of string.
81
+
82
+ ### 3. Step SkipIf Conditions
83
+
84
+ **Before:**
85
+ ```typescript
86
+ step.nextStep({
87
+ skipIf: (data) => data.alreadyCompleted === true, // Function only
88
+ prompt: "Complete this step"
89
+ });
90
+ ```
91
+
92
+ **After:**
93
+ ```typescript
94
+ // Function-only skipIf (unchanged signature, but now uses full context)
95
+ step.nextStep({
96
+ skipIf: (ctx) => ctx.data?.alreadyCompleted === true, // Full context access
97
+ prompt: "Complete this step"
98
+ });
99
+
100
+ // String-only skipIf (new capability)
101
+ step.nextStep({
102
+ skipIf: "Step already completed",
103
+ prompt: "Complete this step"
104
+ });
105
+
106
+ // Mixed array skipIf (new capability)
107
+ step.nextStep({
108
+ skipIf: [
109
+ "Step already completed", // AI context
110
+ (ctx) => ctx.data?.alreadyCompleted === true // Programmatic check
111
+ ],
112
+ prompt: "Complete this step"
113
+ });
114
+ ```
115
+
116
+ **Migration:** Update `skipIf` functions to use full `TemplateContext` instead of just data.
117
+
118
+ ### 4. Guideline Conditions
119
+
120
+ **Before:**
121
+ ```typescript
122
+ agent.addGuideline({
123
+ condition: "User seems frustrated", // Template type
124
+ action: "Be extra helpful"
125
+ });
126
+
127
+ agent.addGuideline({
128
+ condition: (ctx) => `User type is ${ctx.userType}`, // Function returning string
129
+ action: "Adjust tone accordingly"
130
+ });
131
+ ```
132
+
133
+ **After:**
134
+ ```typescript
135
+ // String condition (unchanged)
136
+ agent.addGuideline({
137
+ condition: "User seems frustrated",
138
+ action: "Be extra helpful"
139
+ });
140
+
141
+ // Function condition (now returns boolean)
142
+ agent.addGuideline({
143
+ condition: (ctx) => ctx.data?.userType === 'premium', // Returns boolean
144
+ action: "Provide premium support"
145
+ });
146
+
147
+ // Mixed array condition (new capability)
148
+ agent.addGuideline({
149
+ condition: [
150
+ "User needs special assistance", // AI context
151
+ (ctx) => ctx.data?.userType === 'premium' // Programmatic check
152
+ ],
153
+ action: "Provide premium support with priority handling"
154
+ });
155
+ ```
156
+
157
+ **Migration:** Update function-based guideline conditions to return boolean instead of string.
158
+
159
+ ## New Features
160
+
161
+ ### Route SkipIf
162
+
163
+ Routes can now be excluded from consideration:
164
+
165
+ ```typescript
166
+ agent.createRoute({
167
+ title: "Premium Features",
168
+ when: ["User wants premium features"],
169
+ skipIf: [
170
+ "Premium features are under maintenance", // AI context
171
+ (ctx) => ctx.context?.maintenanceMode === true // Programmatic check
172
+ ],
173
+ // ...
174
+ });
175
+ ```
176
+
177
+ ### Enhanced Context Access
178
+
179
+ All condition functions now receive full `TemplateContext`:
180
+
181
+ ```typescript
182
+ interface TemplateContext<TContext, TData> {
183
+ context?: TContext; // Agent context
184
+ session?: SessionState<TData>; // Session state
185
+ history?: Event[]; // Conversation history
186
+ data?: Partial<TData>; // Convenience alias for session.data
187
+ }
188
+
189
+ // Use in conditions
190
+ const condition = (ctx) => {
191
+ return ctx.context?.userTier === 'premium' &&
192
+ ctx.data?.issueType === 'billing' &&
193
+ ctx.session?.currentRoute?.id !== 'billing_route';
194
+ };
195
+ ```
196
+
197
+ ## Migration Steps
198
+
199
+ ### Step 1: Update Route Definitions
200
+
201
+ ```typescript
202
+ // Before
203
+ const routes = [
204
+ {
205
+ title: "Support",
206
+ conditions: ["User needs help"],
207
+ // ...
208
+ }
209
+ ];
210
+
211
+ // After
212
+ const routes = [
213
+ {
214
+ title: "Support",
215
+ when: ["User needs help"], // Renamed
216
+ // ...
217
+ }
218
+ ];
219
+ ```
220
+
221
+ ### Step 2: Update Function-Based Conditions
222
+
223
+ ```typescript
224
+ // Before - functions returned strings
225
+ when: (ctx) => ctx.data?.ready ? "User is ready" : null,
226
+ skipIf: (data) => data.completed === true,
227
+
228
+ // After - functions return booleans
229
+ when: (ctx) => ctx.data?.ready === true,
230
+ skipIf: (ctx) => ctx.data?.completed === true,
231
+ ```
232
+
233
+ ### Step 3: Update Guideline Conditions
234
+
235
+ ```typescript
236
+ // Before
237
+ guidelines: [
238
+ {
239
+ condition: (ctx) => `User is ${ctx.userType}`,
240
+ action: "Adjust tone"
241
+ }
242
+ ]
243
+
244
+ // After
245
+ guidelines: [
246
+ {
247
+ condition: (ctx) => ctx.data?.userType === 'premium',
248
+ action: "Provide premium tone and service"
249
+ }
250
+ ]
251
+ ```
252
+
253
+ ### Step 4: Leverage New Capabilities
254
+
255
+ ```typescript
256
+ // Add Route skipIf where appropriate
257
+ agent.createRoute({
258
+ title: "Payment Processing",
259
+ when: ["User wants to make payment"],
260
+ skipIf: [
261
+ "Payment system is down", // AI context
262
+ (ctx) => ctx.context?.paymentSystemDown === true // Programmatic
263
+ ]
264
+ });
265
+
266
+ // Use mixed array conditions for complex logic
267
+ step.nextStep({
268
+ when: [
269
+ "User is ready for advanced features", // AI context
270
+ (ctx) => ctx.data?.experienceLevel === 'advanced', // Programmatic
271
+ (ctx) => ctx.context?.featuresEnabled === true // Context check
272
+ ],
273
+ prompt: "Let's explore advanced features"
274
+ });
275
+ ```
276
+
277
+ ## Testing Your Migration
278
+
279
+ ### 1. Verify Route Selection
280
+
281
+ Test that routes are selected correctly with new `when` conditions:
282
+
283
+ ```typescript
284
+ // Test route selection
285
+ const response = await agent.respond("I need help with billing");
286
+ expect(response.session?.currentRoute?.title).toBe("Billing Support");
287
+ ```
288
+
289
+ ### 2. Test SkipIf Logic
290
+
291
+ Verify that routes and steps are properly skipped:
292
+
293
+ ```typescript
294
+ // Test route skipIf
295
+ const contextWithMaintenance = { maintenanceMode: true };
296
+ const response = await agent.respond("I want premium features", {
297
+ contextOverride: contextWithMaintenance
298
+ });
299
+ // Should not select premium route due to skipIf
300
+ ```
301
+
302
+ ### 3. Validate Guideline Activation
303
+
304
+ Test that guidelines activate correctly with new conditions:
305
+
306
+ ```typescript
307
+ // Test guideline conditions
308
+ const premiumContext = { userType: 'premium' };
309
+ const response = await agent.respond("I need help", {
310
+ contextOverride: premiumContext
311
+ });
312
+ // Should apply premium guidelines
313
+ ```
314
+
315
+ ## Common Issues
316
+
317
+ ### Issue 1: Function Conditions Not Working
318
+
319
+ **Problem:** Function conditions that previously returned strings now need to return booleans.
320
+
321
+ **Solution:**
322
+ ```typescript
323
+ // Wrong
324
+ when: (ctx) => ctx.data?.ready ? "User is ready" : null,
325
+
326
+ // Correct
327
+ when: (ctx) => ctx.data?.ready === true,
328
+ ```
329
+
330
+ ### Issue 2: SkipIf Context Access
331
+
332
+ **Problem:** `skipIf` functions now receive full context instead of just data.
333
+
334
+ **Solution:**
335
+ ```typescript
336
+ // Wrong
337
+ skipIf: (data) => data.completed,
338
+
339
+ // Correct
340
+ skipIf: (ctx) => ctx.data?.completed === true,
341
+ ```
342
+
343
+ ### Issue 3: Guideline Condition Types
344
+
345
+ **Problem:** Guideline conditions that returned strings need to return booleans.
346
+
347
+ **Solution:**
348
+ ```typescript
349
+ // Wrong
350
+ condition: (ctx) => `User is ${ctx.userType}`,
351
+
352
+ // Correct
353
+ condition: (ctx) => ctx.data?.userType === 'premium',
354
+ ```
355
+
356
+ ## Benefits of Migration
357
+
358
+ After migration, you'll have access to:
359
+
360
+ - **Hybrid Logic**: Combine AI understanding with programmatic precision
361
+ - **Better Performance**: Functions execute first, strings only used when needed
362
+ - **Route Exclusion**: Use `skipIf` to dynamically exclude routes
363
+ - **Enhanced Context**: Access full context in all condition functions
364
+ - **Flexible Arrays**: Mix strings and functions for optimal control
365
+
366
+ ## Support
367
+
368
+ If you encounter issues during migration:
369
+
370
+ 1. Check the [API Reference](../../api/README.md) for updated interfaces
371
+ 2. Review [examples](../../../examples/) for migration patterns
372
+ 3. Test incrementally - migrate one route at a time
373
+ 4. Use TypeScript for compile-time validation of new signatures
374
+
375
+ The new `ConditionTemplate` system provides much more flexibility while maintaining backward compatibility where possible.
@@ -0,0 +1,303 @@
1
+ # Multi-Step Execution Migration Guide
2
+
3
+ This guide covers the behavioral changes from single-step to multi-step execution and provides migration guidance for existing routes.
4
+
5
+ ## Overview
6
+
7
+ Multi-step execution is a **major behavioral change** that allows multiple consecutive steps to execute in a single LLM call. While the public API shape remains compatible, the execution semantics differ from the previous single-step model.
8
+
9
+ ## Key Behavioral Changes
10
+
11
+ ### Before: Single-Step Execution
12
+
13
+ Previously, each `.respond()` call executed exactly one step:
14
+
15
+ ```typescript
16
+ // Turn 1
17
+ const response1 = await agent.respond("Book Grand Hotel for 2 on Friday");
18
+ // Executes: ask-hotel step
19
+ // Response: "What date would you like to book?"
20
+
21
+ // Turn 2
22
+ const response2 = await agent.respond("Friday");
23
+ // Executes: ask-date step
24
+ // Response: "How many guests?"
25
+
26
+ // Turn 3
27
+ const response3 = await agent.respond("2 people");
28
+ // Executes: ask-guests step
29
+ // Response: "Booking confirmed!"
30
+
31
+ // Total: 3 LLM calls
32
+ ```
33
+
34
+ ### After: Multi-Step Execution
35
+
36
+ Now, multiple steps can execute in a single call when data requirements are satisfied:
37
+
38
+ ```typescript
39
+ // Turn 1
40
+ const response = await agent.respond("Book Grand Hotel for 2 on Friday");
41
+ // Pre-extraction captures: { hotel: "Grand Hotel", date: "Friday", guests: 2 }
42
+ // Executes: ask-hotel, ask-date, ask-guests steps (all in one batch)
43
+ // Response: "Booking confirmed for 2 guests at Grand Hotel on Friday!"
44
+
45
+ // Total: 1 LLM call
46
+ ```
47
+
48
+ ## What Changed
49
+
50
+ | Aspect | Before | After |
51
+ |--------|--------|-------|
52
+ | Steps per call | Always 1 | 1 or more (batched) |
53
+ | LLM calls | One per step | One per batch |
54
+ | Pre-extraction | Per-step | Before batch determination |
55
+ | Response fields | Basic | Includes `executedSteps`, `stoppedReason` |
56
+ | Hook execution | Per-step | All prepare hooks, then LLM, then all finalize hooks |
57
+
58
+ ## Migration Checklist
59
+
60
+ ### 1. Review Hook Dependencies
61
+
62
+ If your hooks depend on being called between steps, they may need adjustment:
63
+
64
+ ```typescript
65
+ // Before: Hooks called between each step
66
+ const step1 = {
67
+ finalize: async (ctx, data) => {
68
+ // This ran before step2's prepare
69
+ await saveProgress(data);
70
+ }
71
+ };
72
+
73
+ const step2 = {
74
+ prepare: async (ctx, data) => {
75
+ // This expected step1's finalize to have run
76
+ const progress = await loadProgress();
77
+ }
78
+ };
79
+
80
+ // After: All prepare hooks run first, then all finalize hooks
81
+ // If step1 and step2 are batched together:
82
+ // 1. step1.prepare runs
83
+ // 2. step2.prepare runs
84
+ // 3. LLM call
85
+ // 4. step1.finalize runs
86
+ // 5. step2.finalize runs
87
+
88
+ // Migration: Use session data instead of external state
89
+ const step1 = {
90
+ finalize: async (ctx, data) => {
91
+ // Store in session data, not external state
92
+ data.step1Complete = true;
93
+ }
94
+ };
95
+
96
+ const step2 = {
97
+ prepare: async (ctx, data) => {
98
+ // Check session data
99
+ if (!data.step1Complete) {
100
+ // Handle case where step1 hasn't finalized yet
101
+ }
102
+ }
103
+ };
104
+ ```
105
+
106
+ ### 2. Update Response Handling
107
+
108
+ Check for new response fields:
109
+
110
+ ```typescript
111
+ // Before
112
+ const response = await agent.respond(message);
113
+ console.log(response.message);
114
+ console.log(response.isRouteComplete);
115
+
116
+ // After - additional fields available
117
+ const response = await agent.respond(message);
118
+ console.log(response.message);
119
+ console.log(response.isRouteComplete);
120
+ console.log(response.executedSteps); // NEW: Array of executed steps
121
+ console.log(response.stoppedReason); // NEW: Why execution stopped
122
+ console.log(response.error); // NEW: Error details if any
123
+ ```
124
+
125
+ ### 3. Review SkipIf Conditions
126
+
127
+ SkipIf conditions now affect batch determination:
128
+
129
+ ```typescript
130
+ // Before: skipIf evaluated when entering step
131
+ const step = {
132
+ skipIf: (data) => {
133
+ // Called when transitioning to this step
134
+ return data.alreadyHaveInfo;
135
+ }
136
+ };
137
+
138
+ // After: skipIf evaluated during batch determination
139
+ // If skipIf returns true, step is skipped and next step is evaluated
140
+ // If skipIf throws, step is treated as non-skippable (included in batch)
141
+
142
+ // Migration: Ensure skipIf is pure and doesn't have side effects
143
+ const step = {
144
+ skipIf: (data) => {
145
+ // GOOD: Pure function
146
+ return data.alreadyHaveInfo;
147
+ }
148
+ };
149
+
150
+ // AVOID: Side effects in skipIf
151
+ const badStep = {
152
+ skipIf: (data) => {
153
+ // BAD: Side effect
154
+ logSkipCheck(data);
155
+ return data.alreadyHaveInfo;
156
+ }
157
+ };
158
+ ```
159
+
160
+ ### 4. Handle Partial Execution
161
+
162
+ Errors may leave partial progress:
163
+
164
+ ```typescript
165
+ // Before: Single step, all or nothing
166
+
167
+ // After: Batch may partially complete
168
+ const response = await agent.respond(message);
169
+
170
+ if (response.stoppedReason === 'prepare_error') {
171
+ // Some steps may have executed before the error
172
+ console.log("Executed before error:", response.executedSteps);
173
+ console.log("Error details:", response.error);
174
+ }
175
+ ```
176
+
177
+ ### 5. Update Tests
178
+
179
+ Tests expecting single-step behavior need updates:
180
+
181
+ ```typescript
182
+ // Before
183
+ test("collects hotel name", async () => {
184
+ const response = await agent.respond("Book Grand Hotel");
185
+ expect(response.session.data.hotel).toBe("Grand Hotel");
186
+ // Assumed only hotel step executed
187
+ });
188
+
189
+ // After
190
+ test("collects hotel name", async () => {
191
+ const response = await agent.respond("Book Grand Hotel");
192
+ expect(response.session.data.hotel).toBe("Grand Hotel");
193
+
194
+ // Check which steps actually executed
195
+ expect(response.executedSteps).toContainEqual(
196
+ expect.objectContaining({ id: "ask-hotel" })
197
+ );
198
+
199
+ // May have executed more steps if data was available
200
+ expect(response.stoppedReason).toBe("needs_input");
201
+ });
202
+ ```
203
+
204
+ ## Before/After Examples
205
+
206
+ ### Example 1: Simple Booking Flow
207
+
208
+ **Before (3 turns):**
209
+ ```
210
+ User: "I want to book a hotel"
211
+ Bot: "Which hotel would you like?"
212
+ User: "Grand Hotel"
213
+ Bot: "What date?"
214
+ User: "Friday"
215
+ Bot: "Booking confirmed!"
216
+ ```
217
+
218
+ **After (potentially 1-2 turns):**
219
+ ```
220
+ User: "I want to book Grand Hotel for Friday"
221
+ Bot: "Booking confirmed for Grand Hotel on Friday!"
222
+ ```
223
+
224
+ ### Example 2: Partial Information
225
+
226
+ **Before:**
227
+ ```
228
+ User: "Book Grand Hotel"
229
+ Bot: "What date?" (only hotel step executed)
230
+ ```
231
+
232
+ **After:**
233
+ ```
234
+ User: "Book Grand Hotel"
235
+ Bot: "What date?" (hotel step executed, stopped at date step)
236
+ // response.executedSteps = [{ id: "ask-hotel" }]
237
+ // response.stoppedReason = "needs_input"
238
+ ```
239
+
240
+ ### Example 3: With SkipIf Conditions
241
+
242
+ **Before:**
243
+ ```typescript
244
+ // Each step evaluated individually
245
+ const step1 = { skipIf: (d) => !!d.name }; // Skipped if name exists
246
+ const step2 = { skipIf: (d) => !!d.email }; // Skipped if email exists
247
+ ```
248
+
249
+ **After:**
250
+ ```typescript
251
+ // All skipIf conditions evaluated during batch determination
252
+ // If user provides "I'm John, john@example.com":
253
+ // - Pre-extraction: { name: "John", email: "john@example.com" }
254
+ // - step1 skipIf: true (skipped)
255
+ // - step2 skipIf: true (skipped)
256
+ // - Both steps skipped, route may complete immediately
257
+ ```
258
+
259
+ ## Opting Out of Batching
260
+
261
+ If you need single-step behavior for specific steps, use `requires` to create dependencies:
262
+
263
+ ```typescript
264
+ // Force step2 to wait for step1's data
265
+ const step1 = {
266
+ collect: ["name"],
267
+ };
268
+
269
+ const step2 = {
270
+ collect: ["email"],
271
+ requires: ["name"], // Won't batch with step1
272
+ };
273
+
274
+ // Now step2 will only execute after step1 completes
275
+ // (in a separate batch/LLM call)
276
+ ```
277
+
278
+ ## Debugging Migration Issues
279
+
280
+ Enable debug mode to see batch behavior:
281
+
282
+ ```typescript
283
+ const agent = new Agent({
284
+ debug: true,
285
+ // ...
286
+ });
287
+
288
+ // Logs will show:
289
+ // [BatchExecutor] Starting batch determination...
290
+ // [BatchExecutor] Including step ask-hotel in batch
291
+ // [BatchExecutor] Step ask-date needs input, stopping batch
292
+ ```
293
+
294
+ ## Summary
295
+
296
+ 1. **Multiple steps can now execute together** - reducing LLM calls
297
+ 2. **Pre-extraction happens before batch determination** - maximizing batching
298
+ 3. **New response fields** - `executedSteps`, `stoppedReason`, `error`
299
+ 4. **Hook execution order changed** - all prepare, then LLM, then all finalize
300
+ 5. **SkipIf affects batching** - evaluated during batch determination
301
+ 6. **Partial progress preserved** - on errors, completed steps are retained
302
+
303
+ The changes improve efficiency and UX while maintaining API compatibility. Most existing code will work without changes, but reviewing hook dependencies and test expectations is recommended.