@anthropic-ai/sdk 0.125.0 → 0.127.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 (417) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/client.d.mts +12 -11
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +12 -11
  5. package/client.d.ts.map +1 -1
  6. package/client.js +865 -845
  7. package/client.js.map +1 -1
  8. package/client.mjs +866 -840
  9. package/client.mjs.map +1 -1
  10. package/core/api-promise.js +71 -68
  11. package/core/api-promise.js.map +1 -1
  12. package/core/api-promise.mjs +71 -64
  13. package/core/api-promise.mjs.map +1 -1
  14. package/core/error.js +5 -2
  15. package/core/error.js.map +1 -1
  16. package/core/error.mjs +5 -2
  17. package/core/error.mjs.map +1 -1
  18. package/core/pagination.js +56 -50
  19. package/core/pagination.js.map +1 -1
  20. package/core/pagination.mjs +56 -41
  21. package/core/pagination.mjs.map +1 -1
  22. package/core/streaming.js +212 -209
  23. package/core/streaming.js.map +1 -1
  24. package/core/streaming.mjs +212 -209
  25. package/core/streaming.mjs.map +1 -1
  26. package/helpers/beta/mcp.js +14 -19
  27. package/helpers/beta/mcp.js.map +1 -1
  28. package/helpers/beta/mcp.mjs +14 -13
  29. package/helpers/beta/mcp.mjs.map +1 -1
  30. package/internal/constants.js +1 -1
  31. package/internal/constants.js.map +1 -1
  32. package/internal/decoders/jsonl.js +27 -24
  33. package/internal/decoders/jsonl.js.map +1 -1
  34. package/internal/decoders/jsonl.mjs +27 -24
  35. package/internal/decoders/jsonl.mjs.map +1 -1
  36. package/internal/decoders/line.js +52 -49
  37. package/internal/decoders/line.js.map +1 -1
  38. package/internal/decoders/line.mjs +52 -43
  39. package/internal/decoders/line.mjs.map +1 -1
  40. package/internal/file-store.js +256 -258
  41. package/internal/file-store.js.map +1 -1
  42. package/internal/file-store.mjs +256 -243
  43. package/internal/file-store.mjs.map +1 -1
  44. package/internal/node.browser.d.mts.map +1 -1
  45. package/internal/node.browser.d.ts.map +1 -1
  46. package/internal/node.browser.js.map +1 -1
  47. package/internal/node.browser.mjs +7 -7
  48. package/internal/node.browser.mjs.map +1 -1
  49. package/internal/parse.d.mts.map +1 -1
  50. package/internal/parse.d.ts.map +1 -1
  51. package/internal/parse.js +2 -2
  52. package/internal/parse.js.map +1 -1
  53. package/internal/parse.mjs +3 -3
  54. package/internal/parse.mjs.map +1 -1
  55. package/internal/shim-types.js +0 -6
  56. package/internal/shim-types.js.map +1 -1
  57. package/internal/shim-types.mjs +0 -6
  58. package/internal/shim-types.mjs.map +1 -1
  59. package/internal/shims.d.mts +3 -3
  60. package/internal/shims.d.mts.map +1 -1
  61. package/internal/shims.d.ts +3 -3
  62. package/internal/shims.d.ts.map +1 -1
  63. package/internal/shims.js +0 -6
  64. package/internal/shims.js.map +1 -1
  65. package/internal/shims.mjs +0 -6
  66. package/internal/shims.mjs.map +1 -1
  67. package/internal/stainless-helper-header.js +6 -6
  68. package/internal/stainless-helper-header.js.map +1 -1
  69. package/internal/utils/async-queue.js +66 -63
  70. package/internal/utils/async-queue.js.map +1 -1
  71. package/internal/utils/async-queue.mjs +66 -56
  72. package/internal/utils/async-queue.mjs.map +1 -1
  73. package/internal/utils/bytes.d.mts +1 -1
  74. package/internal/utils/bytes.d.mts.map +1 -1
  75. package/internal/utils/bytes.d.ts +1 -1
  76. package/internal/utils/bytes.d.ts.map +1 -1
  77. package/internal/utils/log.d.mts +7 -12
  78. package/internal/utils/log.d.mts.map +1 -1
  79. package/internal/utils/log.d.ts +7 -12
  80. package/internal/utils/log.d.ts.map +1 -1
  81. package/internal/utils/log.js +12 -0
  82. package/internal/utils/log.js.map +1 -1
  83. package/internal/utils/log.mjs +11 -0
  84. package/internal/utils/log.mjs.map +1 -1
  85. package/lib/BetaMessageStream.d.mts.map +1 -1
  86. package/lib/BetaMessageStream.d.ts.map +1 -1
  87. package/lib/BetaMessageStream.js +595 -590
  88. package/lib/BetaMessageStream.js.map +1 -1
  89. package/lib/BetaMessageStream.mjs +595 -590
  90. package/lib/BetaMessageStream.mjs.map +1 -1
  91. package/lib/MessageStream.js +544 -541
  92. package/lib/MessageStream.js.map +1 -1
  93. package/lib/MessageStream.mjs +544 -541
  94. package/lib/MessageStream.mjs.map +1 -1
  95. package/lib/beta-parser.d.mts +1 -3
  96. package/lib/beta-parser.d.mts.map +1 -1
  97. package/lib/beta-parser.d.ts +1 -3
  98. package/lib/beta-parser.d.ts.map +1 -1
  99. package/lib/beta-parser.js.map +1 -1
  100. package/lib/beta-parser.mjs.map +1 -1
  101. package/lib/environments/poller.js +180 -174
  102. package/lib/environments/poller.js.map +1 -1
  103. package/lib/environments/poller.mjs +180 -153
  104. package/lib/environments/poller.mjs.map +1 -1
  105. package/lib/environments/worker.js +375 -369
  106. package/lib/environments/worker.js.map +1 -1
  107. package/lib/environments/worker.mjs +374 -329
  108. package/lib/environments/worker.mjs.map +1 -1
  109. package/lib/internal/stub.d.mts +2 -0
  110. package/lib/internal/stub.d.mts.map +1 -0
  111. package/lib/internal/stub.d.ts +2 -0
  112. package/lib/internal/stub.d.ts.map +1 -0
  113. package/lib/internal/stub.js +6 -0
  114. package/lib/internal/stub.js.map +1 -0
  115. package/lib/internal/stub.mjs +3 -0
  116. package/lib/internal/stub.mjs.map +1 -0
  117. package/lib/internal/types.d.mts +5 -0
  118. package/lib/internal/types.d.mts.map +1 -0
  119. package/lib/internal/types.d.ts +5 -0
  120. package/lib/internal/types.d.ts.map +1 -0
  121. package/lib/internal/types.js +3 -0
  122. package/lib/internal/types.js.map +1 -0
  123. package/lib/internal/types.mjs +2 -0
  124. package/lib/internal/types.mjs.map +1 -0
  125. package/lib/middleware.js +6 -1
  126. package/lib/middleware.js.map +1 -1
  127. package/lib/middleware.mjs +6 -1
  128. package/lib/middleware.mjs.map +1 -1
  129. package/lib/parser.d.mts +1 -3
  130. package/lib/parser.d.mts.map +1 -1
  131. package/lib/parser.d.ts +1 -3
  132. package/lib/parser.d.ts.map +1 -1
  133. package/lib/parser.js.map +1 -1
  134. package/lib/parser.mjs.map +1 -1
  135. package/lib/tools/BetaToolRunner.d.mts +21 -6
  136. package/lib/tools/BetaToolRunner.d.mts.map +1 -1
  137. package/lib/tools/BetaToolRunner.d.ts +21 -6
  138. package/lib/tools/BetaToolRunner.d.ts.map +1 -1
  139. package/lib/tools/BetaToolRunner.js +415 -310
  140. package/lib/tools/BetaToolRunner.js.map +1 -1
  141. package/lib/tools/BetaToolRunner.mjs +414 -303
  142. package/lib/tools/BetaToolRunner.mjs.map +1 -1
  143. package/lib/tools/SessionToolRunner.js +241 -235
  144. package/lib/tools/SessionToolRunner.js.map +1 -1
  145. package/lib/tools/SessionToolRunner.mjs +241 -192
  146. package/lib/tools/SessionToolRunner.mjs.map +1 -1
  147. package/lib/tools/ToolError.js +39 -36
  148. package/lib/tools/ToolError.js.map +1 -1
  149. package/lib/tools/ToolError.mjs +39 -13
  150. package/lib/tools/ToolError.mjs.map +1 -1
  151. package/lib/transform-json-schema.js +7 -5
  152. package/lib/transform-json-schema.js.map +1 -1
  153. package/lib/transform-json-schema.mjs +7 -5
  154. package/lib/transform-json-schema.mjs.map +1 -1
  155. package/package.json +4 -3
  156. package/resources/beta/agents/agents.js +135 -132
  157. package/resources/beta/agents/agents.js.map +1 -1
  158. package/resources/beta/agents/agents.mjs +135 -132
  159. package/resources/beta/agents/agents.mjs.map +1 -1
  160. package/resources/beta/beta.d.mts +5 -5
  161. package/resources/beta/beta.d.mts.map +1 -1
  162. package/resources/beta/beta.d.ts +5 -5
  163. package/resources/beta/beta.d.ts.map +1 -1
  164. package/resources/beta/beta.js +39 -36
  165. package/resources/beta/beta.js.map +1 -1
  166. package/resources/beta/beta.mjs +39 -36
  167. package/resources/beta/beta.mjs.map +1 -1
  168. package/resources/beta/deployment-runs.d.mts +4 -0
  169. package/resources/beta/deployment-runs.d.mts.map +1 -1
  170. package/resources/beta/deployment-runs.d.ts +4 -0
  171. package/resources/beta/deployment-runs.d.ts.map +1 -1
  172. package/resources/beta/deployments.d.mts +5 -0
  173. package/resources/beta/deployments.d.mts.map +1 -1
  174. package/resources/beta/deployments.d.ts +5 -0
  175. package/resources/beta/deployments.d.ts.map +1 -1
  176. package/resources/beta/dreams.d.mts +19 -28
  177. package/resources/beta/dreams.d.mts.map +1 -1
  178. package/resources/beta/dreams.d.ts +19 -28
  179. package/resources/beta/dreams.d.ts.map +1 -1
  180. package/resources/beta/environments/environments.js +157 -154
  181. package/resources/beta/environments/environments.js.map +1 -1
  182. package/resources/beta/environments/environments.mjs +157 -154
  183. package/resources/beta/environments/environments.mjs.map +1 -1
  184. package/resources/beta/environments/work.js +255 -252
  185. package/resources/beta/environments/work.js.map +1 -1
  186. package/resources/beta/environments/work.mjs +255 -252
  187. package/resources/beta/environments/work.mjs.map +1 -1
  188. package/resources/beta/index.d.mts +2 -2
  189. package/resources/beta/index.d.mts.map +1 -1
  190. package/resources/beta/index.d.ts +2 -2
  191. package/resources/beta/index.d.ts.map +1 -1
  192. package/resources/beta/index.js.map +1 -1
  193. package/resources/beta/index.mjs.map +1 -1
  194. package/resources/beta/memory-stores/memories.d.mts +6 -0
  195. package/resources/beta/memory-stores/memories.d.mts.map +1 -1
  196. package/resources/beta/memory-stores/memories.d.ts +6 -0
  197. package/resources/beta/memory-stores/memories.d.ts.map +1 -1
  198. package/resources/beta/memory-stores/memory-stores.js +150 -147
  199. package/resources/beta/memory-stores/memory-stores.js.map +1 -1
  200. package/resources/beta/memory-stores/memory-stores.mjs +150 -147
  201. package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
  202. package/resources/beta/memory-stores/memory-versions.d.mts +7 -0
  203. package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
  204. package/resources/beta/memory-stores/memory-versions.d.ts +7 -0
  205. package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
  206. package/resources/beta/messages/batches.d.mts +12 -1
  207. package/resources/beta/messages/batches.d.mts.map +1 -1
  208. package/resources/beta/messages/batches.d.ts +12 -1
  209. package/resources/beta/messages/batches.d.ts.map +1 -1
  210. package/resources/beta/messages/index.d.mts +1 -1
  211. package/resources/beta/messages/index.d.mts.map +1 -1
  212. package/resources/beta/messages/index.d.ts +1 -1
  213. package/resources/beta/messages/index.d.ts.map +1 -1
  214. package/resources/beta/messages/index.js.map +1 -1
  215. package/resources/beta/messages/index.mjs.map +1 -1
  216. package/resources/beta/messages/messages.d.mts +239 -101
  217. package/resources/beta/messages/messages.d.mts.map +1 -1
  218. package/resources/beta/messages/messages.d.ts +239 -101
  219. package/resources/beta/messages/messages.d.ts.map +1 -1
  220. package/resources/beta/messages/messages.js +113 -110
  221. package/resources/beta/messages/messages.js.map +1 -1
  222. package/resources/beta/messages/messages.mjs +113 -110
  223. package/resources/beta/messages/messages.mjs.map +1 -1
  224. package/resources/beta/models.d.mts +22 -1
  225. package/resources/beta/models.d.mts.map +1 -1
  226. package/resources/beta/models.d.ts +22 -1
  227. package/resources/beta/models.d.ts.map +1 -1
  228. package/resources/beta/organization/federation/federation.js +11 -8
  229. package/resources/beta/organization/federation/federation.js.map +1 -1
  230. package/resources/beta/organization/federation/federation.mjs +11 -8
  231. package/resources/beta/organization/federation/federation.mjs.map +1 -1
  232. package/resources/beta/organization/federation/rules/rules.js +187 -184
  233. package/resources/beta/organization/federation/rules/rules.js.map +1 -1
  234. package/resources/beta/organization/federation/rules/rules.mjs +187 -184
  235. package/resources/beta/organization/federation/rules/rules.mjs.map +1 -1
  236. package/resources/beta/organization/index.d.mts +1 -1
  237. package/resources/beta/organization/index.d.mts.map +1 -1
  238. package/resources/beta/organization/index.d.ts +1 -1
  239. package/resources/beta/organization/index.d.ts.map +1 -1
  240. package/resources/beta/organization/index.js.map +1 -1
  241. package/resources/beta/organization/index.mjs.map +1 -1
  242. package/resources/beta/organization/organization.d.mts +2 -2
  243. package/resources/beta/organization/organization.d.mts.map +1 -1
  244. package/resources/beta/organization/organization.d.ts +2 -2
  245. package/resources/beta/organization/organization.d.ts.map +1 -1
  246. package/resources/beta/organization/organization.js +38 -35
  247. package/resources/beta/organization/organization.js.map +1 -1
  248. package/resources/beta/organization/organization.mjs +38 -35
  249. package/resources/beta/organization/organization.mjs.map +1 -1
  250. package/resources/beta/organization/rate-limits.d.mts +87 -5
  251. package/resources/beta/organization/rate-limits.d.mts.map +1 -1
  252. package/resources/beta/organization/rate-limits.d.ts +87 -5
  253. package/resources/beta/organization/rate-limits.d.ts.map +1 -1
  254. package/resources/beta/organization/service-accounts/service-accounts.js +163 -160
  255. package/resources/beta/organization/service-accounts/service-accounts.js.map +1 -1
  256. package/resources/beta/organization/service-accounts/service-accounts.mjs +163 -160
  257. package/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -1
  258. package/resources/beta/organization/workspaces/rate-limits.d.mts +9 -4
  259. package/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -1
  260. package/resources/beta/organization/workspaces/rate-limits.d.ts +9 -4
  261. package/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -1
  262. package/resources/beta/organization/workspaces/rate-limits.js.map +1 -1
  263. package/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -1
  264. package/resources/beta/organization/workspaces/workspaces.d.mts +3 -3
  265. package/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -1
  266. package/resources/beta/organization/workspaces/workspaces.d.ts +3 -3
  267. package/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -1
  268. package/resources/beta/organization/workspaces/workspaces.js +97 -94
  269. package/resources/beta/organization/workspaces/workspaces.js.map +1 -1
  270. package/resources/beta/organization/workspaces/workspaces.mjs +97 -94
  271. package/resources/beta/organization/workspaces/workspaces.mjs.map +1 -1
  272. package/resources/beta/sessions/events.d.mts +12 -21
  273. package/resources/beta/sessions/events.d.mts.map +1 -1
  274. package/resources/beta/sessions/events.d.ts +12 -21
  275. package/resources/beta/sessions/events.d.ts.map +1 -1
  276. package/resources/beta/sessions/events.js +118 -115
  277. package/resources/beta/sessions/events.js.map +1 -1
  278. package/resources/beta/sessions/events.mjs +118 -115
  279. package/resources/beta/sessions/events.mjs.map +1 -1
  280. package/resources/beta/sessions/resources.d.mts +0 -3
  281. package/resources/beta/sessions/resources.d.mts.map +1 -1
  282. package/resources/beta/sessions/resources.d.ts +0 -3
  283. package/resources/beta/sessions/resources.d.ts.map +1 -1
  284. package/resources/beta/sessions/sessions.d.mts +8 -2
  285. package/resources/beta/sessions/sessions.d.mts.map +1 -1
  286. package/resources/beta/sessions/sessions.d.ts +8 -2
  287. package/resources/beta/sessions/sessions.d.ts.map +1 -1
  288. package/resources/beta/sessions/sessions.js +161 -158
  289. package/resources/beta/sessions/sessions.js.map +1 -1
  290. package/resources/beta/sessions/sessions.mjs +161 -158
  291. package/resources/beta/sessions/sessions.mjs.map +1 -1
  292. package/resources/beta/sessions/threads/threads.js +86 -83
  293. package/resources/beta/sessions/threads/threads.js.map +1 -1
  294. package/resources/beta/sessions/threads/threads.mjs +86 -83
  295. package/resources/beta/sessions/threads/threads.mjs.map +1 -1
  296. package/resources/beta/skills/skills.js +104 -101
  297. package/resources/beta/skills/skills.js.map +1 -1
  298. package/resources/beta/skills/skills.mjs +104 -101
  299. package/resources/beta/skills/skills.mjs.map +1 -1
  300. package/resources/beta/tunnels/certificates.d.mts +2 -2
  301. package/resources/beta/tunnels/certificates.d.ts +2 -2
  302. package/resources/beta/tunnels/tunnels.js +188 -185
  303. package/resources/beta/tunnels/tunnels.js.map +1 -1
  304. package/resources/beta/tunnels/tunnels.mjs +188 -185
  305. package/resources/beta/tunnels/tunnels.mjs.map +1 -1
  306. package/resources/beta/user-profiles.d.mts +45 -0
  307. package/resources/beta/user-profiles.d.mts.map +1 -1
  308. package/resources/beta/user-profiles.d.ts +45 -0
  309. package/resources/beta/user-profiles.d.ts.map +1 -1
  310. package/resources/beta/user-profiles.js +25 -10
  311. package/resources/beta/user-profiles.js.map +1 -1
  312. package/resources/beta/user-profiles.mjs +25 -10
  313. package/resources/beta/user-profiles.mjs.map +1 -1
  314. package/resources/beta/vaults/credentials.d.mts +19 -19
  315. package/resources/beta/vaults/credentials.d.mts.map +1 -1
  316. package/resources/beta/vaults/credentials.d.ts +19 -19
  317. package/resources/beta/vaults/credentials.d.ts.map +1 -1
  318. package/resources/beta/vaults/vaults.js +156 -153
  319. package/resources/beta/vaults/vaults.js.map +1 -1
  320. package/resources/beta/vaults/vaults.mjs +156 -153
  321. package/resources/beta/vaults/vaults.mjs.map +1 -1
  322. package/resources/completions.d.mts +1 -1
  323. package/resources/completions.d.ts +1 -1
  324. package/resources/index.d.mts +1 -1
  325. package/resources/index.d.mts.map +1 -1
  326. package/resources/index.d.ts +1 -1
  327. package/resources/index.d.ts.map +1 -1
  328. package/resources/index.js.map +1 -1
  329. package/resources/index.mjs.map +1 -1
  330. package/resources/messages/index.d.mts +1 -1
  331. package/resources/messages/index.d.mts.map +1 -1
  332. package/resources/messages/index.d.ts +1 -1
  333. package/resources/messages/index.d.ts.map +1 -1
  334. package/resources/messages/index.js.map +1 -1
  335. package/resources/messages/index.mjs.map +1 -1
  336. package/resources/messages/messages.d.mts +100 -63
  337. package/resources/messages/messages.d.mts.map +1 -1
  338. package/resources/messages/messages.d.ts +100 -63
  339. package/resources/messages/messages.d.ts.map +1 -1
  340. package/resources/messages/messages.js +115 -112
  341. package/resources/messages/messages.js.map +1 -1
  342. package/resources/messages/messages.mjs +115 -112
  343. package/resources/messages/messages.mjs.map +1 -1
  344. package/resources/skills/skills.js +88 -85
  345. package/resources/skills/skills.js.map +1 -1
  346. package/resources/skills/skills.mjs +88 -85
  347. package/resources/skills/skills.mjs.map +1 -1
  348. package/resources/top-level.js +0 -1
  349. package/resources/top-level.js.map +1 -1
  350. package/resources/top-level.mjs +0 -1
  351. package/resources/top-level.mjs.map +1 -1
  352. package/src/client.ts +95 -72
  353. package/src/internal/node.browser.ts +7 -7
  354. package/src/internal/parse.ts +8 -11
  355. package/src/internal/shims.ts +4 -3
  356. package/src/internal/utils/bytes.ts +1 -1
  357. package/src/internal/utils/log.ts +16 -2
  358. package/src/lib/BetaMessageStream.ts +7 -5
  359. package/src/lib/beta-parser.ts +1 -3
  360. package/src/lib/internal/stub.ts +2 -0
  361. package/src/lib/internal/types.ts +2 -0
  362. package/src/lib/middleware.ts +6 -1
  363. package/src/lib/parser.ts +1 -3
  364. package/src/lib/tools/BetaToolRunner.ts +157 -24
  365. package/src/lib/transform-json-schema.ts +8 -6
  366. package/src/resources/beta/beta.ts +24 -1
  367. package/src/resources/beta/deployment-runs.ts +4 -0
  368. package/src/resources/beta/deployments.ts +5 -0
  369. package/src/resources/beta/dreams.ts +19 -28
  370. package/src/resources/beta/index.ts +11 -0
  371. package/src/resources/beta/memory-stores/memories.ts +6 -0
  372. package/src/resources/beta/memory-stores/memory-versions.ts +7 -0
  373. package/src/resources/beta/messages/batches.ts +13 -1
  374. package/src/resources/beta/messages/index.ts +10 -0
  375. package/src/resources/beta/messages/messages.ts +289 -100
  376. package/src/resources/beta/models.ts +25 -0
  377. package/src/resources/beta/organization/index.ts +6 -0
  378. package/src/resources/beta/organization/organization.ts +12 -0
  379. package/src/resources/beta/organization/rate-limits.ts +112 -4
  380. package/src/resources/beta/organization/workspaces/rate-limits.ts +16 -4
  381. package/src/resources/beta/organization/workspaces/workspaces.ts +3 -3
  382. package/src/resources/beta/sessions/events.ts +12 -21
  383. package/src/resources/beta/sessions/resources.ts +0 -3
  384. package/src/resources/beta/sessions/sessions.ts +8 -2
  385. package/src/resources/beta/tunnels/certificates.ts +2 -2
  386. package/src/resources/beta/user-profiles.ts +75 -10
  387. package/src/resources/beta/vaults/credentials.ts +19 -19
  388. package/src/resources/completions.ts +1 -1
  389. package/src/resources/index.ts +6 -0
  390. package/src/resources/messages/index.ts +6 -0
  391. package/src/resources/messages/messages.ts +128 -62
  392. package/src/tsconfig.json +13 -3
  393. package/src/version.ts +1 -1
  394. package/tools/agent-toolset/fs-util.js +0 -6
  395. package/tools/agent-toolset/fs-util.js.map +1 -1
  396. package/tools/agent-toolset/fs-util.mjs +0 -6
  397. package/tools/agent-toolset/fs-util.mjs.map +1 -1
  398. package/tools/agent-toolset/memories.js +4 -4
  399. package/tools/agent-toolset/memories.js.map +1 -1
  400. package/tools/agent-toolset/memories.mjs +2 -2
  401. package/tools/agent-toolset/memories.mjs.map +1 -1
  402. package/tools/agent-toolset/node.browser.js +12 -12
  403. package/tools/agent-toolset/node.browser.js.map +1 -1
  404. package/tools/agent-toolset/node.js +142 -139
  405. package/tools/agent-toolset/node.js.map +1 -1
  406. package/tools/agent-toolset/node.mjs +132 -125
  407. package/tools/agent-toolset/node.mjs.map +1 -1
  408. package/tools/agent-toolset/skills.js +5 -5
  409. package/tools/agent-toolset/skills.js.map +1 -1
  410. package/tools/agent-toolset/sync-interval.js +3 -3
  411. package/tools/agent-toolset/sync-interval.js.map +1 -1
  412. package/tools/memory/node.browser.js +2 -2
  413. package/tools/memory/node.browser.js.map +1 -1
  414. package/version.d.mts +1 -1
  415. package/version.d.ts +1 -1
  416. package/version.js +1 -1
  417. package/version.mjs +1 -1
@@ -1,10 +1,11 @@
1
- var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_checkAndCompact, _BetaToolRunner_generateToolResponse;
1
+ var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_turnPaused, _BetaToolRunner_checkAndCompact, _BetaToolRunner_send, _BetaToolRunner_compact, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "../../internal/tslib.mjs";
3
3
  import { ToolError } from "./ToolError.mjs";
4
4
  import { AnthropicError } from "../../core/error.mjs";
5
5
  import { buildHeaders } from "../../internal/headers.mjs";
6
6
  import { promiseWithResolvers } from "../../internal/utils/promise.mjs";
7
7
  import { checkNever } from "../../internal/utils/values.mjs";
8
+ import { loggerFor } from "../../internal/utils/log.mjs";
8
9
  import { DEFAULT_SUMMARY_PROMPT, DEFAULT_TOKEN_THRESHOLD } from "./CompactionControl.mjs";
9
10
  import { collectStainlessHelpers, helperHeader, STAINLESS_HELPER_HEADER, } from "../../internal/stainless-helper-header.mjs";
10
11
  /**
@@ -13,343 +14,453 @@ import { collectStainlessHelpers, helperHeader, STAINLESS_HELPER_HEADER, } from
13
14
  * A ToolRunner is an async iterable that yields either BetaMessage or BetaMessageStream objects
14
15
  * depending on the streaming configuration.
15
16
  */
16
- export class BetaToolRunner {
17
- constructor(client, params, options) {
18
- _BetaToolRunner_instances.add(this);
19
- this.client = client;
20
- /** Whether the async iterator has been consumed */
21
- _BetaToolRunner_consumed.set(this, false);
22
- /** Whether parameters have been mutated since the last API call */
23
- _BetaToolRunner_mutated.set(this, false);
24
- /** Current state containing the request parameters */
25
- _BetaToolRunner_state.set(this, void 0);
26
- _BetaToolRunner_options.set(this, void 0);
27
- /** Promise for the last message received from the assistant */
28
- _BetaToolRunner_message.set(this, void 0);
29
- /** Cached tool response to avoid redundant executions */
30
- _BetaToolRunner_toolResponse.set(this, void 0);
31
- /** Promise resolvers for waiting on completion */
32
- _BetaToolRunner_completion.set(this, void 0);
33
- /** Number of iterations (API requests) made so far */
34
- _BetaToolRunner_iterationCount.set(this, 0);
35
- __classPrivateFieldSet(this, _BetaToolRunner_state, {
36
- params: {
37
- // You can't clone the entire params since there are functions as handlers.
38
- // You also don't really need to clone params.messages, but it probably will prevent a foot gun
39
- // somewhere.
40
- ...params,
41
- messages: structuredClone(params.messages),
42
- },
43
- }, "f");
44
- // structuredClone drops symbol-keyed properties, so collect helper marks
45
- // from the original params here — the create()-side collector won't see
46
- // them on the cloned messages.
47
- const collected = collectStainlessHelpers(params.tools, params.messages);
48
- __classPrivateFieldSet(this, _BetaToolRunner_options, {
49
- ...options,
50
- headers: buildHeaders([
51
- helperHeader('BetaToolRunner'),
52
- collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(', ') } : undefined,
53
- options?.headers,
54
- ]),
55
- }, "f");
56
- __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
57
- if (params.compactionControl?.enabled) {
58
- console.warn('Anthropic: The `compactionControl` parameter is deprecated and will be removed in a future version. ' +
59
- 'Use server-side compaction instead by passing `edits: [{ type: "compact_20260112" }]` in the params passed to `toolRunner()`. ' +
60
- 'See https://platform.claude.com/docs/en/build-with-claude/compaction');
61
- }
62
- }
63
- async *[(_BetaToolRunner_consumed = new WeakMap(), _BetaToolRunner_mutated = new WeakMap(), _BetaToolRunner_state = new WeakMap(), _BetaToolRunner_options = new WeakMap(), _BetaToolRunner_message = new WeakMap(), _BetaToolRunner_toolResponse = new WeakMap(), _BetaToolRunner_completion = new WeakMap(), _BetaToolRunner_iterationCount = new WeakMap(), _BetaToolRunner_instances = new WeakSet(), _BetaToolRunner_checkAndCompact = async function _BetaToolRunner_checkAndCompact() {
64
- const compactionControl = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.compactionControl;
65
- if (!compactionControl || !compactionControl.enabled) {
66
- return false;
67
- }
68
- let tokensUsed = 0;
69
- if (__classPrivateFieldGet(this, _BetaToolRunner_message, "f") !== undefined) {
70
- try {
71
- const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
72
- const totalInputTokens = message.usage.input_tokens +
73
- (message.usage.cache_creation_input_tokens ?? 0) +
74
- (message.usage.cache_read_input_tokens ?? 0);
75
- tokensUsed = totalInputTokens + message.usage.output_tokens;
17
+ export var BetaToolRunner = /* @__PURE__ */ (() => {
18
+ /**
19
+ * A ToolRunner handles the automatic conversation loop between the assistant and tools.
20
+ *
21
+ * A ToolRunner is an async iterable that yields either BetaMessage or BetaMessageStream objects
22
+ * depending on the streaming configuration.
23
+ */
24
+ class BetaToolRunner {
25
+ constructor(client, params, options) {
26
+ _BetaToolRunner_instances.add(this);
27
+ this.client = client;
28
+ /** Whether the async iterator has been consumed */
29
+ _BetaToolRunner_consumed.set(this, false);
30
+ /** Whether parameters have been mutated since the last API call */
31
+ _BetaToolRunner_mutated.set(this, false);
32
+ /** Current state containing the request parameters */
33
+ _BetaToolRunner_state.set(this, void 0);
34
+ _BetaToolRunner_options.set(this, void 0);
35
+ /** Promise for the last message received from the assistant */
36
+ _BetaToolRunner_message.set(this, void 0);
37
+ /** The stream of the request in progress, when streaming */
38
+ _BetaToolRunner_stream.set(this, void 0);
39
+ /** Cached tool response to avoid redundant executions */
40
+ _BetaToolRunner_toolResponse.set(this, void 0);
41
+ /** Promise resolvers for waiting on completion */
42
+ _BetaToolRunner_completion.set(this, void 0);
43
+ /** Number of iterations (API requests) made so far */
44
+ _BetaToolRunner_iterationCount.set(this, 0);
45
+ /** A compaction scheduled with `compactBeforeNextTurn()`, in flight until its response has been handled */
46
+ _BetaToolRunner_compaction.set(this, { status: 'idle' });
47
+ /** Whether the last turn was paused; a scheduled compaction waits for it to be resumed */
48
+ _BetaToolRunner_turnPaused.set(this, false);
49
+ rejectCompactionParam(params);
50
+ __classPrivateFieldSet(this, _BetaToolRunner_state, {
51
+ params: {
52
+ // You can't clone the entire params since there are functions as handlers.
53
+ // You also don't really need to clone params.messages, but it probably will prevent a foot gun
54
+ // somewhere.
55
+ ...params,
56
+ messages: structuredClone(params.messages),
57
+ },
58
+ }, "f");
59
+ // structuredClone drops symbol-keyed properties, so collect helper marks
60
+ // from the original params here the create()-side collector won't see
61
+ // them on the cloned messages.
62
+ const collected = collectStainlessHelpers(params.tools, params.messages);
63
+ __classPrivateFieldSet(this, _BetaToolRunner_options, {
64
+ ...options,
65
+ headers: buildHeaders([
66
+ helperHeader('BetaToolRunner'),
67
+ collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(', ') } : undefined,
68
+ options?.headers,
69
+ ]),
70
+ }, "f");
71
+ __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
72
+ if (params.compactionControl?.enabled) {
73
+ console.warn('Anthropic: The `compactionControl` parameter is deprecated and will be removed in a future version. ' +
74
+ 'Use server-side compaction instead by passing `edits: [{ type: "compact_20260112" }]` in the params passed to `toolRunner()`. ' +
75
+ 'See https://platform.claude.com/docs/en/build-with-claude/compaction');
76
76
  }
77
- catch {
78
- // If we can't get the message, skip compaction
77
+ }
78
+ async *[(_BetaToolRunner_consumed = new WeakMap(), _BetaToolRunner_mutated = new WeakMap(), _BetaToolRunner_state = new WeakMap(), _BetaToolRunner_options = new WeakMap(), _BetaToolRunner_message = new WeakMap(), _BetaToolRunner_stream = new WeakMap(), _BetaToolRunner_toolResponse = new WeakMap(), _BetaToolRunner_completion = new WeakMap(), _BetaToolRunner_iterationCount = new WeakMap(), _BetaToolRunner_compaction = new WeakMap(), _BetaToolRunner_turnPaused = new WeakMap(), _BetaToolRunner_instances = new WeakSet(), _BetaToolRunner_checkAndCompact = async function _BetaToolRunner_checkAndCompact() {
79
+ const compactionControl = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.compactionControl;
80
+ if (!compactionControl || !compactionControl.enabled) {
79
81
  return false;
80
82
  }
81
- }
82
- const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;
83
- if (tokensUsed < threshold) {
84
- return false;
85
- }
86
- const model = compactionControl.model ?? __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.model;
87
- const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
88
- const messages = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages;
89
- if (messages[messages.length - 1].role === 'assistant') {
90
- // Remove tool_use blocks from the last message to avoid 400 error
91
- // (tool_use requires tool_result, which we don't have yet)
92
- const lastMessage = messages[messages.length - 1];
93
- if (Array.isArray(lastMessage.content)) {
94
- const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');
95
- if (nonToolBlocks.length === 0) {
96
- // If all blocks were tool_use, just remove the message entirely
97
- messages.pop();
83
+ let tokensUsed = 0;
84
+ if (__classPrivateFieldGet(this, _BetaToolRunner_message, "f") !== undefined) {
85
+ try {
86
+ const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
87
+ const totalInputTokens = message.usage.input_tokens +
88
+ (message.usage.cache_creation_input_tokens ?? 0) +
89
+ (message.usage.cache_read_input_tokens ?? 0);
90
+ tokensUsed = totalInputTokens + message.usage.output_tokens;
98
91
  }
99
- else {
100
- lastMessage.content = nonToolBlocks;
92
+ catch {
93
+ // If we can't get the message, skip compaction
94
+ return false;
101
95
  }
102
96
  }
103
- }
104
- const response = await this.client.beta.messages.create({
105
- model,
106
- messages: [
107
- ...messages,
108
- {
109
- role: 'user',
110
- content: [
111
- {
112
- type: 'text',
113
- text: summaryPrompt,
114
- },
115
- ],
116
- },
117
- ],
118
- max_tokens: __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_tokens,
119
- }, {
120
- signal: __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal,
121
- headers: buildHeaders([__classPrivateFieldGet(this, _BetaToolRunner_options, "f").headers, helperHeader('compaction')]),
122
- });
123
- if (response.content[0]?.type !== 'text') {
124
- throw new AnthropicError('Expected text response for compaction');
125
- }
126
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [
127
- {
128
- role: 'user',
129
- content: response.content,
130
- },
131
- ];
132
- return true;
133
- }, Symbol.asyncIterator)]() {
134
- var _a;
135
- if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
136
- throw new AnthropicError('Cannot iterate over a consumed stream');
137
- }
138
- __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f");
139
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
140
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
141
- try {
142
- while (true) {
143
- let stream;
144
- try {
145
- if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations &&
146
- __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) {
147
- break;
148
- }
149
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f");
150
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
151
- __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a++, _a), "f");
152
- __classPrivateFieldSet(this, _BetaToolRunner_message, undefined, "f");
153
- const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
154
- if (params.stream) {
155
- stream = this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f"));
156
- __classPrivateFieldSet(this, _BetaToolRunner_message, stream.finalMessage(), "f");
157
- // Make sure that this promise doesn't throw before we get the option to do something about it.
158
- // Error will be caught when we call await this.#message ultimately
159
- __classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { });
160
- yield stream;
97
+ const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;
98
+ if (tokensUsed < threshold) {
99
+ return false;
100
+ }
101
+ const model = compactionControl.model ?? __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.model;
102
+ const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
103
+ const messages = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages;
104
+ if (messages[messages.length - 1].role === 'assistant') {
105
+ // Remove tool_use blocks from the last message to avoid 400 error
106
+ // (tool_use requires tool_result, which we don't have yet)
107
+ const lastMessage = messages[messages.length - 1];
108
+ if (Array.isArray(lastMessage.content)) {
109
+ const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');
110
+ if (nonToolBlocks.length === 0) {
111
+ // If all blocks were tool_use, just remove the message entirely
112
+ messages.pop();
161
113
  }
162
114
  else {
163
- __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
164
- yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
115
+ lastMessage.content = nonToolBlocks;
165
116
  }
166
- const isCompacted = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_checkAndCompact).call(this);
167
- if (!isCompacted) {
168
- if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
169
- const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
170
- const nextStep = determineNextStepFromStopReason(message.stop_reason);
171
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ role: message.role, content: message.content });
172
- // Container-bound server tools reject a follow-up request that omits the container the
173
- // previous turn ran in, so carry its id forward unless the caller pinned one themselves.
174
- const { container } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
175
- if (message.container) {
176
- if (container == null) {
177
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = message.container.id;
117
+ }
118
+ }
119
+ const response = await this.client.beta.messages.create({
120
+ model,
121
+ messages: [
122
+ ...messages,
123
+ {
124
+ role: 'user',
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: summaryPrompt,
129
+ },
130
+ ],
131
+ },
132
+ ],
133
+ max_tokens: __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_tokens,
134
+ }, {
135
+ signal: __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal,
136
+ headers: buildHeaders([__classPrivateFieldGet(this, _BetaToolRunner_options, "f").headers, helperHeader('compaction')]),
137
+ });
138
+ if (response.content[0]?.type !== 'text') {
139
+ throw new AnthropicError('Expected text response for compaction');
140
+ }
141
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [
142
+ {
143
+ role: 'user',
144
+ content: response.content,
145
+ },
146
+ ];
147
+ return true;
148
+ }, Symbol.asyncIterator)]() {
149
+ var _a;
150
+ if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
151
+ throw new AnthropicError('Cannot iterate over a consumed stream');
152
+ }
153
+ __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f");
154
+ __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
155
+ __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
156
+ try {
157
+ while (true) {
158
+ try {
159
+ if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations &&
160
+ __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) {
161
+ break;
162
+ }
163
+ // The API can't compact a conversation that ends mid-turn, so a paused turn is resumed first.
164
+ if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'scheduled' && !__classPrivateFieldGet(this, _BetaToolRunner_turnPaused, "f")) {
165
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config);
166
+ continue;
167
+ }
168
+ __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f");
169
+ __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
170
+ __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a++, _a), "f");
171
+ __classPrivateFieldSet(this, _BetaToolRunner_message, undefined, "f");
172
+ const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
173
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params);
174
+ const isCompacted = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_checkAndCompact).call(this);
175
+ if (!isCompacted) {
176
+ if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
177
+ const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
178
+ const nextStep = determineNextStepFromStopReason(message.stop_reason);
179
+ __classPrivateFieldSet(this, _BetaToolRunner_turnPaused, nextStep === 'resume', "f");
180
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ role: message.role, content: message.content });
181
+ // Container-bound server tools reject a follow-up request that omits the container the
182
+ // previous turn ran in, so carry its id forward unless the caller pinned one themselves.
183
+ const { container } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
184
+ if (message.container) {
185
+ if (container == null) {
186
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = message.container.id;
187
+ }
188
+ else if (typeof container === 'object' && container.id == null) {
189
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id };
190
+ }
178
191
  }
179
- else if (typeof container === 'object' && container.id == null) {
180
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id };
192
+ if (nextStep === 'stop') {
193
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this);
194
+ break;
195
+ }
196
+ if (nextStep === 'resume') {
197
+ continue;
181
198
  }
182
199
  }
183
- if (nextStep === 'stop') {
184
- break;
200
+ else {
201
+ // The caller has taken over the history, so the last response no longer says how it ends.
202
+ __classPrivateFieldSet(this, _BetaToolRunner_turnPaused, false, "f");
185
203
  }
186
- if (nextStep === 'resume') {
187
- continue;
204
+ const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1));
205
+ if (toolMessage) {
206
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage);
207
+ }
208
+ else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
209
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this);
210
+ break;
188
211
  }
189
- }
190
- const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1));
191
- if (toolMessage) {
192
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage);
193
- }
194
- else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
195
- break;
196
212
  }
197
213
  }
198
- }
199
- finally {
200
- if (stream) {
201
- stream.abort();
214
+ finally {
215
+ __classPrivateFieldGet(this, _BetaToolRunner_stream, "f")?.abort();
216
+ __classPrivateFieldSet(this, _BetaToolRunner_stream, undefined, "f");
202
217
  }
203
218
  }
219
+ if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) {
220
+ throw new AnthropicError('ToolRunner concluded without a message from the server');
221
+ }
222
+ __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"));
204
223
  }
205
- if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) {
206
- throw new AnthropicError('ToolRunner concluded without a message from the server');
224
+ catch (error) {
225
+ __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f");
226
+ // Silence unhandled promise errors
227
+ __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => { });
228
+ __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error);
229
+ __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
230
+ throw error;
207
231
  }
208
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"));
209
232
  }
210
- catch (error) {
211
- __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f");
212
- // Silence unhandled promise errors
213
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => { });
214
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error);
215
- __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
216
- throw error;
233
+ setMessagesParams(paramsOrMutator) {
234
+ const params = typeof paramsOrMutator === 'function' ? paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params) : paramsOrMutator;
235
+ rejectCompactionParam(params);
236
+ if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== 'idle') {
237
+ rejectCompactionEdit(params);
238
+ }
239
+ if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'in_flight' && params.messages !== __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages) {
240
+ throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction " +
241
+ 'response is about to replace them. Change them after this iteration instead.');
242
+ }
243
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = params;
244
+ __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
245
+ // Invalidate cached tool response since parameters changed
246
+ __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
217
247
  }
218
- }
219
- setMessagesParams(paramsOrMutator) {
220
- if (typeof paramsOrMutator === 'function') {
221
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
248
+ setRequestOptions(optionsOrMutator) {
249
+ if (typeof optionsOrMutator === 'function') {
250
+ __classPrivateFieldSet(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
251
+ }
252
+ else {
253
+ __classPrivateFieldSet(this, _BetaToolRunner_options, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f");
254
+ }
222
255
  }
223
- else {
224
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = paramsOrMutator;
256
+ /**
257
+ * Get the tool response for the last message from the assistant.
258
+ * Avoids redundant tool executions by caching results.
259
+ *
260
+ * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed
261
+ *
262
+ * @example
263
+ * const toolResponse = await runner.generateToolResponse();
264
+ * if (toolResponse) {
265
+ * console.log('Tool results:', toolResponse.content);
266
+ * }
267
+ */
268
+ async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
269
+ const message = (await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")) ?? this.params.messages.at(-1);
270
+ if (!message) {
271
+ return null;
272
+ }
273
+ return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal);
225
274
  }
226
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
227
- // Invalidate cached tool response since parameters changed
228
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
229
- }
230
- setRequestOptions(optionsOrMutator) {
231
- if (typeof optionsOrMutator === 'function') {
232
- __classPrivateFieldSet(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
275
+ /**
276
+ * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and
277
+ * will wait for an instance to start and go to completion.
278
+ *
279
+ * @returns A promise that resolves to the final BetaMessage when the iterator completes
280
+ *
281
+ * @example
282
+ * // Start consuming the iterator
283
+ * for await (const message of runner) {
284
+ * console.log('Message:', message.content);
285
+ * }
286
+ *
287
+ * // Meanwhile, wait for completion from another part of the code
288
+ * const finalMessage = await runner.done();
289
+ * console.log('Final response:', finalMessage.content);
290
+ */
291
+ done() {
292
+ return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise;
233
293
  }
234
- else {
235
- __classPrivateFieldSet(this, _BetaToolRunner_options, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f");
294
+ /**
295
+ * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream:
296
+ * * If the iterator has not been consumed, consume the entire iterator and return the final message from the
297
+ * assistant.
298
+ * * If the iterator has been consumed, waits for it to complete and returns the final message.
299
+ *
300
+ * @returns A promise that resolves to the final BetaMessage from the conversation
301
+ * @throws {AnthropicError} If no messages were processed during the conversation
302
+ *
303
+ * @example
304
+ * const finalMessage = await runner.runUntilDone();
305
+ * console.log('Final response:', finalMessage.content);
306
+ */
307
+ async runUntilDone() {
308
+ // If not yet consumed, start consuming and wait for completion
309
+ if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
310
+ for await (const _ of this) {
311
+ // Iterator naturally populates this.#message
312
+ }
313
+ }
314
+ // If consumed but not completed, wait for completion
315
+ return this.done();
236
316
  }
237
- }
238
- /**
239
- * Get the tool response for the last message from the assistant.
240
- * Avoids redundant tool executions by caching results.
241
- *
242
- * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed
243
- *
244
- * @example
245
- * const toolResponse = await runner.generateToolResponse();
246
- * if (toolResponse) {
247
- * console.log('Tool results:', toolResponse.content);
248
- * }
249
- */
250
- async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
251
- const message = (await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")) ?? this.params.messages.at(-1);
252
- if (!message) {
253
- return null;
317
+ /**
318
+ * Get the current parameters being used by the ToolRunner.
319
+ *
320
+ * @returns A readonly view of the current ToolRunnerParams
321
+ *
322
+ * @example
323
+ * const currentParams = runner.params;
324
+ * console.log('Current model:', currentParams.model);
325
+ * console.log('Message count:', currentParams.messages.length);
326
+ */
327
+ get params() {
328
+ return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
254
329
  }
255
- return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal);
256
- }
257
- /**
258
- * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and
259
- * will wait for an instance to start and go to completion.
260
- *
261
- * @returns A promise that resolves to the final BetaMessage when the iterator completes
262
- *
263
- * @example
264
- * // Start consuming the iterator
265
- * for await (const message of runner) {
266
- * console.log('Message:', message.content);
267
- * }
268
- *
269
- * // Meanwhile, wait for completion from another part of the code
270
- * const finalMessage = await runner.done();
271
- * console.log('Final response:', finalMessage.content);
272
- */
273
- done() {
274
- return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise;
275
- }
276
- /**
277
- * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream:
278
- * * If the iterator has not been consumed, consume the entire iterator and return the final message from the
279
- * assistant.
280
- * * If the iterator has been consumed, waits for it to complete and returns the final message.
281
- *
282
- * @returns A promise that resolves to the final BetaMessage from the conversation
283
- * @throws {AnthropicError} If no messages were processed during the conversation
284
- *
285
- * @example
286
- * const finalMessage = await runner.runUntilDone();
287
- * console.log('Final response:', finalMessage.content);
288
- */
289
- async runUntilDone() {
290
- // If not yet consumed, start consuming and wait for completion
291
- if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
292
- for await (const _ of this) {
293
- // Iterator naturally populates this.#message
330
+ /**
331
+ * Add one or more messages to the conversation history.
332
+ *
333
+ * @param messages - One or more BetaMessageParam objects to add to the conversation
334
+ *
335
+ * @example
336
+ * runner.pushMessages(
337
+ * { role: 'user', content: 'Also, what about the weather in NYC?' }
338
+ * );
339
+ *
340
+ * @example
341
+ * // Adding multiple messages
342
+ * runner.pushMessages(
343
+ * { role: 'user', content: 'What about NYC?' },
344
+ * { role: 'user', content: 'And Boston?' }
345
+ * );
346
+ */
347
+ pushMessages(...messages) {
348
+ this.setMessagesParams((params) => ({
349
+ ...params,
350
+ messages: [...params.messages, ...messages],
351
+ }));
352
+ }
353
+ /**
354
+ * Schedule a compaction of the conversation. Once the current turn has finished, including any tool
355
+ * calls, the runner requests a summary and replaces the message history with the compaction response,
356
+ * which is yielded like any other message. Requires the `compact-2026-09-04` beta.
357
+ *
358
+ * @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }`
359
+ *
360
+ * @example
361
+ * for await (const message of runner) {
362
+ * if (message.usage.input_tokens > 100_000) {
363
+ * runner.compactBeforeNextTurn();
364
+ * }
365
+ * }
366
+ */
367
+ compactBeforeNextTurn(compaction) {
368
+ if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'in_flight') {
369
+ return;
294
370
  }
371
+ rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
372
+ __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'scheduled', config: compaction ?? { type: 'summarize' } }, "f");
373
+ }
374
+ /**
375
+ * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone()
376
+ * This allows using `await runner` instead of `await runner.runUntilDone()`
377
+ */
378
+ then(onfulfilled, onrejected) {
379
+ return this.runUntilDone().then(onfulfilled, onrejected);
295
380
  }
296
- // If consumed but not completed, wait for completion
297
- return this.done();
298
- }
299
- /**
300
- * Get the current parameters being used by the ToolRunner.
301
- *
302
- * @returns A readonly view of the current ToolRunnerParams
303
- *
304
- * @example
305
- * const currentParams = runner.params;
306
- * console.log('Current model:', currentParams.model);
307
- * console.log('Message count:', currentParams.messages.length);
308
- */
309
- get params() {
310
- return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
311
- }
312
- /**
313
- * Add one or more messages to the conversation history.
314
- *
315
- * @param messages - One or more BetaMessageParam objects to add to the conversation
316
- *
317
- * @example
318
- * runner.pushMessages(
319
- * { role: 'user', content: 'Also, what about the weather in NYC?' }
320
- * );
321
- *
322
- * @example
323
- * // Adding multiple messages
324
- * runner.pushMessages(
325
- * { role: 'user', content: 'What about NYC?' },
326
- * { role: 'user', content: 'And Boston?' }
327
- * );
328
- */
329
- pushMessages(...messages) {
330
- this.setMessagesParams((params) => ({
331
- ...params,
332
- messages: [...params.messages, ...messages],
333
- }));
334
381
  }
382
+ _BetaToolRunner_send =
335
383
  /**
336
- * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone()
337
- * This allows using `await runner` instead of `await runner.runUntilDone()`
384
+ * Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set
385
+ * before the yield, so they are there while the caller handles the item; the loop aborts the stream at the
386
+ * end of the iteration.
338
387
  */
339
- then(onfulfilled, onrejected) {
340
- return this.runUntilDone().then(onfulfilled, onrejected);
388
+ async function* _BetaToolRunner_send(params) {
389
+ if (params.stream) {
390
+ __classPrivateFieldSet(this, _BetaToolRunner_stream, this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
391
+ __classPrivateFieldSet(this, _BetaToolRunner_message, __classPrivateFieldGet(this, _BetaToolRunner_stream, "f").finalMessage(), "f");
392
+ // Make sure that this promise doesn't throw before we get the option to do something about it.
393
+ // Error will be caught when we call await this.#message ultimately
394
+ __classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { });
395
+ yield __classPrivateFieldGet(this, _BetaToolRunner_stream, "f");
396
+ }
397
+ else {
398
+ __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
399
+ yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
400
+ }
401
+ }, _BetaToolRunner_compact = async function* _BetaToolRunner_compact(compaction) {
402
+ rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
403
+ // The API refuses `compaction` alongside `context_management`; later requests keep it.
404
+ const { max_iterations, compactionControl, context_management, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
405
+ __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'in_flight' }, "f");
406
+ __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
407
+ const lastMessage = __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
408
+ try {
409
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction });
410
+ const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
411
+ if (message.content.some((block) => block.type === 'compaction' && block.content)) {
412
+ // The response has to be sent back as it came, first, replacing the messages it summarizes.
413
+ __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }];
414
+ }
415
+ else {
416
+ loggerFor(this.client).warn('Compaction produced no summary; keeping the conversation as it is.');
417
+ // If the run ends here, `done()` resolves to the last real message rather than this response.
418
+ __classPrivateFieldSet(this, _BetaToolRunner_message, lastMessage, "f");
419
+ }
420
+ }
421
+ finally {
422
+ __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'idle' }, "f");
423
+ }
424
+ }, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn() {
425
+ if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== 'scheduled') {
426
+ return;
427
+ }
428
+ const lastContent = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content;
429
+ if (Array.isArray(lastContent) && lastContent.some((block) => block.type === 'tool_use')) {
430
+ // A turn that was cut short can end with tool calls that are never run, and the API can't
431
+ // compact a conversation whose last turn has an unanswered tool call.
432
+ loggerFor(this.client).warn('The pending compaction was skipped because the last turn ended with tool calls that were not run. ' +
433
+ 'Call `compactBeforeNextTurn()` again if you continue the conversation.');
434
+ __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'idle' }, "f");
435
+ return;
436
+ }
437
+ yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config);
438
+ }, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse(lastMessage, signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
439
+ if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== undefined) {
440
+ return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
441
+ }
442
+ __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params, lastMessage, {
443
+ ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"),
444
+ signal,
445
+ }), "f");
446
+ return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
447
+ };
448
+ return BetaToolRunner;
449
+ })();
450
+ function rejectCompactionParam(params) {
451
+ if ('compaction' in params && params.compaction != null) {
452
+ throw new AnthropicError('`compaction` cannot be set on a tool runner: every request in the loop would compact again. ' +
453
+ 'Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead.');
341
454
  }
342
455
  }
343
- _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse(lastMessage, signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
344
- if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== undefined) {
345
- return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
456
+ function rejectCompactionEdit(params) {
457
+ // The compaction request is sent without `context_management`, so the API can't refuse the pair there:
458
+ // it would run and bill the compaction, then refuse the next request.
459
+ if (params.context_management?.edits?.some((edit) => edit.type.startsWith('compact_'))) {
460
+ throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, " +
461
+ "because the API doesn't accept a compaction block together with one. Remove the edit first.");
346
462
  }
347
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params, lastMessage, {
348
- ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"),
349
- signal,
350
- }), "f");
351
- return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
352
- };
463
+ }
353
464
  async function generateToolResponse(params, lastMessage = params.messages.at(-1), requestOptions) {
354
465
  // Only process if the last message is from the assistant and has tool use blocks
355
466
  if (!lastMessage ||