@anthropic-ai/sdk 0.54.0 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +3 -4
  3. package/client.d.mts +8 -5
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +8 -5
  6. package/client.d.ts.map +1 -1
  7. package/client.js +31 -24
  8. package/client.js.map +1 -1
  9. package/client.mjs +20 -13
  10. package/client.mjs.map +1 -1
  11. package/core/resource.d.mts +1 -1
  12. package/core/resource.d.mts.map +1 -1
  13. package/core/resource.d.ts +1 -1
  14. package/core/resource.d.ts.map +1 -1
  15. package/core/resource.js.map +1 -1
  16. package/core/resource.mjs.map +1 -1
  17. package/internal/headers.d.mts.map +1 -1
  18. package/internal/headers.d.ts.map +1 -1
  19. package/internal/headers.js +3 -3
  20. package/internal/headers.js.map +1 -1
  21. package/internal/headers.mjs +3 -3
  22. package/internal/headers.mjs.map +1 -1
  23. package/internal/request-options.d.mts +1 -0
  24. package/internal/request-options.d.mts.map +1 -1
  25. package/internal/request-options.d.ts +1 -0
  26. package/internal/request-options.d.ts.map +1 -1
  27. package/internal/request-options.js.map +1 -1
  28. package/internal/request-options.mjs.map +1 -1
  29. package/internal/types.d.mts +8 -6
  30. package/internal/types.d.mts.map +1 -1
  31. package/internal/types.d.ts +8 -6
  32. package/internal/types.d.ts.map +1 -1
  33. package/internal/uploads.js +1 -1
  34. package/internal/uploads.js.map +1 -1
  35. package/internal/uploads.mjs +1 -1
  36. package/internal/uploads.mjs.map +1 -1
  37. package/internal/utils/log.js +1 -1
  38. package/internal/utils/log.js.map +1 -1
  39. package/internal/utils/log.mjs +1 -1
  40. package/internal/utils/log.mjs.map +1 -1
  41. package/internal/utils/path.d.mts.map +1 -1
  42. package/internal/utils/path.d.ts.map +1 -1
  43. package/internal/utils/path.js +26 -5
  44. package/internal/utils/path.js.map +1 -1
  45. package/internal/utils/path.mjs +27 -6
  46. package/internal/utils/path.mjs.map +1 -1
  47. package/internal/utils/values.d.mts +2 -0
  48. package/internal/utils/values.d.mts.map +1 -1
  49. package/internal/utils/values.d.ts +2 -0
  50. package/internal/utils/values.d.ts.map +1 -1
  51. package/internal/utils/values.js +4 -1
  52. package/internal/utils/values.js.map +1 -1
  53. package/internal/utils/values.mjs +2 -0
  54. package/internal/utils/values.mjs.map +1 -1
  55. package/lib/BetaMessageStream.d.mts.map +1 -1
  56. package/lib/BetaMessageStream.d.ts.map +1 -1
  57. package/lib/BetaMessageStream.js +58 -27
  58. package/lib/BetaMessageStream.js.map +1 -1
  59. package/lib/BetaMessageStream.mjs +58 -27
  60. package/lib/BetaMessageStream.mjs.map +1 -1
  61. package/lib/MessageStream.d.mts.map +1 -1
  62. package/lib/MessageStream.d.ts.map +1 -1
  63. package/lib/MessageStream.js +59 -28
  64. package/lib/MessageStream.js.map +1 -1
  65. package/lib/MessageStream.mjs +59 -28
  66. package/lib/MessageStream.mjs.map +1 -1
  67. package/package.json +1 -1
  68. package/src/client.ts +34 -13
  69. package/src/core/resource.ts +1 -1
  70. package/src/internal/headers.ts +4 -4
  71. package/src/internal/request-options.ts +1 -0
  72. package/src/internal/types.ts +9 -6
  73. package/src/internal/uploads.ts +1 -1
  74. package/src/internal/utils/log.ts +1 -1
  75. package/src/internal/utils/path.ts +31 -8
  76. package/src/internal/utils/values.ts +3 -0
  77. package/src/lib/BetaMessageStream.ts +58 -29
  78. package/src/lib/MessageStream.ts +59 -30
  79. package/src/version.ts +1 -1
  80. package/version.d.mts +1 -1
  81. package/version.d.ts +1 -1
  82. package/version.js +1 -1
  83. package/version.mjs +1 -1
@@ -181,22 +181,30 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
181
181
  options?: RequestOptions,
182
182
  ): Promise<void> {
183
183
  const signal = options?.signal;
184
+ let abortHandler: (() => void) | undefined;
184
185
  if (signal) {
185
186
  if (signal.aborted) this.controller.abort();
186
- signal.addEventListener('abort', () => this.controller.abort());
187
+ abortHandler = this.controller.abort.bind(this.controller);
188
+ signal.addEventListener('abort', abortHandler);
187
189
  }
188
- this.#beginRequest();
189
- const { response, data: stream } = await messages
190
- .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
191
- .withResponse();
192
- this._connected(response);
193
- for await (const event of stream) {
194
- this.#addStreamEvent(event);
195
- }
196
- if (stream.controller.signal?.aborted) {
197
- throw new APIUserAbortError();
190
+ try {
191
+ this.#beginRequest();
192
+ const { response, data: stream } = await messages
193
+ .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
194
+ .withResponse();
195
+ this._connected(response);
196
+ for await (const event of stream) {
197
+ this.#addStreamEvent(event);
198
+ }
199
+ if (stream.controller.signal?.aborted) {
200
+ throw new APIUserAbortError();
201
+ }
202
+ this.#endRequest();
203
+ } finally {
204
+ if (signal && abortHandler) {
205
+ signal.removeEventListener('abort', abortHandler);
206
+ }
198
207
  }
199
- this.#endRequest();
200
208
  }
201
209
 
202
210
  protected _connected(response: Response | null) {
@@ -497,20 +505,28 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
497
505
  options?: RequestOptions,
498
506
  ): Promise<void> {
499
507
  const signal = options?.signal;
508
+ let abortHandler: (() => void) | undefined;
500
509
  if (signal) {
501
510
  if (signal.aborted) this.controller.abort();
502
- signal.addEventListener('abort', () => this.controller.abort());
511
+ abortHandler = this.controller.abort.bind(this.controller);
512
+ signal.addEventListener('abort', abortHandler);
503
513
  }
504
- this.#beginRequest();
505
- this._connected(null);
506
- const stream = Stream.fromReadableStream<BetaMessageStreamEvent>(readableStream, this.controller);
507
- for await (const event of stream) {
508
- this.#addStreamEvent(event);
509
- }
510
- if (stream.controller.signal?.aborted) {
511
- throw new APIUserAbortError();
514
+ try {
515
+ this.#beginRequest();
516
+ this._connected(null);
517
+ const stream = Stream.fromReadableStream<BetaMessageStreamEvent>(readableStream, this.controller);
518
+ for await (const event of stream) {
519
+ this.#addStreamEvent(event);
520
+ }
521
+ if (stream.controller.signal?.aborted) {
522
+ throw new APIUserAbortError();
523
+ }
524
+ this.#endRequest();
525
+ } finally {
526
+ if (signal && abortHandler) {
527
+ signal.removeEventListener('abort', abortHandler);
528
+ }
512
529
  }
513
- this.#endRequest();
514
530
  }
515
531
 
516
532
  /**
@@ -567,14 +583,19 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
567
583
  switch (event.delta.type) {
568
584
  case 'text_delta': {
569
585
  if (snapshotContent?.type === 'text') {
570
- snapshotContent.text += event.delta.text;
586
+ snapshot.content[event.index] = {
587
+ ...snapshotContent,
588
+ text: (snapshotContent.text || '') + event.delta.text,
589
+ };
571
590
  }
572
591
  break;
573
592
  }
574
593
  case 'citations_delta': {
575
594
  if (snapshotContent?.type === 'text') {
576
- snapshotContent.citations ??= [];
577
- snapshotContent.citations.push(event.delta.citation);
595
+ snapshot.content[event.index] = {
596
+ ...snapshotContent,
597
+ citations: [...(snapshotContent.citations ?? []), event.delta.citation],
598
+ };
578
599
  }
579
600
  break;
580
601
  }
@@ -586,7 +607,8 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
586
607
  let jsonBuf = (snapshotContent as any)[JSON_BUF_PROPERTY] || '';
587
608
  jsonBuf += event.delta.partial_json;
588
609
 
589
- Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, {
610
+ const newContent = { ...snapshotContent };
611
+ Object.defineProperty(newContent, JSON_BUF_PROPERTY, {
590
612
  value: jsonBuf,
591
613
  enumerable: false,
592
614
  writable: true,
@@ -594,7 +616,7 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
594
616
 
595
617
  if (jsonBuf) {
596
618
  try {
597
- snapshotContent.input = partialParse(jsonBuf);
619
+ newContent.input = partialParse(jsonBuf);
598
620
  } catch (err) {
599
621
  const error = new AnthropicError(
600
622
  `Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`,
@@ -602,18 +624,25 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
602
624
  this.#handleError(error);
603
625
  }
604
626
  }
627
+ snapshot.content[event.index] = newContent;
605
628
  }
606
629
  break;
607
630
  }
608
631
  case 'thinking_delta': {
609
632
  if (snapshotContent?.type === 'thinking') {
610
- snapshotContent.thinking += event.delta.thinking;
633
+ snapshot.content[event.index] = {
634
+ ...snapshotContent,
635
+ thinking: snapshotContent.thinking + event.delta.thinking,
636
+ };
611
637
  }
612
638
  break;
613
639
  }
614
640
  case 'signature_delta': {
615
641
  if (snapshotContent?.type === 'thinking') {
616
- snapshotContent.signature = event.delta.signature;
642
+ snapshot.content[event.index] = {
643
+ ...snapshotContent,
644
+ signature: event.delta.signature,
645
+ };
617
646
  }
618
647
  break;
619
648
  }
@@ -180,22 +180,30 @@ export class MessageStream implements AsyncIterable<MessageStreamEvent> {
180
180
  options?: RequestOptions,
181
181
  ): Promise<void> {
182
182
  const signal = options?.signal;
183
+ let abortHandler: (() => void) | undefined;
183
184
  if (signal) {
184
185
  if (signal.aborted) this.controller.abort();
185
- signal.addEventListener('abort', () => this.controller.abort());
186
+ abortHandler = this.controller.abort.bind(this.controller);
187
+ signal.addEventListener('abort', abortHandler);
186
188
  }
187
- this.#beginRequest();
188
- const { response, data: stream } = await messages
189
- .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
190
- .withResponse();
191
- this._connected(response);
192
- for await (const event of stream) {
193
- this.#addStreamEvent(event);
194
- }
195
- if (stream.controller.signal?.aborted) {
196
- throw new APIUserAbortError();
189
+ try {
190
+ this.#beginRequest();
191
+ const { response, data: stream } = await messages
192
+ .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
193
+ .withResponse();
194
+ this._connected(response);
195
+ for await (const event of stream) {
196
+ this.#addStreamEvent(event);
197
+ }
198
+ if (stream.controller.signal?.aborted) {
199
+ throw new APIUserAbortError();
200
+ }
201
+ this.#endRequest();
202
+ } finally {
203
+ if (signal && abortHandler) {
204
+ signal.removeEventListener('abort', abortHandler);
205
+ }
197
206
  }
198
- this.#endRequest();
199
207
  }
200
208
 
201
209
  protected _connected(response: Response | null) {
@@ -496,20 +504,28 @@ export class MessageStream implements AsyncIterable<MessageStreamEvent> {
496
504
  options?: RequestOptions,
497
505
  ): Promise<void> {
498
506
  const signal = options?.signal;
507
+ let abortHandler: (() => void) | undefined;
499
508
  if (signal) {
500
509
  if (signal.aborted) this.controller.abort();
501
- signal.addEventListener('abort', () => this.controller.abort());
510
+ abortHandler = this.controller.abort.bind(this.controller);
511
+ signal.addEventListener('abort', abortHandler);
502
512
  }
503
- this.#beginRequest();
504
- this._connected(null);
505
- const stream = Stream.fromReadableStream<MessageStreamEvent>(readableStream, this.controller);
506
- for await (const event of stream) {
507
- this.#addStreamEvent(event);
508
- }
509
- if (stream.controller.signal?.aborted) {
510
- throw new APIUserAbortError();
513
+ try {
514
+ this.#beginRequest();
515
+ this._connected(null);
516
+ const stream = Stream.fromReadableStream<MessageStreamEvent>(readableStream, this.controller);
517
+ for await (const event of stream) {
518
+ this.#addStreamEvent(event);
519
+ }
520
+ if (stream.controller.signal?.aborted) {
521
+ throw new APIUserAbortError();
522
+ }
523
+ this.#endRequest();
524
+ } finally {
525
+ if (signal && abortHandler) {
526
+ signal.removeEventListener('abort', abortHandler);
527
+ }
511
528
  }
512
- this.#endRequest();
513
529
  }
514
530
 
515
531
  /**
@@ -558,7 +574,7 @@ export class MessageStream implements AsyncIterable<MessageStreamEvent> {
558
574
 
559
575
  return snapshot;
560
576
  case 'content_block_start':
561
- snapshot.content.push(event.content_block);
577
+ snapshot.content.push({ ...event.content_block });
562
578
  return snapshot;
563
579
  case 'content_block_delta': {
564
580
  const snapshotContent = snapshot.content.at(event.index);
@@ -566,14 +582,19 @@ export class MessageStream implements AsyncIterable<MessageStreamEvent> {
566
582
  switch (event.delta.type) {
567
583
  case 'text_delta': {
568
584
  if (snapshotContent?.type === 'text') {
569
- snapshotContent.text += event.delta.text;
585
+ snapshot.content[event.index] = {
586
+ ...snapshotContent,
587
+ text: (snapshotContent.text || '') + event.delta.text,
588
+ };
570
589
  }
571
590
  break;
572
591
  }
573
592
  case 'citations_delta': {
574
593
  if (snapshotContent?.type === 'text') {
575
- snapshotContent.citations ??= [];
576
- snapshotContent.citations.push(event.delta.citation);
594
+ snapshot.content[event.index] = {
595
+ ...snapshotContent,
596
+ citations: [...(snapshotContent.citations ?? []), event.delta.citation],
597
+ };
577
598
  }
578
599
  break;
579
600
  }
@@ -585,27 +606,35 @@ export class MessageStream implements AsyncIterable<MessageStreamEvent> {
585
606
  let jsonBuf = (snapshotContent as any)[JSON_BUF_PROPERTY] || '';
586
607
  jsonBuf += event.delta.partial_json;
587
608
 
588
- Object.defineProperty(snapshotContent, JSON_BUF_PROPERTY, {
609
+ const newContent = { ...snapshotContent };
610
+ Object.defineProperty(newContent, JSON_BUF_PROPERTY, {
589
611
  value: jsonBuf,
590
612
  enumerable: false,
591
613
  writable: true,
592
614
  });
593
615
 
594
616
  if (jsonBuf) {
595
- snapshotContent.input = partialParse(jsonBuf);
617
+ newContent.input = partialParse(jsonBuf);
596
618
  }
619
+ snapshot.content[event.index] = newContent;
597
620
  }
598
621
  break;
599
622
  }
600
623
  case 'thinking_delta': {
601
624
  if (snapshotContent?.type === 'thinking') {
602
- snapshotContent.thinking += event.delta.thinking;
625
+ snapshot.content[event.index] = {
626
+ ...snapshotContent,
627
+ thinking: snapshotContent.thinking + event.delta.thinking,
628
+ };
603
629
  }
604
630
  break;
605
631
  }
606
632
  case 'signature_delta': {
607
633
  if (snapshotContent?.type === 'thinking') {
608
- snapshotContent.signature = event.delta.signature;
634
+ snapshot.content[event.index] = {
635
+ ...snapshotContent,
636
+ signature: event.delta.signature,
637
+ };
609
638
  }
610
639
  break;
611
640
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.54.0'; // x-release-please-version
1
+ export const VERSION = '0.55.1'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.54.0";
1
+ export declare const VERSION = "0.55.1";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.54.0";
1
+ export declare const VERSION = "0.55.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '0.54.0'; // x-release-please-version
4
+ exports.VERSION = '0.55.1'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.54.0'; // x-release-please-version
1
+ export const VERSION = '0.55.1'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map