@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,656 +0,0 @@
1
- /**
2
- * Example: Streaming Responses
3
- * Updated for ResponseModal architecture with modern streaming APIs
4
- *
5
- * This example demonstrates both the new modern stream() API and the legacy
6
- * respondStream() method for streaming AI responses in real-time.
7
- *
8
- * NEW: The modern stream() API provides automatic session management and
9
- * a simpler interface similar to chat() but with streaming.
10
- */
11
-
12
- import {
13
- Agent,
14
- AnthropicProvider,
15
- OpenAIProvider,
16
- GeminiProvider,
17
- type EnhancedTool,
18
- } from "../../src/index";
19
-
20
- // Custom context type
21
- interface ConversationContext {
22
- userId: string;
23
- sessionId: string;
24
- preferences: {
25
- streamingEnabled: boolean;
26
- };
27
- }
28
-
29
- async function modernStreamingWithAnthropic() {
30
- console.log("\nšŸ¤– Example 1: Modern Streaming API with Anthropic (Claude)\n");
31
-
32
- // Initialize Anthropic provider
33
- const provider = new AnthropicProvider({
34
- apiKey: process.env.ANTHROPIC_API_KEY || "",
35
- model: "claude-sonnet-4-5",
36
- config: {
37
- temperature: 0.7,
38
- max_tokens: 1000,
39
- },
40
- });
41
-
42
- // Create agent
43
- const agent = new Agent<ConversationContext, unknown>({
44
- name: "StreamingAssistant",
45
- description: "An AI assistant that streams responses in real-time",
46
- goal: "Provide helpful information with streaming responses",
47
- context: {
48
- userId: "user123",
49
- sessionId: "session456",
50
- preferences: {
51
- streamingEnabled: true,
52
- },
53
- },
54
- provider: provider,
55
- });
56
-
57
- // Add guidelines
58
- agent.createGuideline({
59
- action: "Be concise but informative in your responses",
60
- enabled: true,
61
- });
62
-
63
- try {
64
- console.log("šŸ“¤ Modern streaming API - automatic session management...\n");
65
- console.log("Response: ");
66
-
67
- // Session is automatically managed by the agent
68
- console.log("✨ Session ready:", agent.session.id);
69
-
70
- // NEW: Modern stream() API - automatically manages session history
71
- for await (const chunk of agent.stream("Explain quantum computing in simple terms.")) {
72
- // chunk.delta contains the new text
73
- // chunk.accumulated contains the full text so far
74
- // chunk.done indicates if this is the final chunk
75
-
76
- if (chunk.delta) {
77
- process.stdout.write(chunk.delta);
78
- }
79
-
80
- if (chunk.done) {
81
- console.log("\n\nāœ… Stream complete!");
82
- console.log(`\nšŸ“Š Metadata:`);
83
- console.log(
84
- ` - Route: ${chunk.session?.currentRoute?.title || "None"}`
85
- );
86
- console.log(` - Data:`, agent.session.getData() || "None");
87
- console.log(` - Tool Calls: ${chunk.toolCalls?.length || 0}`);
88
-
89
- // Session history is automatically updated - no manual management needed!
90
- console.log(` - Session Messages: ${agent.session.getHistory().length}`);
91
- }
92
- }
93
-
94
- console.log("\nšŸ’” Benefits of modern stream() API:");
95
- console.log(" - Automatic session management");
96
- console.log(" - Simple interface: agent.stream('message')");
97
- console.log(" - No need to manually manage history");
98
- console.log(" - Same performance as respondStream()");
99
-
100
- } catch (error) {
101
- console.error("āŒ Error:", error);
102
- }
103
- }
104
-
105
- async function legacyStreamingWithAnthropic() {
106
- console.log("\nšŸ¤– Example 2: Legacy Streaming API (respondStream) - Still Supported\n");
107
-
108
- // Initialize Anthropic provider
109
- const provider = new AnthropicProvider({
110
- apiKey: process.env.ANTHROPIC_API_KEY || "",
111
- model: "claude-sonnet-4-5",
112
- config: {
113
- temperature: 0.7,
114
- max_tokens: 1000,
115
- },
116
- });
117
-
118
- // Create agent
119
- const agent = new Agent<ConversationContext, unknown>({
120
- name: "LegacyStreamingAssistant",
121
- description: "An AI assistant using legacy streaming API",
122
- goal: "Demonstrate backward compatibility",
123
- context: {
124
- userId: "user123",
125
- sessionId: "session456-legacy",
126
- preferences: {
127
- streamingEnabled: true,
128
- },
129
- },
130
- provider: provider,
131
- });
132
-
133
- try {
134
- console.log("šŸ“¤ Legacy respondStream API - manual session management...\n");
135
- console.log("Response: ");
136
-
137
- // Session is automatically managed by the agent
138
- console.log("✨ Session ready:", agent.session.id);
139
-
140
- // Add user message to session history manually
141
- await agent.session.addMessage("user", "What's the weather like today?");
142
-
143
- // Legacy respondStream API - requires manual session management
144
- let fullMessage = "";
145
- for await (const chunk of agent.respondStream({
146
- history: agent.session.getHistory()
147
- })) {
148
- if (chunk.delta) {
149
- process.stdout.write(chunk.delta);
150
- fullMessage += chunk.delta;
151
- }
152
-
153
- if (chunk.done) {
154
- console.log("\n\nāœ… Stream complete!");
155
- console.log(`\nšŸ“Š Metadata:`);
156
- console.log(
157
- ` - Route: ${chunk.session?.currentRoute?.title || "None"}`
158
- );
159
- console.log(` - Data:`, agent.session.getData() || "None");
160
- console.log(` - Tool Calls: ${chunk.toolCalls?.length || 0}`);
161
-
162
- // Manual session history management required
163
- await agent.session.addMessage("assistant", fullMessage);
164
- console.log(` - Session Messages: ${agent.session.getHistory().length}`);
165
- }
166
- }
167
-
168
- console.log("\nšŸ’” Legacy respondStream() API characteristics:");
169
- console.log(" - Manual session management required");
170
- console.log(" - More complex parameter structure");
171
- console.log(" - Full backward compatibility maintained");
172
- console.log(" - Still fully supported for existing code");
173
-
174
- } catch (error) {
175
- console.error("āŒ Error:", error);
176
- }
177
- }
178
-
179
- async function modernStreamingWithOpenAI() {
180
- console.log("\nšŸ¤– Example 3: Modern Streaming with OpenAI\n");
181
-
182
- const provider = new OpenAIProvider({
183
- apiKey: process.env.OPENAI_API_KEY || "",
184
- model: "gpt-4",
185
- config: {
186
- temperature: 0.8,
187
- },
188
- });
189
-
190
- const agent = new Agent<ConversationContext, unknown>({
191
- name: "CreativeAssistant",
192
- description: "A creative AI assistant",
193
- context: {
194
- userId: "user123",
195
- sessionId: "session789",
196
- preferences: {
197
- streamingEnabled: true,
198
- },
199
- },
200
- provider: provider,
201
- });
202
-
203
- try {
204
- console.log("šŸ“¤ Modern streaming with OpenAI...\n");
205
- console.log("Response: ");
206
-
207
- // Session is automatically managed by the agent
208
- console.log("✨ Session ready:", agent.session.id);
209
-
210
- // NEW: Modern stream() API with context override
211
- for await (const chunk of agent.stream("Write a short poem about TypeScript", {
212
- contextOverride: { preferences: { streamingEnabled: true } }
213
- })) {
214
- if (chunk.delta) {
215
- process.stdout.write(chunk.delta);
216
- }
217
-
218
- if (chunk.done) {
219
- console.log("\n\nāœ… Stream complete!");
220
- console.log(
221
- ` - Route: ${chunk.session?.currentRoute?.title || "None"}`
222
- );
223
- console.log(` - Data:`, agent.session.getData() || "None");
224
-
225
- // Session automatically updated - no manual work needed!
226
- console.log(` - Session Messages: ${agent.session.getHistory().length}`);
227
- }
228
- }
229
- } catch (error) {
230
- console.error("āŒ Error:", error);
231
- }
232
- }
233
-
234
- async function modernStreamingComparison() {
235
- console.log("\nšŸ¤– Example 4: Side-by-Side API Comparison\n");
236
-
237
- const provider = new GeminiProvider({
238
- apiKey: process.env.GEMINI_API_KEY || "",
239
- model: "models/gemini-2.5-flash",
240
- config: {
241
- temperature: 0.7,
242
- },
243
- });
244
-
245
- const agent = new Agent<ConversationContext, unknown>({
246
- name: "ComparisonAssistant",
247
- description: "Demonstrates API differences",
248
- context: {
249
- userId: "user123",
250
- sessionId: "session101",
251
- preferences: {
252
- streamingEnabled: true,
253
- },
254
- },
255
- provider: provider,
256
- });
257
-
258
- const userMessage = "What are the key differences between REST and GraphQL?";
259
-
260
- try {
261
- console.log("šŸ“¤ Comparing old vs new streaming APIs...\n");
262
-
263
- // ========================================================================
264
- // OLD WAY: respondStream() - Manual session management
265
- // ========================================================================
266
- console.log("šŸ”ø OLD WAY: respondStream() with manual session management");
267
- console.log("Response: ");
268
-
269
- // Manual session management
270
- await agent.session.addMessage("user", userMessage);
271
-
272
- let oldWayMessage = "";
273
- for await (const chunk of agent.respondStream({
274
- history: agent.session.getHistory()
275
- })) {
276
- if (chunk.delta) {
277
- process.stdout.write(chunk.delta);
278
- oldWayMessage += chunk.delta;
279
- }
280
-
281
- if (chunk.done) {
282
- // Manual history update required
283
- await agent.session.addMessage("assistant", oldWayMessage);
284
- console.log("\n āœ… Manual session update completed");
285
- }
286
- }
287
-
288
- console.log("\n" + "=".repeat(60));
289
-
290
- // ========================================================================
291
- // NEW WAY: stream() - Automatic session management
292
- // ========================================================================
293
- console.log("šŸ”ø NEW WAY: stream() with automatic session management");
294
- console.log("Response: ");
295
-
296
- // Automatic session management - just pass the message!
297
- for await (const chunk of agent.stream("Can you explain that in more detail?")) {
298
- if (chunk.delta) {
299
- process.stdout.write(chunk.delta);
300
- }
301
-
302
- if (chunk.done) {
303
- console.log("\n āœ… Automatic session update - no manual work needed!");
304
- console.log(` šŸ“Š Total messages in session: ${agent.session.getHistory().length}`);
305
- }
306
- }
307
-
308
- console.log("\nšŸ’” Key Differences:");
309
- console.log(" OLD: agent.respondStream({ history: agent.session.getHistory() })");
310
- console.log(" NEW: agent.stream('message')");
311
- console.log(" ");
312
- console.log(" OLD: Manual session.addMessage() calls required");
313
- console.log(" NEW: Automatic session management");
314
- console.log(" ");
315
- console.log(" OLD: Complex parameter structure");
316
- console.log(" NEW: Simple message + optional options");
317
-
318
- } catch (error) {
319
- console.error("āŒ Error:", error);
320
- }
321
- }
322
-
323
- async function modernStreamingWithRoutes() {
324
- console.log("\nšŸ¤– Example 5: Modern Streaming with Routes and Steps\n");
325
-
326
- const provider = new AnthropicProvider({
327
- apiKey: process.env.ANTHROPIC_API_KEY || "",
328
- model: "claude-sonnet-4-5",
329
- });
330
-
331
- // Define feedback data schema
332
- interface FeedbackData {
333
- rating: number;
334
- comments: string;
335
- }
336
-
337
- const feedbackSchema = {
338
- type: "object",
339
- properties: {
340
- rating: { type: "number", minimum: 1, maximum: 5 },
341
- comments: { type: "string" },
342
- },
343
- required: ["rating"],
344
- };
345
-
346
- const agent = new Agent<ConversationContext, FeedbackData>({
347
- name: "SupportAgent",
348
- description: "A customer support agent with conversation routes",
349
- context: {
350
- userId: "user123",
351
- sessionId: "session202",
352
- preferences: {
353
- streamingEnabled: true,
354
- },
355
- },
356
- provider: provider,
357
- // NEW: Agent-level schema
358
- schema: feedbackSchema,
359
- });
360
-
361
- // Create a route
362
- const supportRoute = agent.createRoute({
363
- title: "Product Support",
364
- description: "Help users with product questions",
365
- when: ["User asks about product features or issues"],
366
- });
367
-
368
- supportRoute.initialStep.nextStep({
369
- prompt: "Understand the user's product question",
370
- });
371
-
372
- // Create a feedback route
373
- agent.createRoute({
374
- title: "Collect Feedback",
375
- description: "Collect user feedback on their support experience",
376
- when: ["User wants to provide feedback"],
377
- // NEW: Required fields for route completion
378
- requiredFields: ["rating"],
379
- // NEW: Optional fields
380
- optionalFields: ["comments"],
381
- steps: [
382
- {
383
- prompt: "How would you rate your support experience from 1 to 5?",
384
- collect: ["rating"],
385
- },
386
- {
387
- prompt: "Thanks for the rating! Any other comments?",
388
- collect: ["comments"],
389
- },
390
- {
391
- prompt: "We appreciate your feedback!",
392
- },
393
- ],
394
- });
395
-
396
- const history = [
397
- {
398
- role: "user" as const,
399
- content: "How do I reset my password?",
400
- name: "User",
401
- },
402
- ];
403
-
404
- try {
405
- console.log("šŸ“¤ Streaming response with route detection...\n");
406
- console.log("Response: ");
407
-
408
- // Session is automatically managed by the agent
409
- console.log("✨ Session ready:", agent.session.id);
410
-
411
- // NEW: Modern stream() API with routes - automatic session management
412
- for await (const chunk of agent.stream("How do I reset my password?")) {
413
- if (chunk.delta) {
414
- process.stdout.write(chunk.delta);
415
- }
416
-
417
- if (chunk.done) {
418
- console.log("\n\nāœ… Stream complete!");
419
- console.log(`\nšŸ“Š Metadata:`);
420
- console.log(
421
- ` - Route: ${chunk.session?.currentRoute?.title || "None"}`
422
- );
423
- console.log(` - Data:`, agent.session.getData() || "None");
424
-
425
- // Check for route completion
426
- if (chunk.isRouteComplete) {
427
- console.log("\nāœ… Route complete!");
428
- if (chunk.session?.currentRoute?.title === "Collect Feedback") {
429
- await logFeedback(agent.session.getData() as FeedbackData);
430
- }
431
- }
432
-
433
- // Session is automatically updated by the modern stream() API
434
- }
435
- }
436
- } catch (error) {
437
- console.error("āŒ Error:", error);
438
- }
439
- }
440
-
441
- async function modernStreamingWithAbortSignal() {
442
- console.log("\nšŸ¤– Example 6: Modern Streaming with Abort Control\n");
443
-
444
- const provider = new AnthropicProvider({
445
- apiKey: process.env.ANTHROPIC_API_KEY || "",
446
- model: "claude-sonnet-4-5",
447
- });
448
-
449
- const agent = new Agent<ConversationContext, unknown>({
450
- name: "Assistant",
451
- description: "An assistant that can be interrupted",
452
- context: {
453
- userId: "user123",
454
- sessionId: "session303",
455
- preferences: {
456
- streamingEnabled: true,
457
- },
458
- },
459
- provider: provider,
460
- });
461
-
462
- const history = [
463
- {
464
- role: "user" as const,
465
- content: "Tell me a very long story about space exploration.",
466
- name: "User",
467
- },
468
- ];
469
-
470
- // Create an AbortController to cancel the stream
471
- const abortController = new AbortController();
472
-
473
- // Automatically abort after 3 seconds
474
- const timeout = setTimeout(() => {
475
- console.log("\n\nāš ļø Aborting stream after 3 seconds...");
476
- abortController.abort();
477
- }, 3000);
478
-
479
- try {
480
- console.log("šŸ“¤ Streaming response (will abort after 3s)...\n");
481
- console.log("Response: ");
482
-
483
- // Session is automatically managed by the agent
484
- console.log("✨ Session ready:", agent.session.id);
485
-
486
- // NEW: Modern stream() API with abort signal
487
- for await (const chunk of agent.stream("Tell me a very long story about space exploration.", {
488
- signal: abortController.signal,
489
- })) {
490
- if (chunk.delta) {
491
- process.stdout.write(chunk.delta);
492
- }
493
-
494
- if (chunk.done) {
495
- console.log("\n\nāœ… Stream complete!");
496
- console.log(`\nšŸ“Š Metadata:`);
497
- console.log(
498
- ` - Route: ${chunk.session?.currentRoute?.title || "None"}`
499
- );
500
- console.log(` - Data:`, agent.session.getData() || "None");
501
-
502
- // Session is automatically updated by the modern stream() API - no manual work needed!
503
-
504
- clearTimeout(timeout);
505
- }
506
- }
507
- } catch (error) {
508
- if (error instanceof Error && error.name === "AbortError") {
509
- console.log("\n\nšŸ›‘ Stream was aborted successfully!");
510
- } else {
511
- console.error("āŒ Error:", error);
512
- }
513
- clearTimeout(timeout);
514
- }
515
- }
516
-
517
- /**
518
- * Mock function to log feedback.
519
- * @param data - The feedback data.
520
- */
521
- async function logFeedback(data: { rating: number; comments: string }) {
522
- console.log("\n" + "=".repeat(60));
523
- console.log("šŸ“ Logging Feedback...");
524
- console.log("=".repeat(60));
525
- console.log("Feedback Details:", JSON.stringify(data, null, 2));
526
- console.log(` - Rating: ${data.rating}`);
527
- console.log(` - Comments: ${data.comments}`);
528
- await new Promise((resolve) => setTimeout(resolve, 1000));
529
- console.log("✨ Feedback logged successfully!");
530
- }
531
-
532
- async function streamingWithToolExecution() {
533
- console.log("\nšŸ¤– Example 7: Streaming with Tool Execution\n");
534
-
535
- const provider = new AnthropicProvider({
536
- apiKey: process.env.ANTHROPIC_API_KEY || "",
537
- model: "claude-sonnet-4-5",
538
- });
539
-
540
- // Define EnhancedTools with concurrency metadata
541
- const readFileTool: EnhancedTool = {
542
- id: "read_file",
543
- name: "Read File",
544
- description: "Read a file from disk",
545
- parameters: {
546
- type: "object",
547
- properties: { path: { type: "string" } },
548
- required: ["path"],
549
- },
550
- handler: async (_ctx, args) => {
551
- await new Promise((r) => setTimeout(r, 200));
552
- return { data: `Contents of ${args?.path}`, success: true };
553
- },
554
- isConcurrencySafe: () => true,
555
- isReadOnly: () => true,
556
- interruptBehavior: () => "cancel",
557
- };
558
-
559
- const writeFileTool: EnhancedTool = {
560
- id: "write_file",
561
- name: "Write File",
562
- description: "Write content to a file",
563
- parameters: {
564
- type: "object",
565
- properties: { path: { type: "string" }, content: { type: "string" } },
566
- required: ["path", "content"],
567
- },
568
- handler: async (_ctx, args) => {
569
- await new Promise((r) => setTimeout(r, 150));
570
- return { data: `Wrote to ${args?.path}`, success: true };
571
- },
572
- isConcurrencySafe: () => false,
573
- isDestructive: () => true,
574
- interruptBehavior: () => "block",
575
- maxResultSizeChars: 1_000,
576
- };
577
-
578
- const agent = new Agent({
579
- name: "ToolStreamingAssistant",
580
- description: "Demonstrates streaming with concurrent tool execution",
581
- provider,
582
- tools: [readFileTool, writeFileTool],
583
- });
584
-
585
- try {
586
- console.log("šŸ“¤ Streaming with tool execution...\n");
587
- console.log("When the LLM calls multiple read-only tools, they execute in parallel.");
588
- console.log("Write tools wait for exclusive access.\n");
589
- console.log("Response: ");
590
-
591
- for await (const chunk of agent.stream("Read index.ts and utils.ts, then write output.ts")) {
592
- if (chunk.delta) {
593
- process.stdout.write(chunk.delta);
594
- }
595
-
596
- if (chunk.done) {
597
- console.log("\n\nāœ… Stream complete!");
598
- console.log(` Tool Calls: ${chunk.toolCalls?.length || 0}`);
599
- console.log(` Session Messages: ${agent.session.getHistory().length}`);
600
- }
601
- }
602
- } catch (error) {
603
- console.error("āŒ Error:", error);
604
- }
605
- }
606
-
607
- async function main() {
608
- console.log("šŸš€ Starting Streaming Examples\n");
609
- console.log("=".repeat(60));
610
-
611
- const examples = [
612
- { name: "Modern Streaming API (Anthropic)", fn: modernStreamingWithAnthropic },
613
- { name: "Legacy Streaming API (Anthropic)", fn: legacyStreamingWithAnthropic },
614
- { name: "Modern Streaming (OpenAI)", fn: modernStreamingWithOpenAI },
615
- { name: "API Comparison (Gemini)", fn: modernStreamingComparison },
616
- { name: "Modern Streaming with Routes", fn: modernStreamingWithRoutes },
617
- { name: "Modern Streaming with Abort", fn: modernStreamingWithAbortSignal },
618
- { name: "Streaming with Tool Execution", fn: streamingWithToolExecution },
619
- ];
620
-
621
- console.log("\nAvailable Examples:");
622
- examples.forEach((ex, i) => {
623
- console.log(` ${i + 1}. ${ex.name}`);
624
- });
625
-
626
- console.log("\nšŸ’” Tips:");
627
- console.log(" - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY");
628
- console.log(" - NEW: Use agent.stream('message') for automatic session management");
629
- console.log(" - OLD: agent.respondStream() still supported for backward compatibility");
630
- console.log(" - Streaming provides real-time responses for better UX");
631
- console.log(" - Use AbortSignal to cancel long-running streams");
632
- console.log(" - Access chunk.route and chunk.step for flow information");
633
- console.log(" - NEW: EnhancedTool metadata enables parallel read-only tool execution");
634
-
635
- console.log("\n" + "=".repeat(60));
636
-
637
- // Run modern streaming example if API key is available
638
- if (process.env.ANTHROPIC_API_KEY) {
639
- await modernStreamingWithAnthropic();
640
- } else if (process.env.OPENAI_API_KEY) {
641
- await modernStreamingWithOpenAI();
642
- } else if (process.env.GEMINI_API_KEY) {
643
- await modernStreamingComparison();
644
- } else {
645
- console.log(
646
- "\nāš ļø No API keys found. Set one of the environment variables to run examples."
647
- );
648
- }
649
- }
650
-
651
- // Run if executed directly
652
- if (import.meta.url === `file://${process.argv[1]}`) {
653
- main().catch(console.error);
654
- }
655
-
656
- export { main };