@anthropic-ai/sdk 0.125.0 → 0.126.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 (297) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/client.d.mts +2 -2
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +2 -2
  5. package/client.d.ts.map +1 -1
  6. package/client.js +846 -840
  7. package/client.js.map +1 -1
  8. package/client.mjs +846 -834
  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/shim-types.js +0 -6
  50. package/internal/shim-types.js.map +1 -1
  51. package/internal/shim-types.mjs +0 -6
  52. package/internal/shim-types.mjs.map +1 -1
  53. package/internal/shims.js +0 -6
  54. package/internal/shims.js.map +1 -1
  55. package/internal/shims.mjs +0 -6
  56. package/internal/shims.mjs.map +1 -1
  57. package/internal/stainless-helper-header.js +6 -6
  58. package/internal/stainless-helper-header.js.map +1 -1
  59. package/internal/utils/async-queue.js +66 -63
  60. package/internal/utils/async-queue.js.map +1 -1
  61. package/internal/utils/async-queue.mjs +66 -56
  62. package/internal/utils/async-queue.mjs.map +1 -1
  63. package/internal/utils/bytes.d.mts +1 -1
  64. package/internal/utils/bytes.d.mts.map +1 -1
  65. package/internal/utils/bytes.d.ts +1 -1
  66. package/internal/utils/bytes.d.ts.map +1 -1
  67. package/lib/BetaMessageStream.js +593 -590
  68. package/lib/BetaMessageStream.js.map +1 -1
  69. package/lib/BetaMessageStream.mjs +593 -590
  70. package/lib/BetaMessageStream.mjs.map +1 -1
  71. package/lib/MessageStream.js +544 -541
  72. package/lib/MessageStream.js.map +1 -1
  73. package/lib/MessageStream.mjs +544 -541
  74. package/lib/MessageStream.mjs.map +1 -1
  75. package/lib/environments/poller.js +180 -174
  76. package/lib/environments/poller.js.map +1 -1
  77. package/lib/environments/poller.mjs +180 -153
  78. package/lib/environments/poller.mjs.map +1 -1
  79. package/lib/environments/worker.js +375 -369
  80. package/lib/environments/worker.js.map +1 -1
  81. package/lib/environments/worker.mjs +374 -329
  82. package/lib/environments/worker.mjs.map +1 -1
  83. package/lib/tools/BetaToolRunner.js +316 -313
  84. package/lib/tools/BetaToolRunner.js.map +1 -1
  85. package/lib/tools/BetaToolRunner.mjs +315 -306
  86. package/lib/tools/BetaToolRunner.mjs.map +1 -1
  87. package/lib/tools/SessionToolRunner.js +241 -235
  88. package/lib/tools/SessionToolRunner.js.map +1 -1
  89. package/lib/tools/SessionToolRunner.mjs +241 -192
  90. package/lib/tools/SessionToolRunner.mjs.map +1 -1
  91. package/lib/tools/ToolError.js +39 -36
  92. package/lib/tools/ToolError.js.map +1 -1
  93. package/lib/tools/ToolError.mjs +39 -13
  94. package/lib/tools/ToolError.mjs.map +1 -1
  95. package/package.json +3 -3
  96. package/resources/beta/agents/agents.js +135 -132
  97. package/resources/beta/agents/agents.js.map +1 -1
  98. package/resources/beta/agents/agents.mjs +135 -132
  99. package/resources/beta/agents/agents.mjs.map +1 -1
  100. package/resources/beta/beta.d.mts +5 -5
  101. package/resources/beta/beta.d.mts.map +1 -1
  102. package/resources/beta/beta.d.ts +5 -5
  103. package/resources/beta/beta.d.ts.map +1 -1
  104. package/resources/beta/beta.js +39 -36
  105. package/resources/beta/beta.js.map +1 -1
  106. package/resources/beta/beta.mjs +39 -36
  107. package/resources/beta/beta.mjs.map +1 -1
  108. package/resources/beta/dreams.d.mts +2 -28
  109. package/resources/beta/dreams.d.mts.map +1 -1
  110. package/resources/beta/dreams.d.ts +2 -28
  111. package/resources/beta/dreams.d.ts.map +1 -1
  112. package/resources/beta/environments/environments.js +157 -154
  113. package/resources/beta/environments/environments.js.map +1 -1
  114. package/resources/beta/environments/environments.mjs +157 -154
  115. package/resources/beta/environments/environments.mjs.map +1 -1
  116. package/resources/beta/environments/work.js +255 -252
  117. package/resources/beta/environments/work.js.map +1 -1
  118. package/resources/beta/environments/work.mjs +255 -252
  119. package/resources/beta/environments/work.mjs.map +1 -1
  120. package/resources/beta/index.d.mts +2 -2
  121. package/resources/beta/index.d.mts.map +1 -1
  122. package/resources/beta/index.d.ts +2 -2
  123. package/resources/beta/index.d.ts.map +1 -1
  124. package/resources/beta/index.js.map +1 -1
  125. package/resources/beta/index.mjs.map +1 -1
  126. package/resources/beta/memory-stores/memory-stores.js +150 -147
  127. package/resources/beta/memory-stores/memory-stores.js.map +1 -1
  128. package/resources/beta/memory-stores/memory-stores.mjs +150 -147
  129. package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
  130. package/resources/beta/messages/batches.d.mts +12 -1
  131. package/resources/beta/messages/batches.d.mts.map +1 -1
  132. package/resources/beta/messages/batches.d.ts +12 -1
  133. package/resources/beta/messages/batches.d.ts.map +1 -1
  134. package/resources/beta/messages/index.d.mts +1 -1
  135. package/resources/beta/messages/index.d.mts.map +1 -1
  136. package/resources/beta/messages/index.d.ts +1 -1
  137. package/resources/beta/messages/index.d.ts.map +1 -1
  138. package/resources/beta/messages/index.js.map +1 -1
  139. package/resources/beta/messages/index.mjs.map +1 -1
  140. package/resources/beta/messages/messages.d.mts +238 -100
  141. package/resources/beta/messages/messages.d.mts.map +1 -1
  142. package/resources/beta/messages/messages.d.ts +238 -100
  143. package/resources/beta/messages/messages.d.ts.map +1 -1
  144. package/resources/beta/messages/messages.js +113 -110
  145. package/resources/beta/messages/messages.js.map +1 -1
  146. package/resources/beta/messages/messages.mjs +113 -110
  147. package/resources/beta/messages/messages.mjs.map +1 -1
  148. package/resources/beta/models.d.mts +22 -1
  149. package/resources/beta/models.d.mts.map +1 -1
  150. package/resources/beta/models.d.ts +22 -1
  151. package/resources/beta/models.d.ts.map +1 -1
  152. package/resources/beta/organization/federation/federation.js +11 -8
  153. package/resources/beta/organization/federation/federation.js.map +1 -1
  154. package/resources/beta/organization/federation/federation.mjs +11 -8
  155. package/resources/beta/organization/federation/federation.mjs.map +1 -1
  156. package/resources/beta/organization/federation/rules/rules.js +187 -184
  157. package/resources/beta/organization/federation/rules/rules.js.map +1 -1
  158. package/resources/beta/organization/federation/rules/rules.mjs +187 -184
  159. package/resources/beta/organization/federation/rules/rules.mjs.map +1 -1
  160. package/resources/beta/organization/organization.js +38 -35
  161. package/resources/beta/organization/organization.js.map +1 -1
  162. package/resources/beta/organization/organization.mjs +38 -35
  163. package/resources/beta/organization/organization.mjs.map +1 -1
  164. package/resources/beta/organization/service-accounts/service-accounts.js +163 -160
  165. package/resources/beta/organization/service-accounts/service-accounts.js.map +1 -1
  166. package/resources/beta/organization/service-accounts/service-accounts.mjs +163 -160
  167. package/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -1
  168. package/resources/beta/organization/workspaces/workspaces.d.mts +3 -3
  169. package/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -1
  170. package/resources/beta/organization/workspaces/workspaces.d.ts +3 -3
  171. package/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -1
  172. package/resources/beta/organization/workspaces/workspaces.js +97 -94
  173. package/resources/beta/organization/workspaces/workspaces.js.map +1 -1
  174. package/resources/beta/organization/workspaces/workspaces.mjs +97 -94
  175. package/resources/beta/organization/workspaces/workspaces.mjs.map +1 -1
  176. package/resources/beta/sessions/events.d.mts +12 -21
  177. package/resources/beta/sessions/events.d.mts.map +1 -1
  178. package/resources/beta/sessions/events.d.ts +12 -21
  179. package/resources/beta/sessions/events.d.ts.map +1 -1
  180. package/resources/beta/sessions/events.js +118 -115
  181. package/resources/beta/sessions/events.js.map +1 -1
  182. package/resources/beta/sessions/events.mjs +118 -115
  183. package/resources/beta/sessions/events.mjs.map +1 -1
  184. package/resources/beta/sessions/resources.d.mts +0 -3
  185. package/resources/beta/sessions/resources.d.mts.map +1 -1
  186. package/resources/beta/sessions/resources.d.ts +0 -3
  187. package/resources/beta/sessions/resources.d.ts.map +1 -1
  188. package/resources/beta/sessions/sessions.d.mts +2 -2
  189. package/resources/beta/sessions/sessions.d.ts +2 -2
  190. package/resources/beta/sessions/sessions.js +161 -158
  191. package/resources/beta/sessions/sessions.js.map +1 -1
  192. package/resources/beta/sessions/sessions.mjs +161 -158
  193. package/resources/beta/sessions/sessions.mjs.map +1 -1
  194. package/resources/beta/sessions/threads/threads.js +86 -83
  195. package/resources/beta/sessions/threads/threads.js.map +1 -1
  196. package/resources/beta/sessions/threads/threads.mjs +86 -83
  197. package/resources/beta/sessions/threads/threads.mjs.map +1 -1
  198. package/resources/beta/skills/skills.js +104 -101
  199. package/resources/beta/skills/skills.js.map +1 -1
  200. package/resources/beta/skills/skills.mjs +104 -101
  201. package/resources/beta/skills/skills.mjs.map +1 -1
  202. package/resources/beta/tunnels/tunnels.js +188 -185
  203. package/resources/beta/tunnels/tunnels.js.map +1 -1
  204. package/resources/beta/tunnels/tunnels.mjs +188 -185
  205. package/resources/beta/tunnels/tunnels.mjs.map +1 -1
  206. package/resources/beta/user-profiles.d.mts +45 -0
  207. package/resources/beta/user-profiles.d.mts.map +1 -1
  208. package/resources/beta/user-profiles.d.ts +45 -0
  209. package/resources/beta/user-profiles.d.ts.map +1 -1
  210. package/resources/beta/user-profiles.js +25 -10
  211. package/resources/beta/user-profiles.js.map +1 -1
  212. package/resources/beta/user-profiles.mjs +25 -10
  213. package/resources/beta/user-profiles.mjs.map +1 -1
  214. package/resources/beta/vaults/credentials.d.mts +0 -14
  215. package/resources/beta/vaults/credentials.d.mts.map +1 -1
  216. package/resources/beta/vaults/credentials.d.ts +0 -14
  217. package/resources/beta/vaults/credentials.d.ts.map +1 -1
  218. package/resources/beta/vaults/vaults.js +156 -153
  219. package/resources/beta/vaults/vaults.js.map +1 -1
  220. package/resources/beta/vaults/vaults.mjs +156 -153
  221. package/resources/beta/vaults/vaults.mjs.map +1 -1
  222. package/resources/completions.d.mts +1 -1
  223. package/resources/completions.d.ts +1 -1
  224. package/resources/index.d.mts +1 -1
  225. package/resources/index.d.mts.map +1 -1
  226. package/resources/index.d.ts +1 -1
  227. package/resources/index.d.ts.map +1 -1
  228. package/resources/index.js.map +1 -1
  229. package/resources/index.mjs.map +1 -1
  230. package/resources/messages/index.d.mts +1 -1
  231. package/resources/messages/index.d.mts.map +1 -1
  232. package/resources/messages/index.d.ts +1 -1
  233. package/resources/messages/index.d.ts.map +1 -1
  234. package/resources/messages/index.js.map +1 -1
  235. package/resources/messages/index.mjs.map +1 -1
  236. package/resources/messages/messages.d.mts +100 -63
  237. package/resources/messages/messages.d.mts.map +1 -1
  238. package/resources/messages/messages.d.ts +100 -63
  239. package/resources/messages/messages.d.ts.map +1 -1
  240. package/resources/messages/messages.js +115 -112
  241. package/resources/messages/messages.js.map +1 -1
  242. package/resources/messages/messages.mjs +115 -112
  243. package/resources/messages/messages.mjs.map +1 -1
  244. package/resources/skills/skills.js +88 -85
  245. package/resources/skills/skills.js.map +1 -1
  246. package/resources/skills/skills.mjs +88 -85
  247. package/resources/skills/skills.mjs.map +1 -1
  248. package/resources/top-level.js +0 -1
  249. package/resources/top-level.js.map +1 -1
  250. package/resources/top-level.mjs +0 -1
  251. package/resources/top-level.mjs.map +1 -1
  252. package/src/client.ts +13 -1
  253. package/src/internal/node.browser.ts +7 -7
  254. package/src/internal/utils/bytes.ts +1 -1
  255. package/src/resources/beta/beta.ts +24 -1
  256. package/src/resources/beta/dreams.ts +2 -28
  257. package/src/resources/beta/index.ts +11 -0
  258. package/src/resources/beta/messages/batches.ts +13 -1
  259. package/src/resources/beta/messages/index.ts +10 -0
  260. package/src/resources/beta/messages/messages.ts +288 -99
  261. package/src/resources/beta/models.ts +25 -0
  262. package/src/resources/beta/organization/workspaces/workspaces.ts +3 -3
  263. package/src/resources/beta/sessions/events.ts +12 -21
  264. package/src/resources/beta/sessions/resources.ts +0 -3
  265. package/src/resources/beta/sessions/sessions.ts +2 -2
  266. package/src/resources/beta/user-profiles.ts +75 -10
  267. package/src/resources/beta/vaults/credentials.ts +0 -14
  268. package/src/resources/completions.ts +1 -1
  269. package/src/resources/index.ts +6 -0
  270. package/src/resources/messages/index.ts +6 -0
  271. package/src/resources/messages/messages.ts +128 -62
  272. package/src/tsconfig.json +13 -3
  273. package/src/version.ts +1 -1
  274. package/tools/agent-toolset/fs-util.js +0 -6
  275. package/tools/agent-toolset/fs-util.js.map +1 -1
  276. package/tools/agent-toolset/fs-util.mjs +0 -6
  277. package/tools/agent-toolset/fs-util.mjs.map +1 -1
  278. package/tools/agent-toolset/memories.js +4 -4
  279. package/tools/agent-toolset/memories.js.map +1 -1
  280. package/tools/agent-toolset/memories.mjs +2 -2
  281. package/tools/agent-toolset/memories.mjs.map +1 -1
  282. package/tools/agent-toolset/node.browser.js +12 -12
  283. package/tools/agent-toolset/node.browser.js.map +1 -1
  284. package/tools/agent-toolset/node.js +142 -139
  285. package/tools/agent-toolset/node.js.map +1 -1
  286. package/tools/agent-toolset/node.mjs +132 -125
  287. package/tools/agent-toolset/node.mjs.map +1 -1
  288. package/tools/agent-toolset/skills.js +5 -5
  289. package/tools/agent-toolset/skills.js.map +1 -1
  290. package/tools/agent-toolset/sync-interval.js +3 -3
  291. package/tools/agent-toolset/sync-interval.js.map +1 -1
  292. package/tools/memory/node.browser.js +2 -2
  293. package/tools/memory/node.browser.js.map +1 -1
  294. package/version.d.mts +1 -1
  295. package/version.d.ts +1 -1
  296. package/version.js +1 -1
  297. package/version.mjs +1 -1
@@ -13,593 +13,596 @@ const message_stream_utils_1 = require("../internal/message-stream-utils.js");
13
13
  function tracksToolInput(content) {
14
14
  return content.type === 'tool_use' || content.type === 'server_tool_use';
15
15
  }
16
- class MessageStream {
17
- constructor(params, opts) {
18
- _MessageStream_instances.add(this);
19
- this.messages = [];
20
- this.receivedMessages = [];
21
- _MessageStream_currentMessageSnapshot.set(this, void 0);
22
- _MessageStream_params.set(this, null);
23
- this.controller = new AbortController();
24
- _MessageStream_connectedPromise.set(this, void 0);
25
- _MessageStream_resolveConnectedPromise.set(this, () => { });
26
- _MessageStream_rejectConnectedPromise.set(this, () => { });
27
- _MessageStream_endPromise.set(this, void 0);
28
- _MessageStream_resolveEndPromise.set(this, () => { });
29
- _MessageStream_rejectEndPromise.set(this, () => { });
30
- _MessageStream_listeners.set(this, {});
31
- _MessageStream_ended.set(this, false);
32
- _MessageStream_errored.set(this, false);
33
- _MessageStream_aborted.set(this, false);
34
- _MessageStream_catchingPromiseCreated.set(this, false);
35
- _MessageStream_response.set(this, void 0);
36
- _MessageStream_request_id.set(this, void 0);
37
- _MessageStream_workspace_id.set(this, void 0);
38
- _MessageStream_logger.set(this, void 0);
39
- _MessageStream_handleError.set(this, (error) => {
40
- tslib_1.__classPrivateFieldSet(this, _MessageStream_errored, true, "f");
41
- if ((0, errors_1.isAbortError)(error)) {
42
- error = new error_1.APIUserAbortError();
43
- }
44
- if (error instanceof error_1.APIUserAbortError) {
45
- tslib_1.__classPrivateFieldSet(this, _MessageStream_aborted, true, "f");
46
- return this._emit('abort', error);
47
- }
48
- if (error instanceof error_1.AnthropicError) {
49
- return this._emit('error', error);
50
- }
51
- if (error instanceof Error) {
52
- const anthropicError = new error_1.AnthropicError(error.message);
53
- // @ts-ignore
54
- anthropicError.cause = error;
55
- return this._emit('error', anthropicError);
56
- }
57
- return this._emit('error', new error_1.AnthropicError(String(error)));
58
- });
59
- tslib_1.__classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {
60
- tslib_1.__classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f");
61
- tslib_1.__classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f");
62
- }), "f");
63
- tslib_1.__classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {
64
- tslib_1.__classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f");
65
- tslib_1.__classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f");
66
- }), "f");
67
- // Don't let these promises cause unhandled rejection errors.
68
- // we will manually cause an unhandled rejection error later
69
- // if the user hasn't registered any error listener or called
70
- // any promise-returning method.
71
- tslib_1.__classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { });
72
- tslib_1.__classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { });
73
- tslib_1.__classPrivateFieldSet(this, _MessageStream_params, params, "f");
74
- tslib_1.__classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f");
75
- }
76
- get response() {
77
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_response, "f");
78
- }
79
- get request_id() {
80
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_request_id, "f");
81
- }
82
- get workspace_id() {
83
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_workspace_id, "f");
84
- }
85
- /**
86
- * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
87
- * returned vie the `request-id` header which is useful for debugging requests and resporting
88
- * issues to Anthropic.
89
- *
90
- * This is the same as the `APIPromise.withResponse()` method.
91
- *
92
- * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
93
- * as no `Response` is available.
94
- */
95
- async withResponse() {
96
- tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
97
- const response = await tslib_1.__classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
98
- if (!response) {
99
- throw new Error('Could not resolve a `Response` object');
16
+ var MessageStream = /* @__PURE__ */ (() => {
17
+ class MessageStream {
18
+ constructor(params, opts) {
19
+ _MessageStream_instances.add(this);
20
+ this.messages = [];
21
+ this.receivedMessages = [];
22
+ _MessageStream_currentMessageSnapshot.set(this, void 0);
23
+ _MessageStream_params.set(this, null);
24
+ this.controller = new AbortController();
25
+ _MessageStream_connectedPromise.set(this, void 0);
26
+ _MessageStream_resolveConnectedPromise.set(this, () => { });
27
+ _MessageStream_rejectConnectedPromise.set(this, () => { });
28
+ _MessageStream_endPromise.set(this, void 0);
29
+ _MessageStream_resolveEndPromise.set(this, () => { });
30
+ _MessageStream_rejectEndPromise.set(this, () => { });
31
+ _MessageStream_listeners.set(this, {});
32
+ _MessageStream_ended.set(this, false);
33
+ _MessageStream_errored.set(this, false);
34
+ _MessageStream_aborted.set(this, false);
35
+ _MessageStream_catchingPromiseCreated.set(this, false);
36
+ _MessageStream_response.set(this, void 0);
37
+ _MessageStream_request_id.set(this, void 0);
38
+ _MessageStream_workspace_id.set(this, void 0);
39
+ _MessageStream_logger.set(this, void 0);
40
+ _MessageStream_handleError.set(this, (error) => {
41
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_errored, true, "f");
42
+ if ((0, errors_1.isAbortError)(error)) {
43
+ error = new error_1.APIUserAbortError();
44
+ }
45
+ if (error instanceof error_1.APIUserAbortError) {
46
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_aborted, true, "f");
47
+ return this._emit('abort', error);
48
+ }
49
+ if (error instanceof error_1.AnthropicError) {
50
+ return this._emit('error', error);
51
+ }
52
+ if (error instanceof Error) {
53
+ const anthropicError = new error_1.AnthropicError(error.message);
54
+ // @ts-ignore
55
+ anthropicError.cause = error;
56
+ return this._emit('error', anthropicError);
57
+ }
58
+ return this._emit('error', new error_1.AnthropicError(String(error)));
59
+ });
60
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {
61
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f");
62
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f");
63
+ }), "f");
64
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {
65
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f");
66
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f");
67
+ }), "f");
68
+ // Don't let these promises cause unhandled rejection errors.
69
+ // we will manually cause an unhandled rejection error later
70
+ // if the user hasn't registered any error listener or called
71
+ // any promise-returning method.
72
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { });
73
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { });
74
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_params, params, "f");
75
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f");
100
76
  }
101
- return {
102
- data: this,
103
- response,
104
- request_id: response.headers.get('request-id'),
105
- workspace_id: response.headers.get('anthropic-workspace-id'),
106
- };
107
- }
108
- /**
109
- * Intended for use on the frontend, consuming a stream produced with
110
- * `.toReadableStream()` on the backend.
111
- *
112
- * Note that messages sent to the model do not appear in `.on('message')`
113
- * in this context.
114
- */
115
- static fromReadableStream(stream) {
116
- const runner = new MessageStream(null);
117
- runner._run(() => runner._fromReadableStream(stream));
118
- return runner;
119
- }
120
- static createMessage(messages, params, options, { logger } = {}) {
121
- const runner = new MessageStream(params, { logger });
122
- for (const message of params.messages) {
123
- runner._addMessageParam(message);
77
+ get response() {
78
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_response, "f");
124
79
  }
125
- tslib_1.__classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f");
126
- runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [stainless_helper_header_1.STAINLESS_HELPER_METHOD_HEADER]: 'stream' } }));
127
- return runner;
128
- }
129
- _run(executor) {
130
- executor().then(() => {
131
- this._emitFinal();
132
- this._emit('end');
133
- }, tslib_1.__classPrivateFieldGet(this, _MessageStream_handleError, "f"));
134
- }
135
- _addMessageParam(message) {
136
- this.messages.push(message);
137
- }
138
- _addMessage(message, emit = true) {
139
- this.receivedMessages.push(message);
140
- if (emit) {
141
- this._emit('message', message);
80
+ get request_id() {
81
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_request_id, "f");
142
82
  }
143
- }
144
- async _createMessage(messages, params, options) {
145
- const signal = options?.signal;
146
- let abortHandler;
147
- if (signal) {
148
- if (signal.aborted)
149
- this.controller.abort();
150
- abortHandler = this.controller.abort.bind(this.controller);
151
- signal.addEventListener('abort', abortHandler);
83
+ get workspace_id() {
84
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_workspace_id, "f");
152
85
  }
153
- try {
154
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
155
- const { response, data: stream } = await messages
156
- .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
157
- .withResponse();
158
- this._connected(response);
159
- for await (const event of stream) {
160
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
161
- }
162
- if (stream.controller.signal?.aborted) {
163
- throw new error_1.APIUserAbortError();
86
+ /**
87
+ * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
88
+ * returned vie the `request-id` header which is useful for debugging requests and resporting
89
+ * issues to Anthropic.
90
+ *
91
+ * This is the same as the `APIPromise.withResponse()` method.
92
+ *
93
+ * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
94
+ * as no `Response` is available.
95
+ */
96
+ async withResponse() {
97
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
98
+ const response = await tslib_1.__classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
99
+ if (!response) {
100
+ throw new Error('Could not resolve a `Response` object');
164
101
  }
165
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
102
+ return {
103
+ data: this,
104
+ response,
105
+ request_id: response.headers.get('request-id'),
106
+ workspace_id: response.headers.get('anthropic-workspace-id'),
107
+ };
108
+ }
109
+ /**
110
+ * Intended for use on the frontend, consuming a stream produced with
111
+ * `.toReadableStream()` on the backend.
112
+ *
113
+ * Note that messages sent to the model do not appear in `.on('message')`
114
+ * in this context.
115
+ */
116
+ static fromReadableStream(stream) {
117
+ const runner = new MessageStream(null);
118
+ runner._run(() => runner._fromReadableStream(stream));
119
+ return runner;
166
120
  }
167
- finally {
168
- if (signal && abortHandler) {
169
- signal.removeEventListener('abort', abortHandler);
121
+ static createMessage(messages, params, options, { logger } = {}) {
122
+ const runner = new MessageStream(params, { logger });
123
+ for (const message of params.messages) {
124
+ runner._addMessageParam(message);
170
125
  }
126
+ tslib_1.__classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f");
127
+ runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [stainless_helper_header_1.STAINLESS_HELPER_METHOD_HEADER]: 'stream' } }));
128
+ return runner;
171
129
  }
172
- }
173
- _connected(response) {
174
- if (this.ended)
175
- return;
176
- tslib_1.__classPrivateFieldSet(this, _MessageStream_response, response, "f");
177
- tslib_1.__classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f");
178
- tslib_1.__classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get('anthropic-workspace-id'), "f");
179
- tslib_1.__classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
180
- this._emit('connect');
181
- }
182
- get ended() {
183
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_ended, "f");
184
- }
185
- get errored() {
186
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_errored, "f");
187
- }
188
- get aborted() {
189
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_aborted, "f");
190
- }
191
- abort() {
192
- this.controller.abort();
193
- }
194
- /**
195
- * Adds the listener function to the end of the listeners array for the event.
196
- * No checks are made to see if the listener has already been added. Multiple calls passing
197
- * the same combination of event and listener will result in the listener being added, and
198
- * called, multiple times.
199
- * @returns this MessageStream, so that calls can be chained
200
- */
201
- on(event, listener) {
202
- const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
203
- listeners.push({ listener });
204
- return this;
205
- }
206
- /**
207
- * Removes the specified listener from the listener array for the event.
208
- * off() will remove, at most, one instance of a listener from the listener array. If any single
209
- * listener has been added multiple times to the listener array for the specified event, then
210
- * off() must be called multiple times to remove each instance.
211
- * @returns this MessageStream, so that calls can be chained
212
- */
213
- off(event, listener) {
214
- const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
215
- if (!listeners)
216
- return this;
217
- const index = listeners.findIndex((l) => l.listener === listener);
218
- if (index >= 0)
219
- listeners.splice(index, 1);
220
- return this;
221
- }
222
- /**
223
- * Adds a one-time listener function for the event. The next time the event is triggered,
224
- * this listener is removed and then invoked.
225
- * @returns this MessageStream, so that calls can be chained
226
- */
227
- once(event, listener) {
228
- const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
229
- listeners.push({ listener, once: true });
230
- return this;
231
- }
232
- /**
233
- * This is similar to `.once()`, but returns a Promise that resolves the next time
234
- * the event is triggered, instead of calling a listener callback.
235
- * @returns a Promise that resolves the next time given event is triggered,
236
- * or rejects if an error is emitted. (If you request the 'error' event,
237
- * returns a promise that resolves with the error).
238
- *
239
- * Example:
240
- *
241
- * const message = await stream.emitted('message') // rejects if the stream errors
242
- */
243
- emitted(event) {
244
- return new Promise((resolve, reject) => {
245
- tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
246
- if (event !== 'error')
247
- this.once('error', reject);
248
- this.once(event, resolve);
249
- });
250
- }
251
- async done() {
252
- tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
253
- await tslib_1.__classPrivateFieldGet(this, _MessageStream_endPromise, "f");
254
- }
255
- get currentMessage() {
256
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
257
- }
258
- /**
259
- * @returns a promise that resolves with the the final assistant Message response,
260
- * or rejects if an error occurred or the stream ended prematurely without producing a Message.
261
- * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
262
- */
263
- async finalMessage() {
264
- await this.done();
265
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
266
- }
267
- /**
268
- * @returns a promise that resolves with the the final assistant Message's text response, concatenated
269
- * together if there are more than one text blocks.
270
- * Rejects if an error occurred or the stream ended prematurely without producing a Message.
271
- */
272
- async finalText() {
273
- await this.done();
274
- return tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
275
- }
276
- _emit(event, ...args) {
277
- // make sure we don't emit any MessageStreamEvents after end
278
- if (tslib_1.__classPrivateFieldGet(this, _MessageStream_ended, "f"))
279
- return;
280
- if (event === 'end') {
281
- tslib_1.__classPrivateFieldSet(this, _MessageStream_ended, true, "f");
282
- tslib_1.__classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
130
+ _run(executor) {
131
+ executor().then(() => {
132
+ this._emitFinal();
133
+ this._emit('end');
134
+ }, tslib_1.__classPrivateFieldGet(this, _MessageStream_handleError, "f"));
283
135
  }
284
- const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
285
- if (listeners) {
286
- tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
287
- listeners.forEach(({ listener }) => listener(...args));
136
+ _addMessageParam(message) {
137
+ this.messages.push(message);
288
138
  }
289
- if (event === 'abort') {
290
- const error = args[0];
291
- if (!tslib_1.__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
292
- Promise.reject(error);
139
+ _addMessage(message, emit = true) {
140
+ this.receivedMessages.push(message);
141
+ if (emit) {
142
+ this._emit('message', message);
293
143
  }
294
- tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
295
- tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
296
- this._emit('end');
297
- return;
298
144
  }
299
- if (event === 'error') {
300
- // NOTE: _emit('error', error) should only be called from #handleError().
301
- const error = args[0];
302
- if (!tslib_1.__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
303
- // Trigger an unhandled rejection if the user hasn't registered any error handlers.
304
- // If you are seeing stack traces here, make sure to handle errors via either:
305
- // - runner.on('error', () => ...)
306
- // - await runner.done()
307
- // - await runner.final...()
308
- // - etc.
309
- Promise.reject(error);
145
+ async _createMessage(messages, params, options) {
146
+ const signal = options?.signal;
147
+ let abortHandler;
148
+ if (signal) {
149
+ if (signal.aborted)
150
+ this.controller.abort();
151
+ abortHandler = this.controller.abort.bind(this.controller);
152
+ signal.addEventListener('abort', abortHandler);
153
+ }
154
+ try {
155
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
156
+ const { response, data: stream } = await messages
157
+ .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
158
+ .withResponse();
159
+ this._connected(response);
160
+ for await (const event of stream) {
161
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
162
+ }
163
+ if (stream.controller.signal?.aborted) {
164
+ throw new error_1.APIUserAbortError();
165
+ }
166
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
167
+ }
168
+ finally {
169
+ if (signal && abortHandler) {
170
+ signal.removeEventListener('abort', abortHandler);
171
+ }
310
172
  }
311
- tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
312
- tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
313
- this._emit('end');
314
173
  }
315
- }
316
- _emitFinal() {
317
- const finalMessage = this.receivedMessages.at(-1);
318
- if (finalMessage) {
319
- this._emit('finalMessage', tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this));
174
+ _connected(response) {
175
+ if (this.ended)
176
+ return;
177
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_response, response, "f");
178
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f");
179
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get('anthropic-workspace-id'), "f");
180
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
181
+ this._emit('connect');
320
182
  }
321
- }
322
- async _fromReadableStream(readableStream, options) {
323
- const signal = options?.signal;
324
- let abortHandler;
325
- if (signal) {
326
- if (signal.aborted)
327
- this.controller.abort();
328
- abortHandler = this.controller.abort.bind(this.controller);
329
- signal.addEventListener('abort', abortHandler);
183
+ get ended() {
184
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_ended, "f");
330
185
  }
331
- try {
332
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
333
- this._connected(null);
334
- const stream = streaming_1.Stream.fromReadableStream(readableStream, this.controller);
335
- for await (const event of stream) {
336
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
337
- }
338
- if (stream.controller.signal?.aborted) {
339
- throw new error_1.APIUserAbortError();
340
- }
341
- tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
186
+ get errored() {
187
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_errored, "f");
342
188
  }
343
- finally {
344
- if (signal && abortHandler) {
345
- signal.removeEventListener('abort', abortHandler);
346
- }
189
+ get aborted() {
190
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_aborted, "f");
347
191
  }
348
- }
349
- [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_params = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_workspace_id = new WeakMap(), _MessageStream_logger = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() {
350
- if (this.receivedMessages.length === 0) {
351
- throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant');
192
+ abort() {
193
+ this.controller.abort();
352
194
  }
353
- return this.receivedMessages.at(-1);
354
- }, _MessageStream_getFinalText = function _MessageStream_getFinalText() {
355
- if (this.receivedMessages.length === 0) {
356
- throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant');
195
+ /**
196
+ * Adds the listener function to the end of the listeners array for the event.
197
+ * No checks are made to see if the listener has already been added. Multiple calls passing
198
+ * the same combination of event and listener will result in the listener being added, and
199
+ * called, multiple times.
200
+ * @returns this MessageStream, so that calls can be chained
201
+ */
202
+ on(event, listener) {
203
+ const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
204
+ listeners.push({ listener });
205
+ return this;
357
206
  }
358
- const textBlocks = this.receivedMessages
359
- .at(-1)
360
- .content.filter((block) => block.type === 'text')
361
- .map((block) => block.text);
362
- if (textBlocks.length === 0) {
363
- throw new error_1.AnthropicError('stream ended without producing a content block with type=text');
207
+ /**
208
+ * Removes the specified listener from the listener array for the event.
209
+ * off() will remove, at most, one instance of a listener from the listener array. If any single
210
+ * listener has been added multiple times to the listener array for the specified event, then
211
+ * off() must be called multiple times to remove each instance.
212
+ * @returns this MessageStream, so that calls can be chained
213
+ */
214
+ off(event, listener) {
215
+ const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
216
+ if (!listeners)
217
+ return this;
218
+ const index = listeners.findIndex((l) => l.listener === listener);
219
+ if (index >= 0)
220
+ listeners.splice(index, 1);
221
+ return this;
364
222
  }
365
- return textBlocks.join(' ');
366
- }, _MessageStream_beginRequest = function _MessageStream_beginRequest() {
367
- if (this.ended)
368
- return;
369
- tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
370
- }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) {
371
- if (this.ended)
372
- return;
373
- const messageSnapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event);
374
- this._emit('streamEvent', event, messageSnapshot);
375
- switch (event.type) {
376
- case 'content_block_delta': {
377
- const content = messageSnapshot.content.at(-1);
378
- switch (event.delta.type) {
379
- case 'text_delta': {
380
- if (content.type === 'text') {
381
- this._emit('text', event.delta.text, content.text || '');
382
- }
383
- break;
384
- }
385
- case 'citations_delta': {
386
- if (content.type === 'text') {
387
- this._emit('citation', event.delta.citation, content.citations ?? []);
388
- }
389
- break;
390
- }
391
- case 'input_json_delta': {
392
- if (tracksToolInput(content) && tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) {
393
- this._emit('inputJson', event.delta.partial_json, content.input);
394
- }
395
- break;
396
- }
397
- case 'thinking_delta': {
398
- if (content.type === 'thinking') {
399
- this._emit('thinking', event.delta.thinking, content.thinking);
400
- }
401
- break;
402
- }
403
- case 'signature_delta': {
404
- if (content.type === 'thinking') {
405
- this._emit('signature', content.signature);
406
- }
407
- break;
408
- }
409
- default:
410
- (0, values_1.checkNever)(event.delta);
411
- }
412
- break;
413
- }
414
- case 'message_stop': {
415
- this._addMessageParam(messageSnapshot);
416
- this._addMessage((0, parser_1.maybeParseMessage)(messageSnapshot, tslib_1.__classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: tslib_1.__classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
417
- break;
418
- }
419
- case 'content_block_stop': {
420
- this._emit('contentBlock', messageSnapshot.content.at(-1));
421
- break;
422
- }
423
- case 'message_start': {
424
- tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
425
- break;
426
- }
427
- case 'content_block_start':
428
- case 'message_delta':
429
- break;
223
+ /**
224
+ * Adds a one-time listener function for the event. The next time the event is triggered,
225
+ * this listener is removed and then invoked.
226
+ * @returns this MessageStream, so that calls can be chained
227
+ */
228
+ once(event, listener) {
229
+ const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
230
+ listeners.push({ listener, once: true });
231
+ return this;
430
232
  }
431
- }, _MessageStream_endRequest = function _MessageStream_endRequest() {
432
- if (this.ended) {
433
- throw new error_1.AnthropicError(`stream has ended, this shouldn't happen`);
233
+ /**
234
+ * This is similar to `.once()`, but returns a Promise that resolves the next time
235
+ * the event is triggered, instead of calling a listener callback.
236
+ * @returns a Promise that resolves the next time given event is triggered,
237
+ * or rejects if an error is emitted. (If you request the 'error' event,
238
+ * returns a promise that resolves with the error).
239
+ *
240
+ * Example:
241
+ *
242
+ * const message = await stream.emitted('message') // rejects if the stream errors
243
+ */
244
+ emitted(event) {
245
+ return new Promise((resolve, reject) => {
246
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
247
+ if (event !== 'error')
248
+ this.once('error', reject);
249
+ this.once(event, resolve);
250
+ });
434
251
  }
435
- const snapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
436
- if (!snapshot) {
437
- throw new error_1.AnthropicError(`request ended without sending any chunks`);
252
+ async done() {
253
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
254
+ await tslib_1.__classPrivateFieldGet(this, _MessageStream_endPromise, "f");
438
255
  }
439
- tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
440
- return (0, parser_1.maybeParseMessage)(snapshot, tslib_1.__classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: tslib_1.__classPrivateFieldGet(this, _MessageStream_logger, "f") });
441
- }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {
442
- let snapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
443
- if (event.type === 'message_start') {
444
- if (snapshot) {
445
- throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
446
- }
447
- return event.message;
256
+ get currentMessage() {
257
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
448
258
  }
449
- if (!snapshot) {
450
- throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
259
+ /**
260
+ * @returns a promise that resolves with the the final assistant Message response,
261
+ * or rejects if an error occurred or the stream ended prematurely without producing a Message.
262
+ * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
263
+ */
264
+ async finalMessage() {
265
+ await this.done();
266
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
451
267
  }
452
- switch (event.type) {
453
- case 'message_stop':
454
- return snapshot;
455
- case 'message_delta':
456
- snapshot.stop_reason = event.delta.stop_reason;
457
- snapshot.stop_sequence = event.delta.stop_sequence;
458
- snapshot.stop_details = event.delta.stop_details;
459
- snapshot.usage.output_tokens = event.usage.output_tokens;
460
- if (event.delta.container != null) {
461
- snapshot.container = event.delta.container;
462
- }
463
- // The remaining usage counters are cumulative whole-message totals that are
464
- // omitted when they don't apply, so overwrite when present and never add.
465
- if (event.usage.input_tokens != null) {
466
- snapshot.usage.input_tokens = event.usage.input_tokens;
268
+ /**
269
+ * @returns a promise that resolves with the the final assistant Message's text response, concatenated
270
+ * together if there are more than one text blocks.
271
+ * Rejects if an error occurred or the stream ended prematurely without producing a Message.
272
+ */
273
+ async finalText() {
274
+ await this.done();
275
+ return tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
276
+ }
277
+ _emit(event, ...args) {
278
+ // make sure we don't emit any MessageStreamEvents after end
279
+ if (tslib_1.__classPrivateFieldGet(this, _MessageStream_ended, "f"))
280
+ return;
281
+ if (event === 'end') {
282
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_ended, true, "f");
283
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
284
+ }
285
+ const listeners = tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
286
+ if (listeners) {
287
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
288
+ listeners.forEach(({ listener }) => listener(...args));
289
+ }
290
+ if (event === 'abort') {
291
+ const error = args[0];
292
+ if (!tslib_1.__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
293
+ Promise.reject(error);
467
294
  }
468
- if (event.usage.cache_creation_input_tokens != null) {
469
- snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
295
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
296
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
297
+ this._emit('end');
298
+ return;
299
+ }
300
+ if (event === 'error') {
301
+ // NOTE: _emit('error', error) should only be called from #handleError().
302
+ const error = args[0];
303
+ if (!tslib_1.__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
304
+ // Trigger an unhandled rejection if the user hasn't registered any error handlers.
305
+ // If you are seeing stack traces here, make sure to handle errors via either:
306
+ // - runner.on('error', () => ...)
307
+ // - await runner.done()
308
+ // - await runner.final...()
309
+ // - etc.
310
+ Promise.reject(error);
470
311
  }
471
- if (event.usage.cache_read_input_tokens != null) {
472
- snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
312
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
313
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
314
+ this._emit('end');
315
+ }
316
+ }
317
+ _emitFinal() {
318
+ const finalMessage = this.receivedMessages.at(-1);
319
+ if (finalMessage) {
320
+ this._emit('finalMessage', tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this));
321
+ }
322
+ }
323
+ async _fromReadableStream(readableStream, options) {
324
+ const signal = options?.signal;
325
+ let abortHandler;
326
+ if (signal) {
327
+ if (signal.aborted)
328
+ this.controller.abort();
329
+ abortHandler = this.controller.abort.bind(this.controller);
330
+ signal.addEventListener('abort', abortHandler);
331
+ }
332
+ try {
333
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
334
+ this._connected(null);
335
+ const stream = streaming_1.Stream.fromReadableStream(readableStream, this.controller);
336
+ for await (const event of stream) {
337
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
473
338
  }
474
- if (event.usage.server_tool_use != null) {
475
- snapshot.usage.server_tool_use = event.usage.server_tool_use;
339
+ if (stream.controller.signal?.aborted) {
340
+ throw new error_1.APIUserAbortError();
476
341
  }
477
- if (event.usage.output_tokens_details != null) {
478
- snapshot.usage.output_tokens_details = event.usage.output_tokens_details;
342
+ tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
343
+ }
344
+ finally {
345
+ if (signal && abortHandler) {
346
+ signal.removeEventListener('abort', abortHandler);
479
347
  }
480
- return snapshot;
481
- case 'content_block_start':
482
- snapshot.content.push({ ...event.content_block });
483
- return snapshot;
484
- case 'content_block_delta': {
485
- const snapshotContent = snapshot.content.at(event.index);
486
- switch (event.delta.type) {
487
- case 'text_delta': {
488
- if (snapshotContent?.type === 'text') {
489
- snapshot.content[event.index] = {
490
- ...snapshotContent,
491
- text: (snapshotContent.text || '') + event.delta.text,
492
- };
348
+ }
349
+ }
350
+ [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_params = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_workspace_id = new WeakMap(), _MessageStream_logger = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() {
351
+ if (this.receivedMessages.length === 0) {
352
+ throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant');
353
+ }
354
+ return this.receivedMessages.at(-1);
355
+ }, _MessageStream_getFinalText = function _MessageStream_getFinalText() {
356
+ if (this.receivedMessages.length === 0) {
357
+ throw new error_1.AnthropicError('stream ended without producing a Message with role=assistant');
358
+ }
359
+ const textBlocks = this.receivedMessages
360
+ .at(-1)
361
+ .content.filter((block) => block.type === 'text')
362
+ .map((block) => block.text);
363
+ if (textBlocks.length === 0) {
364
+ throw new error_1.AnthropicError('stream ended without producing a content block with type=text');
365
+ }
366
+ return textBlocks.join(' ');
367
+ }, _MessageStream_beginRequest = function _MessageStream_beginRequest() {
368
+ if (this.ended)
369
+ return;
370
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
371
+ }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) {
372
+ if (this.ended)
373
+ return;
374
+ const messageSnapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event);
375
+ this._emit('streamEvent', event, messageSnapshot);
376
+ switch (event.type) {
377
+ case 'content_block_delta': {
378
+ const content = messageSnapshot.content.at(-1);
379
+ switch (event.delta.type) {
380
+ case 'text_delta': {
381
+ if (content.type === 'text') {
382
+ this._emit('text', event.delta.text, content.text || '');
383
+ }
384
+ break;
493
385
  }
494
- break;
495
- }
496
- case 'citations_delta': {
497
- if (snapshotContent?.type === 'text') {
498
- snapshot.content[event.index] = {
499
- ...snapshotContent,
500
- citations: [...(snapshotContent.citations ?? []), event.delta.citation],
501
- };
386
+ case 'citations_delta': {
387
+ if (content.type === 'text') {
388
+ this._emit('citation', event.delta.citation, content.citations ?? []);
389
+ }
390
+ break;
502
391
  }
503
- break;
504
- }
505
- case 'input_json_delta': {
506
- if (snapshotContent && tracksToolInput(snapshotContent)) {
507
- const jsonBuf = (snapshotContent[message_stream_utils_1.JSON_BUF_PROPERTY] || '') + event.delta.partial_json;
508
- snapshot.content[event.index] = (0, message_stream_utils_1.withLazyInput)(snapshotContent, jsonBuf);
392
+ case 'input_json_delta': {
393
+ if (tracksToolInput(content) && tslib_1.__classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) {
394
+ this._emit('inputJson', event.delta.partial_json, content.input);
395
+ }
396
+ break;
509
397
  }
510
- break;
511
- }
512
- case 'thinking_delta': {
513
- if (snapshotContent?.type === 'thinking') {
514
- snapshot.content[event.index] = {
515
- ...snapshotContent,
516
- thinking: snapshotContent.thinking + event.delta.thinking,
517
- };
398
+ case 'thinking_delta': {
399
+ if (content.type === 'thinking') {
400
+ this._emit('thinking', event.delta.thinking, content.thinking);
401
+ }
402
+ break;
518
403
  }
519
- break;
520
- }
521
- case 'signature_delta': {
522
- if (snapshotContent?.type === 'thinking') {
523
- snapshot.content[event.index] = {
524
- ...snapshotContent,
525
- signature: event.delta.signature,
526
- };
404
+ case 'signature_delta': {
405
+ if (content.type === 'thinking') {
406
+ this._emit('signature', content.signature);
407
+ }
408
+ break;
527
409
  }
528
- break;
410
+ default:
411
+ (0, values_1.checkNever)(event.delta);
529
412
  }
530
- default:
531
- (0, values_1.checkNever)(event.delta);
413
+ break;
532
414
  }
533
- return snapshot;
534
- }
535
- case 'content_block_stop': {
536
- const snapshotContent = snapshot.content.at(event.index);
537
- if (snapshotContent && tracksToolInput(snapshotContent) && message_stream_utils_1.JSON_BUF_PROPERTY in snapshotContent) {
538
- Object.defineProperty(snapshotContent, 'input', {
539
- value: snapshotContent.input,
540
- enumerable: true,
541
- configurable: true,
542
- writable: true,
543
- });
415
+ case 'message_stop': {
416
+ this._addMessageParam(messageSnapshot);
417
+ this._addMessage((0, parser_1.maybeParseMessage)(messageSnapshot, tslib_1.__classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: tslib_1.__classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
418
+ break;
544
419
  }
545
- return snapshot;
546
- }
547
- }
548
- }, Symbol.asyncIterator)]() {
549
- const pushQueue = [];
550
- const readQueue = [];
551
- let done = false;
552
- this.on('streamEvent', (event) => {
553
- const reader = readQueue.shift();
554
- if (reader) {
555
- reader.resolve(event);
420
+ case 'content_block_stop': {
421
+ this._emit('contentBlock', messageSnapshot.content.at(-1));
422
+ break;
423
+ }
424
+ case 'message_start': {
425
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
426
+ break;
427
+ }
428
+ case 'content_block_start':
429
+ case 'message_delta':
430
+ break;
556
431
  }
557
- else {
558
- pushQueue.push(event);
432
+ }, _MessageStream_endRequest = function _MessageStream_endRequest() {
433
+ if (this.ended) {
434
+ throw new error_1.AnthropicError(`stream has ended, this shouldn't happen`);
559
435
  }
560
- });
561
- this.on('end', () => {
562
- done = true;
563
- for (const reader of readQueue) {
564
- reader.resolve(undefined);
436
+ const snapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
437
+ if (!snapshot) {
438
+ throw new error_1.AnthropicError(`request ended without sending any chunks`);
565
439
  }
566
- readQueue.length = 0;
567
- });
568
- this.on('abort', (err) => {
569
- done = true;
570
- for (const reader of readQueue) {
571
- reader.reject(err);
440
+ tslib_1.__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
441
+ return (0, parser_1.maybeParseMessage)(snapshot, tslib_1.__classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: tslib_1.__classPrivateFieldGet(this, _MessageStream_logger, "f") });
442
+ }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {
443
+ let snapshot = tslib_1.__classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
444
+ if (event.type === 'message_start') {
445
+ if (snapshot) {
446
+ throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
447
+ }
448
+ return event.message;
572
449
  }
573
- readQueue.length = 0;
574
- });
575
- this.on('error', (err) => {
576
- done = true;
577
- for (const reader of readQueue) {
578
- reader.reject(err);
450
+ if (!snapshot) {
451
+ throw new error_1.AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
579
452
  }
580
- readQueue.length = 0;
581
- });
582
- return {
583
- next: async () => {
584
- if (!pushQueue.length) {
585
- if (done) {
586
- return { value: undefined, done: true };
453
+ switch (event.type) {
454
+ case 'message_stop':
455
+ return snapshot;
456
+ case 'message_delta':
457
+ snapshot.stop_reason = event.delta.stop_reason;
458
+ snapshot.stop_sequence = event.delta.stop_sequence;
459
+ snapshot.stop_details = event.delta.stop_details;
460
+ snapshot.usage.output_tokens = event.usage.output_tokens;
461
+ if (event.delta.container != null) {
462
+ snapshot.container = event.delta.container;
463
+ }
464
+ // The remaining usage counters are cumulative whole-message totals that are
465
+ // omitted when they don't apply, so overwrite when present and never add.
466
+ if (event.usage.input_tokens != null) {
467
+ snapshot.usage.input_tokens = event.usage.input_tokens;
468
+ }
469
+ if (event.usage.cache_creation_input_tokens != null) {
470
+ snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
471
+ }
472
+ if (event.usage.cache_read_input_tokens != null) {
473
+ snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
474
+ }
475
+ if (event.usage.server_tool_use != null) {
476
+ snapshot.usage.server_tool_use = event.usage.server_tool_use;
477
+ }
478
+ if (event.usage.output_tokens_details != null) {
479
+ snapshot.usage.output_tokens_details = event.usage.output_tokens_details;
480
+ }
481
+ return snapshot;
482
+ case 'content_block_start':
483
+ snapshot.content.push({ ...event.content_block });
484
+ return snapshot;
485
+ case 'content_block_delta': {
486
+ const snapshotContent = snapshot.content.at(event.index);
487
+ switch (event.delta.type) {
488
+ case 'text_delta': {
489
+ if (snapshotContent?.type === 'text') {
490
+ snapshot.content[event.index] = {
491
+ ...snapshotContent,
492
+ text: (snapshotContent.text || '') + event.delta.text,
493
+ };
494
+ }
495
+ break;
496
+ }
497
+ case 'citations_delta': {
498
+ if (snapshotContent?.type === 'text') {
499
+ snapshot.content[event.index] = {
500
+ ...snapshotContent,
501
+ citations: [...(snapshotContent.citations ?? []), event.delta.citation],
502
+ };
503
+ }
504
+ break;
505
+ }
506
+ case 'input_json_delta': {
507
+ if (snapshotContent && tracksToolInput(snapshotContent)) {
508
+ const jsonBuf = (snapshotContent[message_stream_utils_1.JSON_BUF_PROPERTY] || '') + event.delta.partial_json;
509
+ snapshot.content[event.index] = (0, message_stream_utils_1.withLazyInput)(snapshotContent, jsonBuf);
510
+ }
511
+ break;
512
+ }
513
+ case 'thinking_delta': {
514
+ if (snapshotContent?.type === 'thinking') {
515
+ snapshot.content[event.index] = {
516
+ ...snapshotContent,
517
+ thinking: snapshotContent.thinking + event.delta.thinking,
518
+ };
519
+ }
520
+ break;
521
+ }
522
+ case 'signature_delta': {
523
+ if (snapshotContent?.type === 'thinking') {
524
+ snapshot.content[event.index] = {
525
+ ...snapshotContent,
526
+ signature: event.delta.signature,
527
+ };
528
+ }
529
+ break;
530
+ }
531
+ default:
532
+ (0, values_1.checkNever)(event.delta);
587
533
  }
588
- return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
534
+ return snapshot;
589
535
  }
590
- const chunk = pushQueue.shift();
591
- return { value: chunk, done: false };
592
- },
593
- return: async () => {
594
- this.abort();
595
- return { value: undefined, done: true };
596
- },
597
- };
598
- }
599
- toReadableStream() {
600
- const stream = new streaming_1.Stream(this[Symbol.asyncIterator].bind(this), this.controller);
601
- return stream.toReadableStream();
536
+ case 'content_block_stop': {
537
+ const snapshotContent = snapshot.content.at(event.index);
538
+ if (snapshotContent && tracksToolInput(snapshotContent) && message_stream_utils_1.JSON_BUF_PROPERTY in snapshotContent) {
539
+ Object.defineProperty(snapshotContent, 'input', {
540
+ value: snapshotContent.input,
541
+ enumerable: true,
542
+ configurable: true,
543
+ writable: true,
544
+ });
545
+ }
546
+ return snapshot;
547
+ }
548
+ }
549
+ }, Symbol.asyncIterator)]() {
550
+ const pushQueue = [];
551
+ const readQueue = [];
552
+ let done = false;
553
+ this.on('streamEvent', (event) => {
554
+ const reader = readQueue.shift();
555
+ if (reader) {
556
+ reader.resolve(event);
557
+ }
558
+ else {
559
+ pushQueue.push(event);
560
+ }
561
+ });
562
+ this.on('end', () => {
563
+ done = true;
564
+ for (const reader of readQueue) {
565
+ reader.resolve(undefined);
566
+ }
567
+ readQueue.length = 0;
568
+ });
569
+ this.on('abort', (err) => {
570
+ done = true;
571
+ for (const reader of readQueue) {
572
+ reader.reject(err);
573
+ }
574
+ readQueue.length = 0;
575
+ });
576
+ this.on('error', (err) => {
577
+ done = true;
578
+ for (const reader of readQueue) {
579
+ reader.reject(err);
580
+ }
581
+ readQueue.length = 0;
582
+ });
583
+ return {
584
+ next: async () => {
585
+ if (!pushQueue.length) {
586
+ if (done) {
587
+ return { value: undefined, done: true };
588
+ }
589
+ return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
590
+ }
591
+ const chunk = pushQueue.shift();
592
+ return { value: chunk, done: false };
593
+ },
594
+ return: async () => {
595
+ this.abort();
596
+ return { value: undefined, done: true };
597
+ },
598
+ };
599
+ }
600
+ toReadableStream() {
601
+ const stream = new streaming_1.Stream(this[Symbol.asyncIterator].bind(this), this.controller);
602
+ return stream.toReadableStream();
603
+ }
602
604
  }
603
- }
605
+ return MessageStream;
606
+ })();
604
607
  exports.MessageStream = MessageStream;
605
608
  //# sourceMappingURL=MessageStream.js.map