@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,741 @@
1
+ "use strict";
2
+ /**
3
+ * Core Agent implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Agent = void 0;
7
+ const utils_1 = require("../utils");
8
+ const Route_1 = require("./Route");
9
+ const PersistenceManager_1 = require("./PersistenceManager");
10
+ const SessionManager_1 = require("./SessionManager");
11
+ const RoutingEngine_1 = require("./RoutingEngine");
12
+ const ResponseModal_1 = require("./ResponseModal");
13
+ const ToolManager_1 = require("./ToolManager");
14
+ /**
15
+ * Error thrown when data validation fails
16
+ */
17
+ class DataValidationError extends Error {
18
+ constructor(errors, message) {
19
+ super(message || "Data validation failed");
20
+ this.errors = errors;
21
+ this.name = "DataValidationError";
22
+ }
23
+ }
24
+ /**
25
+ * Error thrown when route configuration is invalid
26
+ */
27
+ class RouteConfigurationError extends Error {
28
+ constructor(routeTitle, invalidFields, message) {
29
+ super(message || `Route configuration error in '${routeTitle}'`);
30
+ this.routeTitle = routeTitle;
31
+ this.invalidFields = invalidFields;
32
+ this.name = "RouteConfigurationError";
33
+ }
34
+ }
35
+ /**
36
+ * Main Agent class with generic context and data support
37
+ */
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ class Agent {
40
+ constructor(options) {
41
+ this.options = options;
42
+ this.terms = [];
43
+ this.guidelines = [];
44
+ this.tools = [];
45
+ this.routes = [];
46
+ this.knowledgeBase = {};
47
+ this.collectedData = {};
48
+ // Set log level based on debug option
49
+ if (options.debug) {
50
+ utils_1.logger.setLevel(utils_1.LoggerLevel.DEBUG);
51
+ }
52
+ // Validate context configuration
53
+ if (options.context !== undefined && options.contextProvider) {
54
+ throw new Error("Cannot provide both 'context' and 'contextProvider'. Choose one.");
55
+ }
56
+ // Initialize and validate agent-level schema if provided
57
+ if (options.schema) {
58
+ this.schema = options.schema;
59
+ this.validateSchema(this.schema);
60
+ utils_1.logger.debug("[Agent] Agent-level schema initialized and validated");
61
+ }
62
+ // Initialize context if provided
63
+ this.context = options.context;
64
+ // Initialize collected data with initial data if provided
65
+ if (options.initialData) {
66
+ if (this.schema) {
67
+ const validation = this.validateData(options.initialData);
68
+ if (!validation.valid) {
69
+ throw new Error(`Initial data validation failed: ${validation.errors.map(e => e.message).join(', ')}`);
70
+ }
71
+ }
72
+ this.collectedData = { ...options.initialData };
73
+ utils_1.logger.debug("[Agent] Initial data set:", this.collectedData);
74
+ }
75
+ // Initialize current session if provided
76
+ this.currentSession = options.session;
77
+ // Initialize routing engine
78
+ this.routingEngine = new RoutingEngine_1.RoutingEngine({
79
+ maxCandidates: 5,
80
+ allowRouteSwitch: true,
81
+ switchThreshold: 70,
82
+ });
83
+ // Initialize ResponseModal for handling all response generation
84
+ this.responseModal = new ResponseModal_1.ResponseModal(this);
85
+ // Initialize persistence if configured
86
+ if (options.persistence) {
87
+ try {
88
+ // Validate persistence configuration
89
+ if (!options.persistence.adapter) {
90
+ throw new Error("Persistence adapter is required when persistence is configured");
91
+ }
92
+ if (!options.persistence.adapter.sessionRepository) {
93
+ throw new Error("Persistence adapter must provide a sessionRepository");
94
+ }
95
+ if (!options.persistence.adapter.messageRepository) {
96
+ throw new Error("Persistence adapter must provide a messageRepository");
97
+ }
98
+ this.persistenceManager = new PersistenceManager_1.PersistenceManager(options.persistence);
99
+ // Initialize the adapter if it has an initialize method
100
+ if (options.persistence.adapter.initialize) {
101
+ options.persistence.adapter.initialize().catch((error) => {
102
+ utils_1.logger.error("[Agent] Persistence adapter initialization failed:", error instanceof Error ? error.message : String(error));
103
+ });
104
+ }
105
+ }
106
+ catch (error) {
107
+ const errorMessage = error instanceof Error ? error.message : String(error);
108
+ utils_1.logger.error("[Agent] Failed to initialize persistence:", errorMessage);
109
+ throw new Error(`Failed to initialize persistence: ${errorMessage}`);
110
+ }
111
+ }
112
+ // Initialize from options - use create methods for consistency
113
+ if (options.terms) {
114
+ options.terms.forEach((term) => {
115
+ this.createTerm(term);
116
+ });
117
+ }
118
+ if (options.guidelines) {
119
+ options.guidelines.forEach((guideline) => {
120
+ this.createGuideline(guideline);
121
+ });
122
+ }
123
+ if (options.tools) {
124
+ options.tools.forEach((tool) => {
125
+ this.createTool(tool);
126
+ });
127
+ }
128
+ if (options.routes) {
129
+ options.routes.forEach((routeOptions) => {
130
+ this.createRoute(routeOptions);
131
+ });
132
+ }
133
+ // Initialize knowledge base
134
+ if (options.knowledgeBase) {
135
+ this.knowledgeBase = { ...options.knowledgeBase };
136
+ }
137
+ // Initialize session manager with reference to this agent for bidirectional sync
138
+ this.session = new SessionManager_1.SessionManager(this.persistenceManager, this);
139
+ // Initialize tool manager with proper type inference
140
+ this.tool = new ToolManager_1.ToolManager(this);
141
+ // Store sessionId for later use in getOrCreate calls
142
+ if (options.sessionId) {
143
+ this.session.setDefaultSessionId(options.sessionId);
144
+ // The session will be loaded on first getOrCreate call
145
+ this.session.getOrCreate(options.sessionId).then((session) => {
146
+ // Sync session data to agent collected data
147
+ if (session.data && Object.keys(session.data).length > 0) {
148
+ this.collectedData = { ...session.data };
149
+ utils_1.logger.debug("[Agent] Synced session data to collected data:", this.collectedData);
150
+ }
151
+ }).catch((err) => {
152
+ utils_1.logger.error("Failed to start session", err);
153
+ });
154
+ }
155
+ }
156
+ /**
157
+ * Validate the agent-level schema structure
158
+ * @private
159
+ */
160
+ validateSchema(schema) {
161
+ if (!schema || typeof schema !== 'object') {
162
+ throw new Error("Agent schema must be a valid JSON Schema object. " +
163
+ "Provide a schema with 'type': 'object' and 'properties' to define the data structure.");
164
+ }
165
+ if (schema.type !== 'object') {
166
+ throw new Error(`Agent schema must be of type 'object', but received '${String(schema.type)}'. ` +
167
+ "Agent-level schemas must define object structures for data collection.");
168
+ }
169
+ if (!schema.properties || typeof schema.properties !== 'object') {
170
+ throw new Error("Agent schema must have a 'properties' field defining the data fields. " +
171
+ "Example: { type: 'object', properties: { name: { type: 'string' }, email: { type: 'string' } } }");
172
+ }
173
+ utils_1.logger.debug("[Agent] Schema validation passed");
174
+ }
175
+ /**
176
+ * Validate data against the agent-level schema
177
+ */
178
+ validateData(data) {
179
+ if (!this.schema) {
180
+ // No schema defined, consider all data valid
181
+ return { valid: true, errors: [], warnings: [] };
182
+ }
183
+ const errors = [];
184
+ const warnings = [];
185
+ // Basic validation - check if provided fields exist in schema
186
+ if (this.schema.properties) {
187
+ for (const [key, value] of Object.entries(data)) {
188
+ if (!(key in this.schema.properties)) {
189
+ errors.push({
190
+ field: key,
191
+ value,
192
+ message: `Field '${key}' is not defined in agent schema`,
193
+ schemaPath: `properties.${key}`
194
+ });
195
+ }
196
+ }
197
+ }
198
+ // Check required fields if specified
199
+ if (this.schema.required && Array.isArray(this.schema.required)) {
200
+ for (const requiredField of this.schema.required) {
201
+ if (!(requiredField in data) || data[requiredField] === undefined) {
202
+ warnings.push({
203
+ field: requiredField,
204
+ value: undefined,
205
+ message: `Required field '${requiredField}' is missing`,
206
+ schemaPath: `required`
207
+ });
208
+ }
209
+ }
210
+ }
211
+ return {
212
+ valid: errors.length === 0,
213
+ errors,
214
+ warnings
215
+ };
216
+ }
217
+ /**
218
+ * Check if a field is valid according to the agent schema
219
+ * @param field - The field key to validate
220
+ * @returns true if field exists in schema or no schema is defined, false otherwise
221
+ */
222
+ isValidSchemaField(field) {
223
+ if (!this.schema || !this.schema.properties) {
224
+ // No schema defined, consider all fields valid
225
+ return true;
226
+ }
227
+ return field in this.schema.properties;
228
+ }
229
+ /**
230
+ * Get the current collected data
231
+ */
232
+ getCollectedData() {
233
+ // Ensure agent collected data is synced with session
234
+ this.syncSessionDataToCollectedData();
235
+ return { ...this.collectedData };
236
+ }
237
+ /**
238
+ * Update collected data with validation
239
+ */
240
+ async updateCollectedData(updates) {
241
+ // Validate the updates
242
+ const validation = this.validateData(updates);
243
+ if (!validation.valid) {
244
+ const errorMessages = validation.errors.map(e => e.message).join(', ');
245
+ throw new DataValidationError(validation.errors, `Data validation failed: ${errorMessages}`);
246
+ }
247
+ // Log warnings if any
248
+ if (validation.warnings.length > 0) {
249
+ const warningMessages = validation.warnings.map(w => w.message).join(', ');
250
+ utils_1.logger.warn(`[Agent] Data validation warnings: ${warningMessages}`);
251
+ }
252
+ // Merge updates with current data
253
+ const previousData = { ...this.collectedData };
254
+ this.collectedData = {
255
+ ...this.collectedData,
256
+ ...updates
257
+ };
258
+ // Trigger agent-level lifecycle hook if configured
259
+ if (this.options.hooks?.onDataUpdate) {
260
+ this.collectedData = await this.options.hooks.onDataUpdate(this.collectedData, previousData);
261
+ }
262
+ // Update current session if it exists to keep it in sync
263
+ if (this.currentSession) {
264
+ this.currentSession = (0, utils_1.mergeCollected)(this.currentSession, this.collectedData);
265
+ }
266
+ // Also update the session manager's session data (avoid circular call)
267
+ const sessionManagerSession = this.session.current;
268
+ if (sessionManagerSession) {
269
+ sessionManagerSession.data = { ...this.collectedData };
270
+ sessionManagerSession.metadata.lastUpdatedAt = new Date();
271
+ }
272
+ utils_1.logger.debug("[Agent] Collected data updated:", updates);
273
+ }
274
+ /**
275
+ * Get agent name
276
+ */
277
+ get name() {
278
+ return this.options.name;
279
+ }
280
+ /**
281
+ * Get agent description
282
+ */
283
+ get description() {
284
+ return this.options.description;
285
+ }
286
+ /**
287
+ * Get agent goal
288
+ */
289
+ get goal() {
290
+ return this.options.goal;
291
+ }
292
+ /**
293
+ * Get agent identity
294
+ */
295
+ get identity() {
296
+ return this.options.identity;
297
+ }
298
+ /**
299
+ * Create a new route (journey) using agent-level data type
300
+ */
301
+ createRoute(options) {
302
+ // Validate that requiredFields exist in agent schema
303
+ if (options.requiredFields && this.schema?.properties) {
304
+ const invalidRequiredFields = options.requiredFields.filter(field => !(String(field) in this.schema.properties));
305
+ if (invalidRequiredFields.length > 0) {
306
+ throw new RouteConfigurationError(options.title, invalidRequiredFields.map(f => String(f)), `Invalid required fields in route '${options.title}': ${invalidRequiredFields.join(', ')}. ` +
307
+ `Must be valid keys from agent schema. Available fields: ${Object.keys(this.schema.properties).join(', ')}.`);
308
+ }
309
+ }
310
+ // Validate that optionalFields exist in agent schema
311
+ if (options.optionalFields && this.schema?.properties) {
312
+ const invalidOptionalFields = options.optionalFields.filter(field => !(String(field) in this.schema.properties));
313
+ if (invalidOptionalFields.length > 0) {
314
+ throw new RouteConfigurationError(options.title, invalidOptionalFields.map(f => String(f)), `Invalid optional fields in route '${options.title}': ${invalidOptionalFields.join(', ')}. ` +
315
+ `Must be valid keys from agent schema. Available fields: ${Object.keys(this.schema.properties).join(', ')}.`);
316
+ }
317
+ }
318
+ const route = new Route_1.Route(options, this);
319
+ this.routes.push(route);
320
+ return route;
321
+ }
322
+ /**
323
+ * Create a domain term for the glossary
324
+ */
325
+ createTerm(term) {
326
+ this.terms.push(term);
327
+ return this;
328
+ }
329
+ /**
330
+ * Create a behavioral guideline
331
+ */
332
+ createGuideline(guideline) {
333
+ const guidelineWithId = {
334
+ ...guideline,
335
+ id: guideline.id || `guideline_${this.guidelines.length}`,
336
+ enabled: guideline.enabled !== false, // Default to true
337
+ };
338
+ this.guidelines.push(guidelineWithId);
339
+ return this;
340
+ }
341
+ /**
342
+ * Add a tool to the agent using the unified Tool interface
343
+ * Creates and adds the tool to agent scope in one operation (BREAKING CHANGE: replaces createTool)
344
+ */
345
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
346
+ addTool(tool) {
347
+ // Validate tool before adding
348
+ if (!tool || !tool.id || !tool.handler) {
349
+ throw new Error('Invalid tool: must have id and handler properties');
350
+ }
351
+ // Add directly to agent's tools array, preserving the TResult type
352
+ this.tools.push(tool);
353
+ utils_1.logger.debug(`[Agent] Added tool to agent scope: ${tool.id}`);
354
+ return this;
355
+ }
356
+ /**
357
+ * Register a tool at the agent level (legacy method for backward compatibility)
358
+ * @deprecated Use addTool() with Tool interface instead
359
+ */
360
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
361
+ createTool(tool) {
362
+ // Validate tool before adding
363
+ if (!tool || !tool.id || !tool.handler) {
364
+ throw new Error('Invalid tool: must have id and handler properties');
365
+ }
366
+ this.tools.push(tool);
367
+ utils_1.logger.debug(`[Agent] Created tool (legacy): ${tool.id}`);
368
+ return this;
369
+ }
370
+ /**
371
+ * Register multiple tools at the agent level
372
+ */
373
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
374
+ registerTools(tools) {
375
+ tools.forEach((tool) => {
376
+ // Validate each tool before adding
377
+ if (!tool || !tool.id || !tool.handler) {
378
+ throw new Error(`Invalid tool in batch: must have id and handler properties (tool: ${tool?.id || 'unknown'})`);
379
+ }
380
+ this.tools.push(tool);
381
+ });
382
+ utils_1.logger.debug(`[Agent] Registered ${tools.length} tools`);
383
+ return this;
384
+ }
385
+ /**
386
+ * Update the agent's context
387
+ * Triggers both agent-level and route-specific onContextUpdate lifecycle hooks if configured
388
+ */
389
+ async updateContext(updates) {
390
+ const previousContext = this.context;
391
+ // Merge updates with current context
392
+ this.context = {
393
+ ...this.context,
394
+ ...updates,
395
+ };
396
+ // Trigger route-specific lifecycle hook if configured and session has current route
397
+ if (this.currentSession?.currentRoute) {
398
+ const currentRoute = this.routes.find((r) => r.id === this.currentSession.currentRoute?.id);
399
+ if (currentRoute?.hooks?.onContextUpdate &&
400
+ previousContext !== undefined) {
401
+ await currentRoute.handleContextUpdate(this.context, previousContext);
402
+ }
403
+ }
404
+ // Trigger agent-level lifecycle hook if configured
405
+ if (this.options.hooks?.onContextUpdate && previousContext !== undefined) {
406
+ await this.options.hooks.onContextUpdate(this.context, previousContext);
407
+ }
408
+ }
409
+ /**
410
+ * Update collected data in session with lifecycle hook support
411
+ * Triggers both agent-level and route-specific onDataUpdate lifecycle hooks if configured
412
+ * @internal
413
+ */
414
+ async updateData(session, dataUpdate) {
415
+ const previousCollected = { ...session.data };
416
+ // Merge new collected data
417
+ let newCollected = {
418
+ ...session.data,
419
+ ...dataUpdate,
420
+ };
421
+ // Trigger route-specific lifecycle hook if configured and session has a current route
422
+ if (session.currentRoute) {
423
+ const currentRoute = this.routes.find((r) => r.id === session.currentRoute?.id);
424
+ if (currentRoute?.hooks?.onDataUpdate) {
425
+ newCollected = await currentRoute.handleDataUpdate(newCollected, previousCollected);
426
+ }
427
+ }
428
+ // Trigger agent-level lifecycle hook if configured
429
+ if (this.options.hooks?.onDataUpdate) {
430
+ newCollected = (await this.options.hooks.onDataUpdate(newCollected, previousCollected));
431
+ }
432
+ // Update agent's collected data to stay in sync
433
+ this.collectedData = { ...newCollected };
434
+ // Return updated session
435
+ return (0, utils_1.mergeCollected)(session, newCollected);
436
+ }
437
+ /**
438
+ * Get current context (fetches from provider if configured)
439
+ */
440
+ async getContext() {
441
+ // If context provider is configured, use it to fetch fresh context
442
+ if (this.options.contextProvider) {
443
+ return await this.options.contextProvider();
444
+ }
445
+ // Otherwise return the stored context
446
+ return this.context;
447
+ }
448
+ /**
449
+ * Get current schema
450
+ */
451
+ getSchema() {
452
+ return this.schema;
453
+ }
454
+ /**
455
+ * Generate a response based on history and context as a stream
456
+ */
457
+ async *respondStream(params) {
458
+ // Delegate to ResponseModal
459
+ yield* this.responseModal.respondStream(params);
460
+ }
461
+ /**
462
+ * Generate a response based on history and context
463
+ */
464
+ async respond(params) {
465
+ // Delegate to ResponseModal
466
+ return this.responseModal.respond(params);
467
+ }
468
+ /**
469
+ * Get all routes
470
+ */
471
+ getRoutes() {
472
+ return [...this.routes];
473
+ }
474
+ /**
475
+ * Get agent options
476
+ * @internal Used by ResponseModal
477
+ */
478
+ getAgentOptions() {
479
+ return this.options;
480
+ }
481
+ /**
482
+ * Get routing engine
483
+ * @internal Used by ResponseModal
484
+ */
485
+ getRoutingEngine() {
486
+ return this.routingEngine;
487
+ }
488
+ /**
489
+ * Get the updateData method bound to this agent
490
+ * @internal Used by ResponseModal
491
+ */
492
+ getUpdateDataMethod() {
493
+ return this.updateData.bind(this);
494
+ }
495
+ /**
496
+ * Get all terms
497
+ */
498
+ getTerms() {
499
+ return [...this.terms];
500
+ }
501
+ /**
502
+ * Get all tools
503
+ */
504
+ getTools() {
505
+ return [...this.tools];
506
+ }
507
+ /**
508
+ * Get all guidelines
509
+ */
510
+ getGuidelines() {
511
+ return [...this.guidelines];
512
+ }
513
+ /**
514
+ * Evaluate and match active guidelines based on their conditions
515
+ * Returns guidelines that should be active given the current context
516
+ */
517
+ async evaluateGuidelines(context, session, history) {
518
+ const templateContext = { context, session, history, data: session?.data };
519
+ const evaluator = (0, utils_1.createConditionEvaluator)(templateContext);
520
+ const matches = [];
521
+ for (const guideline of this.guidelines) {
522
+ // Skip disabled guidelines
523
+ if (guideline.enabled === false) {
524
+ continue;
525
+ }
526
+ if (guideline.condition) {
527
+ const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
528
+ // Include guideline if:
529
+ // 1. No programmatic conditions (only strings) - always active
530
+ // 2. Programmatic conditions evaluate to true
531
+ if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
532
+ const rationale = evaluation.aiContextStrings.length > 0
533
+ ? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
534
+ : evaluation.hasProgrammaticConditions
535
+ ? "Programmatic condition evaluated to true"
536
+ : "Always active (no conditions)";
537
+ matches.push({
538
+ guideline,
539
+ rationale
540
+ });
541
+ }
542
+ }
543
+ else {
544
+ // No condition means always active
545
+ matches.push({
546
+ guideline,
547
+ rationale: "Always active (no conditions)"
548
+ });
549
+ }
550
+ }
551
+ return matches;
552
+ }
553
+ /**
554
+ * Get the agent's knowledge base
555
+ */
556
+ getKnowledgeBase() {
557
+ return { ...this.knowledgeBase };
558
+ }
559
+ /**
560
+ * Get the persistence manager (if configured)
561
+ */
562
+ getPersistenceManager() {
563
+ return this.persistenceManager;
564
+ }
565
+ /**
566
+ * Check if persistence is enabled
567
+ */
568
+ hasPersistence() {
569
+ return this.persistenceManager !== undefined;
570
+ }
571
+ /**
572
+ * Set the current session for convenience methods
573
+ * @param session - Session step to use for subsequent calls
574
+ */
575
+ setCurrentSession(session) {
576
+ this.currentSession = session;
577
+ }
578
+ /**
579
+ * Get the current session (if set)
580
+ */
581
+ getCurrentSession() {
582
+ return this.currentSession;
583
+ }
584
+ /**
585
+ * Execute a prepare or finalize function/tool
586
+ * @internal Used by ResponseModal
587
+ */
588
+ async executePrepareFinalize(prepareOrFinalize, context, data, route, step) {
589
+ if (!prepareOrFinalize)
590
+ return;
591
+ if (typeof prepareOrFinalize === "function") {
592
+ // It's a function - call it directly
593
+ await prepareOrFinalize(context, data);
594
+ }
595
+ else {
596
+ // It's a tool reference - find and execute the tool
597
+ let tool;
598
+ if (typeof prepareOrFinalize === "string") {
599
+ // Tool ID - use ToolManager to find it across all scopes
600
+ tool = this.tool.find(prepareOrFinalize, undefined, step, route);
601
+ }
602
+ else {
603
+ // Tool object - validate it has required properties
604
+ if (prepareOrFinalize.id && typeof prepareOrFinalize.handler === 'function') {
605
+ tool = prepareOrFinalize;
606
+ }
607
+ else {
608
+ utils_1.logger.error(`[Agent] Invalid tool object for prepare/finalize: missing id or invalid handler`);
609
+ return;
610
+ }
611
+ }
612
+ if (tool) {
613
+ // Use ToolManager for execution
614
+ const result = await this.tool.executeTool({
615
+ tool,
616
+ context,
617
+ updateContext: this.updateContext.bind(this),
618
+ updateData: this.updateCollectedData.bind(this),
619
+ history: [], // Empty history for prepare/finalize
620
+ data,
621
+ });
622
+ if (!result.success) {
623
+ utils_1.logger.error(`[Agent] Tool execution failed in prepare/finalize: ${result.error}`);
624
+ throw new Error(`Tool execution failed: ${result.error}`);
625
+ }
626
+ }
627
+ else {
628
+ utils_1.logger.warn(`[Agent] Tool not found for prepare/finalize: ${typeof prepareOrFinalize === "string"
629
+ ? prepareOrFinalize
630
+ : "inline tool"}`);
631
+ }
632
+ }
633
+ }
634
+ /**
635
+ * Clear the current session
636
+ */
637
+ clearCurrentSession() {
638
+ this.currentSession = undefined;
639
+ }
640
+ /**
641
+ * Sync session data to agent collected data
642
+ * @internal Used to keep agent and session data in sync
643
+ */
644
+ syncSessionDataToCollectedData() {
645
+ const sessionData = this.session.getData();
646
+ if (sessionData && Object.keys(sessionData).length > 0) {
647
+ this.collectedData = { ...sessionData };
648
+ utils_1.logger.debug("[Agent] Synced session data to collected data:", this.collectedData);
649
+ }
650
+ }
651
+ /**
652
+ * Get collected data from current session or agent-level collected data
653
+ * @param routeId - Optional route ID to get data for (uses current route if not provided)
654
+ * @returns The collected data from the current session or agent-level data
655
+ */
656
+ getData() {
657
+ // Ensure agent collected data is synced with session
658
+ this.syncSessionDataToCollectedData();
659
+ // If we have a current session, use session data
660
+ if (this.currentSession) {
661
+ // With agent-level data, all routes share the same data structure
662
+ // No need for route-specific data access
663
+ return (this.currentSession.data) || {};
664
+ }
665
+ // Otherwise, return agent-level collected data
666
+ return this.getCollectedData();
667
+ }
668
+ /**
669
+ * Manually transition to a different route
670
+ * Sets a pending transition that will be executed on the next respond() call
671
+ *
672
+ * @param routeIdOrTitle - Route ID or title to transition to
673
+ * @param session - Session step to update (uses current session if not provided)
674
+ * @param condition - Optional AI-evaluated condition for the transition
675
+ * @returns Updated session with pending transition
676
+ *
677
+ * @example
678
+ * // After route completes
679
+ * if (response.isRouteComplete && response.session) {
680
+ * const updatedSession = agent.nextStepRoute("feedback-collection", response.session);
681
+ * // Next respond() call will automatically transition to feedback route
682
+ * const nextResponse = await agent.respond({ history, session: updatedSession });
683
+ * }
684
+ */
685
+ async nextStepRoute(routeIdOrTitle, session, condition, history) {
686
+ const targetSession = session || this.currentSession;
687
+ if (!targetSession) {
688
+ throw new Error("No session provided and no current session available. Please provide a session to transition.");
689
+ }
690
+ // Find target route by ID or title
691
+ const targetRoute = this.routes.find((r) => r.id === routeIdOrTitle || r.title === routeIdOrTitle);
692
+ if (!targetRoute) {
693
+ throw new Error(`Route not found: ${routeIdOrTitle}. Available routes: ${this.routes
694
+ .map((r) => r.title)
695
+ .join(", ")}`);
696
+ }
697
+ const templateContext = (0, utils_1.createTemplateContext)({
698
+ context: this.context,
699
+ session,
700
+ history,
701
+ data: this.currentSession?.data,
702
+ });
703
+ const renderedCondition = await (0, utils_1.render)(condition, templateContext);
704
+ const updatedSession = {
705
+ ...targetSession,
706
+ pendingTransition: {
707
+ targetRouteId: targetRoute.id,
708
+ condition: renderedCondition,
709
+ reason: "route_complete",
710
+ },
711
+ };
712
+ // Update current session if using it
713
+ if (!session && this.currentSession) {
714
+ this.currentSession = updatedSession;
715
+ }
716
+ utils_1.logger.debug(`[Agent] Set pending transition to route: ${targetRoute.title}`);
717
+ return updatedSession;
718
+ }
719
+ /**
720
+ * Simplified respond method using SessionManager
721
+ * Automatically manages conversation history through the session
722
+ */
723
+ async chat(message, options) {
724
+ // Delegate to ResponseModal.generate()
725
+ return this.responseModal.generate(message, options);
726
+ }
727
+ /**
728
+ * Modern streaming API - simple interface like chat() but returns a stream
729
+ * Automatically manages conversation history through the session
730
+ */
731
+ async *stream(message, options) {
732
+ // Delegate to ResponseModal with the same options structure as chat()
733
+ yield* this.responseModal.stream(message, {
734
+ history: options?.history,
735
+ contextOverride: options?.contextOverride,
736
+ signal: options?.signal,
737
+ });
738
+ }
739
+ }
740
+ exports.Agent = Agent;
741
+ //# sourceMappingURL=Agent.js.map