@falai/agent 0.1.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,1134 @@
1
+ # API Reference
2
+
3
+ Complete API documentation for `@falai/agent`. This framework provides a strongly-typed, modular agent architecture with AI-powered routing and schema-driven data collection.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Core Classes](#core-classes)
8
+ - [Agent](#agent)
9
+ - [ResponseModal](#responsemodal)
10
+ - [Route](#route)
11
+ - [Step](#step)
12
+ - [RoutingEngine](#routingengine)
13
+ - [ResponseEngine](#responseengine)
14
+ - [PromptComposer](#promptcomposer)
15
+
16
+ - [AI Providers](#ai-providers)
17
+ - [Persistence Adapters](#persistence-adapters)
18
+ - [Types & Interfaces](#types--interfaces)
19
+ - [Utilities](#utilities)
20
+
21
+ ---
22
+
23
+ ## Core Classes
24
+
25
+ ### Agent
26
+
27
+ The central orchestrator class that manages conversation flow, routing, tool execution, and agent-level data collection.
28
+
29
+ #### Constructor
30
+
31
+ ```typescript
32
+ new Agent<TContext = unknown, TData = unknown>(options: AgentOptions<TContext, TData>)
33
+ ```
34
+
35
+ #### Properties
36
+
37
+ - `name: string` - Agent display name
38
+ - `description?: string` - Detailed description
39
+ - `goal?: string` - Primary objective
40
+ - `context?: TContext` - Static context data
41
+ - `session?: SessionState` - Current session state
42
+
43
+ #### Methods
44
+
45
+ ##### Route Management
46
+
47
+ ```typescript
48
+ createRoute(options: RouteOptions<TContext, TData>): Route<TContext, TData>
49
+ ```
50
+
51
+ Creates a new conversation route with required fields specification that references the agent-level schema.
52
+
53
+ ##### Context Management
54
+
55
+ ```typescript
56
+ updateContext(updates: Partial<TContext>): Promise<void>
57
+ ```
58
+
59
+ Updates agent context and triggers lifecycle hooks.
60
+
61
+ ```typescript
62
+ getContext(): Promise<TContext | undefined>
63
+ ```
64
+
65
+ Gets current context, fetching from provider if configured.
66
+
67
+ ##### Agent-Level Data Management
68
+
69
+ ```typescript
70
+ getCollectedData(): Partial<TData>
71
+ ```
72
+
73
+ Gets the current agent-level collected data.
74
+
75
+ ```typescript
76
+ updateCollectedData(updates: Partial<TData>): Promise<void>
77
+ ```
78
+
79
+ Updates agent-level collected data and triggers validation and lifecycle hooks.
80
+
81
+ ```typescript
82
+ validateData(data: Partial<TData>): ValidationResult
83
+ ```
84
+
85
+ Validates data against the agent-level schema, returning detailed validation results.
86
+
87
+ ##### Response Generation
88
+
89
+ ```typescript
90
+ respond(params: {
91
+ history: Event[];
92
+ session?: SessionState;
93
+ contextOverride?: Partial<TContext>;
94
+ signal?: AbortSignal;
95
+ }): Promise<{
96
+ message: string;
97
+ session?: SessionState;
98
+ toolCalls?: ToolCall[];
99
+ isRouteComplete?: boolean;
100
+ }>
101
+ ```
102
+
103
+ Generates a single response based on conversation history.
104
+
105
+ ```typescript
106
+ respondStream(params: {
107
+ history: Event[];
108
+ session?: SessionState;
109
+ contextOverride?: Partial<TContext>;
110
+ signal?: AbortSignal;
111
+ }): AsyncGenerator<{
112
+ delta: string;
113
+ accumulated: string;
114
+ done: boolean;
115
+ session?: SessionState;
116
+ toolCalls?: ToolCall[];
117
+ isRouteComplete?: boolean;
118
+ }>
119
+ ```
120
+
121
+ Generates a streaming response with real-time updates. **Note:** Now delegates to internal ResponseModal class.
122
+
123
+ ```typescript
124
+ stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
125
+ ```
126
+
127
+ **NEW:** Modern streaming API with automatic session management. Recommended for new implementations.
128
+
129
+ ```typescript
130
+ // Simple streaming
131
+ for await (const chunk of agent.stream("Hello")) {
132
+ console.log(chunk.delta);
133
+ }
134
+ ```
135
+
136
+ ##### Tool Management
137
+
138
+ ```typescript
139
+ addTool(definition: Tool<TContext, TData, TResult>): this
140
+ tool: ToolManager<TContext, TData> // Access to ToolManager instance
141
+ ```
142
+
143
+ **Comprehensive Tool Examples:**
144
+
145
+ ```typescript
146
+ // 1. Simple return value (most common)
147
+ agent.addTool({
148
+ id: "calculate_tip",
149
+ description: "Calculate tip amount",
150
+ handler: async ({ context, data }, args) => {
151
+ const tip = args.amount * args.percentage;
152
+ return `Tip: $${tip.toFixed(2)}`; // Simple string return
153
+ }
154
+ });
155
+
156
+ // 2. Complex ToolResult pattern
157
+ agent.addTool({
158
+ id: "process_order",
159
+ description: "Process customer order",
160
+ handler: async ({ context, data }, args) => {
161
+ const order = await orderService.process(args.items);
162
+ return {
163
+ data: `Order ${order.id} processed successfully`,
164
+ success: true,
165
+ contextUpdate: { lastOrderId: order.id },
166
+ dataUpdate: { orderStatus: 'processed' }
167
+ }; // Detailed ToolResult object
168
+ }
169
+ });
170
+
171
+ // 3. Registry for reuse
172
+ agent.tool.register({
173
+ id: "send_notification",
174
+ description: "Send notification to user",
175
+ handler: async ({ context }, args) => {
176
+ await notificationService.send(context.userId, args.message);
177
+ return "Notification sent"; // Simple return
178
+ }
179
+ });
180
+
181
+ // 4. Pattern helper
182
+ const validationTool = agent.tool.createValidation({
183
+ id: "validate_email",
184
+ fields: ['email'],
185
+ validator: async (context, data) => ({
186
+ valid: /\S+@\S+\.\S+/.test(data.email),
187
+ errors: []
188
+ })
189
+ });
190
+ agent.tool.register(validationTool);
191
+ ```
192
+
193
+ ##### Domain Knowledge
194
+
195
+ ```typescript
196
+ createTerm(term: Term<TContext>): this
197
+ createGuideline(guideline: Guideline<TContext>): this
198
+ getTerms(): Term<TContext>[]
199
+ getGuidelines(): Guideline<TContext>[]
200
+ getKnowledgeBase(): Record<string, unknown>
201
+ ```
202
+
203
+ ##### Session Management
204
+
205
+ ```typescript
206
+ setCurrentSession(session: SessionState): void
207
+ getCurrentSession(): SessionState | undefined
208
+ clearCurrentSession(): void
209
+ getData<TData = unknown>(routeId?: string): Partial<TData>
210
+ ```
211
+
212
+ ##### Route Transitions
213
+
214
+ ```typescript
215
+ nextStepRoute(
216
+ routeIdOrTitle: string,
217
+ session?: SessionState,
218
+ condition?: Template<TContext, unknown>,
219
+ history?: Event[]
220
+ ): Promise<SessionState>
221
+ ```
222
+
223
+ Manually transitions to a different route.
224
+
225
+ ##### Persistence
226
+
227
+ ```typescript
228
+ getPersistenceManager(): PersistenceManager | undefined
229
+ hasPersistence(): boolean
230
+ ```
231
+
232
+ ---
233
+
234
+ ### ResponseModal
235
+
236
+ **NEW:** Internal class that centralizes all response generation logic for improved architecture and maintainability.
237
+
238
+ #### Constructor
239
+
240
+ ```typescript
241
+ new ResponseModal<TContext = unknown, TData = unknown>(
242
+ agent: Agent<TContext, TData>,
243
+ options?: ResponseModalOptions
244
+ )
245
+ ```
246
+
247
+ #### Methods
248
+
249
+ ##### Modern APIs (Recommended)
250
+
251
+ ```typescript
252
+ stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
253
+ generate(message?: string, options?: GenerateOptions<TContext>): Promise<AgentResponse<TData>>
254
+ ```
255
+
256
+ Modern streaming and non-streaming APIs with automatic session management.
257
+
258
+ ##### Legacy APIs (Backward Compatible)
259
+
260
+ ```typescript
261
+ respond(params: RespondParams<TContext, TData>): Promise<AgentResponse<TData>>
262
+ respondStream(params: RespondParams<TContext, TData>): AsyncGenerator<AgentResponseStreamChunk<TData>>
263
+ ```
264
+
265
+ Legacy APIs that maintain full backward compatibility with existing code.
266
+
267
+ ##### Error Handling
268
+
269
+ ```typescript
270
+ ResponseGenerationError: Error class for response-specific errors
271
+ ```
272
+
273
+ Comprehensive error handling with detailed context and phase information.
274
+
275
+ #### Key Features
276
+
277
+ - **Unified Logic**: Both streaming and non-streaming use the same underlying logic
278
+ - **Modern APIs**: Simple `stream()` and `generate()` methods for new code
279
+ - **Backward Compatibility**: Existing `respond()` and `respondStream()` methods work unchanged
280
+ - **Error Handling**: Detailed error context with phase and original error information
281
+ - **Performance**: Optimized response pipeline with minimal code duplication
282
+
283
+ ---
284
+
285
+ ### Route
286
+
287
+ Represents a conversational journey with required fields specification and steps that collect data into the agent-level schema.
288
+
289
+ #### Constructor
290
+
291
+ ```typescript
292
+ new Route<TContext = unknown, TData = unknown>(options: RouteOptions<TContext, TData>)
293
+ ```
294
+
295
+ #### Properties
296
+
297
+ - `id: string` - Unique route identifier
298
+ - `title: string` - Human-readable title
299
+ - `description?: string` - Detailed description
300
+ - `identity?: Template<TContext, TData>` - Route-specific identity
301
+ - `personality?: Template<TContext, TData>` - Route-specific personality
302
+ - `initialStep: Step<TContext, TData>` - Entry point for the route
303
+
304
+ #### Methods
305
+
306
+ ##### Step Management
307
+
308
+ ```typescript
309
+ createStep(options: StepOptions<TContext, TData>): Step<TContext, TData>
310
+ getStep(stepId: string): Step<TContext, TData> | undefined
311
+ getAllSteps(): Step<TContext, TData>[]
312
+ ```
313
+
314
+ ##### Route Completion Logic
315
+
316
+ ```typescript
317
+ isComplete(data: Partial<TData>): boolean
318
+ ```
319
+
320
+ Checks if the route is complete based on agent-level data.
321
+
322
+ ```typescript
323
+ getMissingRequiredFields(data: Partial<TData>): (keyof TData)[]
324
+ ```
325
+
326
+ Returns the fields still needed for route completion.
327
+
328
+ ```typescript
329
+ getCompletionProgress(data: Partial<TData>): number
330
+ ```
331
+
332
+ Returns completion progress as a number between 0 and 1.
333
+
334
+ ##### Data Collection
335
+
336
+ ```typescript
337
+ getRules(): Template<TContext, TData>[]
338
+ getProhibitions(): Template<TContext, TData>[]
339
+ getTerms(): Term<TContext>[]
340
+ getKnowledgeBase(): Record<string, unknown>
341
+ ```
342
+
343
+ ##### Schema & Validation
344
+
345
+ ```typescript
346
+ getResponseOutputSchema(): StructuredSchema | undefined
347
+ getRoutingExtrasSchema(): StructuredSchema | undefined
348
+ ```
349
+
350
+ ##### Tool Management
351
+
352
+ ```typescript
353
+ addTool(definition: Tool<TContext, TData, TResult>): this
354
+ ```
355
+
356
+ ##### Lifecycle Hooks
357
+
358
+ ```typescript
359
+ handleDataUpdate(data: Partial<TData>, previousData: Partial<TData>): Promise<Partial<TData>>
360
+ handleContextUpdate(newContext: TContext, previousContext: TContext): Promise<void>
361
+ evaluateOnComplete(session: { data?: Partial<TData> }, context?: TContext): Promise<RouteTransitionConfig | undefined>
362
+ ```
363
+
364
+ ---
365
+
366
+ ### Step
367
+
368
+ Represents an individual conversation state within a route.
369
+
370
+ #### Constructor
371
+
372
+ ```typescript
373
+ new Step<TContext = unknown, TData = unknown>(routeId: string, options?: StepOptions<TContext, TData>)
374
+ ```
375
+
376
+ #### Properties
377
+
378
+ - `id: string` - Unique step identifier
379
+ - `routeId: string` - Parent route identifier
380
+ - `description?: string` - Human-readable description
381
+ - `collect?: string[]` - Fields to extract from AI responses
382
+ - `requires?: string[]` - Required data fields
383
+ - `prompt?: Template<TContext, TData>` - Step-specific prompt
384
+ - `tools?: (string | Tool)[]` - Step-specific tools
385
+
386
+ #### Methods
387
+
388
+ ##### Configuration
389
+
390
+ ```typescript
391
+ configure(config: Partial<StepOptions<TContext, TData>>): this
392
+ ```
393
+
394
+ ##### Transitions
395
+
396
+ ```typescript
397
+ nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
398
+ branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
399
+ endRoute(options?: Omit<StepOptions<TContext, TData>, 'step'>): StepResult<TContext, TData>
400
+ ```
401
+
402
+ ##### Validation
403
+
404
+ ```typescript
405
+ shouldSkip(data: Partial<TData>): boolean
406
+ hasRequires(data: Partial<TData>): boolean
407
+ ```
408
+
409
+ ##### Tool Management
410
+
411
+ ```typescript
412
+ addGuideline(guideline: Guideline<TContext>): void
413
+ getGuidelines(): Guideline<TContext>[]
414
+ getTransitions(): Step<TContext, TData>[]
415
+ ```
416
+
417
+ ##### References
418
+
419
+ ```typescript
420
+ getRef(): StepRef
421
+ ```
422
+
423
+ ---
424
+
425
+ ### StepResult
426
+
427
+ Result interface returned by step transition methods that enables fluent chaining of conversation flows.
428
+
429
+ #### Interface
430
+
431
+ ```typescript
432
+ interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
433
+ nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
434
+ branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
435
+ endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
436
+ }
437
+ ```
438
+
439
+ #### Methods
440
+
441
+ ##### Chaining
442
+
443
+ ```typescript
444
+ nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
445
+ ```
446
+
447
+ Creates a transition and returns a chainable result for building linear flows.
448
+
449
+ ##### Branching
450
+
451
+ ```typescript
452
+ branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
453
+ ```
454
+
455
+ Creates multiple conditional branches for complex conversation flows.
456
+
457
+ ##### Route Completion
458
+
459
+ ```typescript
460
+ endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>
461
+ ```
462
+
463
+ Shortcut method to end the current route with optional completion configuration.
464
+
465
+ #### Properties
466
+
467
+ Inherits from `StepRef`:
468
+
469
+ - `id: string` - Step identifier
470
+ - `routeId: string` - Route this step belongs to
471
+
472
+ ---
473
+
474
+ ### RoutingEngine
475
+
476
+ AI-powered routing system that intelligently selects routes and steps based on conversation context.
477
+
478
+ #### Constructor
479
+
480
+ ```typescript
481
+ new RoutingEngine(options?: RoutingEngineOptions)
482
+ ```
483
+
484
+ #### Methods
485
+
486
+ ##### Route Selection
487
+
488
+ ```typescript
489
+ decideRouteAndStep(params: {
490
+ routes: Route[];
491
+ session: SessionState;
492
+ history: Event[];
493
+ agentOptions?: AgentOptions;
494
+ provider: AiProvider;
495
+ context: unknown;
496
+ signal?: AbortSignal;
497
+ }): Promise<{
498
+ selectedRoute?: Route;
499
+ selectedStep?: Step;
500
+ responseDirectives?: string[];
501
+ session: SessionState;
502
+ isRouteComplete?: boolean;
503
+ }>
504
+ ```
505
+
506
+ ##### Single Route Optimization
507
+
508
+ ```typescript
509
+ decideSingleRouteStep(params: {
510
+ route: Route;
511
+ session: SessionState;
512
+ history: Event[];
513
+ agentOptions?: AgentOptions;
514
+ provider: AiProvider;
515
+ context: unknown;
516
+ signal?: AbortSignal;
517
+ }): Promise<{
518
+ selectedRoute?: Route;
519
+ selectedStep?: Step;
520
+ responseDirectives?: string[];
521
+ session: SessionState;
522
+ isRouteComplete?: boolean;
523
+ }>
524
+ ```
525
+
526
+ ##### Candidate Discovery
527
+
528
+ ```typescript
529
+ getCandidateSteps<TData>(
530
+ route: Route,
531
+ currentStep: Step | undefined,
532
+ data: Partial<TData>
533
+ ): CandidateStep[]
534
+ ```
535
+
536
+ ##### Prompt Generation
537
+
538
+ ```typescript
539
+ buildRoutingPrompt(params: BuildRoutingPromptParams): Promise<string>
540
+ buildStepSelectionPrompt(params: BuildStepSelectionPromptParams): Promise<string>
541
+ ```
542
+
543
+ ---
544
+
545
+ ### ResponseEngine
546
+
547
+ Handles prompt composition and response schema generation for AI interactions.
548
+
549
+ #### Methods
550
+
551
+ ##### Schema Generation
552
+
553
+ ```typescript
554
+ responseSchemaForRoute(route: Route, currentStep?: Step): StructuredSchema
555
+ ```
556
+
557
+ ##### Prompt Building
558
+
559
+ ```typescript
560
+ buildResponsePrompt(params: BuildResponsePromptParams): Promise<string>
561
+ buildFallbackPrompt(params: BuildFallbackPromptParams): Promise<string>
562
+ ```
563
+
564
+ ---
565
+
566
+ ### PromptComposer
567
+
568
+ Utility for composing structured prompts with agent metadata, knowledge, and context.
569
+
570
+ #### Constructor
571
+
572
+ ```typescript
573
+ new PromptComposer<TContext = unknown, TData = unknown>(context?: TemplateContext<TContext, TData>)
574
+ ```
575
+
576
+ #### Methods
577
+
578
+ ##### Metadata Addition
579
+
580
+ ```typescript
581
+ addAgentMeta(agent: AgentOptions): Promise<this>
582
+ addGlossary(terms: Term[]): Promise<this>
583
+ addGuidelines(guidelines: Guideline[]): Promise<this>
584
+ addKnowledgeBase(agentKb?: Record<string, unknown>, routeKb?: Record<string, unknown>): Promise<this>
585
+ ```
586
+
587
+ ##### Content Addition
588
+
589
+ ```typescript
590
+ addInstruction(text: string): Promise<this>
591
+ addInteractionHistory(history: Event[], note?: string): Promise<this>
592
+ addLastMessage(message: string): Promise<this>
593
+ addRoutingOverview(routes: Route[]): Promise<this>
594
+ addDirectives(directives?: string[]): Promise<this>
595
+ ```
596
+
597
+ ##### Finalization
598
+
599
+ ```typescript
600
+ build(): Promise<string>
601
+ ```
602
+
603
+
604
+
605
+ ---
606
+
607
+ ## AI Providers
608
+
609
+ ### OpenAIProvider
610
+
611
+ ```typescript
612
+ new OpenAIProvider(options: OpenAIProviderOptions)
613
+
614
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
615
+ generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
616
+ ```
617
+
618
+ ### GeminiProvider
619
+
620
+ ```typescript
621
+ new GeminiProvider(options: GeminiProviderOptions)
622
+
623
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
624
+ generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
625
+ ```
626
+
627
+ ### AnthropicProvider
628
+
629
+ ```typescript
630
+ new AnthropicProvider(options: AnthropicProviderOptions)
631
+
632
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
633
+ generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
634
+ ```
635
+
636
+ ### OpenRouterProvider
637
+
638
+ ```typescript
639
+ new OpenRouterProvider(options: OpenRouterProviderOptions)
640
+
641
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
642
+ generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
643
+ ```
644
+
645
+ ---
646
+
647
+ ## Persistence Adapters
648
+
649
+ ### PrismaAdapter
650
+
651
+ ```typescript
652
+ new PrismaAdapter(options: {
653
+ prisma: PrismaClient;
654
+ tables?: { sessions?: string; messages?: string };
655
+ fieldMappings?: FieldMappings;
656
+ })
657
+
658
+ sessionRepository: SessionRepository
659
+ messageRepository: MessageRepository
660
+ ```
661
+
662
+ ### RedisAdapter
663
+
664
+ ```typescript
665
+ new RedisAdapter(options: {
666
+ redis: Redis;
667
+ keyPrefix?: string;
668
+ sessionTTL?: number;
669
+ messageTTL?: number;
670
+ })
671
+
672
+ sessionRepository: SessionRepository
673
+ messageRepository: MessageRepository
674
+ ```
675
+
676
+ ### MongoAdapter
677
+
678
+ ```typescript
679
+ new MongoAdapter(options: {
680
+ client: MongoClient;
681
+ databaseName: string;
682
+ collections?: { sessions?: string; messages?: string };
683
+ })
684
+
685
+ sessionRepository: SessionRepository
686
+ messageRepository: MessageRepository
687
+ ```
688
+
689
+ ### PostgreSQLAdapter
690
+
691
+ ```typescript
692
+ new PostgreSQLAdapter(options: {
693
+ client: Client;
694
+ tables?: { sessions?: string; messages?: string };
695
+ })
696
+
697
+ sessionRepository: SessionRepository
698
+ messageRepository: MessageRepository
699
+
700
+ initialize(): Promise<void> // Auto-create tables
701
+ ```
702
+
703
+ ### SQLiteAdapter
704
+
705
+ ```typescript
706
+ new SQLiteAdapter(options: { db: Database })
707
+
708
+ sessionRepository: SessionRepository
709
+ messageRepository: MessageRepository
710
+
711
+ initialize(): Promise<void> // Auto-create tables
712
+ ```
713
+
714
+ ### OpenSearchAdapter
715
+
716
+ ```typescript
717
+ new OpenSearchAdapter(client: Client, options: {
718
+ indices?: { sessions?: string; messages?: string };
719
+ autoCreateIndices?: boolean;
720
+ refresh?: string;
721
+ })
722
+
723
+ sessionRepository: SessionRepository
724
+ messageRepository: MessageRepository
725
+ ```
726
+
727
+ ### MemoryAdapter
728
+
729
+ ```typescript
730
+ new MemoryAdapter()
731
+
732
+ sessionRepository: SessionRepository
733
+ messageRepository: MessageRepository
734
+
735
+ clear(): void
736
+ getSnapshot(): { sessions: SessionData[]; messages: MessageData[] }
737
+ ```
738
+
739
+ ---
740
+
741
+ ## Types & Interfaces
742
+
743
+ ### Core Types
744
+
745
+ ```typescript
746
+ interface AgentOptions<TContext = unknown, TData = unknown> {
747
+ name: string;
748
+ provider: AiProvider;
749
+ description?: string;
750
+ goal?: string;
751
+ personality?: Template<TContext, TData>;
752
+ identity?: Template<TContext, TData>;
753
+ context?: TContext;
754
+ contextProvider?: ContextProvider<TContext>;
755
+
756
+ // NEW: Agent-level data schema and initial data
757
+ schema?: StructuredSchema;
758
+ initialData?: Partial<TData>;
759
+
760
+ hooks?: ContextLifecycleHooks<TContext, TData>;
761
+ debug?: boolean;
762
+ session?: SessionState;
763
+ persistence?: PersistenceConfig;
764
+ terms?: Term<TContext>[];
765
+ guidelines?: Guideline<TContext>[];
766
+ tools?: Tool<TContext, unknown[], unknown, TData>[];
767
+ routes?: RouteOptions<TContext, TData>[];
768
+ knowledgeBase?: Record<string, unknown>;
769
+ }
770
+
771
+ interface RouteOptions<TContext = unknown, TData = unknown> {
772
+ id?: string;
773
+ title: string;
774
+ description?: string;
775
+ identity?: Template<TContext, TData>;
776
+ personality?: Template<TContext, TData>;
777
+ when?: ConditionTemplate<TContext, TData>;
778
+ skipIf?: ConditionTemplate<TContext, TData>;
779
+ rules?: Template<TContext, TData>[];
780
+ prohibitions?: Template<TContext, TData>[];
781
+
782
+ // NEW: Required fields for route completion (replaces schema)
783
+ requiredFields?: (keyof TData)[];
784
+ optionalFields?: (keyof TData)[];
785
+
786
+ // REMOVED: schema (now at agent level)
787
+ // schema?: StructuredSchema;
788
+
789
+ initialData?: Partial<TData>;
790
+ steps?: StepOptions<TContext, TData>[];
791
+ initialStep?: Omit<StepOptions<TContext, TData>, "step">;
792
+ endStep?: Omit<StepOptions<TContext, TData>, "step" | "condition" | "skipIf">;
793
+ onComplete?: string | RouteTransitionConfig | RouteCompletionHandler;
794
+ hooks?: RouteLifecycleHooks<TContext, TData>;
795
+ guidelines?: Guideline<TContext>[];
796
+ terms?: Term<TContext>[];
797
+ tools?: Tool<TContext, unknown[], unknown, TData>[];
798
+ knowledgeBase?: Record<string, unknown>;
799
+ }
800
+
801
+ interface StepOptions<TContext = unknown, TData = unknown> {
802
+ id?: string;
803
+ description?: string;
804
+ prompt?: Template<TContext, TData>;
805
+ collect?: string[];
806
+ skipIf?: (data: Partial<TData>) => boolean;
807
+ requires?: string[];
808
+ when?: Template<TContext, TData>;
809
+ prepare?: string | Tool<TContext, unknown[], unknown, TData> | ((
810
+ context: TContext,
811
+ data?: Partial<TData>
812
+ ) => void | Promise<void>);
813
+ finalize?: string | Tool<TContext, unknown[], unknown, TData> | ((
814
+ context: TContext,
815
+ data?: Partial<TData>
816
+ ) => void | Promise<void>);
817
+ tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
818
+ }
819
+
820
+ interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
821
+ nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
822
+ branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
823
+ endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
824
+ }
825
+
826
+ interface BranchResult<TContext = unknown, TData = unknown> {
827
+ [branchName: string]: StepResult<TContext, TData>;
828
+ }
829
+
830
+ interface BranchSpec<TContext = unknown, TData = unknown> {
831
+ name: string;
832
+ id?: string;
833
+ step: StepOptions<TContext, TData>;
834
+ }
835
+
836
+ interface StepRef {
837
+ id: string;
838
+ routeId: string;
839
+ }
840
+
841
+ interface RouteRef {
842
+ id: string;
843
+ }
844
+
845
+ // ==============================================================================
846
+ // LIFECYCLE HOOKS: prepare & finalize
847
+ // ==============================================================================
848
+
849
+ /**
850
+ * Step lifecycle hooks allow you to execute custom logic before and after AI responses.
851
+ * Both prepare and finalize can be functions, tool references, or inline tool definitions.
852
+ */
853
+
854
+ // Example: Using functions (traditional approach)
855
+ {
856
+ prepare: (context, data) => {
857
+ console.log("Preparing step execution...");
858
+ },
859
+ finalize: (context, data) => {
860
+ console.log("Finalizing step execution...");
861
+ }
862
+ }
863
+
864
+ // Example: Using existing tools (unified Tool interface)
865
+ {
866
+ prepare: "validate_user_data", // Tool ID string - simple return value
867
+ finalize: "send_notification", // Tool ID string - ToolResult pattern
868
+ }
869
+
870
+ // Example: Inline tool definition with flexible returns
871
+ {
872
+ prepare: {
873
+ id: "setup_step_context",
874
+ description: "Prepare context for this step",
875
+ parameters: { type: "object", properties: {} },
876
+ handler: ({ context, data }) => {
877
+ // Simple return value
878
+ return "Setup complete";
879
+ }
880
+ },
881
+ finalize: {
882
+ id: "cleanup_step_context",
883
+ description: "Clean up after step completion",
884
+ handler: ({ context, data }) => {
885
+ // Complex ToolResult pattern
886
+ return {
887
+ data: "Cleanup complete",
888
+ success: true,
889
+ contextUpdate: { lastCleanup: new Date() }
890
+ };
891
+ }
892
+ }
893
+ }
894
+ ```
895
+
896
+ ### Session Types
897
+
898
+ ```typescript
899
+ interface SessionState<TData = unknown> {
900
+ id?: string;
901
+ data: Partial<TData>;
902
+ dataByRoute: Record<string, Partial<TData>>;
903
+ routeHistory: RouteHistoryEntry[];
904
+ currentRoute?: RouteRef;
905
+ currentStep?: StepRef;
906
+ metadata?: SessionMetadata;
907
+ }
908
+
909
+ interface SessionData {
910
+ id: string;
911
+ userId?: string;
912
+ agentName?: string;
913
+ status: SessionStatus;
914
+ currentRoute?: string;
915
+ currentStep?: string;
916
+ collectedData?: Record<string, unknown>;
917
+ messageCount: number;
918
+ lastMessageAt?: Date;
919
+ completedAt?: Date;
920
+ createdAt: Date;
921
+ updatedAt: Date;
922
+ }
923
+ ```
924
+
925
+ ### Tool Types
926
+
927
+ ```typescript
928
+ interface Tool<TContext, TArgs extends unknown[], TResult, TData> {
929
+ id: string;
930
+ description: string;
931
+ parameters: StructuredSchema;
932
+ execute: ToolHandler<TContext, TArgs, TResult, TData>;
933
+ }
934
+
935
+ type ToolHandler<TContext, TArgs extends unknown[], TResult, TData> = (
936
+ args: TArgs[0],
937
+ context: {
938
+ context: TContext;
939
+ data: Partial<TData>;
940
+ }
941
+ ) => Promise<{
942
+ data: unknown;
943
+ contextUpdate?: Partial<TContext>;
944
+ dataUpdate?: Partial<TData>;
945
+ }>;
946
+ ```
947
+
948
+ ### AI Provider Types
949
+
950
+ ```typescript
951
+ interface AiProvider {
952
+ name: string;
953
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>;
954
+ generateMessageStream(
955
+ input: GenerateMessageInput
956
+ ): AsyncGenerator<GenerateMessageStreamChunk>;
957
+ }
958
+
959
+ interface GenerateMessageInput<TContext = unknown> {
960
+ prompt: string;
961
+ history: Event[];
962
+ context?: TContext;
963
+ tools?: ToolDefinition[];
964
+ parameters?: {
965
+ jsonSchema?: StructuredSchema;
966
+ schemaName?: string;
967
+ maxOutputTokens?: number;
968
+ reasoning?: { effort: "low" | "medium" | "high" };
969
+ };
970
+ signal?: AbortSignal;
971
+ }
972
+ ```
973
+
974
+ ---
975
+
976
+ ## Utilities
977
+
978
+ ### Session Utilities
979
+
980
+ ```typescript
981
+ createSession<TData = unknown>(initialData?: {
982
+ data?: Partial<TData>;
983
+ metadata?: SessionMetadata;
984
+ }): SessionState<TData>
985
+
986
+ enterRoute<TData>(
987
+ session: SessionState<TData>,
988
+ routeId: string,
989
+ routeTitle: string
990
+ ): SessionState<TData>
991
+
992
+ enterStep<TData>(
993
+ session: SessionState<TData>,
994
+ stepId: string,
995
+ stepDescription?: string
996
+ ): SessionState<TData>
997
+
998
+ mergeCollected<TData>(
999
+ session: SessionState<TData>,
1000
+ data: Partial<TData>
1001
+ ): SessionState<TData>
1002
+ ```
1003
+
1004
+ ### Template Utilities
1005
+
1006
+ ```typescript
1007
+ render<TContext, TData>(
1008
+ template: Template<TContext, TData> | undefined,
1009
+ params: TemplateContext<TContext, TData>
1010
+ ): Promise<string>
1011
+
1012
+ renderMany<TContext, TData>(
1013
+ templates: Template<TContext, TData>[] | undefined,
1014
+ params: TemplateContext<TContext, TData>
1015
+ ): Promise<string[]>
1016
+
1017
+ formatKnowledgeBase(
1018
+ data: Record<string, unknown>,
1019
+ title?: string,
1020
+ maxDepth?: number
1021
+ ): string
1022
+ ```
1023
+
1024
+ ### ID Generators
1025
+
1026
+ ```typescript
1027
+ generateRouteId(title: string): string
1028
+ generateStepId(routeId: string, description?: string): string
1029
+ generateToolId(name: string): string
1030
+ ```
1031
+
1032
+ ## Agent-Level Data Collection Example
1033
+
1034
+ Here's a comprehensive example showing the new agent-level data collection architecture:
1035
+
1036
+ ```typescript
1037
+ import { Agent, OpenAIProvider } from "@falai/agent";
1038
+
1039
+ // Define comprehensive agent-level data interface
1040
+ interface CustomerServiceData {
1041
+ // Customer identification
1042
+ customerId?: string;
1043
+ customerName?: string;
1044
+ email?: string;
1045
+ phone?: string;
1046
+
1047
+ // Issue tracking
1048
+ issueType?: 'booking' | 'billing' | 'technical' | 'other';
1049
+ issueDescription?: string;
1050
+ priority?: 'low' | 'medium' | 'high';
1051
+
1052
+ // Feedback
1053
+ rating?: number;
1054
+ comments?: string;
1055
+ recommendToFriend?: boolean;
1056
+ }
1057
+
1058
+ // Create agent with centralized schema
1059
+ const agent = new Agent<{}, CustomerServiceData>({
1060
+ name: "Customer Service Agent",
1061
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY, model: "gpt-4" }),
1062
+
1063
+ // Agent-level schema defines all possible data fields
1064
+ schema: {
1065
+ type: "object",
1066
+ properties: {
1067
+ customerId: { type: "string" },
1068
+ customerName: { type: "string" },
1069
+ email: { type: "string", format: "email" },
1070
+ phone: { type: "string" },
1071
+ issueType: { type: "string", enum: ["booking", "billing", "technical", "other"] },
1072
+ issueDescription: { type: "string" },
1073
+ priority: { type: "string", enum: ["low", "medium", "high"] },
1074
+ rating: { type: "number", minimum: 1, maximum: 5 },
1075
+ comments: { type: "string" },
1076
+ recommendToFriend: { type: "boolean" }
1077
+ }
1078
+ },
1079
+
1080
+ // Agent-level data validation and enrichment
1081
+ hooks: {
1082
+ onDataUpdate: async (data, previousData) => {
1083
+ // Auto-set priority based on issue type
1084
+ if (data.issueType === 'billing' && !data.priority) {
1085
+ data.priority = 'high';
1086
+ }
1087
+
1088
+ // Enrich customer data
1089
+ if (data.customerName && !data.customerId) {
1090
+ data.customerId = await lookupCustomerId(data.customerName);
1091
+ }
1092
+
1093
+ return data;
1094
+ }
1095
+ }
1096
+ });
1097
+
1098
+ // Routes specify required fields instead of schemas
1099
+ const supportRoute = agent.createRoute({
1100
+ title: "Customer Support",
1101
+ requiredFields: ["customerName", "email", "issueType", "issueDescription"],
1102
+ optionalFields: ["phone", "priority"],
1103
+
1104
+ initialStep: {
1105
+ prompt: "I'm here to help with your issue. Can you tell me your name and email?",
1106
+ collect: ["customerName", "email"]
1107
+ }
1108
+ });
1109
+
1110
+ const feedbackRoute = agent.createRoute({
1111
+ title: "Feedback Collection",
1112
+ requiredFields: ["customerName", "email", "rating"],
1113
+ optionalFields: ["comments", "recommendToFriend"],
1114
+
1115
+ initialStep: {
1116
+ prompt: "I'd love to get your feedback. What's your name and email?",
1117
+ collect: ["customerName", "email"]
1118
+ }
1119
+ });
1120
+
1121
+ // Cross-route data sharing example
1122
+ const response1 = await agent.respond("Hi, I'm John Doe, email john@example.com, I have a billing issue");
1123
+ // Agent data: { customerName: "John Doe", email: "john@example.com", issueType: "billing" }
1124
+
1125
+ const response2 = await agent.respond("Actually, I want to leave feedback instead. I'd rate you 5 stars.");
1126
+ // Feedback route completes immediately: already has name, email, and now rating
1127
+ // { customerName: "John Doe", email: "john@example.com", rating: 5 }
1128
+
1129
+ // Check route completion
1130
+ console.log(feedbackRoute.isComplete(agent.getCollectedData())); // true
1131
+ console.log(feedbackRoute.getCompletionProgress(agent.getCollectedData())); // 1.0
1132
+ ```
1133
+
1134
+ This API reference covers the complete @falai/agent framework. For more detailed examples and usage patterns, see the [examples directory](../../examples/) and [guides](../../docs/guides/).