@falai/agent 0.1.0-alpha2

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 (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,593 @@
1
+ /**
2
+ * Step in the route DSL
3
+ */
4
+
5
+ import type {
6
+ StepRef,
7
+ StepOptions,
8
+ StepResult,
9
+ BranchSpec,
10
+ BranchResult,
11
+ Guideline,
12
+ GuidelineMatch,
13
+ Tool,
14
+ SessionState,
15
+ Event,
16
+ } from "../types";
17
+ import { ToolScope, Template, ConditionTemplate, TemplateContext } from "../types";
18
+ import { createConditionEvaluator, generateStepId, logger } from "../utils";
19
+ import { Agent } from './Agent'
20
+ import { END_ROUTE, END_ROUTE_ID } from "../constants";
21
+
22
+ /**
23
+ * Represents a step within a route
24
+ */
25
+ export class Step<TContext = unknown, TData = unknown> {
26
+ public readonly id: string;
27
+ private nextSteps: Step<TContext, TData>[] = [];
28
+ private guidelines: Guideline<TContext, TData>[] = [];
29
+ public readonly routeId: string;
30
+ public collect?: (keyof TData)[];
31
+ public description?: string;
32
+ public when?: ConditionTemplate<TContext, TData>;
33
+ public skipIf?: ConditionTemplate<TContext, TData>;
34
+ public requires?: (keyof TData)[];
35
+ public prompt?: Template<TContext, TData>;
36
+ public prepare?:
37
+ | string
38
+ | Tool<TContext, TData>
39
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
40
+ public finalize?:
41
+ | string
42
+ | Tool<TContext, TData>
43
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
44
+ public tools?: (string | Tool<TContext, TData>)[];
45
+
46
+ // Reference to parent agent for ToolManager access
47
+ private parentAgent?: Agent<TContext, TData>;
48
+
49
+ constructor(
50
+ routeId: string,
51
+ options: StepOptions<TContext, TData> = {},
52
+ parentAgent?: Agent<TContext, TData>
53
+ ) {
54
+ // Use provided ID or generate a deterministic one
55
+ this.id = options.id || generateStepId(routeId, options.description);
56
+ this.routeId = routeId;
57
+ this.description = options.description;
58
+
59
+ this.collect = options.collect;
60
+ this.skipIf = options.skipIf;
61
+ this.requires = options.requires;
62
+ this.prompt = options.prompt;
63
+ this.when = options.when;
64
+ this.prepare = options.prepare;
65
+ this.finalize = options.finalize;
66
+ this.tools = options.tools;
67
+
68
+ // Initialize guidelines from options
69
+ if (options.guidelines) {
70
+ options.guidelines.forEach((guideline) => {
71
+ this.addGuideline(guideline);
72
+ });
73
+ }
74
+
75
+ // Store reference to parent agent for ToolManager access
76
+ this.parentAgent = parentAgent;
77
+ }
78
+
79
+ /**
80
+ * Configure the step properties after creation
81
+ * Useful for overriding initial step configuration
82
+ */
83
+ configure(config: {
84
+ description?: string;
85
+ collect?: (keyof TData)[];
86
+ skipIf?: ConditionTemplate<TContext, TData>;
87
+ requires?: (keyof TData)[];
88
+ prompt?: Template<TContext, TData>;
89
+ prepare?:
90
+ | string
91
+ | Tool<TContext, TData>
92
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
93
+ finalize?:
94
+ | string
95
+ | Tool<TContext, TData>
96
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
97
+ tools?: (string | Tool<TContext, TData>)[];
98
+ }): this {
99
+ if (config.description !== undefined) {
100
+ this.description = config.description;
101
+ }
102
+
103
+ if (config.collect !== undefined) {
104
+ this.collect = config.collect;
105
+ }
106
+
107
+ if (config.skipIf !== undefined) {
108
+ this.skipIf = config.skipIf;
109
+ }
110
+
111
+ if (config.requires !== undefined) {
112
+ this.requires = config.requires;
113
+ }
114
+
115
+ if (config.prompt !== undefined) {
116
+ this.prompt = config.prompt;
117
+ }
118
+ if (config.prepare !== undefined) {
119
+ this.prepare = config.prepare;
120
+ }
121
+ if (config.finalize !== undefined) {
122
+ this.finalize = config.finalize;
123
+ }
124
+ if (config.tools !== undefined) {
125
+ this.tools = config.tools;
126
+ }
127
+ return this;
128
+ }
129
+
130
+ /**
131
+ * Shortcut to end the current route
132
+ *
133
+ * @param options - Optional step options for the end step
134
+ * @returns Terminal step result
135
+ */
136
+ endRoute(
137
+ options: Omit<StepOptions<TContext, TData>, "step"> = {}
138
+ ): StepResult<TContext, TData> {
139
+ return this.nextStep({
140
+ ...options,
141
+ step: END_ROUTE,
142
+ });
143
+ }
144
+
145
+ /**
146
+ * Create a transition from this step to another
147
+ *
148
+ * @param spec - Transition specification (prompt, tool, or direct step)
149
+ * @returns StepResult that supports chaining
150
+ */
151
+ nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData> {
152
+ // Handle END_ROUTE
153
+ if (spec.step && typeof spec.step === "symbol" && spec.step === END_ROUTE) {
154
+ const endStep = new Step<TContext, TData>(this.routeId, {
155
+ ...spec,
156
+ id: END_ROUTE_ID,
157
+ }, this.parentAgent);
158
+ this.nextSteps.push(endStep);
159
+ return this.createTerminalRef();
160
+ }
161
+
162
+ // Handle direct step reference
163
+ if (spec.step && typeof spec.step !== "symbol") {
164
+ // This is a bit tricky. We need to find the actual Step instance.
165
+ // For now, let's assume the user will provide a Step instance directly.
166
+ // This part might need to be revisited.
167
+ }
168
+
169
+ // Create new target step for prompt or tool
170
+ const targetStep = new Step<TContext, TData>(this.routeId, spec, this.parentAgent);
171
+ this.nextSteps.push(targetStep);
172
+
173
+ return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
174
+ }
175
+
176
+ /**
177
+ * Create multiple branches from this step
178
+ *
179
+ * @param branches - Array of branch specifications
180
+ * @returns BranchResult mapping branch names to their step results
181
+ */
182
+ branch(
183
+ branches: BranchSpec<TContext, TData>[]
184
+ ): BranchResult<TContext, TData> {
185
+ const result = {} as BranchResult<TContext, TData>;
186
+
187
+ for (const branchSpec of branches) {
188
+ // Create step options with optional ID
189
+ const stepOptions: StepOptions<TContext, TData> = branchSpec.id
190
+ ? { ...branchSpec.step, id: branchSpec.id }
191
+ : branchSpec.step;
192
+
193
+ // Create a new step for this branch
194
+ const branchStep = new Step<TContext, TData>(this.routeId, stepOptions, this.parentAgent);
195
+ // Add it to our transitions
196
+ this.nextSteps.push(branchStep);
197
+ // Create a step result for chaining
198
+ const branchName: string = branchSpec.name;
199
+ result[branchName] = this.createStepRefWithTransition(
200
+ branchStep.getRef(),
201
+ branchStep
202
+ );
203
+ }
204
+
205
+ return result;
206
+ }
207
+
208
+ /**
209
+ * Add a guideline specific to this step
210
+ */
211
+ addGuideline(guideline: Guideline<TContext, TData>): void {
212
+ this.guidelines.push(guideline);
213
+ }
214
+
215
+ /**
216
+ * Get guidelines for this step
217
+ */
218
+ getGuidelines(): Guideline<TContext, TData>[] {
219
+ return [...this.guidelines];
220
+ }
221
+
222
+ /**
223
+ * Evaluate and match active guidelines based on their conditions
224
+ * Returns guidelines that should be active given the current context
225
+ */
226
+ async evaluateGuidelines(
227
+ context?: TContext,
228
+ session?: SessionState<TData>,
229
+ history?: Event[]
230
+ ): Promise<GuidelineMatch<TContext, TData>[]> {
231
+ const templateContext = { context, session, history, data: session?.data || {} };
232
+ const evaluator = createConditionEvaluator(templateContext);
233
+ const matches: GuidelineMatch<TContext, TData>[] = [];
234
+
235
+ for (const guideline of this.guidelines) {
236
+ // Skip disabled guidelines
237
+ if (guideline.enabled === false) {
238
+ continue;
239
+ }
240
+
241
+ if (guideline.condition) {
242
+ const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
243
+
244
+ // Include guideline if:
245
+ // 1. No programmatic conditions (only strings) - always active
246
+ // 2. Programmatic conditions evaluate to true
247
+ if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
248
+ const rationale = evaluation.aiContextStrings.length > 0
249
+ ? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
250
+ : evaluation.hasProgrammaticConditions
251
+ ? "Programmatic condition evaluated to true"
252
+ : "Always active (no conditions)";
253
+
254
+ matches.push({
255
+ guideline,
256
+ rationale
257
+ });
258
+ }
259
+ } else {
260
+ // No condition means always active
261
+ matches.push({
262
+ guideline,
263
+ rationale: "Always active (no conditions)"
264
+ });
265
+ }
266
+ }
267
+
268
+ return matches;
269
+ }
270
+
271
+ /**
272
+ * Add a tool to this step using the unified Tool interface
273
+ * Creates and adds the tool to step scope in one operation
274
+ */
275
+ addTool(
276
+ tool: Tool<TContext, TData>
277
+ ): this {
278
+ // Validate tool before adding
279
+ if (!tool || !tool.id || !tool.handler) {
280
+ throw new Error('Invalid tool: must have id and handler properties');
281
+ }
282
+
283
+ // Add to step's tools array
284
+ if (!this.tools) {
285
+ this.tools = [];
286
+ }
287
+ this.tools.push(tool);
288
+
289
+ return this;
290
+ }
291
+
292
+ /**
293
+ * Resolve tool references in the tools array
294
+ * Supports both string IDs (resolved from registry) and inline tool objects
295
+ */
296
+ resolveTools(): Tool<TContext, TData>[] {
297
+ if (!this.tools) {
298
+ return [];
299
+ }
300
+
301
+ const resolvedTools: Tool<TContext, TData>[] = [];
302
+
303
+ for (const toolRef of this.tools) {
304
+ if (typeof toolRef === 'string') {
305
+ // Tool ID - try to resolve from ToolManager using proper scope resolution
306
+ if (this.parentAgent?.tool) {
307
+ const registeredTool = this.parentAgent.tool.find(toolRef);
308
+ if (registeredTool) {
309
+ resolvedTools.push(registeredTool);
310
+ } else {
311
+ // Tool not found - log warning but don't fail
312
+ logger.warn(`[Step] Tool ID '${toolRef}' not found in any scope for step ${this.id}`);
313
+ }
314
+ } else {
315
+ logger.warn(`[Step] No parent agent available to resolve tool ID '${toolRef}' for step ${this.id}`);
316
+ }
317
+ } else {
318
+ // Inline tool object - validate and use directly
319
+ if (toolRef && toolRef.id && typeof toolRef.handler === 'function') {
320
+ resolvedTools.push(toolRef);
321
+ } else {
322
+ logger.warn(`[Step] Invalid inline tool object in step ${this.id}:`, toolRef);
323
+ }
324
+ }
325
+ }
326
+
327
+ return resolvedTools;
328
+ }
329
+
330
+ /**
331
+ * Get all tools available to this step (both inline and resolved from registry)
332
+ */
333
+ getAvailableTools(): (string | Tool<TContext, TData>)[] {
334
+ return this.tools ? [...this.tools] : [];
335
+ }
336
+
337
+ /**
338
+ * Get all resolved tools available to this step using ToolManager
339
+ * This method provides the complete set of tools accessible from this step
340
+ */
341
+ getAllAvailableTools(): Tool<TContext, TData>[] {
342
+ if (!this.parentAgent?.tool) {
343
+ // Fallback to local resolution if no ToolManager available
344
+ return this.resolveTools();
345
+ }
346
+
347
+ // Use ToolManager to get all available tools for this step context
348
+ return this.parentAgent.tool.getAvailable(ToolScope.ALL, this, undefined);
349
+ }
350
+
351
+ /**
352
+ * Find a specific tool by ID using ToolManager resolution
353
+ * This method respects the tool resolution hierarchy: step → route → agent → registry
354
+ */
355
+ findTool(toolId: string, scope?: ToolScope): Tool<TContext, TData> | undefined {
356
+ if (!this.parentAgent?.tool) {
357
+ // Fallback to local resolution if no ToolManager available
358
+ const resolved = this.resolveTools();
359
+ return resolved.find(tool => tool.id === toolId || tool.name === toolId);
360
+ }
361
+
362
+ // Use ToolManager to find the tool with proper scope resolution
363
+ return this.parentAgent.tool.find(toolId, scope || ToolScope.ALL, this, undefined);
364
+ }
365
+
366
+ /**
367
+ * Get tools from a specific scope
368
+ */
369
+ getToolsFromScope(scope: ToolScope): Tool<TContext, TData>[] {
370
+ if (!this.parentAgent?.tool) {
371
+ // Fallback to local resolution if no ToolManager available
372
+ return scope === ToolScope.STEP ? this.resolveTools() : [];
373
+ }
374
+
375
+ return this.parentAgent.tool.getAvailable(scope, this, undefined);
376
+ }
377
+
378
+ /**
379
+ * Get only step-level tools (inline tools in this step)
380
+ */
381
+ getStepTools(): Tool<TContext, TData>[] {
382
+ return this.getToolsFromScope(ToolScope.STEP);
383
+ }
384
+
385
+ /**
386
+ * Get only registered tools accessible from this step
387
+ */
388
+ getRegisteredTools(): Tool<TContext, TData>[] {
389
+ return this.getToolsFromScope(ToolScope.REGISTERED);
390
+ }
391
+
392
+ /**
393
+ * Validate that all tool references in this step can be resolved
394
+ * Returns validation result with details about missing tools
395
+ */
396
+ validateToolReferences(): {
397
+ valid: boolean;
398
+ missing: string[];
399
+ found: string[];
400
+ details: Array<{ id: string; found: boolean; scope?: string; }>;
401
+ } {
402
+ if (!this.tools || this.tools.length === 0) {
403
+ return { valid: true, missing: [], found: [], details: [] };
404
+ }
405
+
406
+ // Extract tool IDs from the tools array
407
+ const toolIds: string[] = [];
408
+ for (const toolRef of this.tools) {
409
+ if (typeof toolRef === 'string') {
410
+ toolIds.push(toolRef);
411
+ } else if (toolRef && toolRef.id) {
412
+ toolIds.push(toolRef.id);
413
+ }
414
+ }
415
+
416
+ if (!this.parentAgent?.tool) {
417
+ // Fallback validation without ToolManager
418
+ const resolved = this.resolveTools();
419
+ const resolvedIds = resolved.map(tool => tool.id);
420
+ const missing = toolIds.filter(id => !resolvedIds.includes(id));
421
+ const found = toolIds.filter(id => resolvedIds.includes(id));
422
+
423
+ return {
424
+ valid: missing.length === 0,
425
+ missing,
426
+ found,
427
+ details: toolIds.map(id => ({ id, found: resolvedIds.includes(id) }))
428
+ };
429
+ }
430
+
431
+ // Use ToolManager validation
432
+ return this.parentAgent.tool.validateToolReferences(toolIds, this);
433
+ }
434
+
435
+ /**
436
+ * Get all transitions from this step
437
+ */
438
+ getTransitions(): Step<TContext, TData>[] {
439
+ return [...this.nextSteps];
440
+ }
441
+
442
+ /**
443
+ * Evaluate when condition using ConditionEvaluator
444
+ */
445
+ async evaluateWhen(
446
+ templateContext: TemplateContext<TContext, TData>
447
+ ): Promise<{
448
+ shouldActivate: boolean;
449
+ aiContextStrings: string[];
450
+ hasProgrammaticConditions: boolean;
451
+ }> {
452
+ if (!this.when) {
453
+ return {
454
+ shouldActivate: true,
455
+ aiContextStrings: [],
456
+ hasProgrammaticConditions: false
457
+ };
458
+ }
459
+
460
+ const evaluator = createConditionEvaluator(templateContext);
461
+ const result = await evaluator.evaluateCondition(this.when, 'AND');
462
+
463
+ return {
464
+ shouldActivate: result.programmaticResult,
465
+ aiContextStrings: result.aiContextStrings,
466
+ hasProgrammaticConditions: result.hasProgrammaticConditions
467
+ };
468
+ }
469
+
470
+ /**
471
+ * Evaluate skipIf condition using ConditionEvaluator
472
+ */
473
+ async evaluateSkipIf(
474
+ templateContext: TemplateContext<TContext, TData>
475
+ ): Promise<{
476
+ shouldSkip: boolean;
477
+ aiContextStrings: string[];
478
+ hasProgrammaticConditions: boolean;
479
+ }> {
480
+ if (!this.skipIf) {
481
+ return {
482
+ shouldSkip: false,
483
+ aiContextStrings: [],
484
+ hasProgrammaticConditions: false
485
+ };
486
+ }
487
+
488
+ const evaluator = createConditionEvaluator(templateContext);
489
+ const result = await evaluator.evaluateCondition(this.skipIf, 'OR');
490
+
491
+ return {
492
+ shouldSkip: result.programmaticResult,
493
+ aiContextStrings: result.aiContextStrings,
494
+ hasProgrammaticConditions: result.hasProgrammaticConditions
495
+ };
496
+ }
497
+
498
+
499
+
500
+ /**
501
+ * Check if this step has all required data to proceed
502
+ */
503
+ hasRequires(data: Partial<TData>): boolean {
504
+ if (!this.requires || this.requires.length === 0) return true;
505
+ return this.requires.every((key) => data[key] !== undefined);
506
+ }
507
+
508
+ /**
509
+ * Get step reference
510
+ */
511
+ getRef(): StepRef {
512
+ return {
513
+ id: this.id,
514
+ routeId: this.routeId,
515
+ };
516
+ }
517
+
518
+ /**
519
+ * Create a step reference with nextStep capability for chaining
520
+ */
521
+ private createStepRefWithTransition(
522
+ ref: StepRef,
523
+ step?: Step<TContext, TData>
524
+ ): StepResult<TContext, TData> {
525
+ const stepInstance = step || this;
526
+
527
+ return {
528
+ ...ref,
529
+ nextStep: (spec: StepOptions<TContext, TData>) =>
530
+ stepInstance.nextStep(spec),
531
+ branch: (branches: BranchSpec<TContext, TData>[]) =>
532
+ stepInstance.branch(branches),
533
+ endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
534
+ stepInstance.endRoute(options),
535
+ };
536
+ }
537
+
538
+ /**
539
+ * Create a terminal step reference (for END_ROUTE)
540
+ */
541
+ private createTerminalRef(): StepResult<TContext, TData> {
542
+ const terminalRef: StepRef = {
543
+ id: END_ROUTE_ID,
544
+ routeId: this.routeId,
545
+ };
546
+
547
+ return {
548
+ ...terminalRef,
549
+ nextStep: () => {
550
+ throw new Error("Cannot transition from END_ROUTE step");
551
+ },
552
+ branch: () => {
553
+ throw new Error("Cannot branch from END_ROUTE step");
554
+ },
555
+ endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
556
+ this.endRoute(options),
557
+ };
558
+ }
559
+
560
+ /**
561
+ * Create a transition result for this step
562
+ */
563
+ asStepResult(): StepResult<TContext, TData> {
564
+ return {
565
+ ...this.getRef(),
566
+ nextStep: (spec: StepOptions<TContext, TData>) => this.nextStep(spec),
567
+ branch: (branches: BranchSpec<TContext, TData>[]) =>
568
+ this.branch(branches),
569
+ endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
570
+ this.endRoute(options),
571
+ };
572
+ }
573
+
574
+ /**
575
+ * Export step configuration as StepOptions for copying/cloning
576
+ * @returns StepOptions that can be used to create a new step with identical configuration
577
+ */
578
+ toOptions(): StepOptions<TContext, TData> {
579
+ return {
580
+ id: this.id,
581
+ description: this.description,
582
+ prompt: this.prompt,
583
+ tools: this.tools,
584
+ prepare: this.prepare,
585
+ finalize: this.finalize,
586
+ collect: this.collect,
587
+ skipIf: this.skipIf,
588
+ requires: this.requires,
589
+ when: this.when,
590
+ guidelines: this.getGuidelines(),
591
+ };
592
+ }
593
+ }