@anthropic-ai/sdk 0.124.0 → 0.126.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +70 -0
- package/client.d.mts +2 -4
- package/client.d.mts.map +1 -1
- package/client.d.ts +2 -4
- package/client.d.ts.map +1 -1
- package/client.js +846 -851
- package/client.js.map +1 -1
- package/client.mjs +846 -845
- package/client.mjs.map +1 -1
- package/core/api-promise.d.mts.map +1 -1
- package/core/api-promise.d.ts.map +1 -1
- package/core/api-promise.js +71 -69
- package/core/api-promise.js.map +1 -1
- package/core/api-promise.mjs +71 -65
- package/core/api-promise.mjs.map +1 -1
- package/core/error.d.mts.map +1 -1
- package/core/error.d.ts.map +1 -1
- package/core/error.js +5 -3
- package/core/error.js.map +1 -1
- package/core/error.mjs +5 -3
- package/core/error.mjs.map +1 -1
- package/core/pagination.d.mts.map +1 -1
- package/core/pagination.d.ts.map +1 -1
- package/core/pagination.js +56 -51
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +56 -42
- package/core/pagination.mjs.map +1 -1
- package/core/resource.d.mts.map +1 -1
- package/core/resource.d.ts.map +1 -1
- package/core/resource.js +0 -1
- package/core/resource.js.map +1 -1
- package/core/resource.mjs +0 -1
- package/core/resource.mjs.map +1 -1
- package/core/streaming.js +212 -209
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +212 -209
- package/core/streaming.mjs.map +1 -1
- package/helpers/beta/mcp.js +14 -19
- package/helpers/beta/mcp.js.map +1 -1
- package/helpers/beta/mcp.mjs +14 -13
- package/helpers/beta/mcp.mjs.map +1 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/index.mjs +0 -1
- package/index.mjs.map +1 -1
- package/internal/builtin-types.d.mts.map +1 -1
- package/internal/builtin-types.d.ts.map +1 -1
- package/internal/builtin-types.js +0 -1
- package/internal/builtin-types.js.map +1 -1
- package/internal/builtin-types.mjs +0 -1
- package/internal/builtin-types.mjs.map +1 -1
- package/internal/constants.js +1 -1
- package/internal/constants.js.map +1 -1
- package/internal/decoders/jsonl.js +27 -24
- package/internal/decoders/jsonl.js.map +1 -1
- package/internal/decoders/jsonl.mjs +27 -24
- package/internal/decoders/jsonl.mjs.map +1 -1
- package/internal/decoders/line.js +52 -49
- package/internal/decoders/line.js.map +1 -1
- package/internal/decoders/line.mjs +52 -43
- package/internal/decoders/line.mjs.map +1 -1
- package/internal/detect-platform.d.mts.map +1 -1
- package/internal/detect-platform.d.ts.map +1 -1
- package/internal/detect-platform.js +0 -1
- package/internal/detect-platform.js.map +1 -1
- package/internal/detect-platform.mjs +0 -1
- package/internal/detect-platform.mjs.map +1 -1
- package/internal/errors.d.mts.map +1 -1
- package/internal/errors.d.ts.map +1 -1
- package/internal/errors.js +0 -1
- package/internal/errors.js.map +1 -1
- package/internal/errors.mjs +0 -1
- package/internal/errors.mjs.map +1 -1
- package/internal/file-store.js +256 -258
- package/internal/file-store.js.map +1 -1
- package/internal/file-store.mjs +256 -243
- package/internal/file-store.mjs.map +1 -1
- package/internal/headers.d.mts.map +1 -1
- package/internal/headers.d.ts.map +1 -1
- package/internal/headers.js +0 -1
- package/internal/headers.js.map +1 -1
- package/internal/headers.mjs +0 -1
- package/internal/headers.mjs.map +1 -1
- package/internal/node.browser.d.mts.map +1 -1
- package/internal/node.browser.d.ts.map +1 -1
- package/internal/node.browser.js.map +1 -1
- package/internal/node.browser.mjs +7 -7
- package/internal/node.browser.mjs.map +1 -1
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js +0 -1
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +0 -1
- package/internal/parse.mjs.map +1 -1
- package/internal/request-options.d.mts +1 -1
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +1 -1
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js +0 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs +0 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/shim-types.d.mts.map +1 -1
- package/internal/shim-types.d.ts.map +1 -1
- package/internal/shim-types.js +0 -1
- package/internal/shim-types.js.map +1 -1
- package/internal/shim-types.mjs +0 -1
- package/internal/shim-types.mjs.map +1 -1
- package/internal/shims.d.mts.map +1 -1
- package/internal/shims.d.ts.map +1 -1
- package/internal/shims.js +0 -1
- package/internal/shims.js.map +1 -1
- package/internal/shims.mjs +0 -1
- package/internal/shims.mjs.map +1 -1
- package/internal/stainless-helper-header.js +6 -6
- package/internal/stainless-helper-header.js.map +1 -1
- package/internal/types.d.mts.map +1 -1
- package/internal/types.d.ts.map +1 -1
- package/internal/types.js +0 -1
- package/internal/types.js.map +1 -1
- package/internal/types.mjs +0 -1
- package/internal/types.mjs.map +1 -1
- package/internal/utils/async-queue.js +66 -63
- package/internal/utils/async-queue.js.map +1 -1
- package/internal/utils/async-queue.mjs +66 -56
- package/internal/utils/async-queue.mjs.map +1 -1
- package/internal/utils/base64.d.mts.map +1 -1
- package/internal/utils/base64.d.ts.map +1 -1
- package/internal/utils/base64.js +0 -1
- package/internal/utils/base64.js.map +1 -1
- package/internal/utils/base64.mjs +0 -1
- package/internal/utils/base64.mjs.map +1 -1
- package/internal/utils/bytes.d.mts +1 -1
- package/internal/utils/bytes.d.mts.map +1 -1
- package/internal/utils/bytes.d.ts +1 -1
- package/internal/utils/bytes.d.ts.map +1 -1
- package/internal/utils/env.d.mts.map +1 -1
- package/internal/utils/env.d.ts.map +1 -1
- package/internal/utils/env.js +0 -1
- package/internal/utils/env.js.map +1 -1
- package/internal/utils/env.mjs +0 -1
- package/internal/utils/env.mjs.map +1 -1
- package/internal/utils/log.d.mts.map +1 -1
- package/internal/utils/log.d.ts.map +1 -1
- package/internal/utils/log.js +0 -1
- package/internal/utils/log.js.map +1 -1
- package/internal/utils/log.mjs +0 -1
- package/internal/utils/log.mjs.map +1 -1
- package/internal/utils/query.d.mts.map +1 -1
- package/internal/utils/query.d.ts.map +1 -1
- package/internal/utils/query.js +0 -1
- package/internal/utils/query.js.map +1 -1
- package/internal/utils/query.mjs +0 -1
- package/internal/utils/query.mjs.map +1 -1
- package/internal/utils/uuid.d.mts.map +1 -1
- package/internal/utils/uuid.d.ts.map +1 -1
- package/internal/utils/uuid.js +0 -1
- package/internal/utils/uuid.js.map +1 -1
- package/internal/utils/uuid.mjs +0 -1
- package/internal/utils/uuid.mjs.map +1 -1
- package/internal/utils/values.d.mts.map +1 -1
- package/internal/utils/values.d.ts.map +1 -1
- package/internal/utils/values.js +0 -1
- package/internal/utils/values.js.map +1 -1
- package/internal/utils/values.mjs +0 -1
- package/internal/utils/values.mjs.map +1 -1
- package/internal/utils.d.mts.map +1 -1
- package/internal/utils.d.ts.map +1 -1
- package/internal/utils.js +0 -1
- package/internal/utils.js.map +1 -1
- package/internal/utils.mjs +0 -1
- package/internal/utils.mjs.map +1 -1
- package/lib/BetaMessageStream.js +593 -590
- package/lib/BetaMessageStream.js.map +1 -1
- package/lib/BetaMessageStream.mjs +593 -590
- package/lib/BetaMessageStream.mjs.map +1 -1
- package/lib/MessageStream.js +544 -541
- package/lib/MessageStream.js.map +1 -1
- package/lib/MessageStream.mjs +544 -541
- package/lib/MessageStream.mjs.map +1 -1
- package/lib/environments/poller.js +180 -174
- package/lib/environments/poller.js.map +1 -1
- package/lib/environments/poller.mjs +180 -153
- package/lib/environments/poller.mjs.map +1 -1
- package/lib/environments/worker.d.mts +14 -8
- package/lib/environments/worker.d.mts.map +1 -1
- package/lib/environments/worker.d.ts +14 -8
- package/lib/environments/worker.d.ts.map +1 -1
- package/lib/environments/worker.js +375 -359
- package/lib/environments/worker.js.map +1 -1
- package/lib/environments/worker.mjs +374 -319
- package/lib/environments/worker.mjs.map +1 -1
- package/lib/tools/BetaToolRunner.js +316 -313
- package/lib/tools/BetaToolRunner.js.map +1 -1
- package/lib/tools/BetaToolRunner.mjs +315 -306
- package/lib/tools/BetaToolRunner.mjs.map +1 -1
- package/lib/tools/SessionToolRunner.js +241 -235
- package/lib/tools/SessionToolRunner.js.map +1 -1
- package/lib/tools/SessionToolRunner.mjs +241 -192
- package/lib/tools/SessionToolRunner.mjs.map +1 -1
- package/lib/tools/ToolError.js +39 -36
- package/lib/tools/ToolError.js.map +1 -1
- package/lib/tools/ToolError.mjs +39 -13
- package/lib/tools/ToolError.mjs.map +1 -1
- package/package.json +3 -3
- package/resources/beta/agents/agents.d.mts +32 -23
- package/resources/beta/agents/agents.d.mts.map +1 -1
- package/resources/beta/agents/agents.d.ts +32 -23
- package/resources/beta/agents/agents.d.ts.map +1 -1
- package/resources/beta/agents/agents.js +135 -133
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs +135 -133
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/agents/index.d.mts +1 -1
- package/resources/beta/agents/index.d.mts.map +1 -1
- package/resources/beta/agents/index.d.ts +1 -1
- package/resources/beta/agents/index.d.ts.map +1 -1
- package/resources/beta/agents/index.js +0 -1
- package/resources/beta/agents/index.js.map +1 -1
- package/resources/beta/agents/index.mjs +0 -1
- package/resources/beta/agents/index.mjs.map +1 -1
- package/resources/beta/agents/versions.d.mts.map +1 -1
- package/resources/beta/agents/versions.d.ts.map +1 -1
- package/resources/beta/agents/versions.js +0 -1
- package/resources/beta/agents/versions.js.map +1 -1
- package/resources/beta/agents/versions.mjs +0 -1
- package/resources/beta/agents/versions.mjs.map +1 -1
- package/resources/beta/agents.d.mts.map +1 -1
- package/resources/beta/agents.d.ts.map +1 -1
- package/resources/beta/agents.js +0 -1
- package/resources/beta/agents.js.map +1 -1
- package/resources/beta/agents.mjs +0 -1
- package/resources/beta/agents.mjs.map +1 -1
- package/resources/beta/beta.d.mts +9 -9
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +9 -9
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +39 -37
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +39 -37
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/deployment-runs.d.mts.map +1 -1
- package/resources/beta/deployment-runs.d.ts.map +1 -1
- package/resources/beta/deployment-runs.js +0 -1
- package/resources/beta/deployment-runs.js.map +1 -1
- package/resources/beta/deployment-runs.mjs +0 -1
- package/resources/beta/deployment-runs.mjs.map +1 -1
- package/resources/beta/deployments.d.mts.map +1 -1
- package/resources/beta/deployments.d.ts.map +1 -1
- package/resources/beta/deployments.js +0 -1
- package/resources/beta/deployments.js.map +1 -1
- package/resources/beta/deployments.mjs +0 -1
- package/resources/beta/deployments.mjs.map +1 -1
- package/resources/beta/dreams.d.mts +2 -28
- package/resources/beta/dreams.d.mts.map +1 -1
- package/resources/beta/dreams.d.ts +2 -28
- package/resources/beta/dreams.d.ts.map +1 -1
- package/resources/beta/dreams.js +0 -1
- package/resources/beta/dreams.js.map +1 -1
- package/resources/beta/dreams.mjs +0 -1
- package/resources/beta/dreams.mjs.map +1 -1
- package/resources/beta/environments/environments.d.mts +2 -2
- package/resources/beta/environments/environments.d.mts.map +1 -1
- package/resources/beta/environments/environments.d.ts +2 -2
- package/resources/beta/environments/environments.d.ts.map +1 -1
- package/resources/beta/environments/environments.js +157 -155
- package/resources/beta/environments/environments.js.map +1 -1
- package/resources/beta/environments/environments.mjs +157 -155
- package/resources/beta/environments/environments.mjs.map +1 -1
- package/resources/beta/environments/index.d.mts.map +1 -1
- package/resources/beta/environments/index.d.ts.map +1 -1
- package/resources/beta/environments/index.js +0 -1
- package/resources/beta/environments/index.js.map +1 -1
- package/resources/beta/environments/index.mjs +0 -1
- package/resources/beta/environments/index.mjs.map +1 -1
- package/resources/beta/environments/work.d.mts.map +1 -1
- package/resources/beta/environments/work.d.ts.map +1 -1
- package/resources/beta/environments/work.js +255 -253
- package/resources/beta/environments/work.js.map +1 -1
- package/resources/beta/environments/work.mjs +255 -253
- package/resources/beta/environments/work.mjs.map +1 -1
- package/resources/beta/environments.d.mts.map +1 -1
- package/resources/beta/environments.d.ts.map +1 -1
- package/resources/beta/environments.js +0 -1
- package/resources/beta/environments.js.map +1 -1
- package/resources/beta/environments.mjs +0 -1
- package/resources/beta/environments.mjs.map +1 -1
- package/resources/beta/files.d.mts.map +1 -1
- package/resources/beta/files.d.ts.map +1 -1
- package/resources/beta/files.js +0 -1
- package/resources/beta/files.js.map +1 -1
- package/resources/beta/files.mjs +0 -1
- package/resources/beta/files.mjs.map +1 -1
- package/resources/beta/index.d.mts +4 -4
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +4 -4
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js +0 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs +0 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/memory-stores/index.d.mts.map +1 -1
- package/resources/beta/memory-stores/index.d.ts.map +1 -1
- package/resources/beta/memory-stores/index.js +0 -1
- package/resources/beta/memory-stores/index.js.map +1 -1
- package/resources/beta/memory-stores/index.mjs +0 -1
- package/resources/beta/memory-stores/index.mjs.map +1 -1
- package/resources/beta/memory-stores/memories.d.mts.map +1 -1
- package/resources/beta/memory-stores/memories.d.ts.map +1 -1
- package/resources/beta/memory-stores/memories.js +0 -1
- package/resources/beta/memory-stores/memories.js.map +1 -1
- package/resources/beta/memory-stores/memories.mjs +0 -1
- package/resources/beta/memory-stores/memories.mjs.map +1 -1
- package/resources/beta/memory-stores/memory-stores.d.mts.map +1 -1
- package/resources/beta/memory-stores/memory-stores.d.ts.map +1 -1
- package/resources/beta/memory-stores/memory-stores.js +150 -148
- package/resources/beta/memory-stores/memory-stores.js.map +1 -1
- package/resources/beta/memory-stores/memory-stores.mjs +150 -148
- package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.js +0 -1
- package/resources/beta/memory-stores/memory-versions.js.map +1 -1
- package/resources/beta/memory-stores/memory-versions.mjs +0 -1
- package/resources/beta/memory-stores/memory-versions.mjs.map +1 -1
- package/resources/beta/memory-stores.d.mts.map +1 -1
- package/resources/beta/memory-stores.d.ts.map +1 -1
- package/resources/beta/memory-stores.js +0 -1
- package/resources/beta/memory-stores.js.map +1 -1
- package/resources/beta/memory-stores.mjs +0 -1
- package/resources/beta/memory-stores.mjs.map +1 -1
- package/resources/beta/messages/batches.d.mts +12 -1
- package/resources/beta/messages/batches.d.mts.map +1 -1
- package/resources/beta/messages/batches.d.ts +12 -1
- package/resources/beta/messages/batches.d.ts.map +1 -1
- package/resources/beta/messages/batches.js +0 -1
- package/resources/beta/messages/batches.js.map +1 -1
- package/resources/beta/messages/batches.mjs +0 -1
- package/resources/beta/messages/batches.mjs.map +1 -1
- package/resources/beta/messages/index.d.mts +1 -1
- package/resources/beta/messages/index.d.mts.map +1 -1
- package/resources/beta/messages/index.d.ts +1 -1
- package/resources/beta/messages/index.d.ts.map +1 -1
- package/resources/beta/messages/index.js +0 -1
- package/resources/beta/messages/index.js.map +1 -1
- package/resources/beta/messages/index.mjs +0 -1
- package/resources/beta/messages/index.mjs.map +1 -1
- package/resources/beta/messages/messages.d.mts +239 -101
- package/resources/beta/messages/messages.d.mts.map +1 -1
- package/resources/beta/messages/messages.d.ts +239 -101
- package/resources/beta/messages/messages.d.ts.map +1 -1
- package/resources/beta/messages/messages.js +113 -111
- package/resources/beta/messages/messages.js.map +1 -1
- package/resources/beta/messages/messages.mjs +113 -111
- package/resources/beta/messages/messages.mjs.map +1 -1
- package/resources/beta/messages.d.mts.map +1 -1
- package/resources/beta/messages.d.ts.map +1 -1
- package/resources/beta/messages.js +0 -1
- package/resources/beta/messages.js.map +1 -1
- package/resources/beta/messages.mjs +0 -1
- package/resources/beta/messages.mjs.map +1 -1
- package/resources/beta/models.d.mts +22 -1
- package/resources/beta/models.d.mts.map +1 -1
- package/resources/beta/models.d.ts +22 -1
- package/resources/beta/models.d.ts.map +1 -1
- package/resources/beta/models.js +0 -1
- package/resources/beta/models.js.map +1 -1
- package/resources/beta/models.mjs +0 -1
- package/resources/beta/models.mjs.map +1 -1
- package/resources/beta/organization/api-keys.d.mts.map +1 -1
- package/resources/beta/organization/api-keys.d.ts.map +1 -1
- package/resources/beta/organization/api-keys.js +0 -1
- package/resources/beta/organization/api-keys.js.map +1 -1
- package/resources/beta/organization/api-keys.mjs +0 -1
- package/resources/beta/organization/api-keys.mjs.map +1 -1
- package/resources/beta/organization/compliance-settings.d.mts.map +1 -1
- package/resources/beta/organization/compliance-settings.d.ts.map +1 -1
- package/resources/beta/organization/compliance-settings.js +0 -1
- package/resources/beta/organization/compliance-settings.js.map +1 -1
- package/resources/beta/organization/compliance-settings.mjs +0 -1
- package/resources/beta/organization/compliance-settings.mjs.map +1 -1
- package/resources/beta/organization/external-keys.d.mts.map +1 -1
- package/resources/beta/organization/external-keys.d.ts.map +1 -1
- package/resources/beta/organization/external-keys.js +0 -1
- package/resources/beta/organization/external-keys.js.map +1 -1
- package/resources/beta/organization/external-keys.mjs +0 -1
- package/resources/beta/organization/external-keys.mjs.map +1 -1
- package/resources/beta/organization/federation/federation.d.mts.map +1 -1
- package/resources/beta/organization/federation/federation.d.ts.map +1 -1
- package/resources/beta/organization/federation/federation.js +11 -9
- package/resources/beta/organization/federation/federation.js.map +1 -1
- package/resources/beta/organization/federation/federation.mjs +11 -9
- package/resources/beta/organization/federation/federation.mjs.map +1 -1
- package/resources/beta/organization/federation/index.d.mts.map +1 -1
- package/resources/beta/organization/federation/index.d.ts.map +1 -1
- package/resources/beta/organization/federation/index.js +0 -1
- package/resources/beta/organization/federation/index.js.map +1 -1
- package/resources/beta/organization/federation/index.mjs +0 -1
- package/resources/beta/organization/federation/index.mjs.map +1 -1
- package/resources/beta/organization/federation/issuers.d.mts.map +1 -1
- package/resources/beta/organization/federation/issuers.d.ts.map +1 -1
- package/resources/beta/organization/federation/issuers.js +0 -1
- package/resources/beta/organization/federation/issuers.js.map +1 -1
- package/resources/beta/organization/federation/issuers.mjs +0 -1
- package/resources/beta/organization/federation/issuers.mjs.map +1 -1
- package/resources/beta/organization/federation/rules/index.d.mts.map +1 -1
- package/resources/beta/organization/federation/rules/index.d.ts.map +1 -1
- package/resources/beta/organization/federation/rules/index.js +0 -1
- package/resources/beta/organization/federation/rules/index.js.map +1 -1
- package/resources/beta/organization/federation/rules/index.mjs +0 -1
- package/resources/beta/organization/federation/rules/index.mjs.map +1 -1
- package/resources/beta/organization/federation/rules/rules.d.mts.map +1 -1
- package/resources/beta/organization/federation/rules/rules.d.ts.map +1 -1
- package/resources/beta/organization/federation/rules/rules.js +187 -185
- package/resources/beta/organization/federation/rules/rules.js.map +1 -1
- package/resources/beta/organization/federation/rules/rules.mjs +187 -185
- package/resources/beta/organization/federation/rules/rules.mjs.map +1 -1
- package/resources/beta/organization/federation/rules/workspaces.d.mts.map +1 -1
- package/resources/beta/organization/federation/rules/workspaces.d.ts.map +1 -1
- package/resources/beta/organization/federation/rules/workspaces.js +0 -1
- package/resources/beta/organization/federation/rules/workspaces.js.map +1 -1
- package/resources/beta/organization/federation/rules/workspaces.mjs +0 -1
- package/resources/beta/organization/federation/rules/workspaces.mjs.map +1 -1
- package/resources/beta/organization/federation/rules.d.mts.map +1 -1
- package/resources/beta/organization/federation/rules.d.ts.map +1 -1
- package/resources/beta/organization/federation/rules.js +0 -1
- package/resources/beta/organization/federation/rules.js.map +1 -1
- package/resources/beta/organization/federation/rules.mjs +0 -1
- package/resources/beta/organization/federation/rules.mjs.map +1 -1
- package/resources/beta/organization/federation.d.mts.map +1 -1
- package/resources/beta/organization/federation.d.ts.map +1 -1
- package/resources/beta/organization/federation.js +0 -1
- package/resources/beta/organization/federation.js.map +1 -1
- package/resources/beta/organization/federation.mjs +0 -1
- package/resources/beta/organization/federation.mjs.map +1 -1
- package/resources/beta/organization/index.d.mts.map +1 -1
- package/resources/beta/organization/index.d.ts.map +1 -1
- package/resources/beta/organization/index.js +0 -1
- package/resources/beta/organization/index.js.map +1 -1
- package/resources/beta/organization/index.mjs +0 -1
- package/resources/beta/organization/index.mjs.map +1 -1
- package/resources/beta/organization/invites.d.mts.map +1 -1
- package/resources/beta/organization/invites.d.ts.map +1 -1
- package/resources/beta/organization/invites.js +0 -1
- package/resources/beta/organization/invites.js.map +1 -1
- package/resources/beta/organization/invites.mjs +0 -1
- package/resources/beta/organization/invites.mjs.map +1 -1
- package/resources/beta/organization/organization.d.mts.map +1 -1
- package/resources/beta/organization/organization.d.ts.map +1 -1
- package/resources/beta/organization/organization.js +38 -36
- package/resources/beta/organization/organization.js.map +1 -1
- package/resources/beta/organization/organization.mjs +38 -36
- package/resources/beta/organization/organization.mjs.map +1 -1
- package/resources/beta/organization/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/rate-limits.js +0 -1
- package/resources/beta/organization/rate-limits.js.map +1 -1
- package/resources/beta/organization/rate-limits.mjs +0 -1
- package/resources/beta/organization/rate-limits.mjs.map +1 -1
- package/resources/beta/organization/service-accounts/index.d.mts.map +1 -1
- package/resources/beta/organization/service-accounts/index.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts/index.js +0 -1
- package/resources/beta/organization/service-accounts/index.js.map +1 -1
- package/resources/beta/organization/service-accounts/index.mjs +0 -1
- package/resources/beta/organization/service-accounts/index.mjs.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.d.mts.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.js +163 -161
- package/resources/beta/organization/service-accounts/service-accounts.js.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.mjs +163 -161
- package/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -1
- package/resources/beta/organization/service-accounts/workspaces.d.mts.map +1 -1
- package/resources/beta/organization/service-accounts/workspaces.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts/workspaces.js +0 -1
- package/resources/beta/organization/service-accounts/workspaces.js.map +1 -1
- package/resources/beta/organization/service-accounts/workspaces.mjs +0 -1
- package/resources/beta/organization/service-accounts/workspaces.mjs.map +1 -1
- package/resources/beta/organization/service-accounts.d.mts.map +1 -1
- package/resources/beta/organization/service-accounts.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts.js +0 -1
- package/resources/beta/organization/service-accounts.js.map +1 -1
- package/resources/beta/organization/service-accounts.mjs +0 -1
- package/resources/beta/organization/service-accounts.mjs.map +1 -1
- package/resources/beta/organization/users.d.mts.map +1 -1
- package/resources/beta/organization/users.d.ts.map +1 -1
- package/resources/beta/organization/users.js +0 -1
- package/resources/beta/organization/users.js.map +1 -1
- package/resources/beta/organization/users.mjs +0 -1
- package/resources/beta/organization/users.mjs.map +1 -1
- package/resources/beta/organization/workspaces/index.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/index.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/index.js +0 -1
- package/resources/beta/organization/workspaces/index.js.map +1 -1
- package/resources/beta/organization/workspaces/index.mjs +0 -1
- package/resources/beta/organization/workspaces/index.mjs.map +1 -1
- package/resources/beta/organization/workspaces/members.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/members.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/members.js +0 -1
- package/resources/beta/organization/workspaces/members.js.map +1 -1
- package/resources/beta/organization/workspaces/members.mjs +0 -1
- package/resources/beta/organization/workspaces/members.mjs.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.js +0 -1
- package/resources/beta/organization/workspaces/rate-limits.js.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.mjs +0 -1
- package/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -1
- package/resources/beta/organization/workspaces/service-accounts.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/service-accounts.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/service-accounts.js +0 -1
- package/resources/beta/organization/workspaces/service-accounts.js.map +1 -1
- package/resources/beta/organization/workspaces/service-accounts.mjs +0 -1
- package/resources/beta/organization/workspaces/service-accounts.mjs.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.d.mts +3 -3
- package/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.d.ts +3 -3
- package/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.js +97 -95
- package/resources/beta/organization/workspaces/workspaces.js.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.mjs +97 -95
- package/resources/beta/organization/workspaces/workspaces.mjs.map +1 -1
- package/resources/beta/organization/workspaces.d.mts.map +1 -1
- package/resources/beta/organization/workspaces.d.ts.map +1 -1
- package/resources/beta/organization/workspaces.js +0 -1
- package/resources/beta/organization/workspaces.js.map +1 -1
- package/resources/beta/organization/workspaces.mjs +0 -1
- package/resources/beta/organization/workspaces.mjs.map +1 -1
- package/resources/beta/organization.d.mts.map +1 -1
- package/resources/beta/organization.d.ts.map +1 -1
- package/resources/beta/organization.js +0 -1
- package/resources/beta/organization.js.map +1 -1
- package/resources/beta/organization.mjs +0 -1
- package/resources/beta/organization.mjs.map +1 -1
- package/resources/beta/sessions/events.d.mts +95 -22
- package/resources/beta/sessions/events.d.mts.map +1 -1
- package/resources/beta/sessions/events.d.ts +95 -22
- package/resources/beta/sessions/events.d.ts.map +1 -1
- package/resources/beta/sessions/events.js +118 -116
- package/resources/beta/sessions/events.js.map +1 -1
- package/resources/beta/sessions/events.mjs +118 -116
- package/resources/beta/sessions/events.mjs.map +1 -1
- package/resources/beta/sessions/index.d.mts +1 -1
- package/resources/beta/sessions/index.d.mts.map +1 -1
- package/resources/beta/sessions/index.d.ts +1 -1
- package/resources/beta/sessions/index.d.ts.map +1 -1
- package/resources/beta/sessions/index.js +0 -1
- package/resources/beta/sessions/index.js.map +1 -1
- package/resources/beta/sessions/index.mjs +0 -1
- package/resources/beta/sessions/index.mjs.map +1 -1
- package/resources/beta/sessions/resources.d.mts +0 -3
- package/resources/beta/sessions/resources.d.mts.map +1 -1
- package/resources/beta/sessions/resources.d.ts +0 -3
- package/resources/beta/sessions/resources.d.ts.map +1 -1
- package/resources/beta/sessions/resources.js +0 -1
- package/resources/beta/sessions/resources.js.map +1 -1
- package/resources/beta/sessions/resources.mjs +0 -1
- package/resources/beta/sessions/resources.mjs.map +1 -1
- package/resources/beta/sessions/sessions.d.mts +9 -8
- package/resources/beta/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/sessions/sessions.d.ts +9 -8
- package/resources/beta/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/sessions/sessions.js +161 -159
- package/resources/beta/sessions/sessions.js.map +1 -1
- package/resources/beta/sessions/sessions.mjs +161 -159
- package/resources/beta/sessions/sessions.mjs.map +1 -1
- package/resources/beta/sessions/threads/events.d.mts.map +1 -1
- package/resources/beta/sessions/threads/events.d.ts.map +1 -1
- package/resources/beta/sessions/threads/events.js +0 -1
- package/resources/beta/sessions/threads/events.js.map +1 -1
- package/resources/beta/sessions/threads/events.mjs +0 -1
- package/resources/beta/sessions/threads/events.mjs.map +1 -1
- package/resources/beta/sessions/threads/index.d.mts.map +1 -1
- package/resources/beta/sessions/threads/index.d.ts.map +1 -1
- package/resources/beta/sessions/threads/index.js +0 -1
- package/resources/beta/sessions/threads/index.js.map +1 -1
- package/resources/beta/sessions/threads/index.mjs +0 -1
- package/resources/beta/sessions/threads/index.mjs.map +1 -1
- package/resources/beta/sessions/threads/threads.d.mts.map +1 -1
- package/resources/beta/sessions/threads/threads.d.ts.map +1 -1
- package/resources/beta/sessions/threads/threads.js +86 -84
- package/resources/beta/sessions/threads/threads.js.map +1 -1
- package/resources/beta/sessions/threads/threads.mjs +86 -84
- package/resources/beta/sessions/threads/threads.mjs.map +1 -1
- package/resources/beta/sessions/threads.d.mts.map +1 -1
- package/resources/beta/sessions/threads.d.ts.map +1 -1
- package/resources/beta/sessions/threads.js +0 -1
- package/resources/beta/sessions/threads.js.map +1 -1
- package/resources/beta/sessions/threads.mjs +0 -1
- package/resources/beta/sessions/threads.mjs.map +1 -1
- package/resources/beta/sessions.d.mts.map +1 -1
- package/resources/beta/sessions.d.ts.map +1 -1
- package/resources/beta/sessions.js +0 -1
- package/resources/beta/sessions.js.map +1 -1
- package/resources/beta/sessions.mjs +0 -1
- package/resources/beta/sessions.mjs.map +1 -1
- package/resources/beta/skills/index.d.mts.map +1 -1
- package/resources/beta/skills/index.d.ts.map +1 -1
- package/resources/beta/skills/index.js +0 -1
- package/resources/beta/skills/index.js.map +1 -1
- package/resources/beta/skills/index.mjs +0 -1
- package/resources/beta/skills/index.mjs.map +1 -1
- package/resources/beta/skills/skills.d.mts.map +1 -1
- package/resources/beta/skills/skills.d.ts.map +1 -1
- package/resources/beta/skills/skills.js +104 -102
- package/resources/beta/skills/skills.js.map +1 -1
- package/resources/beta/skills/skills.mjs +104 -102
- package/resources/beta/skills/skills.mjs.map +1 -1
- package/resources/beta/skills/versions.d.mts.map +1 -1
- package/resources/beta/skills/versions.d.ts.map +1 -1
- package/resources/beta/skills/versions.js +0 -1
- package/resources/beta/skills/versions.js.map +1 -1
- package/resources/beta/skills/versions.mjs +0 -1
- package/resources/beta/skills/versions.mjs.map +1 -1
- package/resources/beta/skills.d.mts.map +1 -1
- package/resources/beta/skills.d.ts.map +1 -1
- package/resources/beta/skills.js +0 -1
- package/resources/beta/skills.js.map +1 -1
- package/resources/beta/skills.mjs +0 -1
- package/resources/beta/skills.mjs.map +1 -1
- package/resources/beta/tunnels/certificates.d.mts.map +1 -1
- package/resources/beta/tunnels/certificates.d.ts.map +1 -1
- package/resources/beta/tunnels/certificates.js +0 -1
- package/resources/beta/tunnels/certificates.js.map +1 -1
- package/resources/beta/tunnels/certificates.mjs +0 -1
- package/resources/beta/tunnels/certificates.mjs.map +1 -1
- package/resources/beta/tunnels/index.d.mts.map +1 -1
- package/resources/beta/tunnels/index.d.ts.map +1 -1
- package/resources/beta/tunnels/index.js +0 -1
- package/resources/beta/tunnels/index.js.map +1 -1
- package/resources/beta/tunnels/index.mjs +0 -1
- package/resources/beta/tunnels/index.mjs.map +1 -1
- package/resources/beta/tunnels/tunnels.d.mts.map +1 -1
- package/resources/beta/tunnels/tunnels.d.ts.map +1 -1
- package/resources/beta/tunnels/tunnels.js +188 -186
- package/resources/beta/tunnels/tunnels.js.map +1 -1
- package/resources/beta/tunnels/tunnels.mjs +188 -186
- package/resources/beta/tunnels/tunnels.mjs.map +1 -1
- package/resources/beta/tunnels.d.mts.map +1 -1
- package/resources/beta/tunnels.d.ts.map +1 -1
- package/resources/beta/tunnels.js +0 -1
- package/resources/beta/tunnels.js.map +1 -1
- package/resources/beta/tunnels.mjs +0 -1
- package/resources/beta/tunnels.mjs.map +1 -1
- package/resources/beta/user-profiles.d.mts +160 -4
- package/resources/beta/user-profiles.d.mts.map +1 -1
- package/resources/beta/user-profiles.d.ts +160 -4
- package/resources/beta/user-profiles.d.ts.map +1 -1
- package/resources/beta/user-profiles.js +25 -11
- package/resources/beta/user-profiles.js.map +1 -1
- package/resources/beta/user-profiles.mjs +25 -11
- package/resources/beta/user-profiles.mjs.map +1 -1
- package/resources/beta/vaults/credentials.d.mts +0 -14
- package/resources/beta/vaults/credentials.d.mts.map +1 -1
- package/resources/beta/vaults/credentials.d.ts +0 -14
- package/resources/beta/vaults/credentials.d.ts.map +1 -1
- package/resources/beta/vaults/credentials.js +0 -1
- package/resources/beta/vaults/credentials.js.map +1 -1
- package/resources/beta/vaults/credentials.mjs +0 -1
- package/resources/beta/vaults/credentials.mjs.map +1 -1
- package/resources/beta/vaults/index.d.mts.map +1 -1
- package/resources/beta/vaults/index.d.ts.map +1 -1
- package/resources/beta/vaults/index.js +0 -1
- package/resources/beta/vaults/index.js.map +1 -1
- package/resources/beta/vaults/index.mjs +0 -1
- package/resources/beta/vaults/index.mjs.map +1 -1
- package/resources/beta/vaults/vaults.d.mts.map +1 -1
- package/resources/beta/vaults/vaults.d.ts.map +1 -1
- package/resources/beta/vaults/vaults.js +156 -154
- package/resources/beta/vaults/vaults.js.map +1 -1
- package/resources/beta/vaults/vaults.mjs +156 -154
- package/resources/beta/vaults/vaults.mjs.map +1 -1
- package/resources/beta/vaults.d.mts.map +1 -1
- package/resources/beta/vaults.d.ts.map +1 -1
- package/resources/beta/vaults.js +0 -1
- package/resources/beta/vaults.js.map +1 -1
- package/resources/beta/vaults.mjs +0 -1
- package/resources/beta/vaults.mjs.map +1 -1
- package/resources/beta/webhooks.d.mts.map +1 -1
- package/resources/beta/webhooks.d.ts.map +1 -1
- package/resources/beta/webhooks.js +0 -1
- package/resources/beta/webhooks.js.map +1 -1
- package/resources/beta/webhooks.mjs +0 -1
- package/resources/beta/webhooks.mjs.map +1 -1
- package/resources/beta.d.mts.map +1 -1
- package/resources/beta.d.ts.map +1 -1
- package/resources/beta.js +0 -1
- package/resources/beta.js.map +1 -1
- package/resources/beta.mjs +0 -1
- package/resources/beta.mjs.map +1 -1
- package/resources/completions.d.mts +1 -1
- package/resources/completions.d.mts.map +1 -1
- package/resources/completions.d.ts +1 -1
- package/resources/completions.d.ts.map +1 -1
- package/resources/completions.js +0 -1
- package/resources/completions.js.map +1 -1
- package/resources/completions.mjs +0 -1
- package/resources/completions.mjs.map +1 -1
- package/resources/files.d.mts.map +1 -1
- package/resources/files.d.ts.map +1 -1
- package/resources/files.js +0 -1
- package/resources/files.js.map +1 -1
- package/resources/files.mjs +0 -1
- package/resources/files.mjs.map +1 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +0 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +0 -1
- package/resources/index.mjs.map +1 -1
- package/resources/messages/batches.d.mts.map +1 -1
- package/resources/messages/batches.d.ts.map +1 -1
- package/resources/messages/batches.js +0 -1
- package/resources/messages/batches.js.map +1 -1
- package/resources/messages/batches.mjs +0 -1
- package/resources/messages/batches.mjs.map +1 -1
- package/resources/messages/index.d.mts +1 -1
- package/resources/messages/index.d.mts.map +1 -1
- package/resources/messages/index.d.ts +1 -1
- package/resources/messages/index.d.ts.map +1 -1
- package/resources/messages/index.js +0 -1
- package/resources/messages/index.js.map +1 -1
- package/resources/messages/index.mjs +0 -1
- package/resources/messages/index.mjs.map +1 -1
- package/resources/messages/messages.d.mts +101 -64
- package/resources/messages/messages.d.mts.map +1 -1
- package/resources/messages/messages.d.ts +101 -64
- package/resources/messages/messages.d.ts.map +1 -1
- package/resources/messages/messages.js +115 -113
- package/resources/messages/messages.js.map +1 -1
- package/resources/messages/messages.mjs +115 -113
- package/resources/messages/messages.mjs.map +1 -1
- package/resources/messages.d.mts.map +1 -1
- package/resources/messages.d.ts.map +1 -1
- package/resources/messages.js +0 -1
- package/resources/messages.js.map +1 -1
- package/resources/messages.mjs +0 -1
- package/resources/messages.mjs.map +1 -1
- package/resources/models.d.mts.map +1 -1
- package/resources/models.d.ts.map +1 -1
- package/resources/models.js +0 -1
- package/resources/models.js.map +1 -1
- package/resources/models.mjs +0 -1
- package/resources/models.mjs.map +1 -1
- package/resources/shared.d.mts.map +1 -1
- package/resources/shared.d.ts.map +1 -1
- package/resources/shared.js +0 -1
- package/resources/shared.js.map +1 -1
- package/resources/shared.mjs +0 -1
- package/resources/shared.mjs.map +1 -1
- package/resources/skills/index.d.mts.map +1 -1
- package/resources/skills/index.d.ts.map +1 -1
- package/resources/skills/index.js +0 -1
- package/resources/skills/index.js.map +1 -1
- package/resources/skills/index.mjs +0 -1
- package/resources/skills/index.mjs.map +1 -1
- package/resources/skills/skills.d.mts.map +1 -1
- package/resources/skills/skills.d.ts.map +1 -1
- package/resources/skills/skills.js +88 -86
- package/resources/skills/skills.js.map +1 -1
- package/resources/skills/skills.mjs +88 -86
- package/resources/skills/skills.mjs.map +1 -1
- package/resources/skills/versions.d.mts.map +1 -1
- package/resources/skills/versions.d.ts.map +1 -1
- package/resources/skills/versions.js +0 -1
- package/resources/skills/versions.js.map +1 -1
- package/resources/skills/versions.mjs +0 -1
- package/resources/skills/versions.mjs.map +1 -1
- package/resources/skills.d.mts.map +1 -1
- package/resources/skills.d.ts.map +1 -1
- package/resources/skills.js +0 -1
- package/resources/skills.js.map +1 -1
- package/resources/skills.mjs +0 -1
- package/resources/skills.mjs.map +1 -1
- package/resources/top-level.js +0 -1
- package/resources/top-level.js.map +1 -1
- package/resources/top-level.mjs +0 -1
- package/resources/top-level.mjs.map +1 -1
- package/src/client.ts +19 -21
- package/src/core/api-promise.ts +0 -2
- package/src/core/error.ts +0 -2
- package/src/core/pagination.ts +0 -2
- package/src/core/resource.ts +0 -2
- package/src/index.ts +0 -2
- package/src/internal/builtin-types.ts +0 -2
- package/src/internal/detect-platform.ts +0 -2
- package/src/internal/errors.ts +0 -2
- package/src/internal/headers.ts +0 -2
- package/src/internal/node.browser.ts +7 -7
- package/src/internal/parse.ts +0 -2
- package/src/internal/request-options.ts +1 -3
- package/src/internal/shim-types.ts +0 -2
- package/src/internal/shims.ts +0 -2
- package/src/internal/types.ts +0 -2
- package/src/internal/utils/base64.ts +0 -2
- package/src/internal/utils/bytes.ts +1 -1
- package/src/internal/utils/env.ts +0 -2
- package/src/internal/utils/log.ts +0 -2
- package/src/internal/utils/query.ts +0 -2
- package/src/internal/utils/uuid.ts +0 -2
- package/src/internal/utils/values.ts +0 -2
- package/src/internal/utils.ts +0 -2
- package/src/lib/.keep +0 -2
- package/src/lib/environments/worker.ts +29 -15
- package/src/resources/beta/agents/agents.ts +110 -24
- package/src/resources/beta/agents/index.ts +1 -2
- package/src/resources/beta/agents/versions.ts +0 -2
- package/src/resources/beta/agents.ts +0 -2
- package/src/resources/beta/beta.ts +31 -3
- package/src/resources/beta/deployment-runs.ts +0 -2
- package/src/resources/beta/deployments.ts +0 -2
- package/src/resources/beta/dreams.ts +2 -30
- package/src/resources/beta/environments/environments.ts +2 -4
- package/src/resources/beta/environments/index.ts +0 -2
- package/src/resources/beta/environments/work.ts +0 -2
- package/src/resources/beta/environments.ts +0 -2
- package/src/resources/beta/files.ts +0 -2
- package/src/resources/beta/index.ts +14 -2
- package/src/resources/beta/memory-stores/index.ts +0 -2
- package/src/resources/beta/memory-stores/memories.ts +0 -2
- package/src/resources/beta/memory-stores/memory-stores.ts +0 -2
- package/src/resources/beta/memory-stores/memory-versions.ts +0 -2
- package/src/resources/beta/memory-stores.ts +0 -2
- package/src/resources/beta/messages/batches.ts +13 -3
- package/src/resources/beta/messages/index.ts +10 -2
- package/src/resources/beta/messages/messages.ts +290 -102
- package/src/resources/beta/messages.ts +0 -2
- package/src/resources/beta/models.ts +25 -2
- package/src/resources/beta/organization/api-keys.ts +0 -2
- package/src/resources/beta/organization/compliance-settings.ts +0 -2
- package/src/resources/beta/organization/external-keys.ts +0 -2
- package/src/resources/beta/organization/federation/federation.ts +0 -2
- package/src/resources/beta/organization/federation/index.ts +0 -2
- package/src/resources/beta/organization/federation/issuers.ts +0 -2
- package/src/resources/beta/organization/federation/rules/index.ts +0 -2
- package/src/resources/beta/organization/federation/rules/rules.ts +0 -2
- package/src/resources/beta/organization/federation/rules/workspaces.ts +0 -2
- package/src/resources/beta/organization/federation/rules.ts +0 -2
- package/src/resources/beta/organization/federation.ts +0 -2
- package/src/resources/beta/organization/index.ts +0 -2
- package/src/resources/beta/organization/invites.ts +0 -2
- package/src/resources/beta/organization/organization.ts +0 -2
- package/src/resources/beta/organization/rate-limits.ts +0 -2
- package/src/resources/beta/organization/service-accounts/index.ts +0 -2
- package/src/resources/beta/organization/service-accounts/service-accounts.ts +0 -2
- package/src/resources/beta/organization/service-accounts/workspaces.ts +0 -2
- package/src/resources/beta/organization/service-accounts.ts +0 -2
- package/src/resources/beta/organization/users.ts +0 -2
- package/src/resources/beta/organization/workspaces/index.ts +0 -2
- package/src/resources/beta/organization/workspaces/members.ts +0 -2
- package/src/resources/beta/organization/workspaces/rate-limits.ts +0 -2
- package/src/resources/beta/organization/workspaces/service-accounts.ts +0 -2
- package/src/resources/beta/organization/workspaces/workspaces.ts +3 -5
- package/src/resources/beta/organization/workspaces.ts +0 -2
- package/src/resources/beta/organization.ts +0 -2
- package/src/resources/beta/sessions/events.ts +121 -23
- package/src/resources/beta/sessions/index.ts +8 -2
- package/src/resources/beta/sessions/resources.ts +0 -5
- package/src/resources/beta/sessions/sessions.ts +24 -9
- package/src/resources/beta/sessions/threads/events.ts +0 -2
- package/src/resources/beta/sessions/threads/index.ts +0 -2
- package/src/resources/beta/sessions/threads/threads.ts +0 -2
- package/src/resources/beta/sessions/threads.ts +0 -2
- package/src/resources/beta/sessions.ts +0 -2
- package/src/resources/beta/skills/index.ts +0 -2
- package/src/resources/beta/skills/skills.ts +0 -2
- package/src/resources/beta/skills/versions.ts +0 -2
- package/src/resources/beta/skills.ts +0 -2
- package/src/resources/beta/tunnels/certificates.ts +0 -2
- package/src/resources/beta/tunnels/index.ts +0 -2
- package/src/resources/beta/tunnels/tunnels.ts +0 -2
- package/src/resources/beta/tunnels.ts +0 -2
- package/src/resources/beta/user-profiles.ts +208 -15
- package/src/resources/beta/vaults/credentials.ts +0 -16
- package/src/resources/beta/vaults/index.ts +0 -2
- package/src/resources/beta/vaults/vaults.ts +0 -2
- package/src/resources/beta/vaults.ts +0 -2
- package/src/resources/beta/webhooks.ts +0 -2
- package/src/resources/beta.ts +0 -2
- package/src/resources/completions.ts +1 -3
- package/src/resources/files.ts +0 -2
- package/src/resources/index.ts +6 -2
- package/src/resources/messages/batches.ts +0 -2
- package/src/resources/messages/index.ts +6 -2
- package/src/resources/messages/messages.ts +130 -65
- package/src/resources/messages.ts +0 -2
- package/src/resources/models.ts +0 -2
- package/src/resources/shared.ts +0 -2
- package/src/resources/skills/index.ts +0 -2
- package/src/resources/skills/skills.ts +0 -2
- package/src/resources/skills/versions.ts +0 -2
- package/src/resources/skills.ts +0 -2
- package/src/tsconfig.json +13 -3
- package/src/version.ts +1 -1
- package/tools/agent-toolset/fs-util.js +0 -6
- package/tools/agent-toolset/fs-util.js.map +1 -1
- package/tools/agent-toolset/fs-util.mjs +0 -6
- package/tools/agent-toolset/fs-util.mjs.map +1 -1
- package/tools/agent-toolset/memories.js +4 -4
- package/tools/agent-toolset/memories.js.map +1 -1
- package/tools/agent-toolset/memories.mjs +2 -2
- package/tools/agent-toolset/memories.mjs.map +1 -1
- package/tools/agent-toolset/node.browser.js +12 -12
- package/tools/agent-toolset/node.browser.js.map +1 -1
- package/tools/agent-toolset/node.js +142 -139
- package/tools/agent-toolset/node.js.map +1 -1
- package/tools/agent-toolset/node.mjs +132 -125
- package/tools/agent-toolset/node.mjs.map +1 -1
- package/tools/agent-toolset/skills.js +5 -5
- package/tools/agent-toolset/skills.js.map +1 -1
- package/tools/agent-toolset/sync-interval.js +3 -3
- package/tools/agent-toolset/sync-interval.js.map +1 -1
- package/tools/memory/node.browser.js +2 -2
- package/tools/memory/node.browser.js.map +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -92,322 +92,374 @@ export function sessionsTokenFromSecret(secret) {
|
|
|
92
92
|
* await client.beta.environments.work.worker({ workdir: '/workspace' }).handleItem();
|
|
93
93
|
* ```
|
|
94
94
|
*/
|
|
95
|
-
export
|
|
96
|
-
constructor(opts) {
|
|
97
|
-
_EnvironmentWorker_instances.add(this);
|
|
98
|
-
_EnvironmentWorker_signal.set(this, void 0);
|
|
99
|
-
if (opts.unrestrictedPaths !== undefined) {
|
|
100
|
-
throw new AnthropicError('The `unrestrictedPaths` option you passed to EnvironmentWorker (or ' +
|
|
101
|
-
'client.beta.environments.work.worker()) is no longer supported. ' +
|
|
102
|
-
"The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` " +
|
|
103
|
-
"plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the " +
|
|
104
|
-
'file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a ' +
|
|
105
|
-
'`tools` factory.');
|
|
106
|
-
}
|
|
107
|
-
this.client = opts.client;
|
|
108
|
-
this.environmentId = opts.environmentId;
|
|
109
|
-
this.environmentKey = opts.environmentKey;
|
|
110
|
-
this.tools = opts.tools;
|
|
111
|
-
this.workdir = opts.workdir ?? process.cwd();
|
|
112
|
-
this.maxFileBytes = opts.maxFileBytes;
|
|
113
|
-
this.maxIdleMs = opts.maxIdleMs;
|
|
114
|
-
if (opts.memorySyncIntervalMs != null) {
|
|
115
|
-
checkMemorySyncInterval(opts.memorySyncIntervalMs, 'memorySyncIntervalMs');
|
|
116
|
-
}
|
|
117
|
-
this.memorySyncIntervalMs = opts.memorySyncIntervalMs;
|
|
118
|
-
this.memorySyncDeletions = opts.memorySyncDeletions ?? 'enabled';
|
|
119
|
-
this.workerId = opts.workerId;
|
|
120
|
-
this.requestOptions = opts.requestOptions;
|
|
121
|
-
__classPrivateFieldSet(this, _EnvironmentWorker_signal, opts.signal, "f");
|
|
122
|
-
}
|
|
95
|
+
export var EnvironmentWorker = /* @__PURE__ */ (() => {
|
|
123
96
|
/**
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
97
|
+
* The self-hosted environment runner, composed from the control-plane
|
|
98
|
+
* {@link WorkPoller} and the per-session {@link SessionToolRunner}.
|
|
99
|
+
*
|
|
100
|
+
* For each claimed `session` work item it: builds the per-session
|
|
101
|
+
* {@link AgentToolContext}, downloads the session agent's skills
|
|
102
|
+
* (`setupSkills`), then runs a {@link SessionToolRunner} for the session
|
|
103
|
+
* while heartbeating the work-item lease on the same event loop; on exit it
|
|
104
|
+
* force-stops the work item (unless the lease was lost, in which case the item
|
|
105
|
+
* is left to whoever holds it now), cleans up the downloaded skills, and loops
|
|
106
|
+
* to the next one. The lease heartbeat reports `state === "stopping"` / a lost
|
|
107
|
+
* lease back into the run by aborting the session runner.
|
|
108
|
+
*
|
|
109
|
+
* The `environmentKey` is the worker's standing credential. When a claimed
|
|
110
|
+
* work item carries a per-item `secret` (a short-lived payload the poll
|
|
111
|
+
* response may populate), the sessions token extracted from it is preferred
|
|
112
|
+
* over the environment key for that item's heartbeat / force-stop /
|
|
113
|
+
* skill-download / session calls; polling itself always uses the environment
|
|
114
|
+
* key, and items without a usable secret fall back to it entirely.
|
|
115
|
+
*
|
|
116
|
+
* Use {@link EnvironmentWorker.handleItem} if you already hold a claimed work
|
|
117
|
+
* item (e.g. a `worker poll --on-work` script handed one to a fresh process) and
|
|
118
|
+
* just want the per-item flow without the poll loop — with no arguments it reads
|
|
119
|
+
* the `ANTHROPIC_*` env vars that command sets.
|
|
120
|
+
*
|
|
121
|
+
* Construct it via `client.beta.environments.work.worker({ ... })` (or
|
|
122
|
+
* `new EnvironmentWorker({ client, ... })` directly).
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* // Long-running daemon: poll for work, serve each session, loop.
|
|
127
|
+
* await client.beta.environments.work
|
|
128
|
+
* .worker({ environmentId, environmentKey, workdir: '/workspace' })
|
|
129
|
+
* .run(AbortSignal.timeout(60 * 60_000));
|
|
130
|
+
*
|
|
131
|
+
* // Already-claimed item (e.g. inside `ant worker poll --on-work ...`):
|
|
132
|
+
* await client.beta.environments.work.worker({ workdir: '/workspace' }).handleItem();
|
|
133
|
+
* ```
|
|
127
134
|
*/
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
class EnvironmentWorker {
|
|
136
|
+
constructor(opts) {
|
|
137
|
+
_EnvironmentWorker_instances.add(this);
|
|
138
|
+
_EnvironmentWorker_signal.set(this, void 0);
|
|
139
|
+
if (opts.unrestrictedPaths !== undefined) {
|
|
140
|
+
throw new AnthropicError('The `unrestrictedPaths` option you passed to EnvironmentWorker (or ' +
|
|
141
|
+
'client.beta.environments.work.worker()) is no longer supported. ' +
|
|
142
|
+
"The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` " +
|
|
143
|
+
"plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the " +
|
|
144
|
+
'file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a ' +
|
|
145
|
+
'`tools` factory.');
|
|
146
|
+
}
|
|
147
|
+
this.client = opts.client;
|
|
148
|
+
this.environmentId = opts.environmentId;
|
|
149
|
+
this.environmentKey = opts.environmentKey;
|
|
150
|
+
this.tools = opts.tools;
|
|
151
|
+
this.workdir = opts.workdir ?? process.cwd();
|
|
152
|
+
this.maxFileBytes = opts.maxFileBytes;
|
|
153
|
+
this.maxIdleMs = opts.maxIdleMs;
|
|
154
|
+
if (opts.memorySyncIntervalMs != null) {
|
|
155
|
+
checkMemorySyncInterval(opts.memorySyncIntervalMs, 'memorySyncIntervalMs');
|
|
156
|
+
}
|
|
157
|
+
this.memorySyncIntervalMs = opts.memorySyncIntervalMs;
|
|
158
|
+
this.memorySyncDeletions = opts.memorySyncDeletions ?? 'enabled';
|
|
159
|
+
this.workerId = opts.workerId;
|
|
160
|
+
this.requestOptions = opts.requestOptions;
|
|
161
|
+
__classPrivateFieldSet(this, _EnvironmentWorker_signal, opts.signal, "f");
|
|
132
162
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// be the single owner of `work.stop` rather than double-posting from the
|
|
143
|
-
// poller.
|
|
144
|
-
autoStop: false,
|
|
145
|
-
});
|
|
146
|
-
for await (const work of poller) {
|
|
147
|
-
try {
|
|
148
|
-
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal);
|
|
163
|
+
/**
|
|
164
|
+
* Poll the environment and service each claimed session until the supplied
|
|
165
|
+
* signal (or the one passed to the constructor) aborts. Throws if
|
|
166
|
+
* `environmentId` / `environmentKey` were not provided to the constructor.
|
|
167
|
+
*/
|
|
168
|
+
async run(signal) {
|
|
169
|
+
const { environmentId, environmentKey } = this;
|
|
170
|
+
if (environmentId === undefined || environmentKey === undefined) {
|
|
171
|
+
throw new AnthropicError('EnvironmentWorker.run: environmentId and environmentKey are required to poll for work');
|
|
149
172
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
173
|
+
const externalSignal = signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f");
|
|
174
|
+
const poller = new WorkPoller({
|
|
175
|
+
client: this.client,
|
|
176
|
+
environmentId,
|
|
177
|
+
environmentKey,
|
|
178
|
+
...(this.workerId !== undefined ? { workerId: this.workerId } : {}),
|
|
179
|
+
...(externalSignal ? { signal: externalSignal } : {}),
|
|
180
|
+
...(this.requestOptions !== undefined ? { requestOptions: this.requestOptions } : {}),
|
|
181
|
+
// The per-item handler stops or releases every work item on exit; let it
|
|
182
|
+
// be the single owner of `work.stop` rather than double-posting from the
|
|
183
|
+
// poller.
|
|
184
|
+
autoStop: false,
|
|
185
|
+
});
|
|
186
|
+
for await (const work of poller) {
|
|
187
|
+
try {
|
|
188
|
+
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
// One bad item fails that item, not the worker: the handler's teardown
|
|
192
|
+
// already stopped or released it, so the next poll claims the next
|
|
193
|
+
// item. A store directory left behind by a killed worker would
|
|
194
|
+
// otherwise crashloop this process forever.
|
|
195
|
+
if (poller.signal?.aborted)
|
|
196
|
+
throw e;
|
|
197
|
+
loggerFor(this.client).error('work item failed', { work_id: work.id, error: String(e) });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Service a single, already-claimed work item without the poll loop: build the
|
|
203
|
+
* per-session {@link AgentToolContext} (workdir from this worker's options),
|
|
204
|
+
* download the session agent's skills (`setupSkills`), run a
|
|
205
|
+
* {@link SessionToolRunner} for the session while heartbeating the work-item
|
|
206
|
+
* lease, and force-stop the work item on exit (whether the runner finishes
|
|
207
|
+
* normally, throws, or the control plane signals shutdown). The one
|
|
208
|
+
* exception is a lost lease: the item then belongs to the queue or another
|
|
209
|
+
* worker and is left alone.
|
|
210
|
+
*
|
|
211
|
+
* Use this when something else does the claiming — e.g. a `worker poll
|
|
212
|
+
* --on-work` script that hands an already-claimed item to a fresh process. The
|
|
213
|
+
* work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` /
|
|
214
|
+
* `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that
|
|
215
|
+
* command sets) when not passed; the environment key resolves from this
|
|
216
|
+
* option, then the worker's own `environmentKey`, then
|
|
217
|
+
* `ANTHROPIC_ENVIRONMENT_KEY`, and is needed only when the work item's
|
|
218
|
+
* `secret` yields no sessions token — a host that receives only the
|
|
219
|
+
* per-item secret runs without ever holding the key. With no arguments
|
|
220
|
+
* inside that command it just works. Throws a clear error naming the first
|
|
221
|
+
* required value still missing after resolution, and — rather than ever
|
|
222
|
+
* running unauthenticated — when neither a sessions token nor an
|
|
223
|
+
* environment key resolved. Throws `SessionMemoryError` when the
|
|
224
|
+
* session has memory stores attached but they cannot be mounted — the work
|
|
225
|
+
* item carried no sessions token (unless `memorySyncIntervalMs` turned
|
|
226
|
+
* memory off), or a store failed to download.
|
|
227
|
+
*
|
|
228
|
+
* `workSecret` is the work item's per-item `secret` payload from the poll
|
|
229
|
+
* response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is
|
|
230
|
+
* optional — when present, the sessions token extracted from it is preferred
|
|
231
|
+
* as the Bearer credential for this item's heartbeat / force-stop / session
|
|
232
|
+
* calls; when absent (or undecodable) those calls use the environment key.
|
|
233
|
+
*/
|
|
234
|
+
async handleItem(opts) {
|
|
235
|
+
const workId = opts?.workId ?? readEnv('ANTHROPIC_WORK_ID');
|
|
236
|
+
const environmentId = opts?.environmentId ?? readEnv('ANTHROPIC_ENVIRONMENT_ID');
|
|
237
|
+
const sessionId = opts?.sessionId ?? readEnv('ANTHROPIC_SESSION_ID');
|
|
238
|
+
// Trailing `|| undefined` / `||` between fallbacks so an empty value reads
|
|
239
|
+
// as absent (matching how `readEnv` treats empty values).
|
|
240
|
+
const environmentKey = (opts?.environmentKey ?? this.environmentKey ?? readEnv('ANTHROPIC_ENVIRONMENT_KEY')) || undefined;
|
|
241
|
+
const workSecret = opts?.workSecret || readEnv('ANTHROPIC_WORK_SECRET') || null;
|
|
242
|
+
if (!workId) {
|
|
243
|
+
throw new AnthropicError('handleItem: workId is required — pass it or set ANTHROPIC_WORK_ID');
|
|
244
|
+
}
|
|
245
|
+
if (!environmentId) {
|
|
246
|
+
throw new AnthropicError('handleItem: environmentId is required — pass it or set ANTHROPIC_ENVIRONMENT_ID');
|
|
247
|
+
}
|
|
248
|
+
if (!sessionId) {
|
|
249
|
+
throw new AnthropicError('handleItem: sessionId is required — pass it or set ANTHROPIC_SESSION_ID');
|
|
158
250
|
}
|
|
251
|
+
if (!environmentKey && !workSecret) {
|
|
252
|
+
throw new AnthropicError('handleItem: environmentKey is required when there is no work secret — pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY');
|
|
253
|
+
}
|
|
254
|
+
const work = {
|
|
255
|
+
id: workId,
|
|
256
|
+
environment_id: environmentId,
|
|
257
|
+
secret: workSecret,
|
|
258
|
+
data: { type: 'session', id: sessionId },
|
|
259
|
+
};
|
|
260
|
+
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f"));
|
|
159
261
|
}
|
|
160
262
|
}
|
|
263
|
+
_EnvironmentWorker_signal = new WeakMap(), _EnvironmentWorker_instances = new WeakSet(), _EnvironmentWorker_handleItem =
|
|
161
264
|
/**
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* lease, and force-stop the work item on exit (whether the runner finishes
|
|
167
|
-
* normally, throws, or the control plane signals shutdown). The one
|
|
168
|
-
* exception is a lost lease: the item then belongs to the queue or another
|
|
169
|
-
* worker and is left alone.
|
|
170
|
-
*
|
|
171
|
-
* Use this when something else does the claiming — e.g. a `worker poll
|
|
172
|
-
* --on-work` script that hands an already-claimed item to a fresh process. The
|
|
173
|
-
* work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` /
|
|
174
|
-
* `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that
|
|
175
|
-
* command sets) when not passed; the environment key resolves from this
|
|
176
|
-
* option, then the worker's own `environmentKey`, then
|
|
177
|
-
* `ANTHROPIC_ENVIRONMENT_KEY`. With no arguments inside that command it just
|
|
178
|
-
* works. Throws a clear error naming the first of the four required values
|
|
179
|
-
* still missing after resolution. Throws `SessionMemoryError` when the
|
|
180
|
-
* session has memory stores attached but they cannot be mounted — the work
|
|
181
|
-
* item carried no sessions token (unless `memorySyncIntervalMs` turned
|
|
182
|
-
* memory off), or a store failed to download.
|
|
265
|
+
* The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and
|
|
266
|
+
* {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the
|
|
267
|
+
* work item's session while heartbeating its lease, force-stopping on exit
|
|
268
|
+
* unless the lease was lost. Non-session work items are ignored.
|
|
183
269
|
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
270
|
+
* When the poll response carried a per-item `secret` (a short-lived payload
|
|
271
|
+
* scoped to this work item), the sessions token extracted from it is
|
|
272
|
+
* preferred over `environmentKey` as the Bearer credential for those
|
|
273
|
+
* per-item calls; a missing/undecodable secret falls back to
|
|
274
|
+
* `environmentKey` unchanged.
|
|
189
275
|
*/
|
|
190
|
-
async
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
throw new AnthropicError('handleItem: environmentId is required — pass it or set ANTHROPIC_ENVIRONMENT_ID');
|
|
203
|
-
}
|
|
204
|
-
if (!sessionId) {
|
|
205
|
-
throw new AnthropicError('handleItem: sessionId is required — pass it or set ANTHROPIC_SESSION_ID');
|
|
206
|
-
}
|
|
207
|
-
if (!environmentKey) {
|
|
208
|
-
throw new AnthropicError('handleItem: environmentKey is required — pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY');
|
|
209
|
-
}
|
|
210
|
-
const work = {
|
|
211
|
-
id: workId,
|
|
212
|
-
environment_id: environmentId,
|
|
213
|
-
secret: workSecret,
|
|
214
|
-
data: { type: 'session', id: sessionId },
|
|
215
|
-
};
|
|
216
|
-
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f"));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
_EnvironmentWorker_signal = new WeakMap(), _EnvironmentWorker_instances = new WeakSet(), _EnvironmentWorker_handleItem =
|
|
220
|
-
/**
|
|
221
|
-
* The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and
|
|
222
|
-
* {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the
|
|
223
|
-
* work item's session while heartbeating its lease, force-stopping on exit
|
|
224
|
-
* unless the lease was lost. Non-session work items are ignored.
|
|
225
|
-
*
|
|
226
|
-
* When the poll response carried a per-item `secret` (a short-lived payload
|
|
227
|
-
* scoped to this work item), the sessions token extracted from it is
|
|
228
|
-
* preferred over `environmentKey` as the Bearer credential for those
|
|
229
|
-
* per-item calls; a missing/undecodable secret falls back to
|
|
230
|
-
* `environmentKey` unchanged.
|
|
231
|
-
*/
|
|
232
|
-
async function _EnvironmentWorker_handleItem(work, environmentKey, externalSignal) {
|
|
233
|
-
const log = loggerFor(this.client);
|
|
234
|
-
// The per-item credential: the sessions token carried inside the work
|
|
235
|
-
// item's secret payload when the server issued one, otherwise the
|
|
236
|
-
// environment key. Never log this value.
|
|
237
|
-
const sessionsToken = sessionsTokenFromSecret(work.secret);
|
|
238
|
-
if (work.secret && sessionsToken === null) {
|
|
239
|
-
log.warn('work item carried a secret payload but no sessions token could be extracted; ' +
|
|
240
|
-
'falling back to the environment key', { work_id: work.id });
|
|
241
|
-
}
|
|
242
|
-
const itemCredential = sessionsToken ?? environmentKey;
|
|
243
|
-
// Every per-session call — the SessionToolRunner event stream/list/send, the
|
|
244
|
-
// lease heartbeat, the skill download, and the work force-stop —
|
|
245
|
-
// authenticates with the per-item credential. Scope a client to it once and
|
|
246
|
-
// thread that through. `copyClientForHelper` also clears the parent's
|
|
247
|
-
// `apiKey`, so the sub-client emits *only* the bearer credential on the
|
|
248
|
-
// wire (a plain `withOptions({authToken})` would leave `X-Api-Key` set as
|
|
249
|
-
// well).
|
|
250
|
-
const sessionClient = copyClientForHelper(this.client, {
|
|
251
|
-
authToken: itemCredential,
|
|
252
|
-
helper: 'environments-worker',
|
|
253
|
-
});
|
|
254
|
-
// The poller runs with `autoStop: false`, so the per-item handler is the
|
|
255
|
-
// single owner of `work.stop` for every claimed item.
|
|
256
|
-
const sessionId = work.data.id;
|
|
257
|
-
// A per-session controller: aborts when the supplied signal aborts, when the
|
|
258
|
-
// session runner finishes, or when the lease heartbeat says to stop.
|
|
259
|
-
const ctrl = new AbortController();
|
|
260
|
-
const detachExternal = linkAbort(externalSignal, ctrl);
|
|
261
|
-
const lease = new Lease(ctrl);
|
|
262
|
-
// Lazily load the Node-only toolset module — see the import note at the top.
|
|
263
|
-
const agentToolset = await import("../../tools/agent-toolset/node.mjs");
|
|
264
|
-
// Start the lease heartbeat BEFORE the session fetch and the skill /
|
|
265
|
-
// memory downloads: those can take longer than the lease TTL, and an
|
|
266
|
-
// unheartbeated lease lapsing mid-download would let another worker
|
|
267
|
-
// reclaim the item and serve the same session (split-brain).
|
|
268
|
-
//
|
|
269
|
-
// Each heartbeat reports the lease TTL the server is enforcing; it becomes
|
|
270
|
-
// the runner's tool-result send retry window so a send keeps retrying
|
|
271
|
-
// exactly as long as the lease could still be live. The runner is only
|
|
272
|
-
// built after the downloads, so hold the latest TTL until then.
|
|
273
|
-
let leaseTtlMs;
|
|
274
|
-
let runner;
|
|
275
|
-
const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => {
|
|
276
|
-
leaseTtlMs = ttlMs;
|
|
277
|
-
runner?._setSendRetryWindow(ttlMs);
|
|
278
|
-
}).catch((e) => {
|
|
279
|
-
if (!ctrl.signal.aborted)
|
|
280
|
-
log.error('heartbeat loop failed', { work_id: work.id, error: String(e) });
|
|
281
|
-
ctrl.abort();
|
|
282
|
-
});
|
|
283
|
-
let cleanupSkills = async () => { };
|
|
284
|
-
let stores;
|
|
285
|
-
let cleanEnd = false;
|
|
286
|
-
try {
|
|
287
|
-
if (work.data.type !== 'session') {
|
|
288
|
-
log.debug('skipping non-session work item', { work_id: work.id, type: work.data.type });
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
// One session fetch, shared by the skills download and the memory-store
|
|
292
|
-
// download — two fetches could disagree about the attached resources.
|
|
293
|
-
// A failed fetch fails the work item (the teardown below still stops
|
|
294
|
-
// or releases it).
|
|
295
|
-
const session = await sessionClient.beta.sessions.retrieve(sessionId);
|
|
296
|
-
// Only with the session in hand can we tell one that simply has no
|
|
297
|
-
// memory from one whose memory we cannot mount. Turning memory off
|
|
298
|
-
// with the interval knob is a deliberate opt-out and stays quiet.
|
|
299
|
-
if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) {
|
|
300
|
-
throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token ` +
|
|
301
|
-
`(work_id=${work.id}, session_id=${sessionId}); ` +
|
|
302
|
-
'the memory endpoints reject the environment key, so the poller must issue a per-item ' +
|
|
303
|
-
'`secret` carrying `sessions_token`, or set `memorySyncIntervalMs: null` to run without memory');
|
|
304
|
-
}
|
|
305
|
-
const ctx = {
|
|
306
|
-
workdir: this.workdir,
|
|
307
|
-
// The scoped sub-client, not the parent: the skill download
|
|
308
|
-
// `setupSkills` performs for this session rides the same per-item
|
|
309
|
-
// credential as every other per-item call.
|
|
310
|
-
client: sessionClient,
|
|
311
|
-
session,
|
|
312
|
-
...(this.maxFileBytes !== undefined ? { maxFileBytes: this.maxFileBytes } : {}),
|
|
313
|
-
};
|
|
314
|
-
try {
|
|
315
|
-
cleanupSkills = await agentToolset.setupSkills(ctx);
|
|
316
|
-
}
|
|
317
|
-
catch (e) {
|
|
318
|
-
log.warn('skill setup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
319
|
-
}
|
|
320
|
-
// Memory stores: the memory_stores endpoints accept the per-item sessions
|
|
321
|
-
// token but reject the environment key, so download and sync only run when
|
|
322
|
-
// the item carried a usable secret (and the interval is set).
|
|
323
|
-
// `sessionClient` is already scoped to that token then, so the memory
|
|
324
|
-
// calls ride the same sub-client. A store that cannot be materialised
|
|
325
|
-
// throws `SessionMemoryError` out of `download` and fails the item.
|
|
326
|
-
if (sessionsToken !== null && this.memorySyncIntervalMs !== null) {
|
|
327
|
-
stores = new agentToolset.SessionMemoryStores(sessionClient, {
|
|
328
|
-
workdir: this.workdir,
|
|
329
|
-
...(this.memorySyncIntervalMs !== undefined ? { syncIntervalMs: this.memorySyncIntervalMs } : {}),
|
|
330
|
-
syncDeletions: this.memorySyncDeletions,
|
|
331
|
-
});
|
|
332
|
-
await stores.download(session);
|
|
333
|
-
// A store mounted outside the workdir must stay reachable by the file
|
|
334
|
-
// tools; read-only stores still refuse writes.
|
|
335
|
-
ctx.allowedRoots = stores.roots;
|
|
336
|
-
ctx.readOnlyRoots = stores.readOnlyRoots;
|
|
276
|
+
async function _EnvironmentWorker_handleItem(work, environmentKey, externalSignal) {
|
|
277
|
+
const log = loggerFor(this.client);
|
|
278
|
+
// The per-item credential: the sessions token carried inside the work
|
|
279
|
+
// item's secret payload when the server issued one, otherwise the
|
|
280
|
+
// environment key. Never log this value.
|
|
281
|
+
const sessionsToken = sessionsTokenFromSecret(work.secret);
|
|
282
|
+
const itemCredential = sessionsToken ?? environmentKey;
|
|
283
|
+
if (itemCredential === undefined) {
|
|
284
|
+
throw new AnthropicError('handleItem: the work item carried a secret payload but no sessions token could be extracted, ' +
|
|
285
|
+
'and there is no environment key to fall back to; the poller must issue a secret whose ' +
|
|
286
|
+
'payload carries `sessions_token`, or provide the environment key (pass it, construct the ' +
|
|
287
|
+
'worker with it, or set ANTHROPIC_ENVIRONMENT_KEY)');
|
|
337
288
|
}
|
|
338
|
-
|
|
339
|
-
log.
|
|
289
|
+
if (work.secret && sessionsToken === null) {
|
|
290
|
+
log.warn('work item carried a secret payload but no sessions token could be extracted; ' +
|
|
291
|
+
'falling back to the environment key', { work_id: work.id });
|
|
340
292
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
293
|
+
// Every per-session call — the SessionToolRunner event stream/list/send, the
|
|
294
|
+
// lease heartbeat, the skill download, and the work force-stop —
|
|
295
|
+
// authenticates with the per-item credential. Scope a client to it once and
|
|
296
|
+
// thread that through. `copyClientForHelper` also clears the parent's
|
|
297
|
+
// `apiKey`, so the sub-client emits *only* the bearer credential on the
|
|
298
|
+
// wire (a plain `withOptions({authToken})` would leave `X-Api-Key` set as
|
|
299
|
+
// well).
|
|
300
|
+
const sessionClient = copyClientForHelper(this.client, {
|
|
301
|
+
authToken: itemCredential,
|
|
302
|
+
helper: 'environments-worker',
|
|
350
303
|
});
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
//
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
//
|
|
304
|
+
// The poller runs with `autoStop: false`, so the per-item handler is the
|
|
305
|
+
// single owner of `work.stop` for every claimed item.
|
|
306
|
+
const sessionId = work.data.id;
|
|
307
|
+
// A per-session controller: aborts when the supplied signal aborts, when the
|
|
308
|
+
// session runner finishes, or when the lease heartbeat says to stop.
|
|
309
|
+
const ctrl = new AbortController();
|
|
310
|
+
const detachExternal = linkAbort(externalSignal, ctrl);
|
|
311
|
+
const lease = new Lease(ctrl);
|
|
312
|
+
// Lazily load the Node-only toolset module — see the import note at the top.
|
|
313
|
+
const agentToolset = await import("../../tools/agent-toolset/node.mjs");
|
|
314
|
+
// Start the lease heartbeat BEFORE the session fetch and the skill /
|
|
315
|
+
// memory downloads: those can take longer than the lease TTL, and an
|
|
316
|
+
// unheartbeated lease lapsing mid-download would let another worker
|
|
317
|
+
// reclaim the item and serve the same session (split-brain).
|
|
318
|
+
//
|
|
319
|
+
// Each heartbeat reports the lease TTL the server is enforcing; it becomes
|
|
320
|
+
// the runner's tool-result send retry window so a send keeps retrying
|
|
321
|
+
// exactly as long as the lease could still be live. The runner is only
|
|
322
|
+
// built after the downloads, so hold the latest TTL until then.
|
|
323
|
+
let leaseTtlMs;
|
|
324
|
+
let runner;
|
|
325
|
+
const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => {
|
|
326
|
+
leaseTtlMs = ttlMs;
|
|
327
|
+
runner?._setSendRetryWindow(ttlMs);
|
|
328
|
+
}).catch((e) => {
|
|
329
|
+
if (!ctrl.signal.aborted)
|
|
330
|
+
log.error('heartbeat loop failed', { work_id: work.id, error: String(e) });
|
|
331
|
+
ctrl.abort();
|
|
332
|
+
});
|
|
333
|
+
let cleanupSkills = async () => { };
|
|
334
|
+
let stores;
|
|
335
|
+
let cleanEnd = false;
|
|
366
336
|
try {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
337
|
+
if (work.data.type !== 'session') {
|
|
338
|
+
log.debug('skipping non-session work item', { work_id: work.id, type: work.data.type });
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
// One session fetch, shared by the skills download and the memory-store
|
|
342
|
+
// download — two fetches could disagree about the attached resources.
|
|
343
|
+
// A failed fetch fails the work item (the teardown below still stops
|
|
344
|
+
// or releases it).
|
|
345
|
+
const session = await sessionClient.beta.sessions.retrieve(sessionId);
|
|
346
|
+
// Only with the session in hand can we tell one that simply has no
|
|
347
|
+
// memory from one whose memory we cannot mount. Turning memory off
|
|
348
|
+
// with the interval knob is a deliberate opt-out and stays quiet.
|
|
349
|
+
if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) {
|
|
350
|
+
throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token ` +
|
|
351
|
+
`(work_id=${work.id}, session_id=${sessionId}); ` +
|
|
352
|
+
'the memory endpoints reject the environment key, so the poller must issue a per-item ' +
|
|
353
|
+
'`secret` carrying `sessions_token`, or set `memorySyncIntervalMs: null` to run without memory');
|
|
354
|
+
}
|
|
355
|
+
const ctx = {
|
|
356
|
+
workdir: this.workdir,
|
|
357
|
+
// The scoped sub-client, not the parent: the skill download
|
|
358
|
+
// `setupSkills` performs for this session rides the same per-item
|
|
359
|
+
// credential as every other per-item call.
|
|
360
|
+
client: sessionClient,
|
|
361
|
+
session,
|
|
362
|
+
...(this.maxFileBytes !== undefined ? { maxFileBytes: this.maxFileBytes } : {}),
|
|
363
|
+
};
|
|
364
|
+
try {
|
|
365
|
+
cleanupSkills = await agentToolset.setupSkills(ctx);
|
|
366
|
+
}
|
|
367
|
+
catch (e) {
|
|
368
|
+
log.warn('skill setup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
369
|
+
}
|
|
370
|
+
// Memory stores: the memory_stores endpoints accept the per-item sessions
|
|
371
|
+
// token but reject the environment key, so download and sync only run when
|
|
372
|
+
// the item carried a usable secret (and the interval is set).
|
|
373
|
+
// `sessionClient` is already scoped to that token then, so the memory
|
|
374
|
+
// calls ride the same sub-client. A store that cannot be materialised
|
|
375
|
+
// throws `SessionMemoryError` out of `download` and fails the item.
|
|
376
|
+
if (sessionsToken !== null && this.memorySyncIntervalMs !== null) {
|
|
377
|
+
stores = new agentToolset.SessionMemoryStores(sessionClient, {
|
|
378
|
+
workdir: this.workdir,
|
|
379
|
+
...(this.memorySyncIntervalMs !== undefined ? { syncIntervalMs: this.memorySyncIntervalMs } : {}),
|
|
380
|
+
syncDeletions: this.memorySyncDeletions,
|
|
381
|
+
});
|
|
382
|
+
await stores.download(session);
|
|
383
|
+
// A store mounted outside the workdir must stay reachable by the file
|
|
384
|
+
// tools; read-only stores still refuse writes.
|
|
385
|
+
ctx.allowedRoots = stores.roots;
|
|
386
|
+
ctx.readOnlyRoots = stores.readOnlyRoots;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
log.debug('memory stores disabled for this item', { work_id: work.id });
|
|
390
|
+
}
|
|
391
|
+
const tools = typeof this.tools === 'function' ?
|
|
392
|
+
this.tools(ctx)
|
|
393
|
+
: this.tools ?? agentToolset.betaAgentToolset20260401(ctx);
|
|
394
|
+
runner = new SessionToolRunner(sessionId, {
|
|
395
|
+
client: sessionClient,
|
|
396
|
+
tools,
|
|
397
|
+
...(this.maxIdleMs !== undefined ? { maxIdleMs: this.maxIdleMs } : {}),
|
|
398
|
+
...(this.requestOptions !== undefined ? { requestOptions: this.requestOptions } : {}),
|
|
399
|
+
signal: ctrl.signal,
|
|
370
400
|
});
|
|
401
|
+
if (leaseTtlMs !== undefined)
|
|
402
|
+
runner._setSendRetryWindow(leaseTtlMs);
|
|
403
|
+
for await (const _ of runner) {
|
|
404
|
+
// Drive the runner to completion; per-call observability is not part
|
|
405
|
+
// of this composition's surface — use `SessionToolRunner` directly
|
|
406
|
+
// (via `client.beta.sessions.events.toolRunner`) if you want it.
|
|
407
|
+
if (stores)
|
|
408
|
+
await stores.syncIfDue();
|
|
409
|
+
}
|
|
410
|
+
// Only a clean stream end earns the last full sync; it runs in the
|
|
411
|
+
// teardown below.
|
|
412
|
+
cleanEnd = !ctrl.signal.aborted;
|
|
371
413
|
}
|
|
372
414
|
finally {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
415
|
+
// The heartbeat keeps the lease alive until this teardown is done.
|
|
416
|
+
try {
|
|
417
|
+
// cleanupSkills first, so its failure cannot skip the memory flush.
|
|
418
|
+
await cleanupSkills().catch((e) => {
|
|
419
|
+
log.warn('skill cleanup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
finally {
|
|
423
|
+
if (stores) {
|
|
424
|
+
const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS;
|
|
425
|
+
if (cleanEnd) {
|
|
426
|
+
const finishCutOff = await withTimeout(stores.finish(), boundMs);
|
|
427
|
+
if (finishCutOff) {
|
|
428
|
+
log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id });
|
|
429
|
+
}
|
|
379
430
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
431
|
+
// Also after finish(): it swallows its own failures, and a
|
|
432
|
+
// clean flush is a no-op.
|
|
433
|
+
const flushBound = new AbortController();
|
|
434
|
+
const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs);
|
|
435
|
+
if (flushCutOff) {
|
|
436
|
+
flushBound.abort();
|
|
437
|
+
log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id });
|
|
438
|
+
}
|
|
439
|
+
await stores.dispose().catch((e) => {
|
|
440
|
+
log.warn('memory store cleanup failed', {
|
|
441
|
+
session_id: sessionId,
|
|
442
|
+
work_id: work.id,
|
|
443
|
+
error: String(e),
|
|
444
|
+
});
|
|
394
445
|
});
|
|
395
|
-
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
lease.finish('runner_done');
|
|
449
|
+
detachExternal();
|
|
450
|
+
await heartbeatPromise;
|
|
451
|
+
// Stop only an item this worker still holds — after a lost lease it
|
|
452
|
+
// belongs to the queue or another worker.
|
|
453
|
+
if (lease.lost) {
|
|
454
|
+
log.info('lease lost; released without stopping it', { session_id: sessionId, work_id: work.id });
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
await forceStop(sessionClient, work, log, this.requestOptions);
|
|
396
458
|
}
|
|
397
459
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
// Stop only an item this worker still holds — after a lost lease it
|
|
402
|
-
// belongs to the queue or another worker.
|
|
403
|
-
if (lease.lost) {
|
|
404
|
-
log.info('lease lost; released without stopping it', { session_id: sessionId, work_id: work.id });
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
await forceStop(sessionClient, work, log, this.requestOptions);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
};
|
|
460
|
+
};
|
|
461
|
+
return EnvironmentWorker;
|
|
462
|
+
})();
|
|
411
463
|
/**
|
|
412
464
|
* Resolve when `p` settles or `ms` elapses — `true` when `ms` elapsed
|
|
413
465
|
* first. A timed-out `p` keeps running — JS cannot cancel a promise.
|
|
@@ -442,31 +494,34 @@ async function forceStop(client, work, log, requestOptions) {
|
|
|
442
494
|
}
|
|
443
495
|
}
|
|
444
496
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
*
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
497
|
+
var Lease = /* @__PURE__ */ (() => {
|
|
498
|
+
/**
|
|
499
|
+
* This worker's view of one work-item lease: the per-item abort signal plus
|
|
500
|
+
* why heartbeating ended. The first recorded reason wins, so a run aborted
|
|
501
|
+
* *because* the lease was lost still reads as lost afterwards; an abort with
|
|
502
|
+
* no recorded reason (the external signal) is not lost.
|
|
503
|
+
*/
|
|
504
|
+
class Lease {
|
|
505
|
+
constructor(ctrl) {
|
|
506
|
+
_Lease_ctrl.set(this, void 0);
|
|
507
|
+
_Lease_endReason.set(this, void 0);
|
|
508
|
+
__classPrivateFieldSet(this, _Lease_ctrl, ctrl, "f");
|
|
509
|
+
}
|
|
510
|
+
get signal() {
|
|
511
|
+
return __classPrivateFieldGet(this, _Lease_ctrl, "f").signal;
|
|
512
|
+
}
|
|
513
|
+
finish(reason) {
|
|
514
|
+
__classPrivateFieldSet(this, _Lease_endReason, __classPrivateFieldGet(this, _Lease_endReason, "f") ?? reason, "f");
|
|
515
|
+
__classPrivateFieldGet(this, _Lease_ctrl, "f").abort();
|
|
516
|
+
}
|
|
517
|
+
/** True once the item belongs to the queue or another worker. */
|
|
518
|
+
get lost() {
|
|
519
|
+
return __classPrivateFieldGet(this, _Lease_endReason, "f") === 'lease_lost' || __classPrivateFieldGet(this, _Lease_endReason, "f") === 'assumed_lost';
|
|
520
|
+
}
|
|
467
521
|
}
|
|
468
|
-
|
|
469
|
-
|
|
522
|
+
_Lease_ctrl = new WeakMap(), _Lease_endReason = new WeakMap();
|
|
523
|
+
return Lease;
|
|
524
|
+
})();
|
|
470
525
|
/** The server's view of the lease carried by a 412 heartbeat response, or empty if absent. */
|
|
471
526
|
function serverLeaseState(e) {
|
|
472
527
|
let node = e instanceof APIError ? e.error : undefined;
|