@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
@@ -0,0 +1,241 @@
1
+ /**
2
+ * SessionManager - Simplified session management with history
3
+ *
4
+ * Provides a clean, pragmatic API for managing sessions and conversation history
5
+ * in both server and client environments.
6
+ */
7
+
8
+ import type { SessionState } from "../types/session";
9
+ import type { History, HistoryItem } from "../types/history";
10
+ import { PersistenceManager } from "./PersistenceManager";
11
+ import type { PersistenceAdapter } from "../types/persistence";
12
+
13
+ /**
14
+ * SessionManager handles session lifecycle and conversation history
15
+ */
16
+ export class SessionManager<TData = unknown> {
17
+ private currentSession?: SessionState<TData>;
18
+ private persistenceManager?: PersistenceManager<TData>;
19
+
20
+ constructor(
21
+ persistenceManagerOrAdapter?:
22
+ | PersistenceManager<TData>
23
+ | PersistenceAdapter<TData>
24
+ ) {
25
+ if (persistenceManagerOrAdapter) {
26
+ // Check if it's a PersistenceManager or an adapter
27
+ if ("saveSessionState" in persistenceManagerOrAdapter) {
28
+ this.persistenceManager = persistenceManagerOrAdapter;
29
+ } else {
30
+ // It's an adapter, create a PersistenceManager
31
+ this.persistenceManager = new PersistenceManager({
32
+ adapter: persistenceManagerOrAdapter,
33
+ });
34
+ }
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Core method: getOrCreate handles both existing and new sessions
40
+ * Works for sessionIds that exist, don't exist, or auto-generated IDs
41
+ */
42
+ async getOrCreate(sessionId?: string): Promise<SessionState<TData>> {
43
+ // If we already have a session and no sessionId specified, return it
44
+ if (this.currentSession && !sessionId) {
45
+ return this.currentSession;
46
+ }
47
+
48
+ // If sessionId provided, try to load it first
49
+ if (sessionId && this.persistenceManager) {
50
+ try {
51
+ const session = await this.persistenceManager.loadSessionState(
52
+ sessionId
53
+ );
54
+ if (session) {
55
+ this.currentSession = session;
56
+ return session;
57
+ }
58
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
+ } catch (_error) {
60
+ // Session doesn't exist, will create new one with this ID
61
+ }
62
+ }
63
+
64
+ // Create new session (with provided ID or auto-generated)
65
+ return this.create(sessionId);
66
+ }
67
+
68
+ /**
69
+ * Create a new session with optional custom ID
70
+ */
71
+ private async create(sessionId?: string): Promise<SessionState<TData>> {
72
+ const id =
73
+ sessionId ||
74
+ `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
75
+
76
+ const session: SessionState<TData> = {
77
+ id,
78
+ data: {} as Partial<TData>,
79
+ dataByRoute: {},
80
+ routeHistory: [],
81
+ history: [], // Session manages its own history
82
+ metadata: {
83
+ createdAt: new Date(),
84
+ lastUpdatedAt: new Date(),
85
+ },
86
+ };
87
+
88
+ this.currentSession = session;
89
+
90
+ // Save to persistence if available
91
+ if (this.persistenceManager) {
92
+ await this.persistenceManager.saveSessionState(session.id, session);
93
+ }
94
+
95
+ return session;
96
+ }
97
+
98
+ /**
99
+ * Add a message to the session history
100
+ */
101
+ async addMessage(
102
+ role: "user" | "assistant",
103
+ content: string,
104
+ name?: string
105
+ ): Promise<void> {
106
+ const session = await this.getOrCreate();
107
+
108
+ if (!session.history) {
109
+ session.history = [];
110
+ }
111
+
112
+ const historyItem: HistoryItem = {
113
+ role,
114
+ content,
115
+ ...(name && { name }),
116
+ };
117
+
118
+ session.history.push(historyItem);
119
+ session.metadata!.lastUpdatedAt = new Date();
120
+
121
+ // Auto-save to persistence
122
+ await this.save();
123
+ }
124
+
125
+ /**
126
+ * Get the current conversation history
127
+ */
128
+ getHistory(): History {
129
+ return this.currentSession?.history || [];
130
+ }
131
+
132
+ /**
133
+ * Set the entire conversation history
134
+ */
135
+ setHistory(history: History): void {
136
+ if (this.currentSession) {
137
+ this.currentSession.history = history ? [...history] : [];
138
+ this.currentSession.metadata!.lastUpdatedAt = new Date();
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Clear all conversation history
144
+ */
145
+ clearHistory(): void {
146
+ if (this.currentSession) {
147
+ this.currentSession.history = [];
148
+ this.currentSession.metadata!.lastUpdatedAt = new Date();
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Save the current session to persistence
154
+ */
155
+ async save(): Promise<void> {
156
+ if (this.currentSession && this.persistenceManager) {
157
+ await this.persistenceManager.saveSessionState(
158
+ this.currentSession.id,
159
+ this.currentSession
160
+ );
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Delete the current session from persistence
166
+ */
167
+ async delete(): Promise<void> {
168
+ if (this.currentSession && this.persistenceManager) {
169
+ await this.persistenceManager.deleteSession(this.currentSession.id);
170
+ this.currentSession = undefined;
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Get the current session
176
+ */
177
+ get current(): SessionState<TData> | undefined {
178
+ return this.currentSession;
179
+ }
180
+
181
+ /**
182
+ * Get the current session ID
183
+ */
184
+ get id(): string | undefined {
185
+ return this.currentSession?.id;
186
+ }
187
+
188
+ /**
189
+ * Get collected data from the current session
190
+ */
191
+ getData<T = TData>(): Partial<T> | undefined {
192
+ return this.currentSession?.data as unknown as Partial<T> | undefined;
193
+ }
194
+
195
+ /**
196
+ * Set/merge data into the current session
197
+ */
198
+ async setData<T = TData>(data: Partial<T>): Promise<void> {
199
+ // Ensure session exists
200
+ await this.getOrCreate();
201
+
202
+ if (this.currentSession && data) {
203
+ this.currentSession.data = {
204
+ ...this.currentSession.data,
205
+ ...(data as unknown as Partial<TData>),
206
+ };
207
+ this.currentSession.metadata!.lastUpdatedAt = new Date();
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Reset the session (creates new session, optionally preserving history)
213
+ */
214
+ async reset(preserveHistory = false): Promise<SessionState<TData>> {
215
+ const oldId = this.currentSession?.id;
216
+ const history = preserveHistory ? this.currentSession?.history : [];
217
+
218
+ // Create new session
219
+ const newSession = await this.create();
220
+
221
+ // Preserve history if requested
222
+ if (preserveHistory && history) {
223
+ newSession.history = [...history];
224
+ }
225
+
226
+ // Clean up old session from persistence
227
+ if (oldId && this.persistenceManager) {
228
+ await this.persistenceManager.deleteSession(oldId);
229
+ }
230
+
231
+ await this.save();
232
+ return newSession;
233
+ }
234
+
235
+ /**
236
+ * Get the persistence manager (for testing purposes)
237
+ */
238
+ getPersistenceManager(): PersistenceManager<TData> | undefined {
239
+ return this.persistenceManager;
240
+ }
241
+ }
package/src/core/Step.ts CHANGED
@@ -2,11 +2,18 @@
2
2
  * Step in the route DSL
3
3
  */
4
4
 
5
- import type { StepRef, TransitionSpec, TransitionResult } from "../types/route";
6
- import type { Guideline } from "../types/agent";
5
+ import type {
6
+ StepRef,
7
+ StepOptions,
8
+ StepResult,
9
+ BranchSpec,
10
+ BranchResult,
11
+ Guideline,
12
+ Tool,
13
+ } from "../types";
14
+ import { Template } from "../types/template";
7
15
 
8
- import { END_ROUTE } from "../constants";
9
- import { Transition } from "./Transition";
16
+ import { END_ROUTE, END_ROUTE_ID } from "../constants";
10
17
  import { generateStepId } from "../utils/id";
11
18
 
12
19
  /**
@@ -14,28 +21,38 @@ import { generateStepId } from "../utils/id";
14
21
  */
15
22
  export class Step<TContext = unknown, TData = unknown> {
16
23
  public readonly id: string;
17
- private transitions: Transition<TContext, TData>[] = [];
18
- private guidelines: Guideline[] = [];
19
- public collectFields?: string[];
24
+ private nextSteps: Step<TContext, TData>[] = [];
25
+ private guidelines: Guideline<TContext>[] = [];
26
+ public readonly routeId: string;
27
+ public collect?: string[];
28
+ public description?: string;
29
+ public when?: Template<TContext, TData>;
20
30
  public skipIf?: (data: Partial<TData>) => boolean;
21
31
  public requires?: string[];
22
- public instructions?: string;
23
-
24
- constructor(
25
- public readonly routeId: string,
26
- public description?: string,
27
- customId?: string,
28
- collectFields?: string[],
29
- skipIf?: (data: Partial<TData>) => boolean,
30
- requires?: string[],
31
- instructions?: string
32
- ) {
32
+ public prompt?: Template<TContext, TData>;
33
+ public prepare?:
34
+ | string
35
+ | Tool<TContext, unknown[], unknown, TData>
36
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
37
+ public finalize?:
38
+ | string
39
+ | Tool<TContext, unknown[], unknown, TData>
40
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
41
+ public tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
42
+
43
+ constructor(routeId: string, options: StepOptions<TContext, TData> = {}) {
33
44
  // Use provided ID or generate a deterministic one
34
- this.id = customId || generateStepId(routeId, description);
35
- this.collectFields = collectFields;
36
- this.skipIf = skipIf;
37
- this.requires = requires;
38
- this.instructions = instructions;
45
+ this.id = options.id || generateStepId(routeId, options.description);
46
+ this.routeId = routeId;
47
+ this.description = options.description;
48
+ this.collect = options.collect;
49
+ this.skipIf = options.skipIf;
50
+ this.requires = options.requires;
51
+ this.prompt = options.prompt;
52
+ this.when = options.when;
53
+ this.prepare = options.prepare;
54
+ this.finalize = options.finalize;
55
+ this.tools = options.tools;
39
56
  }
40
57
 
41
58
  /**
@@ -44,16 +61,25 @@ export class Step<TContext = unknown, TData = unknown> {
44
61
  */
45
62
  configure(config: {
46
63
  description?: string;
47
- collectFields?: string[];
64
+ collect?: string[];
48
65
  skipIf?: (data: Partial<TData>) => boolean;
49
66
  requires?: string[];
50
- instructions?: string;
67
+ prompt?: Template<TContext, TData>;
68
+ prepare?:
69
+ | string
70
+ | Tool<TContext, unknown[], unknown, TData>
71
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
72
+ finalize?:
73
+ | string
74
+ | Tool<TContext, unknown[], unknown, TData>
75
+ | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
76
+ tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
51
77
  }): this {
52
78
  if (config.description !== undefined) {
53
79
  this.description = config.description;
54
80
  }
55
- if (config.collectFields !== undefined) {
56
- this.collectFields = config.collectFields;
81
+ if (config.collect !== undefined) {
82
+ this.collect = config.collect;
57
83
  }
58
84
  if (config.skipIf !== undefined) {
59
85
  this.skipIf = config.skipIf;
@@ -61,79 +87,118 @@ export class Step<TContext = unknown, TData = unknown> {
61
87
  if (config.requires !== undefined) {
62
88
  this.requires = config.requires;
63
89
  }
64
- if (config.instructions !== undefined) {
65
- this.instructions = config.instructions;
90
+ if (config.prompt !== undefined) {
91
+ this.prompt = config.prompt;
92
+ }
93
+ if (config.prepare !== undefined) {
94
+ this.prepare = config.prepare;
95
+ }
96
+ if (config.finalize !== undefined) {
97
+ this.finalize = config.finalize;
98
+ }
99
+ if (config.tools !== undefined) {
100
+ this.tools = config.tools;
66
101
  }
67
102
  return this;
68
103
  }
69
104
 
105
+ /**
106
+ * Shortcut to end the current route
107
+ *
108
+ * @param options - Optional step options for the end step
109
+ * @returns Terminal step result
110
+ */
111
+ endRoute(
112
+ options: Omit<StepOptions<TContext, TData>, "step"> = {}
113
+ ): StepResult<TContext, TData> {
114
+ return this.nextStep({
115
+ ...options,
116
+ step: END_ROUTE,
117
+ });
118
+ }
119
+
70
120
  /**
71
121
  * Create a transition from this step to another
72
122
  *
73
- * @param spec - Transition specification (instructions, tool, or direct step)
74
- * @returns TransitionResult that supports chaining
123
+ * @param spec - Transition specification (prompt, tool, or direct step)
124
+ * @returns StepResult that supports chaining
75
125
  */
76
- nextStep(
77
- spec: TransitionSpec<TContext, TData>
78
- ): TransitionResult<TContext, TData> {
126
+ nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData> {
79
127
  // Handle END_ROUTE
80
128
  if (spec.step && typeof spec.step === "symbol" && spec.step === END_ROUTE) {
81
- const endTransition = new Transition<TContext, TData>(this.getRef(), {
82
- step: END_ROUTE,
83
- condition: spec.condition,
84
- instructions: spec.instructions,
129
+ const endStep = new Step<TContext, TData>(this.routeId, {
130
+ ...spec,
131
+ id: END_ROUTE_ID,
85
132
  });
86
- this.transitions.push(endTransition);
87
-
88
- // Return a terminal step reference
133
+ this.nextSteps.push(endStep);
89
134
  return this.createTerminalRef();
90
135
  }
91
136
 
92
137
  // Handle direct step reference
93
138
  if (spec.step && typeof spec.step !== "symbol") {
94
- const transition = new Transition<TContext, TData>(this.getRef(), spec);
95
- this.transitions.push(transition);
96
-
97
- return this.createStepRefWithTransition(spec.step);
139
+ // This is a bit tricky. We need to find the actual Step instance.
140
+ // For now, let's assume the user will provide a Step instance directly.
141
+ // This part might need to be revisited.
98
142
  }
99
143
 
100
- // Create new target step for instructions or tool
101
- const targetStep = new Step<TContext, TData>(
102
- this.routeId,
103
- spec.instructions,
104
- spec.id, // Use custom ID if provided
105
- spec.collect,
106
- spec.skipIf,
107
- spec.requires,
108
- spec.instructions
109
- );
110
- const transition = new Transition<TContext, TData>(this.getRef(), spec);
111
- transition.setTarget(targetStep);
112
-
113
- this.transitions.push(transition);
144
+ // Create new target step for prompt or tool
145
+ const targetStep = new Step<TContext, TData>(this.routeId, spec);
146
+ this.nextSteps.push(targetStep);
114
147
 
115
148
  return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
116
149
  }
117
150
 
151
+ /**
152
+ * Create multiple branches from this step
153
+ *
154
+ * @param branches - Array of branch specifications
155
+ * @returns BranchResult mapping branch names to their step results
156
+ */
157
+ branch(
158
+ branches: BranchSpec<TContext, TData>[]
159
+ ): BranchResult<TContext, TData> {
160
+ const result = {} as BranchResult<TContext, TData>;
161
+
162
+ for (const branchSpec of branches) {
163
+ // Create step options with optional ID
164
+ const stepOptions: StepOptions<TContext, TData> = branchSpec.id
165
+ ? { ...branchSpec.step, id: branchSpec.id }
166
+ : branchSpec.step;
167
+
168
+ // Create a new step for this branch
169
+ const branchStep = new Step<TContext, TData>(this.routeId, stepOptions);
170
+ // Add it to our transitions
171
+ this.nextSteps.push(branchStep);
172
+ // Create a step result for chaining
173
+ const branchName: string = branchSpec.name;
174
+ result[branchName] = this.createStepRefWithTransition(
175
+ branchStep.getRef(),
176
+ branchStep
177
+ );
178
+ }
179
+
180
+ return result;
181
+ }
182
+
118
183
  /**
119
184
  * Add a guideline specific to this step
120
185
  */
121
- addGuideline(guideline: Guideline): void {
186
+ addGuideline(guideline: Guideline<TContext>): void {
122
187
  this.guidelines.push(guideline);
123
188
  }
124
189
 
125
190
  /**
126
191
  * Get guidelines for this step
127
192
  */
128
- getGuidelines(): Guideline[] {
193
+ getGuidelines(): Guideline<TContext>[] {
129
194
  return [...this.guidelines];
130
195
  }
131
196
 
132
197
  /**
133
198
  * Get all transitions from this step
134
199
  */
135
- getTransitions(): Transition<TContext, TData>[] {
136
- return [...this.transitions];
200
+ getTransitions(): Step<TContext, TData>[] {
201
+ return [...this.nextSteps];
137
202
  }
138
203
 
139
204
  /**
@@ -168,22 +233,24 @@ export class Step<TContext = unknown, TData = unknown> {
168
233
  private createStepRefWithTransition(
169
234
  ref: StepRef,
170
235
  step?: Step<TContext, TData>
171
- ): TransitionResult<TContext, TData> {
236
+ ): StepResult<TContext, TData> {
172
237
  const stepInstance = step || this;
173
238
 
174
239
  return {
175
240
  ...ref,
176
- nextStep: (spec: TransitionSpec<TContext, TData>) =>
241
+ nextStep: (spec: StepOptions<TContext, TData>) =>
177
242
  stepInstance.nextStep(spec),
243
+ branch: (branches: BranchSpec<TContext, TData>[]) =>
244
+ stepInstance.branch(branches),
178
245
  };
179
246
  }
180
247
 
181
248
  /**
182
249
  * Create a terminal step reference (for END_ROUTE)
183
250
  */
184
- private createTerminalRef(): TransitionResult<TContext, TData> {
251
+ private createTerminalRef(): StepResult<TContext, TData> {
185
252
  const terminalRef: StepRef = {
186
- id: "END",
253
+ id: END_ROUTE_ID,
187
254
  routeId: this.routeId,
188
255
  };
189
256
 
@@ -192,6 +259,21 @@ export class Step<TContext = unknown, TData = unknown> {
192
259
  nextStep: () => {
193
260
  throw new Error("Cannot transition from END_ROUTE step");
194
261
  },
262
+ branch: () => {
263
+ throw new Error("Cannot branch from END_ROUTE step");
264
+ },
265
+ };
266
+ }
267
+
268
+ /**
269
+ * Create a transition result for this step
270
+ */
271
+ asStepResult(): StepResult<TContext, TData> {
272
+ return {
273
+ ...this.getRef(),
274
+ nextStep: (spec: StepOptions<TContext, TData>) => this.nextStep(spec),
275
+ branch: (branches: BranchSpec<TContext, TData>[]) =>
276
+ this.branch(branches),
195
277
  };
196
278
  }
197
279
  }
@@ -5,48 +5,45 @@
5
5
  * The LLM sees the enriched context when generating responses.
6
6
  */
7
7
 
8
- import type { Event } from "../types/history";
9
- import type { ToolRef, ToolContext } from "../types/tool";
8
+ import type { Event, Tool, ToolContext } from "../types";
10
9
 
11
10
  export interface ToolExecutionResult {
12
11
  toolName: string;
13
12
  success: boolean;
14
13
  data?: unknown;
15
14
  contextUpdate?: Record<string, unknown>;
16
- collectedUpdate?: Record<string, unknown>;
15
+ dataUpdate?: Record<string, unknown>;
17
16
  error?: string;
18
17
  }
19
18
 
19
+ export interface ExecuteToolParams<TContext = unknown, TData = unknown> {
20
+ tool: Tool<TContext, unknown[], unknown>;
21
+ context: TContext;
22
+ updateContext: (updates: Partial<TContext>) => Promise<void>;
23
+ history: Event[];
24
+ data?: Partial<TData>;
25
+ toolArguments?: Record<string, unknown>;
26
+ }
27
+
28
+ export interface ExecuteToolsParams<TContext = unknown, TData = unknown> {
29
+ tools: Array<Tool<TContext, unknown[], unknown>>;
30
+ context: TContext;
31
+ updateContext: (updates: Partial<TContext>) => Promise<void>;
32
+ history: Event[];
33
+ data?: Partial<TData>;
34
+ }
35
+
20
36
  export class ToolExecutor<TContext = unknown, TData = unknown> {
21
37
  /**
22
38
  * Execute a single tool with context and collected data
23
- * @param allowedDomains - Array of domain names allowed for this execution context (undefined = all domains allowed)
39
+ * @param params - Execution parameters
24
40
  */
25
41
  async executeTool(
26
- tool: ToolRef<TContext, unknown[], unknown>,
27
- context: TContext,
28
- updateContext: (updates: Partial<TContext>) => Promise<void>,
29
- history: Event[],
30
- data?: Partial<TData>,
31
- allowedDomains?: string[]
42
+ params: ExecuteToolParams<TContext, TData>
32
43
  ): Promise<ToolExecutionResult> {
44
+ const { tool, context, updateContext, history, data, toolArguments } =
45
+ params;
33
46
  try {
34
- // Domain enforcement: Check if tool's domain is allowed
35
- if (allowedDomains !== undefined && tool.domainName) {
36
- // allowedDomains is explicitly set (could be empty array)
37
- if (!allowedDomains.includes(tool.domainName)) {
38
- throw new Error(
39
- `Domain security violation: Tool "${
40
- tool.name
41
- }" belongs to domain "${
42
- tool.domainName
43
- }" which is not allowed in this route. Allowed domains: [${allowedDomains.join(
44
- ", "
45
- )}]`
46
- );
47
- }
48
- }
49
-
50
47
  // Build tool context with collected data
51
48
  const toolContext: ToolContext<TContext, TData> = {
52
49
  context,
@@ -55,20 +52,20 @@ export class ToolExecutor<TContext = unknown, TData = unknown> {
55
52
  data,
56
53
  };
57
54
 
58
- // Execute tool (no arguments - tools read from context/data)
59
- const result = await tool.handler(toolContext);
55
+ // Execute tool
56
+ const result = await tool.handler(toolContext, toolArguments);
60
57
 
61
58
  // Return execution result
62
59
  return {
63
- toolName: tool.name,
60
+ toolName: tool.id || "unknown",
64
61
  success: true,
65
62
  data: result.data,
66
63
  contextUpdate: result.contextUpdate,
67
- collectedUpdate: result.collectedUpdate,
64
+ dataUpdate: result.dataUpdate,
68
65
  };
69
66
  } catch (error) {
70
67
  return {
71
- toolName: tool.name,
68
+ toolName: tool.id || "unknown",
72
69
  success: false,
73
70
  error: error instanceof Error ? error.message : String(error),
74
71
  };
@@ -77,32 +74,30 @@ export class ToolExecutor<TContext = unknown, TData = unknown> {
77
74
 
78
75
  /**
79
76
  * Execute multiple tools in sequence
80
- * @param allowedDomains - Array of domain names allowed for this execution context (undefined = all domains allowed)
77
+ * @param params - Execution parameters
81
78
  */
82
79
  async executeTools(
83
- tools: Array<ToolRef<TContext, unknown[], unknown>>,
84
- context: TContext,
85
- updateContext: (updates: Partial<TContext>) => Promise<void>,
86
- history: Event[],
87
- data?: Partial<TData>,
88
- allowedDomains?: string[]
80
+ params: ExecuteToolsParams<TContext, TData>
89
81
  ): Promise<ToolExecutionResult[]> {
82
+ const { tools, context, updateContext, history, data } = params;
90
83
  const results: ToolExecutionResult[] = [];
91
84
 
92
85
  for (const tool of tools) {
93
- const result = await this.executeTool(
86
+ const result = await this.executeTool({
94
87
  tool,
95
88
  context,
96
89
  updateContext,
97
90
  history,
98
91
  data,
99
- allowedDomains
100
- );
92
+ });
101
93
  results.push(result);
102
94
 
103
95
  // If tool failed, stop execution chain
104
96
  if (!result.success) {
105
- console.error(`[ToolExecutor] Tool ${tool.name} failed:`, result.error);
97
+ console.error(
98
+ `[ToolExecutor] Tool ${tool.id || "unknown"} failed:`,
99
+ result.error
100
+ );
106
101
  break;
107
102
  }
108
103