@falai/agent 1.2.8 → 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 (499) 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 +1191 -1014
  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 +509 -136
  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/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. 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/).