@tetral-ai/sdk 0.110.0-alpha.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.
- package/.github/logo.svg +3 -0
- package/CHANGELOG.md +2815 -0
- package/COMPATIBILITY.md +97 -0
- package/LICENSE +8 -0
- package/README.md +132 -0
- package/_vendor/partial-json-parser/parser.d.mts +3 -0
- package/_vendor/partial-json-parser/parser.d.mts.map +1 -0
- package/_vendor/partial-json-parser/parser.d.ts +3 -0
- package/_vendor/partial-json-parser/parser.d.ts.map +1 -0
- package/_vendor/partial-json-parser/parser.js +238 -0
- package/_vendor/partial-json-parser/parser.js.map +1 -0
- package/_vendor/partial-json-parser/parser.mjs +235 -0
- package/_vendor/partial-json-parser/parser.mjs.map +1 -0
- package/api-promise.d.mts +3 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +3 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +6 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +3 -0
- package/api-promise.mjs.map +1 -0
- package/api.md +1297 -0
- package/bin/cli +53 -0
- package/bin/migration-config.json +933 -0
- package/client.d.mts +387 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +387 -0
- package/client.d.ts.map +1 -0
- package/client.js +943 -0
- package/client.js.map +1 -0
- package/client.mjs +938 -0
- package/client.mjs.map +1 -0
- package/core/api-promise.d.mts +49 -0
- package/core/api-promise.d.mts.map +1 -0
- package/core/api-promise.d.ts +49 -0
- package/core/api-promise.d.ts.map +1 -0
- package/core/api-promise.js +76 -0
- package/core/api-promise.js.map +1 -0
- package/core/api-promise.mjs +72 -0
- package/core/api-promise.mjs.map +1 -0
- package/core/api.d.mts +11 -0
- package/core/api.d.mts.map +1 -0
- package/core/api.d.ts +11 -0
- package/core/api.d.ts.map +1 -0
- package/core/api.js +3 -0
- package/core/api.js.map +1 -0
- package/core/api.mjs +2 -0
- package/core/api.mjs.map +1 -0
- package/core/credentials.d.mts +131 -0
- package/core/credentials.d.mts.map +1 -0
- package/core/credentials.d.ts +131 -0
- package/core/credentials.d.ts.map +1 -0
- package/core/credentials.js +317 -0
- package/core/credentials.js.map +1 -0
- package/core/credentials.mjs +277 -0
- package/core/credentials.mjs.map +1 -0
- package/core/error.d.mts +61 -0
- package/core/error.d.mts.map +1 -0
- package/core/error.d.ts +61 -0
- package/core/error.d.ts.map +1 -0
- package/core/error.js +132 -0
- package/core/error.js.map +1 -0
- package/core/error.mjs +115 -0
- package/core/error.mjs.map +1 -0
- package/core/middleware.d.mts +154 -0
- package/core/middleware.d.mts.map +1 -0
- package/core/middleware.d.ts +154 -0
- package/core/middleware.d.ts.map +1 -0
- package/core/middleware.js +174 -0
- package/core/middleware.js.map +1 -0
- package/core/middleware.mjs +168 -0
- package/core/middleware.mjs.map +1 -0
- package/core/pagination.d.mts +122 -0
- package/core/pagination.d.mts.map +1 -0
- package/core/pagination.d.ts +122 -0
- package/core/pagination.d.ts.map +1 -0
- package/core/pagination.js +203 -0
- package/core/pagination.js.map +1 -0
- package/core/pagination.mjs +194 -0
- package/core/pagination.mjs.map +1 -0
- package/core/resource.d.mts +6 -0
- package/core/resource.d.mts.map +1 -0
- package/core/resource.d.ts +6 -0
- package/core/resource.d.ts.map +1 -0
- package/core/resource.js +11 -0
- package/core/resource.js.map +1 -0
- package/core/resource.mjs +7 -0
- package/core/resource.mjs.map +1 -0
- package/core/streaming.d.mts +42 -0
- package/core/streaming.d.mts.map +1 -0
- package/core/streaming.d.ts +42 -0
- package/core/streaming.d.ts.map +1 -0
- package/core/streaming.js +341 -0
- package/core/streaming.js.map +1 -0
- package/core/streaming.mjs +336 -0
- package/core/streaming.mjs.map +1 -0
- package/core/uploads.d.mts +3 -0
- package/core/uploads.d.mts.map +1 -0
- package/core/uploads.d.ts +3 -0
- package/core/uploads.d.ts.map +1 -0
- package/core/uploads.js +6 -0
- package/core/uploads.js.map +1 -0
- package/core/uploads.mjs +2 -0
- package/core/uploads.mjs.map +1 -0
- package/error.d.mts +3 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +3 -0
- package/error.d.ts.map +1 -0
- package/error.js +6 -0
- package/error.js.map +1 -0
- package/error.mjs +3 -0
- package/error.mjs.map +1 -0
- package/helpers/beta/environments.d.mts +25 -0
- package/helpers/beta/environments.d.mts.map +1 -0
- package/helpers/beta/environments.d.ts +25 -0
- package/helpers/beta/environments.d.ts.map +1 -0
- package/helpers/beta/environments.js +33 -0
- package/helpers/beta/environments.js.map +1 -0
- package/helpers/beta/environments.mjs +25 -0
- package/helpers/beta/environments.mjs.map +1 -0
- package/helpers/beta/json-schema.d.mts +37 -0
- package/helpers/beta/json-schema.d.mts.map +1 -0
- package/helpers/beta/json-schema.d.ts +37 -0
- package/helpers/beta/json-schema.d.ts.map +1 -0
- package/helpers/beta/json-schema.js +57 -0
- package/helpers/beta/json-schema.js.map +1 -0
- package/helpers/beta/json-schema.mjs +53 -0
- package/helpers/beta/json-schema.mjs.map +1 -0
- package/helpers/beta/mcp.d.mts +303 -0
- package/helpers/beta/mcp.d.mts.map +1 -0
- package/helpers/beta/mcp.d.ts +303 -0
- package/helpers/beta/mcp.d.ts.map +1 -0
- package/helpers/beta/mcp.js +419 -0
- package/helpers/beta/mcp.js.map +1 -0
- package/helpers/beta/mcp.mjs +406 -0
- package/helpers/beta/mcp.mjs.map +1 -0
- package/helpers/beta/memory.d.mts +11 -0
- package/helpers/beta/memory.d.mts.map +1 -0
- package/helpers/beta/memory.d.ts +11 -0
- package/helpers/beta/memory.d.ts.map +1 -0
- package/helpers/beta/memory.js +18 -0
- package/helpers/beta/memory.js.map +1 -0
- package/helpers/beta/memory.mjs +15 -0
- package/helpers/beta/memory.mjs.map +1 -0
- package/helpers/beta/zod.d.mts +33 -0
- package/helpers/beta/zod.d.mts.map +1 -0
- package/helpers/beta/zod.d.ts +33 -0
- package/helpers/beta/zod.d.ts.map +1 -0
- package/helpers/beta/zod.js +58 -0
- package/helpers/beta/zod.js.map +1 -0
- package/helpers/beta/zod.mjs +53 -0
- package/helpers/beta/zod.mjs.map +1 -0
- package/helpers/index.d.mts +3 -0
- package/helpers/index.d.mts.map +1 -0
- package/helpers/index.d.ts +3 -0
- package/helpers/index.d.ts.map +1 -0
- package/helpers/index.js +8 -0
- package/helpers/index.js.map +1 -0
- package/helpers/index.mjs +3 -0
- package/helpers/index.mjs.map +1 -0
- package/helpers/json-schema.d.mts +18 -0
- package/helpers/json-schema.d.mts.map +1 -0
- package/helpers/json-schema.d.ts +18 -0
- package/helpers/json-schema.d.ts.map +1 -0
- package/helpers/json-schema.js +37 -0
- package/helpers/json-schema.js.map +1 -0
- package/helpers/json-schema.mjs +34 -0
- package/helpers/json-schema.mjs.map +1 -0
- package/helpers/zod.d.mts +13 -0
- package/helpers/zod.d.mts.map +1 -0
- package/helpers/zod.d.ts +13 -0
- package/helpers/zod.d.ts.map +1 -0
- package/helpers/zod.js +47 -0
- package/helpers/zod.js.map +1 -0
- package/helpers/zod.mjs +43 -0
- package/helpers/zod.mjs.map +1 -0
- package/index.d.mts +10 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.js +40 -0
- package/index.js.map +1 -0
- package/index.mjs +9 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +73 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +73 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +4 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +3 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/constants.d.mts +5 -0
- package/internal/constants.d.mts.map +1 -0
- package/internal/constants.d.ts +5 -0
- package/internal/constants.d.ts.map +1 -0
- package/internal/constants.js +18 -0
- package/internal/constants.js.map +1 -0
- package/internal/constants.mjs +15 -0
- package/internal/constants.mjs.map +1 -0
- package/internal/decoders/jsonl.d.mts +10 -0
- package/internal/decoders/jsonl.d.mts.map +1 -0
- package/internal/decoders/jsonl.d.ts +10 -0
- package/internal/decoders/jsonl.d.ts.map +1 -0
- package/internal/decoders/jsonl.js +39 -0
- package/internal/decoders/jsonl.js.map +1 -0
- package/internal/decoders/jsonl.mjs +35 -0
- package/internal/decoders/jsonl.mjs.map +1 -0
- package/internal/decoders/line.d.mts +17 -0
- package/internal/decoders/line.d.mts.map +1 -0
- package/internal/decoders/line.d.ts +17 -0
- package/internal/decoders/line.d.ts.map +1 -0
- package/internal/decoders/line.js +113 -0
- package/internal/decoders/line.js.map +1 -0
- package/internal/decoders/line.mjs +108 -0
- package/internal/decoders/line.mjs.map +1 -0
- package/internal/detect-platform.d.mts +15 -0
- package/internal/detect-platform.d.mts.map +1 -0
- package/internal/detect-platform.d.ts +15 -0
- package/internal/detect-platform.d.ts.map +1 -0
- package/internal/detect-platform.js +162 -0
- package/internal/detect-platform.js.map +1 -0
- package/internal/detect-platform.mjs +157 -0
- package/internal/detect-platform.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +41 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +36 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +29 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +29 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +120 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +114 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/message-stream-utils.d.mts +10 -0
- package/internal/message-stream-utils.d.mts.map +1 -0
- package/internal/message-stream-utils.d.ts +10 -0
- package/internal/message-stream-utils.d.ts.map +1 -0
- package/internal/message-stream-utils.js +34 -0
- package/internal/message-stream-utils.js.map +1 -0
- package/internal/message-stream-utils.mjs +30 -0
- package/internal/message-stream-utils.mjs.map +1 -0
- package/internal/parse.d.mts +17 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +17 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +57 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +53 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/qs/formats.d.mts +7 -0
- package/internal/qs/formats.d.mts.map +1 -0
- package/internal/qs/formats.d.ts +7 -0
- package/internal/qs/formats.d.ts.map +1 -0
- package/internal/qs/formats.js +13 -0
- package/internal/qs/formats.js.map +1 -0
- package/internal/qs/formats.mjs +9 -0
- package/internal/qs/formats.mjs.map +1 -0
- package/internal/qs/index.d.mts +10 -0
- package/internal/qs/index.d.mts.map +1 -0
- package/internal/qs/index.d.ts +10 -0
- package/internal/qs/index.d.ts.map +1 -0
- package/internal/qs/index.js +14 -0
- package/internal/qs/index.js.map +1 -0
- package/internal/qs/index.mjs +10 -0
- package/internal/qs/index.mjs.map +1 -0
- package/internal/qs/stringify.d.mts +3 -0
- package/internal/qs/stringify.d.mts.map +1 -0
- package/internal/qs/stringify.d.ts +3 -0
- package/internal/qs/stringify.d.ts.map +1 -0
- package/internal/qs/stringify.js +277 -0
- package/internal/qs/stringify.js.map +1 -0
- package/internal/qs/stringify.mjs +274 -0
- package/internal/qs/stringify.mjs.map +1 -0
- package/internal/qs/types.d.mts +57 -0
- package/internal/qs/types.d.mts.map +1 -0
- package/internal/qs/types.d.ts +57 -0
- package/internal/qs/types.d.ts.map +1 -0
- package/internal/qs/types.js +3 -0
- package/internal/qs/types.js.map +1 -0
- package/internal/qs/types.mjs +2 -0
- package/internal/qs/types.mjs.map +1 -0
- package/internal/qs/utils.d.mts +15 -0
- package/internal/qs/utils.d.mts.map +1 -0
- package/internal/qs/utils.d.ts +15 -0
- package/internal/qs/utils.d.ts.map +1 -0
- package/internal/qs/utils.js +230 -0
- package/internal/qs/utils.js.map +1 -0
- package/internal/qs/utils.mjs +217 -0
- package/internal/qs/utils.mjs.map +1 -0
- package/internal/request-options.d.mts +127 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +127 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +25 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +20 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +17 -0
- package/internal/shim-types.d.mts.map +1 -0
- package/internal/shim-types.d.ts +17 -0
- package/internal/shim-types.d.ts.map +1 -0
- package/internal/shim-types.js +4 -0
- package/internal/shim-types.js.map +1 -0
- package/internal/shim-types.mjs +3 -0
- package/internal/shim-types.mjs.map +1 -0
- package/internal/shims.d.mts +26 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +26 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +92 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +85 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/stainless-helper-header.d.mts +60 -0
- package/internal/stainless-helper-header.d.mts.map +1 -0
- package/internal/stainless-helper-header.d.ts +60 -0
- package/internal/stainless-helper-header.d.ts.map +1 -0
- package/internal/stainless-helper-header.js +91 -0
- package/internal/stainless-helper-header.js.map +1 -0
- package/internal/stainless-helper-header.mjs +83 -0
- package/internal/stainless-helper-header.mjs.map +1 -0
- package/internal/stream-utils.d.mts +8 -0
- package/internal/stream-utils.d.mts.map +1 -0
- package/internal/stream-utils.d.ts +8 -0
- package/internal/stream-utils.d.ts.map +1 -0
- package/internal/stream-utils.js +38 -0
- package/internal/stream-utils.js.map +1 -0
- package/internal/stream-utils.mjs +35 -0
- package/internal/stream-utils.mjs.map +1 -0
- package/internal/to-file.d.mts +45 -0
- package/internal/to-file.d.mts.map +1 -0
- package/internal/to-file.d.ts +45 -0
- package/internal/to-file.d.ts.map +1 -0
- package/internal/to-file.js +96 -0
- package/internal/to-file.js.map +1 -0
- package/internal/to-file.mjs +93 -0
- package/internal/to-file.mjs.map +1 -0
- package/internal/tslib.js +81 -0
- package/internal/tslib.mjs +17 -0
- package/internal/types.d.mts +69 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +69 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +4 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +3 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +42 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +42 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +145 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +135 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/abort.d.mts +13 -0
- package/internal/utils/abort.d.mts.map +1 -0
- package/internal/utils/abort.d.ts +13 -0
- package/internal/utils/abort.d.ts.map +1 -0
- package/internal/utils/abort.js +26 -0
- package/internal/utils/abort.js.map +1 -0
- package/internal/utils/abort.mjs +23 -0
- package/internal/utils/abort.mjs.map +1 -0
- package/internal/utils/async-queue.d.mts +31 -0
- package/internal/utils/async-queue.d.mts.map +1 -0
- package/internal/utils/async-queue.d.ts +31 -0
- package/internal/utils/async-queue.d.ts.map +1 -0
- package/internal/utils/async-queue.js +75 -0
- package/internal/utils/async-queue.js.map +1 -0
- package/internal/utils/async-queue.mjs +71 -0
- package/internal/utils/async-queue.mjs.map +1 -0
- package/internal/utils/backoff.d.mts +23 -0
- package/internal/utils/backoff.d.mts.map +1 -0
- package/internal/utils/backoff.d.ts +23 -0
- package/internal/utils/backoff.d.ts.map +1 -0
- package/internal/utils/backoff.js +44 -0
- package/internal/utils/backoff.js.map +1 -0
- package/internal/utils/backoff.mjs +36 -0
- package/internal/utils/backoff.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +38 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +33 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/bytes.d.mts +4 -0
- package/internal/utils/bytes.d.mts.map +1 -0
- package/internal/utils/bytes.d.ts +4 -0
- package/internal/utils/bytes.d.ts.map +1 -0
- package/internal/utils/bytes.js +31 -0
- package/internal/utils/bytes.js.map +1 -0
- package/internal/utils/bytes.mjs +26 -0
- package/internal/utils/bytes.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +22 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +18 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +47 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +47 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +112 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +105 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/path.d.mts +15 -0
- package/internal/utils/path.d.mts.map +1 -0
- package/internal/utils/path.d.ts +15 -0
- package/internal/utils/path.d.ts.map +1 -0
- package/internal/utils/path.js +79 -0
- package/internal/utils/path.js.map +1 -0
- package/internal/utils/path.mjs +74 -0
- package/internal/utils/path.mjs.map +1 -0
- package/internal/utils/promise.d.mts +11 -0
- package/internal/utils/promise.d.mts.map +1 -0
- package/internal/utils/promise.d.ts +11 -0
- package/internal/utils/promise.d.ts.map +1 -0
- package/internal/utils/promise.js +18 -0
- package/internal/utils/promise.js.map +1 -0
- package/internal/utils/promise.mjs +15 -0
- package/internal/utils/promise.mjs.map +1 -0
- package/internal/utils/query.d.mts +2 -0
- package/internal/utils/query.d.mts.map +1 -0
- package/internal/utils/query.d.ts +2 -0
- package/internal/utils/query.d.ts.map +1 -0
- package/internal/utils/query.js +10 -0
- package/internal/utils/query.js.map +1 -0
- package/internal/utils/query.mjs +6 -0
- package/internal/utils/query.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +10 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +10 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +28 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +24 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/time.d.mts +3 -0
- package/internal/utils/time.d.mts.map +1 -0
- package/internal/utils/time.d.ts +3 -0
- package/internal/utils/time.d.ts.map +1 -0
- package/internal/utils/time.js +8 -0
- package/internal/utils/time.js.map +1 -0
- package/internal/utils/time.mjs +5 -0
- package/internal/utils/time.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +19 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +15 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +19 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +19 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +119 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +100 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +8 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +8 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +12 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +9 -0
- package/internal/utils.mjs.map +1 -0
- package/lib/BetaMessageStream.d.mts +122 -0
- package/lib/BetaMessageStream.d.mts.map +1 -0
- package/lib/BetaMessageStream.d.ts +122 -0
- package/lib/BetaMessageStream.d.ts.map +1 -0
- package/lib/BetaMessageStream.js +639 -0
- package/lib/BetaMessageStream.js.map +1 -0
- package/lib/BetaMessageStream.mjs +635 -0
- package/lib/BetaMessageStream.mjs.map +1 -0
- package/lib/MessageStream.d.mts +121 -0
- package/lib/MessageStream.d.mts.map +1 -0
- package/lib/MessageStream.d.ts +121 -0
- package/lib/MessageStream.d.ts.map +1 -0
- package/lib/MessageStream.js +595 -0
- package/lib/MessageStream.js.map +1 -0
- package/lib/MessageStream.mjs +591 -0
- package/lib/MessageStream.mjs.map +1 -0
- package/lib/beta-parser.d.mts +37 -0
- package/lib/beta-parser.d.mts.map +1 -0
- package/lib/beta-parser.d.ts +37 -0
- package/lib/beta-parser.d.ts.map +1 -0
- package/lib/beta-parser.js +79 -0
- package/lib/beta-parser.js.map +1 -0
- package/lib/beta-parser.mjs +75 -0
- package/lib/beta-parser.mjs.map +1 -0
- package/lib/credentials/credential-chain.d.mts +39 -0
- package/lib/credentials/credential-chain.d.mts.map +1 -0
- package/lib/credentials/credential-chain.d.ts +39 -0
- package/lib/credentials/credential-chain.d.ts.map +1 -0
- package/lib/credentials/credential-chain.js +245 -0
- package/lib/credentials/credential-chain.js.map +1 -0
- package/lib/credentials/credential-chain.mjs +208 -0
- package/lib/credentials/credential-chain.mjs.map +1 -0
- package/lib/credentials/identity-token.d.mts +11 -0
- package/lib/credentials/identity-token.d.mts.map +1 -0
- package/lib/credentials/identity-token.d.ts +11 -0
- package/lib/credentials/identity-token.d.ts.map +1 -0
- package/lib/credentials/identity-token.js +72 -0
- package/lib/credentials/identity-token.js.map +1 -0
- package/lib/credentials/identity-token.mjs +35 -0
- package/lib/credentials/identity-token.mjs.map +1 -0
- package/lib/credentials/oidc-federation.d.mts +40 -0
- package/lib/credentials/oidc-federation.d.mts.map +1 -0
- package/lib/credentials/oidc-federation.d.ts +40 -0
- package/lib/credentials/oidc-federation.d.ts.map +1 -0
- package/lib/credentials/oidc-federation.js +82 -0
- package/lib/credentials/oidc-federation.js.map +1 -0
- package/lib/credentials/oidc-federation.mjs +79 -0
- package/lib/credentials/oidc-federation.mjs.map +1 -0
- package/lib/credentials/token-cache.d.mts +54 -0
- package/lib/credentials/token-cache.d.mts.map +1 -0
- package/lib/credentials/token-cache.d.ts +54 -0
- package/lib/credentials/token-cache.d.ts.map +1 -0
- package/lib/credentials/token-cache.js +112 -0
- package/lib/credentials/token-cache.js.map +1 -0
- package/lib/credentials/token-cache.mjs +108 -0
- package/lib/credentials/token-cache.mjs.map +1 -0
- package/lib/credentials/types.d.mts +96 -0
- package/lib/credentials/types.d.mts.map +1 -0
- package/lib/credentials/types.d.ts +96 -0
- package/lib/credentials/types.d.ts.map +1 -0
- package/lib/credentials/types.js +266 -0
- package/lib/credentials/types.js.map +1 -0
- package/lib/credentials/types.mjs +224 -0
- package/lib/credentials/types.mjs.map +1 -0
- package/lib/credentials/user-oauth.d.mts +21 -0
- package/lib/credentials/user-oauth.d.mts.map +1 -0
- package/lib/credentials/user-oauth.d.ts +21 -0
- package/lib/credentials/user-oauth.d.ts.map +1 -0
- package/lib/credentials/user-oauth.js +130 -0
- package/lib/credentials/user-oauth.js.map +1 -0
- package/lib/credentials/user-oauth.mjs +94 -0
- package/lib/credentials/user-oauth.mjs.map +1 -0
- package/lib/credentials.d.mts +4 -0
- package/lib/credentials.d.mts.map +1 -0
- package/lib/credentials.d.ts +4 -0
- package/lib/credentials.d.ts.map +1 -0
- package/lib/credentials.js +8 -0
- package/lib/credentials.js.map +1 -0
- package/lib/credentials.mjs +3 -0
- package/lib/credentials.mjs.map +1 -0
- package/lib/environments/index.d.mts +4 -0
- package/lib/environments/index.d.mts.map +1 -0
- package/lib/environments/index.d.ts +4 -0
- package/lib/environments/index.d.ts.map +1 -0
- package/lib/environments/index.js +18 -0
- package/lib/environments/index.js.map +1 -0
- package/lib/environments/index.mjs +4 -0
- package/lib/environments/index.mjs.map +1 -0
- package/lib/environments/poller.d.mts +93 -0
- package/lib/environments/poller.d.mts.map +1 -0
- package/lib/environments/poller.d.ts +93 -0
- package/lib/environments/poller.d.ts.map +1 -0
- package/lib/environments/poller.js +185 -0
- package/lib/environments/poller.js.map +1 -0
- package/lib/environments/poller.mjs +176 -0
- package/lib/environments/poller.mjs.map +1 -0
- package/lib/environments/worker.d.mts +150 -0
- package/lib/environments/worker.d.mts.map +1 -0
- package/lib/environments/worker.d.ts +150 -0
- package/lib/environments/worker.d.ts.map +1 -0
- package/lib/environments/worker.js +271 -0
- package/lib/environments/worker.js.map +1 -0
- package/lib/environments/worker.mjs +267 -0
- package/lib/environments/worker.mjs.map +1 -0
- package/lib/helper-client.d.mts +34 -0
- package/lib/helper-client.d.mts.map +1 -0
- package/lib/helper-client.d.ts +34 -0
- package/lib/helper-client.d.ts.map +1 -0
- package/lib/helper-client.js +73 -0
- package/lib/helper-client.js.map +1 -0
- package/lib/helper-client.mjs +70 -0
- package/lib/helper-client.mjs.map +1 -0
- package/lib/middleware.d.mts +96 -0
- package/lib/middleware.d.mts.map +1 -0
- package/lib/middleware.d.ts +96 -0
- package/lib/middleware.d.ts.map +1 -0
- package/lib/middleware.js +711 -0
- package/lib/middleware.js.map +1 -0
- package/lib/middleware.mjs +706 -0
- package/lib/middleware.mjs.map +1 -0
- package/lib/parser.d.mts +32 -0
- package/lib/parser.d.mts.map +1 -0
- package/lib/parser.d.ts +32 -0
- package/lib/parser.d.ts.map +1 -0
- package/lib/parser.js +66 -0
- package/lib/parser.js.map +1 -0
- package/lib/parser.mjs +62 -0
- package/lib/parser.mjs.map +1 -0
- package/lib/sessions/accumulate.d.mts +22 -0
- package/lib/sessions/accumulate.d.mts.map +1 -0
- package/lib/sessions/accumulate.d.ts +22 -0
- package/lib/sessions/accumulate.d.ts.map +1 -0
- package/lib/sessions/accumulate.js +87 -0
- package/lib/sessions/accumulate.js.map +1 -0
- package/lib/sessions/accumulate.mjs +84 -0
- package/lib/sessions/accumulate.mjs.map +1 -0
- package/lib/tools/BetaRunnableTool.d.mts +68 -0
- package/lib/tools/BetaRunnableTool.d.mts.map +1 -0
- package/lib/tools/BetaRunnableTool.d.ts +68 -0
- package/lib/tools/BetaRunnableTool.d.ts.map +1 -0
- package/lib/tools/BetaRunnableTool.js +40 -0
- package/lib/tools/BetaRunnableTool.js.map +1 -0
- package/lib/tools/BetaRunnableTool.mjs +35 -0
- package/lib/tools/BetaRunnableTool.mjs.map +1 -0
- package/lib/tools/BetaToolRunner.d.mts +161 -0
- package/lib/tools/BetaToolRunner.d.mts.map +1 -0
- package/lib/tools/BetaToolRunner.d.ts +161 -0
- package/lib/tools/BetaToolRunner.d.ts.map +1 -0
- package/lib/tools/BetaToolRunner.js +400 -0
- package/lib/tools/BetaToolRunner.js.map +1 -0
- package/lib/tools/BetaToolRunner.mjs +396 -0
- package/lib/tools/BetaToolRunner.mjs.map +1 -0
- package/lib/tools/CompactionControl.d.mts +30 -0
- package/lib/tools/CompactionControl.d.mts.map +1 -0
- package/lib/tools/CompactionControl.d.ts +30 -0
- package/lib/tools/CompactionControl.d.ts.map +1 -0
- package/lib/tools/CompactionControl.js +28 -0
- package/lib/tools/CompactionControl.js.map +1 -0
- package/lib/tools/CompactionControl.mjs +25 -0
- package/lib/tools/CompactionControl.mjs.map +1 -0
- package/lib/tools/SessionToolRunner.d.mts +154 -0
- package/lib/tools/SessionToolRunner.d.mts.map +1 -0
- package/lib/tools/SessionToolRunner.d.ts +154 -0
- package/lib/tools/SessionToolRunner.d.ts.map +1 -0
- package/lib/tools/SessionToolRunner.js +474 -0
- package/lib/tools/SessionToolRunner.js.map +1 -0
- package/lib/tools/SessionToolRunner.mjs +470 -0
- package/lib/tools/SessionToolRunner.mjs.map +1 -0
- package/lib/tools/ToolError.d.mts +33 -0
- package/lib/tools/ToolError.d.mts.map +1 -0
- package/lib/tools/ToolError.d.ts +33 -0
- package/lib/tools/ToolError.d.ts.map +1 -0
- package/lib/tools/ToolError.js +42 -0
- package/lib/tools/ToolError.js.map +1 -0
- package/lib/tools/ToolError.mjs +38 -0
- package/lib/tools/ToolError.mjs.map +1 -0
- package/lib/tools/ToolRunner.d.mts +132 -0
- package/lib/tools/ToolRunner.d.mts.map +1 -0
- package/lib/tools/ToolRunner.d.ts +132 -0
- package/lib/tools/ToolRunner.d.ts.map +1 -0
- package/lib/tools/ToolRunner.js +294 -0
- package/lib/tools/ToolRunner.js.map +1 -0
- package/lib/tools/ToolRunner.mjs +290 -0
- package/lib/tools/ToolRunner.mjs.map +1 -0
- package/lib/transform-json-schema.d.mts +3 -0
- package/lib/transform-json-schema.d.mts.map +1 -0
- package/lib/transform-json-schema.d.ts +3 -0
- package/lib/transform-json-schema.d.ts.map +1 -0
- package/lib/transform-json-schema.js +114 -0
- package/lib/transform-json-schema.js.map +1 -0
- package/lib/transform-json-schema.mjs +111 -0
- package/lib/transform-json-schema.mjs.map +1 -0
- package/package.json +266 -0
- package/pagination.d.mts +3 -0
- package/pagination.d.mts.map +1 -0
- package/pagination.d.ts +3 -0
- package/pagination.d.ts.map +1 -0
- package/pagination.js +6 -0
- package/pagination.js.map +1 -0
- package/pagination.mjs +3 -0
- package/pagination.mjs.map +1 -0
- package/resource.d.mts +3 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +3 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +6 -0
- package/resource.js.map +1 -0
- package/resource.mjs +3 -0
- package/resource.mjs.map +1 -0
- package/resources/beta/agents/agents.d.mts +917 -0
- package/resources/beta/agents/agents.d.mts.map +1 -0
- package/resources/beta/agents/agents.d.ts +917 -0
- package/resources/beta/agents/agents.d.ts.map +1 -0
- package/resources/beta/agents/agents.js +133 -0
- package/resources/beta/agents/agents.js.map +1 -0
- package/resources/beta/agents/agents.mjs +128 -0
- package/resources/beta/agents/agents.mjs.map +1 -0
- package/resources/beta/agents/index.d.mts +3 -0
- package/resources/beta/agents/index.d.mts.map +1 -0
- package/resources/beta/agents/index.d.ts +3 -0
- package/resources/beta/agents/index.d.ts.map +1 -0
- package/resources/beta/agents/index.js +9 -0
- package/resources/beta/agents/index.js.map +1 -0
- package/resources/beta/agents/index.mjs +4 -0
- package/resources/beta/agents/index.mjs.map +1 -0
- package/resources/beta/agents/versions.d.mts +33 -0
- package/resources/beta/agents/versions.d.mts.map +1 -0
- package/resources/beta/agents/versions.d.ts +33 -0
- package/resources/beta/agents/versions.d.ts.map +1 -0
- package/resources/beta/agents/versions.js +36 -0
- package/resources/beta/agents/versions.js.map +1 -0
- package/resources/beta/agents/versions.mjs +32 -0
- package/resources/beta/agents/versions.mjs.map +1 -0
- package/resources/beta/agents.d.mts +2 -0
- package/resources/beta/agents.d.mts.map +1 -0
- package/resources/beta/agents.d.ts +2 -0
- package/resources/beta/agents.d.ts.map +1 -0
- package/resources/beta/agents.js +6 -0
- package/resources/beta/agents.js.map +1 -0
- package/resources/beta/agents.mjs +3 -0
- package/resources/beta/agents.mjs.map +1 -0
- package/resources/beta/beta.d.mts +102 -0
- package/resources/beta/beta.d.mts.map +1 -0
- package/resources/beta/beta.d.ts +102 -0
- package/resources/beta/beta.d.ts.map +1 -0
- package/resources/beta/beta.js +65 -0
- package/resources/beta/beta.js.map +1 -0
- package/resources/beta/beta.mjs +60 -0
- package/resources/beta/beta.mjs.map +1 -0
- package/resources/beta/deployment-runs.d.mts +311 -0
- package/resources/beta/deployment-runs.d.mts.map +1 -0
- package/resources/beta/deployment-runs.d.ts +311 -0
- package/resources/beta/deployment-runs.d.ts.map +1 -0
- package/resources/beta/deployment-runs.js +60 -0
- package/resources/beta/deployment-runs.js.map +1 -0
- package/resources/beta/deployment-runs.mjs +56 -0
- package/resources/beta/deployment-runs.mjs.map +1 -0
- package/resources/beta/deployments.d.mts +688 -0
- package/resources/beta/deployments.d.mts.map +1 -0
- package/resources/beta/deployments.d.ts +688 -0
- package/resources/beta/deployments.d.ts.map +1 -0
- package/resources/beta/deployments.js +201 -0
- package/resources/beta/deployments.js.map +1 -0
- package/resources/beta/deployments.mjs +197 -0
- package/resources/beta/deployments.mjs.map +1 -0
- package/resources/beta/environments/environments.d.mts +463 -0
- package/resources/beta/environments/environments.d.mts.map +1 -0
- package/resources/beta/environments/environments.d.ts +463 -0
- package/resources/beta/environments/environments.d.ts.map +1 -0
- package/resources/beta/environments/environments.js +150 -0
- package/resources/beta/environments/environments.js.map +1 -0
- package/resources/beta/environments/environments.mjs +145 -0
- package/resources/beta/environments/environments.mjs.map +1 -0
- package/resources/beta/environments/index.d.mts +3 -0
- package/resources/beta/environments/index.d.mts.map +1 -0
- package/resources/beta/environments/index.d.ts +3 -0
- package/resources/beta/environments/index.d.ts.map +1 -0
- package/resources/beta/environments/index.js +9 -0
- package/resources/beta/environments/index.js.map +1 -0
- package/resources/beta/environments/index.mjs +4 -0
- package/resources/beta/environments/index.mjs.map +1 -0
- package/resources/beta/environments/work.d.mts +499 -0
- package/resources/beta/environments/work.d.mts.map +1 -0
- package/resources/beta/environments/work.d.ts +499 -0
- package/resources/beta/environments/work.d.ts.map +1 -0
- package/resources/beta/environments/work.js +281 -0
- package/resources/beta/environments/work.js.map +1 -0
- package/resources/beta/environments/work.mjs +275 -0
- package/resources/beta/environments/work.mjs.map +1 -0
- package/resources/beta/environments.d.mts +2 -0
- package/resources/beta/environments.d.mts.map +1 -0
- package/resources/beta/environments.d.ts +2 -0
- package/resources/beta/environments.d.ts.map +1 -0
- package/resources/beta/environments.js +6 -0
- package/resources/beta/environments.js.map +1 -0
- package/resources/beta/environments.mjs +3 -0
- package/resources/beta/environments.mjs.map +1 -0
- package/resources/beta/files.d.mts +179 -0
- package/resources/beta/files.d.mts.map +1 -0
- package/resources/beta/files.d.ts +179 -0
- package/resources/beta/files.d.ts.map +1 -0
- package/resources/beta/files.js +132 -0
- package/resources/beta/files.js.map +1 -0
- package/resources/beta/files.mjs +128 -0
- package/resources/beta/files.mjs.map +1 -0
- package/resources/beta/index.d.mts +15 -0
- package/resources/beta/index.d.mts.map +1 -0
- package/resources/beta/index.d.ts +15 -0
- package/resources/beta/index.d.ts.map +1 -0
- package/resources/beta/index.js +33 -0
- package/resources/beta/index.js.map +1 -0
- package/resources/beta/index.mjs +16 -0
- package/resources/beta/index.mjs.map +1 -0
- package/resources/beta/memory-stores/index.d.mts +4 -0
- package/resources/beta/memory-stores/index.d.mts.map +1 -0
- package/resources/beta/memory-stores/index.d.ts +4 -0
- package/resources/beta/memory-stores/index.d.ts.map +1 -0
- package/resources/beta/memory-stores/index.js +11 -0
- package/resources/beta/memory-stores/index.js.map +1 -0
- package/resources/beta/memory-stores/index.mjs +5 -0
- package/resources/beta/memory-stores/index.mjs.map +1 -0
- package/resources/beta/memory-stores/memories.d.mts +368 -0
- package/resources/beta/memory-stores/memories.d.mts.map +1 -0
- package/resources/beta/memory-stores/memories.d.ts +368 -0
- package/resources/beta/memory-stores/memories.d.ts.map +1 -0
- package/resources/beta/memory-stores/memories.js +134 -0
- package/resources/beta/memory-stores/memories.js.map +1 -0
- package/resources/beta/memory-stores/memories.mjs +130 -0
- package/resources/beta/memory-stores/memories.mjs.map +1 -0
- package/resources/beta/memory-stores/memory-stores.d.mts +235 -0
- package/resources/beta/memory-stores/memory-stores.d.mts.map +1 -0
- package/resources/beta/memory-stores/memory-stores.d.ts +235 -0
- package/resources/beta/memory-stores/memory-stores.d.ts.map +1 -0
- package/resources/beta/memory-stores/memory-stores.js +149 -0
- package/resources/beta/memory-stores/memory-stores.js.map +1 -0
- package/resources/beta/memory-stores/memory-stores.mjs +144 -0
- package/resources/beta/memory-stores/memory-stores.mjs.map +1 -0
- package/resources/beta/memory-stores/memory-versions.d.mts +241 -0
- package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -0
- package/resources/beta/memory-stores/memory-versions.d.ts +241 -0
- package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -0
- package/resources/beta/memory-stores/memory-versions.js +85 -0
- package/resources/beta/memory-stores/memory-versions.js.map +1 -0
- package/resources/beta/memory-stores/memory-versions.mjs +81 -0
- package/resources/beta/memory-stores/memory-versions.mjs.map +1 -0
- package/resources/beta/memory-stores.d.mts +2 -0
- package/resources/beta/memory-stores.d.mts.map +1 -0
- package/resources/beta/memory-stores.d.ts +2 -0
- package/resources/beta/memory-stores.d.ts.map +1 -0
- package/resources/beta/memory-stores.js +6 -0
- package/resources/beta/memory-stores.js.map +1 -0
- package/resources/beta/memory-stores.mjs +3 -0
- package/resources/beta/memory-stores.mjs.map +1 -0
- package/resources/beta/messages/batches.d.mts +689 -0
- package/resources/beta/messages/batches.d.mts.map +1 -0
- package/resources/beta/messages/batches.d.ts +689 -0
- package/resources/beta/messages/batches.d.ts.map +1 -0
- package/resources/beta/messages/batches.js +212 -0
- package/resources/beta/messages/batches.js.map +1 -0
- package/resources/beta/messages/batches.mjs +208 -0
- package/resources/beta/messages/batches.mjs.map +1 -0
- package/resources/beta/messages/index.d.mts +4 -0
- package/resources/beta/messages/index.d.mts.map +1 -0
- package/resources/beta/messages/index.d.ts +4 -0
- package/resources/beta/messages/index.d.ts.map +1 -0
- package/resources/beta/messages/index.js +12 -0
- package/resources/beta/messages/index.js.map +1 -0
- package/resources/beta/messages/index.mjs +5 -0
- package/resources/beta/messages/index.mjs.map +1 -0
- package/resources/beta/messages/messages.d.mts +3795 -0
- package/resources/beta/messages/messages.d.mts.map +1 -0
- package/resources/beta/messages/messages.d.ts +3795 -0
- package/resources/beta/messages/messages.d.ts.map +1 -0
- package/resources/beta/messages/messages.js +188 -0
- package/resources/beta/messages/messages.js.map +1 -0
- package/resources/beta/messages/messages.mjs +181 -0
- package/resources/beta/messages/messages.mjs.map +1 -0
- package/resources/beta/messages.d.mts +2 -0
- package/resources/beta/messages.d.mts.map +1 -0
- package/resources/beta/messages.d.ts +2 -0
- package/resources/beta/messages.d.ts.map +1 -0
- package/resources/beta/messages.js +6 -0
- package/resources/beta/messages.js.map +1 -0
- package/resources/beta/messages.mjs +3 -0
- package/resources/beta/messages.mjs.map +1 -0
- package/resources/beta/models.d.mts +223 -0
- package/resources/beta/models.d.mts.map +1 -0
- package/resources/beta/models.d.ts +223 -0
- package/resources/beta/models.d.ts.map +1 -0
- package/resources/beta/models.js +65 -0
- package/resources/beta/models.js.map +1 -0
- package/resources/beta/models.mjs +61 -0
- package/resources/beta/models.mjs.map +1 -0
- package/resources/beta/sessions/events.d.mts +1466 -0
- package/resources/beta/sessions/events.d.mts.map +1 -0
- package/resources/beta/sessions/events.d.ts +1466 -0
- package/resources/beta/sessions/events.d.ts.map +1 -0
- package/resources/beta/sessions/events.js +122 -0
- package/resources/beta/sessions/events.js.map +1 -0
- package/resources/beta/sessions/events.mjs +117 -0
- package/resources/beta/sessions/events.mjs.map +1 -0
- package/resources/beta/sessions/index.d.mts +5 -0
- package/resources/beta/sessions/index.d.mts.map +1 -0
- package/resources/beta/sessions/index.d.ts +5 -0
- package/resources/beta/sessions/index.d.ts.map +1 -0
- package/resources/beta/sessions/index.js +13 -0
- package/resources/beta/sessions/index.js.map +1 -0
- package/resources/beta/sessions/index.mjs +6 -0
- package/resources/beta/sessions/index.mjs.map +1 -0
- package/resources/beta/sessions/resources.d.mts +231 -0
- package/resources/beta/sessions/resources.d.mts.map +1 -0
- package/resources/beta/sessions/resources.d.ts +231 -0
- package/resources/beta/sessions/resources.d.ts.map +1 -0
- package/resources/beta/sessions/resources.js +135 -0
- package/resources/beta/sessions/resources.js.map +1 -0
- package/resources/beta/sessions/resources.mjs +131 -0
- package/resources/beta/sessions/resources.mjs.map +1 -0
- package/resources/beta/sessions/sessions.d.mts +819 -0
- package/resources/beta/sessions/sessions.d.mts.map +1 -0
- package/resources/beta/sessions/sessions.d.ts +819 -0
- package/resources/beta/sessions/sessions.d.ts.map +1 -0
- package/resources/beta/sessions/sessions.js +159 -0
- package/resources/beta/sessions/sessions.js.map +1 -0
- package/resources/beta/sessions/sessions.mjs +154 -0
- package/resources/beta/sessions/sessions.mjs.map +1 -0
- package/resources/beta/sessions/threads/events.d.mts +64 -0
- package/resources/beta/sessions/threads/events.d.mts.map +1 -0
- package/resources/beta/sessions/threads/events.d.ts +64 -0
- package/resources/beta/sessions/threads/events.d.ts.map +1 -0
- package/resources/beta/sessions/threads/events.js +60 -0
- package/resources/beta/sessions/threads/events.js.map +1 -0
- package/resources/beta/sessions/threads/events.mjs +56 -0
- package/resources/beta/sessions/threads/events.mjs.map +1 -0
- package/resources/beta/sessions/threads/index.d.mts +3 -0
- package/resources/beta/sessions/threads/index.d.mts.map +1 -0
- package/resources/beta/sessions/threads/index.d.ts +3 -0
- package/resources/beta/sessions/threads/index.d.ts.map +1 -0
- package/resources/beta/sessions/threads/index.js +9 -0
- package/resources/beta/sessions/threads/index.js.map +1 -0
- package/resources/beta/sessions/threads/index.mjs +4 -0
- package/resources/beta/sessions/threads/index.mjs.map +1 -0
- package/resources/beta/sessions/threads/threads.d.mts +183 -0
- package/resources/beta/sessions/threads/threads.d.mts.map +1 -0
- package/resources/beta/sessions/threads/threads.d.ts +183 -0
- package/resources/beta/sessions/threads/threads.d.ts.map +1 -0
- package/resources/beta/sessions/threads/threads.js +88 -0
- package/resources/beta/sessions/threads/threads.js.map +1 -0
- package/resources/beta/sessions/threads/threads.mjs +83 -0
- package/resources/beta/sessions/threads/threads.mjs.map +1 -0
- package/resources/beta/sessions/threads.d.mts +2 -0
- package/resources/beta/sessions/threads.d.mts.map +1 -0
- package/resources/beta/sessions/threads.d.ts +2 -0
- package/resources/beta/sessions/threads.d.ts.map +1 -0
- package/resources/beta/sessions/threads.js +6 -0
- package/resources/beta/sessions/threads.js.map +1 -0
- package/resources/beta/sessions/threads.mjs +3 -0
- package/resources/beta/sessions/threads.mjs.map +1 -0
- package/resources/beta/sessions.d.mts +2 -0
- package/resources/beta/sessions.d.mts.map +1 -0
- package/resources/beta/sessions.d.ts +2 -0
- package/resources/beta/sessions.d.ts.map +1 -0
- package/resources/beta/sessions.js +6 -0
- package/resources/beta/sessions.js.map +1 -0
- package/resources/beta/sessions.mjs +3 -0
- package/resources/beta/sessions.mjs.map +1 -0
- package/resources/beta/skills/index.d.mts +3 -0
- package/resources/beta/skills/index.d.mts.map +1 -0
- package/resources/beta/skills/index.d.ts +3 -0
- package/resources/beta/skills/index.d.ts.map +1 -0
- package/resources/beta/skills/index.js +9 -0
- package/resources/beta/skills/index.js.map +1 -0
- package/resources/beta/skills/index.mjs +4 -0
- package/resources/beta/skills/index.mjs.map +1 -0
- package/resources/beta/skills/skills.d.mts +258 -0
- package/resources/beta/skills/skills.d.mts.map +1 -0
- package/resources/beta/skills/skills.d.ts +258 -0
- package/resources/beta/skills/skills.d.ts.map +1 -0
- package/resources/beta/skills/skills.js +105 -0
- package/resources/beta/skills/skills.js.map +1 -0
- package/resources/beta/skills/skills.mjs +100 -0
- package/resources/beta/skills/skills.mjs.map +1 -0
- package/resources/beta/skills/versions.d.mts +298 -0
- package/resources/beta/skills/versions.d.mts.map +1 -0
- package/resources/beta/skills/versions.d.ts +298 -0
- package/resources/beta/skills/versions.d.ts.map +1 -0
- package/resources/beta/skills/versions.js +137 -0
- package/resources/beta/skills/versions.js.map +1 -0
- package/resources/beta/skills/versions.mjs +133 -0
- package/resources/beta/skills/versions.mjs.map +1 -0
- package/resources/beta/skills.d.mts +2 -0
- package/resources/beta/skills.d.mts.map +1 -0
- package/resources/beta/skills.d.ts +2 -0
- package/resources/beta/skills.d.ts.map +1 -0
- package/resources/beta/skills.js +6 -0
- package/resources/beta/skills.js.map +1 -0
- package/resources/beta/skills.mjs +3 -0
- package/resources/beta/skills.mjs.map +1 -0
- package/resources/beta/user-profiles.d.mts +228 -0
- package/resources/beta/user-profiles.d.mts.map +1 -0
- package/resources/beta/user-profiles.d.ts +228 -0
- package/resources/beta/user-profiles.d.ts.map +1 -0
- package/resources/beta/user-profiles.js +123 -0
- package/resources/beta/user-profiles.js.map +1 -0
- package/resources/beta/user-profiles.mjs +119 -0
- package/resources/beta/user-profiles.mjs.map +1 -0
- package/resources/beta/vaults/credentials.d.mts +843 -0
- package/resources/beta/vaults/credentials.d.mts.map +1 -0
- package/resources/beta/vaults/credentials.d.ts +843 -0
- package/resources/beta/vaults/credentials.d.ts.map +1 -0
- package/resources/beta/vaults/credentials.js +177 -0
- package/resources/beta/vaults/credentials.js.map +1 -0
- package/resources/beta/vaults/credentials.mjs +173 -0
- package/resources/beta/vaults/credentials.mjs.map +1 -0
- package/resources/beta/vaults/index.d.mts +3 -0
- package/resources/beta/vaults/index.d.mts.map +1 -0
- package/resources/beta/vaults/index.d.ts +3 -0
- package/resources/beta/vaults/index.d.ts.map +1 -0
- package/resources/beta/vaults/index.js +9 -0
- package/resources/beta/vaults/index.js.map +1 -0
- package/resources/beta/vaults/index.mjs +4 -0
- package/resources/beta/vaults/index.mjs.map +1 -0
- package/resources/beta/vaults/vaults.d.mts +192 -0
- package/resources/beta/vaults/vaults.d.mts.map +1 -0
- package/resources/beta/vaults/vaults.d.ts +192 -0
- package/resources/beta/vaults/vaults.d.ts.map +1 -0
- package/resources/beta/vaults/vaults.js +149 -0
- package/resources/beta/vaults/vaults.js.map +1 -0
- package/resources/beta/vaults/vaults.mjs +144 -0
- package/resources/beta/vaults/vaults.mjs.map +1 -0
- package/resources/beta/vaults.d.mts +2 -0
- package/resources/beta/vaults.d.mts.map +1 -0
- package/resources/beta/vaults.d.ts +2 -0
- package/resources/beta/vaults.d.ts.map +1 -0
- package/resources/beta/vaults.js +6 -0
- package/resources/beta/vaults.js.map +1 -0
- package/resources/beta/vaults.mjs +3 -0
- package/resources/beta/vaults.mjs.map +1 -0
- package/resources/beta/webhooks.d.mts +399 -0
- package/resources/beta/webhooks.d.mts.map +1 -0
- package/resources/beta/webhooks.d.ts +399 -0
- package/resources/beta/webhooks.d.ts.map +1 -0
- package/resources/beta/webhooks.js +25 -0
- package/resources/beta/webhooks.js.map +1 -0
- package/resources/beta/webhooks.mjs +21 -0
- package/resources/beta/webhooks.mjs.map +1 -0
- package/resources/beta.d.mts +2 -0
- package/resources/beta.d.mts.map +1 -0
- package/resources/beta.d.ts +2 -0
- package/resources/beta.d.ts.map +1 -0
- package/resources/beta.js +6 -0
- package/resources/beta.js.map +1 -0
- package/resources/beta.mjs +3 -0
- package/resources/beta.mjs.map +1 -0
- package/resources/completions.d.mts +173 -0
- package/resources/completions.d.mts.map +1 -0
- package/resources/completions.d.ts +173 -0
- package/resources/completions.d.ts.map +1 -0
- package/resources/completions.js +23 -0
- package/resources/completions.js.map +1 -0
- package/resources/completions.mjs +19 -0
- package/resources/completions.mjs.map +1 -0
- package/resources/index.d.mts +6 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +6 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +15 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +7 -0
- package/resources/index.mjs.map +1 -0
- package/resources/messages/batches.d.mts +313 -0
- package/resources/messages/batches.d.mts.map +1 -0
- package/resources/messages/batches.d.ts +313 -0
- package/resources/messages/batches.d.ts.map +1 -0
- package/resources/messages/batches.js +161 -0
- package/resources/messages/batches.js.map +1 -0
- package/resources/messages/batches.mjs +157 -0
- package/resources/messages/batches.mjs.map +1 -0
- package/resources/messages/index.d.mts +3 -0
- package/resources/messages/index.d.mts.map +1 -0
- package/resources/messages/index.d.ts +3 -0
- package/resources/messages/index.d.ts.map +1 -0
- package/resources/messages/index.js +9 -0
- package/resources/messages/index.js.map +1 -0
- package/resources/messages/index.mjs +4 -0
- package/resources/messages/index.mjs.map +1 -0
- package/resources/messages/messages.d.mts +2580 -0
- package/resources/messages/messages.d.mts.map +1 -0
- package/resources/messages/messages.d.ts +2580 -0
- package/resources/messages/messages.d.ts.map +1 -0
- package/resources/messages/messages.js +148 -0
- package/resources/messages/messages.js.map +1 -0
- package/resources/messages/messages.mjs +143 -0
- package/resources/messages/messages.mjs.map +1 -0
- package/resources/messages.d.mts +2 -0
- package/resources/messages.d.mts.map +1 -0
- package/resources/messages.d.ts +2 -0
- package/resources/messages.d.ts.map +1 -0
- package/resources/messages.js +6 -0
- package/resources/messages.js.map +1 -0
- package/resources/messages.mjs +3 -0
- package/resources/messages.mjs.map +1 -0
- package/resources/models.d.mts +197 -0
- package/resources/models.d.mts.map +1 -0
- package/resources/models.d.ts +197 -0
- package/resources/models.d.ts.map +1 -0
- package/resources/models.js +45 -0
- package/resources/models.js.map +1 -0
- package/resources/models.mjs +41 -0
- package/resources/models.mjs.map +1 -0
- package/resources/shared.d.mts +59 -0
- package/resources/shared.d.mts.map +1 -0
- package/resources/shared.d.ts +59 -0
- package/resources/shared.d.ts.map +1 -0
- package/resources/shared.js +4 -0
- package/resources/shared.js.map +1 -0
- package/resources/shared.mjs +3 -0
- package/resources/shared.mjs.map +1 -0
- package/resources/top-level.d.mts +2 -0
- package/resources/top-level.d.mts.map +1 -0
- package/resources/top-level.d.ts +2 -0
- package/resources/top-level.d.ts.map +1 -0
- package/resources/top-level.js +4 -0
- package/resources/top-level.js.map +1 -0
- package/resources/top-level.mjs +3 -0
- package/resources/top-level.mjs.map +1 -0
- package/resources.d.mts +2 -0
- package/resources.d.mts.map +1 -0
- package/resources.d.ts +2 -0
- package/resources.d.ts.map +1 -0
- package/resources.js +5 -0
- package/resources.js.map +1 -0
- package/resources.mjs +2 -0
- package/resources.mjs.map +1 -0
- package/src/_vendor/partial-json-parser/README.md +3 -0
- package/src/_vendor/partial-json-parser/parser.ts +280 -0
- package/src/api-promise.ts +2 -0
- package/src/client.ts +1858 -0
- package/src/core/README.md +3 -0
- package/src/core/api-promise.ts +101 -0
- package/src/core/api.ts +11 -0
- package/src/core/credentials.ts +379 -0
- package/src/core/error.ts +160 -0
- package/src/core/middleware.ts +339 -0
- package/src/core/pagination.ts +378 -0
- package/src/core/resource.ts +11 -0
- package/src/core/streaming.ts +403 -0
- package/src/core/uploads.ts +2 -0
- package/src/error.ts +2 -0
- package/src/helpers/beta/environments.ts +36 -0
- package/src/helpers/beta/json-schema.ts +85 -0
- package/src/helpers/beta/mcp.ts +624 -0
- package/src/helpers/beta/memory.ts +28 -0
- package/src/helpers/beta/zod.ts +81 -0
- package/src/helpers/index.ts +2 -0
- package/src/helpers/json-schema.ts +48 -0
- package/src/helpers/zod.ts +57 -0
- package/src/index.ts +47 -0
- package/src/internal/README.md +3 -0
- package/src/internal/builtin-types.ts +93 -0
- package/src/internal/constants.ts +15 -0
- package/src/internal/decoders/jsonl.ts +48 -0
- package/src/internal/decoders/line.ts +135 -0
- package/src/internal/detect-platform.ts +196 -0
- package/src/internal/errors.ts +33 -0
- package/src/internal/headers.ts +142 -0
- package/src/internal/message-stream-utils.ts +30 -0
- package/src/internal/parse.ts +86 -0
- package/src/internal/qs/LICENSE.md +13 -0
- package/src/internal/qs/README.md +3 -0
- package/src/internal/qs/formats.ts +10 -0
- package/src/internal/qs/index.ts +13 -0
- package/src/internal/qs/stringify.ts +385 -0
- package/src/internal/qs/types.ts +71 -0
- package/src/internal/qs/utils.ts +265 -0
- package/src/internal/request-options.ts +146 -0
- package/src/internal/shim-types.ts +26 -0
- package/src/internal/shims.ts +107 -0
- package/src/internal/stainless-helper-header.ts +122 -0
- package/src/internal/stream-utils.ts +32 -0
- package/src/internal/to-file.ts +159 -0
- package/src/internal/types.ts +93 -0
- package/src/internal/uploads.ts +204 -0
- package/src/internal/utils/abort.ts +21 -0
- package/src/internal/utils/async-queue.ts +66 -0
- package/src/internal/utils/backoff.ts +41 -0
- package/src/internal/utils/base64.ts +40 -0
- package/src/internal/utils/bytes.ts +32 -0
- package/src/internal/utils/env.ts +18 -0
- package/src/internal/utils/log.ts +158 -0
- package/src/internal/utils/path.ts +88 -0
- package/src/internal/utils/promise.ts +18 -0
- package/src/internal/utils/query.ts +7 -0
- package/src/internal/utils/sleep.ts +26 -0
- package/src/internal/utils/time.ts +4 -0
- package/src/internal/utils/uuid.ts +17 -0
- package/src/internal/utils/values.ts +112 -0
- package/src/internal/utils.ts +9 -0
- package/src/lib/.keep +4 -0
- package/src/lib/BetaMessageStream.ts +781 -0
- package/src/lib/MessageStream.ts +740 -0
- package/src/lib/beta-parser.ts +148 -0
- package/src/lib/credentials/credential-chain.ts +292 -0
- package/src/lib/credentials/identity-token.ts +37 -0
- package/src/lib/credentials/oidc-federation.ts +140 -0
- package/src/lib/credentials/token-cache.ts +130 -0
- package/src/lib/credentials/types.ts +295 -0
- package/src/lib/credentials/user-oauth.ts +144 -0
- package/src/lib/credentials.ts +3 -0
- package/src/lib/environments/index.ts +23 -0
- package/src/lib/environments/poller.ts +257 -0
- package/src/lib/environments/worker.ts +404 -0
- package/src/lib/helper-client.ts +102 -0
- package/src/lib/middleware.ts +949 -0
- package/src/lib/parser.ts +125 -0
- package/src/lib/sessions/accumulate.ts +129 -0
- package/src/lib/tools/BetaRunnableTool.ts +130 -0
- package/src/lib/tools/BetaToolRunner.ts +542 -0
- package/src/lib/tools/CompactionControl.ts +57 -0
- package/src/lib/tools/SessionToolRunner.ts +616 -0
- package/src/lib/tools/ToolError.ts +47 -0
- package/src/lib/tools/ToolRunner.ts +381 -0
- package/src/lib/transform-json-schema.ts +124 -0
- package/src/pagination.ts +2 -0
- package/src/resource.ts +2 -0
- package/src/resources/beta/agents/agents.ts +1279 -0
- package/src/resources/beta/agents/index.ts +65 -0
- package/src/resources/beta/agents/versions.ts +58 -0
- package/src/resources/beta/agents.ts +3 -0
- package/src/resources/beta/beta.ts +1267 -0
- package/src/resources/beta/deployment-runs.ts +446 -0
- package/src/resources/beta/deployments.ts +982 -0
- package/src/resources/beta/environments/environments.ts +673 -0
- package/src/resources/beta/environments/index.ts +45 -0
- package/src/resources/beta/environments/work.ts +699 -0
- package/src/resources/beta/environments.ts +3 -0
- package/src/resources/beta/files.ts +294 -0
- package/src/resources/beta/index.ts +570 -0
- package/src/resources/beta/memory-stores/index.ts +47 -0
- package/src/resources/beta/memory-stores/memories.ts +535 -0
- package/src/resources/beta/memory-stores/memory-stores.ts +422 -0
- package/src/resources/beta/memory-stores/memory-versions.ts +348 -0
- package/src/resources/beta/memory-stores.ts +3 -0
- package/src/resources/beta/messages/batches.ts +877 -0
- package/src/resources/beta/messages/index.ts +261 -0
- package/src/resources/beta/messages/messages.ts +5454 -0
- package/src/resources/beta/messages.ts +3 -0
- package/src/resources/beta/models.ts +301 -0
- package/src/resources/beta/sessions/events.ts +2036 -0
- package/src/resources/beta/sessions/index.ts +154 -0
- package/src/resources/beta/sessions/resources.ts +373 -0
- package/src/resources/beta/sessions/sessions.ts +1341 -0
- package/src/resources/beta/sessions/threads/events.ts +107 -0
- package/src/resources/beta/sessions/threads/index.ts +15 -0
- package/src/resources/beta/sessions/threads/threads.ts +314 -0
- package/src/resources/beta/sessions/threads.ts +3 -0
- package/src/resources/beta/sessions.ts +3 -0
- package/src/resources/beta/skills/index.ts +27 -0
- package/src/resources/beta/skills/skills.ts +392 -0
- package/src/resources/beta/skills/versions.ts +433 -0
- package/src/resources/beta/skills.ts +3 -0
- package/src/resources/beta/user-profiles.ts +330 -0
- package/src/resources/beta/vaults/credentials.ts +1172 -0
- package/src/resources/beta/vaults/index.ts +66 -0
- package/src/resources/beta/vaults/vaults.ts +409 -0
- package/src/resources/beta/vaults.ts +3 -0
- package/src/resources/beta/webhooks.ts +647 -0
- package/src/resources/beta.ts +3 -0
- package/src/resources/completions.ts +221 -0
- package/src/resources/index.ts +211 -0
- package/src/resources/messages/batches.ts +414 -0
- package/src/resources/messages/index.ts +194 -0
- package/src/resources/messages/messages.ts +3765 -0
- package/src/resources/messages.ts +3 -0
- package/src/resources/models.ts +274 -0
- package/src/resources/shared.ts +112 -0
- package/src/resources/top-level.ts +3 -0
- package/src/resources.ts +1 -0
- package/src/streaming.ts +2 -0
- package/src/tools/agent-toolset/fs-util.ts +157 -0
- package/src/tools/agent-toolset/node.browser.ts +90 -0
- package/src/tools/agent-toolset/node.ts +817 -0
- package/src/tools/agent-toolset/skills.ts +256 -0
- package/src/tools/memory/node.browser.ts +64 -0
- package/src/tools/memory/node.ts +400 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +2 -0
- package/src/version.ts +1 -0
- package/streaming.d.mts +3 -0
- package/streaming.d.mts.map +1 -0
- package/streaming.d.ts +3 -0
- package/streaming.d.ts.map +1 -0
- package/streaming.js +6 -0
- package/streaming.js.map +1 -0
- package/streaming.mjs +3 -0
- package/streaming.mjs.map +1 -0
- package/tools/agent-toolset/fs-util.d.mts +50 -0
- package/tools/agent-toolset/fs-util.d.mts.map +1 -0
- package/tools/agent-toolset/fs-util.d.ts +50 -0
- package/tools/agent-toolset/fs-util.d.ts.map +1 -0
- package/tools/agent-toolset/fs-util.js +162 -0
- package/tools/agent-toolset/fs-util.js.map +1 -0
- package/tools/agent-toolset/fs-util.mjs +154 -0
- package/tools/agent-toolset/fs-util.mjs.map +1 -0
- package/tools/agent-toolset/node.browser.d.mts +42 -0
- package/tools/agent-toolset/node.browser.d.mts.map +1 -0
- package/tools/agent-toolset/node.browser.d.ts +42 -0
- package/tools/agent-toolset/node.browser.d.ts.map +1 -0
- package/tools/agent-toolset/node.browser.js +81 -0
- package/tools/agent-toolset/node.browser.js.map +1 -0
- package/tools/agent-toolset/node.browser.mjs +66 -0
- package/tools/agent-toolset/node.browser.mjs.map +1 -0
- package/tools/agent-toolset/node.d.mts +149 -0
- package/tools/agent-toolset/node.d.mts.map +1 -0
- package/tools/agent-toolset/node.d.ts +149 -0
- package/tools/agent-toolset/node.d.ts.map +1 -0
- package/tools/agent-toolset/node.js +768 -0
- package/tools/agent-toolset/node.js.map +1 -0
- package/tools/agent-toolset/node.mjs +753 -0
- package/tools/agent-toolset/node.mjs.map +1 -0
- package/tools/agent-toolset/skills.d.mts +50 -0
- package/tools/agent-toolset/skills.d.mts.map +1 -0
- package/tools/agent-toolset/skills.d.ts +50 -0
- package/tools/agent-toolset/skills.d.ts.map +1 -0
- package/tools/agent-toolset/skills.js +249 -0
- package/tools/agent-toolset/skills.js.map +1 -0
- package/tools/agent-toolset/skills.mjs +243 -0
- package/tools/agent-toolset/skills.mjs.map +1 -0
- package/tools/memory/node.browser.d.mts +27 -0
- package/tools/memory/node.browser.d.mts.map +1 -0
- package/tools/memory/node.browser.d.ts +27 -0
- package/tools/memory/node.browser.d.ts.map +1 -0
- package/tools/memory/node.browser.js +49 -0
- package/tools/memory/node.browser.js.map +1 -0
- package/tools/memory/node.browser.mjs +44 -0
- package/tools/memory/node.browser.mjs.map +1 -0
- package/tools/memory/node.d.mts +18 -0
- package/tools/memory/node.d.mts.map +1 -0
- package/tools/memory/node.d.ts +18 -0
- package/tools/memory/node.d.ts.map +1 -0
- package/tools/memory/node.js +331 -0
- package/tools/memory/node.js.map +1 -0
- package/tools/memory/node.mjs +325 -0
- package/tools/memory/node.mjs.map +1 -0
- package/uploads.d.mts +3 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +3 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +3 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
|
@@ -0,0 +1,949 @@
|
|
|
1
|
+
import type { APIRequest } from '../core/api';
|
|
2
|
+
import { AnthropicError } from '../core/error';
|
|
3
|
+
import type { Middleware, MiddlewareContext, MiddlewareNext } from '../core/middleware';
|
|
4
|
+
import { Stream, type ServerSentEvent } from '../core/streaming';
|
|
5
|
+
import { isAbortError } from '../internal/errors';
|
|
6
|
+
import { appendHeaderValue } from '../internal/headers';
|
|
7
|
+
import { STAINLESS_HELPER_HEADER } from '../internal/stainless-helper-header';
|
|
8
|
+
import { safeJSON } from '../internal/utils/values';
|
|
9
|
+
import type { AnthropicBeta } from '../resources/beta/beta';
|
|
10
|
+
import type {
|
|
11
|
+
BetaContentBlockParam,
|
|
12
|
+
BetaFallbackBlock,
|
|
13
|
+
BetaFallbackMessageIterationUsage,
|
|
14
|
+
BetaFallbackParam,
|
|
15
|
+
BetaMessage,
|
|
16
|
+
BetaMessageDeltaUsage,
|
|
17
|
+
BetaMessageIterationUsage,
|
|
18
|
+
BetaRawContentBlockDeltaEvent,
|
|
19
|
+
BetaRawContentBlockStartEvent,
|
|
20
|
+
BetaRawContentBlockStopEvent,
|
|
21
|
+
BetaRawMessageDeltaEvent,
|
|
22
|
+
BetaRawMessageStopEvent,
|
|
23
|
+
BetaRawMessageStreamEvent,
|
|
24
|
+
BetaRefusalStopDetails,
|
|
25
|
+
BetaUsage,
|
|
26
|
+
MessageCreateParams,
|
|
27
|
+
} from '../resources/beta/messages/messages';
|
|
28
|
+
|
|
29
|
+
export { BetaFallbackState } from '../internal/request-options';
|
|
30
|
+
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
|
|
33
|
+
/** Betas sent by default; override with {@link BetaRefusalFallbackOptions.betas}. */
|
|
34
|
+
const DEFAULT_BETAS: readonly AnthropicBeta[] = ['fallback-credit-2026-06-01'];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Remove `fallback` blocks replayed in history. They only parse under the
|
|
38
|
+
* server-side fallback beta, which belongs to the caller-owned server-side
|
|
39
|
+
* `fallbacks` feature — this middleware never sends it, so a request
|
|
40
|
+
* replaying them would 400. An assistant turn left empty is dropped whole.
|
|
41
|
+
*/
|
|
42
|
+
function stripFallbackBlocks(body: MessageCreateParams): MessageCreateParams {
|
|
43
|
+
const messages = body.messages
|
|
44
|
+
.map((message) =>
|
|
45
|
+
Array.isArray(message.content) ?
|
|
46
|
+
{ ...message, content: message.content.filter((block) => block.type !== 'fallback') }
|
|
47
|
+
: message,
|
|
48
|
+
)
|
|
49
|
+
.filter((message) => !Array.isArray(message.content) || message.content.length > 0);
|
|
50
|
+
return { ...body, messages };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Why {@link BetaRefusalFallbackOptions.onError} fired. */
|
|
54
|
+
export type BetaRefusalFallbackError =
|
|
55
|
+
| {
|
|
56
|
+
/** The refusal carries no `fallback_credit_token`, so it can't be retried. */
|
|
57
|
+
kind: 'no_credit_token';
|
|
58
|
+
message: string;
|
|
59
|
+
/** The refusal `message_delta` event, verbatim. */
|
|
60
|
+
event: BetaRawMessageDeltaEvent;
|
|
61
|
+
}
|
|
62
|
+
| {
|
|
63
|
+
/** The stream refused but every fallback entry has been used up. */
|
|
64
|
+
kind: 'chain_exhausted';
|
|
65
|
+
message: string;
|
|
66
|
+
/** The refusal `message_delta` event, verbatim. */
|
|
67
|
+
event: BetaRawMessageDeltaEvent;
|
|
68
|
+
}
|
|
69
|
+
| {
|
|
70
|
+
/** A streaming fallback request failed; the hop was skipped. */
|
|
71
|
+
kind: 'request_failed';
|
|
72
|
+
message: string;
|
|
73
|
+
/** The fallback model whose request failed. */
|
|
74
|
+
model: string;
|
|
75
|
+
/** The HTTP status, or `null` when the request threw instead of resolving. */
|
|
76
|
+
status: number | null;
|
|
77
|
+
/** The parsed error body, or the thrown error when `status` is `null`. */
|
|
78
|
+
detail: unknown;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export interface BetaRefusalFallbackOptions {
|
|
82
|
+
/**
|
|
83
|
+
* Betas added to the `anthropic-beta` header of every `/v1/messages`
|
|
84
|
+
* request this middleware handles — the original request included, since
|
|
85
|
+
* refusals only carry a `fallback_credit_token` when the beta is enabled.
|
|
86
|
+
* Defaults to `['fallback-credit-2026-06-01']`; pass `[]` to send none.
|
|
87
|
+
*/
|
|
88
|
+
betas?: readonly AnthropicBeta[] | undefined;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Called when a refusal is surfaced to the client rather than retried —
|
|
92
|
+
* it carries no `fallback_credit_token`, no fallback entries remain, or a
|
|
93
|
+
* streaming fallback request failed. Discriminate on `error.kind`.
|
|
94
|
+
* Defaults to logging through the client logger.
|
|
95
|
+
*/
|
|
96
|
+
onError?: ((error: BetaRefusalFallbackError) => void) | undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Middleware that retries refused `/v1/messages` requests down a fallback chain.
|
|
101
|
+
*
|
|
102
|
+
* Non-streaming: when a response comes back with `stop_reason: 'refusal'`, the
|
|
103
|
+
* request is retried with each entry of `fallbacks` merged over the original
|
|
104
|
+
* params — passing along the refusal's `fallback_credit_token` — until a model
|
|
105
|
+
* accepts or the chain is exhausted. A message served by a fallback carries a
|
|
106
|
+
* `fallback` content block prepended at each model boundary — the same seam
|
|
107
|
+
* block shape the server-side `fallbacks` param places in `content`, though
|
|
108
|
+
* the rest of the envelope is the serving hop's as returned (see the
|
|
109
|
+
* known-divergences note below); an exhausted chain surfaces the final
|
|
110
|
+
* refusal verbatim.
|
|
111
|
+
*
|
|
112
|
+
* Streaming: when the stream ends in `stop_reason: 'refusal'`, a second
|
|
113
|
+
* request is issued to the fallback model — carrying the refused model's
|
|
114
|
+
* partial output as a trailing assistant prefill when the refusal grants one
|
|
115
|
+
* (`fallback_has_prefill_claim`), plus the refusal's `fallback_credit_token`
|
|
116
|
+
* — and the fallback's events are spliced onto the
|
|
117
|
+
* still-open stream, so the client sees one continuous message in the
|
|
118
|
+
* server-side `fallbacks` wire shape: a `fallback` content block at each model
|
|
119
|
+
* boundary, monotonic block indices, and per-hop `usage.iterations` on the
|
|
120
|
+
* final `message_delta`. Only `model` is honored from each entry on this path:
|
|
121
|
+
* the credit token is redeemable only against the refused request's body, so
|
|
122
|
+
* the other per-entry overrides (`max_tokens`, `thinking`, ...) would be
|
|
123
|
+
* rejected.
|
|
124
|
+
*
|
|
125
|
+
* The fallback-credit beta the credit tokens require is sent by default on
|
|
126
|
+
* every request the middleware handles; the `betas` option controls this.
|
|
127
|
+
*
|
|
128
|
+
* In both modes a fallback that itself refuses with a fresh credit token
|
|
129
|
+
* continues down the chain. A streaming fallback whose prefill the server
|
|
130
|
+
* rejects (HTTP 400) is retried once without it; a fallback whose request
|
|
131
|
+
* fails outright is skipped — its token was never redeemed, so it carries to
|
|
132
|
+
* the next entry.
|
|
133
|
+
*
|
|
134
|
+
* To keep later requests on the model that accepted, pass a
|
|
135
|
+
* {@link BetaFallbackState} via the `fallbackState` request option; requests
|
|
136
|
+
* sharing that state start directly at the pinned fallback. Reuse one state
|
|
137
|
+
* across whatever scope the pin should apply to — typically a conversation.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```ts
|
|
141
|
+
* const client = new Anthropic({
|
|
142
|
+
* middleware: [betaRefusalFallbackMiddleware([{ model: 'claude-opus-4-8' }])],
|
|
143
|
+
* });
|
|
144
|
+
*
|
|
145
|
+
* const fallbackState = new BetaFallbackState();
|
|
146
|
+
* const message = await client.beta.messages.create(params, { fallbackState });
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export function betaRefusalFallbackMiddleware(
|
|
150
|
+
fallbacks: readonly BetaFallbackParam[],
|
|
151
|
+
options: BetaRefusalFallbackOptions = {},
|
|
152
|
+
): Middleware {
|
|
153
|
+
let warnedMissingState = false;
|
|
154
|
+
|
|
155
|
+
return async (request, next, ctx) => {
|
|
156
|
+
// This middleware only applies to the beta messages API
|
|
157
|
+
// (`client.beta.messages`, which posts to `/v1/messages?beta=true`).
|
|
158
|
+
// An empty chain also disables this middleware.
|
|
159
|
+
const [path, query] = (ctx.options?.path ?? '').split('?');
|
|
160
|
+
if (
|
|
161
|
+
fallbacks.length === 0 ||
|
|
162
|
+
ctx.options?.method !== 'post' ||
|
|
163
|
+
path !== '/v1/messages' ||
|
|
164
|
+
new URLSearchParams(query).get('beta') !== 'true' ||
|
|
165
|
+
typeof ctx.options.body !== 'object' ||
|
|
166
|
+
ctx.options.body == null
|
|
167
|
+
) {
|
|
168
|
+
return next(request);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if ((ctx.options.body as MessageCreateParams).fallbacks != null) {
|
|
172
|
+
throw new AnthropicError(
|
|
173
|
+
'Sending the `fallbacks:` request param is not supported when using the `betaRefusalFallbackMiddleware`. ' +
|
|
174
|
+
'You should either remove the middleware and send `fallbacks:` with the `server-side-fallback-2026-06-01` beta header to let the API handle refusal fallbacks, ' +
|
|
175
|
+
"or omit the `fallbacks:` param if you'd like `betaRefusalFallbackMiddleware` to handle fallbacks on the client side.",
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const onError =
|
|
180
|
+
options.onError ??
|
|
181
|
+
((error: BetaRefusalFallbackError) =>
|
|
182
|
+
ctx.logger.error(`anthropic-sdk: betaRefusalFallbackMiddleware: ${error.message}`));
|
|
183
|
+
|
|
184
|
+
// Send the configured betas on this and every hop request derived from it,
|
|
185
|
+
// and tag this and every hop with the middleware's helper telemetry.
|
|
186
|
+
request = withMiddlewareHeaders(request, options.betas ?? DEFAULT_BETAS);
|
|
187
|
+
|
|
188
|
+
const body = stripFallbackBlocks(ctx.options.body as MessageCreateParams);
|
|
189
|
+
const state = ctx.options.fallbackState;
|
|
190
|
+
|
|
191
|
+
// start from the pinned fallback (-1 = the original params)
|
|
192
|
+
const startIndex = state?.index ?? -1;
|
|
193
|
+
if (!Number.isInteger(startIndex) || startIndex < -1 || startIndex >= fallbacks.length) {
|
|
194
|
+
throw new AnthropicError(
|
|
195
|
+
`fallbackState.index ${startIndex} is out of bounds for a chain of ${fallbacks.length} fallback(s); was the state shared with a different middleware?`,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// pin requests sharing the state to the entry being tried
|
|
200
|
+
const pin = (index: number) => {
|
|
201
|
+
if (state) {
|
|
202
|
+
state.index = index;
|
|
203
|
+
} else if (!warnedMissingState) {
|
|
204
|
+
warnedMissingState = true;
|
|
205
|
+
ctx.logger.warn(
|
|
206
|
+
'anthropic-sdk: betaRefusalFallbackMiddleware fell back without a `fallbackState` request option; follow-up requests will retry models that already refused. Pass a shared `{ fallbackState: new BetaFallbackState() }` to pin them to the accepted model.',
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// a non-string body can't be respliced or redeemed against — leave the
|
|
212
|
+
// request untouched (the streaming path stands down on it below too)
|
|
213
|
+
const initialRequest =
|
|
214
|
+
typeof request.body !== 'string' ?
|
|
215
|
+
request
|
|
216
|
+
: {
|
|
217
|
+
...request,
|
|
218
|
+
body: JSON.stringify(startIndex === -1 ? body : { ...body, ...fallbacks[startIndex] }),
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const response = await next(initialRequest);
|
|
222
|
+
if (!response.ok) {
|
|
223
|
+
return response;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (ctx.options.stream === true) {
|
|
227
|
+
const firstHop = startIndex + 1;
|
|
228
|
+
// Splicing needs at least one entry left to hop to and the JSON request
|
|
229
|
+
// body the credit token is redeemable against (an earlier middleware
|
|
230
|
+
// may have rewritten it to another BodyInit); otherwise the stream
|
|
231
|
+
// passes through untouched.
|
|
232
|
+
if (firstHop >= fallbacks.length || typeof initialRequest.body !== 'string') {
|
|
233
|
+
return response;
|
|
234
|
+
}
|
|
235
|
+
return spliceFallbackStream({
|
|
236
|
+
request: initialRequest,
|
|
237
|
+
response,
|
|
238
|
+
next,
|
|
239
|
+
ctx,
|
|
240
|
+
fallbacks,
|
|
241
|
+
firstHop,
|
|
242
|
+
onError,
|
|
243
|
+
pin,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
let index = startIndex;
|
|
248
|
+
let res = response;
|
|
249
|
+
// The model the current hop was requested as — the caller's spelling, not
|
|
250
|
+
// the server's `message.model` echo; the seam block's `from` carries it.
|
|
251
|
+
let requestedModel = (startIndex === -1 ? body : { ...body, ...fallbacks[startIndex] }).model;
|
|
252
|
+
const fallbackBlocks: BetaFallbackBlock[] = [];
|
|
253
|
+
while (index < fallbacks.length - 1) {
|
|
254
|
+
const message = await ctx.parse<BetaMessage | null>(res);
|
|
255
|
+
if (message?.type !== 'message' || message.stop_reason !== 'refusal') {
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
index += 1;
|
|
260
|
+
pin(index);
|
|
261
|
+
const entry = fallbacks[index]!;
|
|
262
|
+
// One `fallback` seam block per model boundary, prepended to the serving
|
|
263
|
+
// hop's content below — the same block shape the server places in
|
|
264
|
+
// `content`, not a claim of full envelope parity.
|
|
265
|
+
fallbackBlocks.push({
|
|
266
|
+
type: 'fallback',
|
|
267
|
+
// `requestedModel` is always set for a typed body; the `??` defends
|
|
268
|
+
// against an untyped body that carried no `model` field.
|
|
269
|
+
from: { model: requestedModel ?? message.model },
|
|
270
|
+
to: { model: entry.model },
|
|
271
|
+
trigger: { type: 'refusal', category: message.stop_details?.category ?? null },
|
|
272
|
+
});
|
|
273
|
+
requestedModel = entry.model;
|
|
274
|
+
res = await next({
|
|
275
|
+
...request,
|
|
276
|
+
body: JSON.stringify({
|
|
277
|
+
...body,
|
|
278
|
+
...entry,
|
|
279
|
+
...(message.stop_details?.fallback_credit_token ?
|
|
280
|
+
{ fallback_credit_token: message.stop_details.fallback_credit_token }
|
|
281
|
+
: undefined),
|
|
282
|
+
}),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (fallbackBlocks.length === 0) {
|
|
287
|
+
return res;
|
|
288
|
+
}
|
|
289
|
+
const served = await ctx.parse<BetaMessage | null>(res);
|
|
290
|
+
// Chain exhausted on a refusal (or an error/malformed body): surface it
|
|
291
|
+
// verbatim. The array guard keeps a message-shaped body with non-array
|
|
292
|
+
// `content` from throwing at the spread below.
|
|
293
|
+
if (served?.type !== 'message' || served.stop_reason === 'refusal' || !Array.isArray(served.content)) {
|
|
294
|
+
return res;
|
|
295
|
+
}
|
|
296
|
+
// A fallback hop served (or exhausted the chain with output): prepend the
|
|
297
|
+
// seam blocks so the app-visible `content` opens with one `fallback` block
|
|
298
|
+
// per model boundary. Response init is preserved (same `_request_id`);
|
|
299
|
+
// `content-length` is dropped since the body grew.
|
|
300
|
+
const headers = new Headers(res.headers);
|
|
301
|
+
headers.delete('content-length');
|
|
302
|
+
return new Response(JSON.stringify({ ...served, content: [...fallbackBlocks, ...served.content] }), {
|
|
303
|
+
status: res.status,
|
|
304
|
+
statusText: res.statusText,
|
|
305
|
+
headers,
|
|
306
|
+
});
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// --- streaming fallback (credit-token continuation) -------------------------
|
|
311
|
+
//
|
|
312
|
+
// The retry uses the appended-assistant form documented on
|
|
313
|
+
// `fallback_credit_token`: the refused request's body, extended by one
|
|
314
|
+
// trailing assistant turn carrying the refused model's partial output. The
|
|
315
|
+
// token authorizes that turn as a prefill continuation and applies the
|
|
316
|
+
// fallback credit. The refusal's `fallback_has_prefill_claim` says whether
|
|
317
|
+
// the partial output may be resent verbatim: when true the accumulated
|
|
318
|
+
// blocks are appended as-is; when false the refused hop's output is dropped
|
|
319
|
+
// and the token is redeemed against the same body.
|
|
320
|
+
//
|
|
321
|
+
// Known divergences from server-side `fallbacks` (applies to both paths):
|
|
322
|
+
//
|
|
323
|
+
// * Seam `to.model` and non-first `from.model` carry the chain entry's
|
|
324
|
+
// spelling, not the canonical id the server emits.
|
|
325
|
+
// * Streaming: `message.model` keeps the refused model's id — `message_start`
|
|
326
|
+
// has already been sent when the refusal arrives; the seam's `to.model`
|
|
327
|
+
// carries the serving model.
|
|
328
|
+
// * Streaming: `usage.iterations` survives stream accumulation only on the
|
|
329
|
+
// beta surface (`client.beta.messages.stream`); the non-beta accumulator
|
|
330
|
+
// drops it. Non-streaming: no `fallback_message` entry is synthesized in
|
|
331
|
+
// `usage.iterations` — the serving hop's `usage` passes through as-is.
|
|
332
|
+
// * Streaming: refusal text streamed before the refusal stays in the message
|
|
333
|
+
// and is resent as-is (the appended turn must match the partial output
|
|
334
|
+
// verbatim). Non-streaming: a refused hop's partial content is dropped.
|
|
335
|
+
// * First-seam `from.model` differs by path: non-streaming uses the caller's
|
|
336
|
+
// body spelling; streaming uses the server's `message.model` echo.
|
|
337
|
+
|
|
338
|
+
interface FallbackStreamArgs {
|
|
339
|
+
/** The request stream A was made with — the body its credit token is redeemable against. */
|
|
340
|
+
request: APIRequest;
|
|
341
|
+
/** Stream A: the OK SSE response that may end in a refusal. */
|
|
342
|
+
response: Response;
|
|
343
|
+
next: MiddlewareNext;
|
|
344
|
+
ctx: MiddlewareContext;
|
|
345
|
+
fallbacks: readonly BetaFallbackParam[];
|
|
346
|
+
/** Index into `fallbacks` of the first entry to try when stream A refuses. */
|
|
347
|
+
firstHop: number;
|
|
348
|
+
onError: (error: BetaRefusalFallbackError) => void;
|
|
349
|
+
/** Pin shared state to the entry being tried (or warn that there is none). */
|
|
350
|
+
pin: (index: number) => void;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Wrap stream A in a response whose body passes events through until a
|
|
355
|
+
* retryable refusal, then splices the fallback chain's events on (see
|
|
356
|
+
* {@link splicedEvents}). Cancelling the returned body tears down whichever
|
|
357
|
+
* stream is being read and aborts any in-flight fallback request or retry
|
|
358
|
+
* backoff: hop requests run under `controller`'s signal, which fires on
|
|
359
|
+
* cancel and mirrors the original request's signal — a user abort has no
|
|
360
|
+
* other way to reach a hop, since this synthetic body isn't fetch-backed.
|
|
361
|
+
*/
|
|
362
|
+
function spliceFallbackStream(args: FallbackStreamArgs): Response {
|
|
363
|
+
const controller = new AbortController();
|
|
364
|
+
const signal = args.request.signal;
|
|
365
|
+
if (signal?.aborted) {
|
|
366
|
+
controller.abort(signal.reason);
|
|
367
|
+
} else {
|
|
368
|
+
signal?.addEventListener('abort', makeAbort(controller, signal), { once: true });
|
|
369
|
+
}
|
|
370
|
+
const iter = splicedEvents(args, controller);
|
|
371
|
+
const body = new ReadableStream<Uint8Array>({
|
|
372
|
+
async pull(ctrl) {
|
|
373
|
+
try {
|
|
374
|
+
const { value, done } = await iter.next();
|
|
375
|
+
if (done) return ctrl.close();
|
|
376
|
+
ctrl.enqueue(value);
|
|
377
|
+
} catch (err) {
|
|
378
|
+
ctrl.error(err);
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
async cancel() {
|
|
382
|
+
controller.abort();
|
|
383
|
+
await iter.return?.(undefined);
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
return new Response(body, args.response);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** A response content block being accumulated from its streaming deltas. */
|
|
390
|
+
type AccumulatedBlock = { index: number; block: any };
|
|
391
|
+
|
|
392
|
+
async function* splicedEvents(
|
|
393
|
+
{ request, response, next, ctx, fallbacks, firstHop, onError, pin }: FallbackStreamArgs,
|
|
394
|
+
controller: AbortController,
|
|
395
|
+
): AsyncGenerator<Uint8Array> {
|
|
396
|
+
// --- stream A: pass through until a chainable refusal ---
|
|
397
|
+
const a = yield* consumeHop({
|
|
398
|
+
response,
|
|
399
|
+
controller,
|
|
400
|
+
indexBase: 0,
|
|
401
|
+
hasNext: true, // the caller guarantees firstHop < fallbacks.length
|
|
402
|
+
onError,
|
|
403
|
+
splice: null,
|
|
404
|
+
});
|
|
405
|
+
if (!a.refused) return; // non-refusal or not-retryable: pure pass-through.
|
|
406
|
+
|
|
407
|
+
// --- fallback chain: try each entry in order ---
|
|
408
|
+
// `base` is the assistant-turn content the current token's request already
|
|
409
|
+
// carried — the token is redeemable only with it resent verbatim. `partial`
|
|
410
|
+
// is the newest refused hop's output, included only when its refusal
|
|
411
|
+
// granted a prefill claim (any other change to the body is a 400).
|
|
412
|
+
let nextIndex = a.nextIndex; // monotonic block index across all spliced streams
|
|
413
|
+
let token = a.refused.token;
|
|
414
|
+
let base: BetaContentBlockParam[] = [];
|
|
415
|
+
let partial = a.refused.hasPrefillClaim ? toPrefillBlocks(a.blocks) : [];
|
|
416
|
+
let fromModel = a.model ?? '';
|
|
417
|
+
let lastUsage: BetaMessageDeltaUsage | null = a.refused.usage;
|
|
418
|
+
// The refusal whose token is currently in flight — surfaced verbatim (with a
|
|
419
|
+
// recommended_model added) if every fallback request fails and we degrade.
|
|
420
|
+
let refusalDetails = a.refused.stopDetails;
|
|
421
|
+
|
|
422
|
+
// One `message` entry per refused hop, in order — A first. Failed hops are
|
|
423
|
+
// skipped (no usage came back); the serving hop is appended as
|
|
424
|
+
// `fallback_message` when its message_delta arrives.
|
|
425
|
+
const iterations: BetaMessageIterationUsage[] = [
|
|
426
|
+
toIterationUsage('message', a.model ?? '', a.refused.usage),
|
|
427
|
+
];
|
|
428
|
+
|
|
429
|
+
for (let hop = firstHop; hop < fallbacks.length; hop++) {
|
|
430
|
+
const model = fallbacks[hop]!.model;
|
|
431
|
+
const hasNext = hop + 1 < fallbacks.length;
|
|
432
|
+
pin(hop);
|
|
433
|
+
|
|
434
|
+
// --- boundary: a `fallback` content block at the next monotonic index ---
|
|
435
|
+
// Emitted before the request, so a hop that fails leaves its boundary in
|
|
436
|
+
// place and the next attempt emits its own (still `from: fromModel` — the
|
|
437
|
+
// last model that contributed output).
|
|
438
|
+
const fbIndex = nextIndex++;
|
|
439
|
+
yield emit<BetaRawContentBlockStartEvent>('content_block_start', {
|
|
440
|
+
type: 'content_block_start',
|
|
441
|
+
index: fbIndex,
|
|
442
|
+
content_block: {
|
|
443
|
+
type: 'fallback',
|
|
444
|
+
from: { model: fromModel },
|
|
445
|
+
to: { model },
|
|
446
|
+
trigger: { type: 'refusal', category: refusalDetails?.category ?? null },
|
|
447
|
+
},
|
|
448
|
+
});
|
|
449
|
+
yield emit<BetaRawContentBlockStopEvent>('content_block_stop', {
|
|
450
|
+
type: 'content_block_stop',
|
|
451
|
+
index: fbIndex,
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// --- build the request: appended-assistant continuation ---
|
|
455
|
+
// First attempt carries the newest partial appended (when its refusal
|
|
456
|
+
// granted a prefill claim); a 400 on that form means the server rejected
|
|
457
|
+
// the prefill, so the hop is retried once without it — the same-body
|
|
458
|
+
// form the token always supports.
|
|
459
|
+
let continuation = [...base, ...partial];
|
|
460
|
+
let resB: Response | null = null;
|
|
461
|
+
let failure: BetaRefusalFallbackError | null = null;
|
|
462
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
463
|
+
const reqB = buildFallbackRequest(request, { model, creditToken: token, continuation });
|
|
464
|
+
// controller mirrors the original signal and additionally fires when the
|
|
465
|
+
// spliced body is cancelled — either must abort an in-flight hop request.
|
|
466
|
+
reqB.signal = controller.signal;
|
|
467
|
+
|
|
468
|
+
try {
|
|
469
|
+
resB = await next(reqB);
|
|
470
|
+
} catch (err) {
|
|
471
|
+
// the consumer cancelled (or the original request was aborted): unwind
|
|
472
|
+
if (isAbortError(err)) throw err;
|
|
473
|
+
failure = {
|
|
474
|
+
kind: 'request_failed',
|
|
475
|
+
message: `fallback request failed: ${err}`,
|
|
476
|
+
model,
|
|
477
|
+
status: null,
|
|
478
|
+
detail: err,
|
|
479
|
+
};
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
if (resB.ok) break;
|
|
483
|
+
// ctx.parse reads through an internal clone, so it works even though
|
|
484
|
+
// the client will also read this body; resB.text() would conflict.
|
|
485
|
+
const errBody = await ctx.parse(resB).catch(() => null);
|
|
486
|
+
if (attempt === 0 && resB.status === 400 && partial.length) {
|
|
487
|
+
ctx.logger.warn(
|
|
488
|
+
`anthropic-sdk: betaRefusalFallbackMiddleware: fallback request with the partial output appended was rejected (HTTP 400: ${JSON.stringify(
|
|
489
|
+
errBody,
|
|
490
|
+
)}); retrying without it`,
|
|
491
|
+
);
|
|
492
|
+
continuation = base;
|
|
493
|
+
resB = null;
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
failure = {
|
|
497
|
+
kind: 'request_failed',
|
|
498
|
+
message: `fallback request failed: HTTP ${resB.status}: ${JSON.stringify(errBody)}`,
|
|
499
|
+
model,
|
|
500
|
+
status: resB.status,
|
|
501
|
+
detail: errBody,
|
|
502
|
+
};
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
if (failure) {
|
|
507
|
+
onError(failure);
|
|
508
|
+
// The token was never redeemed — retry it against the next entry.
|
|
509
|
+
if (hasNext) continue;
|
|
510
|
+
// Surface the held refusal verbatim — its category/explanation and the
|
|
511
|
+
// still-unredeemed credit token — and point recommended_model at the hop
|
|
512
|
+
// we last tried.
|
|
513
|
+
const stopDetails: BetaRefusalStopDetails = {
|
|
514
|
+
...refusalDetails,
|
|
515
|
+
recommended_model: model,
|
|
516
|
+
};
|
|
517
|
+
yield emit<BetaRawMessageDeltaEvent>('message_delta', {
|
|
518
|
+
type: 'message_delta',
|
|
519
|
+
context_management: null,
|
|
520
|
+
delta: {
|
|
521
|
+
stop_reason: 'refusal',
|
|
522
|
+
stop_sequence: null,
|
|
523
|
+
container: null,
|
|
524
|
+
stop_details: stopDetails,
|
|
525
|
+
},
|
|
526
|
+
usage: (lastUsage ?? {}) as BetaMessageDeltaUsage,
|
|
527
|
+
});
|
|
528
|
+
yield emit<BetaRawMessageStopEvent>('message_stop', { type: 'message_stop' });
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// --- splice: monotonic indices, suppressed message_start, usage.iterations ---
|
|
533
|
+
const b = yield* consumeHop({
|
|
534
|
+
response: resB!,
|
|
535
|
+
controller,
|
|
536
|
+
indexBase: nextIndex,
|
|
537
|
+
hasNext,
|
|
538
|
+
onError,
|
|
539
|
+
splice: { iterations, model },
|
|
540
|
+
});
|
|
541
|
+
if (!b.refused) return;
|
|
542
|
+
|
|
543
|
+
// This hop refused too, with a fresh token: its emitted partial stays in
|
|
544
|
+
// the client's message, becomes the next partial segment, and the chain
|
|
545
|
+
// continues.
|
|
546
|
+
token = b.refused.token;
|
|
547
|
+
refusalDetails = b.refused.stopDetails;
|
|
548
|
+
base = continuation;
|
|
549
|
+
partial = b.refused.hasPrefillClaim ? toPrefillBlocks(b.blocks) : [];
|
|
550
|
+
iterations.push(toIterationUsage('message', model, b.refused.usage));
|
|
551
|
+
lastUsage = b.refused.usage;
|
|
552
|
+
fromModel = model;
|
|
553
|
+
nextIndex = b.nextIndex;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/** The outcome of consuming one hop's stream. */
|
|
558
|
+
interface HopOutcome {
|
|
559
|
+
/** Set when the hop refused with a credit token and an entry remained to chain to. */
|
|
560
|
+
refused: {
|
|
561
|
+
token: string;
|
|
562
|
+
hasPrefillClaim: boolean;
|
|
563
|
+
usage: BetaMessageDeltaUsage;
|
|
564
|
+
/** The refusal's stop_details verbatim, surfaced if the whole chain degrades. */
|
|
565
|
+
stopDetails: BetaRefusalStopDetails;
|
|
566
|
+
} | null;
|
|
567
|
+
/** The hop's serving model, from its message_start. */
|
|
568
|
+
model: string | undefined;
|
|
569
|
+
/** The hop's accumulated content blocks, in start order — the next partial segment. */
|
|
570
|
+
blocks: any[];
|
|
571
|
+
/** One past the highest (shifted) block index emitted — where the next boundary goes. */
|
|
572
|
+
nextIndex: number;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Consume one hop's SSE events, forwarding them to the client while
|
|
577
|
+
* accumulating its content blocks (returned in the outcome).
|
|
578
|
+
*
|
|
579
|
+
* Stream A (`splice: null`) is forwarded in its original wire bytes; a
|
|
580
|
+
* spliced hop (`splice` set) has its message_start suppressed (the client
|
|
581
|
+
* already saw A's), its block indices shifted by `indexBase`, and its
|
|
582
|
+
* terminal message_delta's usage rewritten to the `usage.iterations`
|
|
583
|
+
* chain shape.
|
|
584
|
+
*
|
|
585
|
+
* A refusal that can be chained — it carries a `fallback_credit_token` and a
|
|
586
|
+
* fallback entry remains — ends the hop early: open blocks are closed, the
|
|
587
|
+
* terminal message_delta + message_stop are suppressed, and the token+usage
|
|
588
|
+
* are returned so the caller can issue the next hop. Any other refusal is
|
|
589
|
+
* reported through `onError` and passes through to the client.
|
|
590
|
+
*/
|
|
591
|
+
async function* consumeHop(args: {
|
|
592
|
+
response: Response;
|
|
593
|
+
controller: AbortController;
|
|
594
|
+
/** Shift wire block indices by this much, keeping them monotonic across hops. */
|
|
595
|
+
indexBase: number;
|
|
596
|
+
/** Whether a fallback entry exists to chain to if this hop refuses. */
|
|
597
|
+
hasNext: boolean;
|
|
598
|
+
onError: (error: BetaRefusalFallbackError) => void;
|
|
599
|
+
/** Splice context for fallback hops; null for stream A. */
|
|
600
|
+
splice: { iterations: BetaMessageIterationUsage[]; model: string } | null;
|
|
601
|
+
}): AsyncGenerator<Uint8Array, HopOutcome> {
|
|
602
|
+
const { response, controller, indexBase, hasNext, onError, splice } = args;
|
|
603
|
+
const tracker = new BlockTracker(indexBase);
|
|
604
|
+
let model: string | undefined;
|
|
605
|
+
let startUsage: BetaUsage | null = null;
|
|
606
|
+
|
|
607
|
+
for await (const sse of Stream.rawEvents(response, controller)) {
|
|
608
|
+
const p = safeJSON(sse.data) as BetaRawMessageStreamEvent | undefined;
|
|
609
|
+
switch (p?.type) {
|
|
610
|
+
case 'message_start': {
|
|
611
|
+
model = p.message.model;
|
|
612
|
+
startUsage = p.message.usage;
|
|
613
|
+
if (splice) continue;
|
|
614
|
+
break;
|
|
615
|
+
}
|
|
616
|
+
case 'content_block_start': {
|
|
617
|
+
tracker.start(p);
|
|
618
|
+
if (splice) {
|
|
619
|
+
yield emit(p.type, p);
|
|
620
|
+
continue;
|
|
621
|
+
}
|
|
622
|
+
break;
|
|
623
|
+
}
|
|
624
|
+
case 'content_block_delta': {
|
|
625
|
+
tracker.delta(p);
|
|
626
|
+
if (splice) {
|
|
627
|
+
yield emit(p.type, p);
|
|
628
|
+
continue;
|
|
629
|
+
}
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
632
|
+
case 'content_block_stop': {
|
|
633
|
+
tracker.stop(p);
|
|
634
|
+
if (splice) {
|
|
635
|
+
yield emit(p.type, p);
|
|
636
|
+
continue;
|
|
637
|
+
}
|
|
638
|
+
break;
|
|
639
|
+
}
|
|
640
|
+
case 'message_delta': {
|
|
641
|
+
if (p.delta.stop_reason === 'refusal') {
|
|
642
|
+
// `fallback_credit_token` is null when the refusal isn't eligible
|
|
643
|
+
// for a fallback credit; without one we don't retry.
|
|
644
|
+
const details = p.delta.stop_details?.type === 'refusal' ? p.delta.stop_details : null;
|
|
645
|
+
if (details?.fallback_credit_token && hasNext) {
|
|
646
|
+
const usage = backfill(p.usage, startUsage);
|
|
647
|
+
yield* tracker.closeOpenBlocks();
|
|
648
|
+
// suppress this hop's message_delta + message_stop
|
|
649
|
+
return {
|
|
650
|
+
refused: {
|
|
651
|
+
token: details.fallback_credit_token,
|
|
652
|
+
hasPrefillClaim: details.fallback_has_prefill_claim === true,
|
|
653
|
+
usage,
|
|
654
|
+
stopDetails: details,
|
|
655
|
+
},
|
|
656
|
+
model,
|
|
657
|
+
blocks: tracker.contentBlocks(),
|
|
658
|
+
nextIndex: tracker.nextIndex,
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
if (!details?.fallback_credit_token) {
|
|
662
|
+
onError({
|
|
663
|
+
kind: 'no_credit_token',
|
|
664
|
+
message: 'refusal stop_details has no fallback_credit_token',
|
|
665
|
+
event: p,
|
|
666
|
+
});
|
|
667
|
+
} else {
|
|
668
|
+
onError({
|
|
669
|
+
kind: 'chain_exhausted',
|
|
670
|
+
message: 'refusal but no fallback entries remain',
|
|
671
|
+
event: p,
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
if (splice) {
|
|
676
|
+
// Terminal hop. Replace iterations, don't append: this hop's own
|
|
677
|
+
// message_delta self-reports a single `{type:"message",
|
|
678
|
+
// model:undefined}` iteration (a fresh non-fallback request counts
|
|
679
|
+
// itself as one message hop). Server-side `fallbacks` relabels the
|
|
680
|
+
// whole chain instead — refused hops as `message`, the serving hop
|
|
681
|
+
// as `fallback_message` — so spreading the self-report would
|
|
682
|
+
// prepend a spurious `message:undefined` entry.
|
|
683
|
+
const usage = backfill(p.usage, startUsage);
|
|
684
|
+
usage.iterations = [
|
|
685
|
+
...splice.iterations,
|
|
686
|
+
toIterationUsage('fallback_message', splice.model, usage),
|
|
687
|
+
];
|
|
688
|
+
p.usage = usage;
|
|
689
|
+
yield emit('message_delta', p);
|
|
690
|
+
continue;
|
|
691
|
+
}
|
|
692
|
+
break;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
// message_stop, ping, error, unrecognised — and for stream A every
|
|
697
|
+
// event — pass through in their original wire bytes.
|
|
698
|
+
yield passthroughSSE(sse);
|
|
699
|
+
}
|
|
700
|
+
return { refused: null, model, blocks: tracker.contentBlocks(), nextIndex: tracker.nextIndex };
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* Block bookkeeping for one stream of the splice: accumulates each content
|
|
705
|
+
* block from its deltas (for the continuation prefill), shifts wire indices
|
|
706
|
+
* by `indexBase` so they stay monotonic across hops, and tracks which blocks
|
|
707
|
+
* are still open so a refusal that cuts mid-block can close them.
|
|
708
|
+
*/
|
|
709
|
+
class BlockTracker {
|
|
710
|
+
/** The stream's accumulated blocks keyed by their original wire index. */
|
|
711
|
+
private blocks: AccumulatedBlock[] = [];
|
|
712
|
+
/** One past the highest shifted block index seen. */
|
|
713
|
+
nextIndex: number;
|
|
714
|
+
/** Shifted indices of blocks started but not yet stopped. */
|
|
715
|
+
private open: number[] = [];
|
|
716
|
+
|
|
717
|
+
constructor(private indexBase: number = 0) {
|
|
718
|
+
this.nextIndex = indexBase;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/** The accumulated content blocks, in start order. */
|
|
722
|
+
contentBlocks(): any[] {
|
|
723
|
+
return this.blocks.map((b) => b.block);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/** Track a content_block_start, shifting `event.index`. */
|
|
727
|
+
start(event: BetaRawContentBlockStartEvent): void {
|
|
728
|
+
this.blocks.push({ index: event.index, block: { ...event.content_block } });
|
|
729
|
+
event.index += this.indexBase;
|
|
730
|
+
this.open.push(event.index);
|
|
731
|
+
this.nextIndex = Math.max(this.nextIndex, event.index + 1);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
/** Apply a content_block_delta to its accumulating block, shifting `event.index`. */
|
|
735
|
+
delta(event: BetaRawContentBlockDeltaEvent): void {
|
|
736
|
+
applyDelta(this.blocks, event.index, event.delta);
|
|
737
|
+
event.index += this.indexBase;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
/** Track a content_block_stop, shifting `event.index`. */
|
|
741
|
+
stop(event: BetaRawContentBlockStopEvent): void {
|
|
742
|
+
event.index += this.indexBase;
|
|
743
|
+
const i = this.open.indexOf(event.index);
|
|
744
|
+
if (i !== -1) this.open.splice(i, 1);
|
|
745
|
+
this.nextIndex = Math.max(this.nextIndex, event.index + 1);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/** content_block_stop events for any blocks still open. */
|
|
749
|
+
*closeOpenBlocks(): Generator<Uint8Array> {
|
|
750
|
+
for (const index of this.open) {
|
|
751
|
+
yield emit<BetaRawContentBlockStopEvent>('content_block_stop', {
|
|
752
|
+
type: 'content_block_stop',
|
|
753
|
+
index,
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
this.open.length = 0;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// --- fallback request construction (appended-assistant continuation) -------
|
|
761
|
+
|
|
762
|
+
function buildFallbackRequest(
|
|
763
|
+
orig: APIRequest,
|
|
764
|
+
{
|
|
765
|
+
model,
|
|
766
|
+
creditToken,
|
|
767
|
+
continuation,
|
|
768
|
+
}: {
|
|
769
|
+
model: string;
|
|
770
|
+
creditToken: string;
|
|
771
|
+
continuation: BetaContentBlockParam[];
|
|
772
|
+
},
|
|
773
|
+
): APIRequest {
|
|
774
|
+
// the caller guarantees a JSON string body (checked before stream A is read)
|
|
775
|
+
const body = JSON.parse(orig.body as string);
|
|
776
|
+
|
|
777
|
+
body.model = model;
|
|
778
|
+
body.fallback_credit_token = creditToken;
|
|
779
|
+
|
|
780
|
+
// Append the continuation (decided by the chain loop) as a trailing
|
|
781
|
+
// assistant turn; everything else must stay identical to the refused
|
|
782
|
+
// request. When the refusal granted no prefill claim, omit the turn
|
|
783
|
+
// entirely and send the same-body form.
|
|
784
|
+
if (continuation.length) {
|
|
785
|
+
body.messages = [...body.messages, { role: 'assistant', content: continuation }];
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
// Do NOT touch max_tokens (or any other render-shaping field): the token is
|
|
789
|
+
// only redeemable against the same request body as the refused request —
|
|
790
|
+
// model, fallback_credit_token, and the one appended assistant turn are the
|
|
791
|
+
// only permitted deltas; anything else is a 400 ("request body ... does not
|
|
792
|
+
// match the original refused request"). This is also why the per-entry
|
|
793
|
+
// BetaFallbackParam overrides are ignored on the streaming path.
|
|
794
|
+
|
|
795
|
+
return { ...orig, headers: new Headers(orig.headers), body: JSON.stringify(body) };
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// --- block accumulation & prefill conversion -------------------------------
|
|
799
|
+
|
|
800
|
+
/** Apply a content_block_delta to the accumulating block at `index`. */
|
|
801
|
+
function applyDelta(
|
|
802
|
+
blocks: AccumulatedBlock[],
|
|
803
|
+
index: number,
|
|
804
|
+
delta: BetaRawContentBlockDeltaEvent['delta'],
|
|
805
|
+
): void {
|
|
806
|
+
const block = blocks.find((x) => x.index === index)?.block;
|
|
807
|
+
if (!block) return;
|
|
808
|
+
switch (delta.type) {
|
|
809
|
+
case 'text_delta': {
|
|
810
|
+
block.text = (block.text ?? '') + delta.text;
|
|
811
|
+
break;
|
|
812
|
+
}
|
|
813
|
+
case 'input_json_delta': {
|
|
814
|
+
block._partial_json = (block._partial_json ?? '') + delta.partial_json;
|
|
815
|
+
break;
|
|
816
|
+
}
|
|
817
|
+
case 'citations_delta':
|
|
818
|
+
(block.citations ??= []).push(delta.citation);
|
|
819
|
+
break;
|
|
820
|
+
case 'thinking_delta': {
|
|
821
|
+
block.thinking = (block.thinking ?? '') + delta.thinking;
|
|
822
|
+
break;
|
|
823
|
+
}
|
|
824
|
+
case 'signature_delta': {
|
|
825
|
+
block.signature = delta.signature;
|
|
826
|
+
break;
|
|
827
|
+
}
|
|
828
|
+
case 'compaction_delta': {
|
|
829
|
+
break;
|
|
830
|
+
}
|
|
831
|
+
default:
|
|
832
|
+
((_: never) => {})(delta);
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* Convert a hop's accumulated response blocks to the appended assistant turn,
|
|
838
|
+
* as-is: a `fallback_has_prefill_claim` refusal guarantees the partial output
|
|
839
|
+
* is resendable verbatim, so no client-side filtering is applied. The only
|
|
840
|
+
* rewrite is reassembling tool inputs from their accumulated
|
|
841
|
+
* `input_json_delta` JSON (content_block_start carries `input: {}`).
|
|
842
|
+
*/
|
|
843
|
+
function toPrefillBlocks(responseBlocks: any[]): BetaContentBlockParam[] {
|
|
844
|
+
return responseBlocks.map((b) => {
|
|
845
|
+
if (typeof b?._partial_json !== 'string') return b;
|
|
846
|
+
const { _partial_json, ...block } = b;
|
|
847
|
+
return { ...block, input: safeJSON(_partial_json) ?? block.input };
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// --- helpers --------------------------------------------------------------
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* A copy of `request` with `betas` appended to its `anthropic-beta` header,
|
|
855
|
+
* skipping values already present (set by the caller or another middleware).
|
|
856
|
+
*/
|
|
857
|
+
function withMiddlewareHeaders(request: APIRequest, betas: readonly AnthropicBeta[]): APIRequest {
|
|
858
|
+
const headers = new Headers(request.headers);
|
|
859
|
+
const existing = new Set(
|
|
860
|
+
headers
|
|
861
|
+
.get('anthropic-beta')
|
|
862
|
+
?.split(',')
|
|
863
|
+
.map((s) => s.trim()),
|
|
864
|
+
);
|
|
865
|
+
for (const beta of betas) {
|
|
866
|
+
if (!existing.has(beta)) {
|
|
867
|
+
headers.append('anthropic-beta', beta);
|
|
868
|
+
existing.add(beta);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
headers.set(
|
|
872
|
+
STAINLESS_HELPER_HEADER,
|
|
873
|
+
appendHeaderValue(headers.get(STAINLESS_HELPER_HEADER), 'fallback-refusal-middleware'),
|
|
874
|
+
);
|
|
875
|
+
return { ...request, headers };
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
function emit<T extends { type: string }>(event: T['type'], payload: T): Uint8Array {
|
|
879
|
+
const sse: ServerSentEvent = { event, data: JSON.stringify(payload), raw: [] };
|
|
880
|
+
return encoder.encode(serializeSSE(sse));
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Forward a decoded event in its original wire bytes, preserving SSE fields
|
|
885
|
+
* the decoder doesn't model (`id:`, `retry:`, comment lines). Falls back to
|
|
886
|
+
* re-serializing for events with no raw lines.
|
|
887
|
+
*/
|
|
888
|
+
function passthroughSSE(sse: ServerSentEvent): Uint8Array {
|
|
889
|
+
return encoder.encode(sse.raw.length ? sse.raw.join('\n') + '\n\n' : serializeSSE(sse));
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
// Field-wise union of BetaUsage and BetaMessageDeltaUsage, all nullable —
|
|
893
|
+
// a plain Partial<A & B> intersects `number` with `number | null` down to
|
|
894
|
+
// `number`, which rejects delta usage objects.
|
|
895
|
+
type UsageLike =
|
|
896
|
+
| { [K in keyof (BetaUsage & BetaMessageDeltaUsage)]?: (BetaUsage & BetaMessageDeltaUsage)[K] | null }
|
|
897
|
+
| null
|
|
898
|
+
| undefined;
|
|
899
|
+
|
|
900
|
+
function toIterationUsage(type: 'message', model: string, u: UsageLike): BetaMessageIterationUsage;
|
|
901
|
+
function toIterationUsage(
|
|
902
|
+
type: 'fallback_message',
|
|
903
|
+
model: string,
|
|
904
|
+
u: UsageLike,
|
|
905
|
+
): BetaFallbackMessageIterationUsage;
|
|
906
|
+
function toIterationUsage(
|
|
907
|
+
type: 'message' | 'fallback_message',
|
|
908
|
+
model: string,
|
|
909
|
+
u: UsageLike,
|
|
910
|
+
): BetaMessageIterationUsage | BetaFallbackMessageIterationUsage {
|
|
911
|
+
return {
|
|
912
|
+
type,
|
|
913
|
+
model,
|
|
914
|
+
input_tokens: u?.input_tokens ?? 0,
|
|
915
|
+
output_tokens: u?.output_tokens ?? 0,
|
|
916
|
+
cache_read_input_tokens: u?.cache_read_input_tokens ?? 0,
|
|
917
|
+
cache_creation_input_tokens: u?.cache_creation_input_tokens ?? 0,
|
|
918
|
+
cache_creation: u?.cache_creation ?? null,
|
|
919
|
+
};
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
/** Fill null/undefined fields on `primary` from `fallback`. */
|
|
923
|
+
function backfill(
|
|
924
|
+
primary: BetaMessageDeltaUsage | null | undefined,
|
|
925
|
+
fallback: BetaUsage | null | undefined,
|
|
926
|
+
): BetaMessageDeltaUsage {
|
|
927
|
+
const out: any = { ...(fallback ?? {}), ...(primary ?? {}) };
|
|
928
|
+
for (const k of Object.keys(out)) {
|
|
929
|
+
if (out[k] == null && (fallback as any)?.[k] != null) out[k] = (fallback as any)[k];
|
|
930
|
+
}
|
|
931
|
+
return out;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/**
|
|
935
|
+
* Serialize a {@link ServerSentEvent} back to its SSE wire form
|
|
936
|
+
* (`event: ...\ndata: ...\n\n`). Multi-line `data` is emitted as one
|
|
937
|
+
* `data:` line per line, matching the spec. The inverse of the decoder
|
|
938
|
+
* behind {@link Stream.rawEvents}.
|
|
939
|
+
*/
|
|
940
|
+
function serializeSSE(sse: ServerSentEvent): string {
|
|
941
|
+
let out = '';
|
|
942
|
+
if (sse.event !== null) out += `event: ${sse.event}\n`;
|
|
943
|
+
for (const line of sse.data.split('\n')) out += `data: ${line}\n`;
|
|
944
|
+
return out + '\n';
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
function makeAbort(controller: AbortController, signal: AbortSignal) {
|
|
948
|
+
return () => controller.abort(signal.reason);
|
|
949
|
+
}
|