@falai/agent 2.2.4 → 2.4.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 (390) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
  3. package/dist/adapters/MemoryAdapter.js +10 -1
  4. package/dist/adapters/MemoryAdapter.js.map +1 -1
  5. package/dist/adapters/MongoAdapter.d.ts.map +1 -1
  6. package/dist/adapters/MongoAdapter.js +33 -2
  7. package/dist/adapters/MongoAdapter.js.map +1 -1
  8. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  9. package/dist/adapters/OpenSearchAdapter.js +15 -1
  10. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  12. package/dist/adapters/PostgreSQLAdapter.js +35 -5
  13. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  14. package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
  15. package/dist/adapters/PrismaAdapter.js +58 -15
  16. package/dist/adapters/PrismaAdapter.js.map +1 -1
  17. package/dist/adapters/RedisAdapter.d.ts.map +1 -1
  18. package/dist/adapters/RedisAdapter.js +10 -1
  19. package/dist/adapters/RedisAdapter.js.map +1 -1
  20. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  21. package/dist/adapters/SQLiteAdapter.js +38 -6
  22. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
  24. package/dist/cjs/adapters/MemoryAdapter.js +10 -1
  25. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  26. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
  27. package/dist/cjs/adapters/MongoAdapter.js +33 -2
  28. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  29. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/OpenSearchAdapter.js +15 -1
  31. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  33. package/dist/cjs/adapters/PostgreSQLAdapter.js +35 -5
  34. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  35. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
  36. package/dist/cjs/adapters/PrismaAdapter.js +58 -15
  37. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  38. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
  39. package/dist/cjs/adapters/RedisAdapter.js +10 -1
  40. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  41. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  42. package/dist/cjs/adapters/SQLiteAdapter.js +38 -6
  43. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +28 -18
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +58 -68
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
  49. package/dist/cjs/core/AutoChainExecutor.js +14 -20
  50. package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
  51. package/dist/cjs/core/BranchEvaluator.d.ts +4 -3
  52. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
  53. package/dist/cjs/core/BranchEvaluator.js +18 -23
  54. package/dist/cjs/core/BranchEvaluator.js.map +1 -1
  55. package/dist/cjs/core/Flow.d.ts +2 -1
  56. package/dist/cjs/core/Flow.d.ts.map +1 -1
  57. package/dist/cjs/core/Flow.js +10 -3
  58. package/dist/cjs/core/Flow.js.map +1 -1
  59. package/dist/cjs/core/FlowRouter.d.ts +1 -0
  60. package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
  61. package/dist/cjs/core/FlowRouter.js +28 -5
  62. package/dist/cjs/core/FlowRouter.js.map +1 -1
  63. package/dist/cjs/core/PersistenceManager.d.ts +3 -0
  64. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  65. package/dist/cjs/core/PersistenceManager.js +57 -5
  66. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  67. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  68. package/dist/cjs/core/PromptComposer.js +24 -10
  69. package/dist/cjs/core/PromptComposer.js.map +1 -1
  70. package/dist/cjs/core/ResponseGenerationError.d.ts +30 -0
  71. package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -0
  72. package/dist/cjs/core/ResponseGenerationError.js +37 -0
  73. package/dist/cjs/core/ResponseGenerationError.js.map +1 -0
  74. package/dist/cjs/core/ResponseModal.d.ts +43 -102
  75. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  76. package/dist/cjs/core/ResponseModal.js +178 -1194
  77. package/dist/cjs/core/ResponseModal.js.map +1 -1
  78. package/dist/cjs/core/ResponsePipeline.d.ts +58 -152
  79. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  80. package/dist/cjs/core/ResponsePipeline.js +408 -457
  81. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  82. package/dist/cjs/core/SessionFinalizer.d.ts +34 -0
  83. package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -0
  84. package/dist/cjs/core/SessionFinalizer.js +61 -0
  85. package/dist/cjs/core/SessionFinalizer.js.map +1 -0
  86. package/dist/cjs/core/SessionManager.d.ts +1 -1
  87. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  88. package/dist/cjs/core/SessionManager.js +18 -7
  89. package/dist/cjs/core/SessionManager.js.map +1 -1
  90. package/dist/cjs/core/SignalCoordinator.d.ts +103 -0
  91. package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -0
  92. package/dist/cjs/core/SignalCoordinator.js +207 -0
  93. package/dist/cjs/core/SignalCoordinator.js.map +1 -0
  94. package/dist/cjs/core/SignalEvaluator.d.ts +2 -2
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
  96. package/dist/cjs/core/SignalEvaluator.js +11 -26
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -1
  98. package/dist/cjs/core/Step.d.ts +3 -1
  99. package/dist/cjs/core/Step.d.ts.map +1 -1
  100. package/dist/cjs/core/Step.js +10 -3
  101. package/dist/cjs/core/Step.js.map +1 -1
  102. package/dist/cjs/core/StepLifecycle.d.ts +33 -0
  103. package/dist/cjs/core/StepLifecycle.d.ts.map +1 -0
  104. package/dist/cjs/core/StepLifecycle.js +97 -0
  105. package/dist/cjs/core/StepLifecycle.js.map +1 -0
  106. package/dist/cjs/core/ToolLoopExecutor.d.ts +104 -0
  107. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -0
  108. package/dist/cjs/core/ToolLoopExecutor.js +391 -0
  109. package/dist/cjs/core/ToolLoopExecutor.js.map +1 -0
  110. package/dist/cjs/core/ToolManager.d.ts +1 -1
  111. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/index.d.ts +4 -5
  114. package/dist/cjs/index.d.ts.map +1 -1
  115. package/dist/cjs/index.js +7 -6
  116. package/dist/cjs/index.js.map +1 -1
  117. package/dist/cjs/providers/AnthropicProvider.d.ts +2 -0
  118. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
  119. package/dist/cjs/providers/AnthropicProvider.js +28 -56
  120. package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
  121. package/dist/cjs/providers/DeepSeekProvider.d.ts +25 -21
  122. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  123. package/dist/cjs/providers/DeepSeekProvider.js +48 -407
  124. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  125. package/dist/cjs/providers/GeminiProvider.d.ts +2 -0
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +27 -56
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +129 -0
  130. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -0
  131. package/dist/cjs/providers/OpenAICompatibleProvider.js +485 -0
  132. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -0
  133. package/dist/cjs/providers/OpenAIProvider.d.ts +9 -28
  134. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  135. package/dist/cjs/providers/OpenAIProvider.js +23 -417
  136. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  137. package/dist/cjs/providers/OpenRouterProvider.d.ts +10 -27
  138. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  139. package/dist/cjs/providers/OpenRouterProvider.js +28 -417
  140. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  141. package/dist/cjs/providers/errorClassification.d.ts +61 -0
  142. package/dist/cjs/providers/errorClassification.d.ts.map +1 -0
  143. package/dist/cjs/providers/errorClassification.js +123 -0
  144. package/dist/cjs/providers/errorClassification.js.map +1 -0
  145. package/dist/cjs/providers/index.d.ts +4 -0
  146. package/dist/cjs/providers/index.d.ts.map +1 -1
  147. package/dist/cjs/providers/index.js +7 -1
  148. package/dist/cjs/providers/index.js.map +1 -1
  149. package/dist/cjs/types/agent.d.ts +2 -1
  150. package/dist/cjs/types/agent.d.ts.map +1 -1
  151. package/dist/cjs/types/ai.d.ts +20 -0
  152. package/dist/cjs/types/ai.d.ts.map +1 -1
  153. package/dist/cjs/types/errors.d.ts +33 -0
  154. package/dist/cjs/types/errors.d.ts.map +1 -1
  155. package/dist/cjs/types/errors.js +37 -1
  156. package/dist/cjs/types/errors.js.map +1 -1
  157. package/dist/cjs/types/flow.d.ts +10 -5
  158. package/dist/cjs/types/flow.d.ts.map +1 -1
  159. package/dist/cjs/types/history.d.ts +1 -1
  160. package/dist/cjs/types/history.d.ts.map +1 -1
  161. package/dist/cjs/types/index.d.ts +5 -4
  162. package/dist/cjs/types/index.d.ts.map +1 -1
  163. package/dist/cjs/types/index.js +3 -1
  164. package/dist/cjs/types/index.js.map +1 -1
  165. package/dist/cjs/types/persistence.d.ts +43 -2
  166. package/dist/cjs/types/persistence.d.ts.map +1 -1
  167. package/dist/cjs/types/session.d.ts +8 -0
  168. package/dist/cjs/types/session.d.ts.map +1 -1
  169. package/dist/cjs/types/signals.d.ts +12 -2
  170. package/dist/cjs/types/signals.d.ts.map +1 -1
  171. package/dist/cjs/types/template.d.ts +3 -1
  172. package/dist/cjs/types/template.d.ts.map +1 -1
  173. package/dist/cjs/types/tool.d.ts +4 -4
  174. package/dist/cjs/types/tool.d.ts.map +1 -1
  175. package/dist/cjs/utils/condition.d.ts +19 -0
  176. package/dist/cjs/utils/condition.d.ts.map +1 -1
  177. package/dist/cjs/utils/condition.js +86 -15
  178. package/dist/cjs/utils/condition.js.map +1 -1
  179. package/dist/cjs/utils/session.d.ts +1 -0
  180. package/dist/cjs/utils/session.d.ts.map +1 -1
  181. package/dist/cjs/utils/session.js +1 -0
  182. package/dist/cjs/utils/session.js.map +1 -1
  183. package/dist/core/Agent.d.ts +28 -18
  184. package/dist/core/Agent.d.ts.map +1 -1
  185. package/dist/core/Agent.js +58 -68
  186. package/dist/core/Agent.js.map +1 -1
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -1
  188. package/dist/core/AutoChainExecutor.js +14 -20
  189. package/dist/core/AutoChainExecutor.js.map +1 -1
  190. package/dist/core/BranchEvaluator.d.ts +4 -3
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -1
  192. package/dist/core/BranchEvaluator.js +18 -23
  193. package/dist/core/BranchEvaluator.js.map +1 -1
  194. package/dist/core/Flow.d.ts +2 -1
  195. package/dist/core/Flow.d.ts.map +1 -1
  196. package/dist/core/Flow.js +10 -3
  197. package/dist/core/Flow.js.map +1 -1
  198. package/dist/core/FlowRouter.d.ts +1 -0
  199. package/dist/core/FlowRouter.d.ts.map +1 -1
  200. package/dist/core/FlowRouter.js +28 -5
  201. package/dist/core/FlowRouter.js.map +1 -1
  202. package/dist/core/PersistenceManager.d.ts +3 -0
  203. package/dist/core/PersistenceManager.d.ts.map +1 -1
  204. package/dist/core/PersistenceManager.js +58 -6
  205. package/dist/core/PersistenceManager.js.map +1 -1
  206. package/dist/core/PromptComposer.d.ts.map +1 -1
  207. package/dist/core/PromptComposer.js +24 -10
  208. package/dist/core/PromptComposer.js.map +1 -1
  209. package/dist/core/ResponseGenerationError.d.ts +30 -0
  210. package/dist/core/ResponseGenerationError.d.ts.map +1 -0
  211. package/dist/core/ResponseGenerationError.js +33 -0
  212. package/dist/core/ResponseGenerationError.js.map +1 -0
  213. package/dist/core/ResponseModal.d.ts +43 -102
  214. package/dist/core/ResponseModal.d.ts.map +1 -1
  215. package/dist/core/ResponseModal.js +171 -1186
  216. package/dist/core/ResponseModal.js.map +1 -1
  217. package/dist/core/ResponsePipeline.d.ts +58 -152
  218. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  219. package/dist/core/ResponsePipeline.js +409 -458
  220. package/dist/core/ResponsePipeline.js.map +1 -1
  221. package/dist/core/SessionFinalizer.d.ts +34 -0
  222. package/dist/core/SessionFinalizer.d.ts.map +1 -0
  223. package/dist/core/SessionFinalizer.js +57 -0
  224. package/dist/core/SessionFinalizer.js.map +1 -0
  225. package/dist/core/SessionManager.d.ts +1 -1
  226. package/dist/core/SessionManager.d.ts.map +1 -1
  227. package/dist/core/SessionManager.js +18 -7
  228. package/dist/core/SessionManager.js.map +1 -1
  229. package/dist/core/SignalCoordinator.d.ts +103 -0
  230. package/dist/core/SignalCoordinator.d.ts.map +1 -0
  231. package/dist/core/SignalCoordinator.js +203 -0
  232. package/dist/core/SignalCoordinator.js.map +1 -0
  233. package/dist/core/SignalEvaluator.d.ts +2 -2
  234. package/dist/core/SignalEvaluator.d.ts.map +1 -1
  235. package/dist/core/SignalEvaluator.js +11 -26
  236. package/dist/core/SignalEvaluator.js.map +1 -1
  237. package/dist/core/Step.d.ts +3 -1
  238. package/dist/core/Step.d.ts.map +1 -1
  239. package/dist/core/Step.js +10 -3
  240. package/dist/core/Step.js.map +1 -1
  241. package/dist/core/StepLifecycle.d.ts +33 -0
  242. package/dist/core/StepLifecycle.d.ts.map +1 -0
  243. package/dist/core/StepLifecycle.js +93 -0
  244. package/dist/core/StepLifecycle.js.map +1 -0
  245. package/dist/core/ToolLoopExecutor.d.ts +104 -0
  246. package/dist/core/ToolLoopExecutor.d.ts.map +1 -0
  247. package/dist/core/ToolLoopExecutor.js +387 -0
  248. package/dist/core/ToolLoopExecutor.js.map +1 -0
  249. package/dist/core/ToolManager.d.ts +1 -1
  250. package/dist/core/ToolManager.d.ts.map +1 -1
  251. package/dist/core/ToolManager.js.map +1 -1
  252. package/dist/index.d.ts +4 -5
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +3 -3
  255. package/dist/index.js.map +1 -1
  256. package/dist/providers/AnthropicProvider.d.ts +2 -0
  257. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  258. package/dist/providers/AnthropicProvider.js +22 -50
  259. package/dist/providers/AnthropicProvider.js.map +1 -1
  260. package/dist/providers/DeepSeekProvider.d.ts +25 -21
  261. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  262. package/dist/providers/DeepSeekProvider.js +49 -408
  263. package/dist/providers/DeepSeekProvider.js.map +1 -1
  264. package/dist/providers/GeminiProvider.d.ts +2 -0
  265. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  266. package/dist/providers/GeminiProvider.js +21 -50
  267. package/dist/providers/GeminiProvider.js.map +1 -1
  268. package/dist/providers/OpenAICompatibleProvider.d.ts +129 -0
  269. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -0
  270. package/dist/providers/OpenAICompatibleProvider.js +481 -0
  271. package/dist/providers/OpenAICompatibleProvider.js.map +1 -0
  272. package/dist/providers/OpenAIProvider.d.ts +9 -28
  273. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  274. package/dist/providers/OpenAIProvider.js +23 -417
  275. package/dist/providers/OpenAIProvider.js.map +1 -1
  276. package/dist/providers/OpenRouterProvider.d.ts +10 -27
  277. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  278. package/dist/providers/OpenRouterProvider.js +28 -417
  279. package/dist/providers/OpenRouterProvider.js.map +1 -1
  280. package/dist/providers/errorClassification.d.ts +61 -0
  281. package/dist/providers/errorClassification.d.ts.map +1 -0
  282. package/dist/providers/errorClassification.js +116 -0
  283. package/dist/providers/errorClassification.js.map +1 -0
  284. package/dist/providers/index.d.ts +4 -0
  285. package/dist/providers/index.d.ts.map +1 -1
  286. package/dist/providers/index.js +2 -0
  287. package/dist/providers/index.js.map +1 -1
  288. package/dist/types/agent.d.ts +2 -1
  289. package/dist/types/agent.d.ts.map +1 -1
  290. package/dist/types/ai.d.ts +20 -0
  291. package/dist/types/ai.d.ts.map +1 -1
  292. package/dist/types/errors.d.ts +33 -0
  293. package/dist/types/errors.d.ts.map +1 -1
  294. package/dist/types/errors.js +34 -0
  295. package/dist/types/errors.js.map +1 -1
  296. package/dist/types/flow.d.ts +10 -5
  297. package/dist/types/flow.d.ts.map +1 -1
  298. package/dist/types/history.d.ts +1 -1
  299. package/dist/types/history.d.ts.map +1 -1
  300. package/dist/types/index.d.ts +5 -4
  301. package/dist/types/index.d.ts.map +1 -1
  302. package/dist/types/index.js +1 -1
  303. package/dist/types/index.js.map +1 -1
  304. package/dist/types/persistence.d.ts +43 -2
  305. package/dist/types/persistence.d.ts.map +1 -1
  306. package/dist/types/session.d.ts +8 -0
  307. package/dist/types/session.d.ts.map +1 -1
  308. package/dist/types/signals.d.ts +12 -2
  309. package/dist/types/signals.d.ts.map +1 -1
  310. package/dist/types/template.d.ts +3 -1
  311. package/dist/types/template.d.ts.map +1 -1
  312. package/dist/types/tool.d.ts +4 -4
  313. package/dist/types/tool.d.ts.map +1 -1
  314. package/dist/utils/condition.d.ts +19 -0
  315. package/dist/utils/condition.d.ts.map +1 -1
  316. package/dist/utils/condition.js +84 -15
  317. package/dist/utils/condition.js.map +1 -1
  318. package/dist/utils/session.d.ts +1 -0
  319. package/dist/utils/session.d.ts.map +1 -1
  320. package/dist/utils/session.js +1 -0
  321. package/dist/utils/session.js.map +1 -1
  322. package/docs/README.md +1 -1
  323. package/docs/guides/branching.md +1 -1
  324. package/docs/guides/compaction.md +12 -5
  325. package/docs/guides/conditions.md +15 -2
  326. package/docs/guides/error-handling.md +59 -9
  327. package/docs/guides/instructions.md +2 -2
  328. package/docs/guides/persistence.md +69 -2
  329. package/docs/guides/streaming.md +2 -0
  330. package/docs/migration/README.md +5 -1
  331. package/docs/migration/v2-3-to-v2-4.md +316 -0
  332. package/docs/reference/adapters.md +55 -7
  333. package/docs/reference/branches.md +2 -2
  334. package/docs/reference/create-agent.md +3 -3
  335. package/docs/reference/errors.md +66 -1
  336. package/docs/reference/flow.md +1 -1
  337. package/docs/reference/instruction.md +4 -4
  338. package/docs/reference/providers.md +100 -3
  339. package/docs/reference/signals.md +11 -3
  340. package/docs/reference/step.md +2 -2
  341. package/docs/reference/tool.md +3 -1
  342. package/docs/start/05-go-to-production.md +3 -0
  343. package/package.json +1 -1
  344. package/src/adapters/MemoryAdapter.ts +15 -1
  345. package/src/adapters/MongoAdapter.ts +41 -2
  346. package/src/adapters/OpenSearchAdapter.ts +24 -1
  347. package/src/adapters/PostgreSQLAdapter.ts +45 -5
  348. package/src/adapters/PrismaAdapter.ts +82 -16
  349. package/src/adapters/RedisAdapter.ts +19 -1
  350. package/src/adapters/SQLiteAdapter.ts +47 -5
  351. package/src/core/Agent.ts +70 -85
  352. package/src/core/AutoChainExecutor.ts +27 -57
  353. package/src/core/BranchEvaluator.ts +24 -30
  354. package/src/core/Flow.ts +10 -3
  355. package/src/core/FlowRouter.ts +36 -4
  356. package/src/core/PersistenceManager.ts +79 -10
  357. package/src/core/PromptComposer.ts +25 -12
  358. package/src/core/ResponseGenerationError.ts +56 -0
  359. package/src/core/ResponseModal.ts +233 -1482
  360. package/src/core/ResponsePipeline.ts +492 -662
  361. package/src/core/SessionFinalizer.ts +78 -0
  362. package/src/core/SessionManager.ts +21 -9
  363. package/src/core/SignalCoordinator.ts +263 -0
  364. package/src/core/SignalEvaluator.ts +12 -29
  365. package/src/core/Step.ts +11 -3
  366. package/src/core/StepLifecycle.ts +139 -0
  367. package/src/core/ToolLoopExecutor.ts +492 -0
  368. package/src/core/ToolManager.ts +2 -1
  369. package/src/index.ts +7 -5
  370. package/src/providers/AnthropicProvider.ts +30 -72
  371. package/src/providers/DeepSeekProvider.ts +74 -586
  372. package/src/providers/GeminiProvider.ts +29 -70
  373. package/src/providers/OpenAICompatibleProvider.ts +738 -0
  374. package/src/providers/OpenAIProvider.ts +29 -602
  375. package/src/providers/OpenRouterProvider.ts +38 -596
  376. package/src/providers/errorClassification.ts +172 -0
  377. package/src/providers/index.ts +13 -0
  378. package/src/types/agent.ts +2 -1
  379. package/src/types/ai.ts +22 -0
  380. package/src/types/errors.ts +57 -0
  381. package/src/types/flow.ts +10 -5
  382. package/src/types/history.ts +1 -2
  383. package/src/types/index.ts +5 -1
  384. package/src/types/persistence.ts +50 -2
  385. package/src/types/session.ts +9 -0
  386. package/src/types/signals.ts +14 -2
  387. package/src/types/template.ts +3 -1
  388. package/src/types/tool.ts +10 -10
  389. package/src/utils/condition.ts +115 -18
  390. package/src/utils/session.ts +2 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Shared provider error utilities: classification of SDK/HTTP errors onto
3
+ * normalized ProviderErrorCode values, backup-model eligibility, and
4
+ * wrapping of terminal failures in ProviderError.
5
+ *
6
+ * The classification is derived once and reused for both backup-model
7
+ * decisions and final error wrapping, so the two can never drift apart.
8
+ */
9
+
10
+ import { ProviderError, type ProviderErrorCode } from "../types/errors";
11
+
12
+ /**
13
+ * Shape of errors with status/code properties thrown by provider SDKs
14
+ */
15
+ export interface ErrorWithStatus {
16
+ status?: number;
17
+ code?: string;
18
+ message?: string;
19
+ type?: string;
20
+ }
21
+
22
+ /**
23
+ * Type guard to check if error is ErrorWithStatus
24
+ */
25
+ export function isErrorWithStatus(error: unknown): error is ErrorWithStatus {
26
+ return (
27
+ typeof error === "object" &&
28
+ error !== null &&
29
+ ("status" in error || "code" in error || "message" in error)
30
+ );
31
+ }
32
+
33
+ /**
34
+ * Safely extract error message
35
+ */
36
+ export function getErrorMessage(error: unknown): string {
37
+ if (error instanceof Error) {
38
+ return error.message;
39
+ }
40
+ if (isErrorWithStatus(error) && error.message) {
41
+ return error.message;
42
+ }
43
+ return String(error);
44
+ }
45
+
46
+ /**
47
+ * Provider-specific signals treated as "overloaded/unavailable", in
48
+ * addition to the shared defaults (HTTP 500/503 and the common message
49
+ * substrings below).
50
+ */
51
+ export interface ErrorClassificationOptions {
52
+ /** Extra HTTP statuses treated as overloaded (e.g. Anthropic's 529) */
53
+ overloadedStatuses?: readonly number[];
54
+ /** Error `code` values treated as overloaded/unavailable (e.g. "model_not_found") */
55
+ overloadedCodes?: readonly string[];
56
+ /** Error `type` values treated as overloaded (e.g. Anthropic's "overloaded_error") */
57
+ overloadedTypes?: readonly string[];
58
+ /** Extra message substrings treated as overloaded (e.g. OpenRouter's "capacity") */
59
+ overloadedMessages?: readonly string[];
60
+ }
61
+
62
+ /**
63
+ * Message substrings every provider historically treated as
64
+ * overloaded/unavailable for backup-model purposes.
65
+ */
66
+ const DEFAULT_OVERLOADED_MESSAGES: readonly string[] = [
67
+ "overloaded",
68
+ "unavailable",
69
+ "internal error",
70
+ "Internal error",
71
+ ];
72
+
73
+ /**
74
+ * Classify an unknown error into a normalized ProviderErrorCode.
75
+ *
76
+ * Overload/availability checks run first so that backup-model decisions
77
+ * (rate_limited/overloaded) match the historical shouldUseBackupModel
78
+ * predicate exactly.
79
+ */
80
+ export function classifyProviderError(
81
+ error: unknown,
82
+ options: ErrorClassificationOptions = {}
83
+ ): ProviderErrorCode {
84
+ if (!isErrorWithStatus(error)) {
85
+ return "unknown";
86
+ }
87
+
88
+ const { status, code, type } = error;
89
+ const message = getErrorMessage(error);
90
+
91
+ // Server errors / overload
92
+ if (status === 500 || status === 503) {
93
+ return "overloaded";
94
+ }
95
+
96
+ // Rate limiting
97
+ if (status === 429) {
98
+ return "rate_limited";
99
+ }
100
+
101
+ // Provider-specific overload/unavailability signals
102
+ if (status !== undefined && options.overloadedStatuses?.includes(status)) {
103
+ return "overloaded";
104
+ }
105
+ if (code !== undefined && options.overloadedCodes?.includes(code)) {
106
+ return "overloaded";
107
+ }
108
+ if (type !== undefined && options.overloadedTypes?.includes(type)) {
109
+ return "overloaded";
110
+ }
111
+ const overloadedMessages = options.overloadedMessages
112
+ ? [...DEFAULT_OVERLOADED_MESSAGES, ...options.overloadedMessages]
113
+ : DEFAULT_OVERLOADED_MESSAGES;
114
+ if (overloadedMessages.some((pattern) => message.includes(pattern))) {
115
+ return "overloaded";
116
+ }
117
+
118
+ // Non-retriable classifications (never triggered backup models)
119
+ if (status === 401 || status === 403) {
120
+ return "auth";
121
+ }
122
+ if (status === 400 || status === 404 || status === 422) {
123
+ return "invalid_request";
124
+ }
125
+ if (
126
+ status === 408 ||
127
+ message.includes("timed out") ||
128
+ message.includes("timeout")
129
+ ) {
130
+ return "timeout";
131
+ }
132
+ if (
133
+ message.includes("fetch failed") ||
134
+ message.includes("ECONNREFUSED") ||
135
+ message.includes("ECONNRESET") ||
136
+ message.includes("ETIMEDOUT") ||
137
+ message.includes("network")
138
+ ) {
139
+ return "network";
140
+ }
141
+
142
+ return "unknown";
143
+ }
144
+
145
+ /**
146
+ * Whether an error code qualifies for trying backup models.
147
+ * Mirrors the historical shouldUseBackupModel predicate.
148
+ */
149
+ export function isBackupEligible(code: ProviderErrorCode): boolean {
150
+ return code === "rate_limited" || code === "overloaded";
151
+ }
152
+
153
+ /**
154
+ * Wrap a terminal failure (after retries/backup exhaustion) in a
155
+ * normalized ProviderError, preserving the original error as `cause`.
156
+ * Already-wrapped errors pass through untouched.
157
+ */
158
+ export function toProviderError(
159
+ error: unknown,
160
+ provider: string,
161
+ options?: ErrorClassificationOptions
162
+ ): ProviderError {
163
+ if (error instanceof ProviderError) {
164
+ return error;
165
+ }
166
+ return new ProviderError(
167
+ classifyProviderError(error, options),
168
+ provider,
169
+ getErrorMessage(error),
170
+ error
171
+ );
172
+ }
@@ -17,3 +17,16 @@ export type { OpenRouterProviderOptions } from "./OpenRouterProvider";
17
17
 
18
18
  export { DeepSeekProvider } from "./DeepSeekProvider";
19
19
  export type { DeepSeekProviderOptions } from "./DeepSeekProvider";
20
+
21
+ export { OpenAICompatibleProvider } from "./OpenAICompatibleProvider";
22
+ export type {
23
+ OpenAICompatibleProviderInit,
24
+ OpenAICompatibleRequestConfig,
25
+ } from "./OpenAICompatibleProvider";
26
+
27
+ export {
28
+ classifyProviderError,
29
+ isBackupEligible,
30
+ toProviderError,
31
+ } from "./errorClassification";
32
+ export type { ErrorClassificationOptions } from "./errorClassification";
@@ -267,7 +267,8 @@ export interface Instruction<TContext = unknown, TData = unknown> {
267
267
  */
268
268
  kind?: 'must' | 'never' | 'should';
269
269
  /**
270
- * AI-evaluated activation condition. String or array of strings (OR semantics).
270
+ * AI-evaluated activation condition. Non-`!` strings are OR alternatives;
271
+ * `!` strings are OR exclusions where any match inhibits the instruction.
271
272
  * Undefined = always active. Functions are NOT allowed here — use `if`.
272
273
  */
273
274
  when?: ConditionWhen;
package/src/types/ai.ts CHANGED
@@ -132,6 +132,25 @@ export interface GenerateMessageStreamChunk<
132
132
  structured?: TStructured;
133
133
  }
134
134
 
135
+ /**
136
+ * Static capability flags exposed by a provider implementation.
137
+ *
138
+ * Values describe what the implementation actually does (e.g. Anthropic
139
+ * enforces JSON output via a prompt instruction, not a native schema mode).
140
+ */
141
+ export interface ProviderCapabilities {
142
+ /** Provider supports tool/function calling */
143
+ supportsTools: boolean;
144
+ /** Provider natively enforces a JSON schema on output (vs. prompt-based JSON instruction) */
145
+ supportsNativeJsonSchema: boolean;
146
+ /** Provider supports streaming responses */
147
+ supportsStreaming: boolean;
148
+ /** Provider surfaces tool calls during streaming */
149
+ supportsStreamingToolCalls: boolean;
150
+ /** Provider supports prompt caching */
151
+ supportsPromptCaching: boolean;
152
+ }
153
+
135
154
  /**
136
155
  * AI provider interface (strategy pattern)
137
156
  */
@@ -139,6 +158,9 @@ export interface AiProvider {
139
158
  /** Provider name/identifier */
140
159
  readonly name: string;
141
160
 
161
+ /** Static capability flags for this provider implementation */
162
+ capabilities: ProviderCapabilities;
163
+
142
164
  /**
143
165
  * Generate a message based on prompt and context
144
166
  */
@@ -16,3 +16,60 @@ export class NotImplementedError extends Error {
16
16
  this.name = 'NotImplementedError';
17
17
  }
18
18
  }
19
+
20
+ /**
21
+ * Normalized error codes for AI provider failures.
22
+ *
23
+ * Providers map their SDK/HTTP errors onto these codes so callers can
24
+ * handle failures uniformly regardless of which provider is configured.
25
+ */
26
+ export type ProviderErrorCode =
27
+ | 'rate_limited'
28
+ | 'overloaded'
29
+ | 'auth'
30
+ | 'invalid_request'
31
+ | 'schema_rejected'
32
+ | 'timeout'
33
+ | 'network'
34
+ | 'unknown';
35
+
36
+ /**
37
+ * Normalized error thrown by AI providers for terminal failures — i.e.
38
+ * after retries and backup models (if any) have been exhausted.
39
+ *
40
+ * The original SDK/HTTP error is preserved as `cause` for debugging and
41
+ * provider-specific handling.
42
+ */
43
+ export class ProviderError extends Error {
44
+ constructor(
45
+ public readonly code: ProviderErrorCode,
46
+ public readonly provider: string,
47
+ message: string,
48
+ public readonly cause?: unknown,
49
+ ) {
50
+ super(message);
51
+ this.name = 'ProviderError';
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Thrown by the persistence layer when a session save carries a stale
57
+ * `version` — i.e. another writer persisted the session after this one
58
+ * loaded it (concurrent respond() calls, parallel webhooks, two tabs).
59
+ *
60
+ * Handlers should reload the session and retry or surface the conflict.
61
+ */
62
+ export class SessionConflictError extends Error {
63
+ constructor(
64
+ public readonly sessionId: string,
65
+ public readonly expectedVersion: number,
66
+ public readonly actualVersion: number | undefined,
67
+ ) {
68
+ super(
69
+ `[SessionConflictError] Session "${sessionId}" was modified concurrently: ` +
70
+ `expected version ${expectedVersion}, found ${actualVersion ?? 'none'}. ` +
71
+ `Reload the session and retry the operation.`
72
+ );
73
+ this.name = 'SessionConflictError';
74
+ }
75
+ }
package/src/types/flow.ts CHANGED
@@ -25,8 +25,10 @@ export type ConditionIf<TContext = unknown, TData = unknown> =
25
25
  | ConditionPredicate<TContext, TData>[];
26
26
 
27
27
  /**
28
- * The `when` field shape: a single AI-evaluated string or array of strings (OR semantics).
29
- * Functions are NOT allowed on `when` they belong on `if` only.
28
+ * The `when` field shape: a single AI-evaluated string or array of strings.
29
+ * Non-`!` entries use OR semantics. `!`-prefixed entries are OR exclusions:
30
+ * any matching exclusion inhibits the condition. Functions are NOT allowed on
31
+ * `when` — they belong on `if` only.
30
32
  */
31
33
  export type ConditionWhen = string | string[];
32
34
  import type { SessionState } from "./session";
@@ -196,7 +198,8 @@ export type BranchPredicate<TContext = unknown, TData = unknown> = (
196
198
  */
197
199
  export interface BranchEntry<TContext = unknown, TData = unknown> {
198
200
  /**
199
- * AI-evaluated condition. String or array of strings (OR semantics).
201
+ * AI-evaluated condition. Non-`!` strings are OR alternatives; `!` strings
202
+ * are OR exclusions where any match inhibits the branch.
200
203
  * Costs LLM tokens. Reuses the same machinery as `step.when`.
201
204
  * Only evaluated if `if` passes (or is absent) — code-first short-circuit.
202
205
  */
@@ -324,7 +327,8 @@ export interface FlowOptions<TContext = unknown, TData = unknown> {
324
327
  description?: string;
325
328
 
326
329
  /**
327
- * AI-evaluated activation condition(s). String or array of strings (OR semantics).
330
+ * AI-evaluated activation condition(s). Non-`!` strings are OR alternatives;
331
+ * `!` strings are OR exclusions where any match inhibits activation.
328
332
  * Costs LLM tokens. Functions are NOT allowed here — use `if` for code predicates.
329
333
  */
330
334
  when?: ConditionWhen;
@@ -498,7 +502,8 @@ export interface StepOptions<TContext = unknown, TData = unknown> {
498
502
  */
499
503
  requires?: (keyof TData)[];
500
504
  /**
501
- * AI-evaluated activation condition(s). String or array of strings (OR semantics).
505
+ * AI-evaluated activation condition(s). Non-`!` strings are OR alternatives;
506
+ * `!` strings are OR exclusions where any match inhibits activation.
502
507
  * Costs LLM tokens. Functions are NOT allowed here — use `if` for code predicates.
503
508
  */
504
509
  when?: ConditionWhen;
@@ -64,8 +64,7 @@ export type ToolHistoryItem = {
64
64
  role: "tool";
65
65
  tool_call_id: string;
66
66
  name: string;
67
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
- content: any;
67
+ content: unknown;
69
68
  };
70
69
 
71
70
  export type SystemHistoryItem = {
@@ -69,6 +69,7 @@ export type {
69
69
  Signal,
70
70
  SignalContext,
71
71
  SignalDirective,
72
+ ResolvedSignalDirective,
72
73
  SignalPredicate,
73
74
  SignalPredicateContext,
74
75
  SignalFiring,
@@ -118,6 +119,7 @@ export type {
118
119
  AgentStructuredResponse,
119
120
  ReasoningConfig,
120
121
  GenerateMessageStreamChunk,
122
+ ProviderCapabilities,
121
123
  } from "./ai";
122
124
 
123
125
  // Schema types
@@ -136,6 +138,7 @@ export type {
136
138
  CreateSessionData,
137
139
  SaveMessageOptions,
138
140
  CollectedStateData,
141
+ SessionUpdateOptions,
139
142
  } from "./persistence";
140
143
 
141
144
  // Template types
@@ -146,7 +149,8 @@ export type {
146
149
  } from "./template";
147
150
 
148
151
  // Error types
149
- export { NotImplementedError } from "./errors";
152
+ export { NotImplementedError, SessionConflictError, ProviderError } from "./errors";
153
+ export type { ProviderErrorCode } from "./errors";
150
154
 
151
155
  // Internal — ConditionTemplate is NOT exported from the public surface in v2.
152
156
  // It remains internally for the condition evaluator utility.
@@ -27,6 +27,11 @@ export interface SessionData<TData = Record<string, unknown>> {
27
27
  completedAt?: Date;
28
28
  createdAt: Date;
29
29
  updatedAt: Date;
30
+ /**
31
+ * Optimistic-concurrency version. Incremented by the repository on every
32
+ * update. Undefined on rows written by pre-2.4 versions.
33
+ */
34
+ version?: number;
30
35
  }
31
36
 
32
37
  /**
@@ -44,6 +49,12 @@ export type CreateSessionData<TData = Record<string, unknown>> = Omit<
44
49
  * This is a subset of SessionState, stored within SessionData.
45
50
  */
46
51
  export interface CollectedStateData<TData = Record<string, unknown>> {
52
+ /**
53
+ * User-defined schema version of the agent that wrote this state.
54
+ * Set from `PersistenceConfig.schemaVersion` on save; checked on load so
55
+ * `migrateSession` can upgrade state written by older agent deployments.
56
+ */
57
+ schemaVersion?: number;
47
58
  data: Partial<TData>;
48
59
  flowHistory: SessionState<TData>["flowHistory"];
49
60
  history?: SessionState<TData>["history"];
@@ -72,6 +83,18 @@ export interface MessageData {
72
83
  createdAt: Date;
73
84
  }
74
85
 
86
+ /**
87
+ * Options for SessionRepository.update
88
+ */
89
+ export interface SessionUpdateOptions {
90
+ /**
91
+ * Optimistic-concurrency guard. When set, the repository must reject the
92
+ * update with SessionConflictError if the stored session's `version`
93
+ * differs from this value.
94
+ */
95
+ expectedVersion?: number;
96
+ }
97
+
75
98
  /**
76
99
  * Repository interface for sessions
77
100
  * Implement this interface with your database of choice
@@ -98,11 +121,17 @@ export interface SessionRepository<TData = Record<string, unknown>> {
98
121
  findByUserId(userId: string, limit?: number): Promise<SessionData<TData>[]>;
99
122
 
100
123
  /**
101
- * Update session
124
+ * Update session.
125
+ *
126
+ * When `options.expectedVersion` is provided, the update is a compare-and-swap:
127
+ * it must throw SessionConflictError if the stored `version` differs (rows with
128
+ * no stored version — written by pre-2.4 — are accepted). Every successful
129
+ * update increments `version` by one.
102
130
  */
103
131
  update(
104
132
  id: string,
105
- data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
133
+ data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>,
134
+ options?: SessionUpdateOptions
106
135
  ): Promise<SessionData<TData> | null>;
107
136
 
108
137
  /**
@@ -229,6 +258,25 @@ export interface PersistenceConfig<TData = Record<string, unknown>> {
229
258
  * Can also be provided per-call in methods
230
259
  */
231
260
  userId?: string;
261
+
262
+ /**
263
+ * Version of the user-defined agent schema. Stamped onto persisted state on
264
+ * save. When a loaded session carries a different (or missing) schemaVersion,
265
+ * `migrateSession` is invoked to upgrade it; without a migrator, a warning is
266
+ * logged and the state is used as-is.
267
+ */
268
+ schemaVersion?: number;
269
+
270
+ /**
271
+ * Migrate persisted session state written under an older schemaVersion.
272
+ * Receives the stored state and the version it was written with
273
+ * (undefined for pre-versioning rows); must return state valid for the
274
+ * current schemaVersion.
275
+ */
276
+ migrateSession?: (
277
+ collectedData: CollectedStateData<TData>,
278
+ fromVersion: number | undefined
279
+ ) => CollectedStateData<TData> | Promise<CollectedStateData<TData>>;
232
280
  }
233
281
 
234
282
  /**
@@ -74,4 +74,13 @@ export interface SessionState<TData = unknown> {
74
74
  lastUpdatedAt?: Date;
75
75
  [key: string]: unknown;
76
76
  };
77
+
78
+ /**
79
+ * Optimistic-concurrency version, managed by the persistence layer.
80
+ * Incremented on every successful save; a save with a stale version
81
+ * throws SessionConflictError instead of silently overwriting state
82
+ * written by a concurrent turn. Undefined for sessions never persisted
83
+ * or persisted by a pre-2.4 version (no conflict check is performed then).
84
+ */
85
+ version?: number;
77
86
  }
@@ -128,6 +128,18 @@ export interface SignalDirective<TContext = unknown, TData = unknown>
128
128
  replyWith?: string | ((ctx: SignalContext<TContext, TData>) => string);
129
129
  }
130
130
 
131
+ /**
132
+ * A signal directive as reported on the response surface (SignalFiring).
133
+ * `replyWith` has been resolved onto `reply` and stripped by the processor,
134
+ * leaving a directive that is covariant in TContext — which lets firings
135
+ * flow into AgentResponse without casts.
136
+ */
137
+ export type ResolvedSignalDirective<TContext = unknown, TData = unknown> =
138
+ Directive<TContext, TData> & {
139
+ /** Stop processing remaining signals for this phase after this handler. */
140
+ stopOtherSignals?: boolean;
141
+ };
142
+
131
143
  // ──────────────────────────────────────────────────────────────────────────────
132
144
  // Signal context (handler argument)
133
145
  // ──────────────────────────────────────────────────────────────────────────────
@@ -311,8 +323,8 @@ export interface SignalFiring<TContext = unknown, TData = unknown> {
311
323
  reason?: string;
312
324
  /** Extracted data when the signal operates in extraction mode. */
313
325
  extracted?: unknown;
314
- /** The directive returned by the signal handler (if any). */
315
- directive?: SignalDirective<TContext, TData>;
326
+ /** The directive returned by the signal handler (if any), with `replyWith` already resolved to `reply`. */
327
+ directive?: ResolvedSignalDirective<TContext, TData>;
316
328
  /** Error message if the handler threw. */
317
329
  handlerError?: string;
318
330
  /** Wall-clock duration of the handler invocation in milliseconds. */
@@ -83,8 +83,10 @@ export type Template<TContext = unknown, TData = unknown> =
83
83
  export interface ConditionEvaluationResult {
84
84
  /** Result of function evaluations only */
85
85
  programmaticResult: boolean;
86
- /** String values for AI context */
86
+ /** Positive string values for AI context. Any one may satisfy the condition. */
87
87
  aiContextStrings: string[];
88
+ /** Negative string values for AI context. Any one inhibits the condition. */
89
+ aiExclusionStrings?: string[];
88
90
  /** Whether any functions were evaluated */
89
91
  hasProgrammaticConditions: boolean;
90
92
  /** Detailed evaluation information for debugging */
package/src/types/tool.ts CHANGED
@@ -9,7 +9,7 @@ import type { Directive } from "./flow";
9
9
  /**
10
10
  * Context provided to tool handlers
11
11
  */
12
- export interface ToolContext<TContext = any, TData = any> {
12
+ export interface ToolContext<TContext = unknown, TData = unknown> {
13
13
  /** The agent's context data */
14
14
  context: TContext;
15
15
  /** Complete agent-level data collected so far */
@@ -47,9 +47,9 @@ export interface ToolContext<TContext = any, TData = any> {
47
47
  * Result returned by a tool
48
48
  */
49
49
  export interface ToolResult<
50
- TResultData = any,
51
- TContext = any,
52
- TData = any
50
+ TResultData = unknown,
51
+ TContext = unknown,
52
+ TData = unknown
53
53
  > {
54
54
  /** The result data */
55
55
  data?: TResultData;
@@ -71,9 +71,9 @@ export interface ToolResult<
71
71
  * Handler function for a tool
72
72
  */
73
73
  export type ToolHandler<
74
- TContext = any,
75
- TData = any,
76
- TResult = any
74
+ TContext = unknown,
75
+ TData = unknown,
76
+ TResult = unknown
77
77
  > = (
78
78
  context: ToolContext<TContext, TData>,
79
79
  args?: Record<string, unknown>
@@ -90,9 +90,9 @@ export type ToolHandler<
90
90
  * metadata fields optional. `EnhancedTool` is removed from the public surface.
91
91
  */
92
92
  export interface Tool<
93
- TContext = any,
94
- TData = any,
95
- TResult = any
93
+ TContext = unknown,
94
+ TData = unknown,
95
+ TResult = unknown
96
96
  > {
97
97
  /** Tool identifier */
98
98
  id: string;