@falai/agent 1.2.8 → 2.0.1

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