@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,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 };