@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
@@ -11,9 +11,10 @@ import type {
11
11
  GenerateMessageOutput,
12
12
  GenerateMessageStreamChunk,
13
13
  AgentStructuredResponse,
14
- } from "../types/ai";
15
- import type { StructuredSchema } from "../types/schema";
14
+ StructuredSchema,
15
+ } from "../types";
16
16
  import { withTimeoutAndRetry } from "../utils/retry";
17
+ import { FunctionParameters } from "openai/resources/shared.mjs";
17
18
 
18
19
  const DEFAULT_RETRY_CONFIG = {
19
20
  timeout: 60000,
@@ -281,6 +282,19 @@ export class OpenAIProvider implements AiProvider {
281
282
  params.max_tokens = input.parameters.maxOutputTokens;
282
283
  }
283
284
 
285
+ // Add tools if provided
286
+ if (input.tools && input.tools.length > 0) {
287
+ params.tools = input.tools.map((tool) => ({
288
+ type: "function" as const,
289
+ function: {
290
+ name: tool.name || tool.id,
291
+ description: tool.description,
292
+ parameters: tool.parameters as FunctionParameters, // JSON schema
293
+ },
294
+ }));
295
+ params.tool_choice = "auto";
296
+ }
297
+
284
298
  // Use structured output API if JSON schema is provided
285
299
  if (input.parameters?.jsonSchema) {
286
300
  const response = await this.client.responses.parse({
@@ -327,6 +341,35 @@ export class OpenAIProvider implements AiProvider {
327
341
  throw new Error("No response from OpenAI");
328
342
  }
329
343
 
344
+ let toolCalls: Array<{
345
+ toolName: string;
346
+ arguments: Record<string, unknown>;
347
+ }> = [];
348
+ if (response.choices?.[0]?.message?.tool_calls) {
349
+ toolCalls = response.choices[0].message.tool_calls
350
+ .filter((toolCall) => toolCall.type === "function")
351
+ .map((toolCall) => {
352
+ let toolCallArguments: Record<string, unknown> = {};
353
+ try {
354
+ toolCallArguments = JSON.parse(
355
+ toolCall.function.arguments
356
+ ) as Record<string, unknown>;
357
+ } catch (error) {
358
+ console.warn(
359
+ `[OPENAI] Failed to parse tool call arguments: ${getErrorMessage(
360
+ error
361
+ )}`
362
+ );
363
+ toolCallArguments = {};
364
+ }
365
+ return {
366
+ toolName: toolCall.function.name,
367
+ arguments: toolCallArguments,
368
+ };
369
+ });
370
+ }
371
+ // Extract tool calls from response
372
+
330
373
  return {
331
374
  message,
332
375
  metadata: {
@@ -336,6 +379,10 @@ export class OpenAIProvider implements AiProvider {
336
379
  promptTokens: response.usage?.prompt_tokens,
337
380
  completionTokens: response.usage?.completion_tokens,
338
381
  },
382
+ structured:
383
+ toolCalls.length > 0
384
+ ? ({ message, toolCalls } as AgentStructuredResponse)
385
+ : undefined,
339
386
  };
340
387
  };
341
388
 
@@ -439,6 +486,19 @@ export class OpenAIProvider implements AiProvider {
439
486
  params.max_tokens = input.parameters.maxOutputTokens;
440
487
  }
441
488
 
489
+ // Add tools if provided
490
+ if (input.tools && input.tools.length > 0) {
491
+ params.tools = input.tools.map((tool) => ({
492
+ type: "function" as const,
493
+ function: {
494
+ name: tool.name || tool.id,
495
+ description: tool.description,
496
+ parameters: tool.parameters as FunctionParameters, // JSON schema
497
+ },
498
+ }));
499
+ params.tool_choice = "auto";
500
+ }
501
+
442
502
  // Streaming path does not support responses.parse; if schema present,
443
503
  // request JSON object and parse at the end.
444
504
  if (input.parameters?.jsonSchema) {
@@ -453,11 +513,43 @@ export class OpenAIProvider implements AiProvider {
453
513
  let promptTokens: number | undefined;
454
514
  let completionTokens: number | undefined;
455
515
  let totalTokens: number | undefined;
516
+ const toolCalls: Array<{
517
+ toolName: string;
518
+ arguments: Record<string, unknown>;
519
+ }> = [];
456
520
 
457
521
  for await (const chunk of stream) {
458
522
  currentModel = chunk.model;
459
523
  const delta = chunk.choices[0]?.delta?.content || "";
460
524
 
525
+ // Extract tool calls from delta
526
+ if (chunk.choices[0]?.delta?.tool_calls) {
527
+ for (const toolCall of chunk.choices[0].delta.tool_calls) {
528
+ if (toolCall.function) {
529
+ let toolCallArguments: Record<string, unknown> = {};
530
+ try {
531
+ toolCallArguments = toolCall.function.arguments
532
+ ? (JSON.parse(toolCall.function.arguments) as Record<
533
+ string,
534
+ unknown
535
+ >)
536
+ : {};
537
+ } catch (error) {
538
+ console.warn(
539
+ `[OPENAI] Failed to parse tool call arguments in stream: ${getErrorMessage(
540
+ error
541
+ )}`
542
+ );
543
+ toolCallArguments = {};
544
+ }
545
+ toolCalls.push({
546
+ toolName: toolCall.function.name || "",
547
+ arguments: toolCallArguments,
548
+ });
549
+ }
550
+ }
551
+ }
552
+
461
553
  if (delta) {
462
554
  accumulated += delta;
463
555
  yield {
@@ -504,7 +596,7 @@ export class OpenAIProvider implements AiProvider {
504
596
  promptTokens,
505
597
  completionTokens,
506
598
  },
507
- structured,
599
+ structured: structured ? { ...structured, toolCalls } : undefined,
508
600
  };
509
601
  }
510
602
  }
@@ -5,6 +5,7 @@
5
5
 
6
6
  import OpenAI from "openai";
7
7
  import type { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions";
8
+ import { FunctionParameters } from "openai/resources/shared.mjs";
8
9
 
9
10
  import type {
10
11
  AiProvider,
@@ -12,8 +13,8 @@ import type {
12
13
  GenerateMessageInput,
13
14
  GenerateMessageOutput,
14
15
  GenerateMessageStreamChunk,
15
- } from "../types/ai";
16
- import type { StructuredSchema } from "../types/schema";
16
+ StructuredSchema,
17
+ } from "../types";
17
18
  import { withTimeoutAndRetry } from "../utils/retry";
18
19
 
19
20
  const DEFAULT_RETRY_CONFIG = {
@@ -288,6 +289,19 @@ export class OpenRouterProvider implements AiProvider {
288
289
  params.max_tokens = input.parameters.maxOutputTokens;
289
290
  }
290
291
 
292
+ // Add tools if provided
293
+ if (input.tools && input.tools.length > 0) {
294
+ params.tools = input.tools.map((tool) => ({
295
+ type: "function" as const,
296
+ function: {
297
+ name: tool.name || tool.id,
298
+ description: tool.description,
299
+ parameters: tool.parameters as FunctionParameters, // JSON schema
300
+ },
301
+ }));
302
+ params.tool_choice = "auto";
303
+ }
304
+
291
305
  // Use structured output API if JSON schema is provided
292
306
  if (input.parameters?.jsonSchema) {
293
307
  const response = await this.client.responses.parse({
@@ -336,6 +350,34 @@ export class OpenRouterProvider implements AiProvider {
336
350
  throw new Error("No response from OpenRouter");
337
351
  }
338
352
 
353
+ let toolCalls: Array<{
354
+ toolName: string;
355
+ arguments: Record<string, unknown>;
356
+ }> = [];
357
+ if (response.choices?.[0]?.message?.tool_calls) {
358
+ toolCalls = response.choices[0].message.tool_calls
359
+ .filter((toolCall) => toolCall.type === "function")
360
+ .map((toolCall) => {
361
+ let toolCallArguments: Record<string, unknown> = {};
362
+ try {
363
+ toolCallArguments = JSON.parse(
364
+ toolCall.function.arguments
365
+ ) as Record<string, unknown>;
366
+ } catch (error) {
367
+ console.warn(
368
+ `[OPENROUTER] Failed to parse tool call arguments: ${getErrorMessage(
369
+ error
370
+ )}`
371
+ );
372
+ toolCallArguments = {};
373
+ }
374
+ return {
375
+ toolName: toolCall.function.name,
376
+ arguments: toolCallArguments,
377
+ };
378
+ });
379
+ }
380
+
339
381
  return {
340
382
  message,
341
383
  metadata: {
@@ -345,6 +387,10 @@ export class OpenRouterProvider implements AiProvider {
345
387
  promptTokens: response.usage?.prompt_tokens,
346
388
  completionTokens: response.usage?.completion_tokens,
347
389
  },
390
+ structured:
391
+ toolCalls.length > 0
392
+ ? ({ message, toolCalls } as AgentStructuredResponse)
393
+ : undefined,
348
394
  };
349
395
  };
350
396
 
@@ -442,6 +488,19 @@ export class OpenRouterProvider implements AiProvider {
442
488
  params.max_tokens = input.parameters.maxOutputTokens;
443
489
  }
444
490
 
491
+ // Add tools if provided
492
+ if (input.tools && input.tools.length > 0) {
493
+ params.tools = input.tools.map((tool) => ({
494
+ type: "function" as const,
495
+ function: {
496
+ name: tool.name || tool.id,
497
+ description: tool.description,
498
+ parameters: tool.parameters as FunctionParameters, // JSON schema
499
+ },
500
+ }));
501
+ params.tool_choice = "auto";
502
+ }
503
+
445
504
  // Streaming path does not support responses.parse; if schema present,
446
505
  // request JSON object and parse at the end.
447
506
  if (input.parameters?.jsonSchema) {
@@ -456,11 +515,43 @@ export class OpenRouterProvider implements AiProvider {
456
515
  let promptTokens: number | undefined;
457
516
  let completionTokens: number | undefined;
458
517
  let totalTokens: number | undefined;
518
+ const toolCalls: Array<{
519
+ toolName: string;
520
+ arguments: Record<string, unknown>;
521
+ }> = [];
459
522
 
460
523
  for await (const chunk of stream) {
461
524
  currentModel = chunk.model;
462
525
  const delta = chunk.choices[0]?.delta?.content || "";
463
526
 
527
+ // Extract tool calls from delta
528
+ if (chunk.choices[0]?.delta?.tool_calls) {
529
+ for (const toolCall of chunk.choices[0].delta.tool_calls) {
530
+ if (toolCall.function) {
531
+ let toolCallArguments: Record<string, unknown> = {};
532
+ try {
533
+ toolCallArguments = toolCall.function.arguments
534
+ ? (JSON.parse(toolCall.function.arguments) as Record<
535
+ string,
536
+ unknown
537
+ >)
538
+ : {};
539
+ } catch (error) {
540
+ console.warn(
541
+ `[OPENROUTER] Failed to parse tool call arguments in stream: ${getErrorMessage(
542
+ error
543
+ )}`
544
+ );
545
+ toolCallArguments = {};
546
+ }
547
+ toolCalls.push({
548
+ toolName: toolCall.function.name || "",
549
+ arguments: toolCallArguments,
550
+ });
551
+ }
552
+ }
553
+ }
554
+
464
555
  if (delta) {
465
556
  accumulated += delta;
466
557
  yield {
@@ -495,6 +586,15 @@ export class OpenRouterProvider implements AiProvider {
495
586
  }
496
587
  }
497
588
 
589
+ // If tools were used, include them in structured response
590
+ if (toolCalls.length > 0) {
591
+ structured = {
592
+ message: accumulated,
593
+ toolCalls,
594
+ ...structured,
595
+ } as TStructured;
596
+ }
597
+
498
598
  // Yield final chunk
499
599
  yield {
500
600
  delta: "",
@@ -2,11 +2,13 @@
2
2
  * Agent-related type definitions
3
3
  */
4
4
 
5
- import type { AiProvider } from "./ai";
6
- import type { ToolRef } from "./tool";
5
+ import type { AgentStructuredResponse, AiProvider } from "./ai";
6
+ import type { Tool } from "./tool";
7
7
  import type { RouteOptions } from "./route";
8
8
  import type { PersistenceConfig } from "./persistence";
9
9
  import type { SessionState } from "./session";
10
+ import type { StructuredSchema } from "./schema";
11
+ import { Template } from "./template";
10
12
 
11
13
  /**
12
14
  * Composition mode determines how the agent processes and structures responses
@@ -25,7 +27,7 @@ export enum CompositionMode {
25
27
  /**
26
28
  * Context lifecycle hooks for managing step persistence
27
29
  */
28
- export interface ContextLifecycleHooks<TContext = unknown> {
30
+ export interface ContextLifecycleHooks<TContext = unknown, TData = unknown> {
29
31
  /**
30
32
  * Called before respond() to get fresh context
31
33
  * Useful for loading context from a database or cache
@@ -46,13 +48,12 @@ export interface ContextLifecycleHooks<TContext = unknown> {
46
48
  * Useful for validation, enrichment, or persistence of collected data
47
49
  * Return modified collected data or the same data to keep it unchanged
48
50
  *
49
- * Note: This hook works with ANY route's collected data (since an agent can have
50
- * multiple routes with different extraction schemas). Use type guards or runtime
51
- * checks if you need type-specific logic.
51
+ * Note: This hook now works with agent-level data collection (TData type)
52
52
  */
53
-
54
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
- onDataUpdate?: (data: any, previousCollected: any) => any;
53
+ onDataUpdate?: (
54
+ data: Partial<TData>,
55
+ previousCollected: Partial<TData>
56
+ ) => Partial<TData> | Promise<Partial<TData>>;
56
57
  }
57
58
 
58
59
  /**
@@ -66,95 +67,129 @@ export type ContextProvider<TContext = unknown> = () =>
66
67
  /**
67
68
  * Options for creating an Agent
68
69
  */
69
- export interface AgentOptions<TContext = unknown> {
70
+ export interface AgentOptions<TContext = unknown, TData = unknown> {
70
71
  /** Display name of the agent */
71
72
  name: string;
72
73
  /** Detailed description of the agent's purpose and personality */
73
74
  description?: string;
74
75
  /** The agent's primary goal or objective */
75
76
  goal?: string;
76
- /** Optional personality/tone instructions used in prompts */
77
- personality?: string;
77
+ /** Optional personality/tone prompt used in prompts */
78
+ personality?: Template<TContext>;
79
+ /** Optional identity prompt defining the agent's self-concept and role */
80
+ identity?: Template<TContext>;
78
81
  /** Enable debug logging */
79
82
  debug?: boolean;
80
83
  /** Default context data available to the agent */
81
84
  context?: TContext;
82
85
  /** Optional current session for convenience methods */
83
86
  session?: SessionState;
87
+ /** Optional sessionId to load or create - managed by SessionManager */
88
+ sessionId?: string;
84
89
  /** Context provider function for always-fresh context (alternative to static context) */
85
90
  contextProvider?: ContextProvider<TContext>;
86
91
  /** Lifecycle hooks for context management */
87
- hooks?: ContextLifecycleHooks<TContext>;
92
+ hooks?: ContextLifecycleHooks<TContext, TData>;
88
93
  /** AI provider strategy for generating responses */
89
94
  provider: AiProvider;
90
95
  /** Composition mode for response generation */
91
96
  compositionMode?: CompositionMode;
92
97
  /** Initial terms for domain glossary */
93
- terms?: Term[];
98
+ terms?: Term<TContext, TData>[];
94
99
  /** Initial guidelines for agent behavior */
95
- guidelines?: Guideline[];
96
- /** Initial capabilities */
97
- capabilities?: Capability[];
100
+ guidelines?: Guideline<TContext, TData>[];
101
+ /** Global tools available to all routes */
102
+ tools?: Tool<TContext, TData, unknown[], unknown>[];
98
103
  /** Initial routes (will be instantiated as Route objects) */
99
- routes?: RouteOptions<unknown>[];
104
+ routes?: RouteOptions<TContext, TData>[];
100
105
  /** Optional persistence configuration for auto-saving sessions and messages */
101
- persistence?: PersistenceConfig;
106
+ persistence?: PersistenceConfig<TData>;
107
+ /** Knowledge base containing any JSON structure the AI should know */
108
+ knowledgeBase?: Record<string, unknown>;
109
+ /** Agent-level data schema defining the complete data structure for collection */
110
+ schema?: StructuredSchema;
111
+ /** Initial data to pre-populate when creating the agent */
112
+ initialData?: Partial<TData>;
102
113
  }
103
114
 
104
115
  /**
105
116
  * A term in the domain glossary
106
117
  */
107
- export interface Term {
118
+ export interface Term<TContext = unknown, TData = unknown> {
108
119
  /** Name of the term */
109
- name: string;
120
+ name: Template<TContext, TData>;
110
121
  /** Description/definition of the term */
111
- description: string;
122
+ description: Template<TContext, TData>;
112
123
  /** Alternative names or synonyms */
113
- synonyms?: string[];
124
+ synonyms?: Template<TContext, TData>[];
114
125
  }
115
126
 
116
127
  /**
117
128
  * A behavioral guideline for the agent
118
129
  */
119
- export interface Guideline {
130
+ export interface Guideline<TContext = unknown, TData = unknown> {
120
131
  /** Unique identifier */
121
132
  id?: string;
122
133
  /** Condition that triggers this guideline (optional for always-active guidelines) */
123
- condition?: string;
134
+ condition?: Template<TContext, TData>;
124
135
  /** Action the agent should take when the condition is met */
125
- action: string;
136
+ action: Template<TContext, TData>;
126
137
  /** Whether this guideline is currently enabled */
127
138
  enabled?: boolean;
128
139
  /** Tags for organizing and filtering guidelines */
129
140
  tags?: string[];
130
- /** Tools available when following this guideline */
131
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
- tools?: ToolRef<any, any[], any>[];
133
141
  /** Additional metadata */
134
142
  metadata?: Record<string, unknown>;
135
143
  }
136
144
 
137
- /**
138
- * A capability the agent can perform
139
- */
140
- export interface Capability {
141
- /** Unique identifier */
142
- id?: string;
143
- /** Title of the capability */
144
- title: string;
145
- /** Description of what the capability does */
146
- description: string;
147
- /** Tools used by this capability */
148
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
- tools?: ToolRef<any, any[], any>[];
150
- }
151
-
152
145
  /**
153
146
  * Guideline match with rationale
154
147
  */
155
- export interface GuidelineMatch {
148
+ export interface GuidelineMatch<TContext = unknown, TData = unknown> {
156
149
  /** The matched guideline */
157
- guideline: Guideline;
150
+ guideline: Guideline<TContext, TData>;
158
151
  /** Explanation of why this guideline was matched */
159
152
  rationale?: string;
160
153
  }
154
+
155
+ export interface AgentResponse<TData = Record<string, unknown>> {
156
+ message: string;
157
+ session?: SessionState<TData>;
158
+ toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
159
+ isRouteComplete?: boolean;
160
+ }
161
+
162
+ export interface AgentResponseStreamChunk<TData = Record<string, unknown>> {
163
+ delta: string;
164
+ accumulated: string;
165
+ done: boolean;
166
+ session?: SessionState<TData>;
167
+ toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
168
+ isRouteComplete?: boolean;
169
+ metadata?: {
170
+ model?: string;
171
+ tokensUsed?: number;
172
+ finishReason?: string;
173
+ [key: string]: unknown;
174
+ };
175
+ structured?: AgentStructuredResponse;
176
+ }
177
+
178
+ /**
179
+ * Validation error for data validation
180
+ */
181
+ export interface ValidationError {
182
+ field: string;
183
+ value: unknown;
184
+ message: string;
185
+ schemaPath: string;
186
+ }
187
+
188
+ /**
189
+ * Result of data validation
190
+ */
191
+ export interface ValidationResult {
192
+ valid: boolean;
193
+ errors: ValidationError[];
194
+ warnings: ValidationError[];
195
+ }
package/src/types/ai.ts CHANGED
@@ -39,6 +39,13 @@ export interface GenerateMessageInput<TContext = unknown> {
39
39
  history: Event[];
40
40
  /** Context data */
41
41
  context: TContext;
42
+ /** Tools available for AI to call during this interaction */
43
+ tools?: Array<{
44
+ id: string;
45
+ name?: string;
46
+ description?: string;
47
+ parameters?: unknown;
48
+ }>;
42
49
  /** Additional generation parameters */
43
50
  parameters?: {
44
51
  /** Maximum output tokens to generate */
@@ -2,6 +2,24 @@
2
2
  * Event history and interaction types
3
3
  */
4
4
 
5
+ /**
6
+ * Message source enum - defines valid sources for messages and events
7
+ */
8
+ export enum MessageRole {
9
+ /** Message/event from user/customer */
10
+ USER = "user",
11
+ /** Conversational message from AI assistant */
12
+ ASSISTANT = "assistant",
13
+ /** Tool execution/action by AI agent */
14
+ AGENT = "agent",
15
+ /** System message/event */
16
+ SYSTEM = "system",
17
+ }
18
+
19
+ export type MessageRoleType = MessageRole;
20
+
21
+ import type { SessionState } from "./session";
22
+
5
23
  /**
6
24
  * Types of events in the interaction history
7
25
  */
@@ -14,23 +32,7 @@ export enum EventKind {
14
32
  STATUS = "status",
15
33
  }
16
34
 
17
- /**
18
- * Source of an event
19
- */
20
- export enum EventSource {
21
- /** Event originated from the customer/user */
22
- CUSTOMER = "customer",
23
- /** Event from customer UI application */
24
- CUSTOMER_UI = "customer_ui",
25
- /** Event from human service agent */
26
- HUMAN_AGENT = "human_agent",
27
- /** Human agent acting on behalf of AI agent */
28
- HUMAN_AGENT_ON_BEHALF_OF_AI_AGENT = "human_agent_on_behalf_of_ai_agent",
29
- /** Event generated by AI agent */
30
- AI_AGENT = "ai_agent",
31
- /** System-generated event */
32
- SYSTEM = "system",
33
- }
35
+ export type EventKindType = EventKind;
34
36
 
35
37
  /**
36
38
  * Participant in a conversation
@@ -42,6 +44,71 @@ export interface Participant {
42
44
  id?: string;
43
45
  }
44
46
 
47
+ /**
48
+ * Role types for simplified history format
49
+ */
50
+ export type Role = "user" | "assistant" | "tool" | "system";
51
+
52
+ export type UserHistoryItem = {
53
+ role: "user";
54
+ content: string;
55
+ name?: string;
56
+ };
57
+
58
+ export type AssistantHistoryItem = {
59
+ role: "assistant";
60
+ content: string | null;
61
+ tool_calls?: Array<{
62
+ id: string;
63
+ name: string;
64
+ arguments: Record<string, unknown>;
65
+ }>;
66
+ };
67
+ export type ToolHistoryItem = {
68
+ role: "tool";
69
+ tool_call_id: string;
70
+ name: string;
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ content: any;
73
+ };
74
+
75
+ export type SystemHistoryItem = {
76
+ role: "system";
77
+ content: string;
78
+ };
79
+
80
+ /**
81
+ * Simplified history item for developer-friendly API
82
+ */
83
+ export type HistoryItem =
84
+ | UserHistoryItem
85
+ | AssistantHistoryItem
86
+ | ToolHistoryItem
87
+ | SystemHistoryItem;
88
+
89
+ /**
90
+ * Simplified history array type
91
+ */
92
+ export type History = HistoryItem[];
93
+
94
+ /**
95
+ * Simple JSON format for history messages (developer-friendly)
96
+ */
97
+ export interface HistoryMessage<TData = unknown> {
98
+ /** Role of the message sender */
99
+ role: MessageRole;
100
+ /** Message content */
101
+ content: string;
102
+ /** Optional participant name */
103
+ name?: string;
104
+ /** Optional timestamp (ISO string) */
105
+ timestamp?: string;
106
+ /** Optional session state */
107
+ session?: SessionState<TData>;
108
+ /** Optional additional metadata */
109
+ metadata?: Record<string, unknown>;
110
+ }
111
+
45
112
  /**
46
113
  * Data for a message event
47
114
  */
@@ -54,6 +121,12 @@ export interface MessageEventData {
54
121
  flagged?: boolean;
55
122
  /** Tags/reasons if flagged */
56
123
  tags?: string[];
124
+ /** Tool calls made by the assistant */
125
+ toolCalls?: Array<{
126
+ id: string;
127
+ name: string;
128
+ arguments: Record<string, unknown>;
129
+ }>;
57
130
  /** Session metadata attached to this message */
58
131
  session?: {
59
132
  routeId?: string;
@@ -113,7 +186,7 @@ export interface Event<
113
186
  /** Type of event */
114
187
  kind: EventKind;
115
188
  /** Source of the event */
116
- source: EventSource;
189
+ source: MessageRole;
117
190
  /** Event-specific data */
118
191
  data: TData;
119
192
  /** Timestamp (ISO string) */