@falai/agent 0.8.1 → 0.9.0-alpha-2

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 (665) hide show
  1. package/README.md +332 -147
  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/cjs/src/core/Agent.d.ts +223 -0
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1660 -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 +73 -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 +32 -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 +171 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +514 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +145 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/src/core/Route.js +343 -0
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +86 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +217 -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 +45 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
  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 +80 -41
  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 +38 -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/src/types/route.d.ts +235 -0
  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 +65 -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/{types → cjs/src/types}/tool.d.ts +17 -13
  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 +35 -32
  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/src/core/Agent.d.ts +223 -0
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1656 -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 +71 -18
  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 +32 -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 +171 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +510 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +145 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/src/core/Route.js +339 -0
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/src/core/RoutingEngine.d.ts +129 -0
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +211 -113
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +86 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +213 -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 +45 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +80 -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 +80 -41
  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 +38 -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/src/types/route.d.ts +235 -0
  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 +65 -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/{cjs → src}/types/tool.d.ts +17 -13
  289. package/dist/src/types/tool.d.ts.map +1 -0
  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 +33 -32
  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} +925 -255
  320. package/docs/api/overview.md +952 -0
  321. package/docs/core/agent/README.md +787 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
  324. package/docs/core/ai-integration/prompt-composition.md +220 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +176 -0
  327. package/docs/core/conversation-flows/data-collection.md +623 -0
  328. package/docs/core/conversation-flows/route-dsl.md +502 -0
  329. package/docs/core/conversation-flows/routes.md +117 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +154 -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 +348 -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 +406 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
  343. package/examples/ai-providers/anthropic-integration.ts +384 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
  345. package/examples/conversation-flows/completion-transitions.ts +277 -0
  346. package/examples/core-concepts/basic-agent.ts +443 -0
  347. package/examples/core-concepts/schema-driven-extraction.ts +305 -0
  348. package/examples/core-concepts/session-management.ts +406 -0
  349. package/examples/integrations/database-integration.ts +630 -0
  350. package/examples/integrations/healthcare-integration.ts +609 -0
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
  352. package/examples/integrations/server-session-management.ts +307 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
  355. package/examples/persistence/memory-sessions.ts +495 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/persistence/redis-persistence.ts +490 -0
  358. package/examples/tools/basic-tools.ts +561 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
  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 +1431 -526
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +103 -49
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +128 -46
  373. package/src/core/ResponsePipeline.ts +830 -0
  374. package/src/core/Route.ts +222 -53
  375. package/src/core/RoutingEngine.ts +345 -229
  376. package/src/core/SessionManager.ts +265 -0
  377. package/src/core/Step.ts +157 -67
  378. package/src/core/ToolExecutor.ts +52 -43
  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 +81 -46
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +45 -7
  388. package/src/types/persistence.ts +45 -28
  389. package/src/types/route.ts +122 -57
  390. package/src/types/session.ts +20 -220
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +23 -19
  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 +204 -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 +0 -197
  432. package/dist/cjs/core/Agent.d.ts.map +0 -1
  433. package/dist/cjs/core/Agent.js +0 -966
  434. package/dist/cjs/core/Agent.js.map +0 -1
  435. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  436. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  437. package/dist/cjs/core/DomainRegistry.js +0 -72
  438. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  439. package/dist/cjs/core/Events.d.ts +0 -41
  440. package/dist/cjs/core/Events.d.ts.map +0 -1
  441. package/dist/cjs/core/Events.js +0 -99
  442. package/dist/cjs/core/Events.js.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  444. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  445. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  446. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  447. package/dist/cjs/core/PromptComposer.js +0 -127
  448. package/dist/cjs/core/PromptComposer.js.map +0 -1
  449. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  450. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  451. package/dist/cjs/core/ResponseEngine.js +0 -56
  452. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  453. package/dist/cjs/core/Route.d.ts +0 -90
  454. package/dist/cjs/core/Route.d.ts.map +0 -1
  455. package/dist/cjs/core/Route.js +0 -203
  456. package/dist/cjs/core/Route.js.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.d.ts +0 -109
  458. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  459. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  460. package/dist/cjs/core/Step.d.ts +0 -72
  461. package/dist/cjs/core/Step.d.ts.map +0 -1
  462. package/dist/cjs/core/Step.js +0 -150
  463. package/dist/cjs/core/Step.js.map +0 -1
  464. package/dist/cjs/core/Tool.d.ts +0 -39
  465. package/dist/cjs/core/Tool.d.ts.map +0 -1
  466. package/dist/cjs/core/Tool.js +0 -34
  467. package/dist/cjs/core/Tool.js.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  469. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  470. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  471. package/dist/cjs/core/Transition.d.ts +0 -32
  472. package/dist/cjs/core/Transition.d.ts.map +0 -1
  473. package/dist/cjs/core/Transition.js +0 -89
  474. package/dist/cjs/core/Transition.js.map +0 -1
  475. package/dist/cjs/index.d.ts.map +0 -1
  476. package/dist/cjs/index.js.map +0 -1
  477. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  478. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  479. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  480. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  481. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  482. package/dist/cjs/providers/index.js.map +0 -1
  483. package/dist/cjs/types/agent.d.ts.map +0 -1
  484. package/dist/cjs/types/agent.js.map +0 -1
  485. package/dist/cjs/types/ai.d.ts.map +0 -1
  486. package/dist/cjs/types/history.d.ts.map +0 -1
  487. package/dist/cjs/types/history.js +0 -37
  488. package/dist/cjs/types/history.js.map +0 -1
  489. package/dist/cjs/types/index.d.ts +0 -12
  490. package/dist/cjs/types/index.d.ts.map +0 -1
  491. package/dist/cjs/types/index.js +0 -12
  492. package/dist/cjs/types/index.js.map +0 -1
  493. package/dist/cjs/types/persistence.d.ts.map +0 -1
  494. package/dist/cjs/types/persistence.js.map +0 -1
  495. package/dist/cjs/types/route.d.ts +0 -175
  496. package/dist/cjs/types/route.d.ts.map +0 -1
  497. package/dist/cjs/types/session.d.ts +0 -104
  498. package/dist/cjs/types/session.d.ts.map +0 -1
  499. package/dist/cjs/types/session.js.map +0 -1
  500. package/dist/cjs/types/tool.d.ts.map +0 -1
  501. package/dist/cjs/utils/event.js.map +0 -1
  502. package/dist/cjs/utils/id.js.map +0 -1
  503. package/dist/cjs/utils/logger.js.map +0 -1
  504. package/dist/cjs/utils/retry.js.map +0 -1
  505. package/dist/constants/index.d.ts.map +0 -1
  506. package/dist/constants/index.js.map +0 -1
  507. package/dist/core/Agent.d.ts +0 -197
  508. package/dist/core/Agent.d.ts.map +0 -1
  509. package/dist/core/Agent.js +0 -962
  510. package/dist/core/Agent.js.map +0 -1
  511. package/dist/core/DomainRegistry.d.ts +0 -36
  512. package/dist/core/DomainRegistry.d.ts.map +0 -1
  513. package/dist/core/DomainRegistry.js +0 -68
  514. package/dist/core/DomainRegistry.js.map +0 -1
  515. package/dist/core/Events.d.ts +0 -41
  516. package/dist/core/Events.d.ts.map +0 -1
  517. package/dist/core/Events.js +0 -94
  518. package/dist/core/Events.js.map +0 -1
  519. package/dist/core/PersistenceManager.d.ts.map +0 -1
  520. package/dist/core/PersistenceManager.js.map +0 -1
  521. package/dist/core/PromptComposer.d.ts +0 -24
  522. package/dist/core/PromptComposer.d.ts.map +0 -1
  523. package/dist/core/PromptComposer.js +0 -123
  524. package/dist/core/PromptComposer.js.map +0 -1
  525. package/dist/core/ResponseEngine.d.ts +0 -14
  526. package/dist/core/ResponseEngine.d.ts.map +0 -1
  527. package/dist/core/ResponseEngine.js +0 -52
  528. package/dist/core/ResponseEngine.js.map +0 -1
  529. package/dist/core/Route.d.ts +0 -90
  530. package/dist/core/Route.d.ts.map +0 -1
  531. package/dist/core/Route.js +0 -199
  532. package/dist/core/Route.js.map +0 -1
  533. package/dist/core/RoutingEngine.d.ts +0 -109
  534. package/dist/core/RoutingEngine.d.ts.map +0 -1
  535. package/dist/core/RoutingEngine.js.map +0 -1
  536. package/dist/core/Step.d.ts +0 -72
  537. package/dist/core/Step.d.ts.map +0 -1
  538. package/dist/core/Step.js +0 -146
  539. package/dist/core/Step.js.map +0 -1
  540. package/dist/core/Tool.d.ts +0 -39
  541. package/dist/core/Tool.d.ts.map +0 -1
  542. package/dist/core/Tool.js +0 -31
  543. package/dist/core/Tool.js.map +0 -1
  544. package/dist/core/ToolExecutor.d.ts +0 -29
  545. package/dist/core/ToolExecutor.d.ts.map +0 -1
  546. package/dist/core/ToolExecutor.js +0 -69
  547. package/dist/core/ToolExecutor.js.map +0 -1
  548. package/dist/core/Transition.d.ts +0 -32
  549. package/dist/core/Transition.d.ts.map +0 -1
  550. package/dist/core/Transition.js +0 -85
  551. package/dist/core/Transition.js.map +0 -1
  552. package/dist/index.d.ts.map +0 -1
  553. package/dist/index.js.map +0 -1
  554. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  555. package/dist/providers/AnthropicProvider.js.map +0 -1
  556. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  557. package/dist/providers/GeminiProvider.js.map +0 -1
  558. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  559. package/dist/providers/OpenAIProvider.js.map +0 -1
  560. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  561. package/dist/providers/OpenRouterProvider.js.map +0 -1
  562. package/dist/providers/index.d.ts.map +0 -1
  563. package/dist/providers/index.js.map +0 -1
  564. package/dist/types/agent.d.ts.map +0 -1
  565. package/dist/types/agent.js.map +0 -1
  566. package/dist/types/ai.d.ts.map +0 -1
  567. package/dist/types/ai.js.map +0 -1
  568. package/dist/types/history.d.ts.map +0 -1
  569. package/dist/types/history.js +0 -34
  570. package/dist/types/history.js.map +0 -1
  571. package/dist/types/index.d.ts +0 -12
  572. package/dist/types/index.d.ts.map +0 -1
  573. package/dist/types/index.js +0 -6
  574. package/dist/types/index.js.map +0 -1
  575. package/dist/types/persistence.d.ts.map +0 -1
  576. package/dist/types/persistence.js.map +0 -1
  577. package/dist/types/route.d.ts +0 -175
  578. package/dist/types/route.d.ts.map +0 -1
  579. package/dist/types/routing.d.ts.map +0 -1
  580. package/dist/types/schema.d.ts.map +0 -1
  581. package/dist/types/session.d.ts +0 -104
  582. package/dist/types/session.d.ts.map +0 -1
  583. package/dist/types/session.js.map +0 -1
  584. package/dist/types/tool.d.ts.map +0 -1
  585. package/dist/utils/event.d.ts.map +0 -1
  586. package/dist/utils/event.js.map +0 -1
  587. package/dist/utils/id.d.ts.map +0 -1
  588. package/dist/utils/id.js.map +0 -1
  589. package/dist/utils/logger.d.ts.map +0 -1
  590. package/dist/utils/logger.js.map +0 -1
  591. package/dist/utils/retry.d.ts.map +0 -1
  592. package/dist/utils/retry.js.map +0 -1
  593. package/docs/AGENT.md +0 -535
  594. package/docs/DOCS.md +0 -263
  595. package/docs/DOMAINS.md +0 -735
  596. package/docs/EXAMPLES.md +0 -467
  597. package/docs/GETTING_STARTED.md +0 -424
  598. package/docs/PERSISTENCE.md +0 -815
  599. package/docs/PROVIDERS.md +0 -612
  600. package/docs/ROUTES.md +0 -1085
  601. package/docs/STEPS.md +0 -883
  602. package/examples/business-onboarding.ts +0 -791
  603. package/examples/custom-database-persistence.ts +0 -574
  604. package/examples/declarative-agent.ts +0 -401
  605. package/examples/domain-scoping.ts +0 -366
  606. package/examples/healthcare-agent.ts +0 -511
  607. package/examples/redis-persistence.ts +0 -525
  608. package/examples/route-transitions.ts +0 -266
  609. package/examples/travel-agent.ts +0 -584
  610. package/src/core/DomainRegistry.ts +0 -80
  611. package/src/core/Tool.ts +0 -112
  612. package/src/core/Transition.ts +0 -115
  613. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  614. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  615. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  616. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  617. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  618. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  619. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  620. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  621. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  622. /package/dist/cjs/{types → src/types}/route.js +0 -0
  623. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  624. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  625. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  626. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  627. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  628. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  629. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  630. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  631. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  632. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  633. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  634. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  635. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  636. /package/dist/{adapters → src/adapters}/index.js +0 -0
  637. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  638. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  639. /package/dist/{constants → src/constants}/index.js +0 -0
  640. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  641. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  642. /package/dist/{providers → src/providers}/index.js +0 -0
  643. /package/dist/{types → src/types}/agent.js +0 -0
  644. /package/dist/{types → src/types}/ai.js +0 -0
  645. /package/dist/{types → src/types}/persistence.js +0 -0
  646. /package/dist/{types → src/types}/route.js +0 -0
  647. /package/dist/{types → src/types}/routing.d.ts +0 -0
  648. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  649. /package/dist/{types → src/types}/routing.js +0 -0
  650. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  651. /package/dist/{types → src/types}/schema.d.ts +0 -0
  652. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  653. /package/dist/{types → src/types}/schema.js +0 -0
  654. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  655. /package/dist/{types → src/types}/tool.js +0 -0
  656. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  657. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  658. /package/dist/{utils → src/utils}/id.js +0 -0
  659. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  660. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  661. /package/dist/{utils → src/utils}/logger.js +0 -0
  662. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  663. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  664. /package/dist/{utils → src/utils}/retry.js +0 -0
  665. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,7 +1,9 @@
1
- import { enterRoute, mergeCollected } from "../types/session";
1
+ import { enterRoute, mergeCollected } from "../utils";
2
2
  import { PromptComposer } from "./PromptComposer";
3
3
  import { getLastMessageFromHistory } from "../utils/event";
4
4
  import { logger } from "../utils/logger";
5
+ import { render } from "../utils/template";
6
+ import { END_ROUTE_ID } from "../constants";
5
7
  export class RoutingEngine {
6
8
  constructor(options) {
7
9
  this.options = options;
@@ -12,9 +14,11 @@ export class RoutingEngine {
12
14
  * @private
13
15
  */
14
16
  async decideSingleRouteStep(params) {
15
- const { route, session, history, agentMeta, provider, context, signal } = params;
17
+ const { route, session, history, agentOptions, provider, context, signal } = params;
16
18
  let updatedSession = session;
17
19
  const selectedRoute = route;
20
+ // Check if this single route is complete
21
+ const completedRoutes = route.isComplete(session.data || {}) ? [route] : [];
18
22
  // Enter route if not already in it
19
23
  if (!session.currentRoute || session.currentRoute.id !== route.id) {
20
24
  updatedSession = enterRoute(session, route.id, route.title);
@@ -44,6 +48,7 @@ export class RoutingEngine {
44
48
  selectedStep: undefined,
45
49
  session: updatedSession,
46
50
  isRouteComplete: true,
51
+ completedRoutes,
47
52
  };
48
53
  }
49
54
  else {
@@ -53,13 +58,24 @@ export class RoutingEngine {
53
58
  selectedStep: candidates[0].step,
54
59
  session: updatedSession,
55
60
  isRouteComplete: false,
61
+ completedRoutes,
56
62
  };
57
63
  }
58
64
  }
59
65
  // Multiple candidates - use AI to select best step
60
66
  const lastUserMessage = getLastMessageFromHistory(history);
61
- const stepPrompt = this.buildStepSelectionPrompt(route, currentStep, candidates, updatedSession.data || {}, history, lastUserMessage, agentMeta);
62
- const stepSchema = this.buildStepSelectionSchema(candidates.map((c) => c.step.id));
67
+ const stepPrompt = await this.buildStepSelectionPrompt({
68
+ route,
69
+ currentStep,
70
+ candidates,
71
+ data: updatedSession.data || {},
72
+ history,
73
+ lastMessage: lastUserMessage,
74
+ agentOptions,
75
+ context,
76
+ session: updatedSession,
77
+ });
78
+ const stepSchema = this.buildStepSelectionSchema(candidates.map((c) => c.step));
63
79
  const stepResult = await provider.generateMessage({
64
80
  prompt: stepPrompt,
65
81
  history,
@@ -71,9 +87,9 @@ export class RoutingEngine {
71
87
  },
72
88
  });
73
89
  const selectedStepId = stepResult.structured?.selectedStepId;
74
- const selectedStep = candidates.find((c) => c.step.id === selectedStepId)?.step;
90
+ const selectedStep = candidates.find((c) => c.step.id === selectedStepId);
75
91
  if (selectedStep) {
76
- logger.debug(`[RoutingEngine] Single-route: AI selected step: ${selectedStep.id}`);
92
+ logger.debug(`[RoutingEngine] Single-route: AI selected step: ${selectedStep.step.id}`);
77
93
  logger.debug(`[RoutingEngine] Single-route: Reasoning: ${stepResult.structured?.reasoning}`);
78
94
  }
79
95
  else {
@@ -81,9 +97,10 @@ export class RoutingEngine {
81
97
  }
82
98
  return {
83
99
  selectedRoute,
84
- selectedStep: selectedStep || candidates[0].step,
100
+ selectedStep: selectedStep?.step || candidates[0].step,
85
101
  responseDirectives: stepResult.structured?.responseDirectives,
86
102
  session: updatedSession,
103
+ completedRoutes,
87
104
  };
88
105
  }
89
106
  /**
@@ -98,11 +115,9 @@ export class RoutingEngine {
98
115
  visited.add(currentStep.id);
99
116
  const transitions = currentStep.getTransitions();
100
117
  for (const transition of transitions) {
101
- const target = transition.getTarget();
118
+ const target = transition;
102
119
  // Check for END_ROUTE transition
103
- if (!target &&
104
- transition.spec.step &&
105
- typeof transition.spec.step === "symbol") {
120
+ if (target && target.id === END_ROUTE_ID) {
106
121
  // Found END_ROUTE - route is complete
107
122
  return {
108
123
  isRouteComplete: true,
@@ -115,7 +130,7 @@ export class RoutingEngine {
115
130
  logger.debug(`[RoutingEngine] Found valid step after skipping: ${target.id}`);
116
131
  return {
117
132
  step: target,
118
- condition: transition.condition,
133
+ isRouteComplete: false,
119
134
  };
120
135
  }
121
136
  // Target should be skipped too - recurse deeper
@@ -143,21 +158,16 @@ export class RoutingEngine {
143
158
  if (result.isRouteComplete) {
144
159
  // All steps are skipped and we reached END_ROUTE
145
160
  logger.debug(`[RoutingEngine] Route complete on entry: all steps skipped, END_ROUTE reached`);
146
- return [
147
- {
148
- step: initialStep,
149
- condition: "Route complete - all data collected on entry",
150
- isRouteComplete: true,
151
- },
152
- ];
161
+ candidates.push({
162
+ step: initialStep,
163
+ isRouteComplete: true,
164
+ });
153
165
  }
154
166
  else if (result.step) {
155
167
  // Found a non-skipped step
156
168
  candidates.push({
157
169
  step: result.step,
158
- condition: result.condition,
159
- requires: result.step.requires,
160
- collectFields: result.step.collectFields,
170
+ isRouteComplete: result.isRouteComplete || false,
161
171
  });
162
172
  }
163
173
  // If no step found and not complete, fall through to return empty candidates
@@ -165,8 +175,7 @@ export class RoutingEngine {
165
175
  else {
166
176
  candidates.push({
167
177
  step: initialStep,
168
- requires: initialStep.requires,
169
- collectFields: initialStep.collectFields,
178
+ isRouteComplete: false,
170
179
  });
171
180
  }
172
181
  return candidates;
@@ -174,11 +183,9 @@ export class RoutingEngine {
174
183
  const transitions = currentStep.getTransitions();
175
184
  let hasEndRoute = false;
176
185
  for (const transition of transitions) {
177
- const target = transition.getTarget();
186
+ const target = transition;
178
187
  // Check for END_ROUTE transition (no target step)
179
- if (!target &&
180
- transition.spec.step &&
181
- typeof transition.spec.step === "symbol") {
188
+ if (target && target.id === END_ROUTE_ID) {
182
189
  hasEndRoute = true;
183
190
  continue;
184
191
  }
@@ -196,18 +203,14 @@ export class RoutingEngine {
196
203
  // Found a non-skipped step deeper in the chain
197
204
  candidates.push({
198
205
  step: result.step,
199
- condition: result.condition || transition.condition,
200
- requires: result.step.requires,
201
- collectFields: result.step.collectFields,
206
+ isRouteComplete: result.isRouteComplete || false,
202
207
  });
203
208
  }
204
209
  continue;
205
210
  }
206
211
  candidates.push({
207
212
  step: target,
208
- condition: transition.condition,
209
- requires: target.requires,
210
- collectFields: target.collectFields,
213
+ isRouteComplete: hasEndRoute || false,
211
214
  });
212
215
  }
213
216
  // If no valid candidates found
@@ -219,7 +222,6 @@ export class RoutingEngine {
219
222
  return [
220
223
  {
221
224
  step: currentStep,
222
- condition: "Route complete - all data collected",
223
225
  isRouteComplete: true,
224
226
  },
225
227
  ];
@@ -228,9 +230,7 @@ export class RoutingEngine {
228
230
  if (!currentStep.shouldSkip(data)) {
229
231
  candidates.push({
230
232
  step: currentStep,
231
- condition: "Continue in current step (no valid transitions)",
232
- requires: currentStep.requires,
233
- collectFields: currentStep.collectFields,
233
+ isRouteComplete: hasEndRoute || false,
234
234
  });
235
235
  }
236
236
  }
@@ -241,23 +241,34 @@ export class RoutingEngine {
241
241
  * and updates the session (including initialData merge when entering a new route).
242
242
  *
243
243
  * OPTIMIZATION: If there's only 1 route, skips route scoring and only does step selection.
244
+ * CROSS-ROUTE COMPLETION: Evaluates all routes for completion based on collected data.
244
245
  */
245
246
  async decideRouteAndStep(params) {
246
- const { routes, session, history, agentMeta, provider, context, signal } = params;
247
+ const { routes, session, history, agentOptions, provider, context, signal, } = params;
247
248
  if (routes.length === 0) {
248
249
  return { session };
249
250
  }
251
+ // CROSS-ROUTE COMPLETION EVALUATION: Check all routes for completion
252
+ const completedRoutes = this.evaluateRouteCompletions(routes, session.data || {});
253
+ // Log completed routes
254
+ if (completedRoutes.length > 0) {
255
+ logger.debug(`[RoutingEngine] Found ${completedRoutes.length} completed routes: ${completedRoutes.map(r => r.title).join(', ')}`);
256
+ }
250
257
  // OPTIMIZATION: Single route - skip route scoring, only do step selection
251
258
  if (routes.length === 1) {
252
- return this.decideSingleRouteStep({
259
+ const result = await this.decideSingleRouteStep({
253
260
  route: routes[0],
254
261
  session,
255
262
  history,
256
- agentMeta,
263
+ agentOptions,
257
264
  provider,
258
265
  context,
259
266
  signal,
260
267
  });
268
+ return {
269
+ ...result,
270
+ completedRoutes,
271
+ };
261
272
  }
262
273
  const lastUserMessage = getLastMessageFromHistory(history);
263
274
  let activeRouteSteps;
@@ -278,19 +289,21 @@ export class RoutingEngine {
278
289
  activeRouteSteps = undefined;
279
290
  }
280
291
  else {
281
- activeRouteSteps = candidates.map((c) => ({
282
- stepId: c.step.id,
283
- description: c.step.description || "",
284
- condition: c.condition,
285
- requires: c.requires,
286
- collectFields: c.collectFields,
287
- }));
292
+ activeRouteSteps = candidates.map((c) => c.step);
288
293
  logger.debug(`[RoutingEngine] Found ${activeRouteSteps.length} candidate steps for active route`);
289
294
  }
290
295
  }
291
296
  }
292
297
  const routingSchema = this.buildDynamicRoutingSchema(routes, undefined, activeRouteSteps);
293
- const routingPrompt = this.buildRoutingPrompt(history, routes, lastUserMessage, agentMeta, session, activeRouteSteps);
298
+ const routingPrompt = await this.buildRoutingPrompt({
299
+ history,
300
+ routes,
301
+ lastMessage: lastUserMessage,
302
+ agentOptions,
303
+ session,
304
+ activeRouteSteps,
305
+ context,
306
+ });
294
307
  const routingResult = await provider.generateMessage({
295
308
  prompt: routingPrompt,
296
309
  history,
@@ -306,12 +319,17 @@ export class RoutingEngine {
306
319
  let responseDirectives;
307
320
  let updatedSession = session;
308
321
  if (routingResult.structured?.routes) {
309
- const decision = this.decideRouteFromScores({
310
- context: routingResult.structured.context,
311
- routes: routingResult.structured.routes,
312
- responseDirectives: routingResult.structured.responseDirectives,
313
- });
314
- selectedRoute = routes.find((r) => r.id === decision.routeId);
322
+ // Use cross-route completion evaluation to select optimal route
323
+ const optimalRoute = this.selectOptimalRoute(routes, updatedSession.data || {}, routingResult.structured.routes);
324
+ // Fall back to traditional scoring if no optimal route found
325
+ selectedRoute = optimalRoute || (() => {
326
+ const decision = this.decideRouteFromScores({
327
+ context: routingResult.structured.context,
328
+ routes: routingResult.structured.routes,
329
+ responseDirectives: routingResult.structured.responseDirectives,
330
+ });
331
+ return routes.find((r) => r.id === decision.routeId);
332
+ })();
315
333
  responseDirectives = routingResult.structured.responseDirectives;
316
334
  if (selectedRoute === activeRoute &&
317
335
  routingResult.structured.selectedStepId &&
@@ -341,63 +359,124 @@ export class RoutingEngine {
341
359
  responseDirectives,
342
360
  session: updatedSession,
343
361
  isRouteComplete,
362
+ completedRoutes,
344
363
  };
345
364
  }
365
+ /**
366
+ * Evaluate all routes for completion based on collected data
367
+ * @param routes - All available routes
368
+ * @param data - Currently collected agent-level data
369
+ * @returns Array of routes that are complete
370
+ */
371
+ evaluateRouteCompletions(routes, data) {
372
+ return routes.filter(route => route.isComplete(data));
373
+ }
374
+ /**
375
+ * Get completion status for all routes
376
+ * @param routes - All available routes
377
+ * @param data - Currently collected agent-level data
378
+ * @returns Map of route ID to completion progress (0-1)
379
+ */
380
+ getRouteCompletionStatus(routes, data) {
381
+ const completionStatus = new Map();
382
+ for (const route of routes) {
383
+ const progress = route.getCompletionProgress(data);
384
+ completionStatus.set(route.id, progress);
385
+ }
386
+ return completionStatus;
387
+ }
388
+ /**
389
+ * Find the best route to continue based on completion status and user intent
390
+ * Prioritizes routes that are partially complete but not finished
391
+ * @param routes - All available routes
392
+ * @param data - Currently collected agent-level data
393
+ * @param routeScores - AI-generated route scores from routing decision
394
+ * @returns Route that should be prioritized for continuation
395
+ */
396
+ selectOptimalRoute(routes, data, routeScores) {
397
+ const completionStatus = this.getRouteCompletionStatus(routes, data);
398
+ // Create weighted scores combining AI intent scores with completion progress
399
+ const weightedScores = [];
400
+ for (const route of routes) {
401
+ const aiScore = routeScores[route.id] || 0;
402
+ const completionProgress = completionStatus.get(route.id) || 0;
403
+ // Skip fully completed routes unless they have very high AI scores
404
+ if (completionProgress >= 1.0 && aiScore < 80) {
405
+ continue;
406
+ }
407
+ // Boost partially complete routes that match user intent
408
+ let weightedScore = aiScore;
409
+ if (completionProgress > 0 && completionProgress < 1.0) {
410
+ // Boost score for partially complete routes
411
+ weightedScore += (completionProgress * 20); // Up to 20 point boost
412
+ }
413
+ weightedScores.push({ route, score: weightedScore });
414
+ }
415
+ // Sort by weighted score and return the best option
416
+ weightedScores.sort((a, b) => b.score - a.score);
417
+ if (weightedScores.length > 0) {
418
+ logger.debug(`[RoutingEngine] Selected optimal route: ${weightedScores[0].route.title} ` +
419
+ `(AI: ${routeScores[weightedScores[0].route.id]}, ` +
420
+ `Completion: ${(completionStatus.get(weightedScores[0].route.id) || 0) * 100}%, ` +
421
+ `Weighted: ${weightedScores[0].score})`);
422
+ return weightedScores[0].route;
423
+ }
424
+ return undefined;
425
+ }
346
426
  /**
347
427
  * Build prompt for step selection within a single route
348
428
  * @private
349
429
  */
350
- buildStepSelectionPrompt(route, currentStep, candidates, data, history, lastMessage, agentMeta) {
351
- const pc = new PromptComposer();
430
+ async buildStepSelectionPrompt(params) {
431
+ const { route, currentStep, candidates, data, history, lastMessage, agentOptions, context, session, } = params;
432
+ const templateContext = { context, session, history };
433
+ const pc = new PromptComposer(templateContext);
352
434
  // Add agent metadata
353
- if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
354
- pc.addAgentMeta({
355
- name: agentMeta?.name || "Agent",
356
- description: agentMeta?.description,
357
- goal: agentMeta?.goal,
358
- });
435
+ if (agentOptions) {
436
+ await pc.addAgentMeta(agentOptions);
359
437
  }
360
- const personality = agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
361
- pc.addPersonality(personality);
362
438
  // Add route context
363
- pc.addInstruction(`Active Route: ${route.title}\nDescription: ${route.description || "N/A"}`);
439
+ await pc.addInstruction(`Active Route: ${route.title}\nDescription: ${route.description || "N/A"}`);
364
440
  // Add current step context
365
441
  if (currentStep) {
366
- pc.addInstruction(`Current Step: ${currentStep.id}\nDescription: ${currentStep.description || "N/A"}`);
442
+ await pc.addInstruction(`Current Step: ${currentStep.id}\nDescription: ${currentStep.description || "N/A"}`);
367
443
  }
368
444
  else {
369
- pc.addInstruction("Current Step: None (entering route)");
445
+ await pc.addInstruction("Current Step: None (entering route)");
370
446
  }
371
447
  // Add collected data context
372
448
  if (Object.keys(data).length > 0) {
373
- pc.addInstruction(`Collected Data So Far:\n${JSON.stringify(data, null, 2)}`);
449
+ await pc.addInstruction(`Collected Data So Far:\n${JSON.stringify(data, null, 2)}`);
374
450
  }
375
451
  else {
376
- pc.addInstruction("Collected Data: None yet");
452
+ await pc.addInstruction("Collected Data: None yet");
377
453
  }
378
454
  // Add conversation history
379
- pc.addInteractionHistory(history);
380
- pc.addLastMessage(lastMessage);
455
+ await pc.addInteractionHistory(history);
456
+ await pc.addLastMessage(lastMessage);
381
457
  // Add candidate steps
382
- const stepDescriptions = candidates.map((candidate, idx) => {
458
+ const stepDescriptions = [];
459
+ for (const candidate of candidates) {
460
+ const idx = candidates.indexOf(candidate);
383
461
  const parts = [
384
462
  `${idx + 1}. Step ID: ${candidate.step.id}`,
385
463
  ` Description: ${candidate.step.description || "N/A"}`,
386
464
  ];
387
- if (candidate.condition) {
388
- parts.push(` Condition: ${candidate.condition}`);
465
+ if (candidate.step.when) {
466
+ const renderedWhen = await render(candidate.step.when, templateContext);
467
+ parts.push(` When this step should be completed: ${renderedWhen}`);
389
468
  }
390
- if (candidate.requires && candidate.requires.length > 0) {
391
- parts.push(` Required Data: ${candidate.requires.join(", ")}`);
469
+ if (candidate.step.requires && candidate.step.requires.length > 0) {
470
+ parts.push(` Required Data: ${candidate.step.requires.join(", ")}`);
392
471
  }
393
- if (candidate.collectFields && candidate.collectFields.length > 0) {
394
- parts.push(` Collects: ${candidate.collectFields.join(", ")}`);
472
+ if (candidate.step.collect && candidate.step.collect.length > 0) {
473
+ parts.push(` Collects: ${candidate.step.collect.join(", ")}`);
395
474
  }
396
- return parts.join("\n");
397
- });
398
- pc.addInstruction(`Available Steps to Transition To:\n${stepDescriptions.join("\n\n")}`);
399
- // Add decision instructions
400
- pc.addInstruction([
475
+ stepDescriptions.push(parts.join("\n"));
476
+ }
477
+ await pc.addInstruction(`Available Steps to Transition To:\n${stepDescriptions.join("\n\n")}`);
478
+ // Add decision prompt
479
+ await pc.addInstruction([
401
480
  "Task: Decide which step to transition to based on:",
402
481
  "1. The user's current message and intent",
403
482
  "2. The conversation history and context",
@@ -419,7 +498,7 @@ export class RoutingEngine {
419
498
  * Build schema for step selection
420
499
  * @private
421
500
  */
422
- buildStepSelectionSchema(validStepIds) {
501
+ buildStepSelectionSchema(validSteps) {
423
502
  return {
424
503
  description: "Step transition decision based on conversation context and collected data",
425
504
  type: "object",
@@ -433,7 +512,7 @@ export class RoutingEngine {
433
512
  type: "string",
434
513
  nullable: false,
435
514
  description: "The ID of the selected step to transition to",
436
- enum: validStepIds,
515
+ enum: validSteps.map((s) => s.id),
437
516
  },
438
517
  responseDirectives: {
439
518
  type: "array",
@@ -489,7 +568,7 @@ export class RoutingEngine {
489
568
  type: "string",
490
569
  nullable: false,
491
570
  description: "The step ID to transition to within the active route (required if continuing in current route)",
492
- enum: activeRouteSteps.map((s) => s.stepId),
571
+ enum: activeRouteSteps.map((s) => s.id),
493
572
  };
494
573
  base.properties.stepReasoning = {
495
574
  type: "string",
@@ -508,18 +587,14 @@ export class RoutingEngine {
508
587
  }
509
588
  return base;
510
589
  }
511
- buildRoutingPrompt(history, routes, lastMessage, agentMeta, session, activeRouteSteps) {
512
- const pc = new PromptComposer();
513
- if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
514
- pc.addAgentMeta({
515
- name: agentMeta?.name || "Agent",
516
- description: agentMeta?.description,
517
- goal: agentMeta?.goal,
518
- });
590
+ async buildRoutingPrompt(params) {
591
+ const { history, routes, lastMessage, agentOptions, session, activeRouteSteps, context, } = params;
592
+ const templateContext = { context, session, history };
593
+ const pc = new PromptComposer(templateContext);
594
+ if (agentOptions) {
595
+ await pc.addAgentMeta(agentOptions);
519
596
  }
520
- const personality = agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
521
- pc.addPersonality(personality);
522
- pc.addInstruction("Task: Intent analysis and route scoring (0-100). Score ALL listed routes.");
597
+ await pc.addInstruction("Task: Intent analysis and route scoring (0-100). Score ALL listed routes.");
523
598
  // Add session context if available
524
599
  if (session?.currentRoute) {
525
600
  const sessionInfo = [
@@ -536,43 +611,66 @@ export class RoutingEngine {
536
611
  sessionInfo.push(`- Collected data: ${JSON.stringify(session.data)}`);
537
612
  }
538
613
  sessionInfo.push("Note: User is mid-conversation. They may want to continue current route or switch to a new one based on their intent.");
539
- pc.addInstruction(sessionInfo.join("\n"));
614
+ await pc.addInstruction(sessionInfo.join("\n"));
615
+ // Add cross-route completion status
616
+ const completionStatus = this.getRouteCompletionStatus(routes, session.data || {});
617
+ const completedRoutes = this.evaluateRouteCompletions(routes, session.data || {});
618
+ if (completionStatus.size > 0) {
619
+ const statusInfo = [
620
+ "",
621
+ "Route completion status based on collected data:",
622
+ ];
623
+ for (const route of routes) {
624
+ const progress = completionStatus.get(route.id) || 0;
625
+ const isComplete = completedRoutes.includes(route);
626
+ const progressPercent = Math.round(progress * 100);
627
+ statusInfo.push(`- ${route.title}: ${progressPercent}% complete${isComplete ? ' ✓ COMPLETE' : ''}`);
628
+ if (!isComplete && route.requiredFields) {
629
+ const missingFields = route.getMissingRequiredFields(session.data || {});
630
+ if (missingFields.length > 0) {
631
+ statusInfo.push(` Missing: ${missingFields.join(', ')}`);
632
+ }
633
+ }
634
+ }
635
+ statusInfo.push("", "Consider route completion status when scoring. Partially complete routes may be good candidates for continuation.");
636
+ await pc.addInstruction(statusInfo.join("\n"));
637
+ }
540
638
  // Add available steps for the active route
541
639
  if (activeRouteSteps && activeRouteSteps.length > 0) {
542
640
  const stepInfo = [
543
641
  "",
544
642
  "Available steps in active route (choose one to transition to):",
545
643
  ];
546
- activeRouteSteps.forEach((step, idx) => {
547
- stepInfo.push(`${idx + 1}. Step: ${step.stepId}`);
644
+ for (const step of activeRouteSteps) {
645
+ const idx = activeRouteSteps.indexOf(step);
646
+ stepInfo.push(`${idx + 1}. Step: ${step.id}`);
548
647
  if (step.description) {
549
648
  stepInfo.push(` Description: ${step.description}`);
550
649
  }
551
- if (step.condition) {
552
- stepInfo.push(` Condition: ${step.condition}`);
650
+ const renderedWhen = await render(step.when, templateContext);
651
+ if (step.when) {
652
+ stepInfo.push(` When this step should be completed: ${renderedWhen}`);
553
653
  }
554
654
  if (step.requires && step.requires.length > 0) {
555
655
  stepInfo.push(` Required data: ${step.requires.join(", ")}`);
556
656
  }
557
- if (step.collectFields && step.collectFields.length > 0) {
558
- stepInfo.push(` Will collect: ${step.collectFields.join(", ")}`);
657
+ if (step.collect && step.collect.length > 0) {
658
+ stepInfo.push(` Will collect: ${step.collect.join(", ")}`);
559
659
  }
560
- });
660
+ }
561
661
  stepInfo.push("");
562
662
  stepInfo.push("IMPORTANT: You MUST select a step to transition to. Evaluate which step makes the most sense based on:");
563
663
  stepInfo.push("- The conversation flow and what's been collected");
564
664
  stepInfo.push("- What data is still needed vs already present");
565
665
  stepInfo.push("- The logical next step in the conversation");
566
666
  stepInfo.push("- Whether conditions for steps are met");
567
- pc.addInstruction(stepInfo.join("\n"));
667
+ await pc.addInstruction(stepInfo.join("\n"));
568
668
  }
569
669
  }
570
- pc.addInteractionHistory(history);
571
- pc.addLastMessage(lastMessage);
572
- // Cast to unknown to satisfy generic constraints in composer
573
- // This is safe because PromptComposer only reads route metadata (id, title, description)
574
- pc.addRoutingOverview(routes);
575
- pc.addInstruction([
670
+ await pc.addInteractionHistory(history);
671
+ await pc.addLastMessage(lastMessage);
672
+ await pc.addRoutingOverview(routes);
673
+ await pc.addInstruction([
576
674
  "Scoring rules:",
577
675
  "- 90-100: explicit keywords + clear intent",
578
676
  "- 70-89: strong contextual evidence + relevant keywords",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingEngine.js","sourceRoot":"","sources":["../../../src/core/RoutingEngine.ts"],"names":[],"mappings":"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"}