@falai/agent 0.8.1 → 0.9.0-alpha-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (665) hide show
  1. package/README.md +332 -147
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/cjs/src/core/Agent.d.ts +223 -0
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1660 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +514 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +145 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/src/core/Route.js +343 -0
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +86 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +217 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/src/types/route.d.ts +235 -0
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +65 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +35 -32
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/src/core/Agent.d.ts +223 -0
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1656 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +71 -18
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +32 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +171 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +510 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +145 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/src/core/Route.js +339 -0
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/src/core/RoutingEngine.d.ts +129 -0
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +211 -113
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +86 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +213 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +45 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +80 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +80 -41
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +38 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/src/types/route.d.ts +235 -0
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +65 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{cjs → src}/types/tool.d.ts +17 -13
  289. package/dist/src/types/tool.d.ts.map +1 -0
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +33 -32
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +925 -255
  320. package/docs/api/overview.md +952 -0
  321. package/docs/core/agent/README.md +787 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
  324. package/docs/core/ai-integration/prompt-composition.md +220 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +176 -0
  327. package/docs/core/conversation-flows/data-collection.md +623 -0
  328. package/docs/core/conversation-flows/route-dsl.md +502 -0
  329. package/docs/core/conversation-flows/routes.md +117 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +154 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +348 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +406 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
  343. package/examples/ai-providers/anthropic-integration.ts +384 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
  345. package/examples/conversation-flows/completion-transitions.ts +277 -0
  346. package/examples/core-concepts/basic-agent.ts +443 -0
  347. package/examples/core-concepts/schema-driven-extraction.ts +305 -0
  348. package/examples/core-concepts/session-management.ts +406 -0
  349. package/examples/integrations/database-integration.ts +630 -0
  350. package/examples/integrations/healthcare-integration.ts +609 -0
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
  352. package/examples/integrations/server-session-management.ts +307 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
  355. package/examples/persistence/memory-sessions.ts +495 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/persistence/redis-persistence.ts +490 -0
  358. package/examples/tools/basic-tools.ts +561 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1431 -526
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +103 -49
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +128 -46
  373. package/src/core/ResponsePipeline.ts +830 -0
  374. package/src/core/Route.ts +222 -53
  375. package/src/core/RoutingEngine.ts +345 -229
  376. package/src/core/SessionManager.ts +265 -0
  377. package/src/core/Step.ts +157 -67
  378. package/src/core/ToolExecutor.ts +52 -43
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +81 -46
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +45 -7
  388. package/src/types/persistence.ts +45 -28
  389. package/src/types/route.ts +122 -57
  390. package/src/types/session.ts +20 -220
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +23 -19
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +204 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts +0 -197
  432. package/dist/cjs/core/Agent.d.ts.map +0 -1
  433. package/dist/cjs/core/Agent.js +0 -966
  434. package/dist/cjs/core/Agent.js.map +0 -1
  435. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  436. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  437. package/dist/cjs/core/DomainRegistry.js +0 -72
  438. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  439. package/dist/cjs/core/Events.d.ts +0 -41
  440. package/dist/cjs/core/Events.d.ts.map +0 -1
  441. package/dist/cjs/core/Events.js +0 -99
  442. package/dist/cjs/core/Events.js.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  444. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  445. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  446. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  447. package/dist/cjs/core/PromptComposer.js +0 -127
  448. package/dist/cjs/core/PromptComposer.js.map +0 -1
  449. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  450. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  451. package/dist/cjs/core/ResponseEngine.js +0 -56
  452. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  453. package/dist/cjs/core/Route.d.ts +0 -90
  454. package/dist/cjs/core/Route.d.ts.map +0 -1
  455. package/dist/cjs/core/Route.js +0 -203
  456. package/dist/cjs/core/Route.js.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.d.ts +0 -109
  458. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  459. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  460. package/dist/cjs/core/Step.d.ts +0 -72
  461. package/dist/cjs/core/Step.d.ts.map +0 -1
  462. package/dist/cjs/core/Step.js +0 -150
  463. package/dist/cjs/core/Step.js.map +0 -1
  464. package/dist/cjs/core/Tool.d.ts +0 -39
  465. package/dist/cjs/core/Tool.d.ts.map +0 -1
  466. package/dist/cjs/core/Tool.js +0 -34
  467. package/dist/cjs/core/Tool.js.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  469. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  470. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  471. package/dist/cjs/core/Transition.d.ts +0 -32
  472. package/dist/cjs/core/Transition.d.ts.map +0 -1
  473. package/dist/cjs/core/Transition.js +0 -89
  474. package/dist/cjs/core/Transition.js.map +0 -1
  475. package/dist/cjs/index.d.ts.map +0 -1
  476. package/dist/cjs/index.js.map +0 -1
  477. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  478. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  479. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  480. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  481. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  482. package/dist/cjs/providers/index.js.map +0 -1
  483. package/dist/cjs/types/agent.d.ts.map +0 -1
  484. package/dist/cjs/types/agent.js.map +0 -1
  485. package/dist/cjs/types/ai.d.ts.map +0 -1
  486. package/dist/cjs/types/history.d.ts.map +0 -1
  487. package/dist/cjs/types/history.js +0 -37
  488. package/dist/cjs/types/history.js.map +0 -1
  489. package/dist/cjs/types/index.d.ts +0 -12
  490. package/dist/cjs/types/index.d.ts.map +0 -1
  491. package/dist/cjs/types/index.js +0 -12
  492. package/dist/cjs/types/index.js.map +0 -1
  493. package/dist/cjs/types/persistence.d.ts.map +0 -1
  494. package/dist/cjs/types/persistence.js.map +0 -1
  495. package/dist/cjs/types/route.d.ts +0 -175
  496. package/dist/cjs/types/route.d.ts.map +0 -1
  497. package/dist/cjs/types/session.d.ts +0 -104
  498. package/dist/cjs/types/session.d.ts.map +0 -1
  499. package/dist/cjs/types/session.js.map +0 -1
  500. package/dist/cjs/types/tool.d.ts.map +0 -1
  501. package/dist/cjs/utils/event.js.map +0 -1
  502. package/dist/cjs/utils/id.js.map +0 -1
  503. package/dist/cjs/utils/logger.js.map +0 -1
  504. package/dist/cjs/utils/retry.js.map +0 -1
  505. package/dist/constants/index.d.ts.map +0 -1
  506. package/dist/constants/index.js.map +0 -1
  507. package/dist/core/Agent.d.ts +0 -197
  508. package/dist/core/Agent.d.ts.map +0 -1
  509. package/dist/core/Agent.js +0 -962
  510. package/dist/core/Agent.js.map +0 -1
  511. package/dist/core/DomainRegistry.d.ts +0 -36
  512. package/dist/core/DomainRegistry.d.ts.map +0 -1
  513. package/dist/core/DomainRegistry.js +0 -68
  514. package/dist/core/DomainRegistry.js.map +0 -1
  515. package/dist/core/Events.d.ts +0 -41
  516. package/dist/core/Events.d.ts.map +0 -1
  517. package/dist/core/Events.js +0 -94
  518. package/dist/core/Events.js.map +0 -1
  519. package/dist/core/PersistenceManager.d.ts.map +0 -1
  520. package/dist/core/PersistenceManager.js.map +0 -1
  521. package/dist/core/PromptComposer.d.ts +0 -24
  522. package/dist/core/PromptComposer.d.ts.map +0 -1
  523. package/dist/core/PromptComposer.js +0 -123
  524. package/dist/core/PromptComposer.js.map +0 -1
  525. package/dist/core/ResponseEngine.d.ts +0 -14
  526. package/dist/core/ResponseEngine.d.ts.map +0 -1
  527. package/dist/core/ResponseEngine.js +0 -52
  528. package/dist/core/ResponseEngine.js.map +0 -1
  529. package/dist/core/Route.d.ts +0 -90
  530. package/dist/core/Route.d.ts.map +0 -1
  531. package/dist/core/Route.js +0 -199
  532. package/dist/core/Route.js.map +0 -1
  533. package/dist/core/RoutingEngine.d.ts +0 -109
  534. package/dist/core/RoutingEngine.d.ts.map +0 -1
  535. package/dist/core/RoutingEngine.js.map +0 -1
  536. package/dist/core/Step.d.ts +0 -72
  537. package/dist/core/Step.d.ts.map +0 -1
  538. package/dist/core/Step.js +0 -146
  539. package/dist/core/Step.js.map +0 -1
  540. package/dist/core/Tool.d.ts +0 -39
  541. package/dist/core/Tool.d.ts.map +0 -1
  542. package/dist/core/Tool.js +0 -31
  543. package/dist/core/Tool.js.map +0 -1
  544. package/dist/core/ToolExecutor.d.ts +0 -29
  545. package/dist/core/ToolExecutor.d.ts.map +0 -1
  546. package/dist/core/ToolExecutor.js +0 -69
  547. package/dist/core/ToolExecutor.js.map +0 -1
  548. package/dist/core/Transition.d.ts +0 -32
  549. package/dist/core/Transition.d.ts.map +0 -1
  550. package/dist/core/Transition.js +0 -85
  551. package/dist/core/Transition.js.map +0 -1
  552. package/dist/index.d.ts.map +0 -1
  553. package/dist/index.js.map +0 -1
  554. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  555. package/dist/providers/AnthropicProvider.js.map +0 -1
  556. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  557. package/dist/providers/GeminiProvider.js.map +0 -1
  558. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  559. package/dist/providers/OpenAIProvider.js.map +0 -1
  560. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  561. package/dist/providers/OpenRouterProvider.js.map +0 -1
  562. package/dist/providers/index.d.ts.map +0 -1
  563. package/dist/providers/index.js.map +0 -1
  564. package/dist/types/agent.d.ts.map +0 -1
  565. package/dist/types/agent.js.map +0 -1
  566. package/dist/types/ai.d.ts.map +0 -1
  567. package/dist/types/ai.js.map +0 -1
  568. package/dist/types/history.d.ts.map +0 -1
  569. package/dist/types/history.js +0 -34
  570. package/dist/types/history.js.map +0 -1
  571. package/dist/types/index.d.ts +0 -12
  572. package/dist/types/index.d.ts.map +0 -1
  573. package/dist/types/index.js +0 -6
  574. package/dist/types/index.js.map +0 -1
  575. package/dist/types/persistence.d.ts.map +0 -1
  576. package/dist/types/persistence.js.map +0 -1
  577. package/dist/types/route.d.ts +0 -175
  578. package/dist/types/route.d.ts.map +0 -1
  579. package/dist/types/routing.d.ts.map +0 -1
  580. package/dist/types/schema.d.ts.map +0 -1
  581. package/dist/types/session.d.ts +0 -104
  582. package/dist/types/session.d.ts.map +0 -1
  583. package/dist/types/session.js.map +0 -1
  584. package/dist/types/tool.d.ts.map +0 -1
  585. package/dist/utils/event.d.ts.map +0 -1
  586. package/dist/utils/event.js.map +0 -1
  587. package/dist/utils/id.d.ts.map +0 -1
  588. package/dist/utils/id.js.map +0 -1
  589. package/dist/utils/logger.d.ts.map +0 -1
  590. package/dist/utils/logger.js.map +0 -1
  591. package/dist/utils/retry.d.ts.map +0 -1
  592. package/dist/utils/retry.js.map +0 -1
  593. package/docs/AGENT.md +0 -535
  594. package/docs/DOCS.md +0 -263
  595. package/docs/DOMAINS.md +0 -735
  596. package/docs/EXAMPLES.md +0 -467
  597. package/docs/GETTING_STARTED.md +0 -424
  598. package/docs/PERSISTENCE.md +0 -815
  599. package/docs/PROVIDERS.md +0 -612
  600. package/docs/ROUTES.md +0 -1085
  601. package/docs/STEPS.md +0 -883
  602. package/examples/business-onboarding.ts +0 -791
  603. package/examples/custom-database-persistence.ts +0 -574
  604. package/examples/declarative-agent.ts +0 -401
  605. package/examples/domain-scoping.ts +0 -366
  606. package/examples/healthcare-agent.ts +0 -511
  607. package/examples/redis-persistence.ts +0 -525
  608. package/examples/route-transitions.ts +0 -266
  609. package/examples/travel-agent.ts +0 -584
  610. package/src/core/DomainRegistry.ts +0 -80
  611. package/src/core/Tool.ts +0 -112
  612. package/src/core/Transition.ts +0 -115
  613. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  614. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  615. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  616. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  617. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  618. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  619. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  620. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  621. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  622. /package/dist/cjs/{types → src/types}/route.js +0 -0
  623. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  624. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  625. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  626. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  627. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  628. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  629. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  630. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  631. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  632. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  633. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  634. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  635. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  636. /package/dist/{adapters → src/adapters}/index.js +0 -0
  637. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  638. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  639. /package/dist/{constants → src/constants}/index.js +0 -0
  640. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  641. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  642. /package/dist/{providers → src/providers}/index.js +0 -0
  643. /package/dist/{types → src/types}/agent.js +0 -0
  644. /package/dist/{types → src/types}/ai.js +0 -0
  645. /package/dist/{types → src/types}/persistence.js +0 -0
  646. /package/dist/{types → src/types}/route.js +0 -0
  647. /package/dist/{types → src/types}/routing.d.ts +0 -0
  648. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  649. /package/dist/{types → src/types}/routing.js +0 -0
  650. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  651. /package/dist/{types → src/types}/schema.d.ts +0 -0
  652. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  653. /package/dist/{types → src/types}/schema.js +0 -0
  654. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  655. /package/dist/{types → src/types}/tool.js +0 -0
  656. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  657. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  658. /package/dist/{utils → src/utils}/id.js +0 -0
  659. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  660. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  661. /package/dist/{utils → src/utils}/logger.js +0 -0
  662. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  663. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  664. /package/dist/{utils → src/utils}/retry.js +0 -0
  665. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -1,966 +0,0 @@
1
- "use strict";
2
- /**
3
- * Core Agent implementation
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Agent = void 0;
7
- const session_1 = require("../types/session");
8
- const PromptComposer_1 = require("./PromptComposer");
9
- const logger_1 = require("../utils/logger");
10
- const Route_1 = require("./Route");
11
- const Step_1 = require("./Step");
12
- const DomainRegistry_1 = require("./DomainRegistry");
13
- const PersistenceManager_1 = require("./PersistenceManager");
14
- const RoutingEngine_1 = require("./RoutingEngine");
15
- const ResponseEngine_1 = require("./ResponseEngine");
16
- const ToolExecutor_1 = require("./ToolExecutor");
17
- const event_1 = require("../utils/event");
18
- const constants_1 = require("../constants");
19
- /**
20
- * Main Agent class with generic context support
21
- */
22
- class Agent {
23
- constructor(options) {
24
- this.options = options;
25
- this.terms = [];
26
- this.guidelines = [];
27
- this.capabilities = [];
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- this.routes = [];
30
- this.domainRegistry = new DomainRegistry_1.DomainRegistry();
31
- /**
32
- * Dynamic domain property - populated via addDomain
33
- */
34
- this.domain = {};
35
- // Set log level based on debug option
36
- if (options.debug) {
37
- logger_1.logger.setLevel(logger_1.LoggerLevel.DEBUG);
38
- }
39
- // Validate context configuration
40
- if (options.context !== undefined && options.contextProvider) {
41
- throw new Error("Cannot provide both 'context' and 'contextProvider'. Choose one.");
42
- }
43
- // Initialize context if provided
44
- this.context = options.context;
45
- // Initialize current session if provided
46
- this.currentSession = options.session;
47
- // Initialize routing and response engines
48
- this.routingEngine = new RoutingEngine_1.RoutingEngine({
49
- maxCandidates: 5,
50
- allowRouteSwitch: true,
51
- switchThreshold: 70,
52
- });
53
- this.responseEngine = new ResponseEngine_1.ResponseEngine();
54
- // Initialize persistence if configured
55
- if (options.persistence) {
56
- this.persistenceManager = new PersistenceManager_1.PersistenceManager(options.persistence);
57
- // Initialize the adapter if it has an initialize method
58
- if (options.persistence.adapter.initialize) {
59
- options.persistence.adapter.initialize().catch((error) => {
60
- logger_1.logger.error("[Agent] Persistence adapter initialization failed:", error);
61
- });
62
- }
63
- }
64
- // Initialize from options
65
- if (options.terms) {
66
- this.terms = [...options.terms];
67
- }
68
- if (options.guidelines) {
69
- options.guidelines.forEach((guideline) => {
70
- this.createGuideline(guideline);
71
- });
72
- }
73
- if (options.capabilities) {
74
- options.capabilities.forEach((capability) => {
75
- this.createCapability(capability);
76
- });
77
- }
78
- if (options.routes) {
79
- options.routes.forEach((routeOptions) => {
80
- this.createRoute(routeOptions);
81
- });
82
- }
83
- }
84
- /**
85
- * Get agent name
86
- */
87
- get name() {
88
- return this.options.name;
89
- }
90
- /**
91
- * Get agent description
92
- */
93
- get description() {
94
- return this.options.description;
95
- }
96
- /**
97
- * Get agent goal
98
- */
99
- get goal() {
100
- return this.options.goal;
101
- }
102
- /**
103
- * Create a new route (journey)
104
- * @template TData - Type of data collected throughout the route
105
- */
106
- createRoute(options) {
107
- const route = new Route_1.Route(options);
108
- this.routes.push(route);
109
- return route;
110
- }
111
- /**
112
- * Create a domain term for the glossary
113
- */
114
- createTerm(term) {
115
- this.terms.push(term);
116
- return this;
117
- }
118
- /**
119
- * Create a behavioral guideline
120
- */
121
- createGuideline(guideline) {
122
- const guidelineWithId = {
123
- ...guideline,
124
- id: guideline.id || `guideline_${this.guidelines.length}`,
125
- enabled: guideline.enabled !== false, // Default to true
126
- };
127
- this.guidelines.push(guidelineWithId);
128
- return this;
129
- }
130
- /**
131
- * Add a capability
132
- */
133
- createCapability(capability) {
134
- const capabilityWithId = {
135
- ...capability,
136
- id: capability.id || `capability_${this.capabilities.length}`,
137
- };
138
- this.capabilities.push(capabilityWithId);
139
- return this;
140
- }
141
- /**
142
- * Add a domain with its tools/methods
143
- * Automatically tags all ToolRef objects with their domain name for security enforcement
144
- */
145
- addDomain(name, domainObject) {
146
- // Tag all tools in this domain with the domain name for security enforcement
147
- const taggedDomain = { ...domainObject };
148
- for (const key in taggedDomain) {
149
- const value = taggedDomain[key];
150
- // Check if value is a ToolRef (has handler, id, name properties)
151
- if (value &&
152
- typeof value === "object" &&
153
- "handler" in value &&
154
- "id" in value &&
155
- "name" in value) {
156
- // Tag the tool with its domain name
157
- value.domainName = name;
158
- }
159
- }
160
- this.domainRegistry.register(name, taggedDomain);
161
- // Attach to the domain property for easy access
162
- this.domain[name] = taggedDomain;
163
- }
164
- /**
165
- * Update the agent's context
166
- * Triggers the onContextUpdate lifecycle hook if configured
167
- */
168
- async updateContext(updates) {
169
- const previousContext = this.context;
170
- // Merge updates with current context
171
- this.context = {
172
- ...this.context,
173
- ...updates,
174
- };
175
- // Trigger lifecycle hook if configured
176
- if (this.options.hooks?.onContextUpdate && previousContext !== undefined) {
177
- await this.options.hooks.onContextUpdate(this.context, previousContext);
178
- }
179
- }
180
- /**
181
- * Update collected data in session with lifecycle hook support
182
- * Triggers the onDataUpdate lifecycle hook if configured
183
- * @internal
184
- */
185
- async updateData(session, collectedUpdate) {
186
- const previousCollected = { ...session.data };
187
- // Merge new collected data
188
- let newCollected = {
189
- ...session.data,
190
- ...collectedUpdate,
191
- };
192
- // Trigger lifecycle hook if configured
193
- if (this.options.hooks?.onDataUpdate) {
194
- newCollected = (await this.options.hooks.onDataUpdate(newCollected, previousCollected));
195
- }
196
- // Return updated session
197
- return (0, session_1.mergeCollected)(session, newCollected);
198
- }
199
- /**
200
- * Get current context (fetches from provider if configured)
201
- * @internal
202
- */
203
- async getContext() {
204
- // If context provider is configured, use it to fetch fresh context
205
- if (this.options.contextProvider) {
206
- return await this.options.contextProvider();
207
- }
208
- // Otherwise return the stored context
209
- return this.context;
210
- }
211
- /**
212
- * Generate a response based on history and context as a stream
213
- */
214
- async *respondStream(params) {
215
- const { history, contextOverride, signal } = params;
216
- // Get current context (may fetch from provider)
217
- let currentContext = await this.getContext();
218
- // Call beforeRespond hook if configured
219
- if (this.options.hooks?.beforeRespond && currentContext !== undefined) {
220
- currentContext = await this.options.hooks.beforeRespond(currentContext);
221
- // Update stored context with the result from beforeRespond
222
- this.context = currentContext;
223
- }
224
- // Merge context with override
225
- const effectiveContext = {
226
- ...currentContext,
227
- ...contextOverride,
228
- };
229
- // Initialize or get session (use current session if available)
230
- let session = params.session || this.currentSession || (0, session_1.createSession)();
231
- // PHASE 1: TOOL EXECUTION - Execute tools if current step has tool
232
- if (session.currentRoute && session.currentStep) {
233
- const currentRoute = this.routes.find((r) => r.id === session.currentRoute?.id);
234
- if (currentRoute) {
235
- const currentStep = currentRoute.getStep(session.currentStep.id);
236
- if (currentStep) {
237
- const transitions = currentStep.getTransitions();
238
- const toolTransition = transitions.find((t) => t.spec.tool);
239
- if (toolTransition?.spec.tool) {
240
- const toolExecutor = new ToolExecutor_1.ToolExecutor();
241
- // Get allowed domains from current route for security enforcement
242
- const allowedDomains = currentRoute.getDomains();
243
- const result = await toolExecutor.executeTool(toolTransition.spec.tool, effectiveContext, this.updateContext.bind(this), history, session.data, allowedDomains);
244
- // Update context with tool results
245
- if (result.contextUpdate) {
246
- await this.updateContext(result.contextUpdate);
247
- }
248
- // Update collected data with tool results
249
- if (result.collectedUpdate) {
250
- session = await this.updateData(session, result.collectedUpdate);
251
- logger_1.logger.debug(`[Agent] Tool updated collected data:`, result.collectedUpdate);
252
- }
253
- logger_1.logger.debug(`[Agent] Executed tool: ${result.toolName} (success: ${result.success})`);
254
- }
255
- }
256
- }
257
- }
258
- // PHASE 2: ROUTING + STEP SELECTION - Determine which route and step to use (combined)
259
- let selectedRoute;
260
- let responseDirectives;
261
- let selectedStep;
262
- let isRouteComplete = false;
263
- // Check for pending transition from previous route completion
264
- if (session.pendingTransition) {
265
- const targetRoute = this.routes.find((r) => r.id === session.pendingTransition?.targetRouteId);
266
- if (targetRoute) {
267
- logger_1.logger.debug(`[Agent] Auto-transitioning from pending transition to route: ${targetRoute.title}`);
268
- // Clear pending transition and enter new route
269
- session = {
270
- ...session,
271
- pendingTransition: undefined,
272
- };
273
- session = (0, session_1.enterRoute)(session, targetRoute.id, targetRoute.title);
274
- // Merge initial data if available
275
- if (targetRoute.initialData) {
276
- session = (0, session_1.mergeCollected)(session, targetRoute.initialData);
277
- }
278
- selectedRoute = targetRoute;
279
- }
280
- else {
281
- logger_1.logger.warn(`[Agent] Pending transition target route not found: ${session.pendingTransition.targetRouteId}`);
282
- // Clear invalid transition
283
- session = {
284
- ...session,
285
- pendingTransition: undefined,
286
- };
287
- }
288
- }
289
- // If no pending transition or transition handled, do normal routing
290
- if (this.routes.length > 0 && !selectedRoute) {
291
- const orchestration = await this.routingEngine.decideRouteAndStep({
292
- routes: this.routes,
293
- session,
294
- history,
295
- agentMeta: {
296
- name: this.options.name,
297
- goal: this.options.goal,
298
- description: this.options.description,
299
- personality: this.options.personality,
300
- },
301
- provider: this.options.provider,
302
- context: effectiveContext,
303
- signal,
304
- });
305
- selectedRoute = orchestration.selectedRoute;
306
- selectedStep = orchestration.selectedStep;
307
- responseDirectives = orchestration.responseDirectives;
308
- session = orchestration.session;
309
- isRouteComplete = orchestration.isRouteComplete || false;
310
- // Log if route is complete
311
- if (isRouteComplete) {
312
- logger_1.logger.debug(`[Agent] Route complete: all required data collected, END_ROUTE reached`);
313
- }
314
- }
315
- // PHASE 3: DETERMINE NEXT STEP - Use step from combined decision or get initial step
316
- if (selectedRoute && !isRouteComplete) {
317
- let nextStep;
318
- // If we have a selected step from the combined routing decision, use it
319
- if (selectedStep) {
320
- nextStep = selectedStep;
321
- }
322
- else {
323
- // New route or no step selected - get initial step or first valid step
324
- const candidates = this.routingEngine.getCandidateSteps(selectedRoute, undefined, session.data || {});
325
- if (candidates.length > 0) {
326
- nextStep = candidates[0].step;
327
- logger_1.logger.debug(`[Agent] Using first valid step: ${nextStep.id} for new route`);
328
- }
329
- else {
330
- // Fallback to initial step even if it should be skipped
331
- nextStep = selectedRoute.initialStep;
332
- logger_1.logger.warn(`[Agent] No valid steps found, using initial step: ${nextStep.id}`);
333
- }
334
- }
335
- // Update session with next step
336
- session = (0, session_1.enterStep)(session, nextStep.id, nextStep.description);
337
- logger_1.logger.debug(`[Agent] Entered step: ${nextStep.id}`);
338
- // PHASE 4: RESPONSE GENERATION - Stream message using selected route and step
339
- // Get last user message
340
- const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
341
- // Build response schema for this route (with collect fields from step)
342
- const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, nextStep);
343
- // Build response prompt
344
- const responsePrompt = this.responseEngine.buildResponsePrompt(selectedRoute, nextStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), responseDirectives, history, lastUserMessage, {
345
- name: this.options.name,
346
- goal: this.options.goal,
347
- description: this.options.description,
348
- personality: this.options.personality,
349
- });
350
- // Generate message stream using AI provider
351
- const stream = this.options.provider.generateMessageStream({
352
- prompt: responsePrompt,
353
- history,
354
- context: effectiveContext,
355
- signal,
356
- parameters: {
357
- jsonSchema: responseSchema,
358
- schemaName: "response_stream_output",
359
- },
360
- });
361
- // Stream chunks to caller
362
- for await (const chunk of stream) {
363
- const toolCalls = undefined;
364
- // Extract collected data on final chunk
365
- if (chunk.done && chunk.structured && nextStep.collectFields) {
366
- const collectedData = {};
367
- // The structured response includes both base fields and collected extraction fields
368
- const structuredData = chunk.structured;
369
- for (const field of nextStep.collectFields) {
370
- if (field in structuredData) {
371
- collectedData[field] = structuredData[field];
372
- }
373
- }
374
- // Merge collected data into session
375
- if (Object.keys(collectedData).length > 0) {
376
- session = await this.updateData(session, collectedData);
377
- logger_1.logger.debug(`[Agent] Collected data:`, collectedData);
378
- }
379
- }
380
- // Extract any additional data from structured response on final chunk
381
- if (chunk.done &&
382
- chunk.structured &&
383
- typeof chunk.structured === "object" &&
384
- "contextUpdate" in chunk.structured) {
385
- await this.updateContext(chunk.structured
386
- .contextUpdate);
387
- }
388
- // Auto-save session step on final chunk
389
- if (chunk.done &&
390
- this.persistenceManager &&
391
- session.id &&
392
- this.options.persistence?.autoSave !== false) {
393
- await this.persistenceManager.saveSessionState(session.id, session);
394
- logger_1.logger.debug(`[Agent] Auto-saved session step to persistence: ${session.id}`);
395
- }
396
- // Update current session if we have one
397
- if (chunk.done && this.currentSession) {
398
- this.currentSession = session;
399
- }
400
- yield {
401
- delta: chunk.delta,
402
- accumulated: chunk.accumulated,
403
- done: chunk.done,
404
- session, // Return updated session
405
- toolCalls,
406
- isRouteComplete,
407
- };
408
- }
409
- }
410
- else if (isRouteComplete && selectedRoute) {
411
- // Route is complete - generate completion message then check for onComplete transition
412
- const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
413
- // Get endStep spec from route
414
- const endStepSpec = selectedRoute.endStepSpec;
415
- // Create a temporary step for completion message generation using endStep configuration
416
- const completionStep = new Step_1.Step(selectedRoute.id, endStepSpec.instructions ||
417
- "Summarize what was accomplished and confirm completion", endStepSpec.id || constants_1.END_ROUTE_ID, endStepSpec.collect, undefined, endStepSpec.requires, endStepSpec.instructions ||
418
- "Summarize what was accomplished and confirm completion based on the conversation history and collected data");
419
- // Build response schema for completion
420
- const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, completionStep);
421
- // Build completion response prompt
422
- const completionPrompt = this.responseEngine.buildResponsePrompt(selectedRoute, completionStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), undefined, // No directives for completion
423
- history, lastUserMessage, {
424
- name: this.options.name,
425
- goal: this.options.goal,
426
- description: this.options.description,
427
- personality: this.options.personality,
428
- });
429
- // Stream completion message using AI provider
430
- const stream = this.options.provider.generateMessageStream({
431
- prompt: completionPrompt,
432
- history,
433
- context: effectiveContext,
434
- signal,
435
- parameters: {
436
- jsonSchema: responseSchema,
437
- schemaName: "completion_message_stream",
438
- },
439
- });
440
- logger_1.logger.debug(`[Agent] Streaming completion message for route: ${selectedRoute.title}`);
441
- // Check for onComplete transition
442
- const transitionConfig = await selectedRoute.evaluateOnComplete({ data: session.data }, effectiveContext);
443
- if (transitionConfig) {
444
- // Find target route by ID or title
445
- const targetRoute = this.routes.find((r) => r.id === transitionConfig.nextStep ||
446
- r.title === transitionConfig.nextStep);
447
- if (targetRoute) {
448
- // Set pending transition in session
449
- session = {
450
- ...session,
451
- pendingTransition: {
452
- targetRouteId: targetRoute.id,
453
- condition: transitionConfig.condition,
454
- reason: "route_complete",
455
- },
456
- };
457
- logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed with pending transition to: ${targetRoute.title}`);
458
- }
459
- else {
460
- logger_1.logger.warn(`[Agent] Route ${selectedRoute.title} completed but target route not found: ${transitionConfig.nextStep}`);
461
- }
462
- }
463
- // Set step to END_ROUTE marker
464
- session = (0, session_1.enterStep)(session, constants_1.END_ROUTE_ID, "Route completed");
465
- logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed. Entered END_ROUTE step.`);
466
- // Stream completion chunks
467
- for await (const chunk of stream) {
468
- // Update current session if we have one
469
- if (chunk.done && this.currentSession) {
470
- this.currentSession = session;
471
- }
472
- yield {
473
- delta: chunk.delta,
474
- accumulated: chunk.accumulated,
475
- done: chunk.done,
476
- session,
477
- toolCalls: undefined,
478
- isRouteComplete: true,
479
- };
480
- }
481
- }
482
- else {
483
- // Fallback: No routes defined, stream a simple response
484
- const fallbackPrompt = new PromptComposer_1.PromptComposer()
485
- .addAgentMeta({
486
- name: this.options.name,
487
- goal: this.options.goal,
488
- description: this.options.description,
489
- })
490
- .addPersonality(this.options.personality)
491
- .addInteractionHistory(history)
492
- .addGlossary(this.terms)
493
- .addGuidelines(this.guidelines)
494
- .addCapabilities(this.capabilities)
495
- .build();
496
- const stream = this.options.provider.generateMessageStream({
497
- prompt: fallbackPrompt,
498
- history,
499
- context: effectiveContext,
500
- signal,
501
- parameters: {
502
- jsonSchema: {
503
- type: "object",
504
- properties: {
505
- message: { type: "string" },
506
- },
507
- required: ["message"],
508
- additionalProperties: false,
509
- },
510
- schemaName: "fallback_stream_response",
511
- },
512
- });
513
- for await (const chunk of stream) {
514
- // Update current session if we have one
515
- if (chunk.done && this.currentSession) {
516
- this.currentSession = session;
517
- }
518
- yield {
519
- delta: chunk.delta,
520
- accumulated: chunk.accumulated,
521
- done: chunk.done,
522
- session, // Return updated session
523
- toolCalls: undefined,
524
- isRouteComplete: false,
525
- };
526
- }
527
- }
528
- }
529
- /**
530
- * Generate a response based on history and context
531
- */
532
- async respond(params) {
533
- const { history, contextOverride, signal } = params;
534
- // Get current context (may fetch from provider)
535
- let currentContext = await this.getContext();
536
- // Call beforeRespond hook if configured
537
- if (this.options.hooks?.beforeRespond && currentContext !== undefined) {
538
- currentContext = await this.options.hooks.beforeRespond(currentContext);
539
- // Update stored context with the result from beforeRespond
540
- this.context = currentContext;
541
- }
542
- // Merge context with override
543
- const effectiveContext = {
544
- ...currentContext,
545
- ...contextOverride,
546
- };
547
- // Initialize or get session (use current session if available)
548
- let session = params.session || this.currentSession || (0, session_1.createSession)();
549
- // PHASE 1: TOOL EXECUTION - Execute tools if current step has tool
550
- if (session.currentRoute && session.currentStep) {
551
- const currentRoute = this.routes.find((r) => r.id === session.currentRoute?.id);
552
- if (currentRoute) {
553
- const currentStep = currentRoute.getStep(session.currentStep.id);
554
- if (currentStep) {
555
- const transitions = currentStep.getTransitions();
556
- const toolTransition = transitions.find((t) => t.spec.tool);
557
- if (toolTransition?.spec.tool) {
558
- const toolExecutor = new ToolExecutor_1.ToolExecutor();
559
- // Get allowed domains from current route for security enforcement
560
- const allowedDomains = currentRoute.getDomains();
561
- const result = await toolExecutor.executeTool(toolTransition.spec.tool, effectiveContext, this.updateContext.bind(this), history, session.data, allowedDomains);
562
- // Update context with tool results
563
- if (result.contextUpdate) {
564
- await this.updateContext(result.contextUpdate);
565
- }
566
- // Update collected data with tool results
567
- if (result.collectedUpdate) {
568
- session = await this.updateData(session, result.collectedUpdate);
569
- logger_1.logger.debug(`[Agent] Tool updated collected data:`, result.collectedUpdate);
570
- }
571
- logger_1.logger.debug(`[Agent] Executed tool: ${result.toolName} (success: ${result.success})`);
572
- }
573
- }
574
- }
575
- }
576
- // PHASE 2: ROUTING + STEP SELECTION - Determine which route and step to use (combined)
577
- let selectedRoute;
578
- let responseDirectives;
579
- let selectedStep;
580
- let isRouteComplete = false;
581
- // Check for pending transition from previous route completion
582
- if (session.pendingTransition) {
583
- const targetRoute = this.routes.find((r) => r.id === session.pendingTransition?.targetRouteId);
584
- if (targetRoute) {
585
- logger_1.logger.debug(`[Agent] Auto-transitioning from pending transition to route: ${targetRoute.title}`);
586
- // Clear pending transition and enter new route
587
- session = {
588
- ...session,
589
- pendingTransition: undefined,
590
- };
591
- session = (0, session_1.enterRoute)(session, targetRoute.id, targetRoute.title);
592
- // Merge initial data if available
593
- if (targetRoute.initialData) {
594
- session = (0, session_1.mergeCollected)(session, targetRoute.initialData);
595
- }
596
- selectedRoute = targetRoute;
597
- }
598
- else {
599
- logger_1.logger.warn(`[Agent] Pending transition target route not found: ${session.pendingTransition.targetRouteId}`);
600
- // Clear invalid transition
601
- session = {
602
- ...session,
603
- pendingTransition: undefined,
604
- };
605
- }
606
- }
607
- // If no pending transition or transition handled, do normal routing
608
- if (this.routes.length > 0 && !selectedRoute) {
609
- const orchestration = await this.routingEngine.decideRouteAndStep({
610
- routes: this.routes,
611
- session,
612
- history,
613
- agentMeta: {
614
- name: this.options.name,
615
- goal: this.options.goal,
616
- description: this.options.description,
617
- personality: this.options.personality,
618
- },
619
- provider: this.options.provider,
620
- context: effectiveContext,
621
- signal,
622
- });
623
- selectedRoute = orchestration.selectedRoute;
624
- selectedStep = orchestration.selectedStep;
625
- responseDirectives = orchestration.responseDirectives;
626
- session = orchestration.session;
627
- isRouteComplete = orchestration.isRouteComplete || false;
628
- // Log if route is complete
629
- if (isRouteComplete) {
630
- logger_1.logger.debug(`[Agent] Route complete: all required data collected, END_ROUTE reached`);
631
- }
632
- }
633
- // PHASE 3: DETERMINE NEXT STEP - Use step from combined decision or get initial step
634
- let message;
635
- const toolCalls = undefined;
636
- if (selectedRoute && !isRouteComplete) {
637
- let nextStep;
638
- // If we have a selected step from the combined routing decision, use it
639
- if (selectedStep) {
640
- nextStep = selectedStep;
641
- }
642
- else {
643
- // New route or no step selected - get initial step or first valid step
644
- const candidates = this.routingEngine.getCandidateSteps(selectedRoute, undefined, session.data || {});
645
- if (candidates.length > 0) {
646
- nextStep = candidates[0].step;
647
- logger_1.logger.debug(`[Agent] Using first valid step: ${nextStep.id} for new route`);
648
- }
649
- else {
650
- // Fallback to initial step even if it should be skipped
651
- nextStep = selectedRoute.initialStep;
652
- logger_1.logger.warn(`[Agent] No valid steps found, using initial step: ${nextStep.id}`);
653
- }
654
- }
655
- // Update session with next step
656
- session = (0, session_1.enterStep)(session, nextStep.id, nextStep.description);
657
- logger_1.logger.debug(`[Agent] Entered step: ${nextStep.id}`);
658
- // PHASE 4: RESPONSE GENERATION - Generate message using selected route and step
659
- // Get last user message
660
- const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
661
- // Build response schema for this route (with collect fields from step)
662
- const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, nextStep);
663
- // Build response prompt
664
- const responsePrompt = this.responseEngine.buildResponsePrompt(selectedRoute, nextStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), responseDirectives, history, lastUserMessage, {
665
- name: this.options.name,
666
- goal: this.options.goal,
667
- description: this.options.description,
668
- personality: this.options.personality,
669
- });
670
- // Generate message using AI provider
671
- const result = await this.options.provider.generateMessage({
672
- prompt: responsePrompt,
673
- history,
674
- context: effectiveContext,
675
- signal,
676
- parameters: {
677
- jsonSchema: responseSchema,
678
- schemaName: "response_output",
679
- },
680
- });
681
- message = result.structured?.message || result.message;
682
- // Extract collected data from response
683
- if (result.structured && nextStep.collectFields) {
684
- const collectedData = {};
685
- // The structured response includes both base fields and collected extraction fields
686
- const structuredData = result.structured;
687
- for (const field of nextStep.collectFields) {
688
- if (field in structuredData) {
689
- collectedData[field] = structuredData[field];
690
- }
691
- }
692
- // Merge collected data into session
693
- if (Object.keys(collectedData).length > 0) {
694
- session = await this.updateData(session, collectedData);
695
- logger_1.logger.debug(`[Agent] Collected data:`, collectedData);
696
- }
697
- }
698
- // Extract any additional data from structured response
699
- if (result.structured &&
700
- typeof result.structured === "object" &&
701
- "contextUpdate" in result.structured) {
702
- await this.updateContext(result.structured
703
- .contextUpdate);
704
- }
705
- }
706
- else if (isRouteComplete && selectedRoute) {
707
- // Route is complete - generate completion message then check for onComplete transition
708
- const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
709
- // Get endStep spec from route
710
- const endStepSpec = selectedRoute.endStepSpec;
711
- // Create a temporary step for completion message generation using endStep configuration
712
- const completionStep = new Step_1.Step(selectedRoute.id, endStepSpec.instructions ||
713
- "Summarize what was accomplished and confirm completion", endStepSpec.id || constants_1.END_ROUTE_ID, endStepSpec.collect, undefined, endStepSpec.requires, endStepSpec.instructions ||
714
- "Summarize what was accomplished and confirm completion based on the conversation history and collected data");
715
- // Build response schema for completion
716
- const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, completionStep);
717
- // Build completion response prompt
718
- const completionPrompt = this.responseEngine.buildResponsePrompt(selectedRoute, completionStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), undefined, // No directives for completion
719
- history, lastUserMessage, {
720
- name: this.options.name,
721
- goal: this.options.goal,
722
- description: this.options.description,
723
- personality: this.options.personality,
724
- });
725
- // Generate completion message using AI provider
726
- const completionResult = await this.options.provider.generateMessage({
727
- prompt: completionPrompt,
728
- history,
729
- context: effectiveContext,
730
- signal,
731
- parameters: {
732
- jsonSchema: responseSchema,
733
- schemaName: "completion_message",
734
- },
735
- });
736
- message =
737
- completionResult.structured?.message || completionResult.message;
738
- logger_1.logger.debug(`[Agent] Generated completion message for route: ${selectedRoute.title}`);
739
- // Check for onComplete transition
740
- const transitionConfig = await selectedRoute.evaluateOnComplete({ data: session.data }, effectiveContext);
741
- if (transitionConfig) {
742
- // Find target route by ID or title
743
- const targetRoute = this.routes.find((r) => r.id === transitionConfig.nextStep ||
744
- r.title === transitionConfig.nextStep);
745
- if (targetRoute) {
746
- // Set pending transition in session
747
- session = {
748
- ...session,
749
- pendingTransition: {
750
- targetRouteId: targetRoute.id,
751
- condition: transitionConfig.condition,
752
- reason: "route_complete",
753
- },
754
- };
755
- logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed with pending transition to: ${targetRoute.title}`);
756
- }
757
- else {
758
- logger_1.logger.warn(`[Agent] Route ${selectedRoute.title} completed but target route not found: ${transitionConfig.nextStep}`);
759
- }
760
- }
761
- // Set step to END_ROUTE marker
762
- session = (0, session_1.enterStep)(session, constants_1.END_ROUTE_ID, "Route completed");
763
- logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed. Entered END_ROUTE step.`);
764
- }
765
- else {
766
- // Fallback: No routes defined, generate a simple response
767
- const fallbackPrompt = new PromptComposer_1.PromptComposer()
768
- .addAgentMeta({
769
- name: this.options.name,
770
- goal: this.options.goal,
771
- description: this.options.description,
772
- })
773
- .addPersonality(this.options.personality)
774
- .addInteractionHistory(history)
775
- .addGlossary(this.terms)
776
- .addGuidelines(this.guidelines)
777
- .addCapabilities(this.capabilities)
778
- .build();
779
- const result = await this.options.provider.generateMessage({
780
- prompt: fallbackPrompt,
781
- history,
782
- context: effectiveContext,
783
- signal,
784
- parameters: {
785
- jsonSchema: {
786
- type: "object",
787
- properties: {
788
- message: { type: "string" },
789
- },
790
- required: ["message"],
791
- additionalProperties: false,
792
- },
793
- schemaName: "fallback_response",
794
- },
795
- });
796
- message = result.structured?.message || result.message;
797
- }
798
- // Auto-save session step to persistence if configured
799
- if (this.persistenceManager &&
800
- session.id &&
801
- this.options.persistence?.autoSave !== false) {
802
- await this.persistenceManager.saveSessionState(session.id, session);
803
- logger_1.logger.debug(`[Agent] Auto-saved session step to persistence: ${session.id}`);
804
- }
805
- // Update current session if we have one
806
- if (this.currentSession) {
807
- this.currentSession = session;
808
- }
809
- return {
810
- message,
811
- session, // Return updated session with route/step info
812
- toolCalls,
813
- isRouteComplete, // Indicates if the route has reached END_ROUTE with all data collected
814
- };
815
- }
816
- /**
817
- * Get all routes
818
- */
819
- getRoutes() {
820
- return [...this.routes];
821
- }
822
- /**
823
- * Get all terms
824
- */
825
- getTerms() {
826
- return [...this.terms];
827
- }
828
- /**
829
- * Get all guidelines
830
- */
831
- getGuidelines() {
832
- return [...this.guidelines];
833
- }
834
- /**
835
- * Get all capabilities
836
- */
837
- getCapabilities() {
838
- return [...this.capabilities];
839
- }
840
- /**
841
- * Get the domain registry
842
- */
843
- getDomainRegistry() {
844
- return this.domainRegistry;
845
- }
846
- /**
847
- * Get the persistence manager (if configured)
848
- */
849
- getPersistenceManager() {
850
- return this.persistenceManager;
851
- }
852
- /**
853
- * Check if persistence is enabled
854
- */
855
- hasPersistence() {
856
- return this.persistenceManager !== undefined;
857
- }
858
- /**
859
- * Get allowed domains for a specific route
860
- * @param routeId - Route ID to check
861
- * @returns Filtered domains object, or all domains if route has no restrictions
862
- */
863
- getDomainsForRoute(routeId) {
864
- const route = this.routes.find((r) => r.id === routeId);
865
- if (!route) {
866
- // Route not found, return all domains
867
- return this.domainRegistry.all();
868
- }
869
- const allowedDomains = route.getDomains();
870
- return this.domainRegistry.getFiltered(allowedDomains);
871
- }
872
- /**
873
- * Get allowed domains for a specific route by title
874
- * @param routeTitle - Route title to check
875
- * @returns Filtered domains object, or all domains if route has no restrictions
876
- */
877
- getDomainsForRouteByTitle(routeTitle) {
878
- const route = this.routes.find((r) => r.title === routeTitle);
879
- if (!route) {
880
- // Route not found, return all domains
881
- return this.domainRegistry.all();
882
- }
883
- const allowedDomains = route.getDomains();
884
- return this.domainRegistry.getFiltered(allowedDomains);
885
- }
886
- /**
887
- * Set the current session for convenience methods
888
- * @param session - Session step to use for subsequent calls
889
- */
890
- setCurrentSession(session) {
891
- this.currentSession = session;
892
- }
893
- /**
894
- * Get the current session (if set)
895
- */
896
- getCurrentSession() {
897
- return this.currentSession;
898
- }
899
- /**
900
- * Clear the current session
901
- */
902
- clearCurrentSession() {
903
- this.currentSession = undefined;
904
- }
905
- /**
906
- * Get collected data from current session
907
- * @param routeId - Optional route ID to get data for (uses current route if not provided)
908
- * @returns The collected data from the current session
909
- */
910
- getData(routeId) {
911
- if (!this.currentSession) {
912
- return {};
913
- }
914
- if (routeId) {
915
- return (this.currentSession.dataByRoute?.[routeId] ||
916
- {});
917
- }
918
- return this.currentSession.data || {};
919
- }
920
- /**
921
- * Manually transition to a different route
922
- * Sets a pending transition that will be executed on the next respond() call
923
- *
924
- * @param routeIdOrTitle - Route ID or title to transition to
925
- * @param session - Session step to update (uses current session if not provided)
926
- * @param condition - Optional AI-evaluated condition for the transition
927
- * @returns Updated session with pending transition
928
- *
929
- * @example
930
- * // After route completes
931
- * if (response.isRouteComplete && response.session) {
932
- * const updatedSession = agent.nextStepRoute("feedback-collection", response.session);
933
- * // Next respond() call will automatically transition to feedback route
934
- * const nextResponse = await agent.respond({ history, session: updatedSession });
935
- * }
936
- */
937
- nextStepRoute(routeIdOrTitle, session, condition) {
938
- const targetSession = session || this.currentSession;
939
- if (!targetSession) {
940
- throw new Error("No session provided and no current session available. Please provide a session to transition.");
941
- }
942
- // Find target route by ID or title
943
- const targetRoute = this.routes.find((r) => r.id === routeIdOrTitle || r.title === routeIdOrTitle);
944
- if (!targetRoute) {
945
- throw new Error(`Route not found: ${routeIdOrTitle}. Available routes: ${this.routes
946
- .map((r) => r.title)
947
- .join(", ")}`);
948
- }
949
- const updatedSession = {
950
- ...targetSession,
951
- pendingTransition: {
952
- targetRouteId: targetRoute.id,
953
- condition,
954
- reason: "manual",
955
- },
956
- };
957
- // Update current session if using it
958
- if (!session && this.currentSession) {
959
- this.currentSession = updatedSession;
960
- }
961
- logger_1.logger.debug(`[Agent] Set pending manual transition to route: ${targetRoute.title}`);
962
- return updatedSession;
963
- }
964
- }
965
- exports.Agent = Agent;
966
- //# sourceMappingURL=Agent.js.map