@falai/agent 0.8.0 → 0.9.0-alpha-1

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 (654) hide show
  1. package/README.md +306 -133
  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/{core → cjs/src/core}/Agent.d.ts +67 -69
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -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/cjs/src/core/PersistenceManager.d.ts +98 -0
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
  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 +31 -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 +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -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 +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  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 +54 -35
  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 +39 -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/{types → src/types}/route.d.ts +85 -31
  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 +70 -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/cjs/{types → src/types}/tool.d.ts +6 -8
  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 +36 -13
  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/{cjs → src}/core/Agent.d.ts +67 -69
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -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/src/core/PersistenceManager.d.ts +98 -0
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +56 -26
  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 +31 -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 +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -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 +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -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 +54 -35
  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 +39 -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/{types → src/types}/route.d.ts +85 -31
  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 +70 -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/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  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 +34 -13
  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} +902 -263
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -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 +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  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 +1102 -487
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +87 -57
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  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 +50 -38
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  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 +229 -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.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts +0 -96
  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.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  457. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  458. package/dist/cjs/core/Step.d.ts +0 -72
  459. package/dist/cjs/core/Step.d.ts.map +0 -1
  460. package/dist/cjs/core/Step.js +0 -150
  461. package/dist/cjs/core/Step.js.map +0 -1
  462. package/dist/cjs/core/Tool.d.ts +0 -39
  463. package/dist/cjs/core/Tool.d.ts.map +0 -1
  464. package/dist/cjs/core/Tool.js +0 -34
  465. package/dist/cjs/core/Tool.js.map +0 -1
  466. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  467. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  468. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  469. package/dist/cjs/core/Transition.d.ts +0 -32
  470. package/dist/cjs/core/Transition.d.ts.map +0 -1
  471. package/dist/cjs/core/Transition.js +0 -89
  472. package/dist/cjs/core/Transition.js.map +0 -1
  473. package/dist/cjs/index.d.ts.map +0 -1
  474. package/dist/cjs/index.js.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  476. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  477. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  479. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  480. package/dist/cjs/providers/index.js.map +0 -1
  481. package/dist/cjs/types/agent.d.ts.map +0 -1
  482. package/dist/cjs/types/agent.js.map +0 -1
  483. package/dist/cjs/types/ai.d.ts.map +0 -1
  484. package/dist/cjs/types/history.d.ts.map +0 -1
  485. package/dist/cjs/types/history.js +0 -37
  486. package/dist/cjs/types/history.js.map +0 -1
  487. package/dist/cjs/types/index.d.ts +0 -12
  488. package/dist/cjs/types/index.d.ts.map +0 -1
  489. package/dist/cjs/types/index.js +0 -12
  490. package/dist/cjs/types/index.js.map +0 -1
  491. package/dist/cjs/types/persistence.d.ts.map +0 -1
  492. package/dist/cjs/types/persistence.js.map +0 -1
  493. package/dist/cjs/types/route.d.ts.map +0 -1
  494. package/dist/cjs/types/session.d.ts +0 -104
  495. package/dist/cjs/types/session.d.ts.map +0 -1
  496. package/dist/cjs/types/session.js.map +0 -1
  497. package/dist/cjs/utils/event.js.map +0 -1
  498. package/dist/cjs/utils/id.js.map +0 -1
  499. package/dist/cjs/utils/logger.js.map +0 -1
  500. package/dist/cjs/utils/retry.js.map +0 -1
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js.map +0 -1
  503. package/dist/core/Agent.d.ts.map +0 -1
  504. package/dist/core/Agent.js +0 -962
  505. package/dist/core/Agent.js.map +0 -1
  506. package/dist/core/DomainRegistry.d.ts +0 -36
  507. package/dist/core/DomainRegistry.d.ts.map +0 -1
  508. package/dist/core/DomainRegistry.js +0 -68
  509. package/dist/core/DomainRegistry.js.map +0 -1
  510. package/dist/core/Events.d.ts +0 -41
  511. package/dist/core/Events.d.ts.map +0 -1
  512. package/dist/core/Events.js +0 -94
  513. package/dist/core/Events.js.map +0 -1
  514. package/dist/core/PersistenceManager.d.ts +0 -96
  515. package/dist/core/PersistenceManager.d.ts.map +0 -1
  516. package/dist/core/PersistenceManager.js.map +0 -1
  517. package/dist/core/PromptComposer.d.ts +0 -24
  518. package/dist/core/PromptComposer.d.ts.map +0 -1
  519. package/dist/core/PromptComposer.js +0 -123
  520. package/dist/core/PromptComposer.js.map +0 -1
  521. package/dist/core/ResponseEngine.d.ts +0 -14
  522. package/dist/core/ResponseEngine.d.ts.map +0 -1
  523. package/dist/core/ResponseEngine.js +0 -52
  524. package/dist/core/ResponseEngine.js.map +0 -1
  525. package/dist/core/Route.d.ts +0 -90
  526. package/dist/core/Route.d.ts.map +0 -1
  527. package/dist/core/Route.js.map +0 -1
  528. package/dist/core/RoutingEngine.d.ts.map +0 -1
  529. package/dist/core/RoutingEngine.js.map +0 -1
  530. package/dist/core/Step.d.ts +0 -72
  531. package/dist/core/Step.d.ts.map +0 -1
  532. package/dist/core/Step.js +0 -146
  533. package/dist/core/Step.js.map +0 -1
  534. package/dist/core/Tool.d.ts +0 -39
  535. package/dist/core/Tool.d.ts.map +0 -1
  536. package/dist/core/Tool.js +0 -31
  537. package/dist/core/Tool.js.map +0 -1
  538. package/dist/core/ToolExecutor.d.ts +0 -29
  539. package/dist/core/ToolExecutor.d.ts.map +0 -1
  540. package/dist/core/ToolExecutor.js +0 -69
  541. package/dist/core/ToolExecutor.js.map +0 -1
  542. package/dist/core/Transition.d.ts +0 -32
  543. package/dist/core/Transition.d.ts.map +0 -1
  544. package/dist/core/Transition.js +0 -85
  545. package/dist/core/Transition.js.map +0 -1
  546. package/dist/index.d.ts.map +0 -1
  547. package/dist/index.js.map +0 -1
  548. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  549. package/dist/providers/AnthropicProvider.js.map +0 -1
  550. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  551. package/dist/providers/GeminiProvider.js.map +0 -1
  552. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenAIProvider.js.map +0 -1
  554. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  555. package/dist/providers/OpenRouterProvider.js.map +0 -1
  556. package/dist/providers/index.d.ts.map +0 -1
  557. package/dist/providers/index.js.map +0 -1
  558. package/dist/types/agent.d.ts.map +0 -1
  559. package/dist/types/agent.js.map +0 -1
  560. package/dist/types/ai.d.ts.map +0 -1
  561. package/dist/types/ai.js.map +0 -1
  562. package/dist/types/history.d.ts.map +0 -1
  563. package/dist/types/history.js +0 -34
  564. package/dist/types/history.js.map +0 -1
  565. package/dist/types/index.d.ts +0 -12
  566. package/dist/types/index.d.ts.map +0 -1
  567. package/dist/types/index.js +0 -6
  568. package/dist/types/index.js.map +0 -1
  569. package/dist/types/persistence.d.ts.map +0 -1
  570. package/dist/types/persistence.js.map +0 -1
  571. package/dist/types/route.d.ts.map +0 -1
  572. package/dist/types/routing.d.ts.map +0 -1
  573. package/dist/types/schema.d.ts.map +0 -1
  574. package/dist/types/session.d.ts +0 -104
  575. package/dist/types/session.d.ts.map +0 -1
  576. package/dist/types/session.js.map +0 -1
  577. package/dist/types/tool.d.ts.map +0 -1
  578. package/dist/utils/event.d.ts.map +0 -1
  579. package/dist/utils/event.js.map +0 -1
  580. package/dist/utils/id.d.ts.map +0 -1
  581. package/dist/utils/id.js.map +0 -1
  582. package/dist/utils/logger.d.ts.map +0 -1
  583. package/dist/utils/logger.js.map +0 -1
  584. package/dist/utils/retry.d.ts.map +0 -1
  585. package/dist/utils/retry.js.map +0 -1
  586. package/docs/AGENT.md +0 -535
  587. package/docs/DOCS.md +0 -263
  588. package/docs/DOMAINS.md +0 -735
  589. package/docs/EXAMPLES.md +0 -467
  590. package/docs/GETTING_STARTED.md +0 -424
  591. package/docs/PERSISTENCE.md +0 -815
  592. package/docs/PROVIDERS.md +0 -612
  593. package/docs/ROUTES.md +0 -1085
  594. package/docs/STEPS.md +0 -883
  595. package/examples/business-onboarding.ts +0 -791
  596. package/examples/custom-database-persistence.ts +0 -574
  597. package/examples/domain-scoping.ts +0 -366
  598. package/examples/travel-agent.ts +0 -584
  599. package/src/core/DomainRegistry.ts +0 -80
  600. package/src/core/Tool.ts +0 -112
  601. package/src/core/Transition.ts +0 -115
  602. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  603. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  604. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  605. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  606. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  607. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  608. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  609. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  610. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  611. /package/dist/cjs/{types → src/types}/route.js +0 -0
  612. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  614. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  615. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  616. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  621. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  622. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  623. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  624. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  625. /package/dist/{adapters → src/adapters}/index.js +0 -0
  626. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  627. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  628. /package/dist/{constants → src/constants}/index.js +0 -0
  629. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  630. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  631. /package/dist/{providers → src/providers}/index.js +0 -0
  632. /package/dist/{types → src/types}/agent.js +0 -0
  633. /package/dist/{types → src/types}/ai.js +0 -0
  634. /package/dist/{types → src/types}/persistence.js +0 -0
  635. /package/dist/{types → src/types}/route.js +0 -0
  636. /package/dist/{types → src/types}/routing.d.ts +0 -0
  637. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  638. /package/dist/{types → src/types}/routing.js +0 -0
  639. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  640. /package/dist/{types → src/types}/schema.d.ts +0 -0
  641. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  642. /package/dist/{types → src/types}/schema.js +0 -0
  643. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  644. /package/dist/{types → src/types}/tool.js +0 -0
  645. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  646. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  647. /package/dist/{utils → src/utils}/id.js +0 -0
  648. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  649. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  650. /package/dist/{utils → src/utils}/logger.js +0 -0
  651. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  652. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  653. /package/dist/{utils → src/utils}/retry.js +0 -0
  654. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -3,29 +3,25 @@
3
3
  * Support for optional database persistence (Prisma, etc.)
4
4
  */
5
5
 
6
- import type { Event } from "./history";
6
+ import type { Event, MessageRole } from "./history";
7
+ import type { SessionState } from "./session";
7
8
 
8
9
  /**
9
10
  * Session status enum
10
11
  */
11
12
  export type SessionStatus = "active" | "completed" | "abandoned";
12
13
 
13
- /**
14
- * Message role enum
15
- */
16
- export type MessageRole = "user" | "agent" | "system";
17
-
18
14
  /**
19
15
  * Base session data structure
20
16
  */
21
- export interface SessionData {
17
+ export interface SessionData<TData = Record<string, unknown>> {
22
18
  id: string;
23
19
  userId?: string;
24
20
  agentName?: string;
25
21
  status: SessionStatus;
26
22
  currentRoute?: string;
27
23
  currentStep?: string;
28
- collectedData?: Record<string, unknown>;
24
+ collectedData?: CollectedStateData<TData>;
29
25
  messageCount?: number;
30
26
  lastMessageAt?: Date;
31
27
  completedAt?: Date;
@@ -33,6 +29,30 @@ export interface SessionData {
33
29
  updatedAt: Date;
34
30
  }
35
31
 
32
+ /**
33
+ * Data for creating a new session (subset of SessionData)
34
+ */
35
+ export type CreateSessionData<TData = Record<string, unknown>> = Omit<
36
+ SessionData<TData>,
37
+ "id" | "createdAt" | "updatedAt"
38
+ > & {
39
+ id?: string;
40
+ };
41
+
42
+ /**
43
+ * Structure for data collected during a session that needs to be persisted.
44
+ * This is a subset of SessionState, stored within SessionData.
45
+ */
46
+ export interface CollectedStateData<TData = Record<string, unknown>> {
47
+ data: Partial<TData>;
48
+ dataByRoute: Record<string, Partial<TData>>;
49
+ routeHistory: SessionState<TData>["routeHistory"];
50
+ history?: SessionState<TData>["history"];
51
+ currentRouteTitle?: string;
52
+ currentStepDescription?: string;
53
+ metadata: SessionState<TData>["metadata"];
54
+ }
55
+
36
56
  /**
37
57
  * Base message data structure
38
58
  */
@@ -53,36 +73,34 @@ export interface MessageData {
53
73
  * Repository interface for sessions
54
74
  * Implement this interface with your database of choice
55
75
  */
56
- export interface SessionRepository {
76
+ export interface SessionRepository<TData = Record<string, unknown>> {
57
77
  /**
58
78
  * Create a new session
59
79
  */
60
- create(
61
- data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
62
- ): Promise<SessionData>;
80
+ create(data: CreateSessionData<TData>): Promise<SessionData<TData>>;
63
81
 
64
82
  /**
65
83
  * Find session by ID
66
84
  */
67
- findById(id: string): Promise<SessionData | null>;
85
+ findById(id: string): Promise<SessionData<TData> | null>;
68
86
 
69
87
  /**
70
88
  * Find active session by user ID
71
89
  */
72
- findActiveByUserId(userId: string): Promise<SessionData | null>;
90
+ findActiveByUserId(userId: string): Promise<SessionData<TData> | null>;
73
91
 
74
92
  /**
75
93
  * Find all sessions for a user
76
94
  */
77
- findByUserId(userId: string, limit?: number): Promise<SessionData[]>;
95
+ findByUserId(userId: string, limit?: number): Promise<SessionData<TData>[]>;
78
96
 
79
97
  /**
80
98
  * Update session
81
99
  */
82
100
  update(
83
101
  id: string,
84
- data: Partial<Omit<SessionData, "id" | "createdAt">>
85
- ): Promise<SessionData | null>;
102
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
103
+ ): Promise<SessionData<TData> | null>;
86
104
 
87
105
  /**
88
106
  * Update session status
@@ -91,15 +109,15 @@ export interface SessionRepository {
91
109
  id: string,
92
110
  status: SessionStatus,
93
111
  completedAt?: Date
94
- ): Promise<SessionData | null>;
112
+ ): Promise<SessionData<TData> | null>;
95
113
 
96
114
  /**
97
115
  * Update collected data
98
116
  */
99
117
  updateCollectedData(
100
118
  id: string,
101
- collectedData: Record<string, unknown>
102
- ): Promise<SessionData | null>;
119
+ collectedData: CollectedStateData<TData>
120
+ ): Promise<SessionData<TData> | null>;
103
121
 
104
122
  /**
105
123
  * Update current route and step
@@ -108,12 +126,12 @@ export interface SessionRepository {
108
126
  id: string,
109
127
  route?: string,
110
128
  step?: string
111
- ): Promise<SessionData | null>;
129
+ ): Promise<SessionData<TData> | null>;
112
130
 
113
131
  /**
114
132
  * Increment message count
115
133
  */
116
- incrementMessageCount(id: string): Promise<SessionData | null>;
134
+ incrementMessageCount(id: string): Promise<SessionData<TData> | null>;
117
135
 
118
136
  /**
119
137
  * Delete session
@@ -166,11 +184,11 @@ export interface MessageRepository {
166
184
  * Persistence adapter interface
167
185
  * Implement this to create adapters for different databases
168
186
  */
169
- export interface PersistenceAdapter {
187
+ export interface PersistenceAdapter<TData = Record<string, unknown>> {
170
188
  /**
171
189
  * Session repository
172
190
  */
173
- readonly sessionRepository: SessionRepository;
191
+ readonly sessionRepository: SessionRepository<TData>;
174
192
 
175
193
  /**
176
194
  * Message repository
@@ -192,11 +210,11 @@ export interface PersistenceAdapter {
192
210
  /**
193
211
  * Configuration for persistence
194
212
  */
195
- export interface PersistenceConfig {
213
+ export interface PersistenceConfig<TData = Record<string, unknown>> {
196
214
  /**
197
215
  * Persistence adapter instance (e.g., PrismaAdapter)
198
216
  */
199
- adapter: PersistenceAdapter;
217
+ adapter: PersistenceAdapter<TData>;
200
218
 
201
219
  /**
202
220
  * Whether to auto-save messages (default: true)
@@ -213,10 +231,10 @@ export interface PersistenceConfig {
213
231
  /**
214
232
  * Options for creating a session
215
233
  */
216
- export interface CreateSessionOptions {
234
+ export interface CreateSessionOptions<TData = Record<string, unknown>> {
217
235
  userId?: string;
218
236
  agentName?: string;
219
- initialData?: Record<string, unknown>;
237
+ initialData?: Partial<TData>;
220
238
  }
221
239
 
222
240
  /**
@@ -2,8 +2,9 @@
2
2
  * Route/Journey DSL type definitions
3
3
  */
4
4
 
5
- import type { ToolRef, ToolResult } from "./tool";
5
+ import type { Tool } from "./tool";
6
6
  import type { StructuredSchema } from "./schema";
7
+ import { Template } from "./template";
7
8
 
8
9
  /**
9
10
  * Reference to a route
@@ -24,18 +25,46 @@ export interface StepRef {
24
25
  }
25
26
 
26
27
  /**
27
- * Forward declare Guideline for circular dependency
28
+ * Forward declare Guideline and Term for circular dependency
28
29
  */
29
- import type { Guideline } from "./agent";
30
+ import type { Guideline, Term } from "./agent";
31
+
32
+ /**
33
+ * Route lifecycle hooks for managing route-specific data and behavior
34
+ */
35
+ export interface RouteLifecycleHooks<TContext = unknown, TData = unknown> {
36
+ /**
37
+ * Called after collected data is updated for this route (from AI response or tool execution)
38
+ * Useful for validation, enrichment, or persistence of route-specific collected data
39
+ * Return modified collected data or the same data to keep it unchanged
40
+ *
41
+ * Unlike Agent-level onDataUpdate, this only triggers for data changes in this specific route.
42
+ */
43
+ onDataUpdate?: (
44
+ data: Partial<TData>,
45
+ previousCollected: Partial<TData>
46
+ ) => Partial<TData> | Promise<Partial<TData>>;
47
+
48
+ /**
49
+ * Called after context is updated via updateContext() when this route is active
50
+ * Useful for route-specific context reactions, validation, or side effects
51
+ *
52
+ * Unlike Agent-level onContextUpdate, this only triggers when this specific route is active.
53
+ */
54
+ onContextUpdate?: (
55
+ newContext: TContext,
56
+ previousContext: TContext
57
+ ) => void | Promise<void>;
58
+ }
30
59
 
31
60
  /**
32
61
  * Route transition configuration when route completes
33
62
  */
34
- export interface RouteTransitionConfig {
63
+ export interface RouteTransitionConfig<TContext = unknown, TData = unknown> {
35
64
  /** Target route ID or title to transition to */
36
65
  nextStep: string;
37
66
  /** Optional AI-evaluated condition for the transition */
38
- condition?: string;
67
+ condition?: Template<TContext, TData>;
39
68
  }
40
69
 
41
70
  /**
@@ -49,9 +78,9 @@ export type RouteCompletionHandler<TContext = unknown, TData = unknown> = (
49
78
  context?: TContext
50
79
  ) =>
51
80
  | string
52
- | RouteTransitionConfig
81
+ | RouteTransitionConfig<TContext, TData>
53
82
  | undefined
54
- | Promise<string | RouteTransitionConfig | undefined>;
83
+ | Promise<string | RouteTransitionConfig<TContext, TData> | undefined>;
55
84
 
56
85
  /**
57
86
  * Options for creating a route
@@ -64,16 +93,22 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
64
93
  title: string;
65
94
  /** Description of what this route accomplishes */
66
95
  description?: string;
96
+ /** Optional identity prompt defining the agent's role and persona for this route */
97
+ identity?: Template<TContext, TData>;
98
+ /** Optional personality prompt defining the agent's communication style for this route */
99
+ personality?: Template<TContext, TData>;
67
100
  /** Conditions that activate this route */
68
- conditions?: string[];
101
+ conditions?: Template<TContext, TData>[];
69
102
  /** Initial guidelines for this route */
70
- guidelines?: Guideline[];
71
- /** Domain names that are allowed in this route (undefined = all domains) */
72
- domains?: string[];
103
+ guidelines?: Guideline<TContext>[];
104
+ /** Initial terms for the route's domain glossary */
105
+ terms?: Term<TContext>[];
106
+ /** Tools available in this route */
107
+ tools?: Tool<TContext, unknown[], unknown, TData>[];
73
108
  /** Absolute rules the agent must follow in this route */
74
- rules?: string[];
109
+ rules?: Template<TContext, TData>[];
75
110
  /** Absolute prohibitions the agent must never do in this route */
76
- prohibitions?: string[];
111
+ prohibitions?: Template<TContext, TData>[];
77
112
  /** Optional: extractions the router may return (added to routing schema) */
78
113
  routingExtrasSchema?: StructuredSchema;
79
114
  /** Optional: structured response data for this route's message generation */
@@ -94,26 +129,20 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
94
129
  * If provided, automatically chains the steps from initialStep to END_ROUTE
95
130
  * For complex flows with branching, build the step machine manually instead
96
131
  */
97
- steps?: TransitionSpec<TContext, TData>[];
132
+ steps?: StepOptions<TContext, TData>[];
98
133
  /**
99
134
  * Configure the initial step (optional)
100
- * Accepts full TransitionSpec configuration (id, instructions, collect, skipIf, etc.)
135
+ * Accepts full StepOptions configuration (id, prompt, collect, skipIf, etc.)
101
136
  * Note: tool and step properties are ignored for initial step
102
137
  */
103
- initialStep?: Omit<
104
- TransitionSpec<TContext, TData>,
105
- "tool" | "step" | "condition"
106
- >;
138
+ initialStep?: Omit<StepOptions<TContext, TData>, "step">;
107
139
  /**
108
140
  * Configure the end step (optional)
109
141
  * Defines what happens when the route completes (reaches END_ROUTE)
110
- * Can include instructions for completion message, tool for final actions, etc.
142
+ * Can include prompt for completion message, tool for final actions, etc.
111
143
  * Note: step, condition, skipIf properties are ignored for end step
112
144
  */
113
- endStep?: Omit<
114
- TransitionSpec<TContext, TData>,
115
- "step" | "condition" | "skipIf"
116
- >;
145
+ endStep?: Omit<StepOptions<TContext, TData>, "step" | "condition" | "skipIf">;
117
146
  /**
118
147
  * Optional transition when route completes (reaches END_ROUTE)
119
148
  * Can be:
@@ -141,30 +170,38 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
141
170
  */
142
171
  onComplete?:
143
172
  | string
144
- | RouteTransitionConfig
173
+ | RouteTransitionConfig<TContext, TData>
145
174
  | RouteCompletionHandler<TContext, TData>;
175
+ /**
176
+ * Route lifecycle hooks
177
+ */
178
+ hooks?: RouteLifecycleHooks<TContext, TData>;
179
+ /** Knowledge base specific to this route containing any JSON structure the AI should know */
180
+ knowledgeBase?: Record<string, unknown>;
146
181
  }
147
182
 
148
- /**
149
- * Inline tool handler for dynamic tool generation
150
- */
151
- export type InlineToolHandler<TContext = unknown, TData = unknown> = (
152
- context: import("./tool").ToolContext<TContext, TData>
153
- ) =>
154
- | ToolResult<unknown, TContext, TData>
155
- | Promise<ToolResult<unknown, TContext, TData>>;
156
-
157
183
  /**
158
184
  * Specification for a step transition
159
185
  */
160
- export interface TransitionSpec<TContext = unknown, TData = unknown> {
186
+ export interface StepOptions<TContext = unknown, TData = unknown> {
161
187
  /** Custom ID for this step (optional - will generate deterministic ID if not provided) */
162
188
  id?: string;
189
+ /** Description of the transition */
190
+ description?: string;
163
191
  /** Transition to a chat state with this description */
164
- instructions?: string;
165
- /** Transition to execute a tool */
166
- tool?: // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- ToolRef<TContext, any[], any, TData> | InlineToolHandler<TContext, TData>;
192
+ prompt?: Template<TContext, TData>;
193
+ /** Tools available for AI to call in this step (by ID reference or inline definition) */
194
+ tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
195
+ /** Programmatic function or tool to run before AI responds */
196
+ prepare?:
197
+ | string
198
+ | Tool<TContext, unknown[], unknown, TData>
199
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
200
+ /** Programmatic function or tool to run after AI responds */
201
+ finalize?:
202
+ | string
203
+ | Tool<TContext, unknown[], unknown, TData>
204
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
168
205
  /** Transition to a specific step or end marker */
169
206
  step?: StepRef | symbol;
170
207
  /**
@@ -189,17 +226,39 @@ export interface TransitionSpec<TContext = unknown, TData = unknown> {
189
226
  * Optional condition for this transition
190
227
  * Description of when this transition should be taken
191
228
  */
192
- condition?: string;
229
+ when?: Template<TContext, TData>;
230
+ }
231
+
232
+ /**
233
+ * Specification for a branch in the conversation flow
234
+ */
235
+ export interface BranchSpec<TContext = unknown, TData = unknown> {
236
+ /** User-friendly identifier for this branch (used as object key) */
237
+ name: string;
238
+ /** Optional ID for this branch (auto-generated if not provided) */
239
+ id?: string;
240
+ /** Step configuration for this branch */
241
+ step: StepOptions<TContext, TData>;
242
+ }
243
+
244
+ /**
245
+ * Result of a branch operation
246
+ * Maps branch names to their respective step results for continued chaining
247
+ */
248
+ export interface BranchResult<TContext = unknown, TData = unknown> {
249
+ [branchName: string]: StepResult<TContext, TData>;
193
250
  }
194
251
 
195
252
  /**
196
253
  * Result of a transition operation
197
- * Combines step reference with the ability to chain transitions
254
+ * Combines step reference with the ability to chain transitions and create branches
198
255
  */
199
- export interface TransitionResult<TContext = unknown, TData = unknown>
256
+ export interface StepResult<TContext = unknown, TData = unknown>
200
257
  extends StepRef {
201
258
  /** Allow chaining transitions */
202
- nextStep: (
203
- spec: TransitionSpec<TContext, TData>
204
- ) => TransitionResult<TContext, TData>;
259
+ nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
260
+ /** Create multiple branches from this step */
261
+ branch: (
262
+ branches: BranchSpec<TContext, TData>[]
263
+ ) => BranchResult<TContext, TData>;
205
264
  }
@@ -2,6 +2,8 @@
2
2
  * Session step types for tracking conversation progress
3
3
  */
4
4
 
5
+ import type { History } from "./history";
6
+
5
7
  /**
6
8
  * Pending route transition information
7
9
  */
@@ -18,41 +20,41 @@ export interface PendingTransition {
18
20
  * Session step tracks the current position in the conversation flow
19
21
  * and data collected during the route progression
20
22
  */
21
- export interface SessionStep<TData = Record<string, unknown>> {
23
+ export interface SessionState<TData = unknown> {
22
24
  /** Unique session identifier (useful for persistence) */
23
- id?: string;
25
+ id: string;
24
26
 
25
27
  /** Current route the conversation is in */
26
28
  currentRoute?: {
27
29
  id: string;
28
30
  title: string;
29
- enteredAt: Date;
31
+ enteredAt?: Date;
30
32
  };
31
33
 
32
34
  /** Current step within the route */
33
35
  currentStep?: {
34
36
  id: string;
35
37
  description?: string;
36
- enteredAt: Date;
38
+ enteredAt?: Date;
37
39
  };
38
40
 
39
41
  /**
40
42
  * Data collected during the current route
41
- * This is a convenience reference to dataByRoute[currentRoute.id]
43
+ * Convenience reference to dataByRoute[currentRoute.id]
42
44
  */
43
45
  data?: Partial<TData>;
44
46
 
45
47
  /**
46
- * Collected data organized by route ID
47
- * Preserves data when switching between routes
48
- * Format: { "routeId": { ...dataData } }
48
+ * Data collected organized by route ID
49
+ * Persists data when switching between routes
50
+ * Allows resuming incomplete routes where they left off
49
51
  */
50
- dataByRoute?: Record<string, Partial<unknown>>;
52
+ dataByRoute?: Record<string, Partial<TData>>;
51
53
 
52
54
  /** History of routes visited in this session */
53
- routeHistory: Array<{
55
+ routeHistory?: Array<{
54
56
  routeId: string;
55
- enteredAt: Date;
57
+ enteredAt?: Date;
56
58
  exitedAt?: Date;
57
59
  completed: boolean;
58
60
  }>;
@@ -63,6 +65,12 @@ export interface SessionStep<TData = Record<string, unknown>> {
63
65
  */
64
66
  pendingTransition?: PendingTransition;
65
67
 
68
+ /**
69
+ * Conversation history managed by the session
70
+ * Contains the full conversation between user and assistant
71
+ */
72
+ history?: History;
73
+
66
74
  /** Session metadata */
67
75
  metadata?: {
68
76
  createdAt?: Date;
@@ -70,205 +78,3 @@ export interface SessionStep<TData = Record<string, unknown>> {
70
78
  [key: string]: unknown;
71
79
  };
72
80
  }
73
-
74
- /**
75
- * Helper to create a new session
76
- * @param sessionId - Optional session ID (e.g., from database)
77
- * @param metadata - Optional metadata to attach
78
- */
79
- export function createSession<TData = Record<string, unknown>>(
80
- sessionId?: string,
81
- metadata?: SessionStep<TData>["metadata"]
82
- ): SessionStep<TData> {
83
- return {
84
- id: sessionId,
85
- data: {},
86
- dataByRoute: {},
87
- routeHistory: [],
88
- metadata: {
89
- ...metadata,
90
- createdAt: new Date(),
91
- lastUpdatedAt: new Date(),
92
- },
93
- };
94
- }
95
-
96
- /**
97
- * Helper to update session with new route
98
- * Preserves collected data per route in dataByRoute map
99
- */
100
- export function enterRoute<TData = Record<string, unknown>>(
101
- session: SessionStep<TData>,
102
- routeId: string,
103
- routeTitle: string
104
- ): SessionStep<TData> {
105
- // Save current route's collected data before switching
106
- const dataByRoute = { ...session.dataByRoute };
107
- if (
108
- session.currentRoute &&
109
- session.data &&
110
- Object.keys(session.data).length > 0
111
- ) {
112
- dataByRoute[session.currentRoute.id] = session.data;
113
- }
114
-
115
- // Exit current route if exists
116
- const routeHistory = [...session.routeHistory];
117
- if (session.currentRoute) {
118
- const lastRouteIndex = routeHistory.findIndex(
119
- (r) => r.routeId === session.currentRoute?.id && !r.exitedAt
120
- );
121
- if (lastRouteIndex >= 0) {
122
- routeHistory[lastRouteIndex].exitedAt = new Date();
123
- }
124
- }
125
-
126
- // Load collected data for new route (if resuming) or start fresh
127
- const newCollected = (dataByRoute[routeId] as Partial<TData>) || {};
128
-
129
- // Enter new route
130
- const now = new Date();
131
- return {
132
- ...session,
133
- currentRoute: {
134
- id: routeId,
135
- title: routeTitle,
136
- enteredAt: now,
137
- },
138
- currentStep: undefined,
139
- data: newCollected, // Load route's data or start fresh
140
- dataByRoute,
141
- routeHistory: [
142
- ...routeHistory,
143
- {
144
- routeId,
145
- enteredAt: now,
146
- completed: false,
147
- },
148
- ],
149
- metadata: {
150
- ...session.metadata,
151
- lastUpdatedAt: now,
152
- },
153
- };
154
- }
155
-
156
- /**
157
- * Helper to update session with new step
158
- */
159
- export function enterStep<TData = Record<string, unknown>>(
160
- session: SessionStep<TData>,
161
- stepId: string,
162
- stepDescription?: string
163
- ): SessionStep<TData> {
164
- return {
165
- ...session,
166
- currentStep: {
167
- id: stepId,
168
- description: stepDescription,
169
- enteredAt: new Date(),
170
- },
171
- metadata: {
172
- ...session.metadata,
173
- lastUpdatedAt: new Date(),
174
- },
175
- };
176
- }
177
-
178
- /**
179
- * Helper to merge collected data into session
180
- * Updates both the data field and the dataByRoute map
181
- */
182
- export function mergeCollected<TData = Record<string, unknown>>(
183
- session: SessionStep<TData>,
184
- data: Partial<unknown>
185
- ): SessionStep<TData> {
186
- const newCollected = {
187
- ...session.data,
188
- ...data,
189
- } as Partial<TData>;
190
-
191
- // Also update the dataByRoute map for the current route
192
- const dataByRoute = { ...session.dataByRoute };
193
- if (session.currentRoute) {
194
- dataByRoute[session.currentRoute.id] = newCollected;
195
- }
196
-
197
- return {
198
- ...session,
199
- data: newCollected,
200
- dataByRoute,
201
- metadata: {
202
- ...session.metadata,
203
- lastUpdatedAt: new Date(),
204
- },
205
- };
206
- }
207
-
208
- /**
209
- * Helper to convert SessionStep to persistence-friendly format
210
- * Used when saving to database
211
- */
212
- export function sessionStepToData<TData = Record<string, unknown>>(
213
- session: SessionStep<TData>
214
- ): {
215
- currentRoute?: string;
216
- currentStep?: string;
217
- collectedData: Record<string, unknown>;
218
- } {
219
- return {
220
- currentRoute: session.currentRoute?.id,
221
- currentStep: session.currentStep?.id,
222
- collectedData: {
223
- data: session.data,
224
- dataByRoute: session.dataByRoute, // Include per-route data
225
- routeHistory: session.routeHistory,
226
- currentRouteTitle: session.currentRoute?.title,
227
- currentStepDescription: session.currentStep?.description,
228
- metadata: session.metadata,
229
- },
230
- };
231
- }
232
-
233
- /**
234
- * Helper to convert database SessionData back to SessionStep
235
- * Used when loading from database
236
- * @param sessionId - The database session ID
237
- * @param data - The database session data
238
- */
239
- export function sessionDataToStep<TData = Record<string, unknown>>(
240
- sessionId: string,
241
- data: {
242
- currentRoute?: string;
243
- currentStep?: string;
244
- collectedData?: Record<string, unknown>;
245
- }
246
- ): SessionStep<TData> {
247
- const collectedData = data.collectedData || {};
248
-
249
- return {
250
- id: sessionId,
251
- currentRoute: data.currentRoute
252
- ? {
253
- id: data.currentRoute,
254
- title:
255
- (collectedData.currentRouteTitle as string) || data.currentRoute,
256
- enteredAt: new Date(),
257
- }
258
- : undefined,
259
- currentStep: data.currentStep
260
- ? {
261
- id: data.currentStep,
262
- description:
263
- (collectedData.currentStepDescription as string) || undefined,
264
- enteredAt: new Date(),
265
- }
266
- : undefined,
267
- data: (collectedData.data as Partial<TData>) || {},
268
- dataByRoute:
269
- (collectedData.dataByRoute as Record<string, Partial<unknown>>) || {}, // Restore per-route data
270
- routeHistory:
271
- (collectedData.routeHistory as SessionStep<TData>["routeHistory"]) || [],
272
- metadata: (collectedData.metadata as SessionStep<TData>["metadata"]) || {},
273
- };
274
- }