@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
@@ -8,7 +8,11 @@
8
8
  * - Schema-first data definition
9
9
  * - Type-safe data extraction
10
10
  * - Automatic validation
11
- * - SkipIf conditions for smart flow control
11
+ * - NEW: Flexible ConditionTemplate patterns for routing and step control:
12
+ * - String-only conditions: "user wants to register" (AI context only)
13
+ * - Function-only conditions: (ctx) => ctx.data?.complete (programmatic only)
14
+ * - Mixed arrays: ["user provided info", (ctx) => !!ctx.data?.name] (hybrid)
15
+ * - Enhanced skipIf conditions for smart flow control
12
16
  */
13
17
 
14
18
  import { Agent, GeminiProvider, type Tool } from "../../src/index";
@@ -106,6 +110,16 @@ agent.addTool(saveUserProfileTool);
106
110
  agent.createRoute({
107
111
  title: "User Profile Collection",
108
112
  description: "Collect comprehensive user profile information",
113
+ // Mixed condition: AI context + programmatic validation
114
+ when: [
115
+ "user wants to create a profile or register",
116
+ (ctx) => {
117
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
118
+ return message.includes('profile') || message.includes('register') || message.includes('sign up');
119
+ }
120
+ ],
121
+ // Skip if user already has a complete profile
122
+ skipIf: (ctx) => Boolean(ctx.data?.name && ctx.data?.email && ctx.data?.age),
109
123
  // NEW: Required fields for route completion (instead of schema)
110
124
  requiredFields: ["name", "email"],
111
125
  // NEW: Optional fields that enhance the experience
@@ -117,7 +131,8 @@ agent.createRoute({
117
131
  description: "Ask for user's name",
118
132
  prompt: "Hi! I'd like to create a profile for you. What's your name?",
119
133
  collect: ["name"],
120
- skipIf: (data: Partial<UserProfileData>) => !!data.name,
134
+ // String-only skipIf for AI context
135
+ skipIf: "user already provided their name",
121
136
  },
122
137
  {
123
138
  id: "ask_email",
@@ -125,7 +140,8 @@ agent.createRoute({
125
140
  prompt: "What's your email address?",
126
141
  collect: ["email"],
127
142
  requires: ["name"],
128
- skipIf: (data: Partial<UserProfileData>) => !!data.email,
143
+ // Function-only skipIf for programmatic logic
144
+ skipIf: (ctx) => !!ctx.data?.email,
129
145
  },
130
146
  {
131
147
  id: "ask_age",
@@ -133,7 +149,11 @@ agent.createRoute({
133
149
  prompt: "How old are you? (optional)",
134
150
  collect: ["age"],
135
151
  requires: ["name", "email"],
136
- skipIf: (data: Partial<UserProfileData>) => data.age !== undefined,
152
+ // Mixed skipIf: AI context + programmatic check
153
+ skipIf: [
154
+ "age already collected",
155
+ (ctx) => ctx.data?.age !== undefined
156
+ ],
137
157
  },
138
158
  {
139
159
  id: "ask_interests",
@@ -141,8 +161,11 @@ agent.createRoute({
141
161
  prompt: "What are your interests or hobbies? (optional)",
142
162
  collect: ["interests"],
143
163
  requires: ["name", "email"],
144
- skipIf: (data: Partial<UserProfileData>) =>
145
- !!(data.interests && data.interests.length > 0),
164
+ // Mixed skipIf with complex logic
165
+ skipIf: [
166
+ "interests already provided",
167
+ (ctx) => !!(ctx.data?.interests && ctx.data.interests.length > 0)
168
+ ],
146
169
  },
147
170
  {
148
171
  id: "ask_contact_preference",
@@ -150,7 +173,8 @@ agent.createRoute({
150
173
  prompt: "What's your preferred contact method?",
151
174
  collect: ["preferredContact"],
152
175
  requires: ["name", "email"],
153
- skipIf: (data: Partial<UserProfileData>) => !!data.preferredContact,
176
+ // Function-only skipIf
177
+ skipIf: (ctx) => !!ctx.data?.preferredContact,
154
178
  },
155
179
  {
156
180
  id: "ask_newsletter",
@@ -158,8 +182,8 @@ agent.createRoute({
158
182
  prompt: "Would you like to subscribe to our newsletter?",
159
183
  collect: ["newsletterOptIn"],
160
184
  requires: ["name", "email"],
161
- skipIf: (data: Partial<UserProfileData>) =>
162
- data.newsletterOptIn !== undefined,
185
+ // String-only skipIf for simple cases
186
+ skipIf: "newsletter preference already collected",
163
187
  },
164
188
  {
165
189
  id: "save_profile",
@@ -10,6 +10,11 @@
10
10
  * - Data persistence across turns
11
11
  * - Session restoration
12
12
  * - Route transitions with session state
13
+ * - NEW: Flexible ConditionTemplate patterns for session-aware routing:
14
+ * - String-only conditions: "user wants to order" (AI context only)
15
+ * - Function-only conditions: (ctx) => !!ctx.data?.orderId (session state checks)
16
+ * - Mixed arrays: ["payment needed", (ctx) => !ctx.data?.confirmed] (hybrid)
17
+ * - Session-aware skipIf conditions for flow control
13
18
  */
14
19
 
15
20
  import {
@@ -96,7 +101,7 @@ const processPaymentTool: Tool<unknown, UnifiedOrderData> = {
96
101
  };
97
102
 
98
103
  // Define unified data schema for all order-related interactions
99
- interface UnifiedOrderData extends OrderData, PaymentData {}
104
+ interface UnifiedOrderData extends OrderData, PaymentData { }
100
105
 
101
106
  const orderSchema = {
102
107
  type: "object",
@@ -147,16 +152,16 @@ const orderValidationTool = agent.tool.createValidation({
147
152
  validator: async (context, data) => {
148
153
  const errors: ValidationError[] = [];
149
154
  if (!data.customerName || data.customerName.length < 2) {
150
- errors.push({
151
- field: "customerName",
155
+ errors.push({
156
+ field: "customerName",
152
157
  value: data.customerName,
153
158
  message: "Customer name must be at least 2 characters",
154
159
  schemaPath: "customerName"
155
160
  });
156
161
  }
157
162
  if (!data.budget || data.budget < 100) {
158
- errors.push({
159
- field: "budget",
163
+ errors.push({
164
+ field: "budget",
160
165
  value: data.budget,
161
166
  message: "Budget must be at least $100",
162
167
  schemaPath: "budget"
@@ -178,7 +183,7 @@ const orderEnrichmentTool = agent.tool.createDataEnrichment({
178
183
  // Enrich with fields that exist in UnifiedOrderData
179
184
  const urgentDelivery = data.budget > 1000; // Premium orders get urgent delivery
180
185
  const preferredColor = data.productType === "laptop" ? "silver" : "black";
181
-
186
+
182
187
  return {
183
188
  urgentDelivery,
184
189
  preferredColor,
@@ -190,6 +195,19 @@ const orderEnrichmentTool = agent.tool.createDataEnrichment({
190
195
  agent.createRoute({
191
196
  title: "Product Order",
192
197
  description: "Collect order details and create an order",
198
+ // Mixed condition: AI context + programmatic validation
199
+ when: [
200
+ "user wants to place an order or buy something",
201
+ (ctx) => {
202
+ const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
203
+ return message.includes('order') || message.includes('buy') || message.includes('purchase');
204
+ }
205
+ ],
206
+ // Skip if user already has a pending order
207
+ skipIf: [
208
+ "user already has an active order",
209
+ (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed
210
+ ],
193
211
  // NEW: Required fields for route completion
194
212
  requiredFields: ["customerName", "productType", "budget"],
195
213
  // NEW: Optional fields that enhance the experience
@@ -201,7 +219,8 @@ agent.createRoute({
201
219
  description: "Ask for customer name",
202
220
  prompt: "Hi! I'd like to help you place an order. What's your name?",
203
221
  collect: ["customerName"],
204
- skipIf: (data: Partial<UnifiedOrderData>) => !!data.customerName,
222
+ // String-only skipIf for AI context
223
+ skipIf: "customer name already provided",
205
224
  },
206
225
  {
207
226
  id: "ask_product",
@@ -209,7 +228,8 @@ agent.createRoute({
209
228
  prompt: "What would you like to order? (laptop, phone, or tablet)",
210
229
  collect: ["productType"],
211
230
  requires: ["customerName"],
212
- skipIf: (data: Partial<UnifiedOrderData>) => !!data.productType,
231
+ // Function-only skipIf for programmatic check
232
+ skipIf: (ctx) => !!ctx.data?.productType,
213
233
  },
214
234
  {
215
235
  id: "ask_budget",
@@ -217,7 +237,11 @@ agent.createRoute({
217
237
  prompt: "What's your budget for this purchase?",
218
238
  collect: ["budget"],
219
239
  requires: ["customerName", "productType"],
220
- skipIf: (data: Partial<UnifiedOrderData>) => data.budget !== undefined,
240
+ // Mixed skipIf: AI context + programmatic logic
241
+ skipIf: [
242
+ "budget already specified",
243
+ (ctx) => ctx.data?.budget !== undefined
244
+ ],
221
245
  },
222
246
  {
223
247
  id: "ask_color",
@@ -225,7 +249,8 @@ agent.createRoute({
225
249
  prompt: "Do you have a preferred color?",
226
250
  collect: ["preferredColor"],
227
251
  requires: ["customerName", "productType", "budget"],
228
- skipIf: (data: Partial<UnifiedOrderData>) => !!data.preferredColor,
252
+ // Function-only skipIf
253
+ skipIf: (ctx) => !!ctx.data?.preferredColor,
229
254
  },
230
255
  {
231
256
  id: "ask_urgent",
@@ -233,7 +258,8 @@ agent.createRoute({
233
258
  prompt: "Do you need urgent delivery?",
234
259
  collect: ["urgentDelivery"],
235
260
  requires: ["customerName", "productType", "budget"],
236
- skipIf: (data: Partial<UnifiedOrderData>) => data.urgentDelivery !== undefined,
261
+ // String-only skipIf for simple cases
262
+ skipIf: "delivery preference already collected",
237
263
  },
238
264
  {
239
265
  id: "create_order",
@@ -253,6 +279,10 @@ agent.createRoute({
253
279
  agent.createRoute({
254
280
  title: "Payment Processing",
255
281
  description: "Process payment for an order",
282
+ // Function-only condition for programmatic logic
283
+ when: (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed,
284
+ // Skip if payment already processed
285
+ skipIf: (ctx) => !!ctx.data?.confirmed,
256
286
  // NEW: Required fields for route completion
257
287
  requiredFields: ["orderId", "paymentMethod", "amount"],
258
288
  // NEW: Optional fields
@@ -265,7 +295,11 @@ agent.createRoute({
265
295
  prompt:
266
296
  "Now let's process payment for your order. What payment method would you prefer?",
267
297
  collect: ["paymentMethod"],
268
- skipIf: (data: Partial<UnifiedOrderData>) => !!data.paymentMethod,
298
+ // Mixed skipIf: AI context + programmatic check
299
+ skipIf: [
300
+ "payment method already selected",
301
+ (ctx) => !!ctx.data?.paymentMethod
302
+ ],
269
303
  },
270
304
  {
271
305
  id: "ask_amount",
@@ -273,7 +307,8 @@ agent.createRoute({
273
307
  prompt: "What's the payment amount?",
274
308
  collect: ["amount"],
275
309
  requires: ["paymentMethod"],
276
- skipIf: (data: Partial<UnifiedOrderData>) => data.amount !== undefined,
310
+ // Function-only skipIf
311
+ skipIf: (ctx) => ctx.data?.amount !== undefined,
277
312
  },
278
313
  {
279
314
  id: "process_payment",
@@ -308,7 +343,7 @@ async function demonstrateSessionManagement() {
308
343
 
309
344
  // Copy routes to the session agent
310
345
  agent.getRoutes().forEach(route => {
311
- sessionAgent.createRoute(route);
346
+ sessionAgent.createRoute(route.toOptions());
312
347
  });
313
348
 
314
349
  // Turn 1: Start order process - simple message API
@@ -387,7 +422,7 @@ async function demonstrateSessionPersistence() {
387
422
 
388
423
  // Copy routes to the persistent agent
389
424
  agent.getRoutes().forEach(route => {
390
- persistentAgent.createRoute(route);
425
+ persistentAgent.createRoute(route.toOptions());
391
426
  });
392
427
 
393
428
  console.log("Session ready:", persistentAgent.session.id);
@@ -426,7 +461,7 @@ async function demonstrateSessionPersistence() {
426
461
 
427
462
  // Copy routes to the restored agent
428
463
  agent.getRoutes().forEach(route => {
429
- restoredAgent.createRoute(route);
464
+ restoredAgent.createRoute(route.toOptions());
430
465
  });
431
466
 
432
467
  console.log("Session automatically restored:");
@@ -155,7 +155,7 @@ async function example() {
155
155
  const onboardingRoute = agent.createRoute({
156
156
  title: "Customer Onboarding",
157
157
  description: "Collect customer information",
158
- conditions: [
158
+ when: [
159
159
  "User is a new customer",
160
160
  "User needs to set up their account",
161
161
  ],
@@ -171,19 +171,19 @@ async function example() {
171
171
  id: "ask_name",
172
172
  prompt: "Ask for full name",
173
173
  collect: ["fullName"],
174
- skipIf: (data: Partial<OnboardingData>) => !!data.fullName,
174
+ skipIf: (ctx) => !!ctx.data?.fullName,
175
175
  })
176
176
  .nextStep({
177
177
  id: "ask_email",
178
178
  prompt: "Ask for email address",
179
179
  collect: ["email"],
180
- skipIf: (data: Partial<OnboardingData>) => !!data.email,
180
+ skipIf: (ctx) => !!ctx.data?.email,
181
181
  })
182
182
  .nextStep({
183
183
  id: "ask_company",
184
184
  prompt: "Ask for company name",
185
185
  collect: ["companyName"],
186
- skipIf: (data: Partial<OnboardingData>) => !!data.companyName,
186
+ skipIf: (ctx) => !!ctx.data?.companyName,
187
187
  })
188
188
  .nextStep({
189
189
  id: "ask_phone",
@@ -414,7 +414,7 @@ async function syncSessionToDatabase(
414
414
  /**
415
415
  * Mock function to simulate processing the completed onboarding data.
416
416
  */
417
- async function processOnboarding(data: Partial<OnboardingData> | undefined) {
417
+ async function processOnboarding(data) {
418
418
  console.log("\n🚀 Processing onboarding data...");
419
419
  console.log(
420
420
  ` - Creating account for ${data?.fullName} at ${data?.companyName}`
@@ -453,7 +453,7 @@ async function advancedExample() {
453
453
  schema: smartOnboardingSchema,
454
454
  hooks: {
455
455
  // Validate and enrich collected data
456
- onDataUpdate: (data: Partial<OnboardingData>, _previous: Partial<OnboardingData>) => {
456
+ onDataUpdate: (data, _previous: Partial<OnboardingData>) => {
457
457
  console.log("🔄 Data collected, validating...");
458
458
 
459
459
  // Normalize email
@@ -248,7 +248,7 @@ function createHealthcareAgent() {
248
248
  const schedulingRoute = agent.createRoute({
249
249
  title: "Schedule an Appointment",
250
250
  description: "Helps the patient find a time for their appointment.",
251
- conditions: ["The patient wants to schedule an appointment"],
251
+ when: ["The patient wants to schedule an appointment"],
252
252
  // Route-level identity for healthcare scheduling
253
253
  identity:
254
254
  "You are a compassionate healthcare scheduling assistant who helps patients book appointments. Be empathetic, prioritize urgent cases, and ensure patients feel supported throughout the process.",
@@ -281,7 +281,7 @@ function createHealthcareAgent() {
281
281
  const collectReason = schedulingRoute.initialStep.nextStep({
282
282
  prompt: "Ask what the patient needs an appointment for",
283
283
  collect: ["appointmentReason"],
284
- skipIf: (data) => !!data.appointmentReason,
284
+ skipIf: (ctx) => !!ctx.data?.appointmentReason,
285
285
  when: "Patient hasn't specified reason for appointment yet",
286
286
  });
287
287
 
@@ -289,7 +289,7 @@ function createHealthcareAgent() {
289
289
  const checkUrgency = collectReason.nextStep({
290
290
  prompt: "Check if this is urgent and show available slots",
291
291
  collect: ["urgency"],
292
- skipIf: (data) => !!data.urgency,
292
+ skipIf: (ctx) => !!ctx.data?.urgency,
293
293
  requires: ["appointmentReason"],
294
294
  when: "Reason provided, now assess urgency level",
295
295
  });
@@ -307,14 +307,14 @@ function createHealthcareAgent() {
307
307
  const collectPreferences = presentTimes.nextStep({
308
308
  prompt: "Collect preferred time and date",
309
309
  collect: ["preferredTime", "preferredDate"],
310
- skipIf: (data) => !!data.preferredTime && !!data.preferredDate,
310
+ skipIf: (ctx) => !!ctx.data?.preferredTime && !!ctx.data?.preferredDate,
311
311
  });
312
312
 
313
313
  // Step 5: Confirm details and schedule
314
314
  const confirmDetails = collectPreferences.nextStep({
315
315
  prompt: "Confirm the details with the patient before scheduling",
316
316
  collect: ["appointmentType"],
317
- skipIf: (data) => !!data.appointmentType,
317
+ skipIf: (ctx) => !!ctx.data?.appointmentType,
318
318
  requires: ["appointmentReason", "preferredTime", "preferredDate"],
319
319
  });
320
320
 
@@ -358,7 +358,7 @@ function createHealthcareAgent() {
358
358
  const labResultsRoute = agent.createRoute({
359
359
  title: "Lab Results",
360
360
  description: "Retrieves the patient's lab results and explains them.",
361
- conditions: ["The patient wants to see their lab results"],
361
+ when: ["The patient wants to see their lab results"],
362
362
  // NEW: Required fields for route completion
363
363
  requiredFields: ["testType"],
364
364
  // NEW: Optional fields
@@ -369,14 +369,14 @@ function createHealthcareAgent() {
369
369
  const collectTestInfo = labResultsRoute.initialStep.nextStep({
370
370
  prompt: "Ask what type of test results they want to see",
371
371
  collect: ["testType"],
372
- skipIf: (data) => !!data.testType,
372
+ skipIf: (ctx) => !!ctx.data?.testType,
373
373
  });
374
374
 
375
375
  // Step 2: Optional: collect test date
376
376
  const collectTestDate = collectTestInfo.nextStep({
377
377
  prompt: "Ask for the test date if they remember it",
378
378
  collect: ["testDate"],
379
- skipIf: (data) => !!data.testDate,
379
+ skipIf: (ctx) => !!ctx.data?.testDate,
380
380
  requires: ["testType"],
381
381
  });
382
382
 
@@ -404,7 +404,7 @@ function createHealthcareAgent() {
404
404
  const satisfactionRoute = agent.createRoute({
405
405
  title: "Satisfaction Survey",
406
406
  description: "Quick satisfaction survey after scheduling",
407
- conditions: ["Collect patient satisfaction feedback"],
407
+ when: ["Collect patient satisfaction feedback"],
408
408
 
409
409
  // Route-specific knowledge base for patient feedback
410
410
  knowledgeBase: {
@@ -442,7 +442,7 @@ function createHealthcareAgent() {
442
442
  prompt:
443
443
  "Ask for overall satisfaction rating from 1 to 5 with the scheduling experience",
444
444
  collect: ["rating"],
445
- skipIf: (data) => !!data.rating,
445
+ skipIf: (ctx) => !!ctx.data?.rating,
446
446
  });
447
447
 
448
448
  const askComments = askRating.nextStep({
@@ -76,7 +76,7 @@ async function example() {
76
76
  const userId = "user_123";
77
77
 
78
78
  // Create adapter
79
- const adapter = new OpenSearchAdapter<ConversationContext>(client, {
79
+ const adapter = new OpenSearchAdapter(client, {
80
80
  indices: {
81
81
  sessions: "agent_sessions",
82
82
  messages: "agent_messages",
@@ -145,7 +145,7 @@ async function example() {
145
145
  const complaintRoute = agent.createRoute({
146
146
  title: "Handle Customer Complaint",
147
147
  description: "Process and resolve customer complaints",
148
- conditions: [
148
+ when: [
149
149
  "User has a complaint",
150
150
  "User reports an issue or problem",
151
151
  "User is dissatisfied",
@@ -161,18 +161,18 @@ async function example() {
161
161
  .nextStep({
162
162
  prompt: "Understand the complaint",
163
163
  collect: ["category", "severity", "description"],
164
- skipIf: (data: Partial<ComplaintData>) => !!data.description,
164
+ skipIf: (ctx) => !!ctx.data?.description,
165
165
  })
166
166
  .nextStep({
167
167
  prompt: "Identify affected service",
168
168
  collect: ["affectedService"],
169
- skipIf: (data: Partial<ComplaintData>) => !!data.affectedService,
169
+ skipIf: (ctx) => !!ctx.data?.affectedService,
170
170
  requires: ["description"],
171
171
  })
172
172
  .nextStep({
173
173
  prompt: "Ask for desired resolution",
174
174
  collect: ["requestedResolution"],
175
- skipIf: (data: Partial<ComplaintData>) => !!data.requestedResolution,
175
+ skipIf: (ctx) => !!ctx.data?.requestedResolution,
176
176
  requires: ["category", "description"],
177
177
  })
178
178
  .nextStep({
@@ -254,7 +254,7 @@ async function example() {
254
254
  recoveredAgent.createRoute({
255
255
  title: "Handle Customer Complaint",
256
256
  description: "Process and resolve customer complaints",
257
- conditions: [
257
+ when: [
258
258
  "User has a complaint",
259
259
  "User reports an issue or problem",
260
260
  "User is dissatisfied",
@@ -324,7 +324,7 @@ async function analyticsExample() {
324
324
  auth: { username: "admin", password: "admin" },
325
325
  });
326
326
 
327
- const adapter = new OpenSearchAdapter<ConversationContext>(client, {
327
+ const adapter = new OpenSearchAdapter(client, {
328
328
  indices: {
329
329
  sessions: "support_sessions",
330
330
  messages: "support_messages",
@@ -396,7 +396,7 @@ async function analyticsExample() {
396
396
  // NEW: Agent-level schema
397
397
  schema: ticketSchema,
398
398
  persistence: {
399
- adapter: new OpenSearchAdapter<AnalyticsContext>(client),
399
+ adapter: new OpenSearchAdapter(client),
400
400
  autoSave: true,
401
401
  },
402
402
  });
@@ -92,7 +92,7 @@ function createBookingAgent(sessionId?: string) {
92
92
  {
93
93
  title: "Hotel Booking",
94
94
  description: "Collect booking details and confirm reservation",
95
- conditions: ["User wants to book a hotel room"],
95
+ when: ["User wants to book a hotel room"],
96
96
  // NEW: Required fields for route completion
97
97
  requiredFields: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
98
98
  // NEW: Optional fields that enhance the experience
@@ -103,7 +103,7 @@ function createBookingAgent(sessionId?: string) {
103
103
  description: "Ask for customer name",
104
104
  prompt: "Hi! I'd be happy to help you book a hotel room. What's your name?",
105
105
  collect: ["customerName"],
106
- skipIf: (data: Partial<BookingData>) => !!data.customerName,
106
+ skipIf: (ctx) => !!ctx.data?.customerName,
107
107
  },
108
108
  {
109
109
  id: "ask_hotel",
@@ -111,7 +111,7 @@ function createBookingAgent(sessionId?: string) {
111
111
  prompt: "Which hotel would you like to book?",
112
112
  collect: ["hotelName"],
113
113
  requires: ["customerName"],
114
- skipIf: (data: Partial<BookingData>) => !!data.hotelName,
114
+ skipIf: (ctx) => !!ctx.data?.hotelName,
115
115
  },
116
116
  {
117
117
  id: "ask_dates",
@@ -119,7 +119,7 @@ function createBookingAgent(sessionId?: string) {
119
119
  prompt: "What are your check-in and check-out dates?",
120
120
  collect: ["checkInDate", "checkOutDate"],
121
121
  requires: ["customerName", "hotelName"],
122
- skipIf: (data: Partial<BookingData>) => !!data.checkInDate && !!data.checkOutDate,
122
+ skipIf: (ctx) => !!ctx.data?.checkInDate && !!ctx.data.checkOutDate,
123
123
  },
124
124
  {
125
125
  id: "ask_guests",
@@ -127,7 +127,7 @@ function createBookingAgent(sessionId?: string) {
127
127
  prompt: "How many guests will be staying?",
128
128
  collect: ["guests"],
129
129
  requires: ["customerName", "hotelName", "checkInDate", "checkOutDate"],
130
- skipIf: (data: Partial<BookingData>) => data.guests !== undefined,
130
+ skipIf: (ctx) => ctx.data?.guests !== undefined,
131
131
  },
132
132
  {
133
133
  id: "ask_room_type",
@@ -135,7 +135,7 @@ function createBookingAgent(sessionId?: string) {
135
135
  prompt: "What type of room would you prefer? (standard, deluxe, or suite)",
136
136
  collect: ["roomType"],
137
137
  requires: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
138
- skipIf: (data: Partial<BookingData>) => !!data.roomType,
138
+ skipIf: (ctx) => !!ctx.data?.roomType,
139
139
  },
140
140
  {
141
141
  id: "ask_special_requests",
@@ -143,7 +143,7 @@ function createBookingAgent(sessionId?: string) {
143
143
  prompt: "Do you have any special requests for your stay?",
144
144
  collect: ["specialRequests"],
145
145
  requires: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
146
- skipIf: (data: Partial<BookingData>) => data.specialRequests !== undefined,
146
+ skipIf: (ctx) => ctx.data?.specialRequests !== undefined,
147
147
  },
148
148
  {
149
149
  id: "confirm_booking",
@@ -168,7 +168,7 @@ interface ChatResponse {
168
168
  message: string;
169
169
  sessionId: string;
170
170
  isComplete: boolean;
171
- data?: Partial<BookingData>;
171
+ data?;
172
172
  }
173
173
 
174
174
  // Simulate POST /chat endpoint
@@ -97,7 +97,7 @@ async function example() {
97
97
  userName: "Alice",
98
98
  },
99
99
  persistence: {
100
- adapter: new PrismaAdapter<ConversationContext>({ prisma }),
100
+ adapter: new PrismaAdapter({ prisma }),
101
101
  autoSave: true, // Auto-saves session after each response
102
102
  },
103
103
  schema: {
@@ -139,7 +139,7 @@ async function example() {
139
139
  const flightRoute = agent.createRoute({
140
140
  title: "Book a Flight",
141
141
  description: "Help user book a flight ticket",
142
- conditions: [
142
+ when: [
143
143
  "User wants to book a flight",
144
144
  "User mentions travel, flying, or booking tickets",
145
145
  ],
@@ -150,14 +150,14 @@ async function example() {
150
150
  id: "ask_destination", // Custom step ID for easier tracking
151
151
  prompt: "Ask where they want to fly",
152
152
  collect: ["destination"],
153
- skipIf: (data: Partial<FlightBookingData>) => !!data.destination,
153
+ skipIf: (ctx) => !!ctx.data?.destination,
154
154
  });
155
155
 
156
156
  const askDates = askDestination.nextStep({
157
157
  id: "ask_dates", // Custom step ID
158
158
  prompt: "Ask about travel dates",
159
159
  collect: ["departureDate", "returnDate"],
160
- skipIf: (data: Partial<FlightBookingData>) => !!data.departureDate,
160
+ skipIf: (ctx) => !!ctx.data?.departureDate,
161
161
  requires: ["destination"],
162
162
  });
163
163
 
@@ -165,7 +165,7 @@ async function example() {
165
165
  id: "ask_passengers", // Custom step ID
166
166
  prompt: "Ask how many passengers",
167
167
  collect: ["passengers"],
168
- skipIf: (data: Partial<FlightBookingData>) => !!data.passengers,
168
+ skipIf: (ctx) => !!ctx.data?.passengers,
169
169
  requires: ["destination", "departureDate"],
170
170
  });
171
171
 
@@ -173,7 +173,7 @@ async function example() {
173
173
  id: "ask_cabin_class", // Custom step ID
174
174
  prompt: "Ask about cabin class preference",
175
175
  collect: ["cabinClass"],
176
- skipIf: (data: Partial<FlightBookingData>) => !!data.cabinClass,
176
+ skipIf: (ctx) => !!ctx.data?.cabinClass,
177
177
  requires: ["destination", "departureDate", "passengers"],
178
178
  });
179
179
 
@@ -275,7 +275,7 @@ async function example() {
275
275
  required: ["destination", "departureDate", "passengers", "cabinClass"],
276
276
  },
277
277
  persistence: {
278
- adapter: new PrismaAdapter<ConversationContext>({ prisma }),
278
+ adapter: new PrismaAdapter({ prisma }),
279
279
  },
280
280
  sessionId, // Same sessionId - will load existing session
281
281
  });
@@ -338,8 +338,8 @@ async function advancedExample() {
338
338
  // Lifecycle hooks for data enrichment
339
339
  hooks: {
340
340
  onDataUpdate: async (
341
- data: Partial<OnboardingData>,
342
- previous: Partial<OnboardingData>
341
+ data,
342
+ previous
343
343
  ) => {
344
344
  console.log("🔄 Data updated:", { data, previous });
345
345
 
@@ -365,7 +365,7 @@ async function advancedExample() {
365
365
  },
366
366
  },
367
367
  persistence: {
368
- adapter: new PrismaAdapter<UserContext>({ prisma }),
368
+ adapter: new PrismaAdapter({ prisma }),
369
369
  autoSave: true,
370
370
  },
371
371
  sessionId,
@@ -391,12 +391,12 @@ async function advancedExample() {
391
391
  .nextStep({
392
392
  prompt: "Welcome and ask for name",
393
393
  collect: ["fullName"],
394
- skipIf: (data: Partial<OnboardingData>) => !!data.fullName,
394
+ skipIf: (ctx) => !!ctx.data?.fullName,
395
395
  })
396
396
  .nextStep({
397
397
  prompt: "Ask for email",
398
398
  collect: ["email"],
399
- skipIf: (data: Partial<OnboardingData>) => !!data.email,
399
+ skipIf: (ctx) => !!ctx.data?.email,
400
400
  })
401
401
  .nextStep({
402
402
  prompt: "Ask for phone number (optional)",
@@ -405,7 +405,7 @@ async function advancedExample() {
405
405
  .nextStep({
406
406
  prompt: "Ask for country",
407
407
  collect: ["country"],
408
- skipIf: (data: Partial<OnboardingData>) => !!data.country,
408
+ skipIf: (ctx) => !!ctx.data?.country,
409
409
  })
410
410
  .nextStep({
411
411
  prompt: "Confirm and complete onboarding",
@@ -536,7 +536,7 @@ async function serverEndpointExample() {
536
536
  * Mock function to send a flight confirmation email.
537
537
  */
538
538
  async function sendFlightConfirmation(
539
- data: Partial<FlightBookingData> | undefined
539
+ data
540
540
  ) {
541
541
  console.log("\n" + "=".repeat(60));
542
542
  console.log("🚀 Sending Flight Confirmation...");
@@ -552,7 +552,7 @@ async function sendFlightConfirmation(
552
552
  /**
553
553
  * Mock function to send an onboarding email.
554
554
  */
555
- async function sendOnboardingEmail(data: Partial<OnboardingData> | undefined) {
555
+ async function sendOnboardingEmail(data) {
556
556
  console.log("\n" + "=".repeat(60));
557
557
  console.log("🚀 Sending Onboarding Email...");
558
558
  console.log("=".repeat(60));