@anthropic-ai/sdk 0.95.2 → 0.97.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 (582) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/api-promise.d.mts +1 -0
  3. package/api-promise.d.mts.map +1 -1
  4. package/api-promise.d.ts +1 -0
  5. package/api-promise.d.ts.map +1 -1
  6. package/api-promise.mjs +1 -0
  7. package/api-promise.mjs.map +1 -1
  8. package/bin/migration-config.json +222 -0
  9. package/client.d.mts.map +1 -1
  10. package/client.d.ts.map +1 -1
  11. package/client.mjs.map +1 -1
  12. package/core/api-promise.d.mts.map +1 -1
  13. package/core/api-promise.d.ts.map +1 -1
  14. package/core/api-promise.mjs.map +1 -1
  15. package/core/credentials.mjs.map +1 -1
  16. package/core/error.d.mts.map +1 -1
  17. package/core/error.d.ts.map +1 -1
  18. package/core/error.mjs.map +1 -1
  19. package/core/pagination.d.mts.map +1 -1
  20. package/core/pagination.d.ts.map +1 -1
  21. package/core/pagination.mjs.map +1 -1
  22. package/core/resource.d.mts.map +1 -1
  23. package/core/resource.d.ts.map +1 -1
  24. package/core/streaming.d.mts.map +1 -1
  25. package/core/streaming.d.ts.map +1 -1
  26. package/core/streaming.js +2 -0
  27. package/core/streaming.js.map +1 -1
  28. package/core/streaming.mjs +2 -0
  29. package/core/streaming.mjs.map +1 -1
  30. package/core/uploads.d.mts.map +1 -1
  31. package/core/uploads.d.ts.map +1 -1
  32. package/core/uploads.mjs.map +1 -1
  33. package/error.d.mts +1 -0
  34. package/error.d.mts.map +1 -1
  35. package/error.d.ts +1 -0
  36. package/error.d.ts.map +1 -1
  37. package/error.mjs +1 -0
  38. package/error.mjs.map +1 -1
  39. package/helpers/beta/environments.d.mts +22 -0
  40. package/helpers/beta/environments.d.mts.map +1 -0
  41. package/helpers/beta/environments.d.ts +22 -0
  42. package/helpers/beta/environments.d.ts.map +1 -0
  43. package/helpers/beta/environments.js +30 -0
  44. package/helpers/beta/environments.js.map +1 -0
  45. package/helpers/beta/environments.mjs +22 -0
  46. package/helpers/beta/environments.mjs.map +1 -0
  47. package/helpers/beta/json-schema.d.mts +6 -0
  48. package/helpers/beta/json-schema.d.mts.map +1 -1
  49. package/helpers/beta/json-schema.d.ts +6 -0
  50. package/helpers/beta/json-schema.d.ts.map +1 -1
  51. package/helpers/beta/json-schema.js +1 -0
  52. package/helpers/beta/json-schema.js.map +1 -1
  53. package/helpers/beta/json-schema.mjs +1 -0
  54. package/helpers/beta/json-schema.mjs.map +1 -1
  55. package/helpers/beta/mcp.d.mts.map +1 -1
  56. package/helpers/beta/mcp.d.ts.map +1 -1
  57. package/helpers/beta/mcp.mjs.map +1 -1
  58. package/helpers/beta/memory.d.mts.map +1 -1
  59. package/helpers/beta/memory.d.ts.map +1 -1
  60. package/helpers/beta/zod.d.mts +11 -5
  61. package/helpers/beta/zod.d.mts.map +1 -1
  62. package/helpers/beta/zod.d.ts +11 -5
  63. package/helpers/beta/zod.d.ts.map +1 -1
  64. package/helpers/beta/zod.js +1 -0
  65. package/helpers/beta/zod.js.map +1 -1
  66. package/helpers/beta/zod.mjs +1 -0
  67. package/helpers/beta/zod.mjs.map +1 -1
  68. package/helpers/index.d.mts.map +1 -1
  69. package/helpers/index.d.ts.map +1 -1
  70. package/helpers/index.mjs.map +1 -1
  71. package/helpers/json-schema.d.mts.map +1 -1
  72. package/helpers/json-schema.d.ts.map +1 -1
  73. package/helpers/json-schema.mjs.map +1 -1
  74. package/helpers/zod.d.mts +2 -2
  75. package/helpers/zod.d.mts.map +1 -1
  76. package/helpers/zod.d.ts +2 -2
  77. package/helpers/zod.d.ts.map +1 -1
  78. package/helpers/zod.js.map +1 -1
  79. package/helpers/zod.mjs.map +1 -1
  80. package/index.d.mts.map +1 -1
  81. package/index.d.ts.map +1 -1
  82. package/index.mjs.map +1 -1
  83. package/internal/decoders/jsonl.d.mts.map +1 -1
  84. package/internal/decoders/jsonl.d.ts.map +1 -1
  85. package/internal/decoders/jsonl.mjs.map +1 -1
  86. package/internal/decoders/line.mjs.map +1 -1
  87. package/internal/detect-platform.mjs.map +1 -1
  88. package/internal/headers.mjs.map +1 -1
  89. package/internal/parse.d.mts.map +1 -1
  90. package/internal/parse.d.ts.map +1 -1
  91. package/internal/parse.mjs.map +1 -1
  92. package/internal/qs/formats.d.mts.map +1 -1
  93. package/internal/qs/formats.d.ts.map +1 -1
  94. package/internal/qs/index.d.mts +2 -2
  95. package/internal/qs/index.d.mts.map +1 -1
  96. package/internal/qs/index.d.ts +2 -2
  97. package/internal/qs/index.d.ts.map +1 -1
  98. package/internal/qs/index.mjs.map +1 -1
  99. package/internal/qs/stringify.d.mts.map +1 -1
  100. package/internal/qs/stringify.d.ts.map +1 -1
  101. package/internal/qs/stringify.mjs.map +1 -1
  102. package/internal/qs/utils.d.mts.map +1 -1
  103. package/internal/qs/utils.d.ts.map +1 -1
  104. package/internal/qs/utils.mjs.map +1 -1
  105. package/internal/request-options.d.mts.map +1 -1
  106. package/internal/request-options.d.ts.map +1 -1
  107. package/internal/shims.d.mts +6 -0
  108. package/internal/shims.d.mts.map +1 -1
  109. package/internal/shims.d.ts +6 -0
  110. package/internal/shims.d.ts.map +1 -1
  111. package/internal/to-file.d.mts.map +1 -1
  112. package/internal/to-file.d.ts.map +1 -1
  113. package/internal/to-file.mjs.map +1 -1
  114. package/internal/types.d.mts +4 -4
  115. package/internal/types.d.mts.map +1 -1
  116. package/internal/types.d.ts +4 -4
  117. package/internal/types.d.ts.map +1 -1
  118. package/internal/uploads.d.mts.map +1 -1
  119. package/internal/uploads.d.ts.map +1 -1
  120. package/internal/uploads.mjs.map +1 -1
  121. package/internal/utils/abort.d.mts +13 -0
  122. package/internal/utils/abort.d.mts.map +1 -0
  123. package/internal/utils/abort.d.ts +13 -0
  124. package/internal/utils/abort.d.ts.map +1 -0
  125. package/internal/utils/abort.js +26 -0
  126. package/internal/utils/abort.js.map +1 -0
  127. package/internal/utils/abort.mjs +23 -0
  128. package/internal/utils/abort.mjs.map +1 -0
  129. package/internal/utils/async-queue.d.mts +31 -0
  130. package/internal/utils/async-queue.d.mts.map +1 -0
  131. package/internal/utils/async-queue.d.ts +31 -0
  132. package/internal/utils/async-queue.d.ts.map +1 -0
  133. package/internal/utils/async-queue.js +75 -0
  134. package/internal/utils/async-queue.js.map +1 -0
  135. package/internal/utils/async-queue.mjs +71 -0
  136. package/internal/utils/async-queue.mjs.map +1 -0
  137. package/internal/utils/backoff.d.mts +23 -0
  138. package/internal/utils/backoff.d.mts.map +1 -0
  139. package/internal/utils/backoff.d.ts +23 -0
  140. package/internal/utils/backoff.d.ts.map +1 -0
  141. package/internal/utils/backoff.js +44 -0
  142. package/internal/utils/backoff.js.map +1 -0
  143. package/internal/utils/backoff.mjs +36 -0
  144. package/internal/utils/backoff.mjs.map +1 -0
  145. package/internal/utils/base64.mjs.map +1 -1
  146. package/internal/utils/log.d.mts.map +1 -1
  147. package/internal/utils/log.d.ts.map +1 -1
  148. package/internal/utils/log.mjs.map +1 -1
  149. package/internal/utils/path.mjs.map +1 -1
  150. package/internal/utils/promise.d.mts +11 -0
  151. package/internal/utils/promise.d.mts.map +1 -0
  152. package/internal/utils/promise.d.ts +11 -0
  153. package/internal/utils/promise.d.ts.map +1 -0
  154. package/internal/utils/promise.js +18 -0
  155. package/internal/utils/promise.js.map +1 -0
  156. package/internal/utils/promise.mjs +15 -0
  157. package/internal/utils/promise.mjs.map +1 -0
  158. package/internal/utils/query.mjs.map +1 -1
  159. package/internal/utils/sleep.d.mts +9 -1
  160. package/internal/utils/sleep.d.mts.map +1 -1
  161. package/internal/utils/sleep.d.ts +9 -1
  162. package/internal/utils/sleep.d.ts.map +1 -1
  163. package/internal/utils/sleep.js +23 -2
  164. package/internal/utils/sleep.js.map +1 -1
  165. package/internal/utils/sleep.mjs +23 -2
  166. package/internal/utils/sleep.mjs.map +1 -1
  167. package/internal/utils/values.mjs.map +1 -1
  168. package/internal/utils.d.mts.map +1 -1
  169. package/internal/utils.d.ts.map +1 -1
  170. package/internal/utils.mjs.map +1 -1
  171. package/lib/BetaMessageStream.d.mts.map +1 -1
  172. package/lib/BetaMessageStream.d.ts.map +1 -1
  173. package/lib/BetaMessageStream.mjs.map +1 -1
  174. package/lib/MessageStream.d.mts.map +1 -1
  175. package/lib/MessageStream.d.ts.map +1 -1
  176. package/lib/MessageStream.mjs.map +1 -1
  177. package/lib/beta-parser.d.mts.map +1 -1
  178. package/lib/beta-parser.d.ts.map +1 -1
  179. package/lib/beta-parser.mjs.map +1 -1
  180. package/lib/credentials/credential-chain.d.mts.map +1 -1
  181. package/lib/credentials/credential-chain.d.ts.map +1 -1
  182. package/lib/credentials/credential-chain.mjs.map +1 -1
  183. package/lib/credentials/identity-token.d.mts.map +1 -1
  184. package/lib/credentials/identity-token.d.ts.map +1 -1
  185. package/lib/credentials/identity-token.mjs.map +1 -1
  186. package/lib/credentials/oidc-federation.d.mts.map +1 -1
  187. package/lib/credentials/oidc-federation.d.ts.map +1 -1
  188. package/lib/credentials/oidc-federation.mjs.map +1 -1
  189. package/lib/credentials/token-cache.d.mts.map +1 -1
  190. package/lib/credentials/token-cache.d.ts.map +1 -1
  191. package/lib/credentials/token-cache.mjs.map +1 -1
  192. package/lib/credentials/types.d.mts.map +1 -1
  193. package/lib/credentials/types.d.ts.map +1 -1
  194. package/lib/credentials/types.mjs.map +1 -1
  195. package/lib/credentials/user-oauth.d.mts.map +1 -1
  196. package/lib/credentials/user-oauth.d.ts.map +1 -1
  197. package/lib/credentials/user-oauth.mjs.map +1 -1
  198. package/lib/credentials.d.mts.map +1 -1
  199. package/lib/credentials.d.ts.map +1 -1
  200. package/lib/credentials.mjs.map +1 -1
  201. package/lib/environments/index.d.mts +4 -0
  202. package/lib/environments/index.d.mts.map +1 -0
  203. package/lib/environments/index.d.ts +4 -0
  204. package/lib/environments/index.d.ts.map +1 -0
  205. package/lib/environments/index.js +18 -0
  206. package/lib/environments/index.js.map +1 -0
  207. package/lib/environments/index.mjs +4 -0
  208. package/lib/environments/index.mjs.map +1 -0
  209. package/lib/environments/poller.d.mts +89 -0
  210. package/lib/environments/poller.d.mts.map +1 -0
  211. package/lib/environments/poller.d.ts +89 -0
  212. package/lib/environments/poller.d.ts.map +1 -0
  213. package/lib/environments/poller.js +181 -0
  214. package/lib/environments/poller.js.map +1 -0
  215. package/lib/environments/poller.mjs +172 -0
  216. package/lib/environments/poller.mjs.map +1 -0
  217. package/lib/environments/worker.d.mts +143 -0
  218. package/lib/environments/worker.d.mts.map +1 -0
  219. package/lib/environments/worker.d.ts +143 -0
  220. package/lib/environments/worker.d.ts.map +1 -0
  221. package/lib/environments/worker.js +265 -0
  222. package/lib/environments/worker.js.map +1 -0
  223. package/lib/environments/worker.mjs +261 -0
  224. package/lib/environments/worker.mjs.map +1 -0
  225. package/lib/helper-client.d.mts +49 -0
  226. package/lib/helper-client.d.mts.map +1 -0
  227. package/lib/helper-client.d.ts +49 -0
  228. package/lib/helper-client.d.ts.map +1 -0
  229. package/lib/helper-client.js +57 -0
  230. package/lib/helper-client.js.map +1 -0
  231. package/lib/helper-client.mjs +54 -0
  232. package/lib/helper-client.mjs.map +1 -0
  233. package/lib/parser.d.mts.map +1 -1
  234. package/lib/parser.d.ts.map +1 -1
  235. package/lib/parser.mjs.map +1 -1
  236. package/lib/stainless-helper-header.d.mts.map +1 -1
  237. package/lib/stainless-helper-header.d.ts.map +1 -1
  238. package/lib/tools/BetaRunnableTool.d.mts +54 -2
  239. package/lib/tools/BetaRunnableTool.d.mts.map +1 -1
  240. package/lib/tools/BetaRunnableTool.d.ts +54 -2
  241. package/lib/tools/BetaRunnableTool.d.ts.map +1 -1
  242. package/lib/tools/BetaRunnableTool.js +37 -0
  243. package/lib/tools/BetaRunnableTool.js.map +1 -1
  244. package/lib/tools/BetaRunnableTool.mjs +34 -1
  245. package/lib/tools/BetaRunnableTool.mjs.map +1 -1
  246. package/lib/tools/BetaToolRunner.d.mts.map +1 -1
  247. package/lib/tools/BetaToolRunner.d.ts.map +1 -1
  248. package/lib/tools/BetaToolRunner.js +4 -14
  249. package/lib/tools/BetaToolRunner.js.map +1 -1
  250. package/lib/tools/BetaToolRunner.mjs +2 -12
  251. package/lib/tools/BetaToolRunner.mjs.map +1 -1
  252. package/lib/tools/CompactionControl.d.mts.map +1 -1
  253. package/lib/tools/CompactionControl.d.ts.map +1 -1
  254. package/lib/tools/SessionToolRunner.d.mts +140 -0
  255. package/lib/tools/SessionToolRunner.d.mts.map +1 -0
  256. package/lib/tools/SessionToolRunner.d.ts +140 -0
  257. package/lib/tools/SessionToolRunner.d.ts.map +1 -0
  258. package/lib/tools/SessionToolRunner.js +459 -0
  259. package/lib/tools/SessionToolRunner.js.map +1 -0
  260. package/lib/tools/SessionToolRunner.mjs +455 -0
  261. package/lib/tools/SessionToolRunner.mjs.map +1 -0
  262. package/lib/tools/ToolError.d.mts.map +1 -1
  263. package/lib/tools/ToolError.d.ts.map +1 -1
  264. package/lib/tools/ToolRunner.d.mts.map +1 -1
  265. package/lib/tools/ToolRunner.d.ts.map +1 -1
  266. package/lib/tools/ToolRunner.mjs.map +1 -1
  267. package/lib/transform-json-schema.mjs.map +1 -1
  268. package/package.json +1 -1
  269. package/pagination.d.mts +1 -0
  270. package/pagination.d.mts.map +1 -1
  271. package/pagination.d.ts +1 -0
  272. package/pagination.d.ts.map +1 -1
  273. package/pagination.mjs +1 -0
  274. package/pagination.mjs.map +1 -1
  275. package/resource.d.mts +1 -0
  276. package/resource.d.mts.map +1 -1
  277. package/resource.d.ts +1 -0
  278. package/resource.d.ts.map +1 -1
  279. package/resource.mjs +1 -0
  280. package/resource.mjs.map +1 -1
  281. package/resources/beta/agents/agents.d.mts +125 -1
  282. package/resources/beta/agents/agents.d.mts.map +1 -1
  283. package/resources/beta/agents/agents.d.ts +125 -1
  284. package/resources/beta/agents/agents.d.ts.map +1 -1
  285. package/resources/beta/agents/agents.js.map +1 -1
  286. package/resources/beta/agents/agents.mjs.map +1 -1
  287. package/resources/beta/agents/index.d.mts +1 -1
  288. package/resources/beta/agents/index.d.mts.map +1 -1
  289. package/resources/beta/agents/index.d.ts +1 -1
  290. package/resources/beta/agents/index.d.ts.map +1 -1
  291. package/resources/beta/agents/index.js.map +1 -1
  292. package/resources/beta/agents/index.mjs.map +1 -1
  293. package/resources/beta/agents/versions.d.mts.map +1 -1
  294. package/resources/beta/agents/versions.d.ts.map +1 -1
  295. package/resources/beta/agents/versions.mjs.map +1 -1
  296. package/resources/beta/agents.d.mts.map +1 -1
  297. package/resources/beta/agents.d.ts.map +1 -1
  298. package/resources/beta/agents.mjs.map +1 -1
  299. package/resources/beta/beta.d.mts +10 -10
  300. package/resources/beta/beta.d.mts.map +1 -1
  301. package/resources/beta/beta.d.ts +10 -10
  302. package/resources/beta/beta.d.ts.map +1 -1
  303. package/resources/beta/beta.js +2 -2
  304. package/resources/beta/beta.js.map +1 -1
  305. package/resources/beta/beta.mjs +2 -2
  306. package/resources/beta/beta.mjs.map +1 -1
  307. package/resources/beta/environments/environments.d.mts +425 -0
  308. package/resources/beta/environments/environments.d.mts.map +1 -0
  309. package/resources/beta/environments/environments.d.ts +425 -0
  310. package/resources/beta/environments/environments.d.ts.map +1 -0
  311. package/resources/beta/environments/environments.js +150 -0
  312. package/resources/beta/environments/environments.js.map +1 -0
  313. package/resources/beta/environments/environments.mjs +145 -0
  314. package/resources/beta/environments/environments.mjs.map +1 -0
  315. package/resources/beta/environments/index.d.mts +3 -0
  316. package/resources/beta/environments/index.d.mts.map +1 -0
  317. package/resources/beta/environments/index.d.ts +3 -0
  318. package/resources/beta/environments/index.d.ts.map +1 -0
  319. package/resources/beta/environments/index.js +9 -0
  320. package/resources/beta/environments/index.js.map +1 -0
  321. package/resources/beta/environments/index.mjs +4 -0
  322. package/resources/beta/environments/index.mjs.map +1 -0
  323. package/resources/beta/environments/work.d.mts +496 -0
  324. package/resources/beta/environments/work.d.mts.map +1 -0
  325. package/resources/beta/environments/work.d.ts +496 -0
  326. package/resources/beta/environments/work.d.ts.map +1 -0
  327. package/resources/beta/environments/work.js +274 -0
  328. package/resources/beta/environments/work.js.map +1 -0
  329. package/resources/beta/environments/work.mjs +268 -0
  330. package/resources/beta/environments/work.mjs.map +1 -0
  331. package/resources/beta/environments.d.mts +1 -388
  332. package/resources/beta/environments.d.mts.map +1 -1
  333. package/resources/beta/environments.d.ts +1 -388
  334. package/resources/beta/environments.d.ts.map +1 -1
  335. package/resources/beta/environments.js +2 -138
  336. package/resources/beta/environments.js.map +1 -1
  337. package/resources/beta/environments.mjs +1 -136
  338. package/resources/beta/environments.mjs.map +1 -1
  339. package/resources/beta/files.d.mts.map +1 -1
  340. package/resources/beta/files.d.ts.map +1 -1
  341. package/resources/beta/files.mjs.map +1 -1
  342. package/resources/beta/index.d.mts +4 -4
  343. package/resources/beta/index.d.mts.map +1 -1
  344. package/resources/beta/index.d.ts +4 -4
  345. package/resources/beta/index.d.ts.map +1 -1
  346. package/resources/beta/index.js +12 -12
  347. package/resources/beta/index.js.map +1 -1
  348. package/resources/beta/index.mjs +1 -1
  349. package/resources/beta/index.mjs.map +1 -1
  350. package/resources/beta/memory-stores/index.d.mts.map +1 -1
  351. package/resources/beta/memory-stores/index.d.ts.map +1 -1
  352. package/resources/beta/memory-stores/index.mjs.map +1 -1
  353. package/resources/beta/memory-stores/memories.d.mts.map +1 -1
  354. package/resources/beta/memory-stores/memories.d.ts.map +1 -1
  355. package/resources/beta/memory-stores/memories.mjs.map +1 -1
  356. package/resources/beta/memory-stores/memory-stores.d.mts.map +1 -1
  357. package/resources/beta/memory-stores/memory-stores.d.ts.map +1 -1
  358. package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
  359. package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
  360. package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
  361. package/resources/beta/memory-stores/memory-versions.mjs.map +1 -1
  362. package/resources/beta/memory-stores.d.mts.map +1 -1
  363. package/resources/beta/memory-stores.d.ts.map +1 -1
  364. package/resources/beta/memory-stores.mjs.map +1 -1
  365. package/resources/beta/messages/batches.d.mts +5 -0
  366. package/resources/beta/messages/batches.d.mts.map +1 -1
  367. package/resources/beta/messages/batches.d.ts +5 -0
  368. package/resources/beta/messages/batches.d.ts.map +1 -1
  369. package/resources/beta/messages/batches.mjs.map +1 -1
  370. package/resources/beta/messages/index.d.mts +1 -1
  371. package/resources/beta/messages/index.d.mts.map +1 -1
  372. package/resources/beta/messages/index.d.ts +1 -1
  373. package/resources/beta/messages/index.d.ts.map +1 -1
  374. package/resources/beta/messages/index.js.map +1 -1
  375. package/resources/beta/messages/index.mjs.map +1 -1
  376. package/resources/beta/messages/messages.d.mts +80 -5
  377. package/resources/beta/messages/messages.d.mts.map +1 -1
  378. package/resources/beta/messages/messages.d.ts +80 -5
  379. package/resources/beta/messages/messages.d.ts.map +1 -1
  380. package/resources/beta/messages/messages.js.map +1 -1
  381. package/resources/beta/messages/messages.mjs.map +1 -1
  382. package/resources/beta/messages.d.mts.map +1 -1
  383. package/resources/beta/messages.d.ts.map +1 -1
  384. package/resources/beta/messages.mjs.map +1 -1
  385. package/resources/beta/models.d.mts.map +1 -1
  386. package/resources/beta/models.d.ts.map +1 -1
  387. package/resources/beta/models.mjs.map +1 -1
  388. package/resources/beta/sessions/events.d.mts +97 -9
  389. package/resources/beta/sessions/events.d.mts.map +1 -1
  390. package/resources/beta/sessions/events.d.ts +97 -9
  391. package/resources/beta/sessions/events.d.ts.map +1 -1
  392. package/resources/beta/sessions/events.js +27 -1
  393. package/resources/beta/sessions/events.js.map +1 -1
  394. package/resources/beta/sessions/events.mjs +25 -0
  395. package/resources/beta/sessions/events.mjs.map +1 -1
  396. package/resources/beta/sessions/index.d.mts +3 -3
  397. package/resources/beta/sessions/index.d.mts.map +1 -1
  398. package/resources/beta/sessions/index.d.ts +3 -3
  399. package/resources/beta/sessions/index.d.ts.map +1 -1
  400. package/resources/beta/sessions/index.js.map +1 -1
  401. package/resources/beta/sessions/index.mjs.map +1 -1
  402. package/resources/beta/sessions/resources.d.mts.map +1 -1
  403. package/resources/beta/sessions/resources.d.ts.map +1 -1
  404. package/resources/beta/sessions/resources.mjs.map +1 -1
  405. package/resources/beta/sessions/sessions.d.mts +101 -9
  406. package/resources/beta/sessions/sessions.d.mts.map +1 -1
  407. package/resources/beta/sessions/sessions.d.ts +101 -9
  408. package/resources/beta/sessions/sessions.d.ts.map +1 -1
  409. package/resources/beta/sessions/sessions.js.map +1 -1
  410. package/resources/beta/sessions/sessions.mjs.map +1 -1
  411. package/resources/beta/sessions/threads/events.d.mts.map +1 -1
  412. package/resources/beta/sessions/threads/events.d.ts.map +1 -1
  413. package/resources/beta/sessions/threads/events.mjs.map +1 -1
  414. package/resources/beta/sessions/threads/index.d.mts +1 -1
  415. package/resources/beta/sessions/threads/index.d.mts.map +1 -1
  416. package/resources/beta/sessions/threads/index.d.ts +1 -1
  417. package/resources/beta/sessions/threads/index.d.ts.map +1 -1
  418. package/resources/beta/sessions/threads/index.js.map +1 -1
  419. package/resources/beta/sessions/threads/index.mjs.map +1 -1
  420. package/resources/beta/sessions/threads/threads.d.mts +3 -23
  421. package/resources/beta/sessions/threads/threads.d.mts.map +1 -1
  422. package/resources/beta/sessions/threads/threads.d.ts +3 -23
  423. package/resources/beta/sessions/threads/threads.d.ts.map +1 -1
  424. package/resources/beta/sessions/threads/threads.js.map +1 -1
  425. package/resources/beta/sessions/threads/threads.mjs.map +1 -1
  426. package/resources/beta/sessions/threads.d.mts.map +1 -1
  427. package/resources/beta/sessions/threads.d.ts.map +1 -1
  428. package/resources/beta/sessions/threads.mjs.map +1 -1
  429. package/resources/beta/sessions.d.mts.map +1 -1
  430. package/resources/beta/sessions.d.ts.map +1 -1
  431. package/resources/beta/sessions.mjs.map +1 -1
  432. package/resources/beta/skills/index.d.mts +1 -1
  433. package/resources/beta/skills/index.d.mts.map +1 -1
  434. package/resources/beta/skills/index.d.ts +1 -1
  435. package/resources/beta/skills/index.d.ts.map +1 -1
  436. package/resources/beta/skills/index.js.map +1 -1
  437. package/resources/beta/skills/index.mjs.map +1 -1
  438. package/resources/beta/skills/skills.d.mts +2 -2
  439. package/resources/beta/skills/skills.d.mts.map +1 -1
  440. package/resources/beta/skills/skills.d.ts +2 -2
  441. package/resources/beta/skills/skills.d.ts.map +1 -1
  442. package/resources/beta/skills/skills.js.map +1 -1
  443. package/resources/beta/skills/skills.mjs.map +1 -1
  444. package/resources/beta/skills/versions.d.mts +28 -1
  445. package/resources/beta/skills/versions.d.mts.map +1 -1
  446. package/resources/beta/skills/versions.d.ts +28 -1
  447. package/resources/beta/skills/versions.d.ts.map +1 -1
  448. package/resources/beta/skills/versions.js +28 -0
  449. package/resources/beta/skills/versions.js.map +1 -1
  450. package/resources/beta/skills/versions.mjs +28 -0
  451. package/resources/beta/skills/versions.mjs.map +1 -1
  452. package/resources/beta/skills.d.mts.map +1 -1
  453. package/resources/beta/skills.d.ts.map +1 -1
  454. package/resources/beta/skills.mjs.map +1 -1
  455. package/resources/beta/user-profiles.d.mts.map +1 -1
  456. package/resources/beta/user-profiles.d.ts.map +1 -1
  457. package/resources/beta/user-profiles.mjs.map +1 -1
  458. package/resources/beta/vaults/credentials.d.mts.map +1 -1
  459. package/resources/beta/vaults/credentials.d.ts.map +1 -1
  460. package/resources/beta/vaults/credentials.mjs.map +1 -1
  461. package/resources/beta/vaults/index.d.mts.map +1 -1
  462. package/resources/beta/vaults/index.d.ts.map +1 -1
  463. package/resources/beta/vaults/index.mjs.map +1 -1
  464. package/resources/beta/vaults/vaults.d.mts.map +1 -1
  465. package/resources/beta/vaults/vaults.d.ts.map +1 -1
  466. package/resources/beta/vaults/vaults.mjs.map +1 -1
  467. package/resources/beta/vaults.d.mts.map +1 -1
  468. package/resources/beta/vaults.d.ts.map +1 -1
  469. package/resources/beta/vaults.mjs.map +1 -1
  470. package/resources/beta/webhooks.d.mts.map +1 -1
  471. package/resources/beta/webhooks.d.ts.map +1 -1
  472. package/resources/beta/webhooks.mjs.map +1 -1
  473. package/resources/beta.d.mts.map +1 -1
  474. package/resources/beta.d.ts.map +1 -1
  475. package/resources/beta.mjs.map +1 -1
  476. package/resources/completions.d.mts.map +1 -1
  477. package/resources/completions.d.ts.map +1 -1
  478. package/resources/completions.mjs.map +1 -1
  479. package/resources/index.d.mts.map +1 -1
  480. package/resources/index.d.ts.map +1 -1
  481. package/resources/index.mjs.map +1 -1
  482. package/resources/messages/batches.d.mts.map +1 -1
  483. package/resources/messages/batches.d.ts.map +1 -1
  484. package/resources/messages/batches.mjs.map +1 -1
  485. package/resources/messages/index.d.mts.map +1 -1
  486. package/resources/messages/index.d.ts.map +1 -1
  487. package/resources/messages/index.mjs.map +1 -1
  488. package/resources/messages/messages.d.mts.map +1 -1
  489. package/resources/messages/messages.d.ts.map +1 -1
  490. package/resources/messages/messages.mjs.map +1 -1
  491. package/resources/messages.d.mts.map +1 -1
  492. package/resources/messages.d.ts.map +1 -1
  493. package/resources/messages.mjs.map +1 -1
  494. package/resources/models.d.mts.map +1 -1
  495. package/resources/models.d.ts.map +1 -1
  496. package/resources/models.mjs.map +1 -1
  497. package/resources.d.mts.map +1 -1
  498. package/resources.d.ts.map +1 -1
  499. package/resources.mjs.map +1 -1
  500. package/src/core/streaming.ts +2 -0
  501. package/src/helpers/beta/environments.ts +33 -0
  502. package/src/helpers/beta/json-schema.ts +7 -0
  503. package/src/helpers/beta/zod.ts +13 -7
  504. package/src/helpers/zod.ts +2 -3
  505. package/src/internal/utils/abort.ts +21 -0
  506. package/src/internal/utils/async-queue.ts +66 -0
  507. package/src/internal/utils/backoff.ts +41 -0
  508. package/src/internal/utils/promise.ts +18 -0
  509. package/src/internal/utils/sleep.ts +25 -2
  510. package/src/lib/environments/index.ts +23 -0
  511. package/src/lib/environments/poller.ts +253 -0
  512. package/src/lib/environments/worker.ts +395 -0
  513. package/src/lib/helper-client.ts +89 -0
  514. package/src/lib/tools/BetaRunnableTool.ts +82 -1
  515. package/src/lib/tools/BetaToolRunner.ts +2 -17
  516. package/src/lib/tools/SessionToolRunner.ts +591 -0
  517. package/src/resources/beta/agents/agents.ts +158 -0
  518. package/src/resources/beta/agents/index.ts +7 -0
  519. package/src/resources/beta/beta.ts +62 -21
  520. package/src/resources/beta/environments/environments.ts +625 -0
  521. package/src/resources/beta/environments/index.ts +42 -0
  522. package/src/resources/beta/environments/work.ts +697 -0
  523. package/src/resources/beta/environments.ts +1 -540
  524. package/src/resources/beta/index.ts +21 -1
  525. package/src/resources/beta/messages/batches.ts +6 -0
  526. package/src/resources/beta/messages/index.ts +8 -0
  527. package/src/resources/beta/messages/messages.ts +109 -5
  528. package/src/resources/beta/sessions/events.ts +153 -7
  529. package/src/resources/beta/sessions/index.ts +7 -1
  530. package/src/resources/beta/sessions/sessions.ts +130 -6
  531. package/src/resources/beta/sessions/threads/index.ts +0 -1
  532. package/src/resources/beta/sessions/threads/threads.ts +4 -37
  533. package/src/resources/beta/skills/index.ts +1 -0
  534. package/src/resources/beta/skills/skills.ts +2 -0
  535. package/src/resources/beta/skills/versions.ts +44 -0
  536. package/src/tools/agent-toolset/fs-util.ts +154 -0
  537. package/src/tools/agent-toolset/node.ts +787 -0
  538. package/src/tools/agent-toolset/skills.ts +256 -0
  539. package/src/version.ts +1 -1
  540. package/streaming.d.mts +1 -0
  541. package/streaming.d.mts.map +1 -1
  542. package/streaming.d.ts +1 -0
  543. package/streaming.d.ts.map +1 -1
  544. package/streaming.mjs +1 -0
  545. package/streaming.mjs.map +1 -1
  546. package/tools/agent-toolset/fs-util.d.mts +49 -0
  547. package/tools/agent-toolset/fs-util.d.mts.map +1 -0
  548. package/tools/agent-toolset/fs-util.d.ts +49 -0
  549. package/tools/agent-toolset/fs-util.d.ts.map +1 -0
  550. package/tools/agent-toolset/fs-util.js +159 -0
  551. package/tools/agent-toolset/fs-util.js.map +1 -0
  552. package/tools/agent-toolset/fs-util.mjs +151 -0
  553. package/tools/agent-toolset/fs-util.mjs.map +1 -0
  554. package/tools/agent-toolset/node.d.mts +139 -0
  555. package/tools/agent-toolset/node.d.mts.map +1 -0
  556. package/tools/agent-toolset/node.d.ts +139 -0
  557. package/tools/agent-toolset/node.d.ts.map +1 -0
  558. package/tools/agent-toolset/node.js +746 -0
  559. package/tools/agent-toolset/node.js.map +1 -0
  560. package/tools/agent-toolset/node.mjs +731 -0
  561. package/tools/agent-toolset/node.mjs.map +1 -0
  562. package/tools/agent-toolset/skills.d.mts +50 -0
  563. package/tools/agent-toolset/skills.d.mts.map +1 -0
  564. package/tools/agent-toolset/skills.d.ts +50 -0
  565. package/tools/agent-toolset/skills.d.ts.map +1 -0
  566. package/tools/agent-toolset/skills.js +249 -0
  567. package/tools/agent-toolset/skills.js.map +1 -0
  568. package/tools/agent-toolset/skills.mjs +243 -0
  569. package/tools/agent-toolset/skills.mjs.map +1 -0
  570. package/tools/memory/node.d.mts.map +1 -1
  571. package/tools/memory/node.d.ts.map +1 -1
  572. package/tools/memory/node.mjs.map +1 -1
  573. package/uploads.d.mts +1 -0
  574. package/uploads.d.mts.map +1 -1
  575. package/uploads.d.ts +1 -0
  576. package/uploads.d.ts.map +1 -1
  577. package/uploads.mjs +1 -0
  578. package/uploads.mjs.map +1 -1
  579. package/version.d.mts +1 -1
  580. package/version.d.ts +1 -1
  581. package/version.js +1 -1
  582. package/version.mjs +1 -1
@@ -0,0 +1,89 @@
1
+ import type { Anthropic } from "../../client.mjs";
2
+ import type { BetaSelfHostedWork } from "../../resources/beta/environments/work.mjs";
3
+ import type { BetaToolRunnerRequestOptions } from "../tools/BetaToolRunner.mjs";
4
+ export { is4xx, isFatal4xx, isStatus, jitter } from "../../internal/utils/backoff.mjs";
5
+ export declare const POLL_BLOCK_MS = 999;
6
+ export interface WorkPollerOptions {
7
+ client: Anthropic;
8
+ environmentId: string;
9
+ /**
10
+ * The environment key — the single credential for the self-hosted runner. It
11
+ * authenticates the work-poll calls here and every per-session call the
12
+ * consumer makes afterwards.
13
+ */
14
+ environmentKey: string;
15
+ workerId?: string;
16
+ /** External abort signal. Aborting it ends the iteration. */
17
+ signal?: AbortSignal;
18
+ /**
19
+ * Whether the poller posts `work.stop` itself after the consumer's loop body
20
+ * returns. Defaults to `true`. Set `false` when the consumer already owns the
21
+ * stop (e.g. {@link EnvironmentWorker} force-stops every item) so the work
22
+ * item is not stopped twice.
23
+ *
24
+ * Orthogonal to {@link WorkPollerOptions.drain}: `autoStop` is a per-item
25
+ * lifecycle flag (does the poller `work.stop` each item), `drain` controls
26
+ * loop termination (does the poller return when the queue is empty). They are
27
+ * not two names for the same thing — `EnvironmentWorker.run` uses
28
+ * `autoStop: false` with `drain` defaulting `false`.
29
+ */
30
+ autoStop?: boolean;
31
+ /**
32
+ * When `true`, the poller returns (ends iteration) as soon as the work queue
33
+ * is empty instead of long-polling forever. Defaults to `false` (long-poll
34
+ * until aborted). Pair with `blockMs: null` for a single non-blocking pass
35
+ * over whatever is already queued.
36
+ */
37
+ drain?: boolean;
38
+ /**
39
+ * Block timeout in milliseconds passed through to `work.poll` — the server
40
+ * long-polls up to this long for an item before returning empty. Defaults to
41
+ * {@link POLL_BLOCK_MS} (the API cap, 999). Pass `null` to omit it entirely
42
+ * for a non-blocking single poll (useful with {@link WorkPollerOptions.drain}).
43
+ */
44
+ blockMs?: number | null;
45
+ /**
46
+ * Reclaim unacknowledged work items older than this many milliseconds, passed
47
+ * through to `work.poll`'s `reclaim_older_than_ms`. Defaults to `undefined`
48
+ * (omitted — the server applies its own default).
49
+ */
50
+ reclaimOlderThanMs?: number | null;
51
+ /**
52
+ * Extra per-request options merged into the poll/ack/stop calls. Custom
53
+ * `headers` (e.g. a proxy's auth/routing headers) are layered on top of the
54
+ * environment-key auth + helper telemetry headers; the poller owns the abort
55
+ * signal, so a `signal` here is ignored.
56
+ */
57
+ requestOptions?: BetaToolRunnerRequestOptions;
58
+ }
59
+ /**
60
+ * Async-iterable that long-polls a self-hosted environment for work, ack's
61
+ * each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
62
+ * the consumer's loop body returns (or when the consumer `break`s).
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * for await (const work of client.beta.environments.work.poller({
67
+ * environmentId,
68
+ * environmentKey,
69
+ * })) {
70
+ * // ...service the work...
71
+ * }
72
+ * ```
73
+ */
74
+ export declare class WorkPoller implements AsyncIterable<BetaSelfHostedWork> {
75
+ #private;
76
+ readonly client: Anthropic;
77
+ readonly environmentId: string;
78
+ readonly environmentKey: string;
79
+ readonly workerId: string;
80
+ constructor(opts: WorkPollerOptions);
81
+ /** Read-only view of this iterator's abort signal. */
82
+ get signal(): AbortSignal;
83
+ /** Abort the iterator. The current `for await` will exit cleanly. */
84
+ abort(): void;
85
+ [Symbol.asyncIterator](): AsyncIterator<BetaSelfHostedWork>;
86
+ }
87
+ /** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
88
+ export declare function backoff(attempt: number): number;
89
+ //# sourceMappingURL=poller.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.d.mts","sourceRoot":"","sources":["../../src/lib/environments/poller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAqB;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,mDAA+C;AAMjF,OAAO,KAAK,EAAE,4BAA4B,EAAE,oCAAgC;AAU5E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,yCAAqC;AAGnF,eAAO,MAAM,aAAa,MAAM,CAAC;AAIjC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,YAAW,aAAa,CAAC,kBAAkB,CAAC;;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAgBd,IAAI,EAAE,iBAAiB;IAoBnC,sDAAsD;IACtD,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAIN,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,kBAAkB,CAAC;CA6FnE;AAED,mEAAmE;AACnE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,89 @@
1
+ import type { Anthropic } from "../../client.js";
2
+ import type { BetaSelfHostedWork } from "../../resources/beta/environments/work.js";
3
+ import type { BetaToolRunnerRequestOptions } from "../tools/BetaToolRunner.js";
4
+ export { is4xx, isFatal4xx, isStatus, jitter } from "../../internal/utils/backoff.js";
5
+ export declare const POLL_BLOCK_MS = 999;
6
+ export interface WorkPollerOptions {
7
+ client: Anthropic;
8
+ environmentId: string;
9
+ /**
10
+ * The environment key — the single credential for the self-hosted runner. It
11
+ * authenticates the work-poll calls here and every per-session call the
12
+ * consumer makes afterwards.
13
+ */
14
+ environmentKey: string;
15
+ workerId?: string;
16
+ /** External abort signal. Aborting it ends the iteration. */
17
+ signal?: AbortSignal;
18
+ /**
19
+ * Whether the poller posts `work.stop` itself after the consumer's loop body
20
+ * returns. Defaults to `true`. Set `false` when the consumer already owns the
21
+ * stop (e.g. {@link EnvironmentWorker} force-stops every item) so the work
22
+ * item is not stopped twice.
23
+ *
24
+ * Orthogonal to {@link WorkPollerOptions.drain}: `autoStop` is a per-item
25
+ * lifecycle flag (does the poller `work.stop` each item), `drain` controls
26
+ * loop termination (does the poller return when the queue is empty). They are
27
+ * not two names for the same thing — `EnvironmentWorker.run` uses
28
+ * `autoStop: false` with `drain` defaulting `false`.
29
+ */
30
+ autoStop?: boolean;
31
+ /**
32
+ * When `true`, the poller returns (ends iteration) as soon as the work queue
33
+ * is empty instead of long-polling forever. Defaults to `false` (long-poll
34
+ * until aborted). Pair with `blockMs: null` for a single non-blocking pass
35
+ * over whatever is already queued.
36
+ */
37
+ drain?: boolean;
38
+ /**
39
+ * Block timeout in milliseconds passed through to `work.poll` — the server
40
+ * long-polls up to this long for an item before returning empty. Defaults to
41
+ * {@link POLL_BLOCK_MS} (the API cap, 999). Pass `null` to omit it entirely
42
+ * for a non-blocking single poll (useful with {@link WorkPollerOptions.drain}).
43
+ */
44
+ blockMs?: number | null;
45
+ /**
46
+ * Reclaim unacknowledged work items older than this many milliseconds, passed
47
+ * through to `work.poll`'s `reclaim_older_than_ms`. Defaults to `undefined`
48
+ * (omitted — the server applies its own default).
49
+ */
50
+ reclaimOlderThanMs?: number | null;
51
+ /**
52
+ * Extra per-request options merged into the poll/ack/stop calls. Custom
53
+ * `headers` (e.g. a proxy's auth/routing headers) are layered on top of the
54
+ * environment-key auth + helper telemetry headers; the poller owns the abort
55
+ * signal, so a `signal` here is ignored.
56
+ */
57
+ requestOptions?: BetaToolRunnerRequestOptions;
58
+ }
59
+ /**
60
+ * Async-iterable that long-polls a self-hosted environment for work, ack's
61
+ * each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
62
+ * the consumer's loop body returns (or when the consumer `break`s).
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * for await (const work of client.beta.environments.work.poller({
67
+ * environmentId,
68
+ * environmentKey,
69
+ * })) {
70
+ * // ...service the work...
71
+ * }
72
+ * ```
73
+ */
74
+ export declare class WorkPoller implements AsyncIterable<BetaSelfHostedWork> {
75
+ #private;
76
+ readonly client: Anthropic;
77
+ readonly environmentId: string;
78
+ readonly environmentKey: string;
79
+ readonly workerId: string;
80
+ constructor(opts: WorkPollerOptions);
81
+ /** Read-only view of this iterator's abort signal. */
82
+ get signal(): AbortSignal;
83
+ /** Abort the iterator. The current `for await` will exit cleanly. */
84
+ abort(): void;
85
+ [Symbol.asyncIterator](): AsyncIterator<BetaSelfHostedWork>;
86
+ }
87
+ /** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
88
+ export declare function backoff(attempt: number): number;
89
+ //# sourceMappingURL=poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/lib/environments/poller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAqB;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,kDAA+C;AAMjF,OAAO,KAAK,EAAE,4BAA4B,EAAE,mCAAgC;AAU5E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,wCAAqC;AAGnF,eAAO,MAAM,aAAa,MAAM,CAAC;AAIjC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,YAAW,aAAa,CAAC,kBAAkB,CAAC;;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAgBd,IAAI,EAAE,iBAAiB;IAoBnC,sDAAsD;IACtD,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAIN,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,kBAAkB,CAAC;CA6FnE;AAED,mEAAmE;AACnE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.WorkPoller = exports.POLL_BLOCK_MS = exports.jitter = exports.isStatus = exports.isFatal4xx = exports.is4xx = void 0;
5
+ exports.backoff = backoff;
6
+ const tslib_1 = require("../../internal/tslib.js");
7
+ const error_1 = require("../../core/error.js");
8
+ const log_1 = require("../../internal/utils/log.js");
9
+ const sleep_1 = require("../../internal/utils/sleep.js");
10
+ const uuid_1 = require("../../internal/utils/uuid.js");
11
+ const abort_1 = require("../../internal/utils/abort.js");
12
+ const headers_1 = require("../../internal/headers.js");
13
+ const backoff_1 = require("../../internal/utils/backoff.js");
14
+ const helper_client_1 = require("../helper-client.js");
15
+ var backoff_2 = require("../../internal/utils/backoff.js");
16
+ Object.defineProperty(exports, "is4xx", { enumerable: true, get: function () { return backoff_2.is4xx; } });
17
+ Object.defineProperty(exports, "isFatal4xx", { enumerable: true, get: function () { return backoff_2.isFatal4xx; } });
18
+ Object.defineProperty(exports, "isStatus", { enumerable: true, get: function () { return backoff_2.isStatus; } });
19
+ Object.defineProperty(exports, "jitter", { enumerable: true, get: function () { return backoff_2.jitter; } });
20
+ // API caps block_ms at 999; rely on client-side jitter between empty polls.
21
+ exports.POLL_BLOCK_MS = 999;
22
+ const POLL_BACKOFF_BASE_MS = 1000;
23
+ const POLL_BACKOFF_CAP_MS = 60000;
24
+ /**
25
+ * Async-iterable that long-polls a self-hosted environment for work, ack's
26
+ * each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
27
+ * the consumer's loop body returns (or when the consumer `break`s).
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * for await (const work of client.beta.environments.work.poller({
32
+ * environmentId,
33
+ * environmentKey,
34
+ * })) {
35
+ * // ...service the work...
36
+ * }
37
+ * ```
38
+ */
39
+ class WorkPoller {
40
+ constructor(opts) {
41
+ // Sub-client scoped to the environment key. Every poll / ack / stop call
42
+ // is routed through this so the parent's `X-Api-Key` never lands on the
43
+ // wire alongside the bearer credential. The helper-telemetry header is
44
+ // attached as a default on this client; per-call plumbing is unnecessary.
45
+ _WorkPoller_runnerClient.set(this, void 0);
46
+ _WorkPoller_consumed.set(this, false);
47
+ _WorkPoller_controller.set(this, void 0);
48
+ _WorkPoller_detachExternal.set(this, void 0);
49
+ _WorkPoller_autoStop.set(this, void 0);
50
+ _WorkPoller_drain.set(this, void 0);
51
+ _WorkPoller_blockMs.set(this, void 0);
52
+ _WorkPoller_reclaimOlderThanMs.set(this, void 0);
53
+ _WorkPoller_requestOpts.set(this, void 0);
54
+ this.client = opts.client;
55
+ this.environmentId = opts.environmentId;
56
+ this.environmentKey = opts.environmentKey;
57
+ this.workerId = opts.workerId ?? defaultWorkerId();
58
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_runnerClient, (0, helper_client_1.copyClientForHelper)(opts.client, {
59
+ authToken: opts.environmentKey,
60
+ helper: 'environments-work-poller',
61
+ }), "f");
62
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f");
63
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_drain, opts.drain ?? false, "f");
64
+ // `undefined` => default to the API cap; an explicit `null` => omit
65
+ // `block_ms` for a non-blocking poll.
66
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_blockMs, opts.blockMs === undefined ? exports.POLL_BLOCK_MS : opts.blockMs, "f");
67
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f");
68
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_requestOpts, opts.requestOptions, "f");
69
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_controller, new AbortController(), "f");
70
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_detachExternal, (0, abort_1.linkAbort)(opts.signal, tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f")), "f");
71
+ }
72
+ /** Read-only view of this iterator's abort signal. */
73
+ get signal() {
74
+ return tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal;
75
+ }
76
+ /** Abort the iterator. The current `for await` will exit cleanly. */
77
+ abort() {
78
+ tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").abort();
79
+ }
80
+ async *[(_WorkPoller_runnerClient = new WeakMap(), _WorkPoller_consumed = new WeakMap(), _WorkPoller_controller = new WeakMap(), _WorkPoller_detachExternal = new WeakMap(), _WorkPoller_autoStop = new WeakMap(), _WorkPoller_drain = new WeakMap(), _WorkPoller_blockMs = new WeakMap(), _WorkPoller_reclaimOlderThanMs = new WeakMap(), _WorkPoller_requestOpts = new WeakMap(), Symbol.asyncIterator)]() {
81
+ if (tslib_1.__classPrivateFieldGet(this, _WorkPoller_consumed, "f")) {
82
+ throw new error_1.AnthropicError('Cannot iterate over a consumed WorkPoller');
83
+ }
84
+ tslib_1.__classPrivateFieldSet(this, _WorkPoller_consumed, true, "f");
85
+ const log = (0, log_1.loggerFor)(this.client);
86
+ log.info('poller starting', {
87
+ component: 'work-poller',
88
+ environment_id: this.environmentId,
89
+ });
90
+ try {
91
+ let attempt = 0;
92
+ while (!tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) {
93
+ let work;
94
+ try {
95
+ work = await tslib_1.__classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, {
96
+ 'Anthropic-Worker-ID': this.workerId,
97
+ ...(tslib_1.__classPrivateFieldGet(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: tslib_1.__classPrivateFieldGet(this, _WorkPoller_blockMs, "f") } : {}),
98
+ ...(tslib_1.__classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ?
99
+ { reclaim_older_than_ms: tslib_1.__classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") }
100
+ : {}),
101
+ }, { headers: (0, headers_1.buildHeaders)([tslib_1.__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal });
102
+ }
103
+ catch (e) {
104
+ if (tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted)
105
+ return;
106
+ // A bad environment key / missing environment never recovers — surface
107
+ // it instead of spinning forever at the backoff cap.
108
+ if ((0, backoff_1.isFatal4xx)(e)) {
109
+ log.error('poll failed permanently, stopping poller', { error: String(e) });
110
+ throw e;
111
+ }
112
+ // Jittered exponential backoff so a fleet of pollers doesn't retry in
113
+ // lockstep after a shared outage.
114
+ const wait = (0, backoff_1.applyJitter)(backoff(attempt));
115
+ log.warn('poll failed, backing off', { error: String(e), backoff_ms: wait });
116
+ attempt++;
117
+ await (0, sleep_1.sleep)(wait, tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal);
118
+ continue;
119
+ }
120
+ attempt = 0;
121
+ if (work == null) {
122
+ // Queue empty: either return now (drain) or wait and poll again.
123
+ if (tslib_1.__classPrivateFieldGet(this, _WorkPoller_drain, "f"))
124
+ return;
125
+ await (0, sleep_1.sleep)((0, backoff_1.jitter)(1000, 3000), tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal);
126
+ continue;
127
+ }
128
+ log.info('claimed work', {
129
+ component: 'work-poller',
130
+ environment_id: this.environmentId,
131
+ work_id: work.id,
132
+ work_type: work.data.type,
133
+ });
134
+ try {
135
+ await tslib_1.__classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: (0, headers_1.buildHeaders)([tslib_1.__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: tslib_1.__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal });
136
+ }
137
+ catch (e) {
138
+ log.error('ack failed', { work_id: work.id, error: String(e) });
139
+ continue;
140
+ }
141
+ try {
142
+ yield work;
143
+ }
144
+ finally {
145
+ // Post-handler stop. Runs whether the consumer body returned
146
+ // normally, threw, or `break`d out of the loop — unless the consumer
147
+ // owns the stop itself (`autoStop: false`).
148
+ if (tslib_1.__classPrivateFieldGet(this, _WorkPoller_autoStop, "f")) {
149
+ try {
150
+ await tslib_1.__classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: (0, headers_1.buildHeaders)([tslib_1.__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]) });
151
+ }
152
+ catch (e) {
153
+ if (!(0, backoff_1.isStatus)(e, 409))
154
+ log.warn('stop failed', { work_id: work.id, error: String(e) });
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ finally {
161
+ // Detach from the external signal so the consumer can drop their
162
+ // signal reference without leaking this iterator instance.
163
+ tslib_1.__classPrivateFieldGet(this, _WorkPoller_detachExternal, "f").call(this);
164
+ }
165
+ }
166
+ }
167
+ exports.WorkPoller = WorkPoller;
168
+ /** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
169
+ function backoff(attempt) {
170
+ return (0, backoff_1.backoff)(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS);
171
+ }
172
+ function defaultWorkerId() {
173
+ // The API documents the worker id as a *unique* identifier for Redis consumer
174
+ // groups, so the fallback must be unique even when several pollers share a
175
+ // host. Prefix with the hostname when one is exposed for readability, but rely
176
+ // on the uuid for uniqueness.
177
+ const env = globalThis.process?.env;
178
+ const host = env?.['HOSTNAME'];
179
+ return host ? `${host}-${(0, uuid_1.uuid4)()}` : (0, uuid_1.uuid4)();
180
+ }
181
+ //# sourceMappingURL=poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/lib/environments/poller.ts"],"names":[],"mappings":";;;;AAgPA,0BAEC;;AAlPD,+CAAkD;AAGlD,qDAAqD;AACrD,yDAAmD;AACnD,uDAAkD;AAClD,yDAAuD;AACvD,uDAAsD;AAEtD,6DAMsC;AACtC,uDAAuD;AAEvD,2DAAmF;AAA1E,gGAAA,KAAK,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,iGAAA,MAAM,OAAA;AAE5C,4EAA4E;AAC/D,QAAA,aAAa,GAAG,GAAG,CAAC;AACjC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,mBAAmB,GAAG,KAAM,CAAC;AAwDnC;;;;;;;;;;;;;;GAcG;AACH,MAAa,UAAU;IAoBrB,YAAY,IAAuB;QAdnC,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,0EAA0E;QACjE,2CAAyB;QAClC,+BAAY,KAAK,EAAC;QACT,yCAA6B;QAC7B,6CAA4B;QAC5B,uCAAmB;QACnB,oCAAgB;QAChB,sCAAwB;QACxB,iDAAmC;QACnC,0CAAuD;QAG9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;QACnD,+BAAA,IAAI,4BAAiB,IAAA,mCAAmB,EAAC,IAAI,CAAC,MAAM,EAAE;YACpD,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,MAAM,EAAE,0BAA0B;SACnC,CAAC,MAAA,CAAC;QACH,+BAAA,IAAI,wBAAa,IAAI,CAAC,QAAQ,IAAI,IAAI,MAAA,CAAC;QACvC,+BAAA,IAAI,qBAAU,IAAI,CAAC,KAAK,IAAI,KAAK,MAAA,CAAC;QAClC,oEAAoE;QACpE,sCAAsC;QACtC,+BAAA,IAAI,uBAAY,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,MAAA,CAAC;QAC1E,+BAAA,IAAI,kCAAuB,IAAI,CAAC,kBAAkB,IAAI,IAAI,MAAA,CAAC;QAC3D,+BAAA,IAAI,2BAAgB,IAAI,CAAC,cAAc,MAAA,CAAC;QACxC,+BAAA,IAAI,0BAAe,IAAI,eAAe,EAAE,MAAA,CAAC;QACzC,+BAAA,IAAI,8BAAmB,IAAA,iBAAS,EAAC,IAAI,CAAC,MAAM,EAAE,+BAAA,IAAI,8BAAY,CAAC,MAAA,CAAC;IAClE,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM;QACR,OAAO,+BAAA,IAAI,8BAAY,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,qEAAqE;IACrE,KAAK;QACH,+BAAA,IAAI,8BAAY,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,CAAC,6WAAC,MAAM,CAAC,aAAa,EAAC;QAC3B,IAAI,+BAAA,IAAI,4BAAU,EAAE,CAAC;YACnB,MAAM,IAAI,sBAAc,CAAC,2CAA2C,CAAC,CAAC;QACxE,CAAC;QACD,+BAAA,IAAI,wBAAa,IAAI,MAAA,CAAC;QACtB,MAAM,GAAG,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,SAAS,EAAE,aAAa;YACxB,cAAc,EAAE,IAAI,CAAC,aAAa;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,+BAAA,IAAI,8BAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,IAA+B,CAAC;gBACpC,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,+BAAA,IAAI,gCAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CACzD,IAAI,CAAC,aAAa,EAClB;wBACE,qBAAqB,EAAE,IAAI,CAAC,QAAQ;wBACpC,GAAG,CAAC,+BAAA,IAAI,2BAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,+BAAA,IAAI,2BAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9D,GAAG,CAAC,+BAAA,IAAI,sCAAoB,KAAK,IAAI,CAAC,CAAC;4BACrC,EAAE,qBAAqB,EAAE,+BAAA,IAAI,sCAAoB,EAAE;4BACrD,CAAC,CAAC,EAAE,CAAC;qBACN,EACD,EAAE,OAAO,EAAE,IAAA,sBAAY,EAAC,CAAC,+BAAA,IAAI,+BAAa,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,+BAAA,IAAI,8BAAY,CAAC,MAAM,EAAE,CACzF,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,+BAAA,IAAI,8BAAY,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAO;oBAC5C,uEAAuE;oBACvE,qDAAqD;oBACrD,IAAI,IAAA,oBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;wBAClB,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC5E,MAAM,CAAC,CAAC;oBACV,CAAC;oBACD,sEAAsE;oBACtE,kCAAkC;oBAClC,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC3C,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7E,OAAO,EAAE,CAAC;oBACV,MAAM,IAAA,aAAK,EAAC,IAAI,EAAE,+BAAA,IAAI,8BAAY,CAAC,MAAM,CAAC,CAAC;oBAC3C,SAAS;gBACX,CAAC;gBACD,OAAO,GAAG,CAAC,CAAC;gBACZ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,iEAAiE;oBACjE,IAAI,+BAAA,IAAI,yBAAO;wBAAE,OAAO;oBACxB,MAAM,IAAA,aAAK,EAAC,IAAA,gBAAM,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,+BAAA,IAAI,8BAAY,CAAC,MAAM,CAAC,CAAC;oBACzD,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;oBACvB,SAAS,EAAE,aAAa;oBACxB,cAAc,EAAE,IAAI,CAAC,aAAa;oBAClC,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;iBAC1B,CAAC,CAAC;gBAEH,IAAI,CAAC;oBACH,MAAM,+BAAA,IAAI,gCAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CACjD,IAAI,CAAC,EAAE,EACP,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EACvC,EAAE,OAAO,EAAE,IAAA,sBAAY,EAAC,CAAC,+BAAA,IAAI,+BAAa,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,+BAAA,IAAI,8BAAY,CAAC,MAAM,EAAE,CACzF,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChE,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC;gBACb,CAAC;wBAAS,CAAC;oBACT,6DAA6D;oBAC7D,qEAAqE;oBACrE,4CAA4C;oBAC5C,IAAI,+BAAA,IAAI,4BAAU,EAAE,CAAC;wBACnB,IAAI,CAAC;4BACH,MAAM,+BAAA,IAAI,gCAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAClD,IAAI,CAAC,EAAE,EACP,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EACvC,EAAE,OAAO,EAAE,IAAA,sBAAY,EAAC,CAAC,+BAAA,IAAI,+BAAa,EAAE,OAAO,CAAC,CAAC,EAAE,CACxD,CAAC;wBACJ,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,IAAI,CAAC,IAAA,kBAAQ,EAAC,CAAC,EAAE,GAAG,CAAC;gCAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,iEAAiE;YACjE,2DAA2D;YAC3D,+BAAA,IAAI,kCAAgB,MAApB,IAAI,CAAkB,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AA/ID,gCA+IC;AAED,mEAAmE;AACnE,SAAgB,OAAO,CAAC,OAAe;IACrC,OAAO,IAAA,iBAAU,EAAC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe;IACtB,8EAA8E;IAC9E,2EAA2E;IAC3E,+EAA+E;IAC/E,8BAA8B;IAC9B,MAAM,GAAG,GAAI,UAAyE,CAAC,OAAO,EAAE,GAAG,CAAC;IACpG,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAA,YAAK,GAAE,EAAE,CAAC,CAAC,CAAC,IAAA,YAAK,GAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,172 @@
1
+ var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "../../internal/tslib.mjs";
3
+ import { AnthropicError } from "../../core/error.mjs";
4
+ import { loggerFor } from "../../internal/utils/log.mjs";
5
+ import { sleep } from "../../internal/utils/sleep.mjs";
6
+ import { uuid4 } from "../../internal/utils/uuid.mjs";
7
+ import { linkAbort } from "../../internal/utils/abort.mjs";
8
+ import { buildHeaders } from "../../internal/headers.mjs";
9
+ import { applyJitter, backoff as expBackoff, isFatal4xx, isStatus, jitter, } from "../../internal/utils/backoff.mjs";
10
+ import { copyClientForHelper } from "../helper-client.mjs";
11
+ export { is4xx, isFatal4xx, isStatus, jitter } from "../../internal/utils/backoff.mjs";
12
+ // API caps block_ms at 999; rely on client-side jitter between empty polls.
13
+ export const POLL_BLOCK_MS = 999;
14
+ const POLL_BACKOFF_BASE_MS = 1000;
15
+ const POLL_BACKOFF_CAP_MS = 60000;
16
+ /**
17
+ * Async-iterable that long-polls a self-hosted environment for work, ack's
18
+ * each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
19
+ * the consumer's loop body returns (or when the consumer `break`s).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * for await (const work of client.beta.environments.work.poller({
24
+ * environmentId,
25
+ * environmentKey,
26
+ * })) {
27
+ * // ...service the work...
28
+ * }
29
+ * ```
30
+ */
31
+ export class WorkPoller {
32
+ constructor(opts) {
33
+ // Sub-client scoped to the environment key. Every poll / ack / stop call
34
+ // is routed through this so the parent's `X-Api-Key` never lands on the
35
+ // wire alongside the bearer credential. The helper-telemetry header is
36
+ // attached as a default on this client; per-call plumbing is unnecessary.
37
+ _WorkPoller_runnerClient.set(this, void 0);
38
+ _WorkPoller_consumed.set(this, false);
39
+ _WorkPoller_controller.set(this, void 0);
40
+ _WorkPoller_detachExternal.set(this, void 0);
41
+ _WorkPoller_autoStop.set(this, void 0);
42
+ _WorkPoller_drain.set(this, void 0);
43
+ _WorkPoller_blockMs.set(this, void 0);
44
+ _WorkPoller_reclaimOlderThanMs.set(this, void 0);
45
+ _WorkPoller_requestOpts.set(this, void 0);
46
+ this.client = opts.client;
47
+ this.environmentId = opts.environmentId;
48
+ this.environmentKey = opts.environmentKey;
49
+ this.workerId = opts.workerId ?? defaultWorkerId();
50
+ __classPrivateFieldSet(this, _WorkPoller_runnerClient, copyClientForHelper(opts.client, {
51
+ authToken: opts.environmentKey,
52
+ helper: 'environments-work-poller',
53
+ }), "f");
54
+ __classPrivateFieldSet(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f");
55
+ __classPrivateFieldSet(this, _WorkPoller_drain, opts.drain ?? false, "f");
56
+ // `undefined` => default to the API cap; an explicit `null` => omit
57
+ // `block_ms` for a non-blocking poll.
58
+ __classPrivateFieldSet(this, _WorkPoller_blockMs, opts.blockMs === undefined ? POLL_BLOCK_MS : opts.blockMs, "f");
59
+ __classPrivateFieldSet(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f");
60
+ __classPrivateFieldSet(this, _WorkPoller_requestOpts, opts.requestOptions, "f");
61
+ __classPrivateFieldSet(this, _WorkPoller_controller, new AbortController(), "f");
62
+ __classPrivateFieldSet(this, _WorkPoller_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet(this, _WorkPoller_controller, "f")), "f");
63
+ }
64
+ /** Read-only view of this iterator's abort signal. */
65
+ get signal() {
66
+ return __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal;
67
+ }
68
+ /** Abort the iterator. The current `for await` will exit cleanly. */
69
+ abort() {
70
+ __classPrivateFieldGet(this, _WorkPoller_controller, "f").abort();
71
+ }
72
+ async *[(_WorkPoller_runnerClient = new WeakMap(), _WorkPoller_consumed = new WeakMap(), _WorkPoller_controller = new WeakMap(), _WorkPoller_detachExternal = new WeakMap(), _WorkPoller_autoStop = new WeakMap(), _WorkPoller_drain = new WeakMap(), _WorkPoller_blockMs = new WeakMap(), _WorkPoller_reclaimOlderThanMs = new WeakMap(), _WorkPoller_requestOpts = new WeakMap(), Symbol.asyncIterator)]() {
73
+ if (__classPrivateFieldGet(this, _WorkPoller_consumed, "f")) {
74
+ throw new AnthropicError('Cannot iterate over a consumed WorkPoller');
75
+ }
76
+ __classPrivateFieldSet(this, _WorkPoller_consumed, true, "f");
77
+ const log = loggerFor(this.client);
78
+ log.info('poller starting', {
79
+ component: 'work-poller',
80
+ environment_id: this.environmentId,
81
+ });
82
+ try {
83
+ let attempt = 0;
84
+ while (!__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) {
85
+ let work;
86
+ try {
87
+ work = await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, {
88
+ 'Anthropic-Worker-ID': this.workerId,
89
+ ...(__classPrivateFieldGet(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: __classPrivateFieldGet(this, _WorkPoller_blockMs, "f") } : {}),
90
+ ...(__classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ?
91
+ { reclaim_older_than_ms: __classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") }
92
+ : {}),
93
+ }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal });
94
+ }
95
+ catch (e) {
96
+ if (__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted)
97
+ return;
98
+ // A bad environment key / missing environment never recovers — surface
99
+ // it instead of spinning forever at the backoff cap.
100
+ if (isFatal4xx(e)) {
101
+ log.error('poll failed permanently, stopping poller', { error: String(e) });
102
+ throw e;
103
+ }
104
+ // Jittered exponential backoff so a fleet of pollers doesn't retry in
105
+ // lockstep after a shared outage.
106
+ const wait = applyJitter(backoff(attempt));
107
+ log.warn('poll failed, backing off', { error: String(e), backoff_ms: wait });
108
+ attempt++;
109
+ await sleep(wait, __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal);
110
+ continue;
111
+ }
112
+ attempt = 0;
113
+ if (work == null) {
114
+ // Queue empty: either return now (drain) or wait and poll again.
115
+ if (__classPrivateFieldGet(this, _WorkPoller_drain, "f"))
116
+ return;
117
+ await sleep(jitter(1000, 3000), __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal);
118
+ continue;
119
+ }
120
+ log.info('claimed work', {
121
+ component: 'work-poller',
122
+ environment_id: this.environmentId,
123
+ work_id: work.id,
124
+ work_type: work.data.type,
125
+ });
126
+ try {
127
+ await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal });
128
+ }
129
+ catch (e) {
130
+ log.error('ack failed', { work_id: work.id, error: String(e) });
131
+ continue;
132
+ }
133
+ try {
134
+ yield work;
135
+ }
136
+ finally {
137
+ // Post-handler stop. Runs whether the consumer body returned
138
+ // normally, threw, or `break`d out of the loop — unless the consumer
139
+ // owns the stop itself (`autoStop: false`).
140
+ if (__classPrivateFieldGet(this, _WorkPoller_autoStop, "f")) {
141
+ try {
142
+ await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]) });
143
+ }
144
+ catch (e) {
145
+ if (!isStatus(e, 409))
146
+ log.warn('stop failed', { work_id: work.id, error: String(e) });
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ finally {
153
+ // Detach from the external signal so the consumer can drop their
154
+ // signal reference without leaking this iterator instance.
155
+ __classPrivateFieldGet(this, _WorkPoller_detachExternal, "f").call(this);
156
+ }
157
+ }
158
+ }
159
+ /** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
160
+ export function backoff(attempt) {
161
+ return expBackoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS);
162
+ }
163
+ function defaultWorkerId() {
164
+ // The API documents the worker id as a *unique* identifier for Redis consumer
165
+ // groups, so the fallback must be unique even when several pollers share a
166
+ // host. Prefix with the hostname when one is exposed for readability, but rely
167
+ // on the uuid for uniqueness.
168
+ const env = globalThis.process?.env;
169
+ const host = env?.['HOSTNAME'];
170
+ return host ? `${host}-${uuid4()}` : uuid4();
171
+ }
172
+ //# sourceMappingURL=poller.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.mjs","sourceRoot":"","sources":["../../src/lib/environments/poller.ts"],"names":[],"mappings":"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"}