@falai/agent 1.2.7 → 2.0.0

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 (508) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1196 -1015
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +524 -134
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/GeminiProvider.d.ts +3 -3
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +16 -14
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/types/agent.d.ts +183 -54
  130. package/dist/cjs/types/agent.d.ts.map +1 -1
  131. package/dist/cjs/types/agent.js +0 -6
  132. package/dist/cjs/types/agent.js.map +1 -1
  133. package/dist/cjs/types/ai.d.ts +3 -3
  134. package/dist/cjs/types/ai.d.ts.map +1 -1
  135. package/dist/cjs/types/errors.d.ts +15 -0
  136. package/dist/cjs/types/errors.d.ts.map +1 -0
  137. package/dist/cjs/types/errors.js +22 -0
  138. package/dist/cjs/types/errors.js.map +1 -0
  139. package/dist/cjs/types/flow.d.ts +513 -0
  140. package/dist/cjs/types/flow.d.ts.map +1 -0
  141. package/dist/cjs/types/{route.js → flow.js} +2 -2
  142. package/dist/cjs/types/flow.js.map +1 -0
  143. package/dist/cjs/types/index.d.ts +7 -6
  144. package/dist/cjs/types/index.d.ts.map +1 -1
  145. package/dist/cjs/types/index.js +6 -2
  146. package/dist/cjs/types/index.js.map +1 -1
  147. package/dist/cjs/types/persistence.d.ts +11 -7
  148. package/dist/cjs/types/persistence.d.ts.map +1 -1
  149. package/dist/cjs/types/routing.d.ts +1 -1
  150. package/dist/cjs/types/routing.d.ts.map +1 -1
  151. package/dist/cjs/types/session.d.ts +24 -23
  152. package/dist/cjs/types/session.d.ts.map +1 -1
  153. package/dist/cjs/types/signals.d.ts +248 -0
  154. package/dist/cjs/types/signals.d.ts.map +1 -0
  155. package/dist/cjs/types/signals.js +11 -0
  156. package/dist/cjs/types/signals.js.map +1 -0
  157. package/dist/cjs/types/template.d.ts +2 -8
  158. package/dist/cjs/types/template.d.ts.map +1 -1
  159. package/dist/cjs/types/tool.d.ts +36 -29
  160. package/dist/cjs/types/tool.d.ts.map +1 -1
  161. package/dist/cjs/types/tool.js +1 -1
  162. package/dist/cjs/types/tool.js.map +1 -1
  163. package/dist/cjs/utils/condition.d.ts +7 -1
  164. package/dist/cjs/utils/condition.d.ts.map +1 -1
  165. package/dist/cjs/utils/condition.js.map +1 -1
  166. package/dist/cjs/utils/id.d.ts +13 -5
  167. package/dist/cjs/utils/id.d.ts.map +1 -1
  168. package/dist/cjs/utils/id.js +24 -10
  169. package/dist/cjs/utils/id.js.map +1 -1
  170. package/dist/cjs/utils/index.d.ts +2 -2
  171. package/dist/cjs/utils/index.d.ts.map +1 -1
  172. package/dist/cjs/utils/index.js +7 -3
  173. package/dist/cjs/utils/index.js.map +1 -1
  174. package/dist/cjs/utils/session.d.ts +44 -5
  175. package/dist/cjs/utils/session.d.ts.map +1 -1
  176. package/dist/cjs/utils/session.js +197 -38
  177. package/dist/cjs/utils/session.js.map +1 -1
  178. package/dist/constants/index.d.ts +0 -9
  179. package/dist/constants/index.d.ts.map +1 -1
  180. package/dist/constants/index.js +3 -9
  181. package/dist/constants/index.js.map +1 -1
  182. package/dist/core/Agent.d.ts +119 -153
  183. package/dist/core/Agent.d.ts.map +1 -1
  184. package/dist/core/Agent.js +472 -325
  185. package/dist/core/Agent.js.map +1 -1
  186. package/dist/core/AutoChainExecutor.d.ts +107 -0
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  188. package/dist/core/AutoChainExecutor.js +293 -0
  189. package/dist/core/AutoChainExecutor.js.map +1 -0
  190. package/dist/core/BranchEvaluator.d.ts +54 -0
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  192. package/dist/core/BranchEvaluator.js +126 -0
  193. package/dist/core/BranchEvaluator.js.map +1 -0
  194. package/dist/core/DirectiveBus.d.ts +88 -0
  195. package/dist/core/DirectiveBus.d.ts.map +1 -0
  196. package/dist/core/DirectiveBus.js +192 -0
  197. package/dist/core/DirectiveBus.js.map +1 -0
  198. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  199. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  200. package/dist/core/DirectiveChainTracker.js +117 -0
  201. package/dist/core/DirectiveChainTracker.js.map +1 -0
  202. package/dist/core/Flow.d.ts +186 -0
  203. package/dist/core/Flow.d.ts.map +1 -0
  204. package/dist/core/Flow.js +546 -0
  205. package/dist/core/Flow.js.map +1 -0
  206. package/dist/core/FlowRouter.d.ts +182 -0
  207. package/dist/core/FlowRouter.d.ts.map +1 -0
  208. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  209. package/dist/core/FlowRouter.js.map +1 -0
  210. package/dist/core/PersistenceManager.d.ts +2 -2
  211. package/dist/core/PersistenceManager.d.ts.map +1 -1
  212. package/dist/core/PersistenceManager.js +7 -7
  213. package/dist/core/PersistenceManager.js.map +1 -1
  214. package/dist/core/PromptComposer.d.ts +21 -8
  215. package/dist/core/PromptComposer.d.ts.map +1 -1
  216. package/dist/core/PromptComposer.js +183 -106
  217. package/dist/core/PromptComposer.js.map +1 -1
  218. package/dist/core/PromptSectionCache.d.ts +1 -1
  219. package/dist/core/PromptSectionCache.js +1 -1
  220. package/dist/core/ResponseEngine.d.ts +18 -8
  221. package/dist/core/ResponseEngine.d.ts.map +1 -1
  222. package/dist/core/ResponseEngine.js +38 -36
  223. package/dist/core/ResponseEngine.js.map +1 -1
  224. package/dist/core/ResponseModal.d.ts +73 -56
  225. package/dist/core/ResponseModal.d.ts.map +1 -1
  226. package/dist/core/ResponseModal.js +1198 -1017
  227. package/dist/core/ResponseModal.js.map +1 -1
  228. package/dist/core/ResponsePipeline.d.ts +124 -26
  229. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  230. package/dist/core/ResponsePipeline.js +524 -135
  231. package/dist/core/ResponsePipeline.js.map +1 -1
  232. package/dist/core/SignalEvaluator.d.ts +86 -0
  233. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  234. package/dist/core/SignalEvaluator.js +326 -0
  235. package/dist/core/SignalEvaluator.js.map +1 -0
  236. package/dist/core/SignalProcessor.d.ts +152 -0
  237. package/dist/core/SignalProcessor.d.ts.map +1 -0
  238. package/dist/core/SignalProcessor.js +555 -0
  239. package/dist/core/SignalProcessor.js.map +1 -0
  240. package/dist/core/Step.d.ts +43 -32
  241. package/dist/core/Step.d.ts.map +1 -1
  242. package/dist/core/Step.js +220 -126
  243. package/dist/core/Step.js.map +1 -1
  244. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  245. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  246. package/dist/core/StreamingToolExecutor.js.map +1 -1
  247. package/dist/core/ToolManager.d.ts +44 -13
  248. package/dist/core/ToolManager.d.ts.map +1 -1
  249. package/dist/core/ToolManager.js +174 -91
  250. package/dist/core/ToolManager.js.map +1 -1
  251. package/dist/core/createAgent.d.ts +35 -0
  252. package/dist/core/createAgent.d.ts.map +1 -0
  253. package/dist/core/createAgent.js +36 -0
  254. package/dist/core/createAgent.js.map +1 -0
  255. package/dist/core/flow-namespace.d.ts +49 -0
  256. package/dist/core/flow-namespace.d.ts.map +1 -0
  257. package/dist/core/flow-namespace.js +168 -0
  258. package/dist/core/flow-namespace.js.map +1 -0
  259. package/dist/index.d.ts +11 -14
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +9 -12
  262. package/dist/index.js.map +1 -1
  263. package/dist/providers/GeminiProvider.d.ts +3 -3
  264. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  265. package/dist/providers/GeminiProvider.js +16 -14
  266. package/dist/providers/GeminiProvider.js.map +1 -1
  267. package/dist/types/agent.d.ts +183 -54
  268. package/dist/types/agent.d.ts.map +1 -1
  269. package/dist/types/agent.js +0 -6
  270. package/dist/types/agent.js.map +1 -1
  271. package/dist/types/ai.d.ts +3 -3
  272. package/dist/types/ai.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +15 -0
  274. package/dist/types/errors.d.ts.map +1 -0
  275. package/dist/types/errors.js +18 -0
  276. package/dist/types/errors.js.map +1 -0
  277. package/dist/types/flow.d.ts +513 -0
  278. package/dist/types/flow.d.ts.map +1 -0
  279. package/dist/types/flow.js +5 -0
  280. package/dist/types/flow.js.map +1 -0
  281. package/dist/types/index.d.ts +7 -6
  282. package/dist/types/index.d.ts.map +1 -1
  283. package/dist/types/index.js +4 -1
  284. package/dist/types/index.js.map +1 -1
  285. package/dist/types/persistence.d.ts +11 -7
  286. package/dist/types/persistence.d.ts.map +1 -1
  287. package/dist/types/routing.d.ts +1 -1
  288. package/dist/types/routing.d.ts.map +1 -1
  289. package/dist/types/session.d.ts +24 -23
  290. package/dist/types/session.d.ts.map +1 -1
  291. package/dist/types/signals.d.ts +248 -0
  292. package/dist/types/signals.d.ts.map +1 -0
  293. package/dist/types/signals.js +10 -0
  294. package/dist/types/signals.js.map +1 -0
  295. package/dist/types/template.d.ts +2 -8
  296. package/dist/types/template.d.ts.map +1 -1
  297. package/dist/types/tool.d.ts +36 -29
  298. package/dist/types/tool.d.ts.map +1 -1
  299. package/dist/types/tool.js +1 -1
  300. package/dist/types/tool.js.map +1 -1
  301. package/dist/utils/condition.d.ts +7 -1
  302. package/dist/utils/condition.d.ts.map +1 -1
  303. package/dist/utils/condition.js.map +1 -1
  304. package/dist/utils/id.d.ts +13 -5
  305. package/dist/utils/id.d.ts.map +1 -1
  306. package/dist/utils/id.js +22 -9
  307. package/dist/utils/id.js.map +1 -1
  308. package/dist/utils/index.d.ts +2 -2
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +2 -2
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/session.d.ts +44 -5
  313. package/dist/utils/session.d.ts.map +1 -1
  314. package/dist/utils/session.js +193 -37
  315. package/dist/utils/session.js.map +1 -1
  316. package/docs/README.md +15 -202
  317. package/docs/concepts/architecture.md +281 -0
  318. package/docs/concepts/directives.md +400 -0
  319. package/docs/concepts/pipeline.md +399 -0
  320. package/docs/guides/branching.md +263 -0
  321. package/docs/guides/compaction.md +163 -0
  322. package/docs/guides/conditions.md +167 -0
  323. package/docs/guides/error-handling.md +176 -0
  324. package/docs/guides/flow-control.md +409 -0
  325. package/docs/guides/instructions.md +210 -0
  326. package/docs/guides/persistence.md +182 -0
  327. package/docs/guides/streaming.md +137 -0
  328. package/docs/migration/README.md +15 -0
  329. package/docs/migration/route-to-flow.md +560 -0
  330. package/docs/migration/v1-to-v2.md +909 -0
  331. package/docs/reference/adapters.md +481 -0
  332. package/docs/reference/branches.md +241 -0
  333. package/docs/reference/create-agent.md +186 -0
  334. package/docs/reference/directive.md +243 -0
  335. package/docs/reference/errors.md +122 -0
  336. package/docs/reference/flow.md +238 -0
  337. package/docs/reference/instruction.md +177 -0
  338. package/docs/reference/pre-directive.md +131 -0
  339. package/docs/reference/providers.md +227 -0
  340. package/docs/reference/signals.md +356 -0
  341. package/docs/reference/step.md +339 -0
  342. package/docs/reference/tool.md +269 -0
  343. package/docs/start/01-install.md +81 -0
  344. package/docs/start/02-first-agent.md +196 -0
  345. package/docs/start/03-collect-data.md +222 -0
  346. package/docs/start/04-add-tools.md +276 -0
  347. package/docs/start/05-go-to-production.md +216 -0
  348. package/examples/01-quickstart.ts +20 -0
  349. package/examples/02-data-extraction.ts +90 -0
  350. package/examples/03-tools.ts +136 -0
  351. package/examples/04-instructions.ts +100 -0
  352. package/examples/05-branching.ts +140 -0
  353. package/examples/06-flow-control.ts +103 -0
  354. package/examples/07-streaming.ts +69 -0
  355. package/examples/08-persistence.ts +98 -0
  356. package/examples/09-signals.ts +144 -0
  357. package/examples/tsconfig.json +30 -0
  358. package/package.json +2 -1
  359. package/src/adapters/MemoryAdapter.ts +3 -3
  360. package/src/adapters/MongoAdapter.ts +3 -3
  361. package/src/adapters/OpenSearchAdapter.ts +10 -8
  362. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  363. package/src/adapters/PrismaAdapter.ts +6 -6
  364. package/src/adapters/RedisAdapter.ts +3 -3
  365. package/src/adapters/SQLiteAdapter.ts +31 -12
  366. package/src/constants/index.ts +2 -10
  367. package/src/core/Agent.ts +585 -374
  368. package/src/core/AutoChainExecutor.ts +440 -0
  369. package/src/core/BranchEvaluator.ts +167 -0
  370. package/src/core/DirectiveBus.ts +248 -0
  371. package/src/core/DirectiveChainTracker.ts +144 -0
  372. package/src/core/Flow.ts +666 -0
  373. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  374. package/src/core/PersistenceManager.ts +8 -8
  375. package/src/core/PromptComposer.ts +209 -140
  376. package/src/core/PromptSectionCache.ts +1 -1
  377. package/src/core/ResponseEngine.ts +61 -46
  378. package/src/core/ResponseModal.ts +1458 -1241
  379. package/src/core/ResponsePipeline.ts +675 -173
  380. package/src/core/SignalEvaluator.ts +420 -0
  381. package/src/core/SignalProcessor.ts +723 -0
  382. package/src/core/Step.ts +279 -176
  383. package/src/core/StreamingToolExecutor.ts +4 -4
  384. package/src/core/ToolManager.ts +200 -97
  385. package/src/core/createAgent.ts +40 -0
  386. package/src/core/flow-namespace.ts +219 -0
  387. package/src/index.ts +42 -36
  388. package/src/providers/GeminiProvider.ts +17 -15
  389. package/src/types/agent.ts +182 -53
  390. package/src/types/ai.ts +3 -3
  391. package/src/types/errors.ts +18 -0
  392. package/src/types/flow.ts +590 -0
  393. package/src/types/index.ts +43 -16
  394. package/src/types/persistence.ts +12 -8
  395. package/src/types/routing.ts +1 -1
  396. package/src/types/session.ts +26 -23
  397. package/src/types/signals.ts +321 -0
  398. package/src/types/template.ts +3 -11
  399. package/src/types/tool.ts +50 -42
  400. package/src/utils/condition.ts +13 -4
  401. package/src/utils/id.ts +27 -9
  402. package/src/utils/index.ts +6 -2
  403. package/src/utils/session.ts +238 -42
  404. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  405. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  406. package/dist/cjs/core/BatchExecutor.js +0 -861
  407. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  408. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  409. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  410. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  411. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  412. package/dist/cjs/core/Route.d.ts +0 -180
  413. package/dist/cjs/core/Route.d.ts.map +0 -1
  414. package/dist/cjs/core/Route.js +0 -542
  415. package/dist/cjs/core/Route.js.map +0 -1
  416. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  417. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  418. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  419. package/dist/cjs/types/route.d.ts +0 -336
  420. package/dist/cjs/types/route.d.ts.map +0 -1
  421. package/dist/cjs/types/route.js.map +0 -1
  422. package/dist/core/BatchExecutor.d.ts +0 -359
  423. package/dist/core/BatchExecutor.d.ts.map +0 -1
  424. package/dist/core/BatchExecutor.js +0 -856
  425. package/dist/core/BatchExecutor.js.map +0 -1
  426. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  427. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  428. package/dist/core/BatchPromptBuilder.js +0 -219
  429. package/dist/core/BatchPromptBuilder.js.map +0 -1
  430. package/dist/core/Route.d.ts +0 -180
  431. package/dist/core/Route.d.ts.map +0 -1
  432. package/dist/core/Route.js +0 -538
  433. package/dist/core/Route.js.map +0 -1
  434. package/dist/core/RoutingEngine.d.ts +0 -185
  435. package/dist/core/RoutingEngine.d.ts.map +0 -1
  436. package/dist/core/RoutingEngine.js.map +0 -1
  437. package/dist/types/route.d.ts +0 -336
  438. package/dist/types/route.d.ts.map +0 -1
  439. package/dist/types/route.js +0 -5
  440. package/dist/types/route.js.map +0 -1
  441. package/docs/CONTRIBUTING.md +0 -521
  442. package/docs/api/README.md +0 -3299
  443. package/docs/api/overview.md +0 -1410
  444. package/docs/architecture/data-extraction-flow.md +0 -360
  445. package/docs/architecture/multi-step-execution.md +0 -277
  446. package/docs/core/agent/README.md +0 -938
  447. package/docs/core/agent/context-management.md +0 -796
  448. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  449. package/docs/core/agent/session-management.md +0 -693
  450. package/docs/core/ai-integration/prompt-composition.md +0 -355
  451. package/docs/core/ai-integration/providers.md +0 -515
  452. package/docs/core/ai-integration/response-processing.md +0 -433
  453. package/docs/core/conversation-flows/data-collection.md +0 -772
  454. package/docs/core/conversation-flows/route-dsl.md +0 -509
  455. package/docs/core/conversation-flows/routes.md +0 -249
  456. package/docs/core/conversation-flows/step-transitions.md +0 -731
  457. package/docs/core/conversation-flows/steps.md +0 -268
  458. package/docs/core/error-handling.md +0 -830
  459. package/docs/core/persistence/adapters.md +0 -255
  460. package/docs/core/persistence/session-storage.md +0 -656
  461. package/docs/core/routing/intelligent-routing.md +0 -470
  462. package/docs/core/tools/enhanced-tool.md +0 -186
  463. package/docs/core/tools/streaming-execution.md +0 -161
  464. package/docs/core/tools/tool-definition.md +0 -970
  465. package/docs/core/tools/tool-scoping.md +0 -819
  466. package/docs/guides/advanced-patterns/publishing.md +0 -186
  467. package/docs/guides/context-compaction.md +0 -96
  468. package/docs/guides/error-handling-patterns.md +0 -578
  469. package/docs/guides/getting-started/README.md +0 -795
  470. package/docs/guides/migration/README.md +0 -101
  471. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  472. package/docs/guides/migration/multi-step-execution.md +0 -393
  473. package/docs/guides/migration/response-modal-refactor.md +0 -518
  474. package/docs/guides/prompt-optimization.md +0 -164
  475. package/examples/advanced-patterns/context-compaction.ts +0 -223
  476. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  477. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  478. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  479. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  480. package/examples/ai-providers/anthropic-integration.ts +0 -388
  481. package/examples/ai-providers/openai-integration.ts +0 -228
  482. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  483. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  484. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  485. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  486. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  487. package/examples/conversation-flows/completion-transitions.ts +0 -318
  488. package/examples/core-concepts/basic-agent.ts +0 -503
  489. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  490. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  491. package/examples/core-concepts/session-management.ts +0 -494
  492. package/examples/integrations/database-integration.ts +0 -631
  493. package/examples/integrations/healthcare-integration.ts +0 -595
  494. package/examples/integrations/search-integration.ts +0 -530
  495. package/examples/integrations/server-session-management.ts +0 -307
  496. package/examples/persistence/custom-adapter.ts +0 -526
  497. package/examples/persistence/database-persistence.ts +0 -583
  498. package/examples/persistence/memory-sessions.ts +0 -495
  499. package/examples/persistence/prisma-schema.example.prisma +0 -74
  500. package/examples/persistence/redis-persistence.ts +0 -488
  501. package/examples/tools/basic-tools.ts +0 -765
  502. package/examples/tools/data-enrichment-tools.ts +0 -593
  503. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  504. package/examples/tools/streaming-tool-execution.ts +0 -283
  505. package/src/core/BatchExecutor.ts +0 -1187
  506. package/src/core/BatchPromptBuilder.ts +0 -299
  507. package/src/core/Route.ts +0 -678
  508. package/src/types/route.ts +0 -392
@@ -1,1410 +0,0 @@
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
- - [StreamingToolExecutor](#streamingtoolexecutor)
16
- - [CompactionEngine](#compactionengine)
17
- - [PromptSectionCache](#promptsectioncache)
18
-
19
- - [AI Providers](#ai-providers)
20
- - [Persistence Adapters](#persistence-adapters)
21
- - [Types & Interfaces](#types--interfaces)
22
- - [EnhancedTool](#enhancedtool)
23
- - [Utilities](#utilities)
24
-
25
- ---
26
-
27
- ## Core Classes
28
-
29
- ### Agent
30
-
31
- The central orchestrator class that manages conversation flow, routing, tool execution, and agent-level data collection.
32
-
33
- #### Constructor
34
-
35
- ```typescript
36
- new Agent<TContext = unknown, TData = unknown>(options: AgentOptions<TContext, TData>)
37
- ```
38
-
39
- #### Properties
40
-
41
- - `name: string` - Agent display name
42
- - `description?: string` - Detailed description
43
- - `goal?: string` - Primary objective
44
- - `context?: TContext` - Static context data
45
- - `session?: SessionState` - Current session state
46
-
47
- #### Methods
48
-
49
- ##### Route Management
50
-
51
- ```typescript
52
- createRoute(options: RouteOptions<TContext, TData>): Route<TContext, TData>
53
- ```
54
-
55
- Creates a new conversation route with required fields specification that references the agent-level schema.
56
-
57
- ##### Context Management
58
-
59
- ```typescript
60
- updateContext(updates: Partial<TContext>): Promise<void>
61
- ```
62
-
63
- Updates agent context and triggers lifecycle hooks.
64
-
65
- ```typescript
66
- getContext(): Promise<TContext | undefined>
67
- ```
68
-
69
- Gets current context, fetching from provider if configured.
70
-
71
- ##### Agent-Level Data Management
72
-
73
- ```typescript
74
- getCollectedData(): Partial<TData>
75
- ```
76
-
77
- Gets the current agent-level collected data.
78
-
79
- ```typescript
80
- updateCollectedData(updates: Partial<TData>): Promise<void>
81
- ```
82
-
83
- Updates agent-level collected data and triggers validation and lifecycle hooks.
84
-
85
- ```typescript
86
- validateData(data: Partial<TData>): ValidationResult
87
- ```
88
-
89
- Validates data against the agent-level schema, returning detailed validation results.
90
-
91
- ##### Response Generation
92
-
93
- ```typescript
94
- respond(params: {
95
- history: Event[];
96
- session?: SessionState;
97
- contextOverride?: Partial<TContext>;
98
- signal?: AbortSignal;
99
- }): Promise<{
100
- message: string;
101
- session?: SessionState;
102
- toolCalls?: ToolCall[];
103
- isRouteComplete?: boolean;
104
- }>
105
- ```
106
-
107
- Generates a single response based on conversation history.
108
-
109
- ```typescript
110
- respondStream(params: {
111
- history: Event[];
112
- session?: SessionState;
113
- contextOverride?: Partial<TContext>;
114
- signal?: AbortSignal;
115
- }): AsyncGenerator<{
116
- delta: string;
117
- accumulated: string;
118
- done: boolean;
119
- session?: SessionState;
120
- toolCalls?: ToolCall[];
121
- isRouteComplete?: boolean;
122
- }>
123
- ```
124
-
125
- Generates a streaming response with real-time updates. **Note:** Now delegates to internal ResponseModal class.
126
-
127
- ```typescript
128
- stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
129
- ```
130
-
131
- **NEW:** Modern streaming API with automatic session management. Recommended for new implementations.
132
-
133
- ```typescript
134
- // Simple streaming
135
- for await (const chunk of agent.stream("Hello")) {
136
- console.log(chunk.delta);
137
- }
138
- ```
139
-
140
- ##### Tool Management
141
-
142
- ```typescript
143
- addTool(definition: Tool<TContext, TData, TResult>): this
144
- tool: ToolManager<TContext, TData> // Access to ToolManager instance
145
- ```
146
-
147
- **Comprehensive Tool Examples:**
148
-
149
- ```typescript
150
- // 1. Simple return value (most common)
151
- agent.addTool({
152
- id: "calculate_tip",
153
- description: "Calculate tip amount",
154
- handler: async ({ context, data }, args) => {
155
- const tip = args.amount * args.percentage;
156
- return `Tip: $${tip.toFixed(2)}`; // Simple string return
157
- }
158
- });
159
-
160
- // 2. Complex ToolResult pattern
161
- agent.addTool({
162
- id: "process_order",
163
- description: "Process customer order",
164
- handler: async ({ context, data }, args) => {
165
- const order = await orderService.process(args.items);
166
- return {
167
- data: `Order ${order.id} processed successfully`,
168
- success: true,
169
- contextUpdate: { lastOrderId: order.id },
170
- dataUpdate: { orderStatus: 'processed' }
171
- }; // Detailed ToolResult object
172
- }
173
- });
174
-
175
- // 3. Registry for reuse
176
- agent.tool.register({
177
- id: "send_notification",
178
- description: "Send notification to user",
179
- handler: async ({ context }, args) => {
180
- await notificationService.send(context.userId, args.message);
181
- return "Notification sent"; // Simple return
182
- }
183
- });
184
-
185
- // 4. Pattern helper
186
- const validationTool = agent.tool.createValidation({
187
- id: "validate_email",
188
- fields: ['email'],
189
- validator: async (context, data) => ({
190
- valid: /\S+@\S+\.\S+/.test(data.email),
191
- errors: []
192
- })
193
- });
194
- agent.tool.register(validationTool);
195
- ```
196
-
197
- ##### Domain Knowledge
198
-
199
- ```typescript
200
- createTerm(term: Term<TContext>): this
201
- createGuideline(guideline: Guideline<TContext>): this
202
- getTerms(): Term<TContext>[]
203
- getGuidelines(): Guideline<TContext>[]
204
- getKnowledgeBase(): Record<string, unknown>
205
- ```
206
-
207
- ##### Session Management
208
-
209
- ```typescript
210
- setCurrentSession(session: SessionState): void
211
- getCurrentSession(): SessionState | undefined
212
- clearCurrentSession(): void
213
- getData<TData = unknown>(routeId?: string): Partial<TData>
214
- ```
215
-
216
- ##### Route Transitions
217
-
218
- ```typescript
219
- nextStepRoute(
220
- routeIdOrTitle: string,
221
- session?: SessionState,
222
- condition?: Template<TContext, unknown>,
223
- history?: Event[]
224
- ): Promise<SessionState>
225
- ```
226
-
227
- Manually transitions to a different route.
228
-
229
- ##### Persistence
230
-
231
- ```typescript
232
- getPersistenceManager(): PersistenceManager | undefined
233
- hasPersistence(): boolean
234
- ```
235
-
236
- ---
237
-
238
- ### ResponseModal
239
-
240
- **NEW:** Internal class that centralizes all response generation logic for improved architecture and maintainability.
241
-
242
- #### Constructor
243
-
244
- ```typescript
245
- new ResponseModal<TContext = unknown, TData = unknown>(
246
- agent: Agent<TContext, TData>,
247
- options?: ResponseModalOptions
248
- )
249
- ```
250
-
251
- #### Methods
252
-
253
- ##### Modern APIs (Recommended)
254
-
255
- ```typescript
256
- stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
257
- generate(message?: string, options?: GenerateOptions<TContext>): Promise<AgentResponse<TData>>
258
- ```
259
-
260
- Modern streaming and non-streaming APIs with automatic session management.
261
-
262
- ##### Legacy APIs (Backward Compatible)
263
-
264
- ```typescript
265
- respond(params: RespondParams<TContext, TData>): Promise<AgentResponse<TData>>
266
- respondStream(params: RespondParams<TContext, TData>): AsyncGenerator<AgentResponseStreamChunk<TData>>
267
- ```
268
-
269
- Legacy APIs that maintain full backward compatibility with existing code.
270
-
271
- ##### Error Handling
272
-
273
- ```typescript
274
- ResponseGenerationError: Error class for response-specific errors
275
- ```
276
-
277
- Comprehensive error handling with detailed context and phase information.
278
-
279
- #### Key Features
280
-
281
- - **Unified Logic**: Both streaming and non-streaming use the same underlying logic
282
- - **Modern APIs**: Simple `stream()` and `generate()` methods for new code
283
- - **Backward Compatibility**: Existing `respond()` and `respondStream()` methods work unchanged
284
- - **Error Handling**: Detailed error context with phase and original error information
285
- - **Performance**: Optimized response pipeline with minimal code duplication
286
-
287
- ---
288
-
289
- ### Route
290
-
291
- Represents a conversational journey with required fields specification and steps that collect data into the agent-level schema.
292
-
293
- #### Constructor
294
-
295
- ```typescript
296
- new Route<TContext = unknown, TData = unknown>(options: RouteOptions<TContext, TData>)
297
- ```
298
-
299
- #### Properties
300
-
301
- - `id: string` - Unique route identifier
302
- - `title: string` - Human-readable title
303
- - `description?: string` - Detailed description
304
- - `identity?: Template<TContext, TData>` - Route-specific identity
305
- - `personality?: Template<TContext, TData>` - Route-specific personality
306
- - `initialStep: Step<TContext, TData>` - Entry point for the route
307
-
308
- #### Methods
309
-
310
- ##### Step Management
311
-
312
- ```typescript
313
- createStep(options: StepOptions<TContext, TData>): Step<TContext, TData>
314
- getStep(stepId: string): Step<TContext, TData> | undefined
315
- getAllSteps(): Step<TContext, TData>[]
316
- ```
317
-
318
- ##### Route Completion Logic
319
-
320
- ```typescript
321
- isComplete(data: Partial<TData>): boolean
322
- ```
323
-
324
- Checks if all required fields are collected based on agent-level data.
325
-
326
- ```typescript
327
- getMissingRequiredFields(data: Partial<TData>): (keyof TData)[]
328
- ```
329
-
330
- Returns the fields still needed for route completion.
331
-
332
- ```typescript
333
- getCompletionProgress(data: Partial<TData>): number
334
- ```
335
-
336
- Returns completion progress as a number between 0 and 1.
337
-
338
- ##### Data Collection
339
-
340
- ```typescript
341
- getRules(): Template<TContext, TData>[]
342
- getProhibitions(): Template<TContext, TData>[]
343
- getTerms(): Term<TContext>[]
344
- getKnowledgeBase(): Record<string, unknown>
345
- ```
346
-
347
- ##### Schema & Validation
348
-
349
- ```typescript
350
- getResponseOutputSchema(): StructuredSchema | undefined
351
- getRoutingExtrasSchema(): StructuredSchema | undefined
352
- ```
353
-
354
- ##### Tool Management
355
-
356
- ```typescript
357
- addTool(definition: Tool<TContext, TData, TResult>): this
358
- ```
359
-
360
- ##### Lifecycle Hooks
361
-
362
- ```typescript
363
- handleDataUpdate(data: Partial<TData>, previousData: Partial<TData>): Promise<Partial<TData>>
364
- handleContextUpdate(newContext: TContext, previousContext: TContext): Promise<void>
365
- evaluateOnComplete(session: { data?: Partial<TData> }, context?: TContext): Promise<RouteTransitionConfig | undefined>
366
- ```
367
-
368
- ---
369
-
370
- ### Step
371
-
372
- Represents an individual conversation state within a route.
373
-
374
- #### Constructor
375
-
376
- ```typescript
377
- new Step<TContext = unknown, TData = unknown>(routeId: string, options?: StepOptions<TContext, TData>)
378
- ```
379
-
380
- #### Properties
381
-
382
- - `id: string` - Unique step identifier
383
- - `routeId: string` - Parent route identifier
384
- - `description?: string` - Human-readable description
385
- - `collect?: string[]` - Fields to extract from AI responses
386
- - `requires?: string[]` - Required data fields
387
- - `prompt?: Template<TContext, TData>` - Step-specific prompt
388
- - `tools?: (string | Tool)[]` - Step-specific tools
389
-
390
- #### Methods
391
-
392
- ##### Configuration
393
-
394
- ```typescript
395
- configure(config: Partial<StepOptions<TContext, TData>>): this
396
- ```
397
-
398
- ##### Transitions
399
-
400
- ```typescript
401
- nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
402
- branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
403
- endRoute(options?: Omit<StepOptions<TContext, TData>, 'step'>): StepResult<TContext, TData>
404
- ```
405
-
406
- ##### Validation
407
-
408
- ```typescript
409
- shouldSkip(data: Partial<TData>): boolean
410
- hasRequires(data: Partial<TData>): boolean
411
- ```
412
-
413
- ##### Tool Management
414
-
415
- ```typescript
416
- addGuideline(guideline: Guideline<TContext>): void
417
- getGuidelines(): Guideline<TContext>[]
418
- getTransitions(): Step<TContext, TData>[]
419
- ```
420
-
421
- ##### References
422
-
423
- ```typescript
424
- getRef(): StepRef
425
- ```
426
-
427
- ---
428
-
429
- ### StepResult
430
-
431
- Result interface returned by step transition methods that enables fluent chaining of conversation flows.
432
-
433
- #### Interface
434
-
435
- ```typescript
436
- interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
437
- nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
438
- branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
439
- endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
440
- }
441
- ```
442
-
443
- #### Methods
444
-
445
- ##### Chaining
446
-
447
- ```typescript
448
- nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
449
- ```
450
-
451
- Creates a transition and returns a chainable result for building linear flows.
452
-
453
- ##### Branching
454
-
455
- ```typescript
456
- branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
457
- ```
458
-
459
- Creates multiple conditional branches for complex conversation flows.
460
-
461
- ##### Route Completion
462
-
463
- ```typescript
464
- endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>
465
- ```
466
-
467
- Shortcut method to end the current route with optional completion configuration.
468
-
469
- #### Properties
470
-
471
- Inherits from `StepRef`:
472
-
473
- - `id: string` - Step identifier
474
- - `routeId: string` - Route this step belongs to
475
-
476
- ---
477
-
478
- ### RoutingEngine
479
-
480
- AI-powered routing system that intelligently selects routes and steps based on conversation context.
481
-
482
- #### Constructor
483
-
484
- ```typescript
485
- new RoutingEngine(options?: RoutingEngineOptions)
486
- ```
487
-
488
- #### Methods
489
-
490
- ##### Route Selection
491
-
492
- ```typescript
493
- decideRouteAndStep(params: {
494
- routes: Route[];
495
- session: SessionState;
496
- history: Event[];
497
- agentOptions?: AgentOptions;
498
- provider: AiProvider;
499
- context: unknown;
500
- signal?: AbortSignal;
501
- }): Promise<{
502
- selectedRoute?: Route;
503
- selectedStep?: Step;
504
- responseDirectives?: string[];
505
- session: SessionState;
506
- isRouteComplete?: boolean;
507
- }>
508
- ```
509
-
510
- ##### Single Route Optimization
511
-
512
- ```typescript
513
- decideSingleRouteStep(params: {
514
- route: Route;
515
- session: SessionState;
516
- history: Event[];
517
- agentOptions?: AgentOptions;
518
- provider: AiProvider;
519
- context: unknown;
520
- signal?: AbortSignal;
521
- }): Promise<{
522
- selectedRoute?: Route;
523
- selectedStep?: Step;
524
- responseDirectives?: string[];
525
- session: SessionState;
526
- isRouteComplete?: boolean;
527
- }>
528
- ```
529
-
530
- ##### Candidate Discovery
531
-
532
- ```typescript
533
- getCandidateSteps<TData>(
534
- route: Route,
535
- currentStep: Step | undefined,
536
- data: Partial<TData>
537
- ): CandidateStep[]
538
- ```
539
-
540
- ##### Prompt Generation
541
-
542
- ```typescript
543
- buildRoutingPrompt(params: BuildRoutingPromptParams): Promise<string>
544
- buildStepSelectionPrompt(params: BuildStepSelectionPromptParams): Promise<string>
545
- ```
546
-
547
- ---
548
-
549
- ### ResponseEngine
550
-
551
- Handles prompt composition and response schema generation for AI interactions.
552
-
553
- #### Methods
554
-
555
- ##### Schema Generation
556
-
557
- ```typescript
558
- responseSchemaForRoute(route: Route, currentStep?: Step): StructuredSchema
559
- ```
560
-
561
- ##### Prompt Building
562
-
563
- ```typescript
564
- buildResponsePrompt(params: BuildResponsePromptParams): Promise<string>
565
- buildFallbackPrompt(params: BuildFallbackPromptParams): Promise<string>
566
- ```
567
-
568
- ---
569
-
570
- ### PromptComposer
571
-
572
- Utility for composing structured prompts with agent metadata, knowledge, and context.
573
-
574
- #### Constructor
575
-
576
- ```typescript
577
- new PromptComposer<TContext = unknown, TData = unknown>(context?: TemplateContext<TContext, TData>)
578
- ```
579
-
580
- #### Methods
581
-
582
- ##### Metadata Addition
583
-
584
- ```typescript
585
- addAgentMeta(agent: AgentOptions): Promise<this>
586
- addGlossary(terms: Term[]): Promise<this>
587
- addGuidelines(guidelines: Guideline[]): Promise<this>
588
- addKnowledgeBase(agentKb?: Record<string, unknown>, routeKb?: Record<string, unknown>): Promise<this>
589
- ```
590
-
591
- ##### Content Addition
592
-
593
- ```typescript
594
- addInstruction(text: string): Promise<this>
595
- addInteractionHistory(history: Event[], note?: string): Promise<this>
596
- addLastMessage(message: string): Promise<this>
597
- addRoutingOverview(routes: Route[]): Promise<this>
598
- addDirectives(directives?: string[]): Promise<this>
599
- ```
600
-
601
- ##### Finalization
602
-
603
- ```typescript
604
- build(): Promise<string>
605
- ```
606
-
607
-
608
-
609
- ---
610
-
611
- ### StreamingToolExecutor
612
-
613
- Executes tools as they arrive from the LLM stream with concurrency control, abort handling, and ordered result yielding.
614
-
615
- #### Constructor
616
-
617
- ```typescript
618
- new StreamingToolExecutor<TContext, TData>(
619
- toolContext: ToolContext<TContext, TData>,
620
- options?: {
621
- maxParallel?: number; // default: 10
622
- signal?: AbortSignal;
623
- }
624
- )
625
- ```
626
-
627
- #### Methods
628
-
629
- ```typescript
630
- addTool(toolCall: ToolCallRequest, tool: EnhancedTool<TContext, TData>): void
631
- ```
632
-
633
- Queue a tool for execution. Concurrency safety is evaluated once at queue time.
634
-
635
- ```typescript
636
- getCompletedResults(): Generator<ToolExecutionUpdate<TData>>
637
- ```
638
-
639
- Synchronous generator yielding available results in request order.
640
-
641
- ```typescript
642
- getRemainingResults(): AsyncGenerator<ToolExecutionUpdate<TData>>
643
- ```
644
-
645
- Async generator yielding all results, waiting for pending tools.
646
-
647
- ```typescript
648
- discard(): void
649
- getUpdatedContext(): TContext
650
- hasUnfinishedTools(): boolean
651
- ```
652
-
653
- See [Streaming Execution Guide](../core/tools/streaming-execution.md) for detailed usage.
654
-
655
- ---
656
-
657
- ### CompactionEngine
658
-
659
- Manages conversation history size through multi-layered compaction strategies.
660
-
661
- #### Static Methods
662
-
663
- ```typescript
664
- CompactionEngine.estimateTokens(history: HistoryItem[]): number
665
- CompactionEngine.applyToolResultBudget(history: HistoryItem[], maxCharsPerResult: number): HistoryItem[]
666
- CompactionEngine.validateOptions(options: CompactionOptions): void
667
- CompactionEngine.checkAndCompact(history: HistoryItem[], options: CompactionOptions): Promise<CompactionResult>
668
- ```
669
-
670
- See [Context Compaction Guide](../guides/context-compaction.md) for detailed usage.
671
-
672
- ---
673
-
674
- ### PromptSectionCache
675
-
676
- Memoizes static prompt sections across turns, recomputing only dynamic sections per-turn. Integrates with `PromptComposer` for optimized prompt generation.
677
-
678
- #### Constructor
679
-
680
- ```typescript
681
- new PromptSectionCache(config?: PromptCacheConfig)
682
- ```
683
-
684
- #### Configuration
685
-
686
- ```typescript
687
- interface PromptCacheConfig {
688
- enabled?: boolean; // default: true
689
- volatileKeys?: string[]; // keys that always recompute
690
- }
691
- ```
692
-
693
- #### Methods
694
-
695
- ```typescript
696
- register(key: string, type: PromptSectionType, compute: () => string | null | Promise<string | null>): void
697
- ```
698
-
699
- Register a section as `'static'` (cached) or `'dynamic'` (recomputed every turn).
700
-
701
- ```typescript
702
- get(key: string): Promise<string | null>
703
- ```
704
-
705
- Get a section's value, using cache for static sections.
706
-
707
- ```typescript
708
- resolveAll(): Promise<(string | null)[]>
709
- ```
710
-
711
- Resolve all sections in registration order.
712
-
713
- ```typescript
714
- invalidate(key: string): void
715
- invalidateAll(): void
716
- ```
717
-
718
- Invalidate a specific section or all sections.
719
-
720
- See [Prompt Optimization Guide](../guides/prompt-optimization.md) for detailed usage.
721
-
722
- ---
723
-
724
- ## AI Providers
725
-
726
- ### OpenAIProvider
727
-
728
- ```typescript
729
- new OpenAIProvider(options: OpenAIProviderOptions)
730
-
731
- generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
732
- generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
733
- ```
734
-
735
- ### GeminiProvider
736
-
737
- ```typescript
738
- new GeminiProvider(options: GeminiProviderOptions)
739
-
740
- generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
741
- generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
742
- ```
743
-
744
- ### AnthropicProvider
745
-
746
- ```typescript
747
- new AnthropicProvider(options: AnthropicProviderOptions)
748
-
749
- generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
750
- generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
751
- ```
752
-
753
- ### OpenRouterProvider
754
-
755
- ```typescript
756
- new OpenRouterProvider(options: OpenRouterProviderOptions)
757
-
758
- generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
759
- generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
760
- ```
761
-
762
- ---
763
-
764
- ## Persistence Adapters
765
-
766
- ### PrismaAdapter
767
-
768
- ```typescript
769
- new PrismaAdapter(options: {
770
- prisma: PrismaClient;
771
- tables?: { sessions?: string; messages?: string };
772
- fieldMappings?: FieldMappings;
773
- })
774
-
775
- sessionRepository: SessionRepository
776
- messageRepository: MessageRepository
777
- ```
778
-
779
- ### RedisAdapter
780
-
781
- ```typescript
782
- new RedisAdapter(options: {
783
- redis: Redis;
784
- keyPrefix?: string;
785
- sessionTTL?: number;
786
- messageTTL?: number;
787
- })
788
-
789
- sessionRepository: SessionRepository
790
- messageRepository: MessageRepository
791
- ```
792
-
793
- ### MongoAdapter
794
-
795
- ```typescript
796
- new MongoAdapter(options: {
797
- client: MongoClient;
798
- databaseName: string;
799
- collections?: { sessions?: string; messages?: string };
800
- })
801
-
802
- sessionRepository: SessionRepository
803
- messageRepository: MessageRepository
804
- ```
805
-
806
- ### PostgreSQLAdapter
807
-
808
- ```typescript
809
- new PostgreSQLAdapter(options: {
810
- client: Client;
811
- tables?: { sessions?: string; messages?: string };
812
- })
813
-
814
- sessionRepository: SessionRepository
815
- messageRepository: MessageRepository
816
-
817
- initialize(): Promise<void> // Auto-create tables
818
- ```
819
-
820
- ### SQLiteAdapter
821
-
822
- ```typescript
823
- new SQLiteAdapter(options: { db: Database })
824
-
825
- sessionRepository: SessionRepository
826
- messageRepository: MessageRepository
827
-
828
- initialize(): Promise<void> // Auto-create tables
829
- ```
830
-
831
- ### OpenSearchAdapter
832
-
833
- ```typescript
834
- new OpenSearchAdapter(client: Client, options: {
835
- indices?: { sessions?: string; messages?: string };
836
- autoCreateIndices?: boolean;
837
- refresh?: string;
838
- })
839
-
840
- sessionRepository: SessionRepository
841
- messageRepository: MessageRepository
842
- ```
843
-
844
- ### MemoryAdapter
845
-
846
- ```typescript
847
- new MemoryAdapter()
848
-
849
- sessionRepository: SessionRepository
850
- messageRepository: MessageRepository
851
-
852
- clear(): void
853
- getSnapshot(): { sessions: SessionData[]; messages: MessageData[] }
854
- ```
855
-
856
- ---
857
-
858
- ## Types & Interfaces
859
-
860
- ### Core Types
861
-
862
- ```typescript
863
- interface AgentOptions<TContext = unknown, TData = unknown> {
864
- name: string;
865
- provider: AiProvider;
866
- description?: string;
867
- goal?: string;
868
- personality?: Template<TContext, TData>;
869
- identity?: Template<TContext, TData>;
870
- context?: TContext;
871
- contextProvider?: ContextProvider<TContext>;
872
-
873
- // NEW: Agent-level data schema and initial data
874
- schema?: StructuredSchema;
875
- initialData?: Partial<TData>;
876
-
877
- // NEW: Agent-wide rules and prohibitions
878
- rules?: Template<TContext, TData>[];
879
- prohibitions?: Template<TContext, TData>[];
880
-
881
- // NEW: Control multi-step batching
882
- maxStepsPerBatch?: number; // Default: 1 (single-step). Set higher or Infinity to batch.
883
-
884
- hooks?: ContextLifecycleHooks<TContext, TData>;
885
- debug?: boolean;
886
- session?: SessionState;
887
- persistence?: PersistenceConfig;
888
- terms?: Term<TContext>[];
889
- guidelines?: Guideline<TContext>[];
890
- tools?: Tool<TContext, unknown[], unknown, TData>[];
891
- routes?: RouteOptions<TContext, TData>[];
892
- knowledgeBase?: Record<string, unknown>;
893
- }
894
-
895
- interface RouteOptions<TContext = unknown, TData = unknown> {
896
- id?: string;
897
- title: string;
898
- description?: string;
899
- identity?: Template<TContext, TData>;
900
- personality?: Template<TContext, TData>;
901
- when?: ConditionTemplate<TContext, TData>;
902
- skipIf?: ConditionTemplate<TContext, TData>;
903
- rules?: Template<TContext, TData>[];
904
- prohibitions?: Template<TContext, TData>[];
905
-
906
- // NEW: Required fields for route completion (replaces schema)
907
- requiredFields?: (keyof TData)[];
908
- optionalFields?: (keyof TData)[];
909
-
910
- // REMOVED: schema (now at agent level)
911
- // schema?: StructuredSchema;
912
-
913
- initialData?: Partial<TData>;
914
- steps?: StepOptions<TContext, TData>[];
915
- initialStep?: Omit<StepOptions<TContext, TData>, "step">;
916
- endStep?: Omit<StepOptions<TContext, TData>, "step" | "condition" | "skipIf">;
917
- onComplete?: string | RouteTransitionConfig | RouteCompletionHandler;
918
- hooks?: RouteLifecycleHooks<TContext, TData>;
919
- guidelines?: Guideline<TContext>[];
920
- terms?: Term<TContext>[];
921
- tools?: Tool<TContext, unknown[], unknown, TData>[];
922
- knowledgeBase?: Record<string, unknown>;
923
- }
924
-
925
- interface StepOptions<TContext = unknown, TData = unknown> {
926
- id?: string;
927
- description?: string;
928
- prompt?: Template<TContext, TData>;
929
- collect?: string[];
930
- skipIf?: (data: Partial<TData>) => boolean;
931
- requires?: string[];
932
- when?: Template<TContext, TData>;
933
- prepare?: string | Tool<TContext, unknown[], unknown, TData> | ((
934
- context: TContext,
935
- data?: Partial<TData>
936
- ) => void | Promise<void>);
937
- finalize?: string | Tool<TContext, unknown[], unknown, TData> | ((
938
- context: TContext,
939
- data?: Partial<TData>
940
- ) => void | Promise<void>);
941
- tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
942
- }
943
-
944
- interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
945
- nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
946
- branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
947
- endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
948
- }
949
-
950
- interface BranchResult<TContext = unknown, TData = unknown> {
951
- [branchName: string]: StepResult<TContext, TData>;
952
- }
953
-
954
- interface BranchSpec<TContext = unknown, TData = unknown> {
955
- name: string;
956
- id?: string;
957
- step: StepOptions<TContext, TData>;
958
- }
959
-
960
- interface StepRef {
961
- id: string;
962
- routeId: string;
963
- }
964
-
965
- interface RouteRef {
966
- id: string;
967
- }
968
-
969
- // ==============================================================================
970
- // LIFECYCLE HOOKS: prepare & finalize
971
- // ==============================================================================
972
-
973
- /**
974
- * Step lifecycle hooks allow you to execute custom logic before and after AI responses.
975
- * Both prepare and finalize can be functions, tool references, or inline tool definitions.
976
- */
977
-
978
- // Example: Using functions (traditional approach)
979
- {
980
- prepare: (context, data) => {
981
- console.log("Preparing step execution...");
982
- },
983
- finalize: (context, data) => {
984
- console.log("Finalizing step execution...");
985
- }
986
- }
987
-
988
- // Example: Using existing tools (unified Tool interface)
989
- {
990
- prepare: "validate_user_data", // Tool ID string - simple return value
991
- finalize: "send_notification", // Tool ID string - ToolResult pattern
992
- }
993
-
994
- // Example: Inline tool definition with flexible returns
995
- {
996
- prepare: {
997
- id: "setup_step_context",
998
- description: "Prepare context for this step",
999
- parameters: { type: "object", properties: {} },
1000
- handler: ({ context, data }) => {
1001
- // Simple return value
1002
- return "Setup complete";
1003
- }
1004
- },
1005
- finalize: {
1006
- id: "cleanup_step_context",
1007
- description: "Clean up after step completion",
1008
- handler: ({ context, data }) => {
1009
- // Complex ToolResult pattern
1010
- return {
1011
- data: "Cleanup complete",
1012
- success: true,
1013
- contextUpdate: { lastCleanup: new Date() }
1014
- };
1015
- }
1016
- }
1017
- }
1018
- ```
1019
-
1020
- ### Session Types
1021
-
1022
- ```typescript
1023
- interface SessionState<TData = unknown> {
1024
- id?: string;
1025
- data: Partial<TData>;
1026
- dataByRoute: Record<string, Partial<TData>>;
1027
- routeHistory: RouteHistoryEntry[];
1028
- currentRoute?: RouteRef;
1029
- currentStep?: StepRef;
1030
- metadata?: SessionMetadata;
1031
- }
1032
-
1033
- interface SessionData {
1034
- id: string;
1035
- userId?: string;
1036
- agentName?: string;
1037
- status: SessionStatus;
1038
- currentRoute?: string;
1039
- currentStep?: string;
1040
- collectedData?: Record<string, unknown>;
1041
- messageCount: number;
1042
- lastMessageAt?: Date;
1043
- completedAt?: Date;
1044
- createdAt: Date;
1045
- updatedAt: Date;
1046
- }
1047
- ```
1048
-
1049
- ### Batch Execution Types
1050
-
1051
- Types for multi-step batch execution:
1052
-
1053
- ```typescript
1054
- /**
1055
- * Reason why batch execution stopped
1056
- */
1057
- type StoppedReason =
1058
- | 'needs_input' // Step requires uncollected data
1059
- | 'end_route' // Reached END_ROUTE
1060
- | 'route_complete' // All Steps processed
1061
- | 'max_steps_reached' // Batch hit the maxStepsPerBatch limit
1062
- | 'prepare_error' // Error in prepare hook
1063
- | 'llm_error' // Error during LLM call
1064
- | 'validation_error' // Error validating collected data
1065
- | 'finalize_error'; // Error in finalize hook (non-fatal)
1066
-
1067
- /**
1068
- * Result of batch determination - which steps can execute together
1069
- */
1070
- interface BatchResult<TContext = unknown, TData = unknown> {
1071
- /** Steps included in this batch */
1072
- steps: StepOptions<TContext, TData>[];
1073
- /** Why the batch stopped */
1074
- stoppedReason: StoppedReason;
1075
- /** The Step that caused the stop (if applicable) */
1076
- stoppedAtStep?: StepOptions<TContext, TData>;
1077
- }
1078
-
1079
- /**
1080
- * Result of executing a batch of steps
1081
- */
1082
- interface BatchExecutionResult<TData = unknown> {
1083
- /** The generated message */
1084
- message: string;
1085
- /** Updated session state */
1086
- session: SessionState<TData>;
1087
- /** Steps that were executed */
1088
- executedSteps: StepRef[];
1089
- /** Why execution stopped */
1090
- stoppedReason: StoppedReason;
1091
- /** Collected data from the batch */
1092
- collectedData?: Partial<TData>;
1093
- /** Any errors that occurred */
1094
- error?: BatchExecutionError;
1095
- }
1096
-
1097
- /**
1098
- * Error details for batch execution failures
1099
- */
1100
- interface BatchExecutionError {
1101
- /** Type of error that occurred */
1102
- type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
1103
- 'llm_call' | 'data_validation' | 'finalize_hook';
1104
- /** Error message */
1105
- message: string;
1106
- /** Step where error occurred (if applicable) */
1107
- stepId?: string;
1108
- /** Additional error details */
1109
- details?: unknown;
1110
- }
1111
-
1112
- /**
1113
- * Event emitted during batch execution for debugging
1114
- */
1115
- interface BatchExecutionEvent {
1116
- /** Type of batch execution event */
1117
- type: 'batch_start' | 'step_included' | 'step_skipped' | 'batch_stop' | 'batch_complete';
1118
- /** Timestamp when the event occurred */
1119
- timestamp: Date;
1120
- /** Event-specific details */
1121
- details: {
1122
- stepId?: string;
1123
- reason?: string;
1124
- batchSize?: number;
1125
- stoppedReason?: StoppedReason;
1126
- timing?: BatchExecutionTiming;
1127
- };
1128
- }
1129
-
1130
- /**
1131
- * Timing information for batch execution phases
1132
- */
1133
- interface BatchExecutionTiming {
1134
- /** Total batch execution time in milliseconds */
1135
- totalMs: number;
1136
- /** Time spent in batch determination phase */
1137
- determinationMs?: number;
1138
- /** Time spent executing prepare hooks */
1139
- prepareHooksMs?: number;
1140
- /** Time spent in LLM call */
1141
- llmCallMs?: number;
1142
- /** Time spent collecting data */
1143
- dataCollectionMs?: number;
1144
- /** Time spent executing finalize hooks */
1145
- finalizeHooksMs?: number;
1146
- }
1147
- ```
1148
-
1149
- ### Enhanced AgentResponse
1150
-
1151
- The AgentResponse interface includes batch execution fields:
1152
-
1153
- ```typescript
1154
- interface AgentResponse<TData = unknown> {
1155
- /** The generated message */
1156
- message: string;
1157
- /** Updated session state */
1158
- session?: SessionState<TData>;
1159
- /** Tool calls made during response */
1160
- toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
1161
- /** Whether the route is complete */
1162
- isRouteComplete?: boolean;
1163
-
1164
- // Multi-step execution fields
1165
- /** Steps executed in this response */
1166
- executedSteps?: StepRef[];
1167
- /** Why execution stopped */
1168
- stoppedReason?: StoppedReason;
1169
- /** Error information if execution failed */
1170
- error?: BatchExecutionError;
1171
- }
1172
- ```
1173
-
1174
- ### Tool Types
1175
-
1176
- ```typescript
1177
- interface Tool<TContext, TArgs extends unknown[], TResult, TData> {
1178
- id: string;
1179
- description: string;
1180
- parameters: StructuredSchema;
1181
- execute: ToolHandler<TContext, TArgs, TResult, TData>;
1182
- }
1183
-
1184
- type ToolHandler<TContext, TArgs extends unknown[], TResult, TData> = (
1185
- args: TArgs[0],
1186
- context: {
1187
- context: TContext;
1188
- data: Partial<TData>;
1189
- }
1190
- ) => Promise<{
1191
- data: unknown;
1192
- contextUpdate?: Partial<TContext>;
1193
- dataUpdate?: Partial<TData>;
1194
- }>;
1195
- ```
1196
-
1197
- ### EnhancedTool
1198
-
1199
- Extends `Tool` with optional metadata for concurrency, permissions, validation, and result budgeting. See [EnhancedTool Reference](../core/tools/enhanced-tool.md) for full documentation.
1200
-
1201
- ```typescript
1202
- interface EnhancedTool<TContext, TData, TResult> extends Tool<TContext, TData, TResult> {
1203
- isConcurrencySafe?(input?: Record<string, unknown>): boolean;
1204
- isReadOnly?(input?: Record<string, unknown>): boolean;
1205
- isDestructive?(input?: Record<string, unknown>): boolean;
1206
- interruptBehavior?(): 'cancel' | 'block';
1207
- maxResultSizeChars?: number;
1208
- validateInput?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolValidationResult> | ToolValidationResult;
1209
- checkPermissions?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolPermissionResult> | ToolPermissionResult;
1210
- }
1211
-
1212
- interface ToolValidationResult { valid: boolean; error?: string; correctedInput?: Record<string, unknown>; }
1213
- interface ToolPermissionResult { allowed: boolean; reason?: string; canOverride?: boolean; }
1214
- interface ToolCallRequest { id: string; toolName: string; arguments: Record<string, unknown>; }
1215
- interface ToolExecutionUpdate<TData> { toolCallId: string; result?: ToolExecutionResult; progress?: string; contextUpdate?: Record<string, unknown>; dataUpdate?: Partial<TData>; }
1216
- interface CompactionOptions { maxTokens: number; compactionThreshold: number; preserveRecentCount: number; maxToolResultChars: number; provider: AiProvider; }
1217
- interface CompactionResult<TData> { history: HistoryItem[]; strategy: 'none' | 'tool_result_budget' | 'micro_compact' | 'auto_compact'; estimatedTokens: number; messagesCompacted: number; summary?: string; }
1218
- ```
1219
-
1220
- ### AI Provider Types
1221
-
1222
- ```typescript
1223
- interface AiProvider {
1224
- name: string;
1225
- generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>;
1226
- generateMessageStream(
1227
- input: GenerateMessageInput
1228
- ): AsyncGenerator<GenerateMessageStreamChunk>;
1229
- }
1230
-
1231
- interface GenerateMessageInput<TContext = unknown> {
1232
- prompt: string;
1233
- history: Event[];
1234
- context?: TContext;
1235
- tools?: ToolDefinition[];
1236
- parameters?: {
1237
- jsonSchema?: StructuredSchema;
1238
- schemaName?: string;
1239
- maxOutputTokens?: number;
1240
- reasoning?: { effort: "low" | "medium" | "high" };
1241
- };
1242
- signal?: AbortSignal;
1243
- }
1244
- ```
1245
-
1246
- ---
1247
-
1248
- ## Utilities
1249
-
1250
- ### Session Utilities
1251
-
1252
- ```typescript
1253
- // Overload 1: Classic — ID + metadata
1254
- createSession<TData = unknown>(sessionId?: string, metadata?: SessionMetadata): SessionState<TData>
1255
-
1256
- // Overload 2: Partial state — merge with defaults
1257
- createSession<TData = unknown>(state: Partial<SessionState<TData>>): SessionState<TData>
1258
-
1259
- // Generate a unique session ID without creating a full session
1260
- createSessionId(): string
1261
-
1262
- enterRoute<TData>(
1263
- session: SessionState<TData>,
1264
- routeId: string,
1265
- routeTitle: string
1266
- ): SessionState<TData>
1267
-
1268
- enterStep<TData>(
1269
- session: SessionState<TData>,
1270
- stepId: string,
1271
- stepDescription?: string
1272
- ): SessionState<TData>
1273
-
1274
- mergeCollected<TData>(
1275
- session: SessionState<TData>,
1276
- data: Partial<TData>
1277
- ): SessionState<TData>
1278
- ```
1279
-
1280
- ### Template Utilities
1281
-
1282
- ```typescript
1283
- render<TContext, TData>(
1284
- template: Template<TContext, TData> | undefined,
1285
- params: TemplateContext<TContext, TData>
1286
- ): Promise<string>
1287
-
1288
- renderMany<TContext, TData>(
1289
- templates: Template<TContext, TData>[] | undefined,
1290
- params: TemplateContext<TContext, TData>
1291
- ): Promise<string[]>
1292
-
1293
- formatKnowledgeBase(
1294
- data: Record<string, unknown>,
1295
- title?: string,
1296
- maxDepth?: number
1297
- ): string
1298
- ```
1299
-
1300
- ### ID Generators
1301
-
1302
- ```typescript
1303
- generateRouteId(title: string): string
1304
- generateStepId(routeId: string, description?: string): string
1305
- generateToolId(name: string): string
1306
- ```
1307
-
1308
- ## Agent-Level Data Collection Example
1309
-
1310
- Here's a comprehensive example showing the new agent-level data collection architecture:
1311
-
1312
- ```typescript
1313
- import { Agent, OpenAIProvider } from "@falai/agent";
1314
-
1315
- // Define comprehensive agent-level data interface
1316
- interface CustomerServiceData {
1317
- // Customer identification
1318
- customerId?: string;
1319
- customerName?: string;
1320
- email?: string;
1321
- phone?: string;
1322
-
1323
- // Issue tracking
1324
- issueType?: 'booking' | 'billing' | 'technical' | 'other';
1325
- issueDescription?: string;
1326
- priority?: 'low' | 'medium' | 'high';
1327
-
1328
- // Feedback
1329
- rating?: number;
1330
- comments?: string;
1331
- recommendToFriend?: boolean;
1332
- }
1333
-
1334
- // Create agent with centralized schema
1335
- const agent = new Agent<{}, CustomerServiceData>({
1336
- name: "Customer Service Agent",
1337
- provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY, model: "gpt-4" }),
1338
-
1339
- // Agent-level schema defines all possible data fields
1340
- schema: {
1341
- type: "object",
1342
- properties: {
1343
- customerId: { type: "string" },
1344
- customerName: { type: "string" },
1345
- email: { type: "string", format: "email" },
1346
- phone: { type: "string" },
1347
- issueType: { type: "string", enum: ["booking", "billing", "technical", "other"] },
1348
- issueDescription: { type: "string" },
1349
- priority: { type: "string", enum: ["low", "medium", "high"] },
1350
- rating: { type: "number", minimum: 1, maximum: 5 },
1351
- comments: { type: "string" },
1352
- recommendToFriend: { type: "boolean" }
1353
- }
1354
- },
1355
-
1356
- // Agent-level data validation and enrichment
1357
- hooks: {
1358
- onDataUpdate: async (data, previousData) => {
1359
- // Auto-set priority based on issue type
1360
- if (data.issueType === 'billing' && !data.priority) {
1361
- data.priority = 'high';
1362
- }
1363
-
1364
- // Enrich customer data
1365
- if (data.customerName && !data.customerId) {
1366
- data.customerId = await lookupCustomerId(data.customerName);
1367
- }
1368
-
1369
- return data;
1370
- }
1371
- }
1372
- });
1373
-
1374
- // Routes specify required fields instead of schemas
1375
- const supportRoute = agent.createRoute({
1376
- title: "Customer Support",
1377
- requiredFields: ["customerName", "email", "issueType", "issueDescription"],
1378
- optionalFields: ["phone", "priority"],
1379
-
1380
- initialStep: {
1381
- prompt: "I'm here to help with your issue. Can you tell me your name and email?",
1382
- collect: ["customerName", "email"]
1383
- }
1384
- });
1385
-
1386
- const feedbackRoute = agent.createRoute({
1387
- title: "Feedback Collection",
1388
- requiredFields: ["customerName", "email", "rating"],
1389
- optionalFields: ["comments", "recommendToFriend"],
1390
-
1391
- initialStep: {
1392
- prompt: "I'd love to get your feedback. What's your name and email?",
1393
- collect: ["customerName", "email"]
1394
- }
1395
- });
1396
-
1397
- // Cross-route data sharing example
1398
- const response1 = await agent.respond("Hi, I'm John Doe, email john@example.com, I have a billing issue");
1399
- // Agent data: { customerName: "John Doe", email: "john@example.com", issueType: "billing" }
1400
-
1401
- const response2 = await agent.respond("Actually, I want to leave feedback instead. I'd rate you 5 stars.");
1402
- // Feedback route completes immediately: already has name, email, and now rating
1403
- // { customerName: "John Doe", email: "john@example.com", rating: 5 }
1404
-
1405
- // Check route completion
1406
- console.log(feedbackRoute.isComplete(agent.getCollectedData())); // true
1407
- console.log(feedbackRoute.getCompletionProgress(agent.getCollectedData())); // 1.0
1408
- ```
1409
-
1410
- 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/).