@falai/agent 2.6.1 → 3.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 (611) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/MemoryAdapter.d.ts +1 -1
  3. package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
  4. package/dist/adapters/MemoryAdapter.js +32 -36
  5. package/dist/adapters/MemoryAdapter.js.map +1 -1
  6. package/dist/adapters/MongoAdapter.d.ts +1 -1
  7. package/dist/adapters/MongoAdapter.d.ts.map +1 -1
  8. package/dist/adapters/MongoAdapter.js +2 -2
  9. package/dist/adapters/MongoAdapter.js.map +1 -1
  10. package/dist/adapters/OpenSearchAdapter.d.ts +1 -1
  11. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  12. package/dist/adapters/OpenSearchAdapter.js +3 -3
  13. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  14. package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
  15. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  16. package/dist/adapters/PostgreSQLAdapter.js +18 -13
  17. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  18. package/dist/adapters/PrismaAdapter.d.ts +1 -1
  19. package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
  20. package/dist/adapters/PrismaAdapter.js +3 -3
  21. package/dist/adapters/PrismaAdapter.js.map +1 -1
  22. package/dist/adapters/RedisAdapter.d.ts +2 -1
  23. package/dist/adapters/RedisAdapter.d.ts.map +1 -1
  24. package/dist/adapters/RedisAdapter.js +77 -27
  25. package/dist/adapters/RedisAdapter.js.map +1 -1
  26. package/dist/adapters/SQLiteAdapter.d.ts +1 -1
  27. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  28. package/dist/adapters/SQLiteAdapter.js +9 -31
  29. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  30. package/dist/adapters/index.d.ts +13 -13
  31. package/dist/adapters/index.d.ts.map +1 -1
  32. package/dist/adapters/index.js +7 -7
  33. package/dist/adapters/index.js.map +1 -1
  34. package/dist/adapters/sessionRow.d.ts +22 -0
  35. package/dist/adapters/sessionRow.d.ts.map +1 -0
  36. package/dist/adapters/sessionRow.js +48 -0
  37. package/dist/adapters/sessionRow.js.map +1 -0
  38. package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
  39. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
  40. package/dist/cjs/adapters/MemoryAdapter.js +39 -43
  41. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  42. package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
  43. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
  44. package/dist/cjs/adapters/MongoAdapter.js +4 -4
  45. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  46. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +1 -1
  47. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  48. package/dist/cjs/adapters/OpenSearchAdapter.js +6 -6
  49. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  50. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
  51. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  52. package/dist/cjs/adapters/PostgreSQLAdapter.js +20 -15
  53. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  54. package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
  55. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
  56. package/dist/cjs/adapters/PrismaAdapter.js +7 -7
  57. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  58. package/dist/cjs/adapters/RedisAdapter.d.ts +2 -1
  59. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
  60. package/dist/cjs/adapters/RedisAdapter.js +81 -31
  61. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  62. package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
  63. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  64. package/dist/cjs/adapters/SQLiteAdapter.js +11 -33
  65. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  66. package/dist/cjs/adapters/index.d.ts +13 -13
  67. package/dist/cjs/adapters/index.d.ts.map +1 -1
  68. package/dist/cjs/adapters/index.js +14 -14
  69. package/dist/cjs/adapters/index.js.map +1 -1
  70. package/dist/cjs/adapters/sessionRow.d.ts +22 -0
  71. package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
  72. package/dist/cjs/adapters/sessionRow.js +52 -0
  73. package/dist/cjs/adapters/sessionRow.js.map +1 -0
  74. package/dist/cjs/core/Agent.d.ts +19 -11
  75. package/dist/cjs/core/Agent.d.ts.map +1 -1
  76. package/dist/cjs/core/Agent.js +102 -64
  77. package/dist/cjs/core/Agent.js.map +1 -1
  78. package/dist/cjs/core/AutoChainExecutor.d.ts +12 -22
  79. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
  80. package/dist/cjs/core/AutoChainExecutor.js +46 -49
  81. package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
  82. package/dist/cjs/core/BranchEvaluator.d.ts +4 -4
  83. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
  84. package/dist/cjs/core/BranchEvaluator.js +6 -6
  85. package/dist/cjs/core/BranchEvaluator.js.map +1 -1
  86. package/dist/cjs/core/CompactionEngine.d.ts +16 -3
  87. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  88. package/dist/cjs/core/CompactionEngine.js +30 -6
  89. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  90. package/dist/cjs/core/DirectiveChainTracker.d.ts +1 -1
  91. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -1
  92. package/dist/cjs/core/DirectiveChainTracker.js +5 -5
  93. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -1
  94. package/dist/cjs/core/Events.d.ts +1 -1
  95. package/dist/cjs/core/Events.d.ts.map +1 -1
  96. package/dist/cjs/core/Events.js +15 -15
  97. package/dist/cjs/core/Events.js.map +1 -1
  98. package/dist/cjs/core/Flow.d.ts +4 -4
  99. package/dist/cjs/core/Flow.d.ts.map +1 -1
  100. package/dist/cjs/core/Flow.js +15 -15
  101. package/dist/cjs/core/Flow.js.map +1 -1
  102. package/dist/cjs/core/FlowRouter.d.ts +4 -4
  103. package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
  104. package/dist/cjs/core/FlowRouter.js +92 -70
  105. package/dist/cjs/core/FlowRouter.js.map +1 -1
  106. package/dist/cjs/core/PersistenceManager.d.ts +1 -1
  107. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  108. package/dist/cjs/core/PersistenceManager.js +10 -10
  109. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  110. package/dist/cjs/core/PromptComposer.d.ts +4 -4
  111. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  112. package/dist/cjs/core/PromptComposer.js +13 -13
  113. package/dist/cjs/core/PromptComposer.js.map +1 -1
  114. package/dist/cjs/core/PromptSectionCache.d.ts +2 -2
  115. package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -1
  116. package/dist/cjs/core/ResponseEngine.d.ts +4 -4
  117. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  118. package/dist/cjs/core/ResponseEngine.js +7 -7
  119. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  120. package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -1
  121. package/dist/cjs/core/ResponseGenerationError.js +3 -5
  122. package/dist/cjs/core/ResponseGenerationError.js.map +1 -1
  123. package/dist/cjs/core/ResponseModal.d.ts +39 -10
  124. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  125. package/dist/cjs/core/ResponseModal.js +195 -72
  126. package/dist/cjs/core/ResponseModal.js.map +1 -1
  127. package/dist/cjs/core/ResponsePipeline.d.ts +50 -12
  128. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  129. package/dist/cjs/core/ResponsePipeline.js +301 -158
  130. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  131. package/dist/cjs/core/SessionFinalizer.d.ts +4 -4
  132. package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -1
  133. package/dist/cjs/core/SessionFinalizer.js +36 -9
  134. package/dist/cjs/core/SessionFinalizer.js.map +1 -1
  135. package/dist/cjs/core/SessionManager.d.ts +15 -6
  136. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  137. package/dist/cjs/core/SessionManager.js +49 -22
  138. package/dist/cjs/core/SessionManager.js.map +1 -1
  139. package/dist/cjs/core/SignalCoordinator.d.ts +5 -5
  140. package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -1
  141. package/dist/cjs/core/SignalCoordinator.js +12 -12
  142. package/dist/cjs/core/SignalCoordinator.js.map +1 -1
  143. package/dist/cjs/core/SignalEvaluator.d.ts +4 -4
  144. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
  145. package/dist/cjs/core/SignalEvaluator.js +6 -6
  146. package/dist/cjs/core/SignalEvaluator.js.map +1 -1
  147. package/dist/cjs/core/SignalProcessor.d.ts +6 -6
  148. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
  149. package/dist/cjs/core/SignalProcessor.js +17 -89
  150. package/dist/cjs/core/SignalProcessor.js.map +1 -1
  151. package/dist/cjs/core/Step.d.ts +5 -5
  152. package/dist/cjs/core/Step.d.ts.map +1 -1
  153. package/dist/cjs/core/Step.js +65 -17
  154. package/dist/cjs/core/Step.js.map +1 -1
  155. package/dist/cjs/core/StepLifecycle.d.ts +18 -8
  156. package/dist/cjs/core/StepLifecycle.d.ts.map +1 -1
  157. package/dist/cjs/core/StepLifecycle.js +103 -20
  158. package/dist/cjs/core/StepLifecycle.js.map +1 -1
  159. package/dist/cjs/core/StreamingToolExecutor.d.ts +1 -1
  160. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  161. package/dist/cjs/core/StreamingToolExecutor.js +30 -6
  162. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  163. package/dist/cjs/core/ToolLoopExecutor.d.ts +8 -4
  164. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -1
  165. package/dist/cjs/core/ToolLoopExecutor.js +189 -97
  166. package/dist/cjs/core/ToolLoopExecutor.js.map +1 -1
  167. package/dist/cjs/core/ToolManager.d.ts +6 -6
  168. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  169. package/dist/cjs/core/ToolManager.js +102 -79
  170. package/dist/cjs/core/ToolManager.js.map +1 -1
  171. package/dist/cjs/core/createAgent.d.ts +2 -2
  172. package/dist/cjs/core/createAgent.d.ts.map +1 -1
  173. package/dist/cjs/core/createAgent.js +2 -2
  174. package/dist/cjs/core/createAgent.js.map +1 -1
  175. package/dist/cjs/core/flow-namespace.d.ts +16 -1
  176. package/dist/cjs/core/flow-namespace.d.ts.map +1 -1
  177. package/dist/cjs/core/flow-namespace.js +26 -4
  178. package/dist/cjs/core/flow-namespace.js.map +1 -1
  179. package/dist/cjs/core/toolGates.d.ts +1 -1
  180. package/dist/cjs/core/toolGates.d.ts.map +1 -1
  181. package/dist/cjs/core/toolGates.js +3 -3
  182. package/dist/cjs/core/toolGates.js.map +1 -1
  183. package/dist/cjs/index.d.ts +50 -45
  184. package/dist/cjs/index.d.ts.map +1 -1
  185. package/dist/cjs/index.js +96 -88
  186. package/dist/cjs/index.js.map +1 -1
  187. package/dist/cjs/providers/AnthropicProvider.d.ts +25 -35
  188. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
  189. package/dist/cjs/providers/AnthropicProvider.js +30 -426
  190. package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
  191. package/dist/cjs/providers/DeepSeekProvider.d.ts +13 -34
  192. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  193. package/dist/cjs/providers/DeepSeekProvider.js +17 -51
  194. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  195. package/dist/cjs/providers/GeminiProvider.d.ts +22 -75
  196. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  197. package/dist/cjs/providers/GeminiProvider.js +32 -558
  198. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  199. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
  200. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
  201. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +14 -20
  202. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  203. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +26 -135
  204. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  205. package/dist/cjs/providers/OpenAICompatibleProvider.js +40 -496
  206. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
  207. package/dist/cjs/providers/OpenAIProvider.d.ts +14 -20
  208. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  209. package/dist/cjs/providers/OpenAIProvider.js +21 -28
  210. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  211. package/dist/cjs/providers/OpenRouterProvider.d.ts +20 -24
  212. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  213. package/dist/cjs/providers/OpenRouterProvider.js +22 -38
  214. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  215. package/dist/cjs/providers/ProviderAdapter.d.ts +94 -0
  216. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
  217. package/dist/cjs/providers/ProviderAdapter.js +257 -0
  218. package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
  219. package/dist/cjs/providers/index.d.ts +21 -18
  220. package/dist/cjs/providers/index.d.ts.map +1 -1
  221. package/dist/cjs/providers/index.js +23 -21
  222. package/dist/cjs/providers/index.js.map +1 -1
  223. package/dist/cjs/types/agent.d.ts +37 -11
  224. package/dist/cjs/types/agent.d.ts.map +1 -1
  225. package/dist/cjs/types/ai.d.ts +11 -21
  226. package/dist/cjs/types/ai.d.ts.map +1 -1
  227. package/dist/cjs/types/compaction.d.ts +2 -2
  228. package/dist/cjs/types/compaction.d.ts.map +1 -1
  229. package/dist/cjs/types/errors.d.ts +16 -20
  230. package/dist/cjs/types/errors.d.ts.map +1 -1
  231. package/dist/cjs/types/errors.js +17 -18
  232. package/dist/cjs/types/errors.js.map +1 -1
  233. package/dist/cjs/types/flow.d.ts +56 -39
  234. package/dist/cjs/types/flow.d.ts.map +1 -1
  235. package/dist/cjs/types/history.d.ts +1 -1
  236. package/dist/cjs/types/history.d.ts.map +1 -1
  237. package/dist/cjs/types/index.d.ts +17 -17
  238. package/dist/cjs/types/index.d.ts.map +1 -1
  239. package/dist/cjs/types/index.js +14 -14
  240. package/dist/cjs/types/index.js.map +1 -1
  241. package/dist/cjs/types/persistence.d.ts +2 -2
  242. package/dist/cjs/types/persistence.d.ts.map +1 -1
  243. package/dist/cjs/types/session.d.ts +4 -4
  244. package/dist/cjs/types/session.d.ts.map +1 -1
  245. package/dist/cjs/types/signals.d.ts +3 -3
  246. package/dist/cjs/types/signals.d.ts.map +1 -1
  247. package/dist/cjs/types/template.d.ts +2 -2
  248. package/dist/cjs/types/template.d.ts.map +1 -1
  249. package/dist/cjs/types/tool.d.ts +4 -2
  250. package/dist/cjs/types/tool.d.ts.map +1 -1
  251. package/dist/cjs/types/tool.js.map +1 -1
  252. package/dist/cjs/utils/condition.d.ts +1 -1
  253. package/dist/cjs/utils/condition.d.ts.map +1 -1
  254. package/dist/cjs/utils/condition.js +6 -6
  255. package/dist/cjs/utils/condition.js.map +1 -1
  256. package/dist/cjs/utils/event.d.ts +1 -1
  257. package/dist/cjs/utils/event.d.ts.map +1 -1
  258. package/dist/cjs/utils/event.js +2 -2
  259. package/dist/cjs/utils/event.js.map +1 -1
  260. package/dist/cjs/utils/history.d.ts +2 -2
  261. package/dist/cjs/utils/history.d.ts.map +1 -1
  262. package/dist/cjs/utils/history.js +15 -15
  263. package/dist/cjs/utils/history.js.map +1 -1
  264. package/dist/cjs/utils/index.d.ts +11 -13
  265. package/dist/cjs/utils/index.d.ts.map +1 -1
  266. package/dist/cjs/utils/index.js +57 -58
  267. package/dist/cjs/utils/index.js.map +1 -1
  268. package/dist/cjs/utils/serialize.d.ts +17 -0
  269. package/dist/cjs/utils/serialize.d.ts.map +1 -1
  270. package/dist/cjs/utils/serialize.js +33 -0
  271. package/dist/cjs/utils/serialize.js.map +1 -1
  272. package/dist/cjs/utils/session.d.ts +23 -3
  273. package/dist/cjs/utils/session.d.ts.map +1 -1
  274. package/dist/cjs/utils/session.js +40 -8
  275. package/dist/cjs/utils/session.js.map +1 -1
  276. package/dist/cjs/utils/template.d.ts +3 -3
  277. package/dist/cjs/utils/template.d.ts.map +1 -1
  278. package/dist/cjs/utils/template.js +5 -5
  279. package/dist/cjs/utils/template.js.map +1 -1
  280. package/dist/constants/index.d.ts +1 -0
  281. package/dist/constants/index.js +1 -1
  282. package/dist/core/Agent.d.ts +19 -11
  283. package/dist/core/Agent.d.ts.map +1 -1
  284. package/dist/core/Agent.js +53 -15
  285. package/dist/core/Agent.js.map +1 -1
  286. package/dist/core/AutoChainExecutor.d.ts +12 -22
  287. package/dist/core/AutoChainExecutor.d.ts.map +1 -1
  288. package/dist/core/AutoChainExecutor.js +27 -30
  289. package/dist/core/AutoChainExecutor.js.map +1 -1
  290. package/dist/core/BranchEvaluator.d.ts +4 -4
  291. package/dist/core/BranchEvaluator.d.ts.map +1 -1
  292. package/dist/core/BranchEvaluator.js +2 -2
  293. package/dist/core/BranchEvaluator.js.map +1 -1
  294. package/dist/core/CompactionEngine.d.ts +16 -3
  295. package/dist/core/CompactionEngine.d.ts.map +1 -1
  296. package/dist/core/CompactionEngine.js +30 -6
  297. package/dist/core/CompactionEngine.js.map +1 -1
  298. package/dist/core/DirectiveChainTracker.d.ts +1 -1
  299. package/dist/core/DirectiveChainTracker.d.ts.map +1 -1
  300. package/dist/core/DirectiveChainTracker.js +2 -2
  301. package/dist/core/DirectiveChainTracker.js.map +1 -1
  302. package/dist/core/Events.d.ts +1 -1
  303. package/dist/core/Events.d.ts.map +1 -1
  304. package/dist/core/Events.js +1 -1
  305. package/dist/core/Events.js.map +1 -1
  306. package/dist/core/Flow.d.ts +4 -4
  307. package/dist/core/Flow.d.ts.map +1 -1
  308. package/dist/core/Flow.js +3 -3
  309. package/dist/core/Flow.js.map +1 -1
  310. package/dist/core/FlowRouter.d.ts +4 -4
  311. package/dist/core/FlowRouter.d.ts.map +1 -1
  312. package/dist/core/FlowRouter.js +36 -14
  313. package/dist/core/FlowRouter.js.map +1 -1
  314. package/dist/core/PersistenceManager.d.ts +1 -1
  315. package/dist/core/PersistenceManager.d.ts.map +1 -1
  316. package/dist/core/PersistenceManager.js +3 -3
  317. package/dist/core/PersistenceManager.js.map +1 -1
  318. package/dist/core/PromptComposer.d.ts +4 -4
  319. package/dist/core/PromptComposer.d.ts.map +1 -1
  320. package/dist/core/PromptComposer.js +3 -3
  321. package/dist/core/PromptComposer.js.map +1 -1
  322. package/dist/core/PromptSectionCache.d.ts +2 -2
  323. package/dist/core/PromptSectionCache.d.ts.map +1 -1
  324. package/dist/core/ResponseEngine.d.ts +4 -4
  325. package/dist/core/ResponseEngine.d.ts.map +1 -1
  326. package/dist/core/ResponseEngine.js +2 -2
  327. package/dist/core/ResponseEngine.js.map +1 -1
  328. package/dist/core/ResponseGenerationError.d.ts.map +1 -1
  329. package/dist/core/ResponseGenerationError.js +3 -5
  330. package/dist/core/ResponseGenerationError.js.map +1 -1
  331. package/dist/core/ResponseModal.d.ts +39 -10
  332. package/dist/core/ResponseModal.d.ts.map +1 -1
  333. package/dist/core/ResponseModal.js +152 -29
  334. package/dist/core/ResponseModal.js.map +1 -1
  335. package/dist/core/ResponsePipeline.d.ts +50 -12
  336. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  337. package/dist/core/ResponsePipeline.js +232 -89
  338. package/dist/core/ResponsePipeline.js.map +1 -1
  339. package/dist/core/SessionFinalizer.d.ts +4 -4
  340. package/dist/core/SessionFinalizer.d.ts.map +1 -1
  341. package/dist/core/SessionFinalizer.js +32 -5
  342. package/dist/core/SessionFinalizer.js.map +1 -1
  343. package/dist/core/SessionManager.d.ts +15 -6
  344. package/dist/core/SessionManager.d.ts.map +1 -1
  345. package/dist/core/SessionManager.js +46 -19
  346. package/dist/core/SessionManager.js.map +1 -1
  347. package/dist/core/SignalCoordinator.d.ts +5 -5
  348. package/dist/core/SignalCoordinator.d.ts.map +1 -1
  349. package/dist/core/SignalCoordinator.js +2 -2
  350. package/dist/core/SignalCoordinator.js.map +1 -1
  351. package/dist/core/SignalEvaluator.d.ts +4 -4
  352. package/dist/core/SignalEvaluator.d.ts.map +1 -1
  353. package/dist/core/SignalEvaluator.js +2 -2
  354. package/dist/core/SignalEvaluator.js.map +1 -1
  355. package/dist/core/SignalProcessor.d.ts +6 -6
  356. package/dist/core/SignalProcessor.d.ts.map +1 -1
  357. package/dist/core/SignalProcessor.js +7 -79
  358. package/dist/core/SignalProcessor.js.map +1 -1
  359. package/dist/core/Step.d.ts +5 -5
  360. package/dist/core/Step.d.ts.map +1 -1
  361. package/dist/core/Step.js +53 -5
  362. package/dist/core/Step.js.map +1 -1
  363. package/dist/core/StepLifecycle.d.ts +18 -8
  364. package/dist/core/StepLifecycle.d.ts.map +1 -1
  365. package/dist/core/StepLifecycle.js +98 -15
  366. package/dist/core/StepLifecycle.js.map +1 -1
  367. package/dist/core/StreamingToolExecutor.d.ts +1 -1
  368. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  369. package/dist/core/StreamingToolExecutor.js +29 -5
  370. package/dist/core/StreamingToolExecutor.js.map +1 -1
  371. package/dist/core/ToolLoopExecutor.d.ts +8 -4
  372. package/dist/core/ToolLoopExecutor.d.ts.map +1 -1
  373. package/dist/core/ToolLoopExecutor.js +157 -65
  374. package/dist/core/ToolLoopExecutor.js.map +1 -1
  375. package/dist/core/ToolManager.d.ts +6 -6
  376. package/dist/core/ToolManager.d.ts.map +1 -1
  377. package/dist/core/ToolManager.js +44 -21
  378. package/dist/core/ToolManager.js.map +1 -1
  379. package/dist/core/createAgent.d.ts +2 -2
  380. package/dist/core/createAgent.d.ts.map +1 -1
  381. package/dist/core/createAgent.js +1 -1
  382. package/dist/core/createAgent.js.map +1 -1
  383. package/dist/core/flow-namespace.d.ts +16 -1
  384. package/dist/core/flow-namespace.d.ts.map +1 -1
  385. package/dist/core/flow-namespace.js +23 -1
  386. package/dist/core/flow-namespace.js.map +1 -1
  387. package/dist/core/toolGates.d.ts +1 -1
  388. package/dist/core/toolGates.d.ts.map +1 -1
  389. package/dist/core/toolGates.js +1 -1
  390. package/dist/core/toolGates.js.map +1 -1
  391. package/dist/index.d.ts +50 -45
  392. package/dist/index.d.ts.map +1 -1
  393. package/dist/index.js +34 -30
  394. package/dist/index.js.map +1 -1
  395. package/dist/providers/AnthropicProvider.d.ts +25 -35
  396. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  397. package/dist/providers/AnthropicProvider.js +30 -423
  398. package/dist/providers/AnthropicProvider.js.map +1 -1
  399. package/dist/providers/DeepSeekProvider.d.ts +13 -34
  400. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  401. package/dist/providers/DeepSeekProvider.js +16 -47
  402. package/dist/providers/DeepSeekProvider.js.map +1 -1
  403. package/dist/providers/GeminiProvider.d.ts +22 -75
  404. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  405. package/dist/providers/GeminiProvider.js +32 -558
  406. package/dist/providers/GeminiProvider.js.map +1 -1
  407. package/dist/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
  408. package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
  409. package/dist/providers/GenericOpenAICompatibleProvider.js +13 -16
  410. package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  411. package/dist/providers/OpenAICompatibleProvider.d.ts +26 -135
  412. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  413. package/dist/providers/OpenAICompatibleProvider.js +39 -495
  414. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  415. package/dist/providers/OpenAIProvider.d.ts +14 -20
  416. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  417. package/dist/providers/OpenAIProvider.js +20 -24
  418. package/dist/providers/OpenAIProvider.js.map +1 -1
  419. package/dist/providers/OpenRouterProvider.d.ts +20 -24
  420. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  421. package/dist/providers/OpenRouterProvider.js +21 -34
  422. package/dist/providers/OpenRouterProvider.js.map +1 -1
  423. package/dist/providers/ProviderAdapter.d.ts +94 -0
  424. package/dist/providers/ProviderAdapter.d.ts.map +1 -0
  425. package/dist/providers/ProviderAdapter.js +251 -0
  426. package/dist/providers/ProviderAdapter.js.map +1 -0
  427. package/dist/providers/index.d.ts +21 -18
  428. package/dist/providers/index.d.ts.map +1 -1
  429. package/dist/providers/index.js +13 -10
  430. package/dist/providers/index.js.map +1 -1
  431. package/dist/types/agent.d.ts +37 -11
  432. package/dist/types/agent.d.ts.map +1 -1
  433. package/dist/types/ai.d.ts +11 -21
  434. package/dist/types/ai.d.ts.map +1 -1
  435. package/dist/types/compaction.d.ts +2 -2
  436. package/dist/types/compaction.d.ts.map +1 -1
  437. package/dist/types/errors.d.ts +16 -20
  438. package/dist/types/errors.d.ts.map +1 -1
  439. package/dist/types/errors.js +15 -16
  440. package/dist/types/errors.js.map +1 -1
  441. package/dist/types/flow.d.ts +56 -39
  442. package/dist/types/flow.d.ts.map +1 -1
  443. package/dist/types/history.d.ts +1 -1
  444. package/dist/types/history.d.ts.map +1 -1
  445. package/dist/types/index.d.ts +17 -17
  446. package/dist/types/index.d.ts.map +1 -1
  447. package/dist/types/index.js +4 -4
  448. package/dist/types/index.js.map +1 -1
  449. package/dist/types/persistence.d.ts +2 -2
  450. package/dist/types/persistence.d.ts.map +1 -1
  451. package/dist/types/session.d.ts +4 -4
  452. package/dist/types/session.d.ts.map +1 -1
  453. package/dist/types/signals.d.ts +3 -3
  454. package/dist/types/signals.d.ts.map +1 -1
  455. package/dist/types/template.d.ts +2 -2
  456. package/dist/types/template.d.ts.map +1 -1
  457. package/dist/types/tool.d.ts +4 -2
  458. package/dist/types/tool.d.ts.map +1 -1
  459. package/dist/types/tool.js.map +1 -1
  460. package/dist/utils/condition.d.ts +1 -1
  461. package/dist/utils/condition.d.ts.map +1 -1
  462. package/dist/utils/condition.js +2 -2
  463. package/dist/utils/condition.js.map +1 -1
  464. package/dist/utils/event.d.ts +1 -1
  465. package/dist/utils/event.d.ts.map +1 -1
  466. package/dist/utils/event.js +1 -1
  467. package/dist/utils/event.js.map +1 -1
  468. package/dist/utils/history.d.ts +2 -2
  469. package/dist/utils/history.d.ts.map +1 -1
  470. package/dist/utils/history.js +1 -1
  471. package/dist/utils/history.js.map +1 -1
  472. package/dist/utils/index.d.ts +11 -13
  473. package/dist/utils/index.d.ts.map +1 -1
  474. package/dist/utils/index.js +11 -12
  475. package/dist/utils/index.js.map +1 -1
  476. package/dist/utils/serialize.d.ts +17 -0
  477. package/dist/utils/serialize.d.ts.map +1 -1
  478. package/dist/utils/serialize.js +31 -0
  479. package/dist/utils/serialize.js.map +1 -1
  480. package/dist/utils/session.d.ts +23 -3
  481. package/dist/utils/session.d.ts.map +1 -1
  482. package/dist/utils/session.js +35 -6
  483. package/dist/utils/session.js.map +1 -1
  484. package/dist/utils/template.d.ts +3 -3
  485. package/dist/utils/template.d.ts.map +1 -1
  486. package/dist/utils/template.js +1 -1
  487. package/dist/utils/template.js.map +1 -1
  488. package/docs/concepts/architecture.md +3 -3
  489. package/docs/concepts/directives.md +1 -1
  490. package/docs/guides/error-handling.md +46 -45
  491. package/docs/guides/flow-control.md +8 -1
  492. package/docs/guides/instructions.md +15 -6
  493. package/docs/guides/persistence.md +12 -5
  494. package/docs/guides/streaming.md +10 -0
  495. package/docs/migration/README.md +4 -0
  496. package/docs/migration/v2-3-to-v2-4.md +4 -0
  497. package/docs/migration/v2-6-to-v2-7.md +246 -0
  498. package/docs/reference/adapters.md +15 -1
  499. package/docs/reference/branches.md +2 -0
  500. package/docs/reference/create-agent.md +28 -0
  501. package/docs/reference/directive.md +1 -1
  502. package/docs/reference/errors.md +30 -32
  503. package/docs/reference/providers.md +63 -60
  504. package/docs/reference/step.md +28 -21
  505. package/docs/reference/tool.md +14 -5
  506. package/docs/start/02-first-agent.md +8 -4
  507. package/docs/start/03-collect-data.md +19 -10
  508. package/examples/01-quickstart.ts +2 -2
  509. package/examples/02-data-extraction.ts +1 -1
  510. package/examples/03-tools.ts +1 -1
  511. package/examples/04-instructions.ts +2 -2
  512. package/examples/05-branching.ts +3 -3
  513. package/examples/06-flow-control.ts +3 -3
  514. package/examples/07-streaming.ts +1 -1
  515. package/examples/08-persistence.ts +2 -2
  516. package/examples/09-signals.ts +1 -1
  517. package/examples/tsconfig.json +6 -3
  518. package/package.json +9 -7
  519. package/src/adapters/MemoryAdapter.ts +33 -37
  520. package/src/adapters/MongoAdapter.ts +3 -3
  521. package/src/adapters/OpenSearchAdapter.ts +4 -4
  522. package/src/adapters/PostgreSQLAdapter.ts +26 -21
  523. package/src/adapters/PrismaAdapter.ts +4 -4
  524. package/src/adapters/RedisAdapter.ts +84 -37
  525. package/src/adapters/SQLiteAdapter.ts +13 -34
  526. package/src/adapters/index.ts +13 -13
  527. package/src/adapters/sessionRow.ts +57 -0
  528. package/src/core/Agent.ts +64 -18
  529. package/src/core/AutoChainExecutor.ts +44 -57
  530. package/src/core/BranchEvaluator.ts +5 -5
  531. package/src/core/CompactionEngine.ts +42 -8
  532. package/src/core/DirectiveChainTracker.ts +3 -3
  533. package/src/core/Events.ts +2 -2
  534. package/src/core/Flow.ts +9 -9
  535. package/src/core/FlowRouter.ts +46 -20
  536. package/src/core/PersistenceManager.ts +4 -4
  537. package/src/core/PromptComposer.ts +8 -8
  538. package/src/core/PromptSectionCache.ts +2 -2
  539. package/src/core/ResponseEngine.ts +6 -6
  540. package/src/core/ResponseGenerationError.ts +3 -6
  541. package/src/core/ResponseModal.ts +205 -39
  542. package/src/core/ResponsePipeline.ts +301 -107
  543. package/src/core/SessionFinalizer.ts +40 -10
  544. package/src/core/SessionManager.ts +61 -27
  545. package/src/core/SignalCoordinator.ts +7 -7
  546. package/src/core/SignalEvaluator.ts +6 -6
  547. package/src/core/SignalProcessor.ts +13 -93
  548. package/src/core/Step.ts +87 -10
  549. package/src/core/StepLifecycle.ts +129 -26
  550. package/src/core/StreamingToolExecutor.ts +33 -8
  551. package/src/core/ToolLoopExecutor.ts +206 -80
  552. package/src/core/ToolManager.ts +53 -26
  553. package/src/core/createAgent.ts +2 -2
  554. package/src/core/flow-namespace.ts +31 -2
  555. package/src/core/toolGates.ts +2 -2
  556. package/src/index.ts +59 -45
  557. package/src/providers/AnthropicProvider.ts +44 -595
  558. package/src/providers/DeepSeekProvider.ts +27 -92
  559. package/src/providers/GeminiProvider.ts +41 -752
  560. package/src/providers/GenericOpenAICompatibleProvider.ts +19 -27
  561. package/src/providers/OpenAICompatibleProvider.ts +58 -764
  562. package/src/providers/OpenAIProvider.ts +31 -55
  563. package/src/providers/OpenRouterProvider.ts +40 -70
  564. package/src/providers/ProviderAdapter.ts +368 -0
  565. package/src/providers/index.ts +21 -23
  566. package/src/types/agent.ts +36 -11
  567. package/src/types/ai.ts +11 -21
  568. package/src/types/compaction.ts +2 -2
  569. package/src/types/errors.ts +17 -35
  570. package/src/types/flow.ts +44 -46
  571. package/src/types/history.ts +1 -1
  572. package/src/types/index.ts +18 -17
  573. package/src/types/persistence.ts +2 -2
  574. package/src/types/session.ts +4 -4
  575. package/src/types/signals.ts +3 -3
  576. package/src/types/template.ts +2 -2
  577. package/src/types/tool.ts +4 -2
  578. package/src/utils/condition.ts +3 -3
  579. package/src/utils/event.ts +1 -1
  580. package/src/utils/history.ts +3 -3
  581. package/src/utils/index.ts +14 -15
  582. package/src/utils/serialize.ts +38 -0
  583. package/src/utils/session.ts +46 -9
  584. package/src/utils/template.ts +3 -3
  585. package/dist/cjs/core/DirectiveBus.d.ts +0 -88
  586. package/dist/cjs/core/DirectiveBus.d.ts.map +0 -1
  587. package/dist/cjs/core/DirectiveBus.js +0 -196
  588. package/dist/cjs/core/DirectiveBus.js.map +0 -1
  589. package/dist/cjs/providers/errorClassification.d.ts +0 -61
  590. package/dist/cjs/providers/errorClassification.d.ts.map +0 -1
  591. package/dist/cjs/providers/errorClassification.js +0 -123
  592. package/dist/cjs/providers/errorClassification.js.map +0 -1
  593. package/dist/cjs/utils/retry.d.ts +0 -67
  594. package/dist/cjs/utils/retry.d.ts.map +0 -1
  595. package/dist/cjs/utils/retry.js +0 -201
  596. package/dist/cjs/utils/retry.js.map +0 -1
  597. package/dist/core/DirectiveBus.d.ts +0 -88
  598. package/dist/core/DirectiveBus.d.ts.map +0 -1
  599. package/dist/core/DirectiveBus.js +0 -192
  600. package/dist/core/DirectiveBus.js.map +0 -1
  601. package/dist/providers/errorClassification.d.ts +0 -61
  602. package/dist/providers/errorClassification.d.ts.map +0 -1
  603. package/dist/providers/errorClassification.js +0 -116
  604. package/dist/providers/errorClassification.js.map +0 -1
  605. package/dist/utils/retry.d.ts +0 -67
  606. package/dist/utils/retry.d.ts.map +0 -1
  607. package/dist/utils/retry.js +0 -193
  608. package/dist/utils/retry.js.map +0 -1
  609. package/src/core/DirectiveBus.ts +0 -248
  610. package/src/providers/errorClassification.ts +0 -172
  611. package/src/utils/retry.ts +0 -274
@@ -1,621 +1,70 @@
1
1
  /**
2
- * Anthropic (Claude) provider implementation with retry and backup models
2
+ * Anthropic (Claude).
3
+ *
4
+ * Anthropic has no native schema mode, so a structured request carries the
5
+ * schema as an extra system block — placed after the cached one, where a
6
+ * per-call schema cannot invalidate the system prompt's cache. That, the
7
+ * thinking budget, its 529, and its cache-token accounting all live in
8
+ * `@providerkit/core`; this file is the constructor.
3
9
  */
4
10
 
5
- import Anthropic from "@anthropic-ai/sdk";
6
- import type {
7
- MessageCreateParamsNonStreaming,
8
- Tool,
9
- } from "@anthropic-ai/sdk/resources/messages";
11
+ import { createAnthropicProvider } from "@providerkit/core";
10
12
 
11
- import type {
12
- AiProvider,
13
- GenerateMessageInput,
14
- GenerateMessageOutput,
15
- GenerateMessageStreamChunk,
16
- AgentStructuredResponse,
17
- } from "../types";
18
- import type { ProviderCapabilities } from "../types/ai";
19
- import type { HistoryItem } from "../types/history";
20
- import { withTimeoutAndRetry, withStreamRetry, resolveRetryConfig, logger, assertUsableCompletion, combineAbortSignals } from "../utils";
21
- import {
22
- classifyProviderError,
23
- getErrorMessage,
24
- isBackupEligible,
25
- toProviderError,
26
- type ErrorClassificationOptions,
27
- } from "./errorClassification";
13
+ import type { ProviderCapabilities } from "../types/ai.js";
14
+ import { ProviderAdapter, type RequestConfig } from "./ProviderAdapter.js";
28
15
 
29
- /**
30
- * Configuration options for Anthropic provider
31
- * Uses types from @anthropic-ai/sdk package
32
- */
33
16
  export interface AnthropicProviderOptions {
34
17
  /** Anthropic API key */
35
18
  apiKey: string;
36
- /** Model to use (required) - e.g., "claude-sonnet-4-6", "claude-opus-4-7" */
19
+ /** Model to use (required) e.g. "claude-sonnet-5", "claude-opus-5" */
37
20
  model: string;
38
- /** Backup models to try if primary fails (default: []) */
21
+ /** Backup models to try if the primary fails (default: []) */
39
22
  backupModels?: string[];
40
- /** Default parameters - uses MessageCreateParamsNonStreaming from @anthropic-ai/sdk */
41
- config?: Partial<Omit<MessageCreateParamsNonStreaming, "model" | "messages">>;
42
- /** Retry configuration */
43
- retryConfig?: {
44
- timeout?: number;
45
- retries?: number;
46
- };
23
+ /** Any endpoint speaking the Anthropic Messages dialect. */
24
+ baseUrl?: string;
25
+ /** Request defaults sent with every call */
26
+ config?: RequestConfig;
27
+ /** Idle-stream deadline and retry budget */
28
+ retryConfig?: { timeout?: number; retries?: number };
29
+ /**
30
+ * Replacement `fetch`, for tests that script the wire.
31
+ *
32
+ * v3 note: this replaces the injected SDK client. There is no SDK now, so a
33
+ * test drives the same bytes the provider really receives rather than an
34
+ * SDK's idea of them.
35
+ */
36
+ fetchImpl?: typeof fetch;
47
37
  }
48
38
 
49
- /**
50
- * Anthropic-specific error classification signals (HTTP 529 plus
51
- * overloaded_error/api_error types and the "overloaded" code).
52
- */
53
- const CLASSIFICATION_OPTIONS: ErrorClassificationOptions = {
54
- overloadedStatuses: [529],
55
- overloadedTypes: ["overloaded_error", "api_error"],
56
- overloadedCodes: ["overloaded"],
57
- };
58
-
59
- /**
60
- * Determines if an error should trigger backup model usage.
61
- * Derived from the normalized error classification.
62
- */
63
- const shouldUseBackupModel = (error: unknown): boolean =>
64
- isBackupEligible(classifyProviderError(error, CLASSIFICATION_OPTIONS));
65
-
66
- /**
67
- * Anthropic provider implementation with backup models and retry logic
68
- */
69
- export class AnthropicProvider implements AiProvider {
39
+ export class AnthropicProvider extends ProviderAdapter {
70
40
  public readonly name = "anthropic";
71
41
  public readonly capabilities: ProviderCapabilities = {
72
42
  supportsTools: true,
73
- supportsNativeJsonSchema: false, // JSON output is enforced via a prompt instruction, not a native schema mode
43
+ supportsNativeJsonSchema: false,
74
44
  supportsStreaming: true,
75
45
  supportsStreamingToolCalls: true,
76
46
  supportsPromptCaching: true,
77
47
  };
78
- private client: Anthropic;
79
- private primaryModel: string;
80
- private backupModels: string[];
81
- private config?: Partial<
82
- Omit<MessageCreateParamsNonStreaming, "model" | "messages">
83
- >;
84
- private retryConfig: { timeout: number; retries: number };
85
48
 
86
49
  constructor(options: AnthropicProviderOptions) {
87
- const { apiKey, model, backupModels = [], config, retryConfig } = options;
88
-
89
- if (!apiKey) {
90
- throw new Error("Anthropic API key is required");
91
- }
92
-
93
- if (!model) {
94
- throw new Error("Model is required. Example: 'claude-sonnet-4-6'");
95
- }
96
-
97
- this.client = new Anthropic({
98
- apiKey,
99
- });
100
- this.primaryModel = model;
101
- this.backupModels = backupModels;
102
- this.config = config;
103
- this.retryConfig = resolveRetryConfig(retryConfig);
104
- }
105
-
106
- /**
107
- * Build Anthropic-formatted messages from HistoryItem[] array.
108
- * System messages are extracted separately (Anthropic uses a `system` param).
109
- * Tool results are mapped to Anthropic's tool_result content blocks.
110
- * Assistant tool_calls are mapped to tool_use content blocks.
111
- */
112
- private buildAnthropicMessages(history: HistoryItem[]): {
113
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
114
- messages: any[];
115
- systemMessages: string[];
116
- } {
117
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
- const messages: any[] = [];
119
- const systemMessages: string[] = [];
120
-
121
- for (const item of history) {
122
- switch (item.role) {
123
- case "system":
124
- systemMessages.push(item.content);
125
- break;
126
- case "user":
127
- messages.push({ role: "user", content: item.content });
128
- break;
129
- case "assistant":
130
- if (item.tool_calls && item.tool_calls.length > 0) {
131
- const content: Array<Record<string, unknown>> = [];
132
- if (item.content) {
133
- content.push({ type: "text", text: item.content });
134
- }
135
- for (const tc of item.tool_calls) {
136
- content.push({
137
- type: "tool_use",
138
- id: tc.id,
139
- name: tc.name,
140
- input: tc.arguments,
141
- });
142
- }
143
- messages.push({ role: "assistant", content });
144
- } else {
145
- messages.push({ role: "assistant", content: item.content || "" });
146
- }
147
- break;
148
- case "tool":
149
- // Anthropic tool results are sent as user messages with tool_result content blocks
150
- messages.push({
151
- role: "user",
152
- content: [
153
- {
154
- type: "tool_result",
155
- tool_use_id: item.tool_call_id,
156
- content: typeof item.content === "string" ? item.content : JSON.stringify(item.content),
157
- },
158
- ],
159
- });
160
- break;
161
- }
162
- }
163
-
164
- return { messages, systemMessages };
165
- }
166
-
167
- async generateMessage<
168
- TContext = unknown,
169
- TStructured = AgentStructuredResponse
170
- >(
171
- input: GenerateMessageInput<TContext>
172
- ): Promise<GenerateMessageOutput<TStructured>> {
173
- return this.generateWithBackup<TContext, TStructured>(input);
174
- }
175
-
176
- async *generateMessageStream<
177
- TContext = unknown,
178
- TStructured = AgentStructuredResponse
179
- >(
180
- input: GenerateMessageInput<TContext>
181
- ): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
182
- yield* this.generateStreamWithBackup<TContext, TStructured>(input);
183
- }
184
-
185
- private async generateWithBackup<
186
- TContext = unknown,
187
- TStructured = AgentStructuredResponse
188
- >(
189
- input: GenerateMessageInput<TContext>
190
- ): Promise<GenerateMessageOutput<TStructured>> {
191
- // Try primary model first
192
- try {
193
- return await this.generateWithModel<TContext, TStructured>(
194
- this.primaryModel,
195
- input
196
- );
197
- } catch (primaryError: unknown) {
198
- const primaryErrMsg = getErrorMessage(primaryError);
199
- logger.warn(
200
- `[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
201
- );
202
-
203
- if (!shouldUseBackupModel(primaryError)) {
204
- throw toProviderError(primaryError, this.name, CLASSIFICATION_OPTIONS);
205
- }
206
-
207
- logger.debug(`[ANTHROPIC] Trying backup models`);
208
-
209
- let lastBackupError: unknown = primaryError;
210
-
211
- for (let i = 0; i < this.backupModels.length; i++) {
212
- const backupModel = this.backupModels[i];
213
- logger.debug(
214
- `[ANTHROPIC] Trying backup model ${i + 1}/${this.backupModels.length
215
- }: ${backupModel}`
216
- );
217
-
218
- try {
219
- const result = await this.generateWithModel<TContext, TStructured>(
220
- backupModel,
221
- input
222
- );
223
- logger.debug(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
224
- return result;
225
- } catch (backupError: unknown) {
226
- const backupErrMsg = getErrorMessage(backupError);
227
- logger.warn(
228
- `[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`
229
- );
230
- lastBackupError = backupError;
231
-
232
- if (
233
- !shouldUseBackupModel(backupError) &&
234
- i < this.backupModels.length - 1
235
- ) {
236
- logger.debug(
237
- `[ANTHROPIC] Backup model error doesn't qualify for further attempts`
238
- );
239
- break;
240
- }
241
- }
242
- }
243
-
244
- const lastBackupErrMsg = getErrorMessage(lastBackupError);
245
- logger.error(
246
- `[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
247
- );
248
- throw toProviderError(lastBackupError, this.name, CLASSIFICATION_OPTIONS);
249
- }
250
- }
251
-
252
- private async generateWithModel<
253
- TContext = unknown,
254
- TStructured = AgentStructuredResponse
255
- >(
256
- model: string,
257
- input: GenerateMessageInput<TContext>
258
- ): Promise<GenerateMessageOutput<TStructured>> {
259
- const operation = async (signal: AbortSignal): Promise<GenerateMessageOutput> => {
260
- // Anthropic requires max_tokens to be specified
261
- const maxTokens = input.parameters?.maxOutputTokens || 4096;
262
-
263
- // Build messages from history
264
- const { messages: historyMessages, systemMessages } = this.buildAnthropicMessages(input.history);
265
-
266
- // Append the current prompt as the final user message
267
- historyMessages.push({
268
- role: "user",
269
- content: input.prompt,
270
- });
271
-
272
- const params: MessageCreateParamsNonStreaming = {
273
- model,
274
- max_tokens: maxTokens,
275
- messages: historyMessages,
276
- ...this.config,
277
- };
278
-
279
- // Set system messages from history if present
280
- if (systemMessages.length > 0) {
281
- if (typeof this.config?.system === "string") {
282
- params.system = `${this.config.system}\n\n${systemMessages.join("\n\n")}`;
283
- } else if (Array.isArray(this.config?.system)) {
284
- params.system = [
285
- ...this.config.system,
286
- ...systemMessages.map(s => ({ type: "text" as const, text: s })),
287
- ];
288
- } else {
289
- params.system = systemMessages.join("\n\n");
290
- }
291
- }
292
-
293
- // Add tools if provided
294
- if (input.tools && input.tools.length > 0) {
295
- params.tools = input.tools.map((tool) => ({
296
- name: tool.name || tool.id,
297
- description: tool.description || "",
298
- input_schema: tool.parameters as Tool["input_schema"], // JSON schema
299
- }));
300
- }
301
-
302
- // Handle schema: Anthropic doesn't have a native schema mode, so embed constraints
303
- if (input.parameters?.jsonSchema) {
304
- const systemPrompt =
305
- "You must respond with valid JSON only and it MUST match the provided schema.";
306
-
307
- // Merge with existing system if present
308
- if (typeof this.config?.system === "string") {
309
- params.system = `${this.config.system}\n\n${systemPrompt}`;
310
- } else if (Array.isArray(this.config?.system)) {
311
- params.system = [
312
- ...this.config.system,
313
- {
314
- type: "text" as const,
315
- text: systemPrompt,
316
- },
317
- ];
318
- } else {
319
- params.system = systemPrompt;
320
- }
321
- }
322
-
323
- const response = await this.client.messages.create(params, {
324
- signal: combineAbortSignals(input.signal, signal),
325
- });
326
-
327
- // Extract text and tool calls from response
328
- const textContent = response.content.find(
329
- (block) => block.type === "text"
330
- );
331
- const message = textContent?.type === "text" ? textContent.text : "";
332
-
333
- // Extract tool calls from response
334
- const toolCalls: Array<{
335
- toolName: string;
336
- arguments: Record<string, unknown>;
337
- }> = [];
338
-
339
- // Check for tool_use content blocks
340
- for (const block of response.content) {
341
- if (block.type === "tool_use") {
342
- toolCalls.push({
343
- toolName: block.name,
344
- arguments: block.input as Record<string, unknown>,
345
- });
346
- }
347
- }
348
-
349
- // Only throw error if we have no text AND no function calls
350
- if (!message && toolCalls.length === 0) {
351
- throw new Error("No response from Anthropic");
352
- }
353
-
354
- // Parse JSON response if schema was provided
355
- let structured: AgentStructuredResponse | undefined;
356
- if (input.parameters?.jsonSchema) {
357
- try {
358
- structured = JSON.parse(message) as AgentStructuredResponse;
359
- } catch (error) {
360
- logger.warn("[ANTHROPIC] Failed to parse JSON response:", error);
361
- // Fall back to treating the message as plain text
362
- }
363
- }
364
-
365
- // If tools were used, include them in structured response
366
- if (toolCalls.length > 0) {
367
- structured = {
368
- ...(structured || {}),
369
- message: structured?.message || message,
370
- toolCalls,
371
- } as AgentStructuredResponse;
372
- }
373
-
374
- // A parsed-but-blank message with no tool calls is as empty as no text;
375
- // the shared guard throws so withTimeoutAndRetry retries instead of
376
- // returning {"message":""}.
377
- assertUsableCompletion(structured, message, toolCalls.length, "Anthropic");
378
-
379
- return {
380
- message,
381
- metadata: {
382
- model: response.model,
383
- stopReason: response.stop_reason,
384
- tokensUsed:
385
- response.usage.input_tokens + response.usage.output_tokens,
386
- promptTokens: response.usage.input_tokens,
387
- completionTokens: response.usage.output_tokens,
388
- },
389
- structured,
390
- };
391
- };
392
-
393
- return withTimeoutAndRetry(
394
- operation,
395
- this.retryConfig.timeout,
396
- this.retryConfig.retries,
397
- `Anthropic ${model}`
398
- ) as Promise<GenerateMessageOutput<TStructured>>;
399
- }
400
-
401
- private async *generateStreamWithBackup<
402
- TContext = unknown,
403
- TStructured = AgentStructuredResponse
404
- >(
405
- input: GenerateMessageInput<TContext>
406
- ): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
407
- // Try primary model first
408
- try {
409
- yield* withStreamRetry(
410
- (signal) => this.generateStreamWithModel<TContext, TStructured>(this.primaryModel, input, signal),
411
- { maxRetries: this.retryConfig.retries, firstChunkTimeoutMs: this.retryConfig.timeout, operationName: `Anthropic ${this.primaryModel} stream` }
412
- );
413
- } catch (primaryError: unknown) {
414
- const primaryErrMsg = getErrorMessage(primaryError);
415
- logger.warn(
416
- `[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
417
- );
418
-
419
- if (!shouldUseBackupModel(primaryError)) {
420
- throw toProviderError(primaryError, this.name, CLASSIFICATION_OPTIONS);
421
- }
422
-
423
- logger.debug(`[ANTHROPIC] Trying backup models for streaming`);
424
-
425
- let lastBackupError: unknown = primaryError;
426
-
427
- for (let i = 0; i < this.backupModels.length; i++) {
428
- const backupModel = this.backupModels[i];
429
- logger.debug(
430
- `[ANTHROPIC] Trying backup model ${i + 1}/${this.backupModels.length
431
- }: ${backupModel}`
432
- );
433
-
434
- try {
435
- yield* withStreamRetry(
436
- (signal) => this.generateStreamWithModel<TContext, TStructured>(backupModel, input, signal),
437
- { maxRetries: this.retryConfig.retries, firstChunkTimeoutMs: this.retryConfig.timeout, operationName: `Anthropic ${backupModel} stream` }
438
- );
439
- logger.debug(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
440
- return;
441
- } catch (backupError: unknown) {
442
- const backupErrMsg = getErrorMessage(backupError);
443
- logger.warn(
444
- `[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`
445
- );
446
- lastBackupError = backupError;
447
-
448
- if (
449
- !shouldUseBackupModel(backupError) &&
450
- i < this.backupModels.length - 1
451
- ) {
452
- logger.debug(
453
- `[ANTHROPIC] Backup model error doesn't qualify for further attempts`
454
- );
455
- break;
456
- }
457
- }
458
- }
459
-
460
- const lastBackupErrMsg = getErrorMessage(lastBackupError);
461
- logger.error(
462
- `[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
463
- );
464
- throw toProviderError(lastBackupError, this.name, CLASSIFICATION_OPTIONS);
50
+ if (!options.apiKey) throw new Error("Anthropic API key is required");
51
+ if (!options.model) {
52
+ throw new Error("Model is required. Example: 'claude-sonnet-5' or 'claude-opus-5'");
465
53
  }
466
- }
467
-
468
- private async *generateStreamWithModel<
469
- TContext = unknown,
470
- TStructured = AgentStructuredResponse
471
- >(
472
- model: string,
473
- input: GenerateMessageInput<TContext>,
474
- attemptSignal?: AbortSignal
475
- ): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
476
- // Anthropic requires max_tokens to be specified
477
- const maxTokens = input.parameters?.maxOutputTokens || 4096;
478
-
479
- // Build messages from history
480
- const { messages: historyMessages, systemMessages } = this.buildAnthropicMessages(input.history);
481
-
482
- // Append the current prompt as the final user message
483
- historyMessages.push({
484
- role: "user" as const,
485
- content: input.prompt,
486
- });
487
-
488
- const params = {
489
- model,
490
- max_tokens: maxTokens,
491
- messages: historyMessages,
492
- stream: true,
493
- ...this.config,
494
- };
495
-
496
- // Set system messages from history if present
497
- if (systemMessages.length > 0) {
498
- if (typeof this.config?.system === "string") {
499
- params.system = `${this.config.system}\n\n${systemMessages.join("\n\n")}`;
500
- } else if (Array.isArray(this.config?.system)) {
501
- params.system = [
502
- ...this.config.system,
503
- ...systemMessages.map(s => ({ type: "text" as const, text: s })),
504
- ];
505
- } else {
506
- params.system = systemMessages.join("\n\n");
507
- }
508
- }
509
-
510
- // Add tools if provided
511
- if (input.tools && input.tools.length > 0) {
512
- params.tools = input.tools.map((tool) => ({
513
- name: tool.name || tool.id,
514
- description: tool.description || "",
515
- input_schema: tool.parameters as Tool["input_schema"], // JSON schema
516
- }));
517
- }
518
-
519
- // Handle schema in streaming: embed constraint
520
- if (input.parameters?.jsonSchema) {
521
- const systemPrompt =
522
- "You must respond with valid JSON only and it MUST match the provided schema.";
523
54
 
524
- if (typeof this.config?.system === "string") {
525
- params.system = `${this.config.system}\n\n${systemPrompt}`;
526
- } else if (Array.isArray(this.config?.system)) {
527
- params.system = [
528
- ...this.config.system,
529
- {
530
- type: "text" as const,
531
- text: systemPrompt,
532
- },
533
- ];
534
- } else {
535
- params.system = systemPrompt;
536
- }
537
- }
538
-
539
- const stream = this.client.messages.stream(params, {
540
- signal: combineAbortSignals(input.signal, attemptSignal),
55
+ super({
56
+ provider: createAnthropicProvider({
57
+ apiKey: options.apiKey,
58
+ model: options.model,
59
+ id: "anthropic",
60
+ ...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),
61
+ ...(options.config?.maxTokens ? { maxTokens: options.config.maxTokens } : {}),
62
+ ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
63
+ }),
64
+ model: options.model,
65
+ ...(options.config ? { defaults: options.config } : {}),
66
+ ...(options.backupModels ? { backupModels: options.backupModels } : {}),
67
+ ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
541
68
  });
542
-
543
- let accumulated = "";
544
- let currentModel = model;
545
- let stopReason: string | undefined;
546
- let inputTokens = 0;
547
- let outputTokens = 0;
548
- const toolCalls: Array<{
549
- toolName: string;
550
- arguments: Record<string, unknown>;
551
- }> = [];
552
-
553
- for await (const chunk of stream) {
554
- if (chunk.type === "message_start") {
555
- currentModel = chunk.message.model;
556
- inputTokens = chunk.message.usage.input_tokens;
557
- } else if (chunk.type === "content_block_start") {
558
- if (chunk.content_block.type === "tool_use") {
559
- toolCalls.push({
560
- toolName: chunk.content_block.name,
561
- arguments: chunk.content_block.input as Record<string, unknown>,
562
- });
563
- }
564
- } else if (chunk.type === "content_block_delta") {
565
- if (chunk.delta.type === "text_delta") {
566
- const delta = chunk.delta.text;
567
- accumulated += delta;
568
- yield {
569
- delta,
570
- accumulated,
571
- done: false,
572
- } as GenerateMessageStreamChunk<TStructured>;
573
- }
574
- } else if (chunk.type === "message_delta") {
575
- stopReason = chunk.delta.stop_reason || undefined;
576
- outputTokens = chunk.usage.output_tokens;
577
- }
578
- }
579
-
580
- // Parse JSON response if schema was provided
581
- let structured: AgentStructuredResponse | undefined;
582
- if (input.parameters?.jsonSchema && accumulated) {
583
- try {
584
- structured = JSON.parse(accumulated) as AgentStructuredResponse;
585
- } catch (error) {
586
- logger.warn(
587
- "[ANTHROPIC] Failed to parse JSON response in stream:",
588
- error
589
- );
590
- }
591
- }
592
-
593
- // If tools were used, include them in structured response
594
- if (toolCalls.length > 0) {
595
- structured = {
596
- ...(structured || {}),
597
- message: structured?.message || accumulated,
598
- toolCalls,
599
- } as AgentStructuredResponse;
600
- }
601
-
602
- // Empty-completion guard — same definition as the non-streaming path, so the
603
- // stream retries / falls back to backup instead of emitting an empty message.
604
- assertUsableCompletion(structured, accumulated, toolCalls.length, "Anthropic");
605
-
606
- // Yield final chunk
607
- yield {
608
- delta: "",
609
- accumulated,
610
- done: true,
611
- metadata: {
612
- model: currentModel,
613
- stopReason,
614
- tokensUsed: inputTokens + outputTokens,
615
- promptTokens: inputTokens,
616
- completionTokens: outputTokens,
617
- },
618
- structured: structured as TStructured,
619
- };
620
69
  }
621
70
  }