@falai/agent 0.8.1 → 0.9.0-alpha-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/README.md +306 -133
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/{core → cjs/src/core}/Agent.d.ts +65 -67
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +52 -33
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/{types → src/types}/route.d.ts +85 -31
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +70 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +34 -11
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/{cjs → src}/core/Agent.d.ts +65 -67
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +47 -17
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +31 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +52 -33
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +39 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/{types → src/types}/route.d.ts +85 -31
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +70 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +32 -11
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +890 -251
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +143 -94
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +112 -105
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1093 -478
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +77 -47
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +48 -36
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +229 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  444. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  445. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  446. package/dist/cjs/core/PromptComposer.js +0 -127
  447. package/dist/cjs/core/PromptComposer.js.map +0 -1
  448. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  449. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  450. package/dist/cjs/core/ResponseEngine.js +0 -56
  451. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  452. package/dist/cjs/core/Route.d.ts +0 -90
  453. package/dist/cjs/core/Route.d.ts.map +0 -1
  454. package/dist/cjs/core/Route.js.map +0 -1
  455. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  457. package/dist/cjs/core/Step.d.ts +0 -72
  458. package/dist/cjs/core/Step.d.ts.map +0 -1
  459. package/dist/cjs/core/Step.js +0 -150
  460. package/dist/cjs/core/Step.js.map +0 -1
  461. package/dist/cjs/core/Tool.d.ts +0 -39
  462. package/dist/cjs/core/Tool.d.ts.map +0 -1
  463. package/dist/cjs/core/Tool.js +0 -34
  464. package/dist/cjs/core/Tool.js.map +0 -1
  465. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  466. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  467. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  468. package/dist/cjs/core/Transition.d.ts +0 -32
  469. package/dist/cjs/core/Transition.d.ts.map +0 -1
  470. package/dist/cjs/core/Transition.js +0 -89
  471. package/dist/cjs/core/Transition.js.map +0 -1
  472. package/dist/cjs/index.d.ts.map +0 -1
  473. package/dist/cjs/index.js.map +0 -1
  474. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  476. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  477. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  479. package/dist/cjs/providers/index.js.map +0 -1
  480. package/dist/cjs/types/agent.d.ts.map +0 -1
  481. package/dist/cjs/types/agent.js.map +0 -1
  482. package/dist/cjs/types/ai.d.ts.map +0 -1
  483. package/dist/cjs/types/history.d.ts.map +0 -1
  484. package/dist/cjs/types/history.js +0 -37
  485. package/dist/cjs/types/history.js.map +0 -1
  486. package/dist/cjs/types/index.d.ts +0 -12
  487. package/dist/cjs/types/index.d.ts.map +0 -1
  488. package/dist/cjs/types/index.js +0 -12
  489. package/dist/cjs/types/index.js.map +0 -1
  490. package/dist/cjs/types/persistence.d.ts.map +0 -1
  491. package/dist/cjs/types/persistence.js.map +0 -1
  492. package/dist/cjs/types/route.d.ts.map +0 -1
  493. package/dist/cjs/types/session.d.ts +0 -104
  494. package/dist/cjs/types/session.d.ts.map +0 -1
  495. package/dist/cjs/types/session.js.map +0 -1
  496. package/dist/cjs/utils/event.js.map +0 -1
  497. package/dist/cjs/utils/id.js.map +0 -1
  498. package/dist/cjs/utils/logger.js.map +0 -1
  499. package/dist/cjs/utils/retry.js.map +0 -1
  500. package/dist/constants/index.d.ts.map +0 -1
  501. package/dist/constants/index.js.map +0 -1
  502. package/dist/core/Agent.d.ts.map +0 -1
  503. package/dist/core/Agent.js +0 -962
  504. package/dist/core/Agent.js.map +0 -1
  505. package/dist/core/DomainRegistry.d.ts +0 -36
  506. package/dist/core/DomainRegistry.d.ts.map +0 -1
  507. package/dist/core/DomainRegistry.js +0 -68
  508. package/dist/core/DomainRegistry.js.map +0 -1
  509. package/dist/core/Events.d.ts +0 -41
  510. package/dist/core/Events.d.ts.map +0 -1
  511. package/dist/core/Events.js +0 -94
  512. package/dist/core/Events.js.map +0 -1
  513. package/dist/core/PersistenceManager.d.ts.map +0 -1
  514. package/dist/core/PersistenceManager.js.map +0 -1
  515. package/dist/core/PromptComposer.d.ts +0 -24
  516. package/dist/core/PromptComposer.d.ts.map +0 -1
  517. package/dist/core/PromptComposer.js +0 -123
  518. package/dist/core/PromptComposer.js.map +0 -1
  519. package/dist/core/ResponseEngine.d.ts +0 -14
  520. package/dist/core/ResponseEngine.d.ts.map +0 -1
  521. package/dist/core/ResponseEngine.js +0 -52
  522. package/dist/core/ResponseEngine.js.map +0 -1
  523. package/dist/core/Route.d.ts +0 -90
  524. package/dist/core/Route.d.ts.map +0 -1
  525. package/dist/core/Route.js.map +0 -1
  526. package/dist/core/RoutingEngine.d.ts.map +0 -1
  527. package/dist/core/RoutingEngine.js.map +0 -1
  528. package/dist/core/Step.d.ts +0 -72
  529. package/dist/core/Step.d.ts.map +0 -1
  530. package/dist/core/Step.js +0 -146
  531. package/dist/core/Step.js.map +0 -1
  532. package/dist/core/Tool.d.ts +0 -39
  533. package/dist/core/Tool.d.ts.map +0 -1
  534. package/dist/core/Tool.js +0 -31
  535. package/dist/core/Tool.js.map +0 -1
  536. package/dist/core/ToolExecutor.d.ts +0 -29
  537. package/dist/core/ToolExecutor.d.ts.map +0 -1
  538. package/dist/core/ToolExecutor.js +0 -69
  539. package/dist/core/ToolExecutor.js.map +0 -1
  540. package/dist/core/Transition.d.ts +0 -32
  541. package/dist/core/Transition.d.ts.map +0 -1
  542. package/dist/core/Transition.js +0 -85
  543. package/dist/core/Transition.js.map +0 -1
  544. package/dist/index.d.ts.map +0 -1
  545. package/dist/index.js.map +0 -1
  546. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  547. package/dist/providers/AnthropicProvider.js.map +0 -1
  548. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  549. package/dist/providers/GeminiProvider.js.map +0 -1
  550. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  551. package/dist/providers/OpenAIProvider.js.map +0 -1
  552. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenRouterProvider.js.map +0 -1
  554. package/dist/providers/index.d.ts.map +0 -1
  555. package/dist/providers/index.js.map +0 -1
  556. package/dist/types/agent.d.ts.map +0 -1
  557. package/dist/types/agent.js.map +0 -1
  558. package/dist/types/ai.d.ts.map +0 -1
  559. package/dist/types/ai.js.map +0 -1
  560. package/dist/types/history.d.ts.map +0 -1
  561. package/dist/types/history.js +0 -34
  562. package/dist/types/history.js.map +0 -1
  563. package/dist/types/index.d.ts +0 -12
  564. package/dist/types/index.d.ts.map +0 -1
  565. package/dist/types/index.js +0 -6
  566. package/dist/types/index.js.map +0 -1
  567. package/dist/types/persistence.d.ts.map +0 -1
  568. package/dist/types/persistence.js.map +0 -1
  569. package/dist/types/route.d.ts.map +0 -1
  570. package/dist/types/routing.d.ts.map +0 -1
  571. package/dist/types/schema.d.ts.map +0 -1
  572. package/dist/types/session.d.ts +0 -104
  573. package/dist/types/session.d.ts.map +0 -1
  574. package/dist/types/session.js.map +0 -1
  575. package/dist/types/tool.d.ts.map +0 -1
  576. package/dist/utils/event.d.ts.map +0 -1
  577. package/dist/utils/event.js.map +0 -1
  578. package/dist/utils/id.d.ts.map +0 -1
  579. package/dist/utils/id.js.map +0 -1
  580. package/dist/utils/logger.d.ts.map +0 -1
  581. package/dist/utils/logger.js.map +0 -1
  582. package/dist/utils/retry.d.ts.map +0 -1
  583. package/dist/utils/retry.js.map +0 -1
  584. package/docs/AGENT.md +0 -535
  585. package/docs/DOCS.md +0 -263
  586. package/docs/DOMAINS.md +0 -735
  587. package/docs/EXAMPLES.md +0 -467
  588. package/docs/GETTING_STARTED.md +0 -424
  589. package/docs/PERSISTENCE.md +0 -815
  590. package/docs/PROVIDERS.md +0 -612
  591. package/docs/ROUTES.md +0 -1085
  592. package/docs/STEPS.md +0 -883
  593. package/examples/business-onboarding.ts +0 -791
  594. package/examples/custom-database-persistence.ts +0 -574
  595. package/examples/domain-scoping.ts +0 -366
  596. package/examples/travel-agent.ts +0 -584
  597. package/src/core/DomainRegistry.ts +0 -80
  598. package/src/core/Tool.ts +0 -112
  599. package/src/core/Transition.ts +0 -115
  600. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  601. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  602. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  603. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  604. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  605. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  606. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  607. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  608. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  609. /package/dist/cjs/{types → src/types}/route.js +0 -0
  610. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  611. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  612. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  614. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  615. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  616. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  621. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  622. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  623. /package/dist/{adapters → src/adapters}/index.js +0 -0
  624. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  625. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  626. /package/dist/{constants → src/constants}/index.js +0 -0
  627. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  628. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  629. /package/dist/{providers → src/providers}/index.js +0 -0
  630. /package/dist/{types → src/types}/agent.js +0 -0
  631. /package/dist/{types → src/types}/ai.js +0 -0
  632. /package/dist/{types → src/types}/persistence.js +0 -0
  633. /package/dist/{types → src/types}/route.js +0 -0
  634. /package/dist/{types → src/types}/routing.d.ts +0 -0
  635. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  636. /package/dist/{types → src/types}/routing.js +0 -0
  637. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  638. /package/dist/{types → src/types}/schema.d.ts +0 -0
  639. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  640. /package/dist/{types → src/types}/schema.js +0 -0
  641. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  642. /package/dist/{types → src/types}/tool.js +0 -0
  643. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  644. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  645. /package/dist/{utils → src/utils}/id.js +0 -0
  646. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  647. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  648. /package/dist/{utils → src/utils}/logger.js +0 -0
  649. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  650. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  651. /package/dist/{utils → src/utils}/retry.js +0 -0
  652. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,14 +1,24 @@
1
- import type { Event } from "../types/history";
1
+ import type {
2
+ Event,
3
+ AgentOptions,
4
+ StructuredSchema,
5
+ RoutingDecision,
6
+ SessionState,
7
+ AiProvider,
8
+ } from "../types";
9
+ import { enterRoute, mergeCollected } from "../utils";
2
10
  import type { Route } from "./Route";
3
11
  import type { Step } from "./Step";
4
- import type { StructuredSchema } from "../types/schema";
5
- import type { RoutingDecision } from "../types/routing";
6
- import type { SessionState } from "../types/session";
7
- import type { AiProvider } from "../types/ai";
8
- import { enterRoute, mergeCollected } from "../types/session";
9
12
  import { PromptComposer } from "./PromptComposer";
10
13
  import { getLastMessageFromHistory } from "../utils/event";
11
14
  import { logger } from "../utils/logger";
15
+ import { render } from "../utils/template";
16
+ import { END_ROUTE_ID } from "../constants";
17
+
18
+ export interface CandidateStep<TContext = unknown, TData = unknown> {
19
+ step: Step<TContext, TData>;
20
+ isRouteComplete?: boolean;
21
+ }
12
22
 
13
23
  export interface RoutingDecisionOutput {
14
24
  context: string;
@@ -32,7 +42,32 @@ export interface RoutingEngineOptions {
32
42
  maxCandidates?: number;
33
43
  }
34
44
 
35
- export class RoutingEngine<TContext = unknown> {
45
+ export interface BuildStepSelectionPromptParams<
46
+ TContext = unknown,
47
+ TData = unknown
48
+ > {
49
+ route: Route<TContext, TData>;
50
+ currentStep: Step<TContext, TData> | undefined;
51
+ candidates: CandidateStep<TContext, TData>[];
52
+ data: Partial<TData>;
53
+ history: Event[];
54
+ lastMessage: string;
55
+ agentOptions?: AgentOptions<TContext>;
56
+ context?: TContext;
57
+ session?: SessionState<TData>;
58
+ }
59
+
60
+ export interface BuildRoutingPromptParams<TContext = unknown, TData = unknown> {
61
+ history: Event[];
62
+ routes: Route<TContext, TData>[];
63
+ lastMessage: string;
64
+ agentOptions?: AgentOptions<TContext>;
65
+ session?: SessionState<TData>;
66
+ activeRouteSteps?: Step<TContext, TData>[];
67
+ context?: TContext;
68
+ }
69
+
70
+ export class RoutingEngine<TContext = unknown, TData = unknown> {
36
71
  constructor(private readonly options?: RoutingEngineOptions) {}
37
72
 
38
73
  /**
@@ -41,15 +76,10 @@ export class RoutingEngine<TContext = unknown> {
41
76
  * @private
42
77
  */
43
78
  private async decideSingleRouteStep(params: {
44
- route: Route<TContext, unknown>;
45
- session: SessionState;
79
+ route: Route<TContext, TData>;
80
+ session: SessionState<TData>;
46
81
  history: Event[];
47
- agentMeta?: {
48
- name?: string;
49
- goal?: string;
50
- description?: string;
51
- personality?: string;
52
- };
82
+ agentOptions?: AgentOptions<TContext>;
53
83
  provider: AiProvider;
54
84
  context: TContext;
55
85
  signal?: AbortSignal;
@@ -57,10 +87,10 @@ export class RoutingEngine<TContext = unknown> {
57
87
  selectedRoute?: Route<TContext>;
58
88
  selectedStep?: Step<TContext>;
59
89
  responseDirectives?: string[];
60
- session: SessionState;
90
+ session: SessionState<TData>;
61
91
  isRouteComplete?: boolean;
62
92
  }> {
63
- const { route, session, history, agentMeta, provider, context, signal } =
93
+ const { route, session, history, agentOptions, provider, context, signal } =
64
94
  params;
65
95
 
66
96
  let updatedSession = session;
@@ -125,18 +155,20 @@ export class RoutingEngine<TContext = unknown> {
125
155
 
126
156
  // Multiple candidates - use AI to select best step
127
157
  const lastUserMessage = getLastMessageFromHistory(history);
128
- const stepPrompt = this.buildStepSelectionPrompt(
158
+ const stepPrompt = await this.buildStepSelectionPrompt({
129
159
  route,
130
160
  currentStep,
131
161
  candidates,
132
- updatedSession.data || {},
162
+ data: updatedSession.data || {},
133
163
  history,
134
- lastUserMessage,
135
- agentMeta
136
- );
164
+ lastMessage: lastUserMessage,
165
+ agentOptions,
166
+ context,
167
+ session: updatedSession,
168
+ });
137
169
 
138
170
  const stepSchema = this.buildStepSelectionSchema(
139
- candidates.map((c) => c.step.id)
171
+ candidates.map((c) => c.step)
140
172
  );
141
173
 
142
174
  const stepResult = await provider.generateMessage<
@@ -158,13 +190,11 @@ export class RoutingEngine<TContext = unknown> {
158
190
  });
159
191
 
160
192
  const selectedStepId = stepResult.structured?.selectedStepId;
161
- const selectedStep = candidates.find(
162
- (c) => c.step.id === selectedStepId
163
- )?.step;
193
+ const selectedStep = candidates.find((c) => c.step.id === selectedStepId);
164
194
 
165
195
  if (selectedStep) {
166
196
  logger.debug(
167
- `[RoutingEngine] Single-route: AI selected step: ${selectedStep.id}`
197
+ `[RoutingEngine] Single-route: AI selected step: ${selectedStep.step.id}`
168
198
  );
169
199
  logger.debug(
170
200
  `[RoutingEngine] Single-route: Reasoning: ${stepResult.structured?.reasoning}`
@@ -177,7 +207,7 @@ export class RoutingEngine<TContext = unknown> {
177
207
 
178
208
  return {
179
209
  selectedRoute,
180
- selectedStep: selectedStep || candidates[0].step,
210
+ selectedStep: selectedStep?.step || candidates[0].step,
181
211
  responseDirectives: stepResult.structured?.responseDirectives,
182
212
  session: updatedSession,
183
213
  };
@@ -193,7 +223,6 @@ export class RoutingEngine<TContext = unknown> {
193
223
  visited: Set<string>
194
224
  ): {
195
225
  step?: Step<TContext, TData>;
196
- condition?: string;
197
226
  isRouteComplete?: boolean;
198
227
  } {
199
228
  // Prevent infinite loops
@@ -205,14 +234,10 @@ export class RoutingEngine<TContext = unknown> {
205
234
  const transitions = currentStep.getTransitions();
206
235
 
207
236
  for (const transition of transitions) {
208
- const target = transition.getTarget();
237
+ const target = transition;
209
238
 
210
239
  // Check for END_ROUTE transition
211
- if (
212
- !target &&
213
- transition.spec.step &&
214
- typeof transition.spec.step === "symbol"
215
- ) {
240
+ if (target && target.id === END_ROUTE_ID) {
216
241
  // Found END_ROUTE - route is complete
217
242
  return {
218
243
  isRouteComplete: true,
@@ -228,7 +253,7 @@ export class RoutingEngine<TContext = unknown> {
228
253
  );
229
254
  return {
230
255
  step: target,
231
- condition: transition.condition,
256
+ isRouteComplete: false,
232
257
  };
233
258
  }
234
259
 
@@ -256,20 +281,8 @@ export class RoutingEngine<TContext = unknown> {
256
281
  route: Route<TContext, TData>,
257
282
  currentStep: Step<TContext, TData> | undefined,
258
283
  data: Partial<TData>
259
- ): Array<{
260
- step: Step<TContext, TData>;
261
- condition?: string;
262
- requires?: string[];
263
- collectFields?: string[];
264
- isRouteComplete?: boolean;
265
- }> {
266
- const candidates: Array<{
267
- step: Step<TContext, TData>;
268
- condition?: string;
269
- requires?: string[];
270
- collectFields?: string[];
271
- isRouteComplete?: boolean;
272
- }> = [];
284
+ ): CandidateStep<TContext, TData>[] {
285
+ const candidates: CandidateStep<TContext, TData>[] = [];
273
286
 
274
287
  if (!currentStep) {
275
288
  const initialStep = route.initialStep;
@@ -286,28 +299,22 @@ export class RoutingEngine<TContext = unknown> {
286
299
  logger.debug(
287
300
  `[RoutingEngine] Route complete on entry: all steps skipped, END_ROUTE reached`
288
301
  );
289
- return [
290
- {
291
- step: initialStep,
292
- condition: "Route complete - all data collected on entry",
293
- isRouteComplete: true,
294
- },
295
- ];
302
+ candidates.push({
303
+ step: initialStep,
304
+ isRouteComplete: true,
305
+ });
296
306
  } else if (result.step) {
297
307
  // Found a non-skipped step
298
308
  candidates.push({
299
309
  step: result.step,
300
- condition: result.condition,
301
- requires: result.step.requires,
302
- collectFields: result.step.collectFields,
310
+ isRouteComplete: result.isRouteComplete || false,
303
311
  });
304
312
  }
305
313
  // If no step found and not complete, fall through to return empty candidates
306
314
  } else {
307
315
  candidates.push({
308
316
  step: initialStep,
309
- requires: initialStep.requires,
310
- collectFields: initialStep.collectFields,
317
+ isRouteComplete: false,
311
318
  });
312
319
  }
313
320
  return candidates;
@@ -317,14 +324,10 @@ export class RoutingEngine<TContext = unknown> {
317
324
  let hasEndRoute = false;
318
325
 
319
326
  for (const transition of transitions) {
320
- const target = transition.getTarget();
327
+ const target = transition;
321
328
 
322
329
  // Check for END_ROUTE transition (no target step)
323
- if (
324
- !target &&
325
- transition.spec.step &&
326
- typeof transition.spec.step === "symbol"
327
- ) {
330
+ if (target && target.id === END_ROUTE_ID) {
328
331
  hasEndRoute = true;
329
332
  continue;
330
333
  }
@@ -349,9 +352,7 @@ export class RoutingEngine<TContext = unknown> {
349
352
  // Found a non-skipped step deeper in the chain
350
353
  candidates.push({
351
354
  step: result.step,
352
- condition: result.condition || transition.condition,
353
- requires: result.step.requires,
354
- collectFields: result.step.collectFields,
355
+ isRouteComplete: result.isRouteComplete || false,
355
356
  });
356
357
  }
357
358
  continue;
@@ -359,9 +360,7 @@ export class RoutingEngine<TContext = unknown> {
359
360
 
360
361
  candidates.push({
361
362
  step: target,
362
- condition: transition.condition,
363
- requires: target.requires,
364
- collectFields: target.collectFields,
363
+ isRouteComplete: hasEndRoute || false,
365
364
  });
366
365
  }
367
366
 
@@ -376,7 +375,6 @@ export class RoutingEngine<TContext = unknown> {
376
375
  return [
377
376
  {
378
377
  step: currentStep,
379
- condition: "Route complete - all data collected",
380
378
  isRouteComplete: true,
381
379
  },
382
380
  ];
@@ -386,9 +384,7 @@ export class RoutingEngine<TContext = unknown> {
386
384
  if (!currentStep.shouldSkip(data)) {
387
385
  candidates.push({
388
386
  step: currentStep,
389
- condition: "Continue in current step (no valid transitions)",
390
- requires: currentStep.requires,
391
- collectFields: currentStep.collectFields,
387
+ isRouteComplete: hasEndRoute || false,
392
388
  });
393
389
  }
394
390
  }
@@ -403,15 +399,10 @@ export class RoutingEngine<TContext = unknown> {
403
399
  * OPTIMIZATION: If there's only 1 route, skips route scoring and only does step selection.
404
400
  */
405
401
  async decideRouteAndStep(params: {
406
- routes: Route<TContext, unknown>[];
407
- session: SessionState;
402
+ routes: Route<TContext, TData>[];
403
+ session: SessionState<TData>;
408
404
  history: Event[];
409
- agentMeta?: {
410
- name?: string;
411
- goal?: string;
412
- description?: string;
413
- personality?: string;
414
- };
405
+ agentOptions?: AgentOptions<TContext>;
415
406
  provider: AiProvider;
416
407
  context: TContext;
417
408
  signal?: AbortSignal;
@@ -419,11 +410,18 @@ export class RoutingEngine<TContext = unknown> {
419
410
  selectedRoute?: Route<TContext>;
420
411
  selectedStep?: Step<TContext>;
421
412
  responseDirectives?: string[];
422
- session: SessionState;
413
+ session: SessionState<TData>;
423
414
  isRouteComplete?: boolean;
424
415
  }> {
425
- const { routes, session, history, agentMeta, provider, context, signal } =
426
- params;
416
+ const {
417
+ routes,
418
+ session,
419
+ history,
420
+ agentOptions,
421
+ provider,
422
+ context,
423
+ signal,
424
+ } = params;
427
425
 
428
426
  if (routes.length === 0) {
429
427
  return { session };
@@ -435,7 +433,7 @@ export class RoutingEngine<TContext = unknown> {
435
433
  route: routes[0],
436
434
  session,
437
435
  history,
438
- agentMeta,
436
+ agentOptions,
439
437
  provider,
440
438
  context,
441
439
  signal,
@@ -444,16 +442,8 @@ export class RoutingEngine<TContext = unknown> {
444
442
 
445
443
  const lastUserMessage = getLastMessageFromHistory(history);
446
444
 
447
- let activeRouteSteps:
448
- | Array<{
449
- stepId: string;
450
- description: string;
451
- condition?: string;
452
- requires?: string[];
453
- collectFields?: string[];
454
- }>
455
- | undefined;
456
- let activeRoute: Route<TContext> | undefined;
445
+ let activeRouteSteps: Step<TContext, TData>[] | undefined;
446
+ let activeRoute: Route<TContext, TData> | undefined;
457
447
  let isRouteComplete = false;
458
448
 
459
449
  if (session.currentRoute) {
@@ -477,13 +467,7 @@ export class RoutingEngine<TContext = unknown> {
477
467
  // Don't include steps in routing if route is complete
478
468
  activeRouteSteps = undefined;
479
469
  } else {
480
- activeRouteSteps = candidates.map((c) => ({
481
- stepId: c.step.id,
482
- description: c.step.description || "",
483
- condition: c.condition,
484
- requires: c.requires,
485
- collectFields: c.collectFields,
486
- }));
470
+ activeRouteSteps = candidates.map((c) => c.step);
487
471
  logger.debug(
488
472
  `[RoutingEngine] Found ${activeRouteSteps.length} candidate steps for active route`
489
473
  );
@@ -497,14 +481,15 @@ export class RoutingEngine<TContext = unknown> {
497
481
  activeRouteSteps
498
482
  );
499
483
 
500
- const routingPrompt = this.buildRoutingPrompt(
484
+ const routingPrompt = await this.buildRoutingPrompt({
501
485
  history,
502
486
  routes,
503
- lastUserMessage,
504
- agentMeta,
487
+ lastMessage: lastUserMessage,
488
+ agentOptions,
505
489
  session,
506
- activeRouteSteps
507
- );
490
+ activeRouteSteps,
491
+ context,
492
+ });
508
493
 
509
494
  const routingResult = await provider.generateMessage<
510
495
  TContext,
@@ -591,97 +576,88 @@ export class RoutingEngine<TContext = unknown> {
591
576
  * Build prompt for step selection within a single route
592
577
  * @private
593
578
  */
594
- private buildStepSelectionPrompt(
595
- route: Route<TContext>,
596
- currentStep: Step<TContext> | undefined,
597
- candidates: Array<{
598
- step: Step<TContext>;
599
- condition?: string;
600
- requires?: string[];
601
- collectFields?: string[];
602
- }>,
603
- data: Partial<unknown>,
604
- history: Event[],
605
- lastMessage: string,
606
- agentMeta?: {
607
- name?: string;
608
- goal?: string;
609
- description?: string;
610
- personality?: string;
611
- }
612
- ): string {
613
- const pc = new PromptComposer();
579
+ private async buildStepSelectionPrompt<TData>(
580
+ params: BuildStepSelectionPromptParams<TContext, TData>
581
+ ): Promise<string> {
582
+ const {
583
+ route,
584
+ currentStep,
585
+ candidates,
586
+ data,
587
+ history,
588
+ lastMessage,
589
+ agentOptions,
590
+ context,
591
+ session,
592
+ } = params;
593
+ const templateContext = { context, session, history };
594
+ const pc = new PromptComposer(templateContext);
614
595
 
615
596
  // Add agent metadata
616
- if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
617
- pc.addAgentMeta({
618
- name: agentMeta?.name || "Agent",
619
- description: agentMeta?.description,
620
- goal: agentMeta?.goal,
621
- });
597
+ if (agentOptions) {
598
+ await pc.addAgentMeta(agentOptions);
622
599
  }
623
600
 
624
- const personality =
625
- agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
626
- pc.addPersonality(personality);
627
-
628
601
  // Add route context
629
- pc.addInstruction(
602
+ await pc.addInstruction(
630
603
  `Active Route: ${route.title}\nDescription: ${route.description || "N/A"}`
631
604
  );
632
605
 
633
606
  // Add current step context
634
607
  if (currentStep) {
635
- pc.addInstruction(
608
+ await pc.addInstruction(
636
609
  `Current Step: ${currentStep.id}\nDescription: ${
637
610
  currentStep.description || "N/A"
638
611
  }`
639
612
  );
640
613
  } else {
641
- pc.addInstruction("Current Step: None (entering route)");
614
+ await pc.addInstruction("Current Step: None (entering route)");
642
615
  }
643
616
 
644
617
  // Add collected data context
645
618
  if (Object.keys(data).length > 0) {
646
- pc.addInstruction(
619
+ await pc.addInstruction(
647
620
  `Collected Data So Far:\n${JSON.stringify(data, null, 2)}`
648
621
  );
649
622
  } else {
650
- pc.addInstruction("Collected Data: None yet");
623
+ await pc.addInstruction("Collected Data: None yet");
651
624
  }
652
625
 
653
626
  // Add conversation history
654
- pc.addInteractionHistory(history);
655
- pc.addLastMessage(lastMessage);
627
+ await pc.addInteractionHistory(history);
628
+ await pc.addLastMessage(lastMessage);
656
629
 
657
630
  // Add candidate steps
658
- const stepDescriptions = candidates.map((candidate, idx) => {
631
+ const stepDescriptions = [];
632
+ for (const candidate of candidates) {
633
+ const idx = candidates.indexOf(candidate);
659
634
  const parts = [
660
635
  `${idx + 1}. Step ID: ${candidate.step.id}`,
661
636
  ` Description: ${candidate.step.description || "N/A"}`,
662
637
  ];
663
638
 
664
- if (candidate.condition) {
665
- parts.push(` Condition: ${candidate.condition}`);
639
+ if (candidate.step.when) {
640
+ const renderedWhen = await render(candidate.step.when, templateContext);
641
+ parts.push(` When this step should be completed: ${renderedWhen}`);
666
642
  }
667
643
 
668
- if (candidate.requires && candidate.requires.length > 0) {
669
- parts.push(` Required Data: ${candidate.requires.join(", ")}`);
644
+ if (candidate.step.requires && candidate.step.requires.length > 0) {
645
+ parts.push(` Required Data: ${candidate.step.requires.join(", ")}`);
670
646
  }
671
647
 
672
- if (candidate.collectFields && candidate.collectFields.length > 0) {
673
- parts.push(` Collects: ${candidate.collectFields.join(", ")}`);
648
+ if (candidate.step.collect && candidate.step.collect.length > 0) {
649
+ parts.push(` Collects: ${candidate.step.collect.join(", ")}`);
674
650
  }
675
651
 
676
- return parts.join("\n");
677
- });
652
+ stepDescriptions.push(parts.join("\n"));
653
+ }
678
654
 
679
- pc.addInstruction(
655
+ await pc.addInstruction(
680
656
  `Available Steps to Transition To:\n${stepDescriptions.join("\n\n")}`
681
657
  );
682
658
 
683
- // Add decision instructions
684
- pc.addInstruction(
659
+ // Add decision prompt
660
+ await pc.addInstruction(
685
661
  [
686
662
  "Task: Decide which step to transition to based on:",
687
663
  "1. The user's current message and intent",
@@ -707,7 +683,9 @@ export class RoutingEngine<TContext = unknown> {
707
683
  * Build schema for step selection
708
684
  * @private
709
685
  */
710
- private buildStepSelectionSchema(validStepIds: string[]): StructuredSchema {
686
+ private buildStepSelectionSchema(
687
+ validSteps: Step<TContext, TData>[]
688
+ ): StructuredSchema {
711
689
  return {
712
690
  description:
713
691
  "Step transition decision based on conversation context and collected data",
@@ -722,7 +700,7 @@ export class RoutingEngine<TContext = unknown> {
722
700
  type: "string",
723
701
  nullable: false,
724
702
  description: "The ID of the selected step to transition to",
725
- enum: validStepIds,
703
+ enum: validSteps.map((s) => s.id),
726
704
  },
727
705
  responseDirectives: {
728
706
  type: "array",
@@ -737,9 +715,9 @@ export class RoutingEngine<TContext = unknown> {
737
715
  }
738
716
 
739
717
  buildDynamicRoutingSchema(
740
- routes: Route<TContext>[],
718
+ routes: Route<TContext, TData>[],
741
719
  extrasSchema?: StructuredSchema,
742
- activeRouteSteps?: { stepId: string; description: string }[]
720
+ activeRouteSteps?: Step<TContext, TData>[]
743
721
  ): StructuredSchema {
744
722
  const routeIds = routes.map((r) => r.id);
745
723
  const routeProperties: Record<string, StructuredSchema> = {};
@@ -789,7 +767,7 @@ export class RoutingEngine<TContext = unknown> {
789
767
  nullable: false,
790
768
  description:
791
769
  "The step ID to transition to within the active route (required if continuing in current route)",
792
- enum: activeRouteSteps.map((s) => s.stepId),
770
+ enum: activeRouteSteps.map((s) => s.id),
793
771
  };
794
772
  base.properties.stepReasoning = {
795
773
  type: "string",
@@ -811,37 +789,24 @@ export class RoutingEngine<TContext = unknown> {
811
789
  return base;
812
790
  }
813
791
 
814
- buildRoutingPrompt(
815
- history: Event[],
816
- routes: Route<TContext>[],
817
- lastMessage: string,
818
- agentMeta?: {
819
- name?: string;
820
- goal?: string;
821
- description?: string;
822
- personality?: string;
823
- },
824
- session?: SessionState,
825
- activeRouteSteps?: Array<{
826
- stepId: string;
827
- description: string;
828
- condition?: string;
829
- requires?: string[];
830
- collectFields?: string[];
831
- }>
832
- ): string {
833
- const pc = new PromptComposer();
834
- if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
835
- pc.addAgentMeta({
836
- name: agentMeta?.name || "Agent",
837
- description: agentMeta?.description,
838
- goal: agentMeta?.goal,
839
- });
792
+ async buildRoutingPrompt(
793
+ params: BuildRoutingPromptParams<TContext, TData>
794
+ ): Promise<string> {
795
+ const {
796
+ history,
797
+ routes,
798
+ lastMessage,
799
+ agentOptions,
800
+ session,
801
+ activeRouteSteps,
802
+ context,
803
+ } = params;
804
+ const templateContext = { context, session, history };
805
+ const pc = new PromptComposer(templateContext);
806
+ if (agentOptions) {
807
+ await pc.addAgentMeta(agentOptions);
840
808
  }
841
- const personality =
842
- agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
843
- pc.addPersonality(personality);
844
- pc.addInstruction(
809
+ await pc.addInstruction(
845
810
  "Task: Intent analysis and route scoring (0-100). Score ALL listed routes."
846
811
  );
847
812
 
@@ -863,7 +828,7 @@ export class RoutingEngine<TContext = unknown> {
863
828
  sessionInfo.push(
864
829
  "Note: User is mid-conversation. They may want to continue current route or switch to a new one based on their intent."
865
830
  );
866
- pc.addInstruction(sessionInfo.join("\n"));
831
+ await pc.addInstruction(sessionInfo.join("\n"));
867
832
 
868
833
  // Add available steps for the active route
869
834
  if (activeRouteSteps && activeRouteSteps.length > 0) {
@@ -871,21 +836,25 @@ export class RoutingEngine<TContext = unknown> {
871
836
  "",
872
837
  "Available steps in active route (choose one to transition to):",
873
838
  ];
874
- activeRouteSteps.forEach((step, idx) => {
875
- stepInfo.push(`${idx + 1}. Step: ${step.stepId}`);
839
+ for (const step of activeRouteSteps) {
840
+ const idx = activeRouteSteps.indexOf(step);
841
+ stepInfo.push(`${idx + 1}. Step: ${step.id}`);
876
842
  if (step.description) {
877
843
  stepInfo.push(` Description: ${step.description}`);
878
844
  }
879
- if (step.condition) {
880
- stepInfo.push(` Condition: ${step.condition}`);
845
+ const renderedWhen = await render(step.when, templateContext);
846
+ if (step.when) {
847
+ stepInfo.push(
848
+ ` When this step should be completed: ${renderedWhen}`
849
+ );
881
850
  }
882
851
  if (step.requires && step.requires.length > 0) {
883
852
  stepInfo.push(` Required data: ${step.requires.join(", ")}`);
884
853
  }
885
- if (step.collectFields && step.collectFields.length > 0) {
886
- stepInfo.push(` Will collect: ${step.collectFields.join(", ")}`);
854
+ if (step.collect && step.collect.length > 0) {
855
+ stepInfo.push(` Will collect: ${step.collect.join(", ")}`);
887
856
  }
888
- });
857
+ }
889
858
  stepInfo.push("");
890
859
  stepInfo.push(
891
860
  "IMPORTANT: You MUST select a step to transition to. Evaluate which step makes the most sense based on:"
@@ -894,16 +863,16 @@ export class RoutingEngine<TContext = unknown> {
894
863
  stepInfo.push("- What data is still needed vs already present");
895
864
  stepInfo.push("- The logical next step in the conversation");
896
865
  stepInfo.push("- Whether conditions for steps are met");
897
- pc.addInstruction(stepInfo.join("\n"));
866
+ await pc.addInstruction(stepInfo.join("\n"));
898
867
  }
899
868
  }
900
869
 
901
- pc.addInteractionHistory(history);
902
- pc.addLastMessage(lastMessage);
870
+ await pc.addInteractionHistory(history);
871
+ await pc.addLastMessage(lastMessage);
903
872
  // Cast to unknown to satisfy generic constraints in composer
904
873
  // This is safe because PromptComposer only reads route metadata (id, title, description)
905
- pc.addRoutingOverview(routes as unknown as Route<unknown>[]);
906
- pc.addInstruction(
874
+ await pc.addRoutingOverview(routes);
875
+ await pc.addInstruction(
907
876
  [
908
877
  "Scoring rules:",
909
878
  "- 90-100: explicit keywords + clear intent",